Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@jalik/deep-extend

jalik1.6kMIT2.0.0TypeScript support: included

Deep merge any objects

extend, inherit, merge

readme

@jalik/deep-extend

GitHub package.json version Build Status GitHub last commit GitHub issues GitHub npm

Deep merge any objects.

Sandbox

Play with the lib here: https://codesandbox.io/s/jalik-deep-extend-demo-wyeo99?file=/src/index.js

Installing

npm i -P @jalik/deep-extend
yarn add @jalik/deep-extend

Merging deep objects

The following code shows how to merge objects without losing values that are not defined in objects to merge.

import deepExtend from "@jalik/deep-extend";

const defaultColors = {
  cold: {
    blue: '#0000FF',
    green: '#00FF00',
  },
  hot: {
    red: '#FF0000',
    yellow: '#FFFF00',
  },
};

const customColors = {
  cold: {
    blue: '#48C2ED',
  },
  hot: {
    yellow: '#E6CB5F',
  },
};

// Merge all colors into a new object.
// The final colors will have custom blue and yellow colors,
// but the other colors will be the default ones.
const result = deepExtend({}, defaultColors, customColors);

The result:

{
  "cold": {
    "blue": "#48C2ED",
    "green": "#00FF00"
  },
  "hot": {
    "red": "#FF0000",
    "yellow": "#E6CB5F"
  }
}

Merging arrays

See below how it is easy to merge arrays recursively.

import deepExtend from "@jalik/deep-extend";

const a = [1, [2, [3]]];
const b = [undefined, [4, [undefined, 5], 6], 7];

const result = deepExtend([], a, b);

The result:

[
  1,
  [
    4,
    [
      3,
      5
    ],
    6
  ],
  7
]

Changelog

History of releases is in the changelog.

License

The code is released under the MIT License.

changelog

Changelog

v2.0.0 (2024-11-18)

BREAKING CHANGES

  • chore(deps): move to node >= 20

OTHERS

  • fix: do not use original object reference when merging nested objects

v1.2.2 (2023-05-01)

  • Removed named export { deepExtend } from index file (it should not break things since the official way is to use the import default syntax)
  • Upgraded dependencies

v1.2.1 (2023-04-14)

  • Added missing dev dependency (rimraf)

v1.2.0 (2023-04-14)

  • Added TypeScript declaration files

v1.1.14

  • Upgraded dependencies

v1.1.13

  • Upgraded dependencies

v1.1.12

  • Fixed potential prototype pollution while merging
  • Upgraded dependencies

v1.1.11

  • Upgraded dependencies

v1.1.10

  • Added esnext and sideEffects to package.json
  • Renamed deep-extend.js to deepExtend.js
  • Upgraded dependencies

v1.1.9 (deprecated)

This version has been published with unwanted changes

v1.1.8

  • Upgraded dependencies

v1.1.7

  • Upgraded dependencies

v1.1.6

  • Fixes merging of arrays by cloning them in the extended object
  • Upgraded dependencies

v1.1.5

  • Upgraded dependencies

v1.1.4

  • Upgraded dependencies

v1.1.3

  • Upgraded dependencies

v1.1.2

  • Upgraded dependencies

v1.1.0

  • Lib available in ES6+ syntax (see src folder) to enable auto-completion in IDEs

v1.0.2

  • Upgraded dependencies

v1.0.1

  • Fixes recursive merging of arrays

v1.0.0

  • First public release