What is mixme?
Mixme is a utility library for deep merging of objects. It allows you to combine multiple objects into one, handling nested properties and arrays gracefully.
What are mixme's main functionalities?
Deep Merge
This feature allows you to deeply merge two or more objects. Nested properties are merged recursively.
const mixme = require('mixme');
const obj1 = { a: 1, b: { c: 2 } };
const obj2 = { b: { d: 3 } };
const result = mixme.merge(obj1, obj2);
console.log(result); // { a: 1, b: { c: 2, d: 3 } }
Array Merge
This feature allows you to merge arrays within objects. The arrays are concatenated.
const mixme = require('mixme');
const obj1 = { a: [1, 2] };
const obj2 = { a: [3, 4] };
const result = mixme.merge(obj1, obj2);
console.log(result); // { a: [1, 2, 3, 4] }
Custom Merge Function
This feature allows you to provide a custom merge function to define how values should be combined.
const mixme = require('mixme');
const obj1 = { a: 1, b: 2 };
const obj2 = { a: 3, b: 4 };
const customMerge = (a, b) => a + b;
const result = mixme.merge(obj1, obj2, customMerge);
console.log(result); // { a: 4, b: 6 }
Other packages similar to mixme
lodash
Lodash is a popular utility library that provides a wide range of functions for manipulating arrays, objects, and other data types. It includes a `merge` function similar to mixme's deep merge, but also offers many other utilities.
deepmerge
Deepmerge is a library specifically designed for deep merging of JavaScript objects. It is similar to mixme in its core functionality but focuses solely on merging, without additional utilities.
merge
Merge is a simple utility for merging objects. It provides basic deep merge functionality but lacks some of the advanced features and customizability of mixme.
Node.js mixme
Merge multiple object recursively, with TypeScript support. The last object takes precedence over the previous ones. Only objects are merged. Arrays are overwritten.
- Zero dependencies
- Small size
- Pure functions
- ESM and CommonJS support
API
Function merge(...data)
The API is minimalist, pass as many literal objects as you wish, they will all be merged. This function is immutable, the source objects won't be altered.
import { merge } from 'mixme'
const target = merge({a: '1'}, {b: '2'});
Function mutate(...data)
Use the mutate
function to enrich an object. The first argument will be mutated:
import { mutate } from 'mixme'
const source = {a: '1'};
const target = mutate(source, {b: '2'});
target.c = '3';
Function clone(data)
It is possible to clone a literal object by simply calling mixme
with this object as the first argument. Use the clone
function in case you wish to clone any type of argument including arrays:
import { clone } from 'mixme'
const target = clone(['a', 'b'])
Function is_object_literal(object)
Use the is_object_literal
function to ensure an object is literate.
import { is_object_literal } from 'mixme'
is_object_literal({})
is_object_literal(new Error('Catch me'))
is_object_literal([])
Function snake_case(object)
Clone a object and convert its properties into snake case.
import { snake_case } from 'mixme'
snake_case({aA: '1', bB: cC: '2'})
Function compare(item_1, item_2)
Compare two items and return true if their values match.
import { compare } from 'mixme'
compare([{a: 1}], [{a: 1}])
compare({a: 1}, {a: 2})
Example
Create a new object from two objects:
import { merge } from 'mixme'
const obj1 = { a_key: 'a value', b_key: 'b value'}
const obj2 = { b_key: 'new b value'}
const result = merge(obj1, obj2)
assert.eql(result.b_key, 'new b value')
Merge an existing object with a second one:
import { mutate } from 'mixme'
const obj1 = { a_key: 'a value', b_key: 'b value'};
const obj2 = { b_key: 'new b value'};
const result = mutate(obj1, obj2)
assert.eql(result, obj1)
assert.eql(obj1.b_key, 'new b value')
Testing
Clone the repo, install the development dependencies and run the tests:
git clone http://github.com/wdavidw/node-mixme.git .
npm install
npm run test
Developers
To automatically generate a new version:
yarn run release
git push --follow-tags origin master
Package publication is handled by the CI/CD with GitHub action.
Note:
- On release, both the publish and test workflows run in parallel. Not very happy about it but I haven't found a better way.
yarn
does not call the "postrelease" script and npm
fails if the package-lock.json
file is present and git ignored.
Contributors
This package is developed by Adaltas.