summaryrefslogtreecommitdiff
path: root/cli/tools/installer.rs
diff options
context:
space:
mode:
authorhaturau <135221985+haturatu@users.noreply.github.com>2024-11-20 01:20:47 +0900
committerGitHub <noreply@github.com>2024-11-20 01:20:47 +0900
commit85719a67e59c7aa45bead26e4942d7df8b1b42d4 (patch)
treeface0aecaac53e93ce2f23b53c48859bcf1a36ec /cli/tools/installer.rs
parent67697bc2e4a62a9670699fd18ad0dd8efc5bd955 (diff)
parent186b52731c6bb326c4d32905c5e732d082e83465 (diff)
Merge branch 'denoland:main' into main
Diffstat (limited to 'cli/tools/installer.rs')
-rw-r--r--cli/tools/installer.rs46
1 files changed, 45 insertions, 1 deletions
diff --git a/cli/tools/installer.rs b/cli/tools/installer.rs
index ed86e86c7..fe477a8e6 100644
--- a/cli/tools/installer.rs
+++ b/cli/tools/installer.rs
@@ -3,6 +3,7 @@
use crate::args::resolve_no_prompt;
use crate::args::AddFlags;
use crate::args::CaData;
+use crate::args::CacheSetting;
use crate::args::ConfigFlag;
use crate::args::Flags;
use crate::args::InstallFlags;
@@ -13,8 +14,11 @@ use crate::args::TypeCheckMode;
use crate::args::UninstallFlags;
use crate::args::UninstallKind;
use crate::factory::CliFactory;
+use crate::file_fetcher::FileFetcher;
use crate::graph_container::ModuleGraphContainer;
use crate::http_util::HttpClientProvider;
+use crate::jsr::JsrFetchResolver;
+use crate::npm::NpmFetchResolver;
use crate::util::fs::canonicalize_path_maybe_not_exists;
use deno_core::anyhow::bail;
@@ -354,12 +358,51 @@ async fn install_global(
) -> Result<(), AnyError> {
// ensure the module is cached
let factory = CliFactory::from_flags(flags.clone());
+
+ let http_client = factory.http_client_provider();
+ let deps_http_cache = factory.global_http_cache()?;
+ let mut deps_file_fetcher = FileFetcher::new(
+ deps_http_cache.clone(),
+ CacheSetting::ReloadAll,
+ true,
+ http_client.clone(),
+ Default::default(),
+ None,
+ );
+
+ let npmrc = factory.cli_options().unwrap().npmrc();
+
+ deps_file_fetcher.set_download_log_level(log::Level::Trace);
+ let deps_file_fetcher = Arc::new(deps_file_fetcher);
+ let jsr_resolver = Arc::new(JsrFetchResolver::new(deps_file_fetcher.clone()));
+ let npm_resolver = Arc::new(NpmFetchResolver::new(
+ deps_file_fetcher.clone(),
+ npmrc.clone(),
+ ));
+
+ let entry_text = install_flags_global.module_url.as_str();
+ let req = super::registry::AddRmPackageReq::parse(entry_text);
+
+ // found a package requirement but missing the prefix
+ if let Ok(Err(package_req)) = req {
+ if jsr_resolver.req_to_nv(&package_req).await.is_some() {
+ bail!(
+ "{entry_text} is missing a prefix. Did you mean `{}`?",
+ crate::colors::yellow(format!("deno install -g jsr:{package_req}"))
+ );
+ } else if npm_resolver.req_to_nv(&package_req).await.is_some() {
+ bail!(
+ "{entry_text} is missing a prefix. Did you mean `{}`?",
+ crate::colors::yellow(format!("deno install -g npm:{package_req}"))
+ );
+ }
+ }
+
factory
.main_module_graph_container()
.await?
.load_and_type_check_files(&[install_flags_global.module_url.clone()])
.await?;
- let http_client = factory.http_client_provider();
// create the install shim
create_install_shim(http_client, &flags, install_flags_global).await
@@ -1396,6 +1439,7 @@ mod tests {
.env_clear()
// use the deno binary in the target directory
.env("PATH", test_util::target_dir())
+ .env("RUST_BACKTRACE", "1")
.spawn()
.unwrap()
.wait()