export { Meta } from "./Meta.js";
export type AbstractChangeset = {
    readonly id: number;
    readonly name: string;
    readonly caption: string;
    readonly timestamp: number;
    readonly sealed: boolean;
};
export declare class ContentFootprint<T = any> {
    content: T;
    listeners?: Set<OperationFootprint>;
    lastEditorChangesetId: number;
    get isComputed(): boolean;
    constructor(content: T, lastEditorChangesetId: number);
}
export type OperationFootprint = {
    readonly order: number;
    readonly signals: Map<ContentFootprint, ListeningInfo> | undefined;
    readonly obsoleteSince: number;
    hint(nop?: boolean): string;
    markObsoleteDueTo(footprint: ContentFootprint, fk: FieldKey, changeset: AbstractChangeset, h: ObjectHandle, outer: string, since: number, collector: Array<OperationFootprint>): void;
    relaunchIfNotUpToDate(now: boolean, nothrow: boolean): void;
};
export type FieldKey = PropertyKey;
export type ListeningInfo = {
    readonly memberHint: string;
    readonly usageCount: number;
};
export declare class ObjectVersion {
    readonly changeset: AbstractChangeset;
    readonly former: {
        objectVersion: ObjectVersion;
    };
    readonly data: any;
    readonly changes: Set<FieldKey>;
    readonly conflicts: Map<FieldKey, ObjectVersion>;
    constructor(changeset: AbstractChangeset, former: ObjectVersion | undefined, data: object);
    get revision(): number;
    get disposed(): boolean;
    set disposed(value: boolean);
}
export declare class ObjectHandle {
    private static generator;
    readonly id: number;
    readonly data: any;
    readonly proxy: any;
    applied: ObjectVersion;
    editing?: ObjectVersion;
    editors: number;
    hint: string;
    constructor(data: any, proxy: any, handler: ProxyHandler<ObjectHandle>, applied: ObjectVersion, hint: string);
    static getHint(obj: object, full: boolean): string | undefined;
}
export type PatchSet = Map<object, Map<FieldKey, ValuePatch>>;
export type ValuePatch = {
    fieldKey: FieldKey;
    patchKind: "update" | "add" | "remove";
    freshContent: any;
    formerContent: any;
};
