From d7b787792c09569bd718d9acf2d2b73ae406828c Mon Sep 17 00:00:00 2001 From: David Sherret Date: Mon, 30 Sep 2024 15:46:43 -0400 Subject: [PATCH] fix(info): error instead of panic for npm specifiers when using byonm (#25947) --- cli/args/mod.rs | 4 ---- cli/graph_util.rs | 7 +++++++ tests/specs/info/byonm/__test__.jsonc | 11 +++++++++++ tests/specs/info/byonm/deno.json | 6 ++++++ tests/specs/info/byonm/info.out | 1 + tests/specs/info/byonm/package.json | 5 +++++ 6 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 tests/specs/info/byonm/__test__.jsonc create mode 100644 tests/specs/info/byonm/deno.json create mode 100644 tests/specs/info/byonm/info.out create mode 100644 tests/specs/info/byonm/package.json diff --git a/cli/args/mod.rs b/cli/args/mod.rs index 3ff2a427fb..2ae7098da5 100644 --- a/cli/args/mod.rs +++ b/cli/args/mod.rs @@ -1144,10 +1144,6 @@ impl CliOptions { DenoSubcommand::Run(run_flags) => { if run_flags.is_stdin() { resolve_url_or_path("./$deno$stdin.ts", self.initial_cwd())? - } else if NpmPackageReqReference::from_str(&run_flags.script) - .is_ok() - { - ModuleSpecifier::parse(&run_flags.script)? } else { resolve_url_or_path(&run_flags.script, self.initial_cwd())? } diff --git a/cli/graph_util.rs b/cli/graph_util.rs index f7194ac11b..e2f6246e74 100644 --- a/cli/graph_util.rs +++ b/cli/graph_util.rs @@ -21,6 +21,7 @@ use crate::tools::check::TypeChecker; use crate::util::file_watcher::WatcherCommunicator; use crate::util::fs::canonicalize_path; use deno_config::workspace::JsrPackageConfig; +use deno_core::anyhow::bail; use deno_graph::source::LoaderChecksum; use deno_graph::FillFromLockfileOptions; use deno_graph::JsrLoadError; @@ -593,6 +594,12 @@ impl ModuleGraphBuilder { let initial_package_deps_len = graph.packages.package_deps_sum(); let initial_package_mappings_len = graph.packages.mappings().len(); + if roots.iter().any(|r| r.scheme() == "npm") + && self.npm_resolver.as_byonm().is_some() + { + bail!("Resolving npm specifier entrypoints this way is currently not supported with \"nodeModules\": \"manual\". In the meantime, try with --node-modules-dir=auto instead"); + } + graph.build(roots, loader, options).await; let has_redirects_changed = graph.redirects.len() != initial_redirects_len; diff --git a/tests/specs/info/byonm/__test__.jsonc b/tests/specs/info/byonm/__test__.jsonc new file mode 100644 index 0000000000..6c9ba7dada --- /dev/null +++ b/tests/specs/info/byonm/__test__.jsonc @@ -0,0 +1,11 @@ +{ + "tempDir": true, + "steps": [{ + "args": "install", + "output": "[WILDCARD]" + }, { + "args": "info npm:@denotest/add", + "output": "info.out", + "exitCode": 1 + }] +} diff --git a/tests/specs/info/byonm/deno.json b/tests/specs/info/byonm/deno.json new file mode 100644 index 0000000000..4b88c71fbb --- /dev/null +++ b/tests/specs/info/byonm/deno.json @@ -0,0 +1,6 @@ +{ + "nodeModulesDir": "manual", + "imports": { + "chalk": "npm:@denotest/add" + } +} diff --git a/tests/specs/info/byonm/info.out b/tests/specs/info/byonm/info.out new file mode 100644 index 0000000000..4e6f11a88f --- /dev/null +++ b/tests/specs/info/byonm/info.out @@ -0,0 +1 @@ +error: Resolving npm specifier entrypoints this way is currently not supported with "nodeModules": "manual". In the meantime, try with --node-modules-dir=auto instead diff --git a/tests/specs/info/byonm/package.json b/tests/specs/info/byonm/package.json new file mode 100644 index 0000000000..15a786ad71 --- /dev/null +++ b/tests/specs/info/byonm/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "@denotest/add": "*" + } +}