summaryrefslogtreecommitdiff
path: root/lib/internal/process/execution.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/internal/process/execution.js')
-rw-r--r--lib/internal/process/execution.js15
1 files changed, 13 insertions, 2 deletions
diff --git a/lib/internal/process/execution.js b/lib/internal/process/execution.js
index 44c67452f5..8b15fbbae4 100644
--- a/lib/internal/process/execution.js
+++ b/lib/internal/process/execution.js
@@ -57,6 +57,7 @@ function evalModule(source, print) {
function evalScript(name, body, breakFirstLine, print) {
const CJSModule = require('internal/modules/cjs/loader').Module;
const { kVmBreakFirstLineSymbol } = require('internal/util');
+ const { pathToFileURL } = require('url');
const cwd = tryGetCwd();
const origModule = global.module; // Set e.g. when called from the REPL.
@@ -64,20 +65,30 @@ function evalScript(name, body, breakFirstLine, print) {
const module = new CJSModule(name);
module.filename = path.join(cwd, name);
module.paths = CJSModule._nodeModulePaths(cwd);
+
global.kVmBreakFirstLineSymbol = kVmBreakFirstLineSymbol;
+ global.asyncESM = require('internal/process/esm_loader');
+
+ const baseUrl = pathToFileURL(module.filename).href;
+
const script = `
global.__filename = ${JSONStringify(name)};
global.exports = exports;
global.module = module;
global.__dirname = __dirname;
global.require = require;
- const { kVmBreakFirstLineSymbol } = global;
+ const { kVmBreakFirstLineSymbol, asyncESM } = global;
delete global.kVmBreakFirstLineSymbol;
+ delete global.asyncESM;
return require("vm").runInThisContext(
${JSONStringify(body)}, {
filename: ${JSONStringify(name)},
displayErrors: true,
- [kVmBreakFirstLineSymbol]: ${!!breakFirstLine}
+ [kVmBreakFirstLineSymbol]: ${!!breakFirstLine},
+ async importModuleDynamically (specifier) {
+ const loader = await asyncESM.ESMLoader;
+ return loader.import(specifier, ${JSONStringify(baseUrl)});
+ }
});\n`;
const result = module._compile(script, `${name}-wrapper`);
if (print) {