"use strict"; module.exports = function jsonStringifyPreReplacer(data, replacer = ((key, value) => value)) { function stringifyPiece(parent, key, node, level) { let replacedNode = replacer(key, node); let serializedNode; if (replacedNode != null && typeof replacedNode.toJSON === "function") { serializedNode = replacedNode.toJSON(); } else { serializedNode = replacedNode; } if (serializedNode === undefined) { return; } else if (typeof serializedNode !== "object" || serializedNode === null) { return JSON.stringify(serializedNode); } else if (Array.isArray(serializedNode)) { let stringifiedItems = serializedNode.map((item, i) => { let stringifiedItem = stringifyPiece(serializedNode, i, item, level + 1); if (stringifiedItem === undefined) { return null; } else { return stringifiedItem; } }); return `[${stringifiedItems.join(",")}]`; } else { let stringifiedItems = Object.entries(serializedNode).map(([key, value]) => { let stringifiedValue = stringifyPiece(serializedNode, key, value, level + 1); if (stringifiedValue !== undefined) { return `${JSON.stringify(key)}:${stringifiedValue}`; } else { return undefined; } }).filter((item) => { return (item !== undefined); }); return `{${stringifiedItems.join(",")}}`; } } return stringifyPiece({"": data}, "", data, 0); };