From 32f8ed134889ad578de1b46d526539b608f308d2 Mon Sep 17 00:00:00 2001 From: Jacob Smith <3012099+JakobJingleheimer@users.noreply.github.com> Date: Mon, 14 Feb 2022 21:59:05 +0100 Subject: [PATCH] esm: remove erroneous `context.parentURL` property passed to `load` hook --- lib/internal/modules/esm/loader.js | 1 - test/es-module/test-esm-loader-hooks.mjs | 72 ++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 test/es-module/test-esm-loader-hooks.mjs diff --git a/lib/internal/modules/esm/loader.js b/lib/internal/modules/esm/loader.js index d5e0b61af6a309..61e609d9ad6c62 100644 --- a/lib/internal/modules/esm/loader.js +++ b/lib/internal/modules/esm/loader.js @@ -282,7 +282,6 @@ class ESMLoader { } = await this.load(url, { format, importAssertions, - parentURL, }); const translator = translators.get(finalFormat); diff --git a/test/es-module/test-esm-loader-hooks.mjs b/test/es-module/test-esm-loader-hooks.mjs new file mode 100644 index 00000000000000..f4e559ae7f6e05 --- /dev/null +++ b/test/es-module/test-esm-loader-hooks.mjs @@ -0,0 +1,72 @@ +// Flags: --expose-internals +import '../common/index.mjs'; +import ESMLoader from '../../lib/internal/modules/esm/loader.js'; +import assert from 'assert'; + +(function testHookArgs() { + const esmLoader = new ESMLoader(); + + const originalSpecifier = 'foo/bar'; + const importAssertions = { type: 'json' }; + const parentURL = 'entrypoint.js'; + const resolvedURL = 'foo/bar.js'; + const suggestedFormat = 'test'; + + const customLoader1 = { + resolve(specifier, context, defaultResolve) { + assert.strictEqual(specifier, originalSpecifier); + assert.strictEqual(Object.keys(context), [ + 'conditions', + 'importAssertions', + 'parentURL', + ]); + assert.strictEqual(typeof context.conditions, 'array'); + assert.strictEqual(typeof context.importAssertions, 'array'); + assert.strictEqual(context.parentURL, parentURL); + assert.strictEqual(typeof defaultResolve, 'function'); + + // This doesn't matter. just to avoid errors + return { + format: suggestedFormat, + url: resolvedURL, + }; + }, + load(resolvedURL, context, defaultLoad) { + assert.strictEqual(resolvedURL, resolvedURL); + assert(new URL(resolvedURL)); + assert.strictEqual(Object.keys(context), [ + 'format', + 'importAssertions', + ]); + assert.strictEqual(context.format, suggestedFormat); + assert.strictEqual(typeof context.importAssertions, importAssertions); + assert.strictEqual(typeof defaultLoad, 'function'); + + // This doesn't matter. just to avoid errors + return { + format: 'module', + source: '', + }; + }, + }; + + esmLoader.addCustomLoaders(customLoader1); + + esmLoader.resolve( + originalSpecifier, + { + conditions: [], + importAssertions, + parentURL, + }, + function mockDefaultResolve() {}, + ); + esmLoader.load( + resolvedURL, + { + format: suggestedFormat, + importAssertions, + }, + function mockDefaultLoad() {}, + ); +})();