-
-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathmodel.ts
93 lines (82 loc) · 1.86 KB
/
model.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
export const STATUS: Record<string, ObjectDiffStatus> = {
ADDED: "added",
EQUAL: "equal",
DELETED: "deleted",
UPDATED: "updated",
};
export const LIST_STATUS: Record<string, ListDiffStatus> = {
...STATUS,
MOVED: "moved",
};
export const GRANULARITY: Record<string, "basic" | "deep"> = {
BASIC: "basic",
DEEP: "deep",
};
export type ListDiffStatus =
| "added"
| "equal"
| "moved"
| "deleted"
| "updated";
export type ObjectDiffStatus = "added" | "equal" | "deleted" | "updated";
export type ObjectData = Record<string, any> | undefined | null;
export type ListData = any;
export type ObjectStatusTuple = readonly [
"added",
"equal",
"deleted",
"updated"
];
export type ListStatusTuple = readonly [
"added",
"equal",
"deleted",
"moved",
"updated"
];
export type isEqualOptions = {
ignoreArrayOrder?: boolean;
};
export type ObjectOptions = {
ignoreArrayOrder?: boolean;
showOnly?: {
statuses: Array<ObjectStatusTuple[number]>;
granularity?: (typeof GRANULARITY)[keyof typeof GRANULARITY];
};
};
export type ListOptions = {
showOnly?: Array<ListStatusTuple[number]>;
referenceProperty?: string;
considerMoveAsUpdate?: boolean;
ignoreArrayOrder?: boolean;
};
export type ListDiff = {
type: "list";
status: ListDiffStatus;
diff: {
value: ListData;
prevIndex: number | null;
newIndex: number | null;
indexDiff: number | null;
status: ListDiffStatus;
}[];
};
export type SubProperties = {
property: string;
previousValue: any;
currentValue: any;
status: ObjectDiffStatus;
subPropertiesDiff?: SubProperties[];
};
export type ObjectDiff = {
type: "object";
status: ObjectDiffStatus;
diff: {
property: string;
previousValue: any;
currentValue: any;
status: ObjectDiffStatus;
subPropertiesDiff?: SubProperties[];
}[];
};
export type DataDiff = ListDiff | ObjectDiff;