Package detail

ohash

unjs19.6mMIT2.0.11

Simple object hashing, serialization and comparison utils.

readme

#️ ohash

npm version npm downloads bundle size codecov

Simple object hashing, serialization and comparison utils.

[!NOTE] You are on active v2 development branch. Check v1 for old ohash v1 docs and release notes for migration.

Usage

Install ohash:

# ✨ Auto-detect (npm, yarn, pnpm, bun or deno)
npx nypm i ohash

Import:

// ESM import
import { hash, serialize, digest, isEqual } from "ohash";
import { diff } from "ohash/utils";

// Dynamic import
const { hash, serialize, digest, isEqual } = await import("ohash");
const { diff } = await import("ohash/utils");
<summary>Import from CDN</summary> js import { hash, serialize, digest, isEqual } from "https://esm.sh/ohash"; import { diff } from "https://esm.sh/ohash/utils"; // Dynamic import const { hash, serialize, digest, isEqual } = await import( "https://esm.sh/ohash" ); const { diff } = await import("https://esm.sh/ohash/utils");

hash(input)

Hashes any JS value into a string.

The input is first serialized then it is hashed.

import { hash } from "ohash";

// "g82Nh7Lh3CURFX9zCBhc5xgU0K7L0V1qkoHyRsKNqA4"
console.log(hash({ foo: "bar" }));

serialize(input)

Serializes any input value into a string for hashing.

[!IMPORTANT] > serialize method uses best efforts to generate stable serialized values; however, it is not designed for security purposes. Keep in mind that there is always a chance of intentional collisions caused by user input.

import { serialize } from "ohash";

// "{foo:'bar'}"
console.log(serialize({ foo: "bar" }));

digest(str)

Hashes a string using the SHA-256 algorithm and encodes it in Base64URL format.

import { digest } from "ohash";

// "f4OxZX_x_FO5LcGBSKHWXfwtSx-j1ncoSt3SABJtkGk"
console.log(digest("Hello World!"));

isEqual(obj1, obj2)

Compare two objects using === and then fallbacks to compare based on their serialized values.

import { isEqual } from "ohash";

// true
console.log(isEqual({ a: 1, b: 2 }, { b: 2, a: 1 }));

diff(obj1, obj2)

Compare two objects with nested serialization. Returns an array of changes.

The returned value is an array of diff entries with $key, $hash, $value, and $props. When logging, a string version of the changelog is displayed.

import { diff } from "ohash/utils";

const createObject = () => ({
  foo: "bar",
  nested: {
    y: 123,
    bar: {
      baz: "123",
    },
  },
});

const obj1 = createObject();
const obj2 = createObject();

obj2.nested.x = 123;
delete obj2.nested.y;
obj2.nested.bar.baz = 123;

const diff = diff(obj1, obj2);

// [-] Removed nested.y
// [~] Changed nested.bar.baz from "123" to 123
// [+] Added   nested.x
console.log(diff(obj1, obj2));

Contribute

  • Clone this repository
  • Enable Corepack using corepack enable
  • Install dependencies using pnpm install
  • Run interactive tests using pnpm dev

License

Made with 💛 Published under MIT License.

Object serialization originally based on puleos/object-hash by Scott Puleo.

sha256 implementation originally based on brix/crypto-js.