UNPKG

microlink

Version:

Comlink Alternative. Built with JSON-RPC.

43 lines (42 loc) 1.44 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = serialize; var _enums = require("./enums.js"); /** * @name serialize * @description convert functions and promises at any level of nesting to strings * @param {any} it * @param {String} prefix - add to beginning of function ids * @returns [it, funcs] */ function serialize(things, { function_prefix = _enums.DEFAULT_FUNCTION_PREFIX, promise_prefix = _enums.DEFAULT_PROMISE_PREFIX } = {}, generate_id) { const funcs = {}; const proms = {}; if (!generate_id) generate_id = () => Math.random(); function stringify(it) { if (Array.isArray(it)) { return it.map(i => stringify(i)); } else if (typeof it === "function") { const fid = generate_id(it); funcs[fid] = it; return function_prefix + fid; } else if (typeof it === "object" && it !== null && typeof it.then === "function") { const pid = generate_id(it); proms[pid] = it; funcs[pid] = () => it; // create function that returns the promise return promise_prefix + pid; } else if (typeof it === "object" && it !== null && it.constructor.name.indexOf("Array") === -1) { // object that is not null nor a typed array return Object.fromEntries(Object.entries(it).map(([k, v]) => [k, stringify(v)])); } else { return it; } } things = stringify(things); return [things, funcs, proms]; }