'use strict'; const { ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING, } = require('internal/errors').codes; const { Loader } = require('internal/modules/esm/loader'); const { pathToFileURL } = require('internal/url'); const { wrapToModuleMap, } = require('internal/vm/source_text_module'); exports.initializeImportMetaObject = function(wrap, meta) { const { callbackMap } = internalBinding('module_wrap'); if (callbackMap.has(wrap)) { const { initializeImportMeta } = callbackMap.get(wrap); if (initializeImportMeta !== undefined) { initializeImportMeta(meta, wrapToModuleMap.get(wrap) || wrap); } } }; exports.importModuleDynamicallyCallback = async function(wrap, specifier) { const { callbackMap } = internalBinding('module_wrap'); if (callbackMap.has(wrap)) { const { importModuleDynamically } = callbackMap.get(wrap); if (importModuleDynamically !== undefined) { return importModuleDynamically( specifier, wrapToModuleMap.get(wrap) || wrap); } } throw new ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING(); }; let loaderResolve; exports.loaderPromise = new Promise((resolve) => loaderResolve = resolve); exports.ESMLoader = undefined; exports.initializeLoader = function(cwd, userLoader) { let ESMLoader = new Loader(); const loaderPromise = (async () => { if (userLoader) { const hooks = await ESMLoader.import( userLoader, pathToFileURL(`${cwd}/`).href); ESMLoader = new Loader(); ESMLoader.hook(hooks); exports.ESMLoader = ESMLoader; } return ESMLoader; })(); loaderResolve(loaderPromise); exports.ESMLoader = ESMLoader; };