diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2024-02-20 16:29:57 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-20 21:29:57 +0000 |
commit | f90889e5ee19e0ddcd9c1dbcce98720e417dd83e (patch) | |
tree | e44392e9506ba8cddc4c142d304f43879a418152 /cli/args/mod.rs | |
parent | dbc4a4d6327062918b3bc41dc3f60c84ae3c620b (diff) |
perf(jsr): fast check cache and lazy fast check graph (#22485)
Diffstat (limited to 'cli/args/mod.rs')
-rw-r--r-- | cli/args/mod.rs | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/cli/args/mod.rs b/cli/args/mod.rs index d7ff91b84..2a779e04b 100644 --- a/cli/args/mod.rs +++ b/cli/args/mod.rs @@ -1304,6 +1304,67 @@ impl CliOptions { ) } + pub fn resolve_deno_graph_workspace_members( + &self, + ) -> Result<Vec<deno_graph::WorkspaceMember>, AnyError> { + fn workspace_config_to_workspace_members( + workspace_config: &deno_config::WorkspaceConfig, + ) -> Result<Vec<deno_graph::WorkspaceMember>, AnyError> { + workspace_config + .members + .iter() + .map(|member| { + config_to_workspace_member(&member.config_file).with_context(|| { + format!( + "Failed to resolve configuration for '{}' workspace member at '{}'", + member.member_name, + member.config_file.specifier.as_str() + ) + }) + }) + .collect() + } + + fn config_to_workspace_member( + config: &ConfigFile, + ) -> Result<deno_graph::WorkspaceMember, AnyError> { + let nv = deno_semver::package::PackageNv { + name: match &config.json.name { + Some(name) => name.clone(), + None => bail!("Missing 'name' field in config file."), + }, + version: match &config.json.version { + Some(name) => deno_semver::Version::parse_standard(name)?, + None => bail!("Missing 'version' field in config file."), + }, + }; + Ok(deno_graph::WorkspaceMember { + base: config.specifier.join("./").unwrap(), + nv, + exports: config.to_exports_config()?.into_map(), + }) + } + + let maybe_workspace_config = self.maybe_workspace_config(); + if let Some(wc) = maybe_workspace_config { + workspace_config_to_workspace_members(wc) + } else { + Ok( + self + .maybe_config_file() + .as_ref() + .and_then(|c| match config_to_workspace_member(c) { + Ok(m) => Some(vec![m]), + Err(e) => { + log::debug!("Deno config was not a package: {:#}", e); + None + } + }) + .unwrap_or_default(), + ) + } + } + /// Vector of user script CLI arguments. pub fn argv(&self) -> &Vec<String> { &self.flags.argv |