diff --git a/crates/vite_package_manager/src/install.rs b/crates/vite_package_manager/src/install.rs new file mode 100644 index 0000000000..bd00ec84ec --- /dev/null +++ b/crates/vite_package_manager/src/install.rs @@ -0,0 +1,17 @@ +use std::{collections::HashMap, iter}; + +use crate::package_manager::{PackageManager, ResolveCommandResult, format_path_env}; + +impl PackageManager { + /// Resolve the install command. + pub fn resolve_install_command(&self, args: &Vec) -> ResolveCommandResult { + ResolveCommandResult { + bin_path: self.bin_name.to_string(), + args: iter::once("install") + .chain(args.iter().map(String::as_str)) + .map(String::from) + .collect(), + envs: HashMap::from([("PATH".to_string(), format_path_env(self.get_bin_prefix()))]), + } + } +} diff --git a/crates/vite_package_manager/src/lib.rs b/crates/vite_package_manager/src/lib.rs index e44b92d5ce..461b004bd1 100644 --- a/crates/vite_package_manager/src/lib.rs +++ b/crates/vite_package_manager/src/lib.rs @@ -1,4 +1,5 @@ mod config; +mod install; pub mod package; pub mod package_manager; mod request; diff --git a/crates/vite_package_manager/src/main.rs b/crates/vite_package_manager/src/main.rs index b90491ea40..a6d68fc8a5 100644 --- a/crates/vite_package_manager/src/main.rs +++ b/crates/vite_package_manager/src/main.rs @@ -8,7 +8,7 @@ async fn main() -> Result<(), Error> { let package_manager = PackageManager::builder(¤t_dir).build().await?; println!("Package manager: {package_manager:#?} for {current_dir:?}"); - let resolve_command = package_manager.resolve_command(); + let resolve_command = package_manager.resolve_install_command(&vec![]); println!("Resolve command: {resolve_command:#?}"); Ok(()) diff --git a/crates/vite_package_manager/src/package_manager.rs b/crates/vite_package_manager/src/package_manager.rs index a74d8650a3..5d5c133b3f 100644 --- a/crates/vite_package_manager/src/package_manager.rs +++ b/crates/vite_package_manager/src/package_manager.rs @@ -50,6 +50,7 @@ impl fmt::Display for PackageManagerType { #[derive(Debug)] pub struct ResolveCommandResult { pub bin_path: String, + pub args: Vec, pub envs: HashMap, } @@ -146,14 +147,6 @@ impl PackageManager { self.install_dir.join("bin") } - #[must_use] - pub fn resolve_command(&self) -> ResolveCommandResult { - ResolveCommandResult { - bin_path: self.bin_name.to_string(), - envs: HashMap::from([("PATH".to_string(), format_path_env(self.get_bin_prefix()))]), - } - } - #[must_use] pub fn get_fingerprint_ignores(&self) -> Vec { let mut ignores: Vec = vec![ @@ -601,7 +594,7 @@ async fn set_package_manager_field( Ok(()) } -fn format_path_env(bin_prefix: impl AsRef) -> String { +pub(crate) fn format_path_env(bin_prefix: impl AsRef) -> String { let mut paths = env::split_paths(&env::var_os("PATH").unwrap_or_default()).collect::>(); paths.insert(0, bin_prefix.as_ref().to_path_buf()); env::join_paths(paths).unwrap().to_string_lossy().to_string() diff --git a/crates/vite_task/src/install.rs b/crates/vite_task/src/install.rs index e7cebe20dc..492734a5f4 100644 --- a/crates/vite_task/src/install.rs +++ b/crates/vite_task/src/install.rs @@ -1,7 +1,6 @@ use std::{ env, io::{self, IsTerminal, Write}, - iter, }; use crossterm::{ @@ -59,11 +58,11 @@ impl InstallCommand { Err(e) => return Err(e), }; let workspace = Workspace::partial_load(self.workspace_root)?; - let resolve_command = package_manager.resolve_command(); + let resolve_command = package_manager.resolve_install_command(args); let resolved_task = ResolvedTask::resolve_from_builtin_with_command_result( &workspace, "install", - iter::once("install").chain(args.iter().map(String::as_str)), + resolve_command.args.iter(), ResolveCommandResult { bin_path: resolve_command.bin_path, envs: resolve_command.envs }, self.ignore_replay, Some(package_manager.get_fingerprint_ignores()),