JSPM

  • Created
  • Published
  • Downloads 190893
  • Score
    100M100P100Q179399F
  • License Apache-2.0

Extensible deep equivalence checking for any data types

Package Exports

  • @thi.ng/equiv

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@thi.ng/equiv) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

@thi.ng/equiv

npm version npm downloads Twitter Follow

This project is part of the @thi.ng/umbrella monorepo.

About

Extensible deep equivalence checking for any data types. Supports:

  • JS primitives
  • arrays
  • plain objects
  • ES6 Sets / Maps
  • Date
  • RegExp
  • types with .equiv() implementations (IEquiv interface)

This feature was previously part of the @thi.ng/api package.

Installation

yarn add @thi.ng/equiv

Dependencies

Usage examples

import { equiv } from "@thi.ng/equiv";

equiv({a: {b: [1, 2]}}, {a: {b: [1, 2]}});
// true

Implement IEquiv interface

This is useful & required for custom types to take part in equiv checks, by default only plain objects & array are traversed deeply.

Furthemore by implementing this interface we can better control which internal values / criteria are required to establish equivalence. In this example we exclude the meta property and only check for same type & children equality.

import { IEquiv } from "@thi.ng/api";
import { equiv } from "@thi.ng/equiv";

class Node implements IEquiv {

    meta: any;
    children: any[];

    constructor(children: any[], meta?) {
        this.children = children;
        this.meta = meta;
    }

    equiv(o: any) {
        return o instanceof Node && equiv(this.children, o.children);
    }
}

equiv(new Node([1,2,3], "foo"), new Node([1,2,3], "bar"));
// true

Authors

  • Karsten Schmidt

License

© 2018 Karsten Schmidt // Apache Software License 2.0