import type { PoolOptions } from 'mysql2/promise';
import type { PoolConfig } from 'pg';
import type { ClassType } from '../types';
import { BaseDatabase, type BaseDatabaseOptions } from './database';
import type { DatabaseDriver } from './driver';
import { type MySQLPoolLike, type PgPoolLike } from './drivers';
import type { EntityClass } from './metadata';
export type DatabaseDialect = 'mysql' | 'postgres';
export interface SharedDatabaseConfig extends BaseDatabaseOptions {
    enableLocksTable?: boolean;
}
export interface MySQLDatabaseConfig extends PoolOptions, BaseDatabaseOptions {
    enableLocksTable?: boolean;
}
export interface PostgresDatabaseConfig extends PoolConfig, BaseDatabaseOptions {
    enableLocksTable?: boolean;
}
export declare function createDatabaseClass(driverFactory: () => DatabaseDriver, entities?: EntityClass[], options?: BaseDatabaseOptions): ClassType<BaseDatabase>;
export declare function createMySQLDatabase(config?: MySQLDatabaseConfig | MySQLPoolLike, entities?: EntityClass[]): ClassType<BaseDatabase>;
export declare function createPostgresDatabase(config?: PostgresDatabaseConfig | PgPoolLike, entities?: EntityClass[]): ClassType<BaseDatabase>;
export declare function createDatabase(config?: SharedDatabaseConfig, entities?: EntityClass[]): ClassType<BaseDatabase>;
export declare function createDatabase(dialect: 'mysql', config?: MySQLDatabaseConfig | MySQLPoolLike, entities?: EntityClass[]): ClassType<BaseDatabase>;
export declare function createDatabase(dialect: 'postgres', config?: PostgresDatabaseConfig | PgPoolLike, entities?: EntityClass[]): ClassType<BaseDatabase>;
//# sourceMappingURL=factory.d.ts.map