use super::types::{InstallMethod, Origin};
pub(crate) fn update_cmd(pm_name: &str, method: &InstallMethod) -> &'static str {
let origin = match method {
InstallMethod::Chain(origins) => origins.first(),
_ => None,
};
match (pm_name, origin) {
("npm", Some(Origin::PackageManager("Homebrew"))) => "brew upgrade node",
("npm", Some(Origin::PackageManager("MacPorts"))) => "sudo port upgrade nodejs",
("npm", Some(Origin::Wrapper("Volta"))) => "volta install node@latest",
("npm", Some(Origin::Wrapper("Asdf"))) => "asdf install nodejs latest",
("npm", _) => "npm install -g npm@latest",
("yarn", Some(Origin::PackageManager("Homebrew"))) => "brew upgrade yarn",
("yarn", Some(Origin::PackageManager("MacPorts"))) => "sudo port upgrade yarn",
("yarn", Some(Origin::Wrapper("Volta"))) => "volta install yarn@latest",
("yarn", _) => "npm install -g yarn@latest",
("pnpm", Some(Origin::PackageManager("Homebrew"))) => "brew upgrade pnpm",
("pnpm", Some(Origin::Wrapper("Volta"))) => "volta install pnpm@latest",
("pnpm", _) => "npm install -g pnpm@latest",
("bun", Some(Origin::PackageManager("Homebrew"))) => "brew upgrade bun",
("bun", _) => "bun upgrade",
("deno", Some(Origin::PackageManager("Homebrew"))) => "brew upgrade deno",
("deno", Some(Origin::PackageManager("MacPorts"))) => "sudo port upgrade deno",
("deno", Some(Origin::Wrapper("Asdf"))) => "asdf install deno latest",
("deno", _) => "deno upgrade",
("ni", Some(Origin::PackageManager("Homebrew"))) => "brew upgrade ni",
("ni", _) => "npm install -g @antfu/ni@latest",
("nvm", Some(Origin::PackageManager("Homebrew"))) => "brew upgrade nvm",
("nvm", _) => {
"export NVM_DIR=\"${NVM_DIR:-$HOME/.nvm}\"; curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/install.sh | bash"
},
("opam", Some(Origin::PackageManager("Homebrew"))) => "brew upgrade opam",
("opam", Some(Origin::PackageManager("MacPorts"))) => "sudo port upgrade opam",
("opam", _) => "bash -c \"sh <(curl -fsSL https://opam.ocaml.org/install.sh)\"",
("pip", Some(Origin::PackageManager("Homebrew"))) => "brew upgrade python",
("pip", Some(Origin::PackageManager("MacPorts"))) => "sudo port upgrade python",
("pip", Some(Origin::Wrapper("Pyenv"))) => "pyenv install --skip-existing",
("pip", Some(Origin::Wrapper("Asdf"))) => "asdf install python latest",
("pip", _) => "python -m pip install --upgrade pip",
("poetry", Some(Origin::PackageManager("Homebrew"))) => "brew upgrade poetry",
("poetry", Some(Origin::PackageManager("pip"))) => "pip install --upgrade poetry",
("poetry", Some(Origin::PackageManager("pipx"))) => "pipx upgrade poetry",
("poetry", _) => "poetry self update",
("uv", Some(Origin::PackageManager("Homebrew"))) => "brew upgrade uv",
("uv", Some(Origin::PackageManager("pip"))) => "pip install --upgrade uv",
("uv", Some(Origin::PackageManager("pipx"))) => "pipx upgrade uv",
("uv", _) => "uv self update",
("conda", Some(Origin::PackageManager("Homebrew"))) => "brew upgrade --cask miniconda",
("conda", Some(Origin::PackageManager("MacPorts"))) => "sudo port upgrade py-conda",
("conda", _) => "conda update conda",
("pipenv", Some(Origin::PackageManager("Homebrew"))) => "brew upgrade pipenv",
("pipenv", Some(Origin::PackageManager("pip"))) => "pip install --upgrade pipenv",
("pipenv", Some(Origin::PackageManager("pipx"))) => "pipx upgrade pipenv",
("pipenv", _) => "pip install --upgrade pipenv",
("pdm", Some(Origin::PackageManager("Homebrew"))) => "brew upgrade pdm",
("pdm", Some(Origin::PackageManager("pip"))) => "pip install --upgrade pdm",
("pdm", Some(Origin::PackageManager("pipx"))) => "pipx upgrade pdm",
("pdm", _) => "pdm self update",
("composer", Some(Origin::PackageManager("Homebrew"))) => "brew upgrade composer",
("composer", Some(Origin::PackageManager("MacPorts"))) => "sudo port upgrade composer",
("composer", _) => "composer self-update",
("pecl", Some(Origin::PackageManager("Homebrew"))) => "brew upgrade php",
("pecl", Some(Origin::PackageManager("MacPorts"))) => "sudo port upgrade php +pear",
("pecl", _) => "pecl channel-update pecl.php.net",
("cabal", Some(Origin::PackageManager("Homebrew"))) => "brew upgrade cabal-install",
("cabal", Some(Origin::PackageManager("MacPorts"))) => "sudo port upgrade cabal",
("cabal", Some(Origin::Wrapper("Ghcup"))) => "ghcup install cabal latest",
("cabal", _) => "cabal install cabal-install",
("stack", Some(Origin::PackageManager("Homebrew"))) => "brew upgrade haskell-stack",
("stack", Some(Origin::PackageManager("MacPorts"))) => "sudo port upgrade stack",
("stack", Some(Origin::Wrapper("Ghcup"))) => "ghcup install stack latest",
("stack", _) => "stack upgrade",
("go", Some(Origin::PackageManager("Homebrew"))) => "brew upgrade go",
("go", Some(Origin::PackageManager("MacPorts"))) => "sudo port upgrade go",
("go", Some(Origin::Wrapper("g"))) => "g install latest",
("go", Some(Origin::Wrapper("gvm"))) => "# gvm requires version: gvm install goX.Y.Z",
("go", Some(Origin::Wrapper("Asdf"))) => {
"asdf install golang latest && asdf global golang latest"
},
("go", _) => "# Go binary updates require manual installation",
("cargo", Some(Origin::PackageManager("Homebrew"))) => "brew upgrade rust",
("cargo", Some(Origin::PackageManager("MacPorts"))) => "sudo port upgrade rust",
("cargo", Some(Origin::Toolchain("Rustup"))) => "rustup update",
("cargo", Some(Origin::Wrapper("Asdf"))) => {
"asdf install rust latest && asdf global rust latest"
},
("cargo", _) => "rustup update",
("gleam", Some(Origin::PackageManager("Homebrew"))) => "brew upgrade gleam",
("gleam", Some(Origin::PackageManager("MacPorts"))) => "sudo port upgrade gleam",
("gleam", Some(Origin::PackageManager("cargo"))) => "cargo install gleam --locked",
("gleam", Some(Origin::Wrapper("Asdf"))) => {
"asdf install gleam latest && asdf global gleam latest"
},
("gleam", _) => "cargo install gleam --locked",
("zig", Some(Origin::PackageManager("Homebrew"))) => "brew upgrade zig",
("zig", Some(Origin::PackageManager("MacPorts"))) => "sudo port upgrade zig",
("zig", Some(Origin::Wrapper("Asdf"))) => {
"asdf install zig latest && asdf global zig latest"
},
("zig", Some(Origin::Wrapper("zigup"))) => "zigup latest",
("zig", _) => "# Zig binary updates require manual installation",
("brew", _) => "brew update && brew upgrade",
("port", _) => "sudo port selfupdate && sudo port upgrade outdated",
("nix", _) => "nix-channel --update && nix-env --upgrade",
_ => "# No update command available",
}
}