Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nodejs/node.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2020-03-07 08:12:08 +0300
committerAnna Henningsen <anna@addaleax.net>2020-03-13 19:34:43 +0300
commit605615e5f33df41a307a0921f451b6dabb89410c (patch)
treeac85c4e55ad401eeb5ea23f8f4218e46b474e81d /lib/internal/errors.js
parent417d847de2b5e7d1eec96f099f6e20593e1a97b8 (diff)
esm: port loader code to JS
There is no reason for this to be in C++. Using JavaScript means that the code is more accessible to more developers, which is important for any Node.js feature. This also simplifies the code significantly in some areas. On the technical side, this potentially also enables making some of the file system operations that are involved asynchronous. PR-URL: https://github.com/nodejs/node/pull/32201 Reviewed-By: Bradley Farias <bradley.meck@gmail.com> Reviewed-By: Guy Bedford <guybedford@gmail.com>
Diffstat (limited to 'lib/internal/errors.js')
-rw-r--r--lib/internal/errors.js59
1 files changed, 43 insertions, 16 deletions
diff --git a/lib/internal/errors.js b/lib/internal/errors.js
index 5221c8f8c4f..8f39e0c1d78 100644
--- a/lib/internal/errors.js
+++ b/lib/internal/errors.js
@@ -1078,10 +1078,17 @@ E('ERR_INVALID_FILE_URL_PATH', 'File URL path %s', TypeError);
E('ERR_INVALID_HANDLE_TYPE', 'This handle type cannot be sent', TypeError);
E('ERR_INVALID_HTTP_TOKEN', '%s must be a valid HTTP token ["%s"]', TypeError);
E('ERR_INVALID_IP_ADDRESS', 'Invalid IP address: %s', TypeError);
-E('ERR_INVALID_MODULE_SPECIFIER', (pkgPath, subpath) => {
- assert(subpath !== '.');
- return `Package subpath '${subpath}' is not a valid module request for the ` +
- `"exports" resolution of ${pkgPath}${sep}package.json`;
+E('ERR_INVALID_MODULE_SPECIFIER', (pkgPath, subpath, base = undefined) => {
+ if (subpath === undefined) {
+ return `Invalid package name '${pkgPath}' imported from ${base}`;
+ } else if (base === undefined) {
+ assert(subpath !== '.');
+ return `Package subpath '${subpath}' is not a valid module request for ` +
+ `the "exports" resolution of ${pkgPath}${sep}package.json`;
+ } else {
+ return `Package subpath '${subpath}' is not a valid module request for ` +
+ `the "exports" resolution of ${pkgPath} imported from ${base}`;
+ }
}, TypeError);
E('ERR_INVALID_OPT_VALUE', (name, value) =>
`The value "${String(value)}" is invalid for option "${name}"`,
@@ -1089,18 +1096,32 @@ E('ERR_INVALID_OPT_VALUE', (name, value) =>
RangeError);
E('ERR_INVALID_OPT_VALUE_ENCODING',
'The value "%s" is invalid for option "encoding"', TypeError);
-E('ERR_INVALID_PACKAGE_CONFIG',
- `Invalid package config %s${sep}package.json, %s`, Error);
-E('ERR_INVALID_PACKAGE_TARGET', (pkgPath, key, subpath, target) => {
- if (key === '.') {
- return `Invalid "exports" main target ${JSONStringify(target)} defined ` +
+E('ERR_INVALID_PACKAGE_CONFIG', (path, message, hasMessage = true) => {
+ if (hasMessage)
+ return `Invalid package config ${path}${sep}package.json, ${message}`;
+ else
+ return `Invalid JSON in ${path} imported from ${message}`;
+}, Error);
+E('ERR_INVALID_PACKAGE_TARGET',
+ (pkgPath, key, subpath, target, base = undefined) => {
+ if (key === null) {
+ if (subpath !== '') {
+ return `Invalid "exports" target ${JSONStringify(target)} defined ` +
+ `for '${subpath}' in the package config ${pkgPath} imported from ` +
+ base;
+ } else {
+ return `Invalid "exports" main target ${target} defined in the ` +
+ `package config ${pkgPath} imported from ${base}.`;
+ }
+ } else if (key === '.') {
+ return `Invalid "exports" main target ${JSONStringify(target)} defined ` +
`in the package config ${pkgPath}${sep}package.json`;
- } else {
- return `Invalid "exports" target ${JSONStringify(target)} defined for '${
- StringPrototypeSlice(key, 0, -subpath.length || key.length)}' in the ` +
+ } else {
+ return `Invalid "exports" target ${JSONStringify(target)} defined for '${
+ StringPrototypeSlice(key, 0, -subpath.length || key.length)}' in the ` +
`package config ${pkgPath}${sep}package.json`;
- }
-}, Error);
+ }
+ }, Error);
E('ERR_INVALID_PERFORMANCE_MARK',
'The "%s" performance mark has not been set', Error);
E('ERR_INVALID_PROTOCOL',
@@ -1211,6 +1232,9 @@ E('ERR_MISSING_DYNAMIC_INSTANTIATE_HOOK',
'The ES Module loader may not return a format of \'dynamic\' when no ' +
'dynamicInstantiate function was provided', Error);
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}`;
+}, Error);
E('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times', Error);
E('ERR_NAPI_CONS_FUNCTION', 'Constructor must be a function', TypeError);
E('ERR_NAPI_INVALID_DATAVIEW_ARGS',
@@ -1245,12 +1269,15 @@ E('ERR_OUT_OF_RANGE',
msg += ` It must be ${range}. Received ${received}`;
return msg;
}, RangeError);
-E('ERR_PACKAGE_PATH_NOT_EXPORTED', (pkgPath, subpath) => {
+E('ERR_PACKAGE_PATH_NOT_EXPORTED', (pkgPath, subpath, base = undefined) => {
if (subpath === '.') {
return `No "exports" main resolved in ${pkgPath}${sep}package.json`;
- } else {
+ } else if (base === undefined) {
return `Package subpath '${subpath}' is not defined by "exports" in ${
pkgPath}${sep}package.json`;
+ } else {
+ return `Package subpath '${subpath}' is not defined by "exports" in ${
+ pkgPath} imported from ${base}`;
}
}, Error);
E('ERR_REQUIRE_ESM',