mirror: A fast canonicalisation utility for stable object equality
0

Configure Feed

Select the types of activity you want to include in your feed.

63 1 9

Clone this repository

https://tangled.org/mr.cv/object-identity https://tangled.org/did:plc:doulxtjknvg7e5ngws5scb4y
git@git.local.to:mr.cv/object-identity git@git.local.to:did:plc:doulxtjknvg7e5ngws5scb4y

For self-hosted knots, clone URLs may differ based on your setup.



readme.md

object-identity licenses#

A utility that provides a stable identity of an object

This is free to use software, but if you do like it, consider supporting me ❤️

sponsor me buy me a coffee

⚡ Features#

  • Intuitive
  • 🌪 Recursive/Circular support
  • 🏎 Performant — check the benchmarks.
  • 🪶 Lightweight — a mere 387B and no dependencies.

🚀 Usage#

Avaliable on jsr, NPM and deno.land

import { identify } from 'object-identity';
// or
import { identify } from 'https://deno.land/x/object_identity';

// ~> identity the object
const id1 = identify({ a: new Set(['b', 'c', new Map([['d', 'e']])]) });
// ~> an entirely different object, but structurally the same
const id2 = identify({ a: new Set(['b', 'c', new Map([['e', 'e']])]) });

// they should equal
assert.toEqual(hashA, hashB);

💨 Benchmark#

via the /bench directory with deno 1.45.2

✔ object-identity       ~ 313,676 ops/sec ± 0.39%
✔ object-hash           ~  88,873 ops/sec ± 0.16%
✔ json-stable-stringify ~ 444,839 ops/sec ± 0.41%
✔ tiny-stable-stringify ~ 520,833 ops/sec ± 0.45%

^ object-identity is not as feature-full it's alternatives, specifically around function values and other node builtins. So take this benchmark with a grain of salt, as it's only testing "json-like" payloads.

License#

MIT © Marais Rossouw