UNPKG

2.07 kBTypeScriptView Raw
1export type Formatter = (delta: Delta, original: any) => string;
2
3export interface Delta {
4 [key: string]: any;
5 [key: number]: any;
6}
7
8export interface DiffContext {
9 left: any;
10 right: any;
11}
12
13export interface Config {
14 // used to match objects when diffing arrays, by default only === operator is used
15 objectHash?: (item: any) => string;
16 arrays?: {
17 // default true, detect items moved inside the array (otherwise they will be registered as remove+add)
18 detectMove: boolean,
19 // default false, the value of items moved is not included in deltas
20 includeValueOnMove: boolean,
21 };
22 textDiff?: {
23 // default 60, minimum string length (left and right sides) to use text diff algorythm: google-diff-match-patch
24 minLength: number,
25 };
26 /*
27 this optional function can be specified to ignore object properties (eg. volatile data)
28 name: property name, present in either context.left or context.right objects
29 context: the diff context (has context.left and context.right objects)
30 */
31 propertyFilter?: (name: string, context: DiffContext) => boolean;
32 /*
33 default false. if true, values in the obtained delta will be cloned (using jsondiffpatch.clone by default),
34 to ensure delta keeps no references to left or right objects. this becomes useful if you're diffing and patching
35 the same objects multiple times without serializing deltas.
36
37 instead of true, a function can be specified here to provide a custom clone(value)
38 */
39 cloneDiffValues?: boolean | ((value: any) => any);
40}
41
42export class DiffPatcher {
43 constructor(options?: any);
44
45 clone: (value: any) => any;
46 dateReviver: (key: string, value: any) => any;
47 diff: (left: any, right: any) => Delta | undefined;
48 formatters: {
49 annotated: Formatter;
50 console: Formatter;
51 html: Formatter;
52 };
53 patch: (left: any, delta: Delta) => any;
54 reverse: (delta: Delta) => Delta | undefined;
55 unpatch: (right: any, delta: Delta) => any;
56}