| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -1,7 +1,5 @@ | |||
| 1 | 1 | 'use strict'; | |
| 2 | 2 | const { | |
| 3 | - ObjectAssign, | ||
| 4 | - ObjectCreate, | ||
| 5 | 3 | ObjectPrototypeHasOwnProperty, | |
| 6 | 4 | PromisePrototypeThen, | |
| 7 | 5 | PromiseResolve, | |
@@ -25,13 +23,14 @@ const { getPackageType, getPackageScopeConfig } = require('internal/modules/esm/ | |||
| 25 | 23 | const { URL, fileURLToPath } = require('internal/url'); | |
| 26 | 24 | const { ERR_UNKNOWN_FILE_EXTENSION } = require('internal/errors').codes; | |
| 27 | 25 | ||
| 28 | - const protocolHandlers = ObjectAssign(ObjectCreate(null), { | ||
| 26 | + const protocolHandlers = { | ||
| 27 | + '__proto__': null, | ||
| 29 | 28 | 'data:': getDataProtocolModuleFormat, | |
| 30 | 29 | 'file:': getFileProtocolModuleFormat, | |
| 31 | 30 | 'http:': getHttpProtocolModuleFormat, | |
| 32 | 31 | 'https:': getHttpProtocolModuleFormat, | |
| 33 | 32 | 'node:'() { return 'builtin'; }, | |
| 34 | - }); | ||
| 33 | + }; | ||
| 35 | 34 | ||
| 36 | 35 | function getDataProtocolModuleFormat(parsed) { | |
| 37 | 36 | const { 1: mime } = RegExpPrototypeExec( | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -179,39 +179,38 @@ function nextHookFactory(chain, meta, { validateArgs, validateOutput }) { | |||
| 179 | 179 | * the main module and everything in its dependency graph. | |
| 180 | 180 | */ | |
| 181 | 181 | class 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 | + }; | ||
| 215 | 214 | ||
| 216 | 215 | #importMetaInitializer = initializeImportMeta; | |
| 217 | 216 | ||
@@ -305,13 +304,13 @@ class ESMLoader { | |||
| 305 | 304 | ); | |
| 306 | 305 | ||
| 307 | 306 | if (globalPreload) { | |
| 308 | - acceptedHooks.globalPreloader = globalPreload; | ||
| 307 | + acceptedHooks.globalPreload = globalPreload; | ||
| 309 | 308 | } | |
| 310 | 309 | if (resolve) { | |
| 311 | - acceptedHooks.resolver = resolve; | ||
| 310 | + acceptedHooks.resolve = resolve; | ||
| 312 | 311 | } | |
| 313 | 312 | if (load) { | |
| 314 | - acceptedHooks.loader = load; | ||
| 313 | + acceptedHooks.load = load; | ||
| 315 | 314 | } | |
| 316 | 315 | ||
| 317 | 316 | return acceptedHooks; | |
@@ -333,34 +332,34 @@ class ESMLoader { | |||
| 333 | 332 | url, | |
| 334 | 333 | } = customLoaders[i]; | |
| 335 | 334 | const { | |
| 336 | - globalPreloader, | ||
| 337 | - resolver, | ||
| 338 | - loader, | ||
| 335 | + globalPreload, | ||
| 336 | + resolve, | ||
| 337 | + load, | ||
| 339 | 338 | } = ESMLoader.pluckHooks(exports); | |
| 340 | 339 | ||
| 341 | - if (globalPreloader) { | ||
| 340 | + if (globalPreload) { | ||
| 342 | 341 | ArrayPrototypePush( | |
| 343 | - this.#globalPreloaders, | ||
| 342 | + this.#hooks.globalPreload, | ||
| 344 | 343 | { | |
| 345 | - fn: globalPreloader, | ||
| 344 | + fn: globalPreload, | ||
| 346 | 345 | url, | |
| 347 | 346 | }, | |
| 348 | 347 | ); | |
| 349 | 348 | } | |
| 350 | - if (resolver) { | ||
| 349 | + if (resolve) { | ||
| 351 | 350 | ArrayPrototypePush( | |
| 352 | - this.#resolvers, | ||
| 351 | + this.#hooks.resolve, | ||
| 353 | 352 | { | |
| 354 | - fn: resolver, | ||
| 353 | + fn: resolve, | ||
| 355 | 354 | url, | |
| 356 | 355 | }, | |
| 357 | 356 | ); | |
| 358 | 357 | } | |
| 359 | - if (loader) { | ||
| 358 | + if (load) { | ||
| 360 | 359 | ArrayPrototypePush( | |
| 361 | - this.#loaders, | ||
| 360 | + this.#hooks.load, | ||
| 362 | 361 | { | |
| 363 | - fn: loader, | ||
| 362 | + fn: load, | ||
| 364 | 363 | url, | |
| 365 | 364 | }, | |
| 366 | 365 | ); | |
@@ -411,14 +410,14 @@ class ESMLoader { | |||
| 411 | 410 | async getModuleJob(specifier, parentURL, importAssertions) { | |
| 412 | 411 | let importAssertionsForResolve; | |
| 413 | 412 | ||
| 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) { | ||
| 416 | 415 | // We can skip cloning if there are no user-provided loaders because | |
| 417 | 416 | // 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 | + }; | ||
| 422 | 421 | } | |
| 423 | 422 | ||
| 424 | 423 | const { format, url } = | |
@@ -529,11 +528,11 @@ class ESMLoader { | |||
| 529 | 528 | if (!wasArr) { return namespaces[0]; } // We can skip the pairing below | |
| 530 | 529 | ||
| 531 | 530 | for (let i = 0; i < count; i++) { | |
| 532 | - const namespace = ObjectCreate(null); | ||
| 533 | - namespace.url = specifiers[i]; | ||
| 534 | - namespace.exports = namespaces[i]; | ||
| 535 | - | ||
| 536 | - namespaces[i] = namespace; | ||
| 531 | + namespaces[i] = { | ||
| 532 | + __proto__: null, | ||
| 533 | + url: specifiers[i], | ||
| 534 | + exports: namespaces[i], | ||
| 535 | + }; | ||
| 537 | 536 | } | |
| 538 | 537 | ||
| 539 | 538 | return namespaces; | |
@@ -551,7 +550,7 @@ class ESMLoader { | |||
| 551 | 550 | * @returns {{ format: ModuleFormat, source: ModuleSource }} | |
| 552 | 551 | */ | |
| 553 | 552 | async load(url, context = {}) { | |
| 554 | - const chain = this.#loaders; | ||
| 553 | + const chain = this.#hooks.load; | ||
| 555 | 554 | const meta = { | |
| 556 | 555 | chainFinished: null, | |
| 557 | 556 | context, | |
@@ -680,7 +679,7 @@ class ESMLoader { | |||
| 680 | 679 | } | |
| 681 | 680 | ||
| 682 | 681 | preload() { | |
| 683 | - for (let i = this.#globalPreloaders.length - 1; i >= 0; i--) { | ||
| 682 | + for (let i = this.#hooks.globalPreload.length - 1; i >= 0; i--) { | ||
| 684 | 683 | const channel = new MessageChannel(); | |
| 685 | 684 | const { | |
| 686 | 685 | port1: insidePreload, | |
@@ -691,19 +690,19 @@ class ESMLoader { | |||
| 691 | 690 | insideLoader.unref(); | |
| 692 | 691 | ||
| 693 | 692 | const { | |
| 694 | - fn: preloader, | ||
| 693 | + fn: preload, | ||
| 695 | 694 | url: specifier, | |
| 696 | - } = this.#globalPreloaders[i]; | ||
| 695 | + } = this.#hooks.globalPreload[i]; | ||
| 697 | 696 | ||
| 698 | - const preload = preloader({ | ||
| 697 | + const preloaded = preload({ | ||
| 699 | 698 | port: insideLoader, | |
| 700 | 699 | }); | |
| 701 | 700 | ||
| 702 | - if (preload == null) { return; } | ||
| 701 | + if (preloaded == null) { return; } | ||
| 703 | 702 | ||
| 704 | 703 | const hookErrIdentifier = `${specifier} globalPreload`; | |
| 705 | 704 | ||
| 706 | - if (typeof preload !== 'string') { // [2] | ||
| 705 | + if (typeof preloaded !== 'string') { // [2] | ||
| 707 | 706 | throw new ERR_INVALID_RETURN_VALUE( | |
| 708 | 707 | 'a string', | |
| 709 | 708 | hookErrIdentifier, | |
@@ -712,7 +711,7 @@ class ESMLoader { | |||
| 712 | 711 | } | |
| 713 | 712 | const { compileFunction } = require('vm'); | |
| 714 | 713 | const preloadInit = compileFunction( | |
| 715 | - preload, | ||
| 714 | + preloaded, | ||
| 716 | 715 | ['getBuiltin', 'port', 'setImportMetaCallback'], | |
| 717 | 716 | { | |
| 718 | 717 | filename: '<preload>', | |
@@ -785,7 +784,7 @@ class ESMLoader { | |||
| 785 | 784 | async resolve( | |
| 786 | 785 | originalSpecifier, | |
| 787 | 786 | parentURL, | |
| 788 | - importAssertions = ObjectCreate(null) | ||
| 787 | + importAssertions = ObjectCreate(null), | ||
| 789 | 788 | ) { | |
| 790 | 789 | const isMain = parentURL === undefined; | |
| 791 | 790 | ||
@@ -800,7 +799,7 @@ class ESMLoader { | |||
| 800 | 799 | parentURL, | |
| 801 | 800 | ); | |
| 802 | 801 | } | |
| 803 | - const chain = this.#resolvers; | ||
| 802 | + const chain = this.#hooks.resolve; | ||
| 804 | 803 | const context = { | |
| 805 | 804 | conditions: DEFAULT_CONDITIONS, | |
| 806 | 805 | importAssertions, | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -12,10 +12,10 @@ const { ESMLoader } = esmLoaderModule; | |||
| 12 | 12 | const esmLoader = new ESMLoader(); | |
| 13 | 13 | ||
| 14 | 14 | const originalSpecifier = 'foo/bar'; | |
| 15 | - const importAssertions = Object.assign( | ||
| 16 | - Object.create(null), | ||
| 17 | - { type: 'json' }, | ||
| 18 | - ); | ||
| 15 | + const importAssertions = { | ||
| 16 | + __proto__: null, | ||
| 17 | + type: 'json', | ||
| 18 | + }; | ||
| 19 | 19 | const parentURL = 'file:///entrypoint.js'; | |
| 20 | 20 | const resolvedURL = 'file:///foo/bar.js'; | |
| 21 | 21 | const suggestedFormat = 'test'; | |
| Back | FazBrowse Home | New Git URL |
0 commit comments