@@ -179,39 +179,38 @@ function nextHookFactory(chain, meta, { validateArgs, validateOutput }) {
179179 * the main module and everything in its dependency graph.
180180 */
181181class ESMLoader {
182- /**
183- * Prior to ESM loading. These are called once before any modules are started.
184- * @private
185- * @property {KeyedHook[] } globalPreloaders Last-in-first-out
186- * list of preload hooks.
187- */
188- #globalPreloaders = [ ] ;
189-
190- /**
191- * Phase 2 of 2 in ESM loading.
192- * @private
193- * @property {KeyedHook[] } loaders Last-in-first-out
194- * collection of loader hooks.
195- */
196- #loaders = [
197- {
198- fn : defaultLoad ,
199- url : 'node:internal/modules/esm/load' ,
200- } ,
201- ] ;
202-
203- /**
204- * Phase 1 of 2 in ESM loading.
205- * @private
206- * @property {KeyedHook[] } resolvers Last-in-first-out
207- * collection of resolver hooks.
208- */
209- #resolvers = [
210- {
211- fn : defaultResolve ,
212- url : 'node:internal/modules/esm/resolve' ,
213- } ,
214- ] ;
182+ #hooks = {
183+ /**
184+ * Prior to ESM loading. These are called once before any modules are started.
185+ * @private
186+ * @property {KeyedHook[] } globalPreload Last-in-first-out list of preload hooks.
187+ */
188+ globalPreload : [ ] ,
189+
190+ /**
191+ * Phase 2 of 2 in ESM loading (phase 1 is below).
192+ * @private
193+ * @property {KeyedHook[] } load Last-in-first-out collection of loader hooks.
194+ */
195+ load : [
196+ {
197+ fn : defaultLoad ,
198+ url : 'node:internal/modules/esm/load' ,
199+ } ,
200+ ] ,
201+
202+ /**
203+ * Phase 1 of 2 in ESM loading.
204+ * @private
205+ * @property {KeyedHook[] } resolve Last-in-first-out collection of resolve hooks.
206+ */
207+ resolve : [
208+ {
209+ fn : defaultResolve ,
210+ url : 'node:internal/modules/esm/resolve' ,
211+ } ,
212+ ] ,
213+ } ;
215214
216215 #importMetaInitializer = initializeImportMeta ;
217216
@@ -305,13 +304,13 @@ class ESMLoader {
305304 ) ;
306305
307306 if ( globalPreload ) {
308- acceptedHooks . globalPreloader = globalPreload ;
307+ acceptedHooks . globalPreload = globalPreload ;
309308 }
310309 if ( resolve ) {
311- acceptedHooks . resolver = resolve ;
310+ acceptedHooks . resolve = resolve ;
312311 }
313312 if ( load ) {
314- acceptedHooks . loader = load ;
313+ acceptedHooks . load = load ;
315314 }
316315
317316 return acceptedHooks ;
@@ -333,34 +332,34 @@ class ESMLoader {
333332 url,
334333 } = customLoaders [ i ] ;
335334 const {
336- globalPreloader ,
337- resolver ,
338- loader ,
335+ globalPreload ,
336+ resolve ,
337+ load ,
339338 } = ESMLoader . pluckHooks ( exports ) ;
340339
341- if ( globalPreloader ) {
340+ if ( globalPreload ) {
342341 ArrayPrototypePush (
343- this . #globalPreloaders ,
342+ this . #hooks . globalPreload ,
344343 {
345- fn : globalPreloader ,
344+ fn : globalPreload ,
346345 url,
347346 } ,
348347 ) ;
349348 }
350- if ( resolver ) {
349+ if ( resolve ) {
351350 ArrayPrototypePush (
352- this . #resolvers ,
351+ this . #hooks . resolve ,
353352 {
354- fn : resolver ,
353+ fn : resolve ,
355354 url,
356355 } ,
357356 ) ;
358357 }
359- if ( loader ) {
358+ if ( load ) {
360359 ArrayPrototypePush (
361- this . #loaders ,
360+ this . #hooks . load ,
362361 {
363- fn : loader ,
362+ fn : load ,
364363 url,
365364 } ,
366365 ) ;
@@ -411,14 +410,14 @@ class ESMLoader {
411410 async getModuleJob ( specifier , parentURL , importAssertions ) {
412411 let importAssertionsForResolve ;
413412
414- // By default, `this.#loaders ` contains just the Node default load hook
415- if ( this . #loaders . length !== 1 ) {
413+ // By default, `this.#hooks.load ` contains just the Node default load hook
414+ if ( this . #hooks . load . length !== 1 ) {
416415 // We can skip cloning if there are no user-provided loaders because
417416 // the Node.js default resolve hook does not use import assertions.
418- importAssertionsForResolve = ObjectAssign (
419- ObjectCreate ( null ) ,
420- importAssertions ,
421- ) ;
417+ importAssertionsForResolve = {
418+ __proto__ : null ,
419+ ... importAssertions ,
420+ } ;
422421 }
423422
424423 const { format, url } =
@@ -533,11 +532,11 @@ class ESMLoader {
533532 if ( ! wasArr ) { return namespaces [ 0 ] ; } // We can skip the pairing below
534533
535534 for ( let i = 0 ; i < count ; i ++ ) {
536- const namespace = ObjectCreate ( null ) ;
537- namespace . url = specifiers [ i ] ;
538- namespace . exports = namespaces [ i ] ;
539-
540- namespaces [ i ] = namespace ;
535+ namespaces [ i ] = {
536+ __proto__ : null ,
537+ url : specifiers [ i ] ,
538+ exports : namespaces [ i ] ,
539+ } ;
541540 }
542541
543542 return namespaces ;
@@ -555,7 +554,7 @@ class ESMLoader {
555554 * @returns {{ format: ModuleFormat, source: ModuleSource } }
556555 */
557556 async load ( url , context = { } ) {
558- const chain = this . #loaders ;
557+ const chain = this . #hooks . load ;
559558 const meta = {
560559 chainFinished : null ,
561560 context,
@@ -684,7 +683,7 @@ class ESMLoader {
684683 }
685684
686685 preload ( ) {
687- for ( let i = this . #globalPreloaders . length - 1 ; i >= 0 ; i -- ) {
686+ for ( let i = this . #hooks . globalPreload . length - 1 ; i >= 0 ; i -- ) {
688687 const channel = new MessageChannel ( ) ;
689688 const {
690689 port1 : insidePreload ,
@@ -695,19 +694,19 @@ class ESMLoader {
695694 insideLoader . unref ( ) ;
696695
697696 const {
698- fn : preloader ,
697+ fn : preload ,
699698 url : specifier ,
700- } = this . #globalPreloaders [ i ] ;
699+ } = this . #hooks . globalPreload [ i ] ;
701700
702- const preload = preloader ( {
701+ const preloaded = preload ( {
703702 port : insideLoader ,
704703 } ) ;
705704
706- if ( preload == null ) { return ; }
705+ if ( preloaded == null ) { return ; }
707706
708707 const hookErrIdentifier = `${ specifier } globalPreload` ;
709708
710- if ( typeof preload !== 'string' ) { // [2]
709+ if ( typeof preloaded !== 'string' ) { // [2]
711710 throw new ERR_INVALID_RETURN_VALUE (
712711 'a string' ,
713712 hookErrIdentifier ,
@@ -716,7 +715,7 @@ class ESMLoader {
716715 }
717716 const { compileFunction } = require ( 'vm' ) ;
718717 const preloadInit = compileFunction (
719- preload ,
718+ preloaded ,
720719 [ 'getBuiltin' , 'port' , 'setImportMetaCallback' ] ,
721720 {
722721 filename : '<preload>' ,
@@ -789,7 +788,7 @@ class ESMLoader {
789788 async resolve (
790789 originalSpecifier ,
791790 parentURL ,
792- importAssertions = ObjectCreate ( null )
791+ importAssertions = ObjectCreate ( null ) ,
793792 ) {
794793 const isMain = parentURL === undefined ;
795794
@@ -804,7 +803,7 @@ class ESMLoader {
804803 parentURL ,
805804 ) ;
806805 }
807- const chain = this . #resolvers ;
806+ const chain = this . #hooks . resolve ;
808807 const context = {
809808 conditions : DEFAULT_CONDITIONS ,
810809 importAssertions,
0 commit comments