From b55561d55d8ee074272f154fac3a439258f2a32f Mon Sep 17 00:00:00 2001 From: antoine lanoe Date: Fri, 23 Dec 2022 17:33:42 +0100 Subject: [PATCH] feat: add readme --- README.md | 153 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..31e200c --- /dev/null +++ b/README.md @@ -0,0 +1,153 @@ +## DATA DIFF + +This library compares two arrays or objects and return a complete diff of their differences. + +# Object exemple: + +`getObjectDiff()` checks base properties but also provides a complete diff of nested properties. + +Input + +```js +getObjectDiff( + { + id: 54, + user: { + name: "joe", + member: true, + hobbies: ["golf", "football"], + age: 66, + }, + }, + { + id: 54, + user: { + name: "joe", + member: false, + hobbies: ["golf", "chess"], + age: 66, + }, + } +); +``` + +Output + +```js +{ + type: "object", + status: "updated", + diff: [ + { + property: "id", + previousValue: 54, + currentValue: 54, + status: "equal", + }, + { + property: "user", + previousValue: { + name: "joe", + member: true, + hobbies: ["golf", "football"], + age: 66, + }, + currentValue: { + name: "joe", + member: false, + hobbies: ["golf", "chess"], + age: 66, + }, + status: "updated", + subPropertiesDiff: [ + { + name: "name", + previousValue: "joe", + currentValue: "joe", + status: "equal", + }, + { + name: "member", + previousValue: true, + currentValue: false, + status: "updated", + }, + { + name: "hobbies", + previousValue: ["golf", "football"], + currentValue: ["golf", "chess"], + status: "updated", + }, + { + name: "age", + previousValue: 66, + currentValue: 66, + status: "equal", + }, + ], + }, + ], + } +``` + +List exemple: + +`getListDiff()` works with arrays of string, number and objects. +It doesn't work yet with duplicated values. + +Input + +```js +getListDiff( + ["mbappe", "mendes", "verratti", "ruiz"], + ["mbappe", "messi", "ruiz"] +); +``` + +Output + +```js +{ + type: "list", + status: "updated", + diff: [ + { + value: "mbappe", + prevIndex: 0, + newIndex: 0, + indexDiff: 0, + status: "equal", + }, + { + value: "mendes", + prevIndex: 1, + newIndex: null, + indexDiff: null, + status: "deleted", + }, + { + value: "verratti", + prevIndex: 2, + newIndex: null, + indexDiff: null, + status: "deleted", + }, + { + value: "messi", + prevIndex: null, + newIndex: 1, + indexDiff: null, + status: "added", + }, + { + value: "ruiz", + prevIndex: 3, + newIndex: 2, + indexDiff: -1, + status: "moved", + }, + ], + } +``` + +See tests for more visual examples.