1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 | export interface DiffNew<RHS> {
|
8 | kind: 'N';
|
9 | path?: any[] | undefined;
|
10 | rhs: RHS;
|
11 | }
|
12 |
|
13 | export interface DiffDeleted<LHS> {
|
14 | kind: 'D';
|
15 | path?: any[] | undefined;
|
16 | lhs: LHS;
|
17 | }
|
18 |
|
19 | export interface DiffEdit<LHS, RHS = LHS> {
|
20 | kind: 'E';
|
21 | path?: any[] | undefined;
|
22 | lhs: LHS;
|
23 | rhs: RHS;
|
24 | }
|
25 |
|
26 | export interface DiffArray<LHS, RHS = LHS> {
|
27 | kind: 'A';
|
28 | path?: any[] | undefined;
|
29 | index: number;
|
30 | item: Diff<LHS, RHS>;
|
31 | }
|
32 |
|
33 | export type Diff<LHS, RHS = LHS> = DiffNew<RHS> | DiffDeleted<LHS> | DiffEdit<LHS, RHS> | DiffArray<LHS, RHS>;
|
34 |
|
35 | export type PreFilterFunction = (path: any[], key: any) => boolean;
|
36 | export 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 | }
|
40 | export type PreFilter<LHS, RHS = LHS> = PreFilterFunction | PreFilterObject<LHS, RHS>;
|
41 |
|
42 | export interface Accumulator<LHS, RHS = LHS> {
|
43 | push(diff: Diff<LHS, RHS>): void;
|
44 | length: number;
|
45 | }
|
46 |
|
47 | export type Observer<LHS, RHS = LHS> = (diff: Diff<LHS, RHS>) => void;
|
48 |
|
49 | export type Filter<LHS, RHS = LHS> = (target: LHS, source: RHS, change: Diff<LHS, RHS>) => boolean;
|
50 |
|
51 | export function diff<LHS, RHS = LHS>(lhs: LHS, rhs: RHS, prefilter?: PreFilter<LHS, RHS>): Array<Diff<LHS, RHS>> | undefined;
|
52 | export function diff<LHS, RHS = LHS>(lhs: LHS, rhs: RHS, prefilter?: PreFilter<LHS, RHS>, acc?: Accumulator<LHS, RHS>): Accumulator<LHS, RHS>;
|
53 | export function orderIndependentDiff<LHS, RHS = LHS>(lhs: LHS, rhs: RHS, prefilter?: PreFilter<LHS, RHS>): Array<Diff<LHS, RHS>> | undefined;
|
54 | export function orderIndependentDiff<LHS, RHS = LHS>(lhs: LHS, rhs: RHS, prefilter?: PreFilter<LHS, RHS>, acc?: Accumulator<LHS, RHS>): Accumulator<LHS, RHS>;
|
55 | export function observableDiff<LHS, RHS = LHS>(lhs: LHS, rhs: RHS, observer?: Observer<LHS, RHS>, prefilter?: PreFilter<LHS, RHS>, orderIndependent?: boolean): Array<Diff<LHS, RHS>>;
|
56 | export 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;
|
57 | export function orderIndepHash(object: any): number;
|
58 | export function applyDiff<LHS, RHS = LHS>(target: LHS, source: RHS, filter?: Filter<LHS, RHS>): void;
|
59 | export function applyChange<LHS>(target: LHS, source: any, change: Diff<LHS, any>): void;
|
60 | export function revertChange<LHS>(target: LHS, source: any, change: Diff<LHS, any>): void;
|