@tachibana-shin/diff-object
Version:
Get diff object advanced
38 lines (36 loc) • 1.63 kB
TypeScript
declare const KEY_SYMBOL_ACTION: unique symbol;
declare const KEY_SYMBOL_VALUEA: unique symbol;
declare const KEY_SYMBOL_VALUEB: unique symbol;
declare const KEY_ACTION = "#@~!action";
declare const KEY_VALUEA = "#@~!valueA";
declare const KEY_VALUEB = "#@~!valueB";
interface DiffSymbolObject {
[KEY_SYMBOL_ACTION]: "ADDED" | "MODIFIED" | "DELETED";
[KEY_SYMBOL_VALUEA]: unknown;
[KEY_SYMBOL_VALUEB]: unknown;
}
interface DiffNormalObject {
[KEY_ACTION]: "ADDED" | "MODIFIED" | "DELETED";
[KEY_VALUEA]: unknown;
[KEY_VALUEB]: unknown;
}
declare type DiffObject<useSymbol extends boolean = true> = useSymbol extends true ? DiffSymbolObject : DiffNormalObject;
interface DiffNormal {
[name: string]: DiffObject | DiffNormal;
}
interface DiffSymbol {
[name: string]: DiffSymbolObject | DiffSymbol;
}
declare type Diff<useSymbol extends boolean = true> = useSymbol extends true ? DiffSymbol : DiffNormal;
interface Options<useSymbol extends boolean = true> {
deep?: false;
symbol?: useSymbol;
}
interface DiffReturn<useSymbol extends boolean = true> {
diffs: Diff<useSymbol>;
count: number;
}
declare function isDiffObject(diffObj: any, checkSymbol?: boolean): diffObj is DiffObject;
declare function isKeyDiffObject(key: string | symbol): boolean;
declare function diff<A extends object, B extends object, useSymbol extends boolean = true>(a: A, b: B, options?: Options<useSymbol>): DiffReturn<useSymbol>;
export { Diff, DiffObject, DiffReturn, KEY_ACTION, KEY_SYMBOL_ACTION, KEY_SYMBOL_VALUEA, KEY_SYMBOL_VALUEB, KEY_VALUEA, KEY_VALUEB, Options, diff, isDiffObject, isKeyDiffObject };