Saman(समान) is a deep object diffing and equality checker for Javascript. The library is concise consisting of only 6 functions and the distribution size is 659 bytes(Gzipped).
const { equal, diff2 } = require("saman"); let obj1 = { i:10, j:-3, y:[-1,-3] }; let obj2 = { r:76, e:23, i:4, y:[1,2,-7] }; let obj3 = { m: "hello", n:"bye" }; console.log(equal(obj3,obj3)); // -> True console.log(diff2(obj1,obj2)); // -> /* { created: { r: 76, e: 23, y: { '2': -7 } }, updated: { i: 4, y: { '0': 1, '1': 2 } }, deleted: { j: -3 } } */
npm i saman
<script src="https://unpkg.com/saman"></script>
Underconstruction!
This function recursively checks every property of both the objects for equality and returns a boolean.
const { equal } = require("saman"); const obj1 = { x:10, y:20 }; const obj2 = { x:-1, y:2 }; console.log(equal(obj1,obj2)) // -> false console.log(equal(obj1,obj1)) // -> true console.log(equal(obj2,obj2)) // -> true
This function recursively checks and reports every new property created in obj2
w.r.t.obj1
and returns an object which contains all the newly created props.
const { cDiff } = require("saman"); const obj1 = { x:10, y:20 }; const obj2 = { x:-1, y:2, z:30 }; console.log(cDiff(obj1,obj2)) // -> { z:30 }
This function recursively checks and reports every updated property in obj2
w.r.t.obj1
and returns an object which contains all the updated props.
const { uDiff } = require("saman"); const obj1 = { x:10, y:20 }; const obj2 = { x:10, y:-7, z:30 }; console.log(uDiff(obj1,obj2)) // -> { y:-7 }
This function recursively checks and reports every deleted property in obj2
w.r.t.obj1
and returns an object which contains all the deleted props.
const { dDiff } = require("saman"); const obj1 = { x:10, y:20 }; const obj2 = { y:-7 }; console.log(dDiff(obj1,obj2)) // -> { x:10 } console.log(dDiff(obj1,obj1)) // -> {}
This function recursively checks and reports every created, updated and deleted properties in obj2
w.r.t.obj1
and returns an object which contains all the created, updated and deleted props.
const { diff } = require("saman"); const obj1 = { x:10, y:20, z:30 }; const obj2 = { x:2, y:-7 }; console.log(diff(obj1,obj2)) // -> { x:2, y:-7, z:30 }
This function is similar to saman.diff
but instead of returning created, updated and deleted props all-together merged in one object without delineation, saman.diff2
returns an object with 3 props: created
, updated
and deleted
which contain those props respectively.
const { diff2 } = require("saman"); const obj1 = { x:10, y:20, z:30 }; const obj2 = { x:2, y:-7 }; console.log(diff2(obj1,obj2)) // -> { created:{}, updated: {x:2, y:-7}, deleted: {z:30} }