Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

putil-merge

Package Overview
Dependencies
Maintainers
1
Versions
47
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

putil-merge

Lightweight solution for merging multiple objects into one. Also it supports deep merge and deep clone

  • 3.11.0
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
53K
decreased by-11.58%
Maintainers
1
Weekly downloads
 
Created
Source

putil-merge

NPM Version NPM Downloads Build Status Test Coverage DevDependencies

A 'swiss army knife' solution for merging two or more objects. It supports deep merge, cloning properties, copying descriptors and filtering.

Installation

$ npm install putil-merge --save

Table of contents

Merge

merge(target, source[, options])

  • target:object:
  • source:object:
  • options:object
    • deep:boolean (optional): If true, it performs deep merge operation. Default: false
    • clone:boolean (optional): If true, clones object properties rather than assigning references. Default: false
    • adjunct:boolean(optional): If true, it copies only non-existing properties. Default: false
    • descriptor:boolean(optional): If true, copies property descriptors. Default: false
    • filter:function (optional): A callback function to test if source property will be merged to target.
    • arrayMerge:boolean|function (optional): If true, it combines array values. It this is a function, result of call will be assigned to target.

Copying source properties to target object

const a = {x: 1, y: 2};
const b = {x: {}, z: [1, 2, 3, 4]};
const merged = merge(a, b);
assert(merged.x===b.x); // References copied
assert(merged.z===b.z); // References copied

Cloning source properties to target object

const a = {x: 1, y: 2};
const b = {x: {}, z: [1, 2, 3, 4]};
const merged = merge(a, b, {clone: true});
assert(merged.x!==b.x); // Object cloned
assert(merged.z!==b.z); // Array cloned

Applying filter while merge

const a = {x: 1, y: 2};
const b = {x: {}, z: [1, 2, 3, 4]};
const merged = merge(a, b, {filter: (src, key)=>key!=='z'});
assert(!merged.z); // Z will not be merged

Copying descriptors

const b = {};
Object.defineProperty(b, 'foo', {
  enumerable: false
});
const merged = merge({}, b, {descriptor: true});
assert.strictEqual(Object.getOwnPropertyDescriptor(merged, 'foo').enumerable, false);

Copying getters and setters

const b = {
  bar: 1,
  get foo(){
    return this.bar; 
  }
};
const merged = merge({}, b, {descriptor: true});
assert.strictEqual(merged.foo, 1);

Copying function properties

const b = {
  bar: 1,
  getFoo(){
    return this.bar; 
  }
};
const merged = merge({}, b, {descriptor: true});
assert.strictEqual(merged.getFoo(), 1);

Merge.all()

Performs merge with more than two objects.

merge.all(arrayOfObjects[, options])

  • arrayOfObjects:Array<object>:
  • options:object
    • deep:boolean (optional): If true, it performs deep merge operation. Default: false
    • clone:boolean (optional): If true, clones object properties rather than assigning references. Default: false
    • combine:boolean(optional): If true, it copies only non-existing properties. Default: false
    • descriptor:boolean(optional): If true, copies property descriptors. Default: false
    • filter:function (optional): A callback function to test if source property will be merged to target.
    • arrayMerge:boolean|function (optional): If true, it combines array values. It this is a function, result of call will be assigned to target.

Node Compatibility

  • node >= 6.0;

License

MIT

Keywords

FAQs

Package last updated on 06 Oct 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc