Skip to content

Repository files navigation

o2diff

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.

Build StatusCode CoverageLicensenpm version

Contents

Install

$ pnpm i o2diff

Usage

import{diff,diffPaths,diffValues}from'o2diff'constoriginal={firstName: 'John',lastName: 'Smith',email: 'john@mail.com',phones: [{type: 'home',value: '+12222'},{type: 'mobile',value: '+11111'}]}constcurrent={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 diffdiff(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 diffdiffValues(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 diffdiffPaths(original,current)/*{ changed: [ 'firstName', 'email', 'phones[0].type', 'phones[0].value' ], added: [ 'age', 'address.city', 'address.location.latitude', 'address.location.longitude' ], deleted: [ 'lastName' ]}*/

API

function diff(original: Input, current: Input): DiffResult

Returns the difference between original and current.

  • original: Input - the original object.
  • current: Input - the current (actual) object.
  • returns { left, right }: DiffResult object.

function diffValues(original: Input, current: Input): DiffValuesResult

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 }: DiffValuesResult object.

function diffPaths(original: Input, current: Input): DiffPathsResult

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 }: DiffPathsResult object.

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 each dest.path.
  • returns a record or an array.

function getPaths(obj: Input): string[]

Returns all paths of the object.

  • obj: Input - the source object.
  • returns the list of paths.

function omitPaths(obj: Input, excludedPaths: string[]): RecordUnknown | ArrayUnknown

Returns the object without excludedPaths.

  • obj: Input - the source object.
  • excludedPaths - the array of paths to exclude. The path can be with mask: *.name or name.* to exclude only path started or ended with the name.
  • returns a record or an array.

License

Licensed under the MIT license.

Author

Alexander Mac

About

Returns the differences between two objects

Topics

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages