primitivify
TypeScript icon, indicating that this package has built-in type declarations

3.0.0 • Public • Published

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"

TypeScript package semantic-release

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}'
*/

Package Sidebar

Install

npm i primitivify

Weekly Downloads

0

Version

3.0.0

License

MIT

Unpacked Size

6.58 kB

Total Files

7

Last publish

Collaborators

  • cdaringe