From dba463ecd98619739dbc548c38b76aaf408eeedb Mon Sep 17 00:00:00 2001 From: qualitymanifest Date: Fri, 29 Nov 2019 23:11:21 -0500 Subject: [PATCH 1/4] lib: add parent to ERR_UNKNOWN_FILE_EXTENSION message - default_resolve updated to pass parentURL into error - ERR_UNKNOWN_FILE_EXTENSION updated to include parentURL - test added to check for import message in error Fixes: https://github.com/nodejs/node/issues/30721 --- lib/internal/errors.js | 3 ++- lib/internal/modules/esm/default_resolve.js | 4 +++- test/es-module/test-esm-invalid-extension.js | 2 ++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/internal/errors.js b/lib/internal/errors.js index f85253ec444256..c10f7973cdac37 100644 --- a/lib/internal/errors.js +++ b/lib/internal/errors.js @@ -1209,7 +1209,8 @@ E('ERR_UNHANDLED_ERROR', E('ERR_UNKNOWN_BUILTIN_MODULE', 'No such built-in module: %s', Error); E('ERR_UNKNOWN_CREDENTIAL', '%s identifier does not exist: %s', Error); E('ERR_UNKNOWN_ENCODING', 'Unknown encoding: %s', TypeError); -E('ERR_UNKNOWN_FILE_EXTENSION', 'Unknown file extension: %s', TypeError); +E('ERR_UNKNOWN_FILE_EXTENSION', 'Unknown file extension %s imported from %s', + TypeError); E('ERR_UNKNOWN_MODULE_FORMAT', 'Unknown module format: %s', RangeError); E('ERR_UNKNOWN_SIGNAL', 'Unknown signal: %s', TypeError); diff --git a/lib/internal/modules/esm/default_resolve.js b/lib/internal/modules/esm/default_resolve.js index c9ef3883c40412..88b04d5c6ea9fd 100644 --- a/lib/internal/modules/esm/default_resolve.js +++ b/lib/internal/modules/esm/default_resolve.js @@ -116,7 +116,9 @@ function resolve(specifier, parentURL) { 'ExperimentalWarning'); format = legacyExtensionFormatMap[ext]; } else { - throw new ERR_UNKNOWN_FILE_EXTENSION(fileURLToPath(url)); + throw new ERR_UNKNOWN_FILE_EXTENSION( + fileURLToPath(url), + fileURLToPath(parentURL)); } } return { url: `${url}`, format }; diff --git a/test/es-module/test-esm-invalid-extension.js b/test/es-module/test-esm-invalid-extension.js index cdf9476b29f864..87b0c6691d3445 100644 --- a/test/es-module/test-esm-invalid-extension.js +++ b/test/es-module/test-esm-invalid-extension.js @@ -6,8 +6,10 @@ const { spawnSync } = require('child_process'); const fixture = fixtures.path('/es-modules/import-invalid-ext.mjs'); const child = spawnSync(process.execPath, [fixture]); const errMsg = 'TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension'; +const importMsg = `imported from ${fixture}`; assert.strictEqual(child.status, 1); assert.strictEqual(child.signal, null); assert.strictEqual(child.stdout.toString().trim(), ''); assert(child.stderr.toString().includes(errMsg)); +assert(child.stderr.toString().includes(importMsg)); From c1c93bc9ba41b13b90552f97876bae378c40da11 Mon Sep 17 00:00:00 2001 From: cdr Date: Sat, 30 Nov 2019 03:52:41 -0500 Subject: [PATCH 2/4] lib: add explicit ext to ERR_UNKNOWN_FILE_EXTENSION --- lib/internal/errors.js | 3 ++- lib/internal/modules/esm/default_resolve.js | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/internal/errors.js b/lib/internal/errors.js index c10f7973cdac37..36c76e8659d9e6 100644 --- a/lib/internal/errors.js +++ b/lib/internal/errors.js @@ -1209,7 +1209,8 @@ E('ERR_UNHANDLED_ERROR', E('ERR_UNKNOWN_BUILTIN_MODULE', 'No such built-in module: %s', Error); E('ERR_UNKNOWN_CREDENTIAL', '%s identifier does not exist: %s', Error); E('ERR_UNKNOWN_ENCODING', 'Unknown encoding: %s', TypeError); -E('ERR_UNKNOWN_FILE_EXTENSION', 'Unknown file extension %s imported from %s', +E('ERR_UNKNOWN_FILE_EXTENSION', + 'Unknown file extension %s for %s imported from %s', TypeError); E('ERR_UNKNOWN_MODULE_FORMAT', 'Unknown module format: %s', RangeError); E('ERR_UNKNOWN_SIGNAL', 'Unknown signal: %s', TypeError); diff --git a/lib/internal/modules/esm/default_resolve.js b/lib/internal/modules/esm/default_resolve.js index 88b04d5c6ea9fd..d238930164dcf4 100644 --- a/lib/internal/modules/esm/default_resolve.js +++ b/lib/internal/modules/esm/default_resolve.js @@ -117,6 +117,7 @@ function resolve(specifier, parentURL) { format = legacyExtensionFormatMap[ext]; } else { throw new ERR_UNKNOWN_FILE_EXTENSION( + ext, fileURLToPath(url), fileURLToPath(parentURL)); } From dce3560ffa9f848d8221d8af7faaec6329a57416 Mon Sep 17 00:00:00 2001 From: cdr Date: Sat, 30 Nov 2019 16:11:35 -0500 Subject: [PATCH 3/4] lib: quote ext in ERR_UNKNOWN_FILE_EXTENSION --- lib/internal/errors.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/internal/errors.js b/lib/internal/errors.js index 36c76e8659d9e6..130b9df2c0047d 100644 --- a/lib/internal/errors.js +++ b/lib/internal/errors.js @@ -1210,7 +1210,7 @@ E('ERR_UNKNOWN_BUILTIN_MODULE', 'No such built-in module: %s', Error); E('ERR_UNKNOWN_CREDENTIAL', '%s identifier does not exist: %s', Error); E('ERR_UNKNOWN_ENCODING', 'Unknown encoding: %s', TypeError); E('ERR_UNKNOWN_FILE_EXTENSION', - 'Unknown file extension %s for %s imported from %s', + 'Unknown file extension \'%s\' for %s imported from %s', TypeError); E('ERR_UNKNOWN_MODULE_FORMAT', 'Unknown module format: %s', RangeError); E('ERR_UNKNOWN_SIGNAL', 'Unknown signal: %s', TypeError); From 8fd014349e0ee578075da2b3033bace43624040b Mon Sep 17 00:00:00 2001 From: cdr Date: Mon, 2 Dec 2019 14:28:41 -0500 Subject: [PATCH 4/4] lib: remove quote escaping for ERR_UNKNOWN_FILE_EXTENSION --- lib/internal/errors.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/internal/errors.js b/lib/internal/errors.js index 130b9df2c0047d..67121f3487b15d 100644 --- a/lib/internal/errors.js +++ b/lib/internal/errors.js @@ -1210,7 +1210,7 @@ E('ERR_UNKNOWN_BUILTIN_MODULE', 'No such built-in module: %s', Error); E('ERR_UNKNOWN_CREDENTIAL', '%s identifier does not exist: %s', Error); E('ERR_UNKNOWN_ENCODING', 'Unknown encoding: %s', TypeError); E('ERR_UNKNOWN_FILE_EXTENSION', - 'Unknown file extension \'%s\' for %s imported from %s', + 'Unknown file extension "%s" for %s imported from %s', TypeError); E('ERR_UNKNOWN_MODULE_FORMAT', 'Unknown module format: %s', RangeError); E('ERR_UNKNOWN_SIGNAL', 'Unknown signal: %s', TypeError);