UNPKG

@dipscope/type-manager

Version:

Transform JSON strings or plain objects into JS class instances.

62 lines 2.37 kB
export function jsonStringify(x, replacer, space) { var spacing = typeof space === 'number' ? new Array(isFinite(space) ? space + 1 : 0).join(' ') : (space !== null && space !== void 0 ? space : ''); var separator = spacing ? ': ' : ':'; var seen = new Set(); var indents = ['']; var indentify = function (level) { while (indents.length <= level) { indents.push(indents[indents.length - 1] + spacing); } return indents[level]; }; var stringify = function (parent, key, node, level) { if (node && node.toJSON && typeof node.toJSON === 'function') { node = node.toJSON(); } if (replacer) { node = replacer.call(parent, key, node); } if (node === undefined) { return ''; } if (node === null) { return 'null'; } if (typeof node === 'number') { return isFinite(node) ? String(node) : 'null'; } if (typeof node !== 'object') { return JSON.stringify(node); } if (seen.has(node)) { return 'null'; } seen.add(node); var indent = spacing ? '\n' + indentify(level + 1) : ''; var closingIndent = spacing ? '\n' + indentify(level) : ''; var parts = new Array(); if (Array.isArray(node)) { for (var i = 0; i < node.length; i++) { var value = stringify(node, String(i), node[i], level + 1) || 'null'; parts.push("".concat(indent).concat(value)); } var result_1 = "[".concat(parts.join(',')).concat(closingIndent, "]"); seen.delete(node); return result_1; } var nodeKeys = Object.keys(node).sort(); for (var i = 0; i < nodeKeys.length; i++) { var nodeKey = nodeKeys[i]; var value = stringify(node, nodeKey, node[nodeKey], level + 1); if (value === '') { continue; } parts.push("".concat(indent).concat(JSON.stringify(nodeKey)).concat(separator).concat(value)); } var result = "{".concat(parts.join(',')).concat(closingIndent, "}"); seen.delete(node); return result; }; return stringify({ '': x }, '', x, 0); } //# sourceMappingURL=json-stringify.js.map