npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

mixme

v1.1.0

Published

A library for recursively merging JavaScript objects

Downloads

4,404,188

Readme

Node.js mixme

Build Status

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

The API is minimalist. The most popular functions are merge, mutate and is_object_literal.

Function camelize(object)

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"}

Function camelize_str(str)

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"

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}])
// Return true

compare({a: 1}, {a: 2})
// Return false

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"])
// target is now a copy of source

Function is_object_literal(object)

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([])

Function merge(...data)

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"}

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";
// source and target are both {a: "1", b: "2", c: "3"}

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"})
// Return {a_a: "1", b_b: c_c: "2"}

Function snake_case_str(str)

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"

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

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.