Spaces:
Paused
Paused
File size: 1,659 Bytes
8d1819a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #!/usr/bin/env node
const vm = require('vm');
const path = require('path');
const Module = require('module');
// Enhance `require` to search CWD first, then globally
function customRequire(moduleName) {
try {
// Try resolving from CWD's node_modules using Node's require.resolve
const cwdPath = require.resolve(moduleName, { paths: [path.join(process.cwd(), 'node_modules')] });
// console.log("resolved path:", cwdPath);
return require(cwdPath);
} catch (cwdErr) {
try {
// Try resolving as a global module
return require(moduleName);
} catch (globalErr) {
console.error(`Cannot find module: ${moduleName}`);
throw globalErr;
}
}
}
// Create the VM context
const context = vm.createContext({
...global,
require: customRequire, // Use the custom require
__filename: path.join(process.cwd(), 'eval.js'),
__dirname: process.cwd(),
module: { exports: {} },
exports: module.exports,
console: console,
process: process,
Buffer: Buffer,
setTimeout: setTimeout,
setInterval: setInterval,
setImmediate: setImmediate,
clearTimeout: clearTimeout,
clearInterval: clearInterval,
clearImmediate: clearImmediate,
});
// Retrieve the code from the command-line argument
const code = process.argv[2];
const wrappedCode = `
(async function() {
try {
const __result__ = await eval(${JSON.stringify(code)});
if (__result__ !== undefined) console.log('Out[1]:', __result__);
} catch (error) {
console.error(error);
}
})();
`;
vm.runInContext(wrappedCode, context, {
filename: 'eval.js',
lineOffset: -2,
columnOffset: 0,
}).catch(console.error);
|