import type { AnyObject, DraftMeta, IApiCtx, ObjectLike, RootCtx } from '../inner-types';
export declare const ROOT_CTX: RootCtx;
export declare function markModified(meta: DraftMeta): void;
export declare function getKeyPath(draftNode: any, curKey: string, apiCtx: IApiCtx): string[];
export declare function newMeta(key: any, baseData: any, options: AnyObject & {
    parentMeta: DraftMeta;
}): DraftMeta<AnyObject<any>>;
/**
 * 是否是一个当前版本对应的草稿对象代理节点
 */
export declare function isDraft(mayDraft: any): boolean;
export declare function getNextMetaLevel(mayContainMetaObj: any, apiCtx: IApiCtx): number;
export declare function getSafeDraftMeta<T = ObjectLike>(proxyDraft: T, apiCtx: IApiCtx): DraftMeta<T>;
export declare function getDraftMetaByCtx(mayProxyDraft: any, apiCtx: IApiCtx): DraftMeta<any> | null;
export declare function getDraftMeta(mayProxyDraft: any): DraftMeta<any> | null;
export declare function getMetaVer(mayDraftProxy: any): string;
export declare function getApiCtx(mayDraftProxy: any): IApiCtx | null;
export declare function getDraftProxyMeta(mayDraftProxy: any): DraftMeta<AnyObject<any>>;
/**
 * 判断两个值是否相同，true 表示不相等，false 表示相等
 */
export declare function isDiff(val1: any, val2: any): boolean;
/**
 * 浅比较两个对象，除了专用于比较 helux 生成的代理对象，此函数还可以比较普通对象
 * ```txt
 * true：两个对象一样
 * false：两个对象不一样
 * ```
 */
export declare function shallowCompare(prevObj: AnyObject, nextObj: AnyObject, compareLimuProxyRaw?: boolean): boolean;
/**
 * 内部调用，相信 proxyData 是 limu 产生的代理数据
 */
export declare function getPrivateMeta(proxyData: any): DraftMeta;
export declare function replaceMetaPartial(oldMeta: any, newMeta: any, key: any): void;
export declare function getSourceId(rawData: any): string;
export declare function setSourceId(rawData: any, sourceId: string): WeakMap<object, string>;
export declare function getMultiRefPathsDict(sourceId: any): Record<string, string[][]> | undefined;
export declare function setMultiRefPaths(sourceId: string, key: string, paths: string[][]): void;
export declare function getMultiRefPathsByKey(sourceId: string, key: string): string[][];
export declare function getMultiRefPaths(sourceId: string): Array<string[][]>;
export declare function clearMultiRefData(sourceId: string, toClearIdxList: number[], toClearKeyStrList: string[]): void;
export declare function resetMultiRefData(sourceId: string, keyPathsList: string[][][], keyStr2KeyPathsDict: Record<string, string[][]>): void;
export declare function recordMultiRefData(meta: DraftMeta, keyStrs: string[]): void;
/**
 * 将某个草稿对象（代理对象）赋值到另一个地方，例如： draft.current = draft.list[0];
 * 将重建路径连接关系
 */
export declare function mayRelinkPath(key: string, parentMeta: DraftMeta, valueMeta: DraftMeta | null): any;
