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 { InternalMapping } from "./internalMapping";
import { WriteContext } from "./writeContext";
export declare abstract class MappingBase implements InternalMapping {
    flags: MappingModel.MappingFlags;
    id: number;
    private _resolveCache;
    constructor(flags: MappingModel.MappingFlags);
    abstract read(context: ReadContext, value: any): any;
    abstract write(context: WriteContext, value: any): any;
    hasFlags(flags: MappingModel.MappingFlags): boolean;
    watch(value: any, observer: Observer, visited: any[]): void;
    walk(session: InternalSession, value: any, flags: MappingModel.PropertyFlags, entities: any[], embedded: any[], references: Reference[]): void;
    areEqual(documentValue1: any, documentValue2: any): boolean;
    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;
    resolve(pathOrContext: string | ResolveContext): ResolveContext;
    protected resolveCore(context: ResolveContext): void;
}
