module: improve error for invalid package targets
For targets that are strings that do not start with `./` or `/` the error will now have additional information about what the programming error is. Closes: https://github.com/nodejs/node/issues/32034 PR-URL: https://github.com/nodejs/node/pull/32052 Fixes: https://github.com/nodejs/node/issues/32034 Reviewed-By: Geoffrey Booth <webmaster@geoffreybooth.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Jan Krems <jan.krems@gmail.com> Reviewed-By: Guy Bedford <guybedford@gmail.com> Signed-off-by: Myles Borins <myles.borins@gmail.com>
This commit is contained in:
parent
7be5f58638
commit
09a50d3c5a
@ -20,6 +20,7 @@ const {
|
||||
ObjectDefineProperty,
|
||||
ObjectKeys,
|
||||
StringPrototypeSlice,
|
||||
StringPrototypeStartsWith,
|
||||
Symbol,
|
||||
SymbolFor,
|
||||
WeakMap,
|
||||
@ -1104,18 +1105,28 @@ E('ERR_INVALID_PACKAGE_CONFIG', (path, message, hasMessage = true) => {
|
||||
}, Error);
|
||||
E('ERR_INVALID_PACKAGE_TARGET',
|
||||
(pkgPath, key, subpath, target, base = undefined) => {
|
||||
const relError = typeof target === 'string' &&
|
||||
target.length && !StringPrototypeStartsWith(target, './');
|
||||
if (key === null) {
|
||||
if (subpath !== '') {
|
||||
return `Invalid "exports" target ${JSONStringify(target)} defined ` +
|
||||
`for '${subpath}' in the package config ${pkgPath} imported from ` +
|
||||
base;
|
||||
`${base}.${relError ? '; targets must start with "./"' : ''}`;
|
||||
} else {
|
||||
return `Invalid "exports" main target ${target} defined in the ` +
|
||||
`package config ${pkgPath} imported from ${base}.`;
|
||||
`package config ${pkgPath} imported from ${base}${relError ?
|
||||
'; targets must start with "./"' : ''}`;
|
||||
}
|
||||
} else if (key === '.') {
|
||||
return `Invalid "exports" main target ${JSONStringify(target)} defined ` +
|
||||
`in the package config ${pkgPath}${sep}package.json`;
|
||||
`in the package config ${pkgPath}${sep}package.json${relError ?
|
||||
'; targets must start with "./"' : ''}`;
|
||||
} else if (typeof target === 'string' && target !== '' &&
|
||||
!StringPrototypeStartsWith(target, './')) {
|
||||
return `Invalid "exports" target ${JSONStringify(target)} defined for '${
|
||||
StringPrototypeSlice(key, 0, -subpath.length || key.length)}' in the ` +
|
||||
`package config ${pkgPath}${sep}package.json; ` +
|
||||
'targets must start with "./"';
|
||||
} else {
|
||||
return `Invalid "exports" target ${JSONStringify(target)} defined for '${
|
||||
StringPrototypeSlice(key, 0, -subpath.length || key.length)}' in the ` +
|
||||
|
@ -78,6 +78,7 @@ import fromInside from '../fixtures/node_modules/pkgexports/lib/hole.js';
|
||||
['pkgexports/null', './null'],
|
||||
['pkgexports/invalid2', './invalid2'],
|
||||
['pkgexports/invalid3', './invalid3'],
|
||||
['pkgexports/invalid5', 'invalid5'],
|
||||
// Missing / invalid fallbacks
|
||||
['pkgexports/nofallback1', './nofallback1'],
|
||||
['pkgexports/nofallback2', './nofallback2'],
|
||||
@ -106,6 +107,9 @@ import fromInside from '../fixtures/node_modules/pkgexports/lib/hole.js';
|
||||
strictEqual(err.code, 'ERR_INVALID_PACKAGE_TARGET');
|
||||
assertStartsWith(err.message, 'Invalid "exports"');
|
||||
assertIncludes(err.message, subpath);
|
||||
if (!subpath.startsWith('./')) {
|
||||
assertIncludes(err.message, 'targets must start with');
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
|
1
test/fixtures/node_modules/pkgexports/package.json
generated
vendored
1
test/fixtures/node_modules/pkgexports/package.json
generated
vendored
@ -13,6 +13,7 @@
|
||||
"./invalid2": 1234,
|
||||
"./invalid3": "",
|
||||
"./invalid4": {},
|
||||
"./invalid5": "invalid5.js",
|
||||
"./fallbackdir/": [[], null, {}, "builtin:x/", "./fallbackfile", "./"],
|
||||
"./fallbackfile": [[], null, {}, "builtin:x", "./asdf.js"],
|
||||
"./nofallback1": [],
|
||||
|
Loading…
x
Reference in New Issue
Block a user