Compares two objects and returns the differences between them in different formats: changed values, changed paths, differences.
Works in Node.js and in the browser.
$ pnpm i o2diffimport { diff, diffPaths, diffValues } from 'o2diff' const original = { firstName: 'John', lastName: 'Smith', email: 'john@mail.com', phones: [ { type: 'home', value: '+12222' }, { type: 'mobile', value: '+11111' } ] } const current = { firstName: 'Michael', age: 25, email: 'michael@mail.com', phones: [ { type: 'work', value: '+13333' }, { type: 'mobile', value: '+11111' } ], address: { city: 'New York', location: { latitude: 40.730610, longitude: -73.935242 } } } // objects diff diff(original, current) /* { left: { firstName: 'John', lastName: 'Smith', email: 'john@mail.com', phones: [{ type: 'home', value: '+12222' }] }, right: { firstName: 'Michael', age: 25, email: 'michael@mail.com', phones: [{ type: 'work', value: '+13333' }], address: { city: 'New York', location: { latitude: 40.730610, longitude: -73.935242 } } } } */ // values diff diffValues(original, current) /* { changed: { firstName: 'Michael', email: 'michael@mail.com', phones: [{ type: 'home', value: '+12222' }] }, added: { age: 25, address: { city: 'New York', location: { latitude: 40.730610, longitude: -73.935242 } } }, deleted: { lastName: 'Smith' } } */ // paths diff diffPaths(original, current) /* { changed: [ 'firstName', 'email', 'phones[0].type', 'phones[0].value' ], added: [ 'age', 'address.city', 'address.location.latitude', 'address.location.longitude' ], deleted: [ 'lastName' ] } */Returns the difference between original and current.
original: Input- the original object.current: Input- the current (actual) object.- returns
{ left, right }: DiffResultobject.
Returns added, changed and deleted values between original and current.
original: Input- the original object.current: Input- the current (actual) object.- returns
{ changed, added, deleted }: DiffValuesResultobject.
Returns added, changed and deleted paths between original and current.
original: Input- the original object.current: Input- the current (actual) object.- returns
{ changed, added, deleted }: DiffPathsResultobject.
function revert(dest: Input, src: Input, customizer: (d: unknown, s: unknown) => unknown): RecordUnknown | ArrayUnknown;
Reverts dest object to src, calls customizer for each dest.path.
dest: Input- the destination object.src: Input- the source object.customizer: (d: unknown, s: unknown) => unknown)- the function that is called for eachdest.path.- returns a record or an array.
Returns all paths of the object.
obj: Input- the source object.- returns the list of paths.
Returns the object without excludedPaths.
obj: Input- the source object.excludedPaths- the array of paths to exclude. The path can be with mask:*.nameorname.*to exclude only path started or ended with the name.- returns a record or an array.
Licensed under the MIT license.
Alexander Mac