deep6 ![NPM version](https://img.shields.io/npm/v/deep6.svg)
deep6
is a no-dependency ES6 mini-library:
- Advanced deep equivalency for JavaScript structures.
- Extensible to accommodate custom objects.
- Traversing objects.
- Written in ES6:
- Use it in Node or browsers without transpiling.
- Natively supports
Map
, Set
, typed arrays. - Natively supports symbols and property descriptors.
- Presented as ES6 modules, yet provides CommonJS modules for convenience.
- Efficient non-recursive algorithms.
- ~500 tests to ensure correctness.
- Support for circular dependencies.
- Support for "loose" comparisons.
- Unification.
- Identifying and capturing object fragments.
Intro
import equal, {match, clone, any} from 'deep6';
const x = {a: 1, b: 2, c: ['hi!', 42, null, {}]};
equal(x, {b: 2, a: 1, c: ['hi!', 42, null, {}]});
equal(x, {b: 2, a: 1, c: ['hi!', 42, null, {z: 1}]});
match(x, {a: 1});
match(x, {z: 1});
match(x, {a: 1, c: any});
match(x, {a: 1, c: []});
match(x, {a: 1, d: any});
const y = clone(x);
equal(x, y);
const z = {},
w = {};
z.z = z;
w.z = w;
const p = clone(w);
equal(z, w);
equal(z, p);
const m = {a: new Map(), b: Buffer.from([99, 98, 97])};
m.a.set('a', [Symbol(), new Set([1, 2, 3])]);
m.a.set('b', [/^abc/i, new Date()]);
const n = clone(m);
equal(m, n);
const s = Symbol(),
t = {[s]: 42, [Symbol.for('deep6')]: 33},
u = {[s]: 42, [Symbol.for('deep6')]: 33},
v = clone(u, {symbols: true});
equal(t, u, {symbols: true});
equal(t, v, {symbols: true});
const r = {a: 1};
Object.defineProperty(r, 'b', {value: 2, enumerable: false});
const q = clone(r, {allProps: true});
r === q;
equal(r, {a: 1});
equal(r, {a: 1, b: 2});
r.a === q.a;
r.b === q.b;
Docs
All pertinent information is in the wiki.
Installation and use
npm install --save deep6
import equal, {clone} from 'deep6';
import matchString from 'deep6/unifiers/matchString';
const {equal, clone} = require('deep6/cjs');
const matchString = require('deep6/cjs/unifiers/matchString').default;
License
BSD-3-Clause
Release History
- 1.1.4 updated dev deps.
- 1.1.3 updated dev deps.
- 1.1.2 updated dev deps.
- 1.1.1 reformulated
any
as a well-known symbol. - 1.1.0 separated from yopl, extensive refactoring.
- 1.0.1 added the exports statement.
- 1.0.0 the first 1.0 release.