import { Collection, MongoClient } from "mongodb";
import { Table } from "./core/table";
import { MappingRegistry } from "./mapping/mappingRegistry";
import { Session, InternalSession } from "./session";
import { Constructor } from "./index";
import { Persister } from "./persister";
import { EntityMapping } from "./mapping/entityMapping";
import { Logger } from "./config/configuration";
import { Callback } from "./core/callback";
export interface SessionFactory {
    connection: MongoClient;
    getCollection(ctr: Constructor<any>): Collection;
    createSession(): Session;
    createIndexes(callback: Callback): void;
    createIndexes(options: CreateIndexesOptions, callback: Callback): void;
    dropIndexes(callback: Callback): void;
}
export interface CreateIndexesOptions {
    background?: boolean;
}
export interface InternalSessionFactory extends SessionFactory {
    logger: Logger;
    getMappingForObject(obj: any): EntityMapping;
    getMappingForConstructor(ctr: Constructor<any>): EntityMapping;
    createPersister(session: InternalSession, mapping: EntityMapping): Persister;
}
export declare class SessionFactoryImpl implements InternalSessionFactory {
    connection: MongoClient;
    logger: Logger;
    private _collections;
    private _mappingRegistry;
    constructor(connection: MongoClient, collections: Table<Collection>, mappingRegistry: MappingRegistry);
    createSession(): Session;
    getCollection(ctr: Constructor<any>): Collection;
    getMappingForObject(obj: any): EntityMapping;
    getMappingForConstructor(ctr: Constructor<any>): EntityMapping;
    createPersister(session: InternalSession, mapping: EntityMapping): Persister;
    createIndexes(callback: Callback): void;
    createIndexes(options: CreateIndexesOptions, callback: Callback): void;
    dropIndexes(callback: Callback): void;
}
