92 lines
4.7 KiB
Bash
92 lines
4.7 KiB
Bash
#compdef pnpm
|
|
|
|
if command -v pnpm-shell-completion &> /dev/null; then
|
|
pnpm_comp_bin="$(which pnpm-shell-completion)"
|
|
else
|
|
pnpm_comp_bin="$(dirname $0)/pnpm-shell-completion"
|
|
fi
|
|
|
|
_pnpm() {
|
|
typeset -A opt_args
|
|
|
|
_arguments \
|
|
'(--filter -F)'{--filter,-F}'=:flag:->filter' \
|
|
':command:->scripts' \
|
|
'*:: :->command_args'
|
|
|
|
local target_pkg=${opt_args[--filter]:-$opt_args[-F]}
|
|
|
|
case $state in
|
|
filter)
|
|
if [[ -f ./pnpm-workspace.yaml ]]; then
|
|
_values 'filter packages' $(FEATURE=filter $pnpm_comp_bin)
|
|
fi
|
|
;;
|
|
scripts)
|
|
_values 'scripts' $(FEATURE=scripts TARGET_PKG=$target_pkg ZSH=true $pnpm_comp_bin) \
|
|
add remove install update publish
|
|
;;
|
|
command_args)
|
|
local cmd=$(FEATURE=pnpm_cmd $pnpm_comp_bin $words)
|
|
case $cmd in
|
|
add)
|
|
_arguments \
|
|
'(--global -g)'{--global,-g}'[Install as a global package]' \
|
|
'(--save-dev -D)'{--save-dev,-D}'[Save package to your `devDependencies`]' \
|
|
'--save-peer[Save package to your `peerDependencies` and `devDependencies`]'
|
|
;;
|
|
install|i)
|
|
_arguments \
|
|
'(--dev -D)'{--dev,-D}'[Only `devDependencies` are installed regardless of the `NODE_ENV`]' \
|
|
'--fix-lockfile[Fix broken lockfile entries automatically]' \
|
|
'--force[Force reinstall dependencies]' \
|
|
"--ignore-scripts[Don't run lifecycle scripts]" \
|
|
'--lockfile-only[Dependencies are not downloaded. Only `pnpm-lock.yaml` is updated]' \
|
|
'--no-optional[`optionalDependencies` are not installed]' \
|
|
'--offline[Trigger an error if any required dependencies are not available in local store]' \
|
|
'--prefer-offline[Skip staleness checks for cached data, but request missing data from the server]' \
|
|
'(--prod -P)'{--prod,-P}"[Packages in \`devDependencies\` won't be installed]"
|
|
;;
|
|
remove|rm|why)
|
|
if [[ -f ./package.json ]]; then
|
|
_values 'deps' $(FEATURE=deps TARGET_PKG=$target_pkg $pnpm_comp_bin)
|
|
fi
|
|
;;
|
|
update|upgrade|up)
|
|
_arguments \
|
|
'(--dev -D)'{--dev,-D}'[Update packages only in "devDependencies"]' \
|
|
'(--global -g)'{--global,-g}'[Update globally installed packages]' \
|
|
'(--interactive -i)'{--interactive,-i}'[Show outdated dependencies and select which ones to update]' \
|
|
'(--latest -L)'{--latest,-L}'[Ignore version ranges in package.json]' \
|
|
"--no-optional[Don't update packages in \`optionalDependencies\`]" \
|
|
'(--prod -P)'{--prod,-P}'[Update packages only in "dependencies" and "optionalDependencies"]' \
|
|
'(--recursive -r)'{--recursive,-r}'[Update in every package found in subdirectories or every workspace package]'
|
|
if [[ -f ./package.json ]]; then
|
|
_values 'deps' $(FEATURE=deps TARGET_PKG=$target_pkg $pnpm_comp_bin)
|
|
fi
|
|
;;
|
|
publish)
|
|
_arguments \
|
|
'--access=[Tells the registry whether this package should be published as public or restricted]: :(public restricted)' \
|
|
'--dry-run[Does everything a publish would do except actually publishing to the registry]' \
|
|
'--force[Packages are proceeded to be published even if their current version is already in the registry]' \
|
|
'--ignore-scripts[Ignores any publish related lifecycle scripts (prepublishOnly, postpublish, and the like)]' \
|
|
"--no-git-checks[Don't check if current branch is your publish branch, clean, and up to date]" \
|
|
'--otp[Specify a one-time password]' \
|
|
'--publish-branch[Sets branch name to publish]' \
|
|
'(--recursive -r)'{--recursive,-r}'[Publish all packages from the workspace]' \
|
|
'--tag=[Registers the published package with the given tag]'
|
|
;;
|
|
run)
|
|
if [[ -f ./package.json ]]; then
|
|
_values 'scripts' $(FEATURE=scripts TARGET_PKG=$target_pkg ZSH=true $pnpm_comp_bin)
|
|
fi
|
|
;;
|
|
*)
|
|
_files
|
|
esac
|
|
esac
|
|
}
|
|
|
|
compdef _pnpm pnpm
|