3.0.0 • Published 4 months ago
primitivify v3.0.0
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}'
*/