import type { EntityData, EntityMetadata, EntityName, New, Primary } from '../typings';
import type { EntityManager } from '../EntityManager';
import type { EntityComparator } from '../utils/EntityComparator';
export interface FactoryOptions {
    initialized?: boolean;
    newEntity?: boolean;
    merge?: boolean;
    refresh?: boolean;
    convertCustomTypes?: boolean;
    recomputeSnapshot?: boolean;
    schema?: string;
    parentSchema?: string;
}
export declare class EntityFactory {
    private readonly em;
    private readonly driver;
    private readonly platform;
    private readonly config;
    private readonly metadata;
    private readonly hydrator;
    private readonly eventManager;
    private readonly comparator;
    constructor(em: EntityManager);
    create<T extends object, P extends string = string>(entityName: EntityName<T>, data: EntityData<T>, options?: FactoryOptions): New<T, P>;
    mergeData<T extends object>(meta: EntityMetadata<T>, entity: T, data: EntityData<T>, options?: FactoryOptions): void;
    createReference<T extends object>(entityName: EntityName<T>, id: Primary<T> | Primary<T>[] | Record<string, Primary<T>>, options?: Pick<FactoryOptions, 'merge' | 'convertCustomTypes' | 'schema'>): T;
    createEmbeddable<T extends object>(entityName: EntityName<T>, data: EntityData<T>, options?: Pick<FactoryOptions, 'newEntity' | 'convertCustomTypes'>): T;
    getComparator(): EntityComparator;
    private createEntity;
    private hydrate;
    private findEntity;
    private processDiscriminatorColumn;
    /**
     * denormalize PK to value required by driver (e.g. ObjectId)
     */
    private denormalizePrimaryKey;
    /**
     * returns parameters for entity constructor, creating references from plain ids
     */
    private extractConstructorParams;
    private get unitOfWork();
}
