import { IdentityGenerator } from "../config/configuration";
import { ClassMapping } from "./classMapping";
import { ChangeTrackingType, FlushPriority } from "./mappingModel";
import { Index } from "./index";
import { CollectionOptions } from "./collectionOptions";
import { MappingModel } from "./mappingModel";
import { Reference } from "../reference";
import { InternalSession } from "../session";
import { ResultCallback } from "../core/callback";
import { ResolveContext } from "./resolveContext";
import { ReadContext } from "./readContext";
import { Observer } from "../observer";
import { Property } from "./property";
import { WriteContext } from "./writeContext";
import { QueryDocument } from "../query/queryBuilder";
export declare class EntityMapping extends ClassMapping {
    collectionName: string;
    databaseName: string;
    indexes: Index[];
    collectionOptions: CollectionOptions;
    identity: IdentityGenerator;
    changeTracking: ChangeTrackingType;
    versioned: boolean;
    versionField: string;
    flushPriority: FlushPriority;
    private _defaultFields;
    constructor(baseClass?: EntityMapping);
    validateProperty(property: Property): string;
    setDocumentVersion(obj: any, version: number): void;
    getDocumentVersion(obj: any): number;
    addIndex(index: Index): void;
    refresh(context: ReadContext, entity: any, document: any): any;
    read(context: ReadContext, value: any): any;
    write(context: WriteContext, value: any): any;
    watchEntity(entity: any, observer: Observer): void;
    watch(value: any, observer: Observer, visited: any[]): void;
    areDocumentsEqual(document1: any, document2: any): boolean;
    areEqual(documentValue1: any, documentValue2: any): boolean;
    walk(session: InternalSession, value: any, flags: MappingModel.PropertyFlags, entities: any[], embedded: any[], references: Reference[]): void;
    fetch(session: InternalSession, parentEntity: any, value: any, path: string[], depth: number, callback: ResultCallback<any>): void;
    fetchInverse(session: InternalSession, parentEntity: any, propertyName: string, path: string[], depth: number, callback: ResultCallback<any>): void;
    protected fetchPropertyValue(session: InternalSession, value: any, property: Property, callback: ResultCallback<any>): void;
    getDefaultFields(): QueryDocument;
    protected resolveCore(context: ResolveContext): void;
}
