UNPKG

ayakashi

Version:

The next generation web scraping framework

53 lines (52 loc) 1.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getReviver = exports.replacer = void 0; const util_1 = require("util"); const isBrowser = new Function("try {return this===window;}catch(e){ return false;}"); function replacer(_key, value) { if (value && typeof value === "function") { return { __ayakashi__isFunction__: true, __ayakashi__fn__: !isBrowser() ? Buffer.from(value.toString()).toString("base64") : btoa(value.toString()) }; } else if (value && util_1.isRegExp(value)) { return { __ayakashi__isRegex__: true, __ayakashi__source__: value.source, __ayakashi__flags__: value.flags }; } else { return value; } } exports.replacer = replacer; function getReviver(ns) { return function reviver(_key, value) { if (value && typeof value === "object" && value.__ayakashi__isFunction__ && value.__ayakashi__fn__) { const fn = !isBrowser() ? Buffer.from(value.__ayakashi__fn__, "base64").toString("utf8") : atob(value.__ayakashi__fn__); return (new Function("results", ` function getNs() { try { return ${ns}; } catch(_e) { return {ayakashi: {}}; } } return (${fn}).call(getNs(), results); `)); } else if (value && typeof value === "object" && value.__ayakashi__isRegex__) { return new RegExp(value.__ayakashi__source__ || "", value.__ayakashi__flags__); } else { return value; } }; } exports.getReviver = getReviver;