Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

immutable-update

Package Overview
Dependencies
Maintainers
1
Versions
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

immutable-update

A simple utility for efficiently applying updates to immutable objects

  • 1.0.0
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

Immutable Update

NPM Version Build Status Downloads Stats Coverage Status

Description

A utility function for efficiently applying updates to objects that are being treated as immutable data.

Why?

Immutability is, in general, a useful pattern for state management patterns using libraries like Redux. However, not everybody wants to use a large immutability library like ImmutableJS, and using regular objects can lead to a lot of boilerplate.

This library allows you to turn this...

function reducer(state, action) {
  switch (action.type) {
    case MY_ACTION: {
      return {
        ...state,
        subObject1: {
          ...state.subObject1,
          myChange: 'newVal',
        },
        subObject2: {
          ...state.subObject2,
          myOtherChange: 'otherNewVal',
        },
      }
    }
  }
}

into this...

import immutableUpdate from 'immutable-update';

function reducer(state, action) {
  switch (action.type) {
    case MY_ACTION: {
      return immutableUpdate(state, {
        subObject1: { myChange: 'newVal' },
        subObject2: { myOtherChange: 'otherNewVal' },
      });
    }
  }
}

All references to objects that aren't changed are preserved, so any memoization or React pure rendering things that are checking object identities will work as expected, and no unnecessary copies are made.

Installation

npm install --save immutable-update

Usage

The immutableState function is exported as a UMD build, with the name in the global namespace being immutableState if you're not using any module system.

Override param

The function also accepts an optional 3rd parameter of an array of paths to override, instead of merging.

For example:

const state = {
  foo: {
    bar: 'baz',
    today: 'tix',
  },
};

// Returns { foo: { bar: 'hiya', today: 'tix' } }
immutableState(state, {
  foo: {
    bar: 'hiya',
  },
});

// Returns { foo: { bar: 'hiya' } }
immutableState(state, {
  foo: {
    bar: 'hiya',
  },
}, [
  'foo'
]);

The strings in this array can be of any format supported by lodash#set.

Contributing

Please make sure your code passes our tests and linter. PRs/Issues welcome!

npm test
npm run lint

Meta

Distributed under the MIT License. See LICENSE for more information.

Developers:

Jeremy Tice @jetpacmonkey

Keywords

FAQs

Package last updated on 02 Aug 2017

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc