summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2024-10-16 00:25:24 +0100
committerGitHub <noreply@github.com>2024-10-15 23:25:24 +0000
commit40b1c42138c47e89eefa859cd36a9e3d62541e7b (patch)
treee4ab7cf2a9c369daf45c6e7b339fdc59dafde09b
parent82d13fd45b6fa8da5d390e26a349522e93811639 (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.rs18
-rw-r--r--tests/specs/run/import_common_js/__test__.jsonc5
-rw-r--r--tests/specs/run/import_common_js/exports_error.out9
-rw-r--r--tests/specs/run/import_common_js/module_error.out9
-rw-r--r--tests/specs/run/import_common_js/require_error.js2
-rw-r--r--tests/specs/run/import_common_js/require_error.out12
-rw-r--r--tests/specs/run/package_json_type/commonjs/main_mix.out8
-rw-r--r--tests/specs/run/package_json_type/none/main_cjs.out8
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