mirror of
https://github.com/nodejs/node.git
synced 2026-10-28 10:15:07 +08:00
esm: import.meta.resolve exact module not found errors should return
PR-URL: https://github.com/nodejs/node/pull/49038 Reviewed-By: Geoffrey Booth <webadmin@geoffreybooth.com> Reviewed-By: Jan Krems <jan.krems@gmail.com> Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com> Reviewed-By: Mohammed Keyvanzadeh <mohammadkeyvanzade94@gmail.com> Reviewed-By: Jacob Smith <jacob@frende.me>
This commit is contained in:
1 parent
607a545904
commit
569267d048
5 files changed
+23
-13
No files matched your search
@@ -1453,8 +1453,12 @@ E('ERR_MISSING_ARGS',
|
||||
return `${msg} must be specified`;
|
||||
}, TypeError);
|
||||
E('ERR_MISSING_OPTION', '%s is required', TypeError);
|
||||
E('ERR_MODULE_NOT_FOUND', (path, base, type = 'package') => {
|
||||
return `Cannot find ${type} '${path}' imported from ${base}`;
|
||||
E('ERR_MODULE_NOT_FOUND', function(path, base, exactUrl) {
|
||||
if (exactUrl) {
|
||||
lazyInternalUtil().setOwnProperty(this, 'url', exactUrl);
|
||||
}
|
||||
return `Cannot find ${
|
||||
exactUrl ? 'module' : 'package'} '${path}' imported from ${base}`;
|
||||
}, Error);
|
||||
E('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times', Error);
|
||||
E('ERR_NAPI_CONS_FUNCTION', 'Constructor must be a function', TypeError);
|
||||
|
||||
@@ -144,7 +144,7 @@ function fetchWithRedirects(parsed) {
|
||||
return entry;
|
||||
}
|
||||
if (res.statusCode === 404) {
|
||||
const err = new ERR_MODULE_NOT_FOUND(parsed.href, null);
|
||||
const err = new ERR_MODULE_NOT_FOUND(parsed.href, null, parsed);
|
||||
err.message = `Cannot find module '${parsed.href}', HTTP 404`;
|
||||
throw err;
|
||||
}
|
||||
|
||||
@@ -12,18 +12,20 @@ const experimentalImportMetaResolve = getOptionValue('--experimental-import-meta
|
||||
function createImportMetaResolve(defaultParentURL, loader) {
|
||||
return function resolve(specifier, parentURL = defaultParentURL) {
|
||||
let url;
|
||||
|
||||
try {
|
||||
({ url } = loader.resolveSync(specifier, parentURL));
|
||||
return url;
|
||||
} catch (error) {
|
||||
if (error?.code === 'ERR_UNSUPPORTED_DIR_IMPORT') {
|
||||
({ url } = error);
|
||||
} else {
|
||||
throw error;
|
||||
switch (error?.code) {
|
||||
case 'ERR_UNSUPPORTED_DIR_IMPORT':
|
||||
case 'ERR_MODULE_NOT_FOUND':
|
||||
({ url } = error);
|
||||
if (url) {
|
||||
return url;
|
||||
}
|
||||
}
|
||||
throw error;
|
||||
}
|
||||
|
||||
return url;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -222,7 +222,7 @@ function finalizeResolution(resolved, base, preserveSymlinks) {
|
||||
process.send({ 'watch:require': [path || resolved.pathname] });
|
||||
}
|
||||
throw new ERR_MODULE_NOT_FOUND(
|
||||
path || resolved.pathname, base && fileURLToPath(base), 'module');
|
||||
path || resolved.pathname, base && fileURLToPath(base), resolved);
|
||||
}
|
||||
|
||||
if (!preserveSymlinks) {
|
||||
@@ -777,7 +777,7 @@ function packageResolve(specifier, base, conditions) {
|
||||
|
||||
// eslint can't handle the above code.
|
||||
// eslint-disable-next-line no-unreachable
|
||||
throw new ERR_MODULE_NOT_FOUND(packageName, fileURLToPath(base));
|
||||
throw new ERR_MODULE_NOT_FOUND(packageName, fileURLToPath(base), null);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -9,8 +9,12 @@ const fixtures = dirname.slice(0, dirname.lastIndexOf('/', dirname.length - 2) +
|
||||
|
||||
assert.strictEqual(import.meta.resolve('./test-esm-import-meta.mjs'),
|
||||
dirname + 'test-esm-import-meta.mjs');
|
||||
const notFound = import.meta.resolve('./notfound.mjs');
|
||||
assert.strictEqual(new URL(notFound).href, new URL('./notfound.mjs', import.meta.url).href);
|
||||
const noExtension = import.meta.resolve('./asset');
|
||||
assert.strictEqual(new URL(noExtension).href, new URL('./asset', import.meta.url).href);
|
||||
try {
|
||||
import.meta.resolve('./notfound.mjs');
|
||||
import.meta.resolve('does-not-exist');
|
||||
assert.fail();
|
||||
} catch (e) {
|
||||
assert.strictEqual(e.code, 'ERR_MODULE_NOT_FOUND');
|
||||
|
||||
Reference in new issue
Block a user