diff options
Diffstat (limited to 'lib/internal/process/execution.js')
-rw-r--r-- | lib/internal/process/execution.js | 15 |
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) { |