UNPKG

foop

Version:

interfaces that describe their intentions.

75 lines (64 loc) 6.61 kB
var isArray = require('../is/array') var isFunction = require('../is/function') var isObj = require('../is/obj') var traverse = require('../traverse') // @TODO HYDRATE PERSIST MINIFY ... SERIALIZE CLASSES... METADATA... // @TODO: https://github.com/blakeembrey/javascript-stringify/blob/master/javascript-stringify.js function stringify(arg) { var trav = traverse(arg) var s = '' trav.before(function() { if (isArray(trav.iteratee)) { s += '[' } else if (isObj(trav.iteratee)) { s += '{' } }) trav.pre(function() { var 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(function (child) { return (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 // } module.exports = stringify //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5naWZ5LmpzIiwic291cmNlcyI6WyJzdHJpbmdpZnkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2lzL2FycmF5JylcbmNvbnN0IGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuLi9pcy9mdW5jdGlvbicpXG5jb25zdCBpc09iaiA9IHJlcXVpcmUoJy4uL2lzL29iaicpXG5jb25zdCB0cmF2ZXJzZSA9IHJlcXVpcmUoJy4uL3RyYXZlcnNlJylcblxuLy8gQFRPRE8gSFlEUkFURSBQRVJTSVNUIE1JTklGWSAuLi4gU0VSSUFMSVpFIENMQVNTRVMuLi4gTUVUQURBVEEuLi5cbi8vIEBUT0RPOiBodHRwczovL2dpdGh1Yi5jb20vYmxha2VlbWJyZXkvamF2YXNjcmlwdC1zdHJpbmdpZnkvYmxvYi9tYXN0ZXIvamF2YXNjcmlwdC1zdHJpbmdpZnkuanNcbmZ1bmN0aW9uIHN0cmluZ2lmeShhcmcpIHtcbiAgY29uc3QgdHJhdiA9IHRyYXZlcnNlKGFyZylcblxuICBsZXQgcyA9ICcnXG4gIHRyYXYuYmVmb3JlKGZ1bmN0aW9uKCkge1xuICAgIGlmIChpc0FycmF5KHRyYXYuaXRlcmF0ZWUpKSBzICs9ICdbJ1xuICAgIGVsc2UgaWYgKGlzT2JqKHRyYXYuaXRlcmF0ZWUpKSBzICs9ICd7J1xuICB9KVxuXG4gIHRyYXYucHJlKGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGtleSA9IHRyYXYua2V5IHx8IHRyYXYucGF0aC5qb2luKCcnKVxuXG4gICAgaWYgKGtleSAmJiBpc09iaih0cmF2Lml0ZXJhdGVlKSAmJiAhaXNBcnJheSh0cmF2Lml0ZXJhdGVlKSkge1xuICAgICAgcyArPSAnXCInICsga2V5ICsgJ1wiJyArICc6J1xuICAgIH1cbiAgfSlcblxuICB0cmF2LmFmdGVyKGZ1bmN0aW9uKCkge1xuICAgIGlmIChzLmVuZHNXaXRoKCcsJykpIHMgPSBzLnNsaWNlKDAsIC0xKVxuXG4gICAgaWYgKGlzQXJyYXkodHJhdi5pdGVyYXRlZSkpIHMgKz0gJ10nXG4gICAgZWxzZSBpZiAoaXNPYmoodHJhdi5pdGVyYXRlZSkpIHMgKz0gJ30nXG4gIH0pXG5cbiAgdHJhdi5wb3N0KGNoaWxkID0+IChzICs9ICcsJykpXG5cbiAgLyogcHJldHRpZXItaWdub3JlICovXG4gIHRyYXYuZm9yRWFjaChmdW5jdGlvbihrZXksIG5vZGUpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihub2RlKSkge1xuICAgICAgcyArPSAnbnVsbCdcbiAgICB9XG4gICAgLy8gYWthIGlzUHJpbWl0aXZlXG4gICAgZWxzZSBpZiAoIWlzQXJyYXkobm9kZSkgJiYgIWlzT2JqKG5vZGUpKSB7XG4gICAgICBzICs9IG5vZGUudG9TdHJpbmcoKVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIHNcbn1cblxuLy8gZnVuY3Rpb24gc3RkKG9iaikge1xuLy8gICBpZiAob2JqICYmIG9iai50b0pTT04pIG9iaiA9IG9iai50b0pTT04oKVxuLy9cbi8vICAgc3dpdGNoICh0eXBlT2Yob2JqKSkge1xuLy8gICAgIGNhc2UgJ3N0cmluZyc6XG4vLyAgICAgICByZXR1cm4gJ1wiJyArIG9iai5yZXBsYWNlKC9bXFx4MDAtXFx4MWZcXFxcXCJdL2csIGVzY2FwZSkgKyAnXCInXG4vLyAgICAgY2FzZSAnYXJyYXknOlxuLy8gICAgICAgcmV0dXJuICdbJyArIG9iai5tYXAoSlNPTi5lbmNvZGUpLmNsZWFuKCkgKyAnXSdcbi8vICAgICBjYXNlICdvYmplY3QnOlxuLy8gICAgIGNhc2UgJ2hhc2gnOlxuLy8gICAgICAgdmFyIHN0cmluZyA9IFtdXG4vLyAgICAgICBPYmplY3QuZWFjaChvYmosIGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbi8vICAgICAgICAgdmFyIGpzb24gPSBKU09OLmVuY29kZSh2YWx1ZSlcbi8vICAgICAgICAgaWYgKGpzb24pIHN0cmluZy5wdXNoKEpTT04uZW5jb2RlKGtleSkgKyAnOicgKyBqc29uKVxuLy8gICAgICAgfSlcbi8vICAgICAgIHJldHVybiAneycgKyBzdHJpbmcgKyAnfSdcbi8vICAgICBjYXNlICdudW1iZXInOlxuLy8gICAgIGNhc2UgJ2Jvb2xlYW4nOlxuLy8gICAgICAgcmV0dXJuICcnICsgb2JqXG4vLyAgICAgY2FzZSAnbnVsbCc6XG4vLyAgICAgICByZXR1cm4gJ251bGwnXG4vLyAgIH1cbi8vXG4vLyAgIHJldHVybiBudWxsXG4vLyB9XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5naWZ5XG4iXSwibmFtZXMiOlsiY29uc3QiLCJsZXQiXSwibWFwcGluZ3MiOiJBQUFBQSxHQUFLLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7QUFDdENBLEdBQUssQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDO0FBQzVDQSxHQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7QUFDbENBLEdBQUssQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQzs7OztBQUl2QyxTQUFTLFNBQVMsQ0FBQyxHQUFHLEVBQUU7RUFDdEJBLEdBQUssQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQzs7RUFFMUJDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRTtFQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVztJQUNyQixJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBQSxDQUFDLElBQUksR0FBRyxFQUFBO1NBQy9CLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFBLENBQUMsSUFBSSxHQUFHLEVBQUE7R0FDeEMsQ0FBQzs7RUFFRixJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVc7SUFDbEJELEdBQUssQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7O0lBRTFDLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO01BQzFELENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO0tBQzNCO0dBQ0YsQ0FBQzs7RUFFRixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVc7SUFDcEIsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUE7O0lBRXZDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFBLENBQUMsSUFBSSxHQUFHLEVBQUE7U0FDL0IsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUEsQ0FBQyxJQUFJLEdBQUcsRUFBQTtHQUN4QyxDQUFDOztFQUVGLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBQSxLQUFLLENBQUEsQ0FBQyxBQUFHLFNBQUEsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUEsQ0FBQzs7O0VBRzlCLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLEVBQUUsSUFBSSxFQUFFO0lBQy9CLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFO01BQ3BCLENBQUMsSUFBSSxNQUFNO0tBQ1o7O1NBRUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRTtNQUN2QyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtLQUNyQjtHQUNGLENBQUM7RUFDRixPQUFPLENBQUM7Q0FDVDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRCRCxNQUFNLENBQUMsT0FBTyxHQUFHLFNBQVM7In0=