GitHub - rubeniskov/mutant-json: A complete mutate json function which traverses using traverse-json. (original) (raw)
mutant-json
A complete mutant json which uses traverse-json to enable traverse filtering.
Motivation
Many time I've encontered with the difficult task of mutate a object with nested properties by filtering properties using a single function, so a mutant-json
solves this using traverse-json
with multiple options for traversing.
Installation
Npm:
npm install mutant-json --save
Yarn:
Functions
mutantJson(target, process, opts)
Iterates through the given iterator and applies mutation whereas the iterator entry returns. Also works with promises. The iteratee must return an entry of [path, value].
Typedefs
MutanPatch : function
Patch definition acording to the jsonpatch standard
MutantPatcher : function
MutantProcess : function
MutantJsonEntry : Array
MutantOptions : Object
mutantJson(target, process, opts)
Iterates through the given iterator and applies mutation whereas the iterator entry returns. Also works with promises. The iteratee must return an entry of [path, value].
Kind: global function
Param | Type |
---|---|
target | any |
process | MutantProcess |
opts | MutantOptions |
Example
Working with promises
const mutateJson = require('mutant-json');
const recursiveObjectPromises = { foo: 0, nested: Promise.resolve({ depth: 1, nested: Promise.resolve({ depth: 2, nested: Promise.resolve({ depth: 3, nested: Promise.resolve({ depth: 4, }), }), }), }), bar: 1, };
const actual = await mutateJson(recursiveObjectPromises, (mutate, value) => { mutate({ value: value * 2, }); });
console.log(actual);
Output
{
foo: 0,
nested: {
depth: 2,
nested: {
depth: 4,
nested: {
depth: 6,
nested: {
depth: 8,
},
},
},
},
bar: 2,
}
MutanPatch : function
Patch definition acording to the jsonpatch standard
Kind: global typedef
Param | Type | Description |
---|---|---|
op | "remove" | "replace" | Patch operation |
value | any |
MutantPatcher : function
Kind: global typedef
Param | Type |
---|---|
patches | MutanPatch | Array. |
MutantProcess : function
Kind: global typedef
Param | Type |
---|---|
mutate | MutationPatcher |
value | any |
path | string |
result | any |
MutantJsonEntry : Array
Kind: global typedef
Properties
Name | Type | Description |
---|---|---|
0 | string | JSONPointer |
1 | any | Value |
MutantOptions : Object
Kind: global typedef
Properties
Name | Type | Default | Description | |
---|---|---|---|---|
[recursive] | Boolean | true | enable/disable nested arrays and objects recursion | |
[nested] | Boolean | false | also emit nested array or objects | |
[step] | Boolean | 1 | the step to increment, default 1 | |
[test] | String | function | RegeExp | false | regexp, string minimatch or function to filter properties |
[once] | Boolean | false | Stops when applies the first mutation | |
[promises] | Boolean | true | Processing promises taking the resolved as part of the result | |
[promise] | Boolean | false | Forces to return a promise even if no promises detected | |
[iterator] | Array. | Iterable | Iterator | Iterator default traverse-json | |
[patcher] | function | Patcher function |