パッケージの詳細

smob

Tada5hi8.4mMIT1.5.0

Zero dependency library to safe merge objects.

object, object-merge, merge, safe

readme

SMOB 🧪

npm version main codecov Known Vulnerabilities semantic-release: angular

A zero dependency library to safe merge objects and arrays with customizable behavior.

Table of Contents

Installation

npm install smob --save

Usage

import { merge } from "smob";

const output = merge(...sources);

The following merge options are set by default:

  • array: true Merge object array properties.
  • arrayDistinct: false Remove duplicates, when merging array elements.
  • arrayPriority: left (options.priority) The source aka leftmost array has by default the highest priority.
  • clone: false Deep clone input sources.
  • inPlace: false Merge sources in place.
  • priority: left The source aka leftmost object has by default the highest priority.

The merge behaviour can be changed by creating a custom merger.

Arguments

  • sources (any[] | Record<string, any>)[]: The source arrays/objects.
import { merge } from 'smob';

merge({ a: 1 }, { b: 2 }, { c: 3 });
// { a: 1, b: 2, c: 3 }

merge(['foo'], ['bar']);
// ['foo', 'bar']

Merger

A custom merger can simply be created by using the createMerger method.

Array

import { createMerger } from 'smob';

const merge = createMerger({ array: false });

merge({ a: [1,2,3] }, { a: [4,5,6] });
// { a: [1,2,3] }

ArrayDistinct

import { createMerger } from 'smob';

const merge = createMerger({ arrayDistinct: true });

merge({ a: [1,2,3] }, { a: [3,4,5] });
// { a: [1,2,3,4,5] }

Priority

import { createMerger } from 'smob';

const merge = createMerger({ priority: 'right' });

merge({ a: 1 }, { a: 2 }, { a: 3 })
// { a: 3 }

Strategy

import { createMerger } from 'smob';

const merge = createMerger({
    strategy: (target, key, value) => {
        if (
            typeof target[key] === 'number' &&
            typeof value === 'number'
        ) {
            target[key] += value;
            return target;
        }
    }
});

merge({ a: 1 }, { a: 2 }, { a: 3 });
// { a: 6 }

A returned value indicates that the strategy has been applied.

Utils

distinctArray

import { distinctArray } from 'smob';

distnctArray(['foo', 'bar', 'foo']);
// ['foo', 'bar']

The function also removes non-primitive elements that are identical by value or reference.

Objects

import { distinctArray } from 'smob';

distinctArray([{ foo: 'bar' }, { foo: 'bar' }]);
// [{ foo: 'bar' }]

Arrays

import { distinctArray } from 'smob';

distinctArray([['foo', 'bar'], ['foo', 'bar']]);
// [['foo', 'bar']]

isEqual

Checks if two (non-primitive) elements are identical by value or reference.

import { isEqual } from 'smob';

isEqual({foo: 'bar'}, {foo: 'bar'});
// true

isEqual(['foo', 'bar'], ['foo', 'bar']);
// true

License

Made with 💚

Published under MIT License.

更新履歴

1.5.0 (2024-03-29)

Features

1.4.1 (2023-09-20)

Bug Fixes

  • removed superfluous cut utility (b8f5826)

1.4.0 (2023-05-29)

Bug Fixes

  • better polyfill implementation for cloning arrays and objects (fad6beb)
  • create a new weak map for each source (4ed64d2)
  • remove unused utility methods + applied linter (76baf8e)

Features

  • use weak-map instead of json-stringify for circular reference handling (33b4ea4)

1.3.0 (2023-05-28)

Bug Fixes

  • move sources length check to create-merger (c55bfc5)

Features

  • deep clone input sources (384acff)
  • refactored merger to support arrays (2185ebe)

1.3.0-alpha.2 (2023-05-28)

Features

  • deep clone input sources (384acff)

1.3.0-alpha.1 (2023-05-28)

Features

  • refactored merger to support arrays (2185ebe)

1.2.0 (2023-05-28)

Bug Fixes

  • add generic argument for distinct-array util (4d31b24)
  • optimize array merge (240ce25)

Features

  • split regular and distinct array merge + support multiple input arrays (f7d4a75)

1.1.1 (2023-05-20)

Bug Fixes

  • extend is-equal check for arrays (406d48b)

1.1.0 (2023-05-19)

Features

  • remove array duplicates by value & reference (b55dcfc)

1.0.0 (2023-03-20)

Features

  • const for priority side + cleanup types (bf19728)

BREAKING CHANGES

  • bump version to v1.x

0.1.0 (2023-01-27)

Features

  • refactor build pipeline & replaced babel with swc (306c126)

0.0.7 (2023-01-11)

Bug Fixes

  • deps: bump json5 from 1.0.1 to 1.0.2 (33a7d6c)

0.0.6 (2022-10-19)

Bug Fixes

  • return type of merge result (cc534b9)

0.0.5 (2022-10-19)

Bug Fixes

0.0.4 (2022-10-19)

Bug Fixes

  • enhanced typing for merger result (19fc7ff)