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
The API is minimalist. The most popular functions are merge
, mutate
and is_object_literal
.
Clone a object and convert its properties into snake case.
import { snake_case } from "mixme"
snake_case({aA: "1", bB: cC: "2"})
// Return {a_a: "1", b_b: c_c: "2"}
Convert a camel case string to snake case, used internally by snake_case
.
import { snake_case_str } from "mixme";
snake_case("myValue");
// Return "my_value"
Compare two items and return true if their values match.
import { compare } from "mixme";
compare([{ a: 1 }], [{ a: 1 }]);
// Return true
compare({ a: 1 }, { a: 2 });
// Return false
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"]);
// target is now a copy of source
Use the is_object_literal
function to ensure an object is literate.
import { is_object_literal } from "mixme";
// {} is literate
is_object_literal({});
// error is not literate
is_object_literal(new Error("Catch me"));
// Array is not literate
is_object_literal([]);
The API is minimalist, Merge all literal object provided as arguments. This function is immutable, the source objects won't be altered.
import { merge } from "mixme";
const target = merge({ a: "1" }, { b: "2" });
// target is {a: "1", b: "2"}
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";
// source and target are both {a: "1", b: "2", c: "3"}
Clone a object and convert its properties into snake case.
import { snake_case } from "mixme"
snake_case({aA: "1", bB: cC: "2"})
// Return {a_a: "1", b_b: c_c: "2"}
Convert a camel case string to snake case, used internally by snake_case
.
import { snake_case_str } from "mixme";
snake_case("myValue");
// Return "my_value"
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");
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
To automatically generate a new version:
npm run release
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.
- David Worms: https://github.com/wdavidw
- Paul Farault: https://github.com/PaulFarault
This package is developed by Adaltas.