236 lines
8.1 KiB
Bash
236 lines
8.1 KiB
Bash
#compdef nvm
|
|
# ------------------------------------------------------------------------------
|
|
# Copyright (c) 2011 Github zsh-users - https://github.com/zsh-users
|
|
# All rights reserved.
|
|
#
|
|
# Redistribution and use in source and binary forms, with or without
|
|
# modification, are permitted provided that the following conditions are met:
|
|
# * Redistributions of source code must retain the above copyright
|
|
# notice, this list of conditions and the following disclaimer.
|
|
# * Redistributions in binary form must reproduce the above copyright
|
|
# notice, this list of conditions and the following disclaimer in the
|
|
# documentation and/or other materials provided with the distribution.
|
|
# * Neither the name of the zsh-users nor the
|
|
# names of its contributors may be used to endorse or promote products
|
|
# derived from this software without specific prior written permission.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
# DISCLAIMED. IN NO EVENT SHALL ZSH-USERS BE LIABLE FOR ANY
|
|
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
# ------------------------------------------------------------------------------
|
|
# Description
|
|
# -----------
|
|
#
|
|
# Completion script for nvm v0.39.2 (https://github.com/nvm-sh/nvm).
|
|
#
|
|
# ------------------------------------------------------------------------------
|
|
# Authors
|
|
# -------
|
|
#
|
|
# * Changwoo Park (https://github.com/pismute)
|
|
# * Shohei Yoshida (https://github.com/syohex)
|
|
#
|
|
# ------------------------------------------------------------------------------
|
|
|
|
__nvm() {
|
|
typeset -A opt_args
|
|
local context state line
|
|
|
|
local curcontext="$curcontext"
|
|
local ret=1
|
|
|
|
_arguments -C \
|
|
'--help[show help message]' \
|
|
'--no-color[suppress colored output]' \
|
|
'--version[print out the installed version of nvm]' \
|
|
'1: :__nvm_subcommands' \
|
|
'*::arg:->args' && ret=0
|
|
|
|
case "$state" in
|
|
args)
|
|
case $words[1] in
|
|
(install)
|
|
_arguments -C \
|
|
'-s[Skip binary download, install from source only]' \
|
|
'-b[Skip source download, install from binary only]' \
|
|
'--reinstall-packages-from=[When installing, reinstall packages installed in node]:version' \
|
|
'--lts=[When installing, only select from LTS versions]::lts_name' \
|
|
'--skip-default-packages[When installing, skip the default-packages file if it exists]' \
|
|
'--latest-npm[After installing, attempt to upgrade to the latest working npm on the given node version]' \
|
|
'--no-progress[Disable the progress bar on any downloads]' \
|
|
'--alias=[After installing, set the alias specified to the version specified]' \
|
|
'--default[After installing, set default alias to the version specified]' \
|
|
'1::version:__nvm_versions' \
|
|
&& ret=0
|
|
;;
|
|
(uninstall)
|
|
_arguments -C \
|
|
'--lts=[When installing, only select from LTS versions]::lts_name' \
|
|
'1: :__nvm_installed_versions' \
|
|
&& ret=0
|
|
;;
|
|
(use)
|
|
_arguments -C \
|
|
'--silent[Silences stdout/stderr output]' \
|
|
'--lts=[When installing, only select from LTS versions]::lts_name' \
|
|
'1: :__nvm_installed_versions' \
|
|
'*: :_normal' \
|
|
&& ret=0
|
|
;;
|
|
(exec)
|
|
_arguments -C \
|
|
'--silent[Silences stdout/stderr output]' \
|
|
'--lts=[When installing, only select from LTS versions]::lts_name' \
|
|
'1: :__nvm_installed_versions' \
|
|
'*: :_normal' \
|
|
&& ret=0
|
|
;;
|
|
(run)
|
|
_arguments -C \
|
|
'--silent[Silences stdout/stderr output]' \
|
|
'--lts=[When installing, only select from LTS versions]::lts_name' \
|
|
'1: :__nvm_installed_versions' \
|
|
'*: :_normal' \
|
|
&& ret=0
|
|
;;
|
|
(ls)
|
|
_arguments -C \
|
|
'--no-colors[Suppress colored output]' \
|
|
'--no-alias[Suppress `nvm alias` output]' \
|
|
&& ret=0
|
|
;;
|
|
(ls-remote)
|
|
_arguments -C \
|
|
'--silent[Silences stdout/stderr output]' \
|
|
'--lts=[When installing, only select from LTS versions]::lts_name' \
|
|
'--no-colors[Suppress colored output]' \
|
|
&& ret=0
|
|
;;
|
|
(version-remote)
|
|
_arguments -C \
|
|
'--lts=[When installing, only select from LTS versions]::lts_name' \
|
|
'1: :__nvm_versions' \
|
|
&& ret=0
|
|
;;
|
|
(deactivate)
|
|
_arguments -C \
|
|
'--silent=[Silences stdout/stderr output]' \
|
|
&& ret=0
|
|
;;
|
|
(alias)
|
|
_arguments -C \
|
|
'1:name' \
|
|
'2:version:__nvm_installed_versions' \
|
|
&& ret=0
|
|
;;
|
|
(unalias)
|
|
_arguments -C \
|
|
'1:version:__nvm_installed_versions' \
|
|
&& ret=0
|
|
;;
|
|
(reinstall-package)
|
|
_arguments -C \
|
|
'--silent=[Silences stdout/stderr output]' \
|
|
'1: :__nvm_installed_versions' \
|
|
&& ret=0
|
|
;;
|
|
(which)
|
|
_arguments -C \
|
|
'1: : _alternative "version:version:__nvm_installed_versions" "current: :(current)"' \
|
|
&& ret=0
|
|
;;
|
|
(cache)
|
|
_arguments -C \
|
|
'1: :__nvm_cache_subcommands' \
|
|
&& ret=0
|
|
;;
|
|
*)
|
|
(( ret )) && _message 'no more arguments'
|
|
;;
|
|
esac
|
|
;;
|
|
esac
|
|
|
|
return ret
|
|
}
|
|
|
|
__nvm_subcommands() {
|
|
local -a commands=(
|
|
'help:Show this message'
|
|
'install:Download and install a <version>'
|
|
'uninstall:Uninstall a <version>'
|
|
'use:Modify PATH to use <version>'
|
|
'exec:Run <command> on <version>'
|
|
'run:Run <version> with <args> as arguments'
|
|
'current:Display currently activated version of Node'
|
|
'ls:List installed [versions]'
|
|
'ls-remote:List remote versions available for install'
|
|
'version:Show current node version'
|
|
'version-remote:Resolve the given description to a single remote version'
|
|
'deactivate:Undo effects of NVM on current shell'
|
|
'alias:Set an alias named <name> pointing to <version>. Show all aliases beginning with [<pattern>].'
|
|
'unalias:Deletes the alias named <name>'
|
|
'install-latest-npm:Attempt to upgrade to the latest working npm on the current node version'
|
|
'reinstall-packages:Reinstall global npm packages contained in <version> to current version'
|
|
'unload:Unload `nvm` from shell'
|
|
'which:Display path to installed node version'
|
|
'cache:Show cache directory/Clear cache'
|
|
'set-colors:Set five text colors using format "yMeBg"'
|
|
)
|
|
|
|
_describe -t commands 'command' commands "$@"
|
|
}
|
|
|
|
__nvm_aliases() {
|
|
local aliases
|
|
if [[ -d $NVM_DIR/alias ]]; then
|
|
aliases=$(echo $NVM_DIR/alias/*(:t))
|
|
fi
|
|
echo "$aliases"
|
|
}
|
|
|
|
__nvm_versions() {
|
|
# nvm ls-remote is slow
|
|
if [[ ${#__nvm_node_version_cache[@]} == 0 ]]; then
|
|
__nvm_node_version_cache=(${(@f)"$(nvm ls-remote --no-colors | awk '{print $1}')"})
|
|
fi
|
|
|
|
_describe -t versions 'version' __nvm_node_version_cache "$@"
|
|
}
|
|
|
|
__nvm_installed_versions() {
|
|
local -a versions
|
|
|
|
if (( $+functions[nvm_ls] )); then
|
|
versions=(${(f)"$(nvm_ls)"})
|
|
fi
|
|
|
|
versions=($versions $(__nvm_aliases))
|
|
_describe -t versions 'version' versions "$@"
|
|
}
|
|
|
|
__nvm_cache_subcommands() {
|
|
local -a commands=(
|
|
'dir:Display path to the cache directory for nvm'
|
|
'clear:Empty cache directory for nvm'
|
|
)
|
|
_describe -t commands 'command' commands "$@"
|
|
}
|
|
|
|
__nvm "$@"
|
|
|
|
# Local Variables:
|
|
# mode: Shell-Script
|
|
# sh-indentation: 2
|
|
# indent-tabs-mode: nil
|
|
# sh-basic-offset: 2
|
|
# End:
|
|
# vim: ft=zsh sw=2 ts=2 et
|