mono/packages/osrl/vm/eval.js
2025-12-30 16:33:03 +01:00

76 lines
5.3 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.evaluate = void 0;
const vm = require("vm");
const isBuffer = Buffer.isBuffer;
const requireLike = require("require-like");
function merge(a, b) {
if (!a || !b)
return a;
var keys = Object.keys(b);
for (var k, i = 0, n = keys.length; i < n; i++) {
k = keys[i];
a[k] = b[k];
}
return a;
}
// Return the exports/module.exports variable set in the content
// content (String|VmScript): required
const evaluate = (content, filename, scope, includeGlobals) => {
if (typeof filename !== 'string') {
if (typeof filename === 'object') {
includeGlobals = scope;
scope = filename;
filename = '';
}
else if (typeof filename === 'boolean') {
includeGlobals = filename;
scope = {};
filename = '';
}
}
// Expose standard Node globals
let sandbox = {};
let exports = {};
let _filename = filename || module.parent.filename;
if (includeGlobals) {
merge(sandbox, global);
// console is non-enumerable in node v10 and above
sandbox.console = global.console;
// process is non-enumerable in node v12 and above
sandbox.process = global.process;
sandbox.URL = global.URL;
sandbox.require = requireLike(_filename);
}
if (typeof scope === 'object') {
merge(sandbox, scope);
}
sandbox.exports = exports;
sandbox.module = {
exports: exports,
filename: _filename,
id: _filename,
parent: module.parent,
require: sandbox.require || requireLike(_filename)
};
sandbox.global = sandbox;
var options = {
filename: filename,
displayErrors: false
};
if (isBuffer(content)) {
content = content.toString();
}
// Evaluate the content with the given scope
if (typeof content === 'string') {
var stringScript = content.replace(/^\#\!.*/, '');
var script = new vm.Script(stringScript, options);
script.runInNewContext(sandbox, options);
}
else {
content.runInNewContext(sandbox, options);
}
return sandbox.module.exports;
};
exports.evaluate = evaluate;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92bS9ldmFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlCQUF3QjtBQUN4QixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFBO0FBQ2hDLDRDQUE2QztBQUU3QyxTQUFTLEtBQUssQ0FBRSxDQUFDLEVBQUUsQ0FBQztJQUNsQixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3RCLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDekIsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDOUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7S0FDWjtJQUNELE9BQU8sQ0FBQyxDQUFBO0FBQ1YsQ0FBQztBQUVELGdFQUFnRTtBQUNoRSxzQ0FBc0M7QUFDL0IsTUFBTSxRQUFRLEdBQUcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsRUFBRTtJQUVuRSxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRTtRQUNoQyxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRTtZQUNoQyxjQUFjLEdBQUcsS0FBSyxDQUFBO1lBQ3RCLEtBQUssR0FBRyxRQUFRLENBQUE7WUFDaEIsUUFBUSxHQUFHLEVBQUUsQ0FBQTtTQUNkO2FBQU0sSUFBSSxPQUFPLFFBQVEsS0FBSyxTQUFTLEVBQUU7WUFDeEMsY0FBYyxHQUFHLFFBQVEsQ0FBQTtZQUN6QixLQUFLLEdBQUcsRUFBRSxDQUFBO1lBQ1YsUUFBUSxHQUFHLEVBQUUsQ0FBQTtTQUNkO0tBQ0Y7SUFFRCwrQkFBK0I7SUFDL0IsSUFBSSxPQUFPLEdBQU8sRUFBRSxDQUFBO0lBQ3BCLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQTtJQUNoQixJQUFJLFNBQVMsR0FBRyxRQUFRLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7SUFFbkQsSUFBSSxjQUFjLEVBQUU7UUFDbEIsS0FBSyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQTtRQUN0QixrREFBa0Q7UUFDbEQsT0FBTyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFBO1FBQ2hDLGtEQUFrRDtRQUNsRCxPQUFPLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUE7UUFDaEMsT0FBTyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFBO1FBQ3hCLE9BQU8sQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0tBQ3pDO0lBRUQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDN0IsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQTtLQUN0QjtJQUVELE9BQU8sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBO0lBQ3pCLE9BQU8sQ0FBQyxNQUFNLEdBQUc7UUFDZixPQUFPLEVBQUUsT0FBTztRQUNoQixRQUFRLEVBQUUsU0FBUztRQUNuQixFQUFFLEVBQUUsU0FBUztRQUNiLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtRQUNyQixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sSUFBSSxXQUFXLENBQUMsU0FBUyxDQUFDO0tBQ25ELENBQUE7SUFDRCxPQUFPLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQTtJQUV4QixJQUFJLE9BQU8sR0FBRztRQUNaLFFBQVEsRUFBRSxRQUFRO1FBQ2xCLGFBQWEsRUFBRSxLQUFLO0tBQ3JCLENBQUE7SUFFRCxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUNyQixPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFBO0tBQzdCO0lBRUQsNENBQTRDO0lBQzVDLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO1FBQy9CLElBQUksWUFBWSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ2pELElBQUksTUFBTSxHQUFHLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDakQsTUFBTSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUE7S0FDekM7U0FBTTtRQUNMLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0tBQzFDO0lBRUQsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQTtBQUMvQixDQUFDLENBQUE7QUE5RFksUUFBQSxRQUFRLFlBOERwQiJ9