cdaringe / primitivify

deep copy data keeping only primitives in nested data structures

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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"

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

About

deep copy data keeping only primitives in nested data structures


Languages

Language:TypeScript 91.3%Language:Shell 6.6%Language:JavaScript 2.1%