Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
chain-able-traverse / src / traversers / stringify.ts
Size: Mime:
import { isArray, isFunction, isObj } from 'chain-able-deps'
import traverse from '../traverse'

/**
 * @TODO HYDRATE PERSIST MINIFY ... SERIALIZE CLASSES... METADATA...
 * @TODO: https://github.com/blakeembrey/javascript-stringify/blob/master/javascript-stringify.js
 */
function stringify(arg: any) {
  const trav = traverse(arg)

  let s = ''
  trav.before(function() {
    if (isArray(trav.iteratee)) s += '['
    else if (isObj(trav.iteratee)) s += '{'
  })

  trav.pre(function() {
    const key = trav.key || trav.path.join('')

    if (key && isObj(trav.iteratee) && !isArray(trav.iteratee)) {
      s += '"' + key + '"' + ':'
    }
  })

  trav.after(function() {
    if (s.endsWith(',')) s = s.slice(0, -1)

    if (isArray(trav.iteratee)) s += ']'
    else if (isObj(trav.iteratee)) s += '}'
  })

  trav.post(child => (s += ','))

  /* prettier-ignore */
  trav.forEach(function(key, node) {
    if (isFunction(node)) {
      s += 'null'
    }
    // aka isPrimitive
    else if (!isArray(node) && !isObj(node)) {
      s += node.toString()
    }
  })
  return s
}

// function std(obj) {
//   if (obj && obj.toJSON) obj = obj.toJSON()
//
//   switch (typeOf(obj)) {
//     case 'string':
//       return '"' + obj.replace(/[\x00-\x1f\\"]/g, escape) + '"'
//     case 'array':
//       return '[' + obj.map(JSON.encode).clean() + ']'
//     case 'object':
//     case 'hash':
//       var string = []
//       Object.each(obj, function(value, key) {
//         var json = JSON.encode(value)
//         if (json) string.push(JSON.encode(key) + ':' + json)
//       })
//       return '{' + string + '}'
//     case 'number':
//     case 'boolean':
//       return '' + obj
//     case 'null':
//       return 'null'
//   }
//
//   return null
// }

export { stringify }
export default stringify