diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2023-04-17 15:36:23 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-17 15:36:23 -0400 |
commit | d2d62b6312f9c09f91e26acd0b4d88b3ddcf94cf (patch) | |
tree | f2f5f0eb14e76e38876b3c219c859405fa664aef /cli/tools | |
parent | 559a61b879366c01fbbc078c03743cd836189ae7 (diff) |
refactor(npm): add CliNodeResolver (#18742)
Diffstat (limited to 'cli/tools')
-rw-r--r-- | cli/tools/check.rs | 8 | ||||
-rw-r--r-- | cli/tools/task.rs | 23 | ||||
-rw-r--r-- | cli/tools/vendor/mod.rs | 15 |
3 files changed, 30 insertions, 16 deletions
diff --git a/cli/tools/check.rs b/cli/tools/check.rs index eee82adcf..c7f404223 100644 --- a/cli/tools/check.rs +++ b/cli/tools/check.rs @@ -21,6 +21,7 @@ use crate::cache::Caches; use crate::cache::DenoDir; use crate::cache::FastInsecureHasher; use crate::cache::TypeCheckCache; +use crate::node::CliNodeResolver; use crate::npm::NpmPackageResolver; use crate::tsc; use crate::version; @@ -41,6 +42,7 @@ pub struct TypeChecker { deno_dir: DenoDir, caches: Arc<Caches>, cli_options: Arc<CliOptions>, + node_resolver: Arc<CliNodeResolver>, npm_resolver: Arc<NpmPackageResolver>, } @@ -49,12 +51,14 @@ impl TypeChecker { deno_dir: DenoDir, caches: Arc<Caches>, cli_options: Arc<CliOptions>, + node_resolver: Arc<CliNodeResolver>, npm_resolver: Arc<NpmPackageResolver>, ) -> Self { Self { deno_dir, caches, cli_options, + node_resolver, npm_resolver, } } @@ -133,7 +137,7 @@ impl TypeChecker { debug, graph: graph.clone(), hash_data, - maybe_npm_resolver: Some(self.npm_resolver.clone()), + maybe_node_resolver: Some(self.node_resolver.clone()), maybe_tsbuildinfo, root_names, check_mode: type_check_mode, @@ -144,7 +148,7 @@ impl TypeChecker { if let Some(file_name) = &d.file_name { if !file_name.starts_with("http") { if ModuleSpecifier::parse(file_name) - .map(|specifier| !self.npm_resolver.in_npm_package(&specifier)) + .map(|specifier| !self.node_resolver.in_npm_package(&specifier)) .unwrap_or(true) { Some(d.clone()) diff --git a/cli/tools/task.rs b/cli/tools/task.rs index 9e82f14d9..c64e2a77c 100644 --- a/cli/tools/task.rs +++ b/cli/tools/task.rs @@ -1,8 +1,11 @@ // Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. +use crate::args::CliOptions; use crate::args::Flags; use crate::args::TaskFlags; use crate::colors; +use crate::node::CliNodeResolver; +use crate::npm::NpmPackageResolver; use crate::proc_state::ProcState; use crate::util::fs::canonicalize_path; use deno_core::anyhow::bail; @@ -50,7 +53,7 @@ pub async fn execute_script( Some(path) => canonicalize_path(&PathBuf::from(path))?, None => config_file_path.parent().unwrap().to_owned(), }; - let script = get_script_with_args(script, &ps); + let script = get_script_with_args(script, &ps.options); output_task(task_name, &script); let seq_list = deno_task_shell::parser::parse(&script) .with_context(|| format!("Error parsing script '{task_name}'."))?; @@ -92,11 +95,12 @@ pub async fn execute_script( .unwrap() .to_owned(), }; - let script = get_script_with_args(script, &ps); + let script = get_script_with_args(script, &ps.options); output_task(task_name, &script); let seq_list = deno_task_shell::parser::parse(&script) .with_context(|| format!("Error parsing script '{task_name}'."))?; - let npx_commands = resolve_npm_commands(&ps)?; + let npx_commands = + resolve_npm_commands(&ps.npm_resolver, &ps.node_resolver)?; let env_vars = collect_env_vars(); let exit_code = deno_task_shell::execute(seq_list, env_vars, &cwd, npx_commands).await; @@ -108,9 +112,8 @@ pub async fn execute_script( } } -fn get_script_with_args(script: &str, ps: &ProcState) -> String { - let additional_args = ps - .options +fn get_script_with_args(script: &str, options: &CliOptions) -> String { + let additional_args = options .argv() .iter() // surround all the additional arguments in double quotes @@ -231,13 +234,13 @@ impl ShellCommand for NpmPackageBinCommand { } fn resolve_npm_commands( - ps: &ProcState, + npm_resolver: &NpmPackageResolver, + node_resolver: &CliNodeResolver, ) -> Result<HashMap<String, Rc<dyn ShellCommand>>, AnyError> { let mut result = HashMap::new(); - let snapshot = ps.npm_resolver.snapshot(); + let snapshot = npm_resolver.snapshot(); for id in snapshot.top_level_packages() { - let bin_commands = - crate::node::node_resolve_binary_commands(&id.nv, &ps.npm_resolver)?; + let bin_commands = node_resolver.resolve_binary_commands(&id.nv)?; for bin_command in bin_commands { result.insert( bin_command.to_string(), diff --git a/cli/tools/vendor/mod.rs b/cli/tools/vendor/mod.rs index e75b19e2c..225c3e6a8 100644 --- a/cli/tools/vendor/mod.rs +++ b/cli/tools/vendor/mod.rs @@ -15,6 +15,7 @@ use crate::args::CliOptions; use crate::args::Flags; use crate::args::FmtOptionsConfig; use crate::args::VendorFlags; +use crate::graph_util::ModuleGraphBuilder; use crate::proc_state::ProcState; use crate::tools::fmt::format_json; use crate::util::fs::canonicalize_path; @@ -43,7 +44,12 @@ pub async fn vendor( validate_output_dir(&output_dir, &vendor_flags)?; validate_options(&mut cli_options, &output_dir)?; let ps = ProcState::from_cli_options(Arc::new(cli_options)).await?; - let graph = create_graph(&ps, &vendor_flags).await?; + let graph = create_graph( + &ps.module_graph_builder, + &vendor_flags, + ps.options.initial_cwd(), + ) + .await?; let vendored_count = build::build( graph, &ps.parsed_source_cache, @@ -261,16 +267,17 @@ fn is_dir_empty(dir_path: &Path) -> Result<bool, AnyError> { } async fn create_graph( - ps: &ProcState, + module_graph_builder: &ModuleGraphBuilder, flags: &VendorFlags, + initial_cwd: &Path, ) -> Result<deno_graph::ModuleGraph, AnyError> { let entry_points = flags .specifiers .iter() - .map(|p| resolve_url_or_path(p, ps.options.initial_cwd())) + .map(|p| resolve_url_or_path(p, initial_cwd)) .collect::<Result<Vec<_>, _>>()?; - ps.module_graph_builder.create_graph(entry_points).await + module_graph_builder.create_graph(entry_points).await } #[cfg(test)] |