summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/module_loader.rs33
-rw-r--r--cli/tests/integration/npm_tests.rs16
-rw-r--r--cli/tests/testdata/npm/directory_import/folder_index_js.out7
-rw-r--r--cli/tests/testdata/npm/directory_import/folder_index_js.ts2
-rw-r--r--cli/tests/testdata/npm/directory_import/folder_no_index.out6
-rw-r--r--cli/tests/testdata/npm/directory_import/folder_no_index.ts2
-rw-r--r--cli/tests/testdata/npm/registry/@denotest/sub-folders/1.0.0/folder_index_js/index.d.ts1
-rw-r--r--cli/tests/testdata/npm/registry/@denotest/sub-folders/1.0.0/folder_index_js/index.js3
-rw-r--r--cli/tests/testdata/npm/registry/@denotest/sub-folders/1.0.0/folder_no_index/random_name.js1
-rw-r--r--cli/tests/testdata/npm/registry/@denotest/sub-folders/1.0.0/main.mjs3
-rw-r--r--cli/tests/testdata/npm/registry/@denotest/sub-folders/1.0.0/package.json6
11 files changed, 74 insertions, 6 deletions
diff --git a/cli/module_loader.rs b/cli/module_loader.rs
index 9e814662c..54efcd9dd 100644
--- a/cli/module_loader.rs
+++ b/cli/module_loader.rs
@@ -748,13 +748,34 @@ impl NpmModuleLoader {
.read_to_string(&file_path)
.map_err(AnyError::from)
.with_context(|| {
- let mut msg = "Unable to load ".to_string();
- msg.push_str(&file_path.to_string_lossy());
- if let Some(referrer) = &maybe_referrer {
- msg.push_str(" imported from ");
- msg.push_str(referrer.as_str());
+ if file_path.is_dir() {
+ // directory imports are not allowed when importing from an
+ // ES module, so provide the user with a helpful error message
+ let dir_path = file_path;
+ let mut msg = "Directory import ".to_string();
+ msg.push_str(&dir_path.to_string_lossy());
+ if let Some(referrer) = &maybe_referrer {
+ msg.push_str(" is not supported resolving import from ");
+ msg.push_str(referrer.as_str());
+ let entrypoint_name = ["index.mjs", "index.js", "index.cjs"]
+ .iter()
+ .find(|e| dir_path.join(e).is_file());
+ if let Some(entrypoint_name) = entrypoint_name {
+ msg.push_str("\nDid you mean to import ");
+ msg.push_str(entrypoint_name);
+ msg.push_str(" within the directory?");
+ }
+ }
+ msg
+ } else {
+ let mut msg = "Unable to load ".to_string();
+ msg.push_str(&file_path.to_string_lossy());
+ if let Some(referrer) = &maybe_referrer {
+ msg.push_str(" imported from ");
+ msg.push_str(referrer.as_str());
+ }
+ msg
}
- msg
})?;
let code = if self.cjs_resolutions.contains(specifier) {
diff --git a/cli/tests/integration/npm_tests.rs b/cli/tests/integration/npm_tests.rs
index 6e35456bf..6da402a38 100644
--- a/cli/tests/integration/npm_tests.rs
+++ b/cli/tests/integration/npm_tests.rs
@@ -778,6 +778,22 @@ itest!(deno_run_non_existent {
exit_code: 1,
});
+itest!(directory_import_folder_index_js {
+ args: "run npm/directory_import/folder_index_js.ts",
+ output: "npm/directory_import/folder_index_js.out",
+ envs: env_vars_for_npm_tests(),
+ http_server: true,
+ exit_code: 1,
+});
+
+itest!(directory_import_folder_no_index {
+ args: "run npm/directory_import/folder_no_index.ts",
+ output: "npm/directory_import/folder_no_index.out",
+ envs: env_vars_for_npm_tests(),
+ http_server: true,
+ exit_code: 1,
+});
+
itest!(builtin_module_module {
args: "run --allow-read --quiet npm/builtin_module_module/main.js",
output: "npm/builtin_module_module/main.out",
diff --git a/cli/tests/testdata/npm/directory_import/folder_index_js.out b/cli/tests/testdata/npm/directory_import/folder_index_js.out
new file mode 100644
index 000000000..72f285fc0
--- /dev/null
+++ b/cli/tests/testdata/npm/directory_import/folder_index_js.out
@@ -0,0 +1,7 @@
+Download http://localhost:4545/npm/registry/@denotest/sub-folders
+Download http://localhost:4545/npm/registry/@denotest/sub-folders/1.0.0.tgz
+error: Directory import [WILDCARD]folder_index_js is not supported resolving import from file:///[WILDCARD]/directory_import/folder_index_js.ts
+Did you mean to import index.js within the directory?
+
+Caused by:
+ [WILDCARD]
diff --git a/cli/tests/testdata/npm/directory_import/folder_index_js.ts b/cli/tests/testdata/npm/directory_import/folder_index_js.ts
new file mode 100644
index 000000000..b0d51fcd9
--- /dev/null
+++ b/cli/tests/testdata/npm/directory_import/folder_index_js.ts
@@ -0,0 +1,2 @@
+import test from "npm:@denotest/sub-folders/folder_index_js";
+console.log(test);
diff --git a/cli/tests/testdata/npm/directory_import/folder_no_index.out b/cli/tests/testdata/npm/directory_import/folder_no_index.out
new file mode 100644
index 000000000..86ac88207
--- /dev/null
+++ b/cli/tests/testdata/npm/directory_import/folder_no_index.out
@@ -0,0 +1,6 @@
+Download http://localhost:4545/npm/registry/@denotest/sub-folders
+Download http://localhost:4545/npm/registry/@denotest/sub-folders/1.0.0.tgz
+error: Directory import [WILDCARD]folder_no_index is not supported resolving import from file:///[WILDCARD]/folder_no_index.ts
+
+Caused by:
+ [WILDCARD]
diff --git a/cli/tests/testdata/npm/directory_import/folder_no_index.ts b/cli/tests/testdata/npm/directory_import/folder_no_index.ts
new file mode 100644
index 000000000..4c5fb7ec0
--- /dev/null
+++ b/cli/tests/testdata/npm/directory_import/folder_no_index.ts
@@ -0,0 +1,2 @@
+import test from "npm:@denotest/sub-folders/folder_no_index";
+console.log(test);
diff --git a/cli/tests/testdata/npm/registry/@denotest/sub-folders/1.0.0/folder_index_js/index.d.ts b/cli/tests/testdata/npm/registry/@denotest/sub-folders/1.0.0/folder_index_js/index.d.ts
new file mode 100644
index 000000000..c3ec6ac2e
--- /dev/null
+++ b/cli/tests/testdata/npm/registry/@denotest/sub-folders/1.0.0/folder_index_js/index.d.ts
@@ -0,0 +1 @@
+export function add(a, b): number;
diff --git a/cli/tests/testdata/npm/registry/@denotest/sub-folders/1.0.0/folder_index_js/index.js b/cli/tests/testdata/npm/registry/@denotest/sub-folders/1.0.0/folder_index_js/index.js
new file mode 100644
index 000000000..71a2da49a
--- /dev/null
+++ b/cli/tests/testdata/npm/registry/@denotest/sub-folders/1.0.0/folder_index_js/index.js
@@ -0,0 +1,3 @@
+export function add(a, b) {
+ return a + b;
+}
diff --git a/cli/tests/testdata/npm/registry/@denotest/sub-folders/1.0.0/folder_no_index/random_name.js b/cli/tests/testdata/npm/registry/@denotest/sub-folders/1.0.0/folder_no_index/random_name.js
new file mode 100644
index 000000000..f4e8d9d29
--- /dev/null
+++ b/cli/tests/testdata/npm/registry/@denotest/sub-folders/1.0.0/folder_no_index/random_name.js
@@ -0,0 +1 @@
+module.exports = 5;
diff --git a/cli/tests/testdata/npm/registry/@denotest/sub-folders/1.0.0/main.mjs b/cli/tests/testdata/npm/registry/@denotest/sub-folders/1.0.0/main.mjs
new file mode 100644
index 000000000..358b4b09e
--- /dev/null
+++ b/cli/tests/testdata/npm/registry/@denotest/sub-folders/1.0.0/main.mjs
@@ -0,0 +1,3 @@
+export function getValue() {
+ return 5;
+}
diff --git a/cli/tests/testdata/npm/registry/@denotest/sub-folders/1.0.0/package.json b/cli/tests/testdata/npm/registry/@denotest/sub-folders/1.0.0/package.json
new file mode 100644
index 000000000..1402e346c
--- /dev/null
+++ b/cli/tests/testdata/npm/registry/@denotest/sub-folders/1.0.0/package.json
@@ -0,0 +1,6 @@
+{
+ "name": "@denotest/sub-folders",
+ "version": "1.0.0",
+ "type": "module",
+ "main": "main.mjs"
+}