diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2022-11-11 21:26:14 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-11 21:26:14 -0500 |
commit | d81065cff9d2ac64f73ec29edeb6dae1fdf87f04 (patch) | |
tree | 90f5bf51422b0c39eed043c32f67ea1103a78a37 /cli/proc_state.rs | |
parent | 06bd9e9e1640150f98857a74fea0cc1a3b3386a7 (diff) |
feat(unstable/npm): module graph derived npm specifier resolution order (#16602)
Diffstat (limited to 'cli/proc_state.rs')
-rw-r--r-- | cli/proc_state.rs | 29 |
1 files changed, 11 insertions, 18 deletions
diff --git a/cli/proc_state.rs b/cli/proc_state.rs index 29f4ce3bd..e50a4bdba 100644 --- a/cli/proc_state.rs +++ b/cli/proc_state.rs @@ -23,6 +23,7 @@ use crate::lockfile::as_maybe_locker; use crate::lockfile::Lockfile; use crate::node; use crate::node::NodeResolution; +use crate::npm::resolve_npm_package_reqs; use crate::npm::NpmCache; use crate::npm::NpmPackageReference; use crate::npm::NpmPackageResolver; @@ -285,19 +286,16 @@ impl ProcState { reload_on_watch: bool, ) -> Result<(), AnyError> { let _pb_clear_guard = self.progress_bar.clear_guard(); - let mut npm_package_reqs = vec![]; - for root in &roots { - if let Ok(package_ref) = NpmPackageReference::from_specifier(root) { - npm_package_reqs.push(package_ref.req); - } - } + let has_root_npm_specifier = roots.iter().any(|r| { + r.scheme() == "npm" && NpmPackageReference::from_specifier(r).is_ok() + }); let roots = roots .into_iter() .map(|s| (s, ModuleKind::Esm)) .collect::<Vec<_>>(); - if !reload_on_watch && npm_package_reqs.is_empty() { + if !reload_on_watch && !has_root_npm_specifier { let graph_data = self.graph_data.read(); if self.options.type_check_mode() == TypeCheckMode::None || graph_data.is_type_checked(&roots, &lib) @@ -395,7 +393,7 @@ impl ProcState { graph_data.entries().map(|(s, _)| s).cloned().collect() }; - { + let npm_package_reqs = { let mut graph_data = self.graph_data.write(); graph_data.add_graph(&graph, reload_on_watch); let check_js = self.options.check_js(); @@ -406,7 +404,7 @@ impl ProcState { check_js, ) .unwrap()?; - npm_package_reqs.extend(graph_data.npm_package_reqs()); + graph_data.npm_package_reqs().clone() }; if !npm_package_reqs.is_empty() { @@ -645,15 +643,10 @@ impl ProcState { ) .await; - // add the found npm package references to the npm resolver and cache them - let mut package_reqs = Vec::new(); - for (specifier, _) in graph.specifiers() { - if let Ok(reference) = NpmPackageReference::from_specifier(&specifier) { - package_reqs.push(reference.req); - } - } - if !package_reqs.is_empty() { - self.npm_resolver.add_package_reqs(package_reqs).await?; + // add the found npm package requirements to the npm resolver and cache them + let npm_package_reqs = resolve_npm_package_reqs(&graph); + if !npm_package_reqs.is_empty() { + self.npm_resolver.add_package_reqs(npm_package_reqs).await?; } Ok(graph) |