array-comparisoncomparisoncomparison-tooldeep-diffdiffjson-diffnodejsobject-comparisonobject-diffobjectdiffobjectdifferencereactstreamingstreaming-datatypescript
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
1.9 KiB
93 lines
1.9 KiB
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;
|
|
|