/deep-confluence

A small utility function for merging objects deeply 🖤

Primary LanguageTypeScriptMIT LicenseMIT

Deep Confluence

Deep Confluence Typed with TypeScript codecov npm version unpkg

A JavaScript Utility Method to deeply merge objects

Where other deep merge utilities might take a bit to groc for the simple function you desire,
you can view Deep Confluence's few lines of code and feel at ease saying "yes" OR "no"—but, say "yes".


Install

yarn deep-confluence -D

Problem: there are 2 lonely deep objects

import deepConfluence from 'deep-confluence'

const lonelyObj1 = {
  broken: true,
  alone: true,
  complex: {
    cats: true,
    dogs: false,
  },
}
const lonelyObj2 = {
  broken: false,
  alone: false,
  complex: {
    noPets: true,
    likesCats: true,
  },
}

Fix: Deep Confluence

Invoke Deep Confluence and merge two lonely objects deeply into 1. 🖤


const youreNotAlone = deepConfluence(lonelyObj1, lonelyObj2)

Which outputs

{
  'alone': false,
  'broken': false,
  'complex': {
    'cats': true,
    'dogs': false,
    'likesCats': true,
    'noPets': true
  }
}

Examples

Here's a CodePen.

Take it Deep Confluence for a test drive.
Feel free to use the example to point out issues or request features.


Simplicity

Deep Confluence's goal is simplicity!

  • If you have lodash, and don't mind a little size, use _.merge!
  • If you want a utility smaller than _.merge but more supportive than deep-confluence use deepMerge.

Deep confluence is a "try it first, don't make you think about it" utility.


Known Issues

Deep Confluence does simple Array diffing using filter to get rid of duplicate items. However, if there is an array of Objects, the arrays are merged but duplicate objects are not removed. That can be done by you with custom filtering at your leisure.