summaryrefslogtreecommitdiff
path: root/cli/npm/managed/mod.rs
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/npm/managed/mod.rs
parentb8a9a4a862e4d61630c5bc8089261c7a177ec97a (diff)
fix(install): surface package.json dependency errors (#26023)
Diffstat (limited to 'cli/npm/managed/mod.rs')
-rw-r--r--cli/npm/managed/mod.rs21
1 files changed, 21 insertions, 0 deletions
diff --git a/cli/npm/managed/mod.rs b/cli/npm/managed/mod.rs
index 7bb254cb5..225cd6c29 100644
--- a/cli/npm/managed/mod.rs
+++ b/cli/npm/managed/mod.rs
@@ -20,6 +20,7 @@ use deno_npm::resolution::ValidSerializedNpmResolutionSnapshot;
use deno_npm::NpmPackageId;
use deno_npm::NpmResolutionPackage;
use deno_npm::NpmSystemInfo;
+use deno_runtime::colors;
use deno_runtime::deno_fs::FileSystem;
use deno_runtime::deno_node::NodePermissions;
use deno_runtime::deno_node::NodeRequireResolver;
@@ -478,6 +479,25 @@ impl ManagedCliNpmResolver {
self.resolution.resolve_pkg_id_from_pkg_req(req)
}
+ pub fn ensure_no_pkg_json_dep_errors(&self) -> Result<(), AnyError> {
+ for err in self.npm_install_deps_provider.pkg_json_dep_errors() {
+ match err {
+ deno_package_json::PackageJsonDepValueParseError::VersionReq(_) => {
+ return Err(
+ AnyError::from(err.clone())
+ .context("Failed to install from package.json"),
+ );
+ }
+ deno_package_json::PackageJsonDepValueParseError::Unsupported {
+ ..
+ } => {
+ log::warn!("{} {} in package.json", colors::yellow("Warning"), err)
+ }
+ }
+ }
+ Ok(())
+ }
+
/// Ensures that the top level `package.json` dependencies are installed.
/// This may set up the `node_modules` directory.
///
@@ -489,6 +509,7 @@ impl ManagedCliNpmResolver {
if !self.top_level_install_flag.raise() {
return Ok(false); // already did this
}
+
let pkg_json_remote_pkgs = self.npm_install_deps_provider.remote_pkgs();
if pkg_json_remote_pkgs.is_empty() {
return Ok(false);