import { Model, Document, Types } from 'mongoose';
export declare type ObjectId = Types.ObjectId;
export declare type OptionsT = {
    diffCollectionName?: string;
    orderIndependent?: boolean;
};
export declare type KindT = 'E' | 'N' | 'D' | 'A';
export declare type MergedDiffsOptsT = {
    startVersion?: number;
    endVersion?: number;
};
interface ItemDoc {
    k: KindT;
    l?: any;
    r?: any;
}
export declare type RawChangeT = {
    k: KindT;
    p: string[];
    l?: any;
    r?: any;
    i?: number;
    it?: Partial<ItemDoc>;
};
export interface ChangeDoc {
    k: KindT;
    p: string[];
    l?: any;
    r?: any;
    i?: number;
    it?: ItemDoc;
}
export interface IDiffDoc extends Document {
    _id: ObjectId;
    dId: ObjectId;
    c: ChangeDoc[];
    v: number;
}
export interface IDiffModel extends Model<IDiffDoc> {
    createDiff(dId: ObjectId, v: number, changes: ChangeDoc[]): Promise<IDiffDoc>;
    findByDocId(dId: ObjectId): Promise<Array<IDiffDoc>>;
    findAfterVersion(dId: ObjectId, v: number): Promise<Array<IDiffDoc>>;
    findBeforeVersion(dId: ObjectId, v: number): Promise<Array<IDiffDoc>>;
    revertToVersion(d: Object, v: number): Promise<any>;
    mergeDiffs(doc: Document, opts?: MergedDiffsOptsT): Promise<Array<RawChangeT>>;
}
export {};
