summaryrefslogtreecommitdiff
path: root/cli/tools/registry
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2024-10-04 08:52:00 +0100
committerGitHub <noreply@github.com>2024-10-04 07:52:00 +0000
commitedac9166040dc09674072ce57af6a9c5ea958d85 (patch)
tree0a54e2946b8d6146e3620b4859c6d609d1c657ee /cli/tools/registry
parentb8a9a4a862e4d61630c5bc8089261c7a177ec97a (diff)
fix(install): surface package.json dependency errors (#26023)
Diffstat (limited to 'cli/tools/registry')
-rw-r--r--cli/tools/registry/pm.rs33
-rw-r--r--cli/tools/registry/pm/cache_deps.rs1
2 files changed, 24 insertions, 10 deletions
diff --git a/cli/tools/registry/pm.rs b/cli/tools/registry/pm.rs
index c92710f46..f56774e8e 100644
--- a/cli/tools/registry/pm.rs
+++ b/cli/tools/registry/pm.rs
@@ -558,12 +558,7 @@ pub async fn add(
result.context("Failed to update configuration file")?;
}
- // clear the previously cached package.json from memory before reloading it
- node_resolver::PackageJsonThreadLocalCache::clear();
- // make a new CliFactory to pick up the updated config file
- let cli_factory = CliFactory::from_flags(flags);
- // cache deps
- cache_deps::cache_top_level_deps(&cli_factory, Some(jsr_resolver)).await?;
+ npm_install_after_modification(flags, Some(jsr_resolver)).await?;
Ok(())
}
@@ -786,11 +781,29 @@ pub async fn remove(
config.commit().await?;
}
- // Update deno.lock
- node_resolver::PackageJsonThreadLocalCache::clear();
- let cli_factory = CliFactory::from_flags(flags);
- cache_deps::cache_top_level_deps(&cli_factory, None).await?;
+ npm_install_after_modification(flags, None).await?;
+ }
+
+ Ok(())
+}
+
+async fn npm_install_after_modification(
+ flags: Arc<Flags>,
+ // explicitly provided to prevent redownloading
+ jsr_resolver: Option<Arc<crate::jsr::JsrFetchResolver>>,
+) -> Result<(), AnyError> {
+ // clear the previously cached package.json from memory before reloading it
+ node_resolver::PackageJsonThreadLocalCache::clear();
+
+ // make a new CliFactory to pick up the updated config file
+ let cli_factory = CliFactory::from_flags(flags);
+ // surface any errors in the package.json
+ let npm_resolver = cli_factory.npm_resolver().await?;
+ if let Some(npm_resolver) = npm_resolver.as_managed() {
+ npm_resolver.ensure_no_pkg_json_dep_errors()?;
}
+ // npm install
+ cache_deps::cache_top_level_deps(&cli_factory, jsr_resolver).await?;
Ok(())
}
diff --git a/cli/tools/registry/pm/cache_deps.rs b/cli/tools/registry/pm/cache_deps.rs
index 7d1773b34..c8258e600 100644
--- a/cli/tools/registry/pm/cache_deps.rs
+++ b/cli/tools/registry/pm/cache_deps.rs
@@ -11,6 +11,7 @@ use deno_core::futures::StreamExt;
use deno_semver::package::PackageReq;
pub async fn cache_top_level_deps(
+ // todo(dsherret): don't pass the factory into this function. Instead use ctor deps
factory: &CliFactory,
jsr_resolver: Option<Arc<crate::jsr::JsrFetchResolver>>,
) -> Result<(), AnyError> {