mirror of
https://github.com/nodejs/node.git
synced 2026-10-14 10:26:26 -04:00
esm: remove erroneous context.parentURL property passed to load hook
PR-URL: https://github.com/nodejs/node/pull/41975 Reviewed-By: Geoffrey Booth <webadmin@geoffreybooth.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com> Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
This commit is contained in:
1 parent
6700b5c9e1
commit
8843381d9f
2 files changed
+76
-1
No files matched your search
@@ -282,7 +282,6 @@ class ESMLoader {
|
||||
} = await this.load(url, {
|
||||
format,
|
||||
importAssertions,
|
||||
parentURL,
|
||||
});
|
||||
|
||||
const translator = translators.get(finalFormat);
|
||||
|
||||
@@ -0,0 +1,76 @@
|
||||
// Flags: --expose-internals
|
||||
import { mustCall } from '../common/index.mjs';
|
||||
import esmLoaderModule from 'internal/modules/esm/loader';
|
||||
import assert from 'assert';
|
||||
|
||||
const { ESMLoader } = esmLoaderModule;
|
||||
|
||||
/**
|
||||
* Verify custom hooks are called with appropriate arguments.
|
||||
*/
|
||||
{
|
||||
const esmLoader = new ESMLoader();
|
||||
|
||||
const originalSpecifier = 'foo/bar';
|
||||
const importAssertions = Object.assign(
|
||||
Object.create(null),
|
||||
{ type: 'json' },
|
||||
);
|
||||
const parentURL = 'file:///entrypoint.js';
|
||||
const resolvedURL = 'file:///foo/bar.js';
|
||||
const suggestedFormat = 'test';
|
||||
|
||||
function resolve(specifier, context, defaultResolve) {
|
||||
assert.strictEqual(specifier, originalSpecifier);
|
||||
// Ensure `context` has all and only the properties it's supposed to
|
||||
assert.deepStrictEqual(Object.keys(context), [
|
||||
'conditions',
|
||||
'importAssertions',
|
||||
'parentURL',
|
||||
]);
|
||||
assert.ok(Array.isArray(context.conditions));
|
||||
assert.deepStrictEqual(context.importAssertions, importAssertions);
|
||||
assert.strictEqual(context.parentURL, parentURL);
|
||||
assert.strictEqual(typeof defaultResolve, 'function');
|
||||
|
||||
return {
|
||||
format: suggestedFormat,
|
||||
url: resolvedURL,
|
||||
};
|
||||
}
|
||||
|
||||
function load(resolvedURL, context, defaultLoad) {
|
||||
assert.strictEqual(resolvedURL, resolvedURL);
|
||||
assert.ok(new URL(resolvedURL));
|
||||
// Ensure `context` has all and only the properties it's supposed to
|
||||
assert.deepStrictEqual(Object.keys(context), [
|
||||
'format',
|
||||
'importAssertions',
|
||||
]);
|
||||
assert.strictEqual(context.format, suggestedFormat);
|
||||
assert.deepStrictEqual(context.importAssertions, importAssertions);
|
||||
assert.strictEqual(typeof defaultLoad, 'function');
|
||||
|
||||
// This doesn't matter (just to avoid errors)
|
||||
return {
|
||||
format: 'module',
|
||||
source: '',
|
||||
};
|
||||
}
|
||||
|
||||
const customLoader = {
|
||||
// Ensure ESMLoader actually calls the custom hooks
|
||||
resolve: mustCall(resolve),
|
||||
load: mustCall(load),
|
||||
};
|
||||
|
||||
esmLoader.addCustomLoaders(customLoader);
|
||||
|
||||
// Manually trigger hooks (since ESMLoader is not actually running)
|
||||
const job = await esmLoader.getModuleJob(
|
||||
originalSpecifier,
|
||||
parentURL,
|
||||
importAssertions,
|
||||
);
|
||||
await job.modulePromise;
|
||||
}
|
||||
Reference in new issue
Block a user