UNPKG

2.7 kBTypeScriptView Raw
1// Type definitions for deep-diff 1.0
2// Project: https://github.com/flitbit/diff/
3// Definitions by: ZauberNerd <https://github.com/ZauberNerd>
4// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
5// TypeScript Version: 2.3
6
7export interface DiffNew<RHS> {
8 kind: 'N';
9 path?: any[] | undefined;
10 rhs: RHS;
11}
12
13export interface DiffDeleted<LHS> {
14 kind: 'D';
15 path?: any[] | undefined;
16 lhs: LHS;
17}
18
19export interface DiffEdit<LHS, RHS = LHS> {
20 kind: 'E';
21 path?: any[] | undefined;
22 lhs: LHS;
23 rhs: RHS;
24}
25
26export interface DiffArray<LHS, RHS = LHS> {
27 kind: 'A';
28 path?: any[] | undefined;
29 index: number;
30 item: Diff<LHS, RHS>;
31}
32
33export type Diff<LHS, RHS = LHS> = DiffNew<RHS> | DiffDeleted<LHS> | DiffEdit<LHS, RHS> | DiffArray<LHS, RHS>;
34
35export type PreFilterFunction = (path: any[], key: any) => boolean;
36export interface PreFilterObject<LHS, RHS = LHS> {
37 prefilter?(path: any[], key: any): boolean;
38 normalize?(currentPath: any, key: any, lhs: LHS, rhs: RHS): [ LHS, RHS ] | undefined;
39}
40export type PreFilter<LHS, RHS = LHS> = PreFilterFunction | PreFilterObject<LHS, RHS>;
41
42export interface Accumulator<LHS, RHS = LHS> {
43 push(diff: Diff<LHS, RHS>): void;
44 length: number;
45}
46
47export type Observer<LHS, RHS = LHS> = (diff: Diff<LHS, RHS>) => void;
48
49export type Filter<LHS, RHS = LHS> = (target: LHS, source: RHS, change: Diff<LHS, RHS>) => boolean;
50
51export function diff<LHS, RHS = LHS>(lhs: LHS, rhs: RHS, prefilter?: PreFilter<LHS, RHS>): Array<Diff<LHS, RHS>> | undefined;
52export function diff<LHS, RHS = LHS>(lhs: LHS, rhs: RHS, prefilter?: PreFilter<LHS, RHS>, acc?: Accumulator<LHS, RHS>): Accumulator<LHS, RHS>;
53export function orderIndependentDiff<LHS, RHS = LHS>(lhs: LHS, rhs: RHS, prefilter?: PreFilter<LHS, RHS>): Array<Diff<LHS, RHS>> | undefined;
54export function orderIndependentDiff<LHS, RHS = LHS>(lhs: LHS, rhs: RHS, prefilter?: PreFilter<LHS, RHS>, acc?: Accumulator<LHS, RHS>): Accumulator<LHS, RHS>;
55export function observableDiff<LHS, RHS = LHS>(lhs: LHS, rhs: RHS, observer?: Observer<LHS, RHS>, prefilter?: PreFilter<LHS, RHS>, orderIndependent?: boolean): Array<Diff<LHS, RHS>>;
56export function orderIndependentDeepDiff<LHS, RHS = LHS>(lhs: LHS, rhs: RHS, changes: Array<Diff<LHS, RHS>>, prefilter: PreFilter<LHS, RHS>, path: any[], key: any, stack: any[]): void;
57export function orderIndepHash(object: any): number;
58export function applyDiff<LHS, RHS = LHS>(target: LHS, source: RHS, filter?: Filter<LHS, RHS>): void;
59export function applyChange<LHS>(target: LHS, source: any, change: Diff<LHS, any>): void;
60export function revertChange<LHS>(target: LHS, source: any, change: Diff<LHS, any>): void;