Security News
RubyGems.org Adds New Maintainer Role
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
simple-update-in
Advanced tools
A lightweight updateIn
for immutable objects.
We love ImmutableJS. But sometimes, we want to start something from small. Thus, we created this package with zero dependencies.
Under the cover, we use Rest Operator to do most of the heavylifting.
For latest stable, run npm install simple-update-in
.
For active development (master
branch), run npm install simple-update-in@master
.
We share similar signature as ImmutableJS.updateIn:
updateIn(target: Array|Map, path: (Number|String)[], updater?: (value: any) => any)
To make updateIn
efficient, especially, when paired with React. It will return a mixed deep/shallow clone of the target
. It only deep clone on objects that it modified along the path
, and shallow clone objects that it did not modify.
Just like ImmutableJS, we want to make both Array
and Map
a first-class citizen. To work on a map, use a string
as key. For arrays, use a number
as key.
import updateIn from 'simple-update-in';
const from = { one: 1, two: { number: 2 }, thirty: 3 };
const actual = updateIn(from, ['thirty'], three => three * 10);
expect(actual).toEqual({ one: 1, two: { number: 2 }, thirty: 30 });
expect(actual).not.toBe(from); // Something under this tree has changed
expect(actual.two).toBe(to.two); // Nothing under this tree has changed
expect(actual.thirty).toBe(30); // We multiplied it by 10
This is in fact an "upsert" operation.
const from = { one: [1.1, 1.2, 1.3], two: [2] };
const actual = updateIn(from, ['one', 1], value => 'one point two');
expect(actual).toEqual({ one: [1.1, 'one point two', 1.3], two: [2] });
You can also use updateIn
to remove a key by passing a falsy value to the updater
argument.
const from = { one: 1, two: 2 };
const actual = updateIn(from, ['two']);
expect(actual).toEqual({ one: 1 });
expect(actual).not.toBe(from);
expect(actual).not.toHaveProperty('two');
const from = ['zero', 'one', 'two'];
const actual = updateIn(from, [1]);
expect(actual).toEqual(['zero', 'two']);
Adding an item in an array is different than "upsert"-ing in a map. As we want to keep the learning curve very low, thus, we don't want to introduce syntax to do the insertion.
You can use the following code to insert an item with Rest Operator:
const from = { numbers: ['zero', 'one'] };
const actual = updateIn(from, ['numbers'], array => [...array, 'two']);
expect(actual).toEqual({ numbers: ['zero', 'one', 'two'] });
Like us? Star us.
Want to make it better? File us an issue.
Don't like something you see? Submit a pull request.
FAQs
A lightweight `updateIn` for immutable objects.
The npm package simple-update-in receives a total of 29,951 weekly downloads. As such, simple-update-in popularity was classified as popular.
We found that simple-update-in demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
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.
Security News
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.
Security News
Node.js will be enforcing stricter semver-major PR policies a month before major releases to enhance stability and ensure reliable release candidates.
Security News
Research
Socket's threat research team has detected five malicious npm packages targeting Roblox developers, deploying malware to steal credentials and personal data.