ayakashi
Version:
The next generation web scraping framework
53 lines (52 loc) • 1.81 kB
JavaScript
;
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;