summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/graph_util.rs9
-rw-r--r--cli/npm/resolution.rs3
-rw-r--r--cli/tests/integration/npm_tests.rs7
-rw-r--r--cli/tests/testdata/npm/invalid_package_name/main.js1
-rw-r--r--cli/tests/testdata/npm/invalid_package_name/main.out2
5 files changed, 16 insertions, 6 deletions
diff --git a/cli/graph_util.rs b/cli/graph_util.rs
index f73fd5559..dca7a16b7 100644
--- a/cli/graph_util.rs
+++ b/cli/graph_util.rs
@@ -81,11 +81,10 @@ impl GraphData {
continue;
}
if specifier.scheme() == "npm" {
- // the loader enforces npm specifiers are valid, so it's ok to unwrap here
- let reference =
- NpmPackageReference::from_specifier(&specifier).unwrap();
- self.npm_packages.insert(reference.req);
- continue;
+ if let Ok(reference) = NpmPackageReference::from_specifier(&specifier) {
+ self.npm_packages.insert(reference.req);
+ continue;
+ }
}
if let Some(found) = graph.redirects.get(&specifier) {
let module_entry = ModuleEntry::Redirect(found.clone());
diff --git a/cli/npm/resolution.rs b/cli/npm/resolution.rs
index 15fffdf04..d56cc87bc 100644
--- a/cli/npm/resolution.rs
+++ b/cli/npm/resolution.rs
@@ -8,6 +8,7 @@ use std::collections::VecDeque;
use deno_ast::ModuleSpecifier;
use deno_core::anyhow::bail;
use deno_core::anyhow::Context;
+use deno_core::error::generic_error;
use deno_core::error::AnyError;
use deno_core::futures;
use deno_core::parking_lot::RwLock;
@@ -52,7 +53,7 @@ impl NpmPackageReference {
let parts = specifier.split('/').collect::<Vec<_>>();
let name_part_len = if specifier.starts_with('@') { 2 } else { 1 };
if parts.len() < name_part_len {
- bail!("Not a valid package: {}", specifier);
+ return Err(generic_error(format!("Not a valid package: {}", specifier)));
}
let name_parts = &parts[0..name_part_len];
let last_name_part = &name_parts[name_part_len - 1];
diff --git a/cli/tests/integration/npm_tests.rs b/cli/tests/integration/npm_tests.rs
index d111bd76e..32ec12656 100644
--- a/cli/tests/integration/npm_tests.rs
+++ b/cli/tests/integration/npm_tests.rs
@@ -181,6 +181,13 @@ itest!(nonexistent_file {
exit_code: 1,
});
+itest!(invalid_package_name {
+ args: "run --unstable -A --quiet npm/invalid_package_name/main.js",
+ output: "npm/invalid_package_name/main.out",
+ envs: env_vars(),
+ exit_code: 1,
+});
+
itest!(require_json {
args: "run --unstable -A --quiet npm/require_json/main.js",
output: "npm/require_json/main.out",
diff --git a/cli/tests/testdata/npm/invalid_package_name/main.js b/cli/tests/testdata/npm/invalid_package_name/main.js
new file mode 100644
index 000000000..1e3783054
--- /dev/null
+++ b/cli/tests/testdata/npm/invalid_package_name/main.js
@@ -0,0 +1 @@
+import * as foo from "npm:@foo";
diff --git a/cli/tests/testdata/npm/invalid_package_name/main.out b/cli/tests/testdata/npm/invalid_package_name/main.out
new file mode 100644
index 000000000..7d2b3754d
--- /dev/null
+++ b/cli/tests/testdata/npm/invalid_package_name/main.out
@@ -0,0 +1,2 @@
+error: Not a valid package: @foo
+ at [WILDCARD]/invalid_package_name/main.js:1:22