UNPKG

@flourish/sdk

Version:
64 lines (63 loc) 2.23 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.safeStringify = safeStringify; exports.javaScriptStringify = javaScriptStringify; exports.stringifyPreparedData = stringifyPreparedData; function escapeChar(c) { var hex = c.charCodeAt(0).toString(16); while (hex.length < 4) { hex = "0" + hex; } return "\\u" + hex; } // Stringify an object (etc.) in a form that can safely be inserted // into a <script> block in a web page. function safeStringify(obj) { const raw = JSON.stringify(obj); if (typeof raw === "undefined") { return undefined; } return raw.replace(/[\u2028\u2029<]/g, escapeChar); } function javaScriptStringify(v) { var type = typeof v; if (v == null) { // Catches both null and undefined return "null"; } else if (type === "number" || type === "boolean" || type === "bigint" || type === "string" || type === "symbol") { return safeStringify(v); } if (Array.isArray(v)) { return "[" + v.map(javaScriptStringify).join(",") + "]"; } else if (v instanceof Date) { return "new Date(" + v.getTime() + ")"; } else if (Object.prototype.toString.call(v) === "[object Object]") { return "{" + Object.keys(v).map(function (k) { return safeStringify(k) + ":" + javaScriptStringify(v[k]); }) + "}"; } else { throw new Error("javaScriptStringify couldn't handle " + type + " object: " + v); } } function stringifyDataset(dataset) { return "(function(array, column_names, metadata, timestamps){ array.column_names = column_names; array.metadata = metadata; array.timestamps = timestamps; return array; })(" + javaScriptStringify(dataset) + ", " + safeStringify(dataset.column_names) + ", " + safeStringify(dataset.metadata) + ", " + javaScriptStringify(dataset.timestamps) + ")"; } function stringifyPreparedData(data) { var s = "{"; var first = true; for (var dataset in data) { if (first) { first = false; } else { s += ", "; } s += safeStringify(dataset) + ": " + stringifyDataset(data[dataset]); } s += "}"; return s; }