diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2023-09-29 09:26:25 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-29 09:26:25 -0400 |
commit | 5edd102f3f912a53c7bcad3b0fa4feb672ada323 (patch) | |
tree | 2402b64e527bd859f3a2c71d3e96a89992002aa2 /cli/tools/info.rs | |
parent | d43e48c4e96b02289d505cd2558ba85d7d6cb57b (diff) |
refactor(cli): make `CliNpmResolver` a trait (#20732)
This makes `CliNpmResolver` a trait. The terminology used is:
- **managed** - Deno manages the node_modules folder and does an
auto-install (ex. `ManagedCliNpmResolver`)
- **byonm** - "Bring your own node_modules" (ex. `ByonmCliNpmResolver`,
which is in this PR, but unimplemented at the moment)
Part of #18967
Diffstat (limited to 'cli/tools/info.rs')
-rw-r--r-- | cli/tools/info.rs | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/cli/tools/info.rs b/cli/tools/info.rs index 941ba1cbd..e1972f08f 100644 --- a/cli/tools/info.rs +++ b/cli/tools/info.rs @@ -31,6 +31,7 @@ use crate::display; use crate::factory::CliFactory; use crate::graph_util::graph_lock_or_exit; use crate::npm::CliNpmResolver; +use crate::npm::ManagedCliNpmResolver; use crate::util::checksum; pub async fn info(flags: Flags, info_flags: InfoFlags) -> Result<(), AnyError> { @@ -71,11 +72,11 @@ pub async fn info(flags: Flags, info_flags: InfoFlags) -> Result<(), AnyError> { if info_flags.json { let mut json_graph = json!(graph); - add_npm_packages_to_json(&mut json_graph, npm_resolver); + add_npm_packages_to_json(&mut json_graph, npm_resolver.as_ref()); display::write_json_to_stdout(&json_graph)?; } else { let mut output = String::new(); - GraphDisplayContext::write(&graph, npm_resolver, &mut output)?; + GraphDisplayContext::write(&graph, npm_resolver.as_ref(), &mut output)?; display::write_to_stdout_ignore_sigpipe(output.as_bytes())?; } } else { @@ -165,8 +166,12 @@ fn print_cache_info( fn add_npm_packages_to_json( json: &mut serde_json::Value, - npm_resolver: &CliNpmResolver, + npm_resolver: &dyn CliNpmResolver, ) { + let Some(npm_resolver) = npm_resolver.as_managed() else { + return; // does not include byonm to deno info's output + }; + // ideally deno_graph could handle this, but for now we just modify the json here let snapshot = npm_resolver.snapshot(); let json = json.as_object_mut().unwrap(); @@ -339,7 +344,7 @@ struct NpmInfo { impl NpmInfo { pub fn build<'a>( graph: &'a ModuleGraph, - npm_resolver: &'a CliNpmResolver, + npm_resolver: &'a ManagedCliNpmResolver, npm_snapshot: &'a NpmResolutionSnapshot, ) -> Self { let mut info = NpmInfo::default(); @@ -365,7 +370,7 @@ impl NpmInfo { fn fill_package_info<'a>( &mut self, package: &NpmResolutionPackage, - npm_resolver: &'a CliNpmResolver, + npm_resolver: &'a ManagedCliNpmResolver, npm_snapshot: &'a NpmResolutionSnapshot, ) { self.packages.insert(package.id.clone(), package.clone()); @@ -399,11 +404,16 @@ struct GraphDisplayContext<'a> { impl<'a> GraphDisplayContext<'a> { pub fn write<TWrite: Write>( graph: &'a ModuleGraph, - npm_resolver: &'a CliNpmResolver, + npm_resolver: &'a dyn CliNpmResolver, writer: &mut TWrite, ) -> fmt::Result { - let npm_snapshot = npm_resolver.snapshot(); - let npm_info = NpmInfo::build(graph, npm_resolver, &npm_snapshot); + let npm_info = match npm_resolver.as_managed() { + Some(npm_resolver) => { + let npm_snapshot = npm_resolver.snapshot(); + NpmInfo::build(graph, npm_resolver, &npm_snapshot) + } + None => NpmInfo::default(), + }; Self { graph, npm_info, |