Libraries
    Preparing search index...

    Module @cleverbrush/deep

    @cleverbrush/deep

    CI License: BSD-3-Clause

    Coverage

    A library for deep operations on JavaScript objects — deep equality, deep merge, and flattening.

    npm install @cleverbrush/deep
    
    import { deepEqual, deepExtend, deepFlatten } from '@cleverbrush/deep';
    

    Recursively compares two values and returns true if they are deeply equal. Supports nested objects, arrays, Date instances, and handles circular references.

    Parameters:

    Name Type Default Description
    a any First value
    b any Second value
    options.disregardArrayOrder boolean false When true, arrays are treated as equal regardless of element order
    import { deepEqual } from '@cleverbrush/deep';

    deepEqual({ a: { b: 1 } }, { a: { b: 1 } });
    // => true

    deepEqual({ a: { b: 1 } }, { a: { b: 20 } });
    // => false

    deepEqual({ a: { b: 1, c: 2 } }, { a: { b: 1 } });
    // => false

    // Array order can be ignored
    deepEqual([1, 2, 3], [3, 1, 2], { disregardArrayOrder: true });
    // => true

    Deeply merges multiple objects. Works like Object.assign, but recursively merges nested objects instead of overwriting them. All arguments must be non-null objects.

    Returns a new object that is the deep merge of all provided objects.

    import { deepExtend } from '@cleverbrush/deep';

    const result = deepExtend(
    {},
    {
    a: 'something',
    name: {
    first: 'Ivan'
    }
    },
    {
    name: {
    last: 'Ivanov'
    }
    }
    );

    // result:
    // {
    // a: 'something',
    // name: {
    // first: 'Ivan',
    // last: 'Ivanov'
    // }
    // }

    The result type is inferred from the input types using the Merge<T> utility type, which is also exported from the library.

    Flattens a nested object to a single level, concatenating keys with the specified delimiter.

    Parameters:

    Name Type Default Description
    obj Record<string, any> Object to flatten
    delimiter string '.' Separator used to join nested keys

    Throws an error if the object contains circular references.

    import { deepFlatten } from '@cleverbrush/deep';

    deepFlatten({
    a: {
    b: 1,
    c: 2
    },
    d: 3
    });
    // => { 'a.b': 1, 'a.c': 2, d: 3 }

    deepFlatten(
    {
    a: {
    b: 1,
    c: 2
    },
    d: {
    e: {
    f: 3
    }
    }
    },
    '-'
    );
    // => { 'a-b': 1, 'a-c': 2, 'd-e-f': 3 }

    Generates a hash representation for an object. Useful for comparing objects by value.

    Parameters:

    Name Type Description
    obj any The value to hash
    exclude any[] Optional list of values to exclude from hashing
    import { HashObject } from '@cleverbrush/deep';

    const hash = HashObject({ name: 'John', age: 30 });
    • Linting: Biome — enforced on every PR via CI
    • Type checking: TypeScript strict mode
    • Unit tests: Vitest — covering deep equality edge cases (circular references, Date instances, array order), deep merge, flattening, and hashing
    • CI: Every pull request must pass lint + build + test before merge — see .github/workflows/ci.yml

    BSD-3-Clause

    Type Aliases

    Merge

    Variables

    deepExtend

    Functions

    deepEqual
    deepFlatten