Socket
Book a DemoInstallSign in
Socket

@opentf/obj-diff

Package Overview
Dependencies
Maintainers
1
Versions
15
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@opentf/obj-diff

The Fast, Accurate, JavaScript Objects Diffing Library.

Source
npmnpm
Version
0.4.0
Version published
Weekly downloads
4.8K
279.09%
Maintainers
1
Weekly downloads
 
Created
Source

 OPEN TECH FOUNDATION

obj-diff

Build   JSR Score

Demo image

The Fast, Accurate, JavaScript Objects Diffing Library.

LIVE DEMO

Features

  • Deep Objects Diffing

  • Supports More Object Types, eg: Map, Set

  • TypeScript Support

Supported Types

  • Primitives

    • Undefined
    • Null
    • Number
    • String
    • Boolean
    • BigInt
  • Objects

    • Plain Objects, eg: {}
    • Array
    • Date
    • Map
    • Set

Installation

Install it using your favourite package manager.

npm install @opentf/obj-diff
yarn add @opentf/obj-diff
pnpm add @opentf/obj-diff
bun add @opentf/obj-diff
deno add @opentf/obj-diff

Usage

import { diff } from '@opentf/obj-diff';

diff(obj1: object, obj2: object): Array<DiffResult>
type DiffResult = {
  t: 0 | 1 | 2; // The type of diff, 0 - Deleted, 1 - Created, 2 - Updated
  p: Array<string | number>; // The object path
  v?: unknown; // The current value
};

Examples

  • Diff two simple objects.
const a = {a: 1, b: 2};
const b = {a: 2, c: 3};

diff(a, b);
/*
[
  {
    t: 2,
    p: ["a"],
    v: 2,
  },
  {
    t: 0,
    p: ["b"],
  },
  {
    t: 1,
    p: ["c"],
    v: 5,
  },
]
*/
  • Diff two arrays.
const a = [1, 2, 3, 4, 5];
const b = [1, 3, 5];

diff(a, b);
/* 
[
  {
    t: 2,
    p: [1],
    v: 3,
  },
  {
    t: 2,
    p: [2],
    v: 5,
  },
  {
    t: 0,
    p: [3],
  },
  {
    t: 0,
    p: [4],
  },
]
*/
  • Deep diff two objects.
const a = {
  foo: {
    bar: {
      a: ['a', 'b'],
      b: 2,
      c: ['x', 'y'],
      e: 100
    }
  },
  buzz: 'world'
};

const b = {
  foo: {
    bar: {
      a: ['a'],
      b: 2,
      c: ['x', 'y', 'z'],
      d: 'Hello, world!'
    }
  },
  buzz: 'fizz'
};

diff(a, b);
/*
[
  {
    t: 0,
    p: ["foo", "bar", "a", 1],
  },
  {
    t: 1,
    p: ["foo", "bar", "c", 2],
    v: "z",
  },
  {
    t: 0,
    p: ["foo", "bar", "e"],
  },
  {
    t: 1,
    p: ["foo", "bar", "d"],
    v: "Hello, world!",
  },
  {
    t: 2,
    p: ["buzz"],
    v: "fizz",
  },
]
*/

Benchmark

┌───┬──────────────────┬─────────┬───────────────────┬────────┬─────────┐
│   │ Task Name        │ ops/sec │ Average Time (ns) │ Margin │ Samples │
├───┼──────────────────┼─────────┼───────────────────┼────────┼─────────┤
+ 0 │ diff             │ 252,694 │ 3957.346814404028 │ ±1.60% │ 25270   │
│ 1 │ microdiff        │ 218,441 │ 4577.892286564301 │ ±0.92% │ 21845   │
│ 2 │ deep-object-diff │ 121,385 │ 8238.188318642591 │ ±1.66% │ 12139   │
│ 3 │ just-diff        │ 105,292 │ 9497.35384615396  │ ±1.66% │ 10530   │
│ 4 │ deep-diff        │ 160,802 │ 6218.820533549017 │ ±1.59% │ 16081   │
└───┴──────────────────┴─────────┴───────────────────┴────────┴─────────┘

Running benchmarks

$ bun run build
$ bun benchmark.js

Articles

Please read our important articles:

License

Copyright (c) Thanga Ganapathy (MIT License).

Keywords

diff

FAQs

Package last updated on 28 Apr 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts