immup
Update deeply nested objects/arrays without changing the original source.
Installation
$ npm install immup
API
immup.set(state, path, value: any)
; let state = foo: a: 'b' c: 'd' x: 'y';let nextState = immup;// =>// {// foo: {// a: 'new value',// c: 'd',// },// x: 'y',// } // The original object is not updated.;;
Update an item of array
; let state = todos: id: 1 title: 'foo' completed: true id: 2 title: 'bar' completed: false id: 3 title: 'baz' completed: false ; let targetId = 3;let index = statetodos;immup;// =>// {// todos: [// { id: 1, title: 'foo', completed: true },// { id: 2, title: 'bar', completed: false },// { id: 3, title: 'new title', completed: false },// ]// }
Passing function
; let state = todos: title: 'foo' completed: true title: 'bar' completed: false title: 'baz' completed: false ; // toggle completedimmup;// =>// {// todos: [// { title: 'foo', completed: true },// { title: 'bar', completed: false },// { title: 'baz', completed: true },// ]// }
immup.del(state, path)
Delete a property/element from state.
; let state = todos: title: 'foo' completed: true title: 'bar' completed: false title: 'baz' completed: false ; immup;// =>// {// todos: [// { title: 'foo', completed: true },// { title: 'baz', completed: false },// ]// } immup;// =>// {// todos: [// { title: 'foo', completed: true },// { title: 'bar' },// { title: 'baz', completed: false },// ]// }
immup.merge(state, path, value)
Merge object deeply.
; let state = todos: title: 'foo' completed: true title: 'bar' completed: false extra: a: 'b' x: 'y' title: 'baz' completed: false ; immup;// =>// {// todos: [// { title: 'foo', completed: true },// { title: 'bar', completed: true, extra: { a: 'b', x: 'new value' } },// { title: 'baz', completed: false },// ]// }
immup.append(state, path, ...values)
; let state = todos: title: 'foo' completed: true title: 'bar' completed: false title: 'baz' completed: false ; let newTodo1 = title: 'new1' completed: false ;let newTodo2 = title: 'new2' completed: false ;immup;// =>// {// todos: [// { title: 'foo', completed: true },// { title: 'bar', completed: false },// { title: 'baz', completed: false },// { title: 'new1', completed: false },// { title: 'new2', completed: false },// ]// }
immup.prepend(state, path, ...values)
; let state = todos: title: 'foo' completed: true title: 'bar' completed: false title: 'baz' completed: false ; let newTodo1 = title: 'new1' completed: false ;let newTodo2 = title: 'new2' completed: false ;immup;// =>// {// todos: [// { title: 'new1', completed: false },// { title: 'new2', completed: false },// { title: 'foo', completed: true },// { title: 'bar', completed: false },// { title: 'baz', completed: false },// ]// }
immup(state)
Return instance of Immup
that is chainable object.
; let state = todos: title: 'foo' completed: true title: 'bar' completed: false title: 'baz' completed: false ; // Call `end()` to recieve the state. ;// =>// {// todos: [// { title: 'foo', completed: false },// { title: 'baz', completed: false },// { title: 'new', completed: true },// ],// } instanceof immupImmup; //=> true
Similar modules
License
MIT