summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGuy Bedford <guybedford@gmail.com>2018-10-24 16:50:32 +0100
committerMyles Borins <mylesborins@google.com>2018-12-03 20:46:29 -0500
commitfd67822e0db62d7ef68ce24a84e1c4b105d3159b (patch)
treea59ec65bb8d0d7e1a8d9d15281e0676fefb19e27 /lib
parent335e6deaa41bba74e9a940f2f1b745a8d3dbbbce (diff)
downloadnode-new-modules-lkgr.tar.gz
esm: minimal resolver spec and implementation refinementsmodules-lkgr
PR URL: https://github.com/nodejs/ecmascript-modules/pull/12
Diffstat (limited to 'lib')
-rw-r--r--lib/internal/errors.js16
-rw-r--r--lib/internal/modules/esm/default_resolve.js27
2 files changed, 16 insertions, 27 deletions
diff --git a/lib/internal/errors.js b/lib/internal/errors.js
index 0ed23a9438..9c7aa71bd4 100644
--- a/lib/internal/errors.js
+++ b/lib/internal/errors.js
@@ -800,11 +800,13 @@ E('ERR_MISSING_ARGS',
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_MODULE', 'Cannot find module %s', Error);
-E('ERR_MODULE_RESOLUTION_LEGACY',
- '%s not found by import in %s.' +
- ' Legacy behavior in require() would have found it at %s',
- Error);
+E('ERR_MODULE_NOT_FOUND', (module, base, legacyResolution) => {
+ let msg = `Cannot find module '${module}' imported from ${base}.`;
+ if (legacyResolution)
+ msg += ' Legacy behavior in require() would have found it at ' +
+ legacyResolution;
+ return msg;
+}, 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',
@@ -898,11 +900,13 @@ E('ERR_UNHANDLED_ERROR',
if (err === undefined) return msg;
return `${msg} (${err})`;
}, Error);
+// This should probably be a `TypeError`.
E('ERR_UNKNOWN_CREDENTIAL', '%s identifier does not exist: %s', Error);
E('ERR_UNKNOWN_ENCODING', 'Unknown encoding: %s', TypeError);
// This should probably be a `TypeError`.
-E('ERR_UNKNOWN_FILE_EXTENSION', 'Unknown file extension: %s', Error);
+E('ERR_UNKNOWN_FILE_EXTENSION', 'Unknown file extension: \'%s\' imported ' +
+ 'from %s', Error);
E('ERR_UNKNOWN_MODULE_FORMAT', 'Unknown module format: %s', RangeError);
E('ERR_UNKNOWN_SIGNAL', 'Unknown signal: %s', TypeError);
E('ERR_UNKNOWN_STDIN_TYPE', 'Unknown stdin file type', Error);
diff --git a/lib/internal/modules/esm/default_resolve.js b/lib/internal/modules/esm/default_resolve.js
index 5976cab99c..4d47d8124e 100644
--- a/lib/internal/modules/esm/default_resolve.js
+++ b/lib/internal/modules/esm/default_resolve.js
@@ -10,21 +10,15 @@ const { getOptionValue } = require('internal/options');
const preserveSymlinks = getOptionValue('--preserve-symlinks');
const preserveSymlinksMain = getOptionValue('--preserve-symlinks-main');
const {
- ERR_MISSING_MODULE,
- ERR_MODULE_RESOLUTION_LEGACY,
+ ERR_MODULE_NOT_FOUND,
ERR_UNKNOWN_FILE_EXTENSION
} = require('internal/errors').codes;
const { resolve: moduleWrapResolve } = internalBinding('module_wrap');
-const StringStartsWith = Function.call.bind(String.prototype.startsWith);
const { pathToFileURL, fileURLToPath } = require('internal/url');
const realpathCache = new Map();
function search(target, base) {
- if (base === undefined) {
- // We cannot search without a base.
- throw new ERR_MISSING_MODULE(target);
- }
try {
return moduleWrapResolve(target, base);
} catch (e) {
@@ -36,7 +30,7 @@ function search(target, base) {
tmpMod.paths = CJSmodule._nodeModulePaths(
new URL('./', questionedBase).pathname);
const found = CJSmodule._resolveFilename(target, tmpMod);
- error = new ERR_MODULE_RESOLUTION_LEGACY(target, base, found);
+ error = new ERR_MODULE_NOT_FOUND(target, fileURLToPath(base), found);
} catch {
// ignore
}
@@ -57,16 +51,8 @@ function resolve(specifier, parentURL) {
};
}
- let url;
- try {
- url = search(specifier,
- parentURL || pathToFileURL(`${process.cwd()}/`).href);
- } catch (e) {
- if (typeof e.message === 'string' &&
- StringStartsWith(e.message, 'Cannot find module'))
- e.code = 'MODULE_NOT_FOUND';
- throw e;
- }
+ let url = search(specifier,
+ parentURL || pathToFileURL(`${process.cwd()}/`).href);
const isMain = parentURL === undefined;
@@ -87,12 +73,11 @@ function resolve(specifier, parentURL) {
if (isMain)
format = 'cjs';
else
- throw new ERR_UNKNOWN_FILE_EXTENSION(url.pathname);
+ throw new ERR_UNKNOWN_FILE_EXTENSION(url.pathname,
+ fileURLToPath(parentURL));
}
return { url: `${url}`, format };
}
module.exports = resolve;
-// exported for tests
-module.exports.search = search;