primitivify
v3.0.0
Published
deep copy data keeping only primitives in plain array or object data structures
Downloads
8
Maintainers
Readme
primitivify
deep copy data keeping only primitives in nested data structures. useful for serializing complex objects where you only care about the raw data contained within.
"primitive-ify"
install
npm install --save primitivify
usage
the best demonstration of the value of this module is exemplified from the tests!
import primitivify from "primitivify";
const dummyFn = () => {};
const complex = {
dummyFn,
a: {
b: {
c: setTimeout(() => {}, 0),
},
d: setInterval(dummyFn, 1e3),
},
b: [dummyFn, "wee", { e: "e" }],
};
t.deepEqual(
{
// observe how non-primitive datas are nulled away
dummyFn: null,
a: {
b: {
c: null,
},
d: null,
},
b: [null, "wee", { e: "e" }],
},
primitivify(complexObj),
"complex"
);
primitivify is immutable--calls return deeply cloned values.
need a custom serializer? use the 2nd argument, onVisit
, to transform the current value being inspected:
primitivify(
{ a: () => {} },
v => typeof v === 'function' ? 'wee' : v)
)
// { a: 'wee' }
why
generally to decomplect objects and/or arrays. consinder a simple example:
JSON.stringify({ usefulData: "beep", a: setTimeout(() => {}, 0) });
/*
Thrown:
TypeError: Converting circular structure to JSON
--> starting at object with constructor 'Timeout'
| property '_idlePrev' -> object with constructor 'TimersList'
--- property '_idleNext' closes the circle
at JSON.stringify (<anonymous>)
*/
JSON.stringify(primitivify({ a: setTimeout(() => {}, 0) }));
/*
'{"usefulData":"beep","a":null}'
*/