limu
Version:
A fast js lib of immutable data, based on shallow copy on read and mark modified on write mechanism
50 lines (49 loc) • 2.99 kB
TypeScript
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;