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

mutimut

v1.1.0

Published

MUTate IMUTable data

Downloads

6

Readme

mutitmut

Mutate immutable data.

Well that doesn't really make sense. What it really does is mutate data, cloning only objects that are mutated and re-using all other objects.

It can be summed up like this.

  • It does not clone objects that do not need to mutate.
  • It clones and applies changes to objects that do need to mutate; the modified object and its ancestors.

Why

The driver was redux reducers, with their requirements for pure functions, with no side effectsand no mutations.

Libraries like Immutable or mori provide an relatively easy means of managing immutable data, but referencing such data in React component can be a little noisy.

Using mutitmut means that React components can be provided with data that is easy to use. It is just regular JavaScript objects. Yet it is still suitable for shallow equality testing in shouldComponentUpdate implementations.

Examples

Set or update a value somewhere in an object graph. Specify the path either as an array, or in dotted string.

  import {set, update} from 'mutimut';

  const state = {
    array : [1, 2, 4, 8],
    nested: {a: 1, b: 2}
  };

  const state2 = set(state, ['nested', 'b'], 20);
  // { array: [1, 2, 4, 8], nested: {a: 1, b: 20} }

  const state3 = set(state, 'nested.b', 30);
  // { array: [1, 2, 4, 8], nested: {a: 1, b: 30} }

  const state2 = update(state, ['nested', 'b'], value => value + 3);
  // { array: [1, 2, 4, 8], nested: {a: 1, b: 5} }

Note that in all cases new state and nested objects have been created. However the array is not cloned; the original one is kept.

API

Set

  import {set} from 'mutimut';

  set(data, path, value) // => new data

Arguments

  • data (Object): The object graph to be modified.
  • path (Array|String): The path in data to the value to be modified.
  • value (any) : The value to be set in data at the specified path.

Returns

(Object): The modified object graph.

Update

  import {update} from 'mutimut';

  update(data, path, mutator) // => new data

Arguments

  • data (Object): The object graph to be modified.
  • path (Array|String): The path in data to the value to be modified.
  • mutator (Function) : A function that accepts the old value and returns the new one to set.

Returns

(Object): The modified object graph.