diff --git a/lib/internal/modules/esm/loader.js b/lib/internal/modules/esm/loader.js index 34a9393ac18f01..73132ad5b2a6c4 100644 --- a/lib/internal/modules/esm/loader.js +++ b/lib/internal/modules/esm/loader.js @@ -14,7 +14,8 @@ const { hardenRegExp, } = primordials; - +const { LoadCache, ResolveCache } = require('internal/modules/esm/module_map'); +const { ModuleJob, ModuleJobSync } = require('internal/modules/esm/module_job'); // This is needed to avoid cycles in esm/resolve <-> cjs/loader const { kIsExecuting, @@ -85,24 +86,6 @@ const { isPromise } = require('internal/util/types'); * @typedef {import('url').URL} URL */ -/** - * Lazy loads the module_map module and returns a new instance of ResolveCache. - * @returns {import('./module_map.js').ResolveCache} - */ -function newResolveCache() { - const { ResolveCache } = require('internal/modules/esm/module_map'); - return new ResolveCache(); -} - -/** - * Generate a load cache (to store the final result of a load-chain for a particular module). - * @returns {import('./module_map.js').LoadCache} - */ -function newLoadCache() { - const { LoadCache } = require('internal/modules/esm/module_map'); - return new LoadCache(); -} - const { translators } = require('internal/modules/esm/translators'); const { defaultResolve } = require('internal/modules/esm/resolve'); const { defaultLoadSync, throwUnknownModuleFormat } = require('internal/modules/esm/load'); @@ -161,12 +144,12 @@ class ModuleLoader { /** * Registry of resolved specifiers */ - #resolveCache = newResolveCache(); + #resolveCache = new ResolveCache(); /** * Registry of loaded modules, akin to `require.cache` */ - loadCache = newLoadCache(); + loadCache = new LoadCache(); /** * @see {AsyncLoaderHooks.isForAsyncLoaderHookWorker} @@ -238,7 +221,6 @@ class ModuleLoader { * @returns {Promise} The module object. */ async executeModuleJob(url, wrap, isEntryPoint = false) { - const { ModuleJob } = require('internal/modules/esm/module_job'); const module = await onImport.tracePromise(async () => { const job = new ModuleJob(this, url, undefined, wrap, kEvaluationPhase, false, false, kImportInImportedESM); this.loadCache.set(url, undefined, job); @@ -357,7 +339,6 @@ class ModuleLoader { const wrap = compileSourceTextModule(url, source, kUser); const inspectBrk = (isMain && getOptionValue('--inspect-brk')); - const { ModuleJobSync } = require('internal/modules/esm/module_job'); job = new ModuleJobSync(this, url, kEmptyObject, wrap, kEvaluationPhase, isMain, inspectBrk, kImportInRequiredESM); this.loadCache.set(url, kImplicitTypeAttribute, job); @@ -587,7 +568,6 @@ class ModuleLoader { assert(moduleOrModulePromise instanceof ModuleWrap, `Expected ModuleWrap for loading ${url}`); } - const { ModuleJob, ModuleJobSync } = require('internal/modules/esm/module_job'); // TODO(joyeecheung): use ModuleJobSync for kRequireInImportedCJS too. const ModuleJobCtor = (requestType === kImportInRequiredESM ? ModuleJobSync : ModuleJob); const isMain = (parentURL === undefined); diff --git a/test/parallel/test-bootstrap-modules.js b/test/parallel/test-bootstrap-modules.js index 92bf3be1f612ff..69f1d9f44c9c6c 100644 --- a/test/parallel/test-bootstrap-modules.js +++ b/test/parallel/test-bootstrap-modules.js @@ -133,6 +133,8 @@ if (isMainThread) { 'NativeModule internal/modules/esm/load', 'NativeModule internal/modules/esm/resolve', 'NativeModule internal/modules/esm/translators', + 'NativeModule internal/modules/esm/module_job', + 'NativeModule internal/modules/esm/module_map', 'NativeModule url', ].forEach(expected.beforePreExec.add.bind(expected.beforePreExec)); } else { // Worker.