diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2024-10-04 08:52:00 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-10-04 07:52:00 +0000 |
commit | edac9166040dc09674072ce57af6a9c5ea958d85 (patch) | |
tree | 0a54e2946b8d6146e3620b4859c6d609d1c657ee /cli/tools/registry | |
parent | b8a9a4a862e4d61630c5bc8089261c7a177ec97a (diff) |
fix(install): surface package.json dependency errors (#26023)
Diffstat (limited to 'cli/tools/registry')
-rw-r--r-- | cli/tools/registry/pm.rs | 33 | ||||
-rw-r--r-- | cli/tools/registry/pm/cache_deps.rs | 1 |
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> { |