diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2024-10-16 00:25:24 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-10-15 23:25:24 +0000 |
commit | 40b1c42138c47e89eefa859cd36a9e3d62541e7b (patch) | |
tree | e4ab7cf2a9c369daf45c6e7b339fdc59dafde09b | |
parent | 82d13fd45b6fa8da5d390e26a349522e93811639 (diff) |
fix: improve suggestions and hints when using CommonJS modules (#26287)
Ref https://github.com/denoland/deno/issues/26225
-rw-r--r-- | runtime/fmt_errors.rs | 18 | ||||
-rw-r--r-- | tests/specs/run/import_common_js/__test__.jsonc | 5 | ||||
-rw-r--r-- | tests/specs/run/import_common_js/exports_error.out | 9 | ||||
-rw-r--r-- | tests/specs/run/import_common_js/module_error.out | 9 | ||||
-rw-r--r-- | tests/specs/run/import_common_js/require_error.js | 2 | ||||
-rw-r--r-- | tests/specs/run/import_common_js/require_error.out | 12 | ||||
-rw-r--r-- | tests/specs/run/package_json_type/commonjs/main_mix.out | 8 | ||||
-rw-r--r-- | tests/specs/run/package_json_type/none/main_cjs.out | 8 |
8 files changed, 61 insertions, 10 deletions
diff --git a/runtime/fmt_errors.rs b/runtime/fmt_errors.rs index 2d9d09a29..8476aab28 100644 --- a/runtime/fmt_errors.rs +++ b/runtime/fmt_errors.rs @@ -287,14 +287,20 @@ fn get_suggestions_for_terminal_errors(e: &JsError) -> Vec<FixSuggestion> { if let Some(msg) = &e.message { if msg.contains("module is not defined") || msg.contains("exports is not defined") + || msg.contains("require is not defined") { return vec![ - FixSuggestion::info( - "Deno does not support CommonJS modules without `.cjs` extension.", - ), - FixSuggestion::hint( - "Rewrite this module to ESM or change the file extension to `.cjs`.", - ), + FixSuggestion::info_multiline(&[ + cstr!("Deno supports CommonJS modules in <u>.cjs</> files, or when there's a <u>package.json</>"), + cstr!("with <i>\"type\": \"commonjs\"</> option and <i>--unstable-detect-cjs</> flag is used.") + ]), + FixSuggestion::hint_multiline(&[ + "Rewrite this module to ESM,", + cstr!("or change the file extension to <u>.cjs</u>,"), + cstr!("or add <u>package.json</> next to the file with <i>\"type\": \"commonjs\"</> option"), + cstr!("and pass <i>--unstable-detect-cjs</> flag."), + ]), + FixSuggestion::hint("See https://docs.deno.com/go/commonjs for details"), ]; } else if msg.contains("openKv is not a function") { return vec![ diff --git a/tests/specs/run/import_common_js/__test__.jsonc b/tests/specs/run/import_common_js/__test__.jsonc index 950c7f68c..6510dbad7 100644 --- a/tests/specs/run/import_common_js/__test__.jsonc +++ b/tests/specs/run/import_common_js/__test__.jsonc @@ -11,6 +11,11 @@ "args": "run exports_error.js", "output": "exports_error.out", "exitCode": 1 + }, + { + "args": "run require_error.js", + "output": "require_error.out", + "exitCode": 1 } ] } diff --git a/tests/specs/run/import_common_js/exports_error.out b/tests/specs/run/import_common_js/exports_error.out index 41eda2457..299a46438 100644 --- a/tests/specs/run/import_common_js/exports_error.out +++ b/tests/specs/run/import_common_js/exports_error.out @@ -3,5 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true }); ^ at [WILDCARD]exports_error.js:1:23 - info: Deno does not support CommonJS modules without `.cjs` extension. - hint: Rewrite this module to ESM or change the file extension to `.cjs`. + info: Deno supports CommonJS modules in .cjs files, or when there's a package.json + with "type": "commonjs" option and --unstable-detect-cjs flag is used. + hint: Rewrite this module to ESM, + or change the file extension to .cjs, + or add package.json next to the file with "type": "commonjs" option + and pass --unstable-detect-cjs flag. + hint: See https://docs.deno.com/go/commonjs for details diff --git a/tests/specs/run/import_common_js/module_error.out b/tests/specs/run/import_common_js/module_error.out index 53a908d29..1c1140fe4 100644 --- a/tests/specs/run/import_common_js/module_error.out +++ b/tests/specs/run/import_common_js/module_error.out @@ -3,5 +3,10 @@ module.exports = { ^ at [WILDCARD]module_error.js:1:1 - info: Deno does not support CommonJS modules without `.cjs` extension. - hint: Rewrite this module to ESM or change the file extension to `.cjs`. + info: Deno supports CommonJS modules in .cjs files, or when there's a package.json + with "type": "commonjs" option and --unstable-detect-cjs flag is used. + hint: Rewrite this module to ESM, + or change the file extension to .cjs, + or add package.json next to the file with "type": "commonjs" option + and pass --unstable-detect-cjs flag. + hint: See https://docs.deno.com/go/commonjs for details diff --git a/tests/specs/run/import_common_js/require_error.js b/tests/specs/run/import_common_js/require_error.js new file mode 100644 index 000000000..956768933 --- /dev/null +++ b/tests/specs/run/import_common_js/require_error.js @@ -0,0 +1,2 @@ +const process = require("process"); +const a = require("./a"); diff --git a/tests/specs/run/import_common_js/require_error.out b/tests/specs/run/import_common_js/require_error.out new file mode 100644 index 000000000..ebc6b6fa4 --- /dev/null +++ b/tests/specs/run/import_common_js/require_error.out @@ -0,0 +1,12 @@ +error: Uncaught (in promise) ReferenceError: require is not defined +const process = require("process"); + ^ + at [WILDCARD]require_error.js:1:17 + + info: Deno supports CommonJS modules in .cjs files, or when there's a package.json + with "type": "commonjs" option and --unstable-detect-cjs flag is used. + hint: Rewrite this module to ESM, + or change the file extension to .cjs, + or add package.json next to the file with "type": "commonjs" option + and pass --unstable-detect-cjs flag. + hint: See https://docs.deno.com/go/commonjs for details diff --git a/tests/specs/run/package_json_type/commonjs/main_mix.out b/tests/specs/run/package_json_type/commonjs/main_mix.out index d6123d48b..67d316fcd 100644 --- a/tests/specs/run/package_json_type/commonjs/main_mix.out +++ b/tests/specs/run/package_json_type/commonjs/main_mix.out @@ -3,3 +3,11 @@ error: Uncaught (in promise) ReferenceError: require is not defined console.log(require("./add").add(1, 2)); ^ at file:///[WILDLINE]main_mix.js:[WILDLINE] + + info: Deno supports CommonJS modules in .cjs files, or when there's a package.json + with "type": "commonjs" option and --unstable-detect-cjs flag is used. + hint: Rewrite this module to ESM, + or change the file extension to .cjs, + or add package.json next to the file with "type": "commonjs" option + and pass --unstable-detect-cjs flag. + hint: See https://docs.deno.com/go/commonjs for details diff --git a/tests/specs/run/package_json_type/none/main_cjs.out b/tests/specs/run/package_json_type/none/main_cjs.out index fe9acf009..66213dbdb 100644 --- a/tests/specs/run/package_json_type/none/main_cjs.out +++ b/tests/specs/run/package_json_type/none/main_cjs.out @@ -2,3 +2,11 @@ error: Uncaught (in promise) ReferenceError: require is not defined const { add } = require("./add"); ^ at file:///[WILDLINE] + + info: Deno supports CommonJS modules in .cjs files, or when there's a package.json + with "type": "commonjs" option and --unstable-detect-cjs flag is used. + hint: Rewrite this module to ESM, + or change the file extension to .cjs, + or add package.json next to the file with "type": "commonjs" option + and pass --unstable-detect-cjs flag. + hint: See https://docs.deno.com/go/commonjs for details |