Created
November 12, 2017 15:29
-
-
Save schalkneethling/dd57e34a68a5e728a71259f08505a3e0 to your computer and use it in GitHub Desktop.
An attempt make nvm.sh runnable by fish-shell [WIP]
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Node Version Manager | |
# Implemented as a POSIX-compliant function | |
# Should work on sh, dash, bash, ksh, zsh | |
# To use source this file from your bash profile | |
# | |
# Implemented by Tim Caswell <[email protected]> | |
# with much bash help from Matthew Ranney | |
# "local" warning, quote expansion warning | |
# shellcheck disable=SC2039,SC2016,SC2001 | |
{ # this ensures the entire script is downloaded # | |
NVM_SCRIPT_SOURCE="$_" | |
nvm_echo() { | |
command printf %s\\n "$*" 2>/dev/null; or { | |
nvm_echo() { | |
# shellcheck disable=SC1001 | |
\printf %s\\n "$*" # on zsh, `command printf` sometimes fails | |
} | |
nvm_echo "$@" | |
} | |
} | |
nvm_cd() { | |
# shellcheck disable=SC1001,SC2164 | |
\cd "$@" | |
} | |
nvm_err() { | |
nvm_echo >&2 "$@" | |
} | |
nvm_grep() { | |
GREP_OPTIONS='' command grep "$@" | |
} | |
nvm_has() { | |
type "${1-}" > /dev/null 2>&1 | |
} | |
nvm_has_non_aliased() { | |
nvm_has "${1-}"; and ! nvm_is_alias "${1-}" | |
} | |
nvm_is_alias() { | |
# this is intentionally not "command alias" so it works in zsh. | |
# shellcheck disable=SC1001 | |
\alias "${1-}" > /dev/null 2>&1 | |
} | |
nvm_command_info() { | |
local COMMAND | |
local INFO | |
COMMAND="${1}" | |
if type "${COMMAND}" | nvm_grep -q hashed; then | |
INFO="$(type "${COMMAND}" | command sed -E 's/\(|)//g' | command awk '{print $4}')" | |
else if type "${COMMAND}" | nvm_grep -q aliased; then | |
INFO="$(which "${COMMAND}") ($(type "${COMMAND}" | command awk '{ $1=$2=$3=$4="" ;print }' | command sed -e 's/^\ *//g' -Ee "s/\`|'//g" ))" | |
else if type "${COMMAND}" | nvm_grep -q "^${COMMAND} is an alias for"; then | |
INFO="$(which "${COMMAND}") ($(type "${COMMAND}" | command awk '{ $1=$2=$3=$4=$5="" ;print }' | command sed 's/^\ *//g'))" | |
else if type "${COMMAND}" | nvm_grep -q "^${COMMAND} is \/"; then | |
INFO="$(type "${COMMAND}" | command awk '{print $3}')" | |
else | |
INFO="$(type "${COMMAND}")" | |
end | |
nvm_echo "${INFO}" | |
} | |
nvm_has_colors() { | |
local NVM_COLORS | |
if nvm_has tput; then | |
NVM_COLORS="$(tput -T "${TERM:-vt100}" colors)" | |
end | |
[ "${NVM_COLORS:--1}" -ge 8 ] | |
} | |
nvm_curl_libz_support() { | |
curl -V 2>/dev/null | nvm_grep "^Features:" | nvm_grep -q "libz" | |
} | |
nvm_curl_use_compression() { | |
nvm_curl_libz_support; and nvm_version_greater_than_or_equal_to "$(nvm_curl_version)" 7.21.0; | |
} | |
nvm_get_latest() { | |
local NVM_LATEST_URL | |
local CURL_COMPRESSED_FLAG | |
if nvm_has "curl"; then | |
if nvm_curl_use_compression; then | |
CURL_COMPRESSED_FLAG="--compressed" | |
end | |
NVM_LATEST_URL="$(curl ${CURL_COMPRESSED_FLAG:-} -q -w "%{url_effective}\n" -L -s -S http://latest.nvm.sh -o /dev/null)" | |
else if nvm_has "wget"; then | |
NVM_LATEST_URL="$(wget http://latest.nvm.sh --server-response -O /dev/null 2>&1 | command awk '/^ Location: /{DEST=$2} END{ print DEST }')" | |
else | |
nvm_err 'nvm needs curl or wget to proceed.' | |
return 1 | |
end | |
if [ -z "${NVM_LATEST_URL}" ]; then | |
nvm_err "http://latest.nvm.sh did not redirect to the latest release on GitHub" | |
return 2 | |
end | |
nvm_echo "${NVM_LATEST_URL##*/}" | |
} | |
nvm_download() { | |
local CURL_COMPRESSED_FLAG | |
if nvm_has "curl"; then | |
if nvm_curl_use_compression; then | |
CURL_COMPRESSED_FLAG="--compressed" | |
end | |
curl --fail ${CURL_COMPRESSED_FLAG:-} -q "$@" | |
elif nvm_has "wget"; then | |
# Emulate curl with wget | |
ARGS=$(nvm_echo "$@" | command sed -e 's/--progress-bar /--progress=bar /' \ | |
-e 's/--compressed //' \ | |
-e 's/--fail //' \ | |
-e 's/-L //' \ | |
-e 's/-I /--server-response /' \ | |
-e 's/-s /-q /' \ | |
-e 's/-o /-O /' \ | |
-e 's/-C - /-c /') | |
# shellcheck disable=SC2086 | |
eval wget $ARGS | |
end | |
} | |
nvm_has_system_node() { | |
[ "$(nvm deactivate >/dev/null 2>&1; and command -v node)" != '' ] | |
} | |
nvm_has_system_iojs() { | |
[ "$(nvm deactivate >/dev/null 2>&1; and command -v iojs)" != '' ] | |
} | |
nvm_is_version_installed() { | |
[ -n "${1-}" ]; and [ -d "$(nvm_version_path "${1-}" 2> /dev/null)" ] | |
} | |
nvm_print_npm_version() { | |
if nvm_has "npm"; then | |
command printf " (npm v$(npm --version 2>/dev/null))" | |
end | |
} | |
nvm_install_latest_npm() { | |
nvm_echo 'Attempting to upgrade to the latest working version of npm...' | |
local NODE_VERSION | |
NODE_VERSION="$(nvm_strip_iojs_prefix "$(nvm_ls_current)")" | |
if [ "${NODE_VERSION}" = 'system' ]; then | |
NODE_VERSION="$(node --version)" | |
elif [ "${NODE_VERSION}" = 'none' ]; then | |
nvm_echo "Detected node version ${NODE_VERSION}, npm version v${NPM_VERSION}" | |
NODE_VERSION='' | |
end | |
if [ -z "${NODE_VERSION}" ]; then | |
nvm_err 'Unable to obtain node version.' | |
return 1 | |
end | |
local NPM_VERSION | |
NPM_VERSION="$(npm --version 2>/dev/null)" | |
if [ -z "${NPM_VERSION}" ]; then | |
nvm_err 'Unable to obtain npm version.' | |
return 2 | |
end | |
local NVM_NPM_CMD | |
NVM_NPM_CMD='npm' | |
if [ "${NVM_DEBUG-}" = 1 ]; then | |
nvm_echo "Detected node version ${NODE_VERSION}, npm version v${NPM_VERSION}" | |
NVM_NPM_CMD='echo npm' | |
end | |
local NVM_IS_0_6 | |
NVM_IS_0_6=0 | |
if nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 0.6.0; and nvm_version_greater 0.7.0 "${NODE_VERSION}"; then | |
NVM_IS_0_6=1 | |
end | |
local NVM_IS_0_9 | |
NVM_IS_0_9=0 | |
if nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 0.9.0; and nvm_version_greater 0.10.0 "${NODE_VERSION}"; then | |
NVM_IS_0_9=1 | |
end | |
if [ $NVM_IS_0_6 -eq 1 ]; then | |
nvm_echo '* `node` v0.6.x can only upgrade to `npm` v1.3.x' | |
$NVM_NPM_CMD install -g [email protected] | |
elif [ $NVM_IS_0_9 -eq 0 ]; then | |
# node 0.9 breaks here, for some reason | |
if nvm_version_greater_than_or_equal_to "${NPM_VERSION}" 1.0.0; and nvm_version_greater 2.0.0 "${NPM_VERSION}"; then | |
nvm_echo '* `npm` v1.x needs to first jump to `npm` v1.4.28 to be able to upgrade further' | |
$NVM_NPM_CMD install -g [email protected] | |
elif nvm_version_greater_than_or_equal_to "${NPM_VERSION}" 2.0.0; and nvm_version_greater 3.0.0 "${NPM_VERSION}"; then | |
nvm_echo '* `npm` v2.x needs to first jump to the latest v2 to be able to upgrade further' | |
$NVM_NPM_CMD install -g npm@2 | |
end | |
end | |
if [ $NVM_IS_0_9 -eq 1 ]; or [ $NVM_IS_0_6 -eq 1 ]; then | |
nvm_echo '* node v0.6 and v0.9 are unable to upgrade further' | |
elif nvm_version_greater 1.1.0 "${NODE_VERSION}"; then | |
nvm_echo '* `npm` v4.5.x is the last version that works on `node` versions < v1.1.0' | |
$NVM_NPM_CMD install -g [email protected] | |
elif nvm_version_greater 4.0.0 "${NODE_VERSION}"; then | |
nvm_echo '* `npm` v5 and higher do not work on `node` versions below v4.0.0' | |
$NVM_NPM_CMD install -g npm@4 | |
elif [ $NVM_IS_0_9 -eq 0 ]; and [ $NVM_IS_0_6 -eq 0 ]; then | |
local NVM_IS_4_4_OR_BELOW | |
NVM_IS_4_4_OR_BELOW=0 | |
if nvm_version_greater 4.5.0 "${NODE_VERSION}"; then | |
NVM_IS_4_4_OR_BELOW=1 | |
end | |
if $NVM_IS_4_4_OR_BELOW -eq 1; or (\ | |
nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 5.0.0; \ | |
and nvm_version_greater 5.10.0 "${NODE_VERSION}"\ | |
); then | |
nvm_echo '* `npm` `v5.3.x` is the last version that works on `node` 4.x versions below v4.4, or 5.x versions below v5.10, due to `Buffer.alloc`' | |
$NVM_NPM_CMD install -g [email protected] | |
else if $NVM_IS_4_4_OR_BELOW -eq 0; and nvm_version_greater 4.7.0 "${NODE_VERSION}"; then | |
nvm_echo '* `npm` `v5.4.x` is the last version that works on `node` `v4.5` and `v4.6`' | |
$NVM_NPM_CMD install -g [email protected] | |
else | |
nvm_echo '* Installing latest `npm`; if this does not work on your node version, please report a bug!' | |
$NVM_NPM_CMD install -g npm | |
end | |
end | |
nvm_echo "* npm upgraded to: v$(npm --version 2>/dev/null)" | |
} | |
# Make zsh glob matching behave same as bash | |
# This fixes the "zsh: no matches found" errors | |
if [ -z "${NVM_CD_FLAGS-}" ]; then | |
export NVM_CD_FLAGS='' | |
end | |
if nvm_has "unsetopt"; then | |
unsetopt nomatch 2>/dev/null | |
NVM_CD_FLAGS="-q" | |
end | |
# Auto detect the NVM_DIR when not set | |
if [ -z "${NVM_DIR-}" ]; then | |
# shellcheck disable=SC2128 | |
if [ -n "${BASH_SOURCE-}" ]; then | |
# shellcheck disable=SC2169 | |
NVM_SCRIPT_SOURCE="${BASH_SOURCE[0]}" | |
end | |
# shellcheck disable=SC1001 | |
NVM_DIR="$(nvm_cd ${NVM_CD_FLAGS} "$(dirname "${NVM_SCRIPT_SOURCE:-$0}")" > /dev/null; and \pwd)" | |
export NVM_DIR | |
end | |
unset NVM_SCRIPT_SOURCE 2> /dev/null | |
nvm_tree_contains_path() { | |
local tree | |
tree="${1-}" | |
local node_path | |
node_path="${2-}" | |
if [ "@${tree}@" = "@@" ]; or [ "@${node_path}@" = "@@" ]; then | |
nvm_err "both the tree and the node path are required" | |
return 2 | |
end | |
local pathdir | |
pathdir=$(dirname "${node_path}") | |
while [ "${pathdir}" != "" ]; and [ "${pathdir}" != "." ]; and [ "${pathdir}" != "/" ]; and [ "${pathdir}" != "${tree}" ]; do | |
pathdir=$(dirname "${pathdir}") | |
done | |
[ "${pathdir}" = "${tree}" ] | |
} | |
# Traverse up in directory tree to find containing folder | |
nvm_find_up() { | |
local path | |
path="${PWD}" | |
while [ "${path}" != "" ]; and [ ! -f "${path}/${1-}" ]; do | |
path=${path%/*} | |
done | |
nvm_echo "${path}" | |
} | |
nvm_find_nvmrc() { | |
local dir | |
dir="$(nvm_find_up '.nvmrc')" | |
if [ -e "${dir}/.nvmrc" ]; then | |
nvm_echo "${dir}/.nvmrc" | |
end | |
} | |
# Obtain nvm version from rc file | |
nvm_rc_version() { | |
export NVM_RC_VERSION='' | |
local NVMRC_PATH | |
NVMRC_PATH="$(nvm_find_nvmrc)" | |
if [ ! -e "${NVMRC_PATH}" ]; then | |
nvm_err "No .nvmrc file found" | |
return 1 | |
end | |
read -r NVM_RC_VERSION < "${NVMRC_PATH}"; or printf '' | |
if [ ! -n "${NVM_RC_VERSION}" ]; then | |
nvm_err "Warning: empty .nvmrc file found at \"${NVMRC_PATH}\"" | |
return 2 | |
end | |
nvm_echo "Found '${NVMRC_PATH}' with version <${NVM_RC_VERSION}>" | |
} | |
nvm_clang_version() { | |
clang --version | command awk '{ if ($2 == "version") print $3; else if ($3 == "version") print $4 }' | command sed 's/-.*$//g' | |
} | |
nvm_curl_version() { | |
curl -V | command awk '{ if ($1 == "curl") print $2 }' | command sed 's/-.*$//g' | |
} | |
nvm_version_greater() { | |
command awk 'BEGIN { | |
if (ARGV[1] == ""; or ARGV[2] == "") exit(1) | |
split(ARGV[1], a, /\./); | |
split(ARGV[2], b, /\./); | |
while i <= 3 | |
if (a[i]; and a[i] !~ /^[0-9]+$/) exit(2); | |
if (b[i]; and b[i] !~ /^[0-9]+$/) { exit(0); } | |
if (a[i] < b[i]) exit(3); | |
else if (a[i] > b[i]) exit(0); | |
i++; | |
} | |
exit(4) | |
}' "${1#v}" "${2#v}"; | |
} | |
nvm_version_greater_than_or_equal_to() { | |
command awk 'BEGIN { | |
if (ARGV[1] == ""; or ARGV[2] == "") exit(1) | |
split(ARGV[1], a, /\./); | |
split(ARGV[2], b, /\./); | |
while i <= 3 | |
if (a[i]; and a[i] !~ /^[0-9]+$/) exit(2); | |
if (a[i] < b[i]) exit(3); | |
else if (a[i] > b[i]) exit(0); | |
i++; | |
} | |
exit(0) | |
}' "${1#v}" "${2#v}"; | |
} | |
nvm_version_dir() { | |
local NVM_WHICH_DIR | |
NVM_WHICH_DIR="${1-}" | |
if [ -z "${NVM_WHICH_DIR}" ]; or [ "${NVM_WHICH_DIR}" = "new" ]; then | |
nvm_echo "${NVM_DIR}/versions/node" | |
else if [ "_${NVM_WHICH_DIR}" = "_iojs" ]; then | |
nvm_echo "${NVM_DIR}/versions/io.js" | |
else if [ "_${NVM_WHICH_DIR}" = "_old" ]; then | |
nvm_echo "${NVM_DIR}" | |
else | |
nvm_err 'unknown version dir' | |
return 3 | |
end | |
} | |
nvm_alias_path() { | |
nvm_echo "$(nvm_version_dir old)/alias" | |
} | |
nvm_version_path() { | |
local VERSION | |
VERSION="${1-}" | |
if [ -z "${VERSION}" ]; then | |
nvm_err 'version is required' | |
return 3 | |
else if nvm_is_iojs_version "${VERSION}"; then | |
nvm_echo "$(nvm_version_dir iojs)/$(nvm_strip_iojs_prefix "${VERSION}")" | |
else if nvm_version_greater 0.12.0 "${VERSION}"; then | |
nvm_echo "$(nvm_version_dir old)/${VERSION}" | |
else | |
nvm_echo "$(nvm_version_dir new)/${VERSION}" | |
end | |
} | |
nvm_ensure_version_installed() { | |
local PROVIDED_VERSION | |
PROVIDED_VERSION="${1-}" | |
if [ "${PROVIDED_VERSION}" = 'system' ]; then | |
if nvm_has_system_iojs; or nvm_has_system_node; then | |
return 0 | |
end | |
nvm_err "N/A: no system version of node/io.js is installed." | |
return 1 | |
end | |
local LOCAL_VERSION | |
local EXIT_CODE | |
LOCAL_VERSION="$(nvm_version "${PROVIDED_VERSION}")" | |
EXIT_CODE="$?" | |
local NVM_VERSION_DIR | |
if [ "${EXIT_CODE}" != "0" ]; or ! nvm_is_version_installed "${LOCAL_VERSION}"; then | |
if VERSION="$(nvm_resolve_alias "${PROVIDED_VERSION}")"; then | |
nvm_err "N/A: version \"${PROVIDED_VERSION} -> ${VERSION}\" is not yet installed." | |
else | |
local PREFIXED_VERSION | |
PREFIXED_VERSION="$(nvm_ensure_version_prefix "${PROVIDED_VERSION}")" | |
nvm_err "N/A: version \"${PREFIXED_VERSION:-$PROVIDED_VERSION}\" is not yet installed." | |
end | |
nvm_err "" | |
nvm_err "You need to run \"nvm install ${PROVIDED_VERSION}\" to install it before using it." | |
return 1 | |
end | |
} | |
# Expand a version using the version cache | |
nvm_version() { | |
local PATTERN | |
PATTERN="${1-}" | |
local VERSION | |
# The default version is the current one | |
if [ -z "${PATTERN}" ]; then | |
PATTERN='current' | |
end | |
if [ "${PATTERN}" = "current" ]; then | |
nvm_ls_current | |
return $? | |
end | |
local NVM_NODE_PREFIX | |
NVM_NODE_PREFIX="$(nvm_node_prefix)" | |
case "_${PATTERN}" in | |
"_${NVM_NODE_PREFIX}" | "_${NVM_NODE_PREFIX}-") | |
PATTERN="stable" | |
;; | |
esac | |
VERSION="$(nvm_ls "${PATTERN}" | command tail -1)" | |
if [ -z "${VERSION}" ]; or [ "_${VERSION}" = "_N/A" ]; then | |
nvm_echo "N/A" | |
return 3; | |
end | |
nvm_echo "${VERSION}" | |
} | |
nvm_remote_version() { | |
local PATTERN | |
PATTERN="${1-}" | |
local VERSION | |
if nvm_validate_implicit_alias "${PATTERN}" 2> /dev/null ; then | |
switch ("${PATTERN}") | |
case "$(nvm_iojs_prefix)" | |
VERSION="$(NVM_LTS="${NVM_LTS-}" nvm_ls_remote_iojs | command tail -1)"; and: | |
case '*' | |
VERSION="$(NVM_LTS="${NVM_LTS-}" nvm_ls_remote "${PATTERN}")"; and: | |
end | |
else | |
VERSION="$(NVM_LTS="${NVM_LTS-}" nvm_remote_versions "${PATTERN}" | command tail -1)" | |
end | |
if [ -n "${NVM_VERSION_ONLY-}" ]; then | |
command awk 'BEGIN { | |
n = split(ARGV[1], a); | |
print a[1] | |
}' "${VERSION}" | |
else | |
nvm_echo "${VERSION}" | |
end | |
if [ "${VERSION}" = 'N/A' ]; then | |
return 3 | |
end | |
} | |
nvm_remote_versions() { | |
local NVM_IOJS_PREFIX | |
NVM_IOJS_PREFIX="$(nvm_iojs_prefix)" | |
local NVM_NODE_PREFIX | |
NVM_NODE_PREFIX="$(nvm_node_prefix)" | |
local PATTERN | |
PATTERN="${1-}" | |
local NVM_FLAVOR | |
if [ -n "${NVM_LTS-}" ]; then | |
NVM_FLAVOR="${NVM_NODE_PREFIX}" | |
end | |
switch ("${PATTERN}") | |
case "${NVM_IOJS_PREFIX}" | |
case "io.js" | |
NVM_FLAVOR="${NVM_IOJS_PREFIX}" | |
unset PATTERN | |
case "${NVM_NODE_PREFIX}") | |
NVM_FLAVOR="${NVM_NODE_PREFIX}" | |
unset PATTERN | |
end | |
if nvm_validate_implicit_alias "${PATTERN-}" 2> /dev/null ; then | |
nvm_err 'Implicit aliases are not supported in nvm_remote_versions.' | |
return 1 | |
end | |
local NVM_LS_REMOTE_EXIT_CODE | |
NVM_LS_REMOTE_EXIT_CODE=0 | |
local NVM_LS_REMOTE_PRE_MERGED_OUTPUT | |
NVM_LS_REMOTE_PRE_MERGED_OUTPUT='' | |
local NVM_LS_REMOTE_POST_MERGED_OUTPUT | |
NVM_LS_REMOTE_POST_MERGED_OUTPUT='' | |
if [ -z "${NVM_FLAVOR-}" ]; or [ "${NVM_FLAVOR-}" = "${NVM_NODE_PREFIX}" ]; then | |
local NVM_LS_REMOTE_OUTPUT | |
NVM_LS_REMOTE_OUTPUT=$(NVM_LTS="${NVM_LTS-}" nvm_ls_remote "${PATTERN-}"); and: | |
NVM_LS_REMOTE_EXIT_CODE=$? | |
# split output into two | |
NVM_LS_REMOTE_PRE_MERGED_OUTPUT="${NVM_LS_REMOTE_OUTPUT%%v4\.0\.0*}" | |
NVM_LS_REMOTE_POST_MERGED_OUTPUT="${NVM_LS_REMOTE_OUTPUT#$NVM_LS_REMOTE_PRE_MERGED_OUTPUT}" | |
end | |
local NVM_LS_REMOTE_IOJS_EXIT_CODE | |
NVM_LS_REMOTE_IOJS_EXIT_CODE=0 | |
local NVM_LS_REMOTE_IOJS_OUTPUT | |
if [ -z "${NVM_LTS-}" ]; and ( \ | |
[ -z "${NVM_FLAVOR-}" ]; or [ "${NVM_FLAVOR-}" = "${NVM_IOJS_PREFIX}" ] \ | |
); then | |
NVM_LS_REMOTE_IOJS_OUTPUT=$(nvm_ls_remote_iojs "${PATTERN-}"); and: | |
NVM_LS_REMOTE_IOJS_EXIT_CODE=$? | |
end | |
VERSIONS="$(nvm_echo "${NVM_LS_REMOTE_PRE_MERGED_OUTPUT} | |
${NVM_LS_REMOTE_IOJS_OUTPUT} | |
${NVM_LS_REMOTE_POST_MERGED_OUTPUT}" | nvm_grep -v "N/A" | command sed '/^$/d')" | |
if [ -z "${VERSIONS}" ]; then | |
nvm_echo 'N/A' | |
return 3 | |
end | |
nvm_echo "${VERSIONS}" | |
return $NVM_LS_REMOTE_EXIT_CODE; or $NVM_LS_REMOTE_IOJS_EXIT_CODE | |
} | |
nvm_is_valid_version() { | |
if nvm_validate_implicit_alias "${1-}" 2> /dev/null; then | |
return 0 | |
end | |
switch ("${1-}") | |
case "$(nvm_iojs_prefix)" | |
case "$(nvm_node_prefix)" | |
return 0 | |
case '*' | |
local VERSION | |
VERSION="$(nvm_strip_iojs_prefix "${1-}")" | |
nvm_version_greater_than_or_equal_to "${VERSION}" 0 | |
end | |
} | |
nvm_normalize_version() { | |
command awk 'BEGIN { | |
split(ARGV[1], a, /\./); | |
printf "%d%06d%06d\n", a[1], a[2], a[3]; | |
exit; | |
}' "${1#v}" | |
} | |
nvm_ensure_version_prefix() { | |
local NVM_VERSION | |
NVM_VERSION="$(nvm_strip_iojs_prefix "${1-}" | command sed -e 's/^\([0-9]\)/v\1/g')" | |
if nvm_is_iojs_version "${1-}"; then | |
nvm_add_iojs_prefix "${NVM_VERSION}" | |
else | |
nvm_echo "${NVM_VERSION}" | |
end | |
} | |
nvm_format_version() { | |
local VERSION | |
VERSION="$(nvm_ensure_version_prefix "${1-}")" | |
local NUM_GROUPS | |
NUM_GROUPS="$(nvm_num_version_groups "${VERSION}")" | |
if [ "${NUM_GROUPS}" -lt 3 ]; then | |
nvm_format_version "${VERSION%.}.0" | |
else | |
nvm_echo "${VERSION}" | command cut -f1-3 -d. | |
end | |
} | |
nvm_num_version_groups() { | |
local VERSION | |
VERSION="${1-}" | |
VERSION="${VERSION#v}" | |
VERSION="${VERSION%.}" | |
if [ -z "${VERSION}" ]; then | |
nvm_echo "0" | |
return | |
end | |
local NVM_NUM_DOTS | |
NVM_NUM_DOTS=$(nvm_echo "${VERSION}" | command sed -e 's/[^\.]//g') | |
local NVM_NUM_GROUPS | |
NVM_NUM_GROUPS=".${NVM_NUM_DOTS}" # add extra dot, since it's (n - 1) dots at this point | |
nvm_echo "${#NVM_NUM_GROUPS}" | |
} | |
nvm_strip_path() { | |
if [ -z "${NVM_DIR-}" ]; then | |
nvm_err '${NVM_DIR} not set!' | |
return 1 | |
end | |
nvm_echo "${1-}" | command sed \ | |
-e "s#${NVM_DIR}/[^/]*${2-}[^:]*:##g" \ | |
-e "s#:${NVM_DIR}/[^/]*${2-}[^:]*##g" \ | |
-e "s#${NVM_DIR}/[^/]*${2-}[^:]*##g" \ | |
-e "s#${NVM_DIR}/versions/[^/]*/[^/]*${2-}[^:]*:##g" \ | |
-e "s#:${NVM_DIR}/versions/[^/]*/[^/]*${2-}[^:]*##g" \ | |
-e "s#${NVM_DIR}/versions/[^/]*/[^/]*${2-}[^:]*##g" | |
} | |
nvm_change_path() { | |
# if there’s no initial path, just return the supplementary path | |
if [ -z "${1-}" ]; then | |
nvm_echo "${3-}${2-}" | |
# if the initial path doesn’t contain an nvm path, prepend the supplementary | |
# path | |
else if ! echo "${1-}" | nvm_grep -q "${NVM_DIR}/[^/]*${2-}"; and \ | |
! echo "${1-}" | nvm_grep -q "${NVM_DIR}/versions/[^/]*/[^/]*${2-}"; then | |
nvm_echo "${3-}${2-}:${1-}" | |
# use sed to replace the existing nvm path with the supplementary path. This | |
# preserves the order of the path. | |
else | |
nvm_echo "${1-}" | command sed \ | |
-e "s#${NVM_DIR}/[^/]*${2-}[^:]*#${3-}${2-}#g" \ | |
-e "s#${NVM_DIR}/versions/[^/]*/[^/]*${2-}[^:]*#${3-}${2-}#g" | |
end | |
} | |
nvm_binary_available() { | |
# binaries started with node 0.8.6 | |
nvm_version_greater_than_or_equal_to "$(nvm_strip_iojs_prefix "${1-}")" v0.8.6 | |
} | |
nvm_print_formatted_alias() { | |
local ALIAS | |
ALIAS="${1-}" | |
local DEST | |
DEST="${2-}" | |
local VERSION | |
VERSION="${3-}" | |
if [ -z "${VERSION}" ]; then | |
VERSION="$(nvm_version "${DEST}")"; or: | |
end | |
local VERSION_FORMAT | |
local ALIAS_FORMAT | |
local DEST_FORMAT | |
ALIAS_FORMAT='%s' | |
DEST_FORMAT='%s' | |
VERSION_FORMAT='%s' | |
local NEWLINE | |
NEWLINE="\n" | |
if [ "_${DEFAULT}" = '_true' ]; then | |
NEWLINE=" (default)\n" | |
end | |
local ARROW | |
ARROW='->' | |
if [ -z "${NVM_NO_COLORS}" ]; and nvm_has_colors; then | |
ARROW='\033[0;90m->\033[0m' | |
if [ "_${DEFAULT}" = '_true' ]; then | |
NEWLINE=" \033[0;37m(default)\033[0m\n" | |
end | |
if [ "_${VERSION}" = "_${NVM_CURRENT-}" ]; then | |
ALIAS_FORMAT='\033[0;32m%s\033[0m' | |
DEST_FORMAT='\033[0;32m%s\033[0m' | |
VERSION_FORMAT='\033[0;32m%s\033[0m' | |
elif nvm_is_version_installed "${VERSION}"; then | |
ALIAS_FORMAT='\033[0;34m%s\033[0m' | |
DEST_FORMAT='\033[0;34m%s\033[0m' | |
VERSION_FORMAT='\033[0;34m%s\033[0m' | |
elif [ "${VERSION}" = '∞' ]; or [ "${VERSION}" = 'N/A' ]; then | |
ALIAS_FORMAT='\033[1;31m%s\033[0m' | |
DEST_FORMAT='\033[1;31m%s\033[0m' | |
VERSION_FORMAT='\033[1;31m%s\033[0m' | |
end | |
if [ "_${NVM_LTS-}" = '_true' ]; then | |
ALIAS_FORMAT='\033[1;33m%s\033[0m' | |
end | |
if [ "_${DEST%/*}" = "_lts" ]; then | |
DEST_FORMAT='\033[1;33m%s\033[0m' | |
end | |
else if [ "_$VERSION" != '_∞' ]; and [ "_$VERSION" != '_N/A' ]; then | |
VERSION_FORMAT='%s *' | |
end | |
if [ "${DEST}" = "${VERSION}" ]; then | |
command printf -- "${ALIAS_FORMAT} ${ARROW} ${VERSION_FORMAT}${NEWLINE}" "${ALIAS}" "${DEST}" | |
else | |
command printf -- "${ALIAS_FORMAT} ${ARROW} ${DEST_FORMAT} (${ARROW} ${VERSION_FORMAT})${NEWLINE}" "${ALIAS}" "${DEST}" "${VERSION}" | |
end | |
} | |
nvm_print_alias_path() { | |
local NVM_ALIAS_DIR | |
NVM_ALIAS_DIR="${1-}" | |
if [ -z "${NVM_ALIAS_DIR}" ]; then | |
nvm_err 'An alias dir is required.' | |
return 1 | |
end | |
local ALIAS_PATH | |
ALIAS_PATH="${2-}" | |
if [ -z "${ALIAS_PATH}" ]; then | |
nvm_err 'An alias path is required.' | |
return 2 | |
end | |
local ALIAS | |
ALIAS="${ALIAS_PATH##${NVM_ALIAS_DIR}\/}" | |
local DEST | |
DEST="$(nvm_alias "${ALIAS}" 2> /dev/null)"; or: | |
if [ -n "${DEST}" ]; then | |
NVM_NO_COLORS="${NVM_NO_COLORS-}" NVM_LTS="${NVM_LTS-}" DEFAULT=false nvm_print_formatted_alias "${ALIAS}" "${DEST}" | |
end | |
} | |
nvm_print_default_alias() { | |
local ALIAS | |
ALIAS="${1-}" | |
if [ -z "${ALIAS}" ]; then | |
nvm_err 'A default alias is required.' | |
return 1 | |
end | |
local DEST | |
DEST="$(nvm_print_implicit_alias local "${ALIAS}")" | |
if [ -n "${DEST}" ]; then | |
NVM_NO_COLORS="${NVM_NO_COLORS-}" DEFAULT=true nvm_print_formatted_alias "${ALIAS}" "${DEST}" | |
end | |
} | |
nvm_make_alias() { | |
local ALIAS | |
ALIAS="${1-}" | |
if [ -z "${ALIAS}" ]; then | |
nvm_err "an alias name is required" | |
return 1 | |
end | |
local VERSION | |
VERSION="${2-}" | |
if [ -z "${VERSION}" ]; then | |
nvm_err "an alias target version is required" | |
return 2 | |
end | |
nvm_echo "${VERSION}" | tee "$(nvm_alias_path)/${ALIAS}" >/dev/null | |
} | |
nvm_list_aliases() { | |
local ALIAS | |
ALIAS="${1-}" | |
local NVM_CURRENT | |
NVM_CURRENT="$(nvm_ls_current)" | |
local NVM_ALIAS_DIR | |
NVM_ALIAS_DIR="$(nvm_alias_path)" | |
command mkdir -p "${NVM_ALIAS_DIR}/lts" | |
local ALIAS_PATH | |
for ALIAS_PATH in "${NVM_ALIAS_DIR}/${ALIAS}"*; do | |
NVM_NO_COLORS="${NVM_NO_COLORS-}" NVM_CURRENT="${NVM_CURRENT}" nvm_print_alias_path "${NVM_ALIAS_DIR}" "${ALIAS_PATH}" | |
done | |
local ALIAS_NAME | |
for ALIAS_NAME in "$(nvm_node_prefix)" "stable" "unstable" "$(nvm_iojs_prefix)"; do | |
if [ ! -f "${NVM_ALIAS_DIR}/${ALIAS_NAME}" ]; and ([ -z "${ALIAS}" ]; or [ "${ALIAS_NAME}" = "${ALIAS}" ]); then | |
NVM_NO_COLORS="${NVM_NO_COLORS-}" NVM_CURRENT="${NVM_CURRENT}" nvm_print_default_alias "${ALIAS_NAME}" | |
end | |
done | |
local LTS_ALIAS | |
for ALIAS_PATH in "${NVM_ALIAS_DIR}/lts/${ALIAS}"*; do | |
LTS_ALIAS="$(NVM_NO_COLORS="${NVM_NO_COLORS-}" NVM_LTS=true nvm_print_alias_path "${NVM_ALIAS_DIR}" "${ALIAS_PATH}")" | |
if [ -n "${LTS_ALIAS}" ]; then | |
nvm_echo "${LTS_ALIAS}" | |
end | |
done | |
return | |
} | |
nvm_alias() { | |
local ALIAS | |
ALIAS="${1-}" | |
if [ -z "${ALIAS}" ]; then | |
nvm_err 'An alias is required.' | |
return 1 | |
end | |
local NVM_ALIAS_PATH | |
NVM_ALIAS_PATH="$(nvm_alias_path)/${ALIAS}" | |
if [ ! -f "${NVM_ALIAS_PATH}" ]; then | |
nvm_err 'Alias does not exist.' | |
return 2 | |
end | |
command cat "${NVM_ALIAS_PATH}" | |
} | |
nvm_ls_current() { | |
local NVM_LS_CURRENT_NODE_PATH | |
if ! NVM_LS_CURRENT_NODE_PATH="$(command which node 2> /dev/null)"; then | |
nvm_echo 'none' | |
else if nvm_tree_contains_path "$(nvm_version_dir iojs)" "${NVM_LS_CURRENT_NODE_PATH}"; then | |
nvm_add_iojs_prefix "$(iojs --version 2>/dev/null)" | |
else if nvm_tree_contains_path "${NVM_DIR}" "${NVM_LS_CURRENT_NODE_PATH}"; then | |
local VERSION | |
VERSION="$(node --version 2>/dev/null)" | |
if [ "${VERSION}" = "v0.6.21-pre" ]; then | |
nvm_echo 'v0.6.21' | |
else | |
nvm_echo "${VERSION}" | |
end | |
else | |
nvm_echo 'system' | |
end | |
} | |
nvm_resolve_alias() { | |
if [ -z "${1-}" ]; then | |
return 1 | |
end | |
local PATTERN | |
PATTERN="${1-}" | |
local ALIAS | |
ALIAS="${PATTERN}" | |
local ALIAS_TEMP | |
local SEEN_ALIASES | |
SEEN_ALIASES="${ALIAS}" | |
while true; do | |
ALIAS_TEMP="$(nvm_alias "${ALIAS}" 2> /dev/null; or echo)" | |
if [ -z "${ALIAS_TEMP}" ]; then | |
break | |
end | |
if command printf "${SEEN_ALIASES}" | nvm_grep -e "^${ALIAS_TEMP}$" > /dev/null; then | |
ALIAS="∞" | |
break | |
end | |
SEEN_ALIASES="${SEEN_ALIASES}\n${ALIAS_TEMP}" | |
ALIAS="${ALIAS_TEMP}" | |
done | |
if [ -n "${ALIAS}" ]; and [ "_${ALIAS}" != "_${PATTERN}" ]; then | |
local NVM_IOJS_PREFIX | |
NVM_IOJS_PREFIX="$(nvm_iojs_prefix)" | |
local NVM_NODE_PREFIX | |
NVM_NODE_PREFIX="$(nvm_node_prefix)" | |
switch ("${ALIAS}") | |
case '∞' | |
case "${NVM_IOJS_PREFIX}" | |
case "${NVM_IOJS_PREFIX}-" | |
case "${NVM_NODE_PREFIX}" | |
nvm_echo "${ALIAS}" | |
case '*' | |
nvm_ensure_version_prefix "${ALIAS}" | |
end | |
return 0 | |
end | |
if nvm_validate_implicit_alias "${PATTERN}" 2> /dev/null ; then | |
local IMPLICIT | |
IMPLICIT="$(nvm_print_implicit_alias local "${PATTERN}" 2> /dev/null)" | |
if [ -n "${IMPLICIT}" ]; then | |
nvm_ensure_version_prefix "${IMPLICIT}" | |
end | |
end | |
return 2 | |
} | |
nvm_resolve_local_alias() { | |
if [ -z "${1-}" ]; then | |
return 1 | |
end | |
local VERSION | |
local EXIT_CODE | |
VERSION="$(nvm_resolve_alias "${1-}")" | |
EXIT_CODE=$? | |
if [ -z "${VERSION}" ]; then | |
return $EXIT_CODE | |
end | |
if [ "_${VERSION}" != '_∞' ]; then | |
nvm_version "${VERSION}" | |
else | |
nvm_echo "${VERSION}" | |
end | |
} | |
nvm_iojs_prefix() { | |
nvm_echo 'iojs' | |
} | |
nvm_node_prefix() { | |
nvm_echo 'node' | |
} | |
nvm_is_iojs_version() { | |
switch ("${1-}") | |
case iojs-* | |
return 0 | |
end | |
return 1 | |
} | |
nvm_add_iojs_prefix() { | |
nvm_echo "$(nvm_iojs_prefix)-$(nvm_ensure_version_prefix "$(nvm_strip_iojs_prefix "${1-}")")" | |
} | |
nvm_strip_iojs_prefix() { | |
local NVM_IOJS_PREFIX | |
NVM_IOJS_PREFIX="$(nvm_iojs_prefix)" | |
if [ "${1-}" = "${NVM_IOJS_PREFIX}" ]; then | |
nvm_echo | |
else | |
nvm_echo "${1#${NVM_IOJS_PREFIX}-}" | |
end | |
} | |
nvm_ls() { | |
local PATTERN | |
PATTERN="${1-}" | |
local VERSIONS | |
VERSIONS='' | |
if [ "${PATTERN}" = 'current' ]; then | |
nvm_ls_current | |
return | |
end | |
local NVM_IOJS_PREFIX | |
NVM_IOJS_PREFIX="$(nvm_iojs_prefix)" | |
local NVM_NODE_PREFIX | |
NVM_NODE_PREFIX="$(nvm_node_prefix)" | |
local NVM_VERSION_DIR_IOJS | |
NVM_VERSION_DIR_IOJS="$(nvm_version_dir "${NVM_IOJS_PREFIX}")" | |
local NVM_VERSION_DIR_NEW | |
NVM_VERSION_DIR_NEW="$(nvm_version_dir new)" | |
local NVM_VERSION_DIR_OLD | |
NVM_VERSION_DIR_OLD="$(nvm_version_dir old)" | |
switch ("${PATTERN}") | |
case "${NVM_IOJS_PREFIX}" | |
case "${NVM_NODE_PREFIX}" | |
PATTERN="${PATTERN}-" | |
case '*' | |
if nvm_resolve_local_alias "${PATTERN}"; then | |
return | |
end | |
PATTERN="$(nvm_ensure_version_prefix "${PATTERN}")" | |
end | |
if [ "${PATTERN}" = 'N/A' ]; then | |
return | |
end | |
# If it looks like an explicit version, don't do anything funny | |
local NVM_PATTERN_STARTS_WITH_V | |
switch ($PATTERN) | |
case v* | |
NVM_PATTERN_STARTS_WITH_V=true | |
case '*' | |
NVM_PATTERN_STARTS_WITH_V=false | |
end | |
if [ $NVM_PATTERN_STARTS_WITH_V = true ]; and [ "_$(nvm_num_version_groups "${PATTERN}")" = "_3" ]; then | |
if nvm_is_version_installed "${PATTERN}"; then | |
VERSIONS="${PATTERN}" | |
elif nvm_is_version_installed "$(nvm_add_iojs_prefix "${PATTERN}")"; then | |
VERSIONS="$(nvm_add_iojs_prefix "${PATTERN}")" | |
end | |
else | |
switch ("${PATTERN}") | |
case "${NVM_IOJS_PREFIX}-" | |
case "${NVM_NODE_PREFIX}-" | |
case "system" | |
nvm_echo 'Nothing to do' | |
case '*' | |
local NUM_VERSION_GROUPS | |
NUM_VERSION_GROUPS="$(nvm_num_version_groups "${PATTERN}")" | |
if [ "${NUM_VERSION_GROUPS}" = "2" ]; or [ "${NUM_VERSION_GROUPS}" = "1" ]; then | |
PATTERN="${PATTERN%.}." | |
end | |
end | |
local ZSH_HAS_SHWORDSPLIT_UNSET | |
ZSH_HAS_SHWORDSPLIT_UNSET=1 | |
if nvm_has "setopt"; then | |
ZSH_HAS_SHWORDSPLIT_UNSET="$(set +e ; setopt | nvm_grep shwordsplit > /dev/null ; nvm_echo $?)" | |
setopt shwordsplit | |
end | |
local NVM_DIRS_TO_SEARCH1 | |
NVM_DIRS_TO_SEARCH1='' | |
local NVM_DIRS_TO_SEARCH2 | |
NVM_DIRS_TO_SEARCH2='' | |
local NVM_DIRS_TO_SEARCH3 | |
NVM_DIRS_TO_SEARCH3='' | |
local NVM_ADD_SYSTEM | |
NVM_ADD_SYSTEM=false | |
if nvm_is_iojs_version "${PATTERN}"; then | |
NVM_DIRS_TO_SEARCH1="${NVM_VERSION_DIR_IOJS}" | |
PATTERN="$(nvm_strip_iojs_prefix "${PATTERN}")" | |
if nvm_has_system_iojs; then | |
NVM_ADD_SYSTEM=true | |
end | |
else if [ "${PATTERN}" = "${NVM_NODE_PREFIX}-" ]; then | |
NVM_DIRS_TO_SEARCH1="${NVM_VERSION_DIR_OLD}" | |
NVM_DIRS_TO_SEARCH2="${NVM_VERSION_DIR_NEW}" | |
PATTERN='' | |
if nvm_has_system_node; then | |
NVM_ADD_SYSTEM=true | |
end | |
else | |
NVM_DIRS_TO_SEARCH1="${NVM_VERSION_DIR_OLD}" | |
NVM_DIRS_TO_SEARCH2="${NVM_VERSION_DIR_NEW}" | |
NVM_DIRS_TO_SEARCH3="${NVM_VERSION_DIR_IOJS}" | |
if nvm_has_system_iojs; or nvm_has_system_node; then | |
NVM_ADD_SYSTEM=true | |
end | |
end | |
if ! [ -d "${NVM_DIRS_TO_SEARCH1}" ]; or ! (command ls -1qA "${NVM_DIRS_TO_SEARCH1}" | nvm_grep -q .); then | |
NVM_DIRS_TO_SEARCH1='' | |
end | |
if ! [ -d "${NVM_DIRS_TO_SEARCH2}" ]; or ! (command ls -1qA "${NVM_DIRS_TO_SEARCH2}" | nvm_grep -q .); then | |
NVM_DIRS_TO_SEARCH2="${NVM_DIRS_TO_SEARCH1}" | |
end | |
if ! [ -d "${NVM_DIRS_TO_SEARCH3}" ]; or ! (command ls -1qA "${NVM_DIRS_TO_SEARCH3}" | nvm_grep -q .); then | |
NVM_DIRS_TO_SEARCH3="${NVM_DIRS_TO_SEARCH2}" | |
end | |
local SEARCH_PATTERN | |
if [ -z "${PATTERN}" ]; then | |
PATTERN='v' | |
SEARCH_PATTERN='.*' | |
else | |
SEARCH_PATTERN="$(echo "${PATTERN}" | command sed "s#\.#\\\.#g;")" | |
end | |
if [ -n "${NVM_DIRS_TO_SEARCH1}${NVM_DIRS_TO_SEARCH2}${NVM_DIRS_TO_SEARCH3}" ]; then | |
VERSIONS="$(command find "${NVM_DIRS_TO_SEARCH1}"/* "${NVM_DIRS_TO_SEARCH2}"/* "${NVM_DIRS_TO_SEARCH3}"/* -name . -o -type d -prune -o -path "${PATTERN}*" \ | |
| command sed -e " | |
s#${NVM_VERSION_DIR_IOJS}/#versions/${NVM_IOJS_PREFIX}/#; | |
s#^${NVM_DIR}/##; | |
\#^[^v]# d; | |
\#^versions\$# d; | |
s#^versions/##; | |
s#^v#${NVM_NODE_PREFIX}/v#; | |
\#${SEARCH_PATTERN}# !d; | |
" \ | |
-e "s#^\([^/]\{1,\}\)/\(.*\)\$#\2.\1#;" \ | |
| command sort -t. -u -k 1.2,1n -k 2,2n -k 3,3n \ | |
| command sed " | |
s#\(.*\)\.\([^\.]\{1,\}\)\$#\2-\1#; | |
s#^${NVM_NODE_PREFIX}-##; | |
" \ | |
)" | |
end | |
if [ "${ZSH_HAS_SHWORDSPLIT_UNSET}" -eq 1 ]; and nvm_has "unsetopt"; then | |
unsetopt shwordsplit | |
end | |
end | |
if [ "${NVM_ADD_SYSTEM-}" = true ]; then | |
if [ -z "${PATTERN}" ]; or [ "${PATTERN}" = 'v' ]; then | |
VERSIONS="${VERSIONS}$(command printf '\n%s' 'system')" | |
elif [ "${PATTERN}" = 'system' ]; then | |
VERSIONS="$(command printf '%s' 'system')" | |
end | |
end | |
if [ -z "${VERSIONS}" ]; then | |
nvm_echo 'N/A' | |
return 3 | |
end | |
nvm_echo "${VERSIONS}" | |
} | |
nvm_ls_remote() { | |
local PATTERN | |
PATTERN="${1-}" | |
if nvm_validate_implicit_alias "${PATTERN}" 2> /dev/null ; then | |
PATTERN="$(NVM_LTS="${NVM_LTS-}" nvm_ls_remote "$(nvm_print_implicit_alias remote "${PATTERN}")" | command tail -1 | command awk '{ print $1 }')" | |
else if [ -n "${PATTERN}" ]; then | |
PATTERN="$(nvm_ensure_version_prefix "${PATTERN}")" | |
else | |
PATTERN=".*" | |
end | |
NVM_LTS="${NVM_LTS-}" nvm_ls_remote_index_tab node std "${PATTERN}" | |
} | |
nvm_ls_remote_iojs() { | |
NVM_LTS="${NVM_LTS-}" nvm_ls_remote_index_tab iojs std "${1-}" | |
} | |
# args flavor, type, version | |
nvm_ls_remote_index_tab() { | |
local LTS | |
LTS="${NVM_LTS-}" | |
if [ "$#" -lt 3 ]; then | |
nvm_err 'not enough arguments' | |
return 5 | |
end | |
local FLAVOR | |
FLAVOR="${1-}" | |
local TYPE | |
TYPE="${2-}" | |
local MIRROR | |
MIRROR="$(nvm_get_mirror "${FLAVOR}" "${TYPE}")" | |
if [ -z "${MIRROR}" ]; then | |
return 3 | |
end | |
local PREFIX | |
PREFIX='' | |
switch ("${FLAVOR}-${TYPE}") | |
case iojs-std | |
PREFIX="$(nvm_iojs_prefix)-" | |
case node-std | |
PREFIX='' | |
case iojs-* | |
nvm_err 'unknown type of io.js release' | |
return 4 | |
case '*' | |
nvm_err 'unknown type of node.js release' | |
return 4 | |
end | |
local SORT_COMMAND | |
SORT_COMMAND='command sort' | |
switch ("${FLAVOR}") | |
case node | |
SORT_COMMAND='command sort -t. -u -k 1.2,1n -k 2,2n -k 3,3n' | |
end | |
local PATTERN | |
PATTERN="${3-}" | |
local VERSIONS | |
if [ -n "${PATTERN}" ]; then | |
if [ "${FLAVOR}" = 'iojs' ]; then | |
PATTERN="$(nvm_ensure_version_prefix "$(nvm_strip_iojs_prefix "${PATTERN}")")" | |
else | |
PATTERN="$(nvm_ensure_version_prefix "${PATTERN}")" | |
end | |
else | |
unset PATTERN | |
end | |
ZSH_HAS_SHWORDSPLIT_UNSET=1 | |
if nvm_has "setopt"; then | |
ZSH_HAS_SHWORDSPLIT_UNSET="$(set +e ; setopt | nvm_grep shwordsplit > /dev/null ; nvm_echo $?)" | |
setopt shwordsplit | |
end | |
local VERSION_LIST | |
VERSION_LIST="$(nvm_download -L -s "${MIRROR}/index.tab" -o - \ | |
| command sed " | |
1d; | |
s/^/${PREFIX}/; | |
" \ | |
)" | |
local LTS_ALIAS | |
local LTS_VERSION | |
command mkdir -p "$(nvm_alias_path)/lts" | |
nvm_echo "${VERSION_LIST}" \ | |
| command awk '{ | |
if ($10 ~ /^\-?$/) { next } | |
if ($10; and !a[tolower($10)]++) { | |
if (alias) { print alias, version } | |
alias_name = "lts/" tolower($10) | |
if (!alias) { print "lts/*", alias_name } | |
alias = alias_name | |
version = $1 | |
} | |
} | |
END { | |
if (alias) { | |
print alias, version | |
} | |
}' \ | |
| while read -r LTS_ALIAS_LINE; do | |
LTS_ALIAS="${LTS_ALIAS_LINE%% *}" | |
LTS_VERSION="${LTS_ALIAS_LINE#* }" | |
nvm_make_alias "$LTS_ALIAS" "$LTS_VERSION" >/dev/null 2>&1 | |
done | |
VERSIONS="$(nvm_echo "${VERSION_LIST}" \ | |
| command awk -v pattern="${PATTERN-}" -v lts="${LTS-}" '{ | |
if (!$1) { next } | |
if (pattern; and tolower($1) !~ tolower(pattern)) { next } | |
if (lts == "*"; and $10 ~ /^\-?$/) { next } | |
if (lts; and lts != "*"; and tolower($10) !~ tolower(lts)) { next } | |
if ($10 !~ /^\-?$/) print $1, $10; else print $1 | |
}' \ | |
| nvm_grep -w "${PATTERN:-.*}" \ | |
| $SORT_COMMAND)" | |
if [ "$ZSH_HAS_SHWORDSPLIT_UNSET" -eq 1 ]; and nvm_has "unsetopt"; then | |
unsetopt shwordsplit | |
end | |
if [ -z "${VERSIONS}" ]; then | |
nvm_echo 'N/A' | |
return 3 | |
end | |
nvm_echo "${VERSIONS}" | |
} | |
nvm_get_checksum_alg() { | |
if nvm_has_non_aliased "sha256sum"; then | |
nvm_echo 'sha-256' | |
else if nvm_has_non_aliased "shasum"; then | |
nvm_echo 'sha-256' | |
else if nvm_has_non_aliased "sha256"; then | |
nvm_echo 'sha-256' | |
else if nvm_has_non_aliased "gsha256sum"; then | |
nvm_echo 'sha-256' | |
else if nvm_has_non_aliased "openssl"; then | |
nvm_echo 'sha-256' | |
else if nvm_has_non_aliased "bssl"; then | |
nvm_echo 'sha-256' | |
else if nvm_has_non_aliased "sha1sum"; then | |
nvm_echo 'sha-1' | |
else if nvm_has_non_aliased "sha1"; then | |
nvm_echo 'sha-1' | |
else if nvm_has_non_aliased "shasum"; then | |
nvm_echo 'sha-1' | |
else | |
nvm_err 'Unaliased sha256sum, shasum, sha256, gsha256sum, openssl, or bssl not found.' | |
nvm_err 'Unaliased sha1sum, sha1, or shasum not found.' | |
return 1 | |
end | |
} | |
nvm_compute_checksum() { | |
local FILE | |
FILE="${1-}" | |
if [ -z "${FILE}" ]; then | |
nvm_err 'Provided file to checksum is empty.' | |
return 2 | |
elif ! [ -f "${FILE}" ]; then | |
nvm_err 'Provided file to checksum does not exist.' | |
return 1 | |
end | |
if nvm_has_non_aliased "sha256sum"; then | |
nvm_err 'Computing checksum with sha256sum' | |
command sha256sum "${FILE}" | command awk '{print $1}' | |
elif nvm_has_non_aliased "shasum"; then | |
nvm_err 'Computing checksum with shasum -a 256' | |
command shasum -a 256 "${FILE}" | command awk '{print $1}' | |
elif nvm_has_non_aliased "sha256"; then | |
nvm_err 'Computing checksum with sha256 -q' | |
command sha256 -q "${FILE}" | command awk '{print $1}' | |
elif nvm_has_non_aliased "gsha256sum"; then | |
nvm_err 'Computing checksum with gsha256sum' | |
command gsha256sum "${FILE}" | command awk '{print $1}' | |
elif nvm_has_non_aliased "openssl"; then | |
nvm_err 'Computing checksum with openssl dgst -sha256' | |
command openssl dgst -sha256 "${FILE}" | command awk '{print $NF}' | |
elif nvm_has_non_aliased "bssl"; then | |
nvm_err 'Computing checksum with bssl sha256sum' | |
command bssl sha256sum "${FILE}" | command awk '{print $1}' | |
elif nvm_has_non_aliased "sha1sum"; then | |
nvm_err 'Computing checksum with sha1sum' | |
command sha1sum "${FILE}" | command awk '{print $1}' | |
elif nvm_has_non_aliased "sha1"; then | |
nvm_err 'Computing checksum with sha1 -q' | |
command sha1 -q "${FILE}" | |
elif nvm_has_non_aliased "shasum"; then | |
nvm_err 'Computing checksum with shasum' | |
command shasum "${FILE}" | command awk '{print $1}' | |
end | |
} | |
nvm_compare_checksum() { | |
local FILE | |
FILE="${1-}" | |
if [ -z "${FILE}" ]; then | |
nvm_err 'Provided file to checksum is empty.' | |
return 4 | |
elif ! [ -f "${FILE}" ]; then | |
nvm_err 'Provided file to checksum does not exist.' | |
return 3 | |
end | |
local COMPUTED_SUM | |
COMPUTED_SUM="$(nvm_compute_checksum "${FILE}")" | |
local CHECKSUM | |
CHECKSUM="${2-}" | |
if [ -z "${CHECKSUM}" ]; then | |
nvm_err 'Provided checksum to compare to is empty.' | |
return 2 | |
end | |
if [ -z "${COMPUTED_SUM}" ]; then | |
nvm_err "Computed checksum of '${FILE}' is empty." # missing in raspberry pi binary | |
nvm_err 'WARNING: Continuing *without checksum verification*' | |
return | |
elif [ "${COMPUTED_SUM}" != "${CHECKSUM}" ]; then | |
nvm_err "Checksums do not match: '${COMPUTED_SUM}' found, '${CHECKSUM}' expected." | |
return 1 | |
end | |
nvm_err 'Checksums matched!' | |
} | |
# args: flavor, type, version, slug, compression | |
nvm_get_checksum() { | |
local FLAVOR | |
switch ("${1-}") | |
case node | |
case iojs | |
FLAVOR="${1}" | |
case '*' | |
nvm_err 'supported flavors: node, iojs' | |
return 2 | |
end | |
local MIRROR | |
MIRROR="$(nvm_get_mirror "${FLAVOR}" "${2-}")" | |
if [ -z "${MIRROR}" ]; then | |
return 1 | |
end | |
local SHASUMS_URL | |
if [ "$(nvm_get_checksum_alg)" = 'sha-256' ]; then | |
SHASUMS_URL="${MIRROR}/${3}/SHASUMS256.txt" | |
else | |
SHASUMS_URL="${MIRROR}/${3}/SHASUMS.txt" | |
end | |
nvm_download -L -s "${SHASUMS_URL}" -o - | command awk "{ if (\"${4}.tar.${5}\" == \$2) print \$1}" | |
} | |
nvm_checksum() { | |
local NVM_CHECKSUM | |
if [ -z "${3-}" ]; or [ "${3-}" = 'sha1' ]; then | |
if nvm_has_non_aliased "sha1sum"; then | |
NVM_CHECKSUM="$(command sha1sum "${1-}" | command awk '{print $1}')" | |
else if nvm_has_non_aliased "sha1"; then | |
NVM_CHECKSUM="$(command sha1 -q "${1-}")" | |
else if nvm_has_non_aliased "shasum"; then | |
NVM_CHECKSUM="$(command shasum "${1-}" | command awk '{print $1}')" | |
else | |
nvm_err 'Unaliased sha1sum, sha1, or shasum not found.' | |
return 2 | |
end | |
else | |
if nvm_has_non_aliased "sha256sum"; then | |
NVM_CHECKSUM="$(command sha256sum "${1-}" | command awk '{print $1}')" | |
else if nvm_has_non_aliased "shasum"; then | |
NVM_CHECKSUM="$(command shasum -a 256 "${1-}" | command awk '{print $1}')" | |
else if nvm_has_non_aliased "sha256"; then | |
NVM_CHECKSUM="$(command sha256 -q "${1-}" | command awk '{print $1}')" | |
else if nvm_has_non_aliased "gsha256sum"; then | |
NVM_CHECKSUM="$(command gsha256sum "${1-}" | command awk '{print $1}')" | |
else if nvm_has_non_aliased "openssl"; then | |
NVM_CHECKSUM="$(command openssl dgst -sha256 "${1-}" | command awk '{print $NF}')" | |
else if nvm_has_non_aliased "bssl"; then | |
NVM_CHECKSUM="$(command bssl sha256sum "${1-}" | command awk '{print $1}')" | |
else | |
nvm_err 'Unaliased sha256sum, shasum, sha256, gsha256sum, openssl, or bssl not found.' | |
nvm_err 'WARNING: Continuing *without checksum verification*' | |
return | |
end | |
end | |
if [ "_${NVM_CHECKSUM}" = "_${2-}" ]; then | |
return | |
else if [ -z "${2-}" ]; then | |
nvm_echo 'Checksums empty' #missing in raspberry pi binary | |
return | |
end | |
nvm_err 'Checksums do not match.' | |
return 1 | |
} | |
nvm_print_versions() { | |
local VERSION | |
local LTS | |
local FORMAT | |
local NVM_CURRENT | |
NVM_CURRENT=$(nvm_ls_current) | |
local NVM_HAS_COLORS | |
if [ -z "${NVM_NO_COLORS-}" ]; and nvm_has_colors; then | |
NVM_HAS_COLORS=1 | |
end | |
local LTS_LENGTH | |
local LTS_FORMAT | |
nvm_echo "${1-}" \ | |
| command sed '1!G;h;$!d' \ | |
| command awk '{ if ($2; and a[$2]++) { print $1, "(LTS: " $2 ")" } else if ($2) { print $1, "(Latest LTS: " $2 ")" } else { print $0 } }' \ | |
| command sed '1!G;h;$!d' \ | |
| while read -r VERSION_LINE; do | |
VERSION="${VERSION_LINE%% *}" | |
LTS="${VERSION_LINE#* }" | |
FORMAT='%15s' | |
if [ "_$VERSION" = "_$NVM_CURRENT" ]; then | |
if [ "${NVM_HAS_COLORS-}" = '1' ]; then | |
FORMAT='\033[0;32m-> %12s\033[0m' | |
else | |
FORMAT='-> %12s *' | |
end | |
else if [ "$VERSION" = "system" ]; then | |
if [ "${NVM_HAS_COLORS-}" = '1' ]; then | |
FORMAT='\033[0;33m%15s\033[0m' | |
end | |
else if nvm_is_version_installed "$VERSION"; then | |
if [ "${NVM_HAS_COLORS-}" = '1' ]; then | |
FORMAT='\033[0;34m%15s\033[0m' | |
else | |
FORMAT='%15s *' | |
end | |
end | |
if [ "${LTS}" != "${VERSION}" ]; then | |
switch ("${LTS}") | |
case *Latest* | |
LTS="${LTS##Latest }" | |
LTS_LENGTH="${#LTS}" | |
if [ "${NVM_HAS_COLORS-}" = '1' ]; then | |
LTS_FORMAT=" \033[1;32m%${LTS_LENGTH}s\033[0m" | |
else | |
LTS_FORMAT=" %${LTS_LENGTH}s" | |
end | |
case '*' | |
LTS_LENGTH="${#LTS}" | |
if [ "${NVM_HAS_COLORS-}" = '1' ]; then | |
LTS_FORMAT=" \033[0;37m%${LTS_LENGTH}s\033[0m" | |
else | |
LTS_FORMAT=" %${LTS_LENGTH}s" | |
end | |
end | |
command printf -- "${FORMAT}${LTS_FORMAT}\n" "$VERSION" " $LTS" | |
else | |
command printf -- "${FORMAT}\n" "$VERSION" | |
end | |
done | |
} | |
nvm_validate_implicit_alias() { | |
local NVM_IOJS_PREFIX | |
NVM_IOJS_PREFIX="$(nvm_iojs_prefix)" | |
local NVM_NODE_PREFIX | |
NVM_NODE_PREFIX="$(nvm_node_prefix)" | |
switch ("$1") | |
case "stable" | |
case "unstable" | |
case "$NVM_IOJS_PREFIX" | |
case "$NVM_NODE_PREFIX" | |
return | |
case '*' | |
nvm_err "Only implicit aliases 'stable', 'unstable', '$NVM_IOJS_PREFIX', and '$NVM_NODE_PREFIX' are supported." | |
return 1 | |
end | |
} | |
nvm_print_implicit_alias() { | |
if [ "_$1" != "_local" ]; and [ "_$1" != "_remote" ]; then | |
nvm_err "nvm_print_implicit_alias must be specified with local or remote as the first argument." | |
return 1 | |
end | |
local NVM_IMPLICIT | |
NVM_IMPLICIT="$2" | |
if ! nvm_validate_implicit_alias "$NVM_IMPLICIT"; then | |
return 2 | |
end | |
local ZSH_HAS_SHWORDSPLIT_UNSET | |
local NVM_IOJS_PREFIX | |
NVM_IOJS_PREFIX="$(nvm_iojs_prefix)" | |
local NVM_NODE_PREFIX | |
NVM_NODE_PREFIX="$(nvm_node_prefix)" | |
local NVM_COMMAND | |
local NVM_ADD_PREFIX_COMMAND | |
local LAST_TWO | |
switch ("$NVM_IMPLICIT") | |
case "$NVM_IOJS_PREFIX" | |
NVM_COMMAND="nvm_ls_remote_iojs" | |
NVM_ADD_PREFIX_COMMAND="nvm_add_iojs_prefix" | |
if [ "_$1" = "_local" ]; then | |
NVM_COMMAND="nvm_ls $NVM_IMPLICIT" | |
end | |
ZSH_HAS_SHWORDSPLIT_UNSET=1 | |
if nvm_has "setopt"; then | |
ZSH_HAS_SHWORDSPLIT_UNSET="$(set +e ; setopt | nvm_grep shwordsplit > /dev/null ; nvm_echo $?)" | |
setopt shwordsplit | |
end | |
local NVM_IOJS_VERSION | |
local EXIT_CODE | |
NVM_IOJS_VERSION="$($NVM_COMMAND)"; and: | |
EXIT_CODE="$?" | |
if [ "_$EXIT_CODE" = "_0" ]; then | |
NVM_IOJS_VERSION="$(nvm_echo "$NVM_IOJS_VERSION" | command sed "s/^$NVM_IMPLICIT-//" | nvm_grep -e '^v' | command cut -c2- | command cut -d . -f 1,2 | uniq | command tail -1)" | |
end | |
if [ "$ZSH_HAS_SHWORDSPLIT_UNSET" -eq 1 ]; and nvm_has "unsetopt"; then | |
unsetopt shwordsplit | |
end | |
if [ "_$NVM_IOJS_VERSION" = "_N/A" ]; then | |
nvm_echo 'N/A' | |
else | |
$NVM_ADD_PREFIX_COMMAND "$NVM_IOJS_VERSION" | |
end | |
return $EXIT_CODE | |
case "$NVM_NODE_PREFIX" | |
nvm_echo 'stable' | |
return | |
case '*' | |
NVM_COMMAND="nvm_ls_remote" | |
if [ "_$1" = "_local" ]; then | |
NVM_COMMAND="nvm_ls node" | |
end | |
ZSH_HAS_SHWORDSPLIT_UNSET=1 | |
if nvm_has "setopt"; then | |
ZSH_HAS_SHWORDSPLIT_UNSET="$(set +e ; setopt | nvm_grep shwordsplit > /dev/null ; nvm_echo $?)" | |
setopt shwordsplit | |
end | |
LAST_TWO=$($NVM_COMMAND | nvm_grep -e '^v' | command cut -c2- | command cut -d . -f 1,2 | uniq) | |
if [ "$ZSH_HAS_SHWORDSPLIT_UNSET" -eq 1 ]; and nvm_has "unsetopt"; then | |
unsetopt shwordsplit | |
end | |
end | |
local MINOR | |
local STABLE | |
local UNSTABLE | |
local MOD | |
local NORMALIZED_VERSION | |
ZSH_HAS_SHWORDSPLIT_UNSET=1 | |
if nvm_has "setopt"; then | |
ZSH_HAS_SHWORDSPLIT_UNSET="$(set +e ; setopt | nvm_grep shwordsplit > /dev/null ; nvm_echo $?)" | |
setopt shwordsplit | |
end | |
for MINOR in $LAST_TWO; do | |
NORMALIZED_VERSION="$(nvm_normalize_version "$MINOR")" | |
if [ "_0${NORMALIZED_VERSION#?}" != "_$NORMALIZED_VERSION" ]; then | |
STABLE="$MINOR" | |
else | |
MOD="$(awk 'BEGIN { print int(ARGV[1] / 1000000) % 2 ; exit(0) }' "$NORMALIZED_VERSION")" | |
if [ "$MOD" -eq 0 ]; then | |
STABLE="$MINOR" | |
elif [ "$MOD" -eq 1 ]; then | |
UNSTABLE="$MINOR" | |
end | |
end | |
done | |
if [ "$ZSH_HAS_SHWORDSPLIT_UNSET" -eq 1 ]; and nvm_has "unsetopt"; then | |
unsetopt shwordsplit | |
end | |
if [ "_$2" = '_stable' ]; then | |
nvm_echo "${STABLE}" | |
elif [ "_$2" = '_unstable' ]; then | |
nvm_echo "${UNSTABLE}" | |
end | |
} | |
nvm_get_os() { | |
local NVM_UNAME | |
NVM_UNAME="$(command uname -a)" | |
local NVM_OS | |
switch ("$NVM_UNAME") | |
case Linux\ * | |
NVM_OS=linux | |
case Darwin\ * | |
NVM_OS=darwin | |
case SunOS\ * | |
NVM_OS=sunos | |
case FreeBSD\ * | |
NVM_OS=freebsd | |
case AIX\ * | |
NVM_OS=aix | |
end | |
nvm_echo "${NVM_OS-}" | |
} | |
nvm_get_arch() { | |
local HOST_ARCH | |
local NVM_OS | |
local EXIT_CODE | |
NVM_OS="$(nvm_get_os)" | |
# If the OS is SunOS, first try to use pkgsrc to guess | |
# the most appropriate arch. If it's not available, use | |
# isainfo to get the instruction set supported by the | |
# kernel. | |
if [ "_$NVM_OS" = "_sunos" ]; then | |
if HOST_ARCH=$(pkg_info -Q MACHINE_ARCH pkg_install); then | |
HOST_ARCH=$(echo "${HOST_ARCH}" | command tail -1) | |
else | |
HOST_ARCH=$(isainfo -n) | |
end | |
else if [ "_$NVM_OS" = "_aix" ]; then | |
HOST_ARCH=ppc64 | |
else | |
HOST_ARCH="$(command uname -m)" | |
end | |
local NVM_ARCH | |
switch ("$HOST_ARCH") | |
case x86_64 | |
case amd64 | |
NVM_ARCH="x64" | |
case i*86 | |
NVM_ARCH="x86" | |
case aarch64 | |
NVM_ARCH="arm64" | |
case '*' | |
NVM_ARCH="$HOST_ARCH" | |
end | |
nvm_echo "${NVM_ARCH}" | |
} | |
nvm_get_minor_version() { | |
local VERSION | |
VERSION="$1" | |
if [ -z "$VERSION" ]; then | |
nvm_err 'a version is required' | |
return 1 | |
end | |
switch ("$VERSION") | |
case v | |
case .* | |
case *..* | |
case v*[!.0123456789]* | |
case [!v]*[!.0123456789]* | |
case [!v0123456789]* | |
case v[!0123456789]* | |
nvm_err 'invalid version number' | |
return 2 | |
end | |
local PREFIXED_VERSION | |
PREFIXED_VERSION="$(nvm_format_version "$VERSION")" | |
local MINOR | |
MINOR="$(nvm_echo "$PREFIXED_VERSION" | nvm_grep -e '^v' | command cut -c2- | command cut -d . -f 1,2)" | |
if [ -z "$MINOR" ]; then | |
nvm_err 'invalid version number! (please report this)' | |
return 3 | |
end | |
nvm_echo "${MINOR}" | |
} | |
nvm_ensure_default_set() { | |
local VERSION | |
VERSION="$1" | |
if [ -z "$VERSION" ]; then | |
nvm_err 'nvm_ensure_default_set: a version is required' | |
return 1 | |
elif nvm_alias default >/dev/null 2>&1; then | |
# default already set | |
return 0 | |
end | |
local OUTPUT | |
OUTPUT="$(nvm alias default "$VERSION")" | |
local EXIT_CODE | |
EXIT_CODE="$?" | |
nvm_echo "Creating default alias: $OUTPUT" | |
return $EXIT_CODE | |
} | |
nvm_is_merged_node_version() { | |
nvm_version_greater_than_or_equal_to "$1" v4.0.0 | |
} | |
nvm_get_mirror() { | |
switch ("${1}-${2}") | |
case node-std | |
nvm_echo "${NVM_NODEJS_ORG_MIRROR:-https://nodejs.org/dist}" | |
case iojs-std | |
nvm_echo "${NVM_IOJS_ORG_MIRROR:-https://iojs.org/dist}" | |
case '*' | |
nvm_err 'unknown type of node.js or io.js release' | |
return 1 | |
end | |
} | |
# args: flavor, type, version, reinstall | |
nvm_install_binary() { | |
local FLAVOR | |
switch ("${1-}") | |
case node | |
case iojs | |
FLAVOR="${1}" | |
case '*' | |
nvm_err 'supported flavors: node, iojs' | |
return 4 | |
end | |
local TYPE | |
TYPE="${2-}" | |
local PREFIXED_VERSION | |
PREFIXED_VERSION="${3-}" | |
if [ -z "${PREFIXED_VERSION}" ]; then | |
nvm_err 'A version number is required.' | |
return 3 | |
end | |
local VERSION | |
VERSION="$(nvm_strip_iojs_prefix "${PREFIXED_VERSION}")" | |
if [ -z "$(nvm_get_os)" ]; then | |
return 2 | |
end | |
local tar_compression_flag | |
tar_compression_flag='z' | |
if nvm_supports_xz "${VERSION}"; then | |
tar_compression_flag='J' | |
end | |
local TARBALL | |
local TMPDIR | |
local VERSION_PATH | |
local NODE_OR_IOJS | |
if [ "${FLAVOR}" = 'node' ]; then | |
NODE_OR_IOJS="${FLAVOR}" | |
end | |
nvm_echo "Downloading and installing ${NODE_OR_IOJS-} ${VERSION}..." | |
TARBALL="$(nvm_download_artifact "${FLAVOR}" binary "${TYPE-}" "${VERSION}" | command tail -1)" | |
if [ -f "${TARBALL}" ]; then | |
TMPDIR="$(dirname "${TARBALL}")/files" | |
end | |
local tar | |
tar='tar' | |
if [ "${NVM_OS}" = 'aix' ]; then | |
tar='gtar' | |
end | |
if ( | |
[ -n "${TMPDIR-}" ]; and \ | |
command mkdir -p "${TMPDIR}"; and \ | |
command "${tar}" -x${tar_compression_flag}f "${TARBALL}" -C "${TMPDIR}" --strip-components 1; and \ | |
VERSION_PATH="$(nvm_version_path "${PREFIXED_VERSION}")"; and \ | |
command mkdir -p "${VERSION_PATH}"; and \ | |
command mv "${TMPDIR}/"* "${VERSION_PATH}"; and \ | |
command rm -rf "${TMPDIR}" | |
); then | |
return 0 | |
end | |
nvm_err 'Binary download failed, trying source.' | |
if [ -n "${TMPDIR-}" ]; then | |
command rm -rf "${TMPDIR}" | |
end | |
return 1 | |
} | |
# args: flavor, kind, version | |
nvm_get_download_slug() { | |
local FLAVOR | |
switch ("${1-}") | |
case node | |
case iojs | |
FLAVOR="${1}" | |
case '*' | |
nvm_err 'supported flavors: node, iojs' | |
return 1 | |
end | |
local KIND | |
switch ("${2-}") | |
case binary | |
case source | |
KIND="${2}" | |
case '*' | |
nvm_err 'supported kinds: binary, source' | |
return 2 | |
end | |
local VERSION | |
VERSION="${3-}" | |
local NVM_OS | |
NVM_OS="$(nvm_get_os)" | |
local NVM_ARCH | |
NVM_ARCH="$(nvm_get_arch)" | |
if ! nvm_is_merged_node_version "${VERSION}"; then | |
if [ "${NVM_ARCH}" = 'armv6l' ]; or [ "${NVM_ARCH}" = 'armv7l' ]; then | |
NVM_ARCH="arm-pi" | |
end | |
end | |
if [ "${KIND}" = 'binary' ]; then | |
nvm_echo "${FLAVOR}-${VERSION}-${NVM_OS}-${NVM_ARCH}" | |
elif [ "${KIND}" = 'source' ]; then | |
nvm_echo "${FLAVOR}-${VERSION}" | |
end | |
} | |
# args: flavor, kind, type, version | |
nvm_download_artifact() { | |
local FLAVOR | |
switch ("${1-}") | |
case node | |
case iojs | |
FLAVOR="${1}" | |
case '*' | |
nvm_err 'supported flavors: node, iojs' | |
return 2 | |
end | |
local KIND | |
switch ("${2-}") | |
case binary | |
case source | |
KIND="${2}" | |
case '*' | |
nvm_err 'supported kinds: binary, source' | |
return 2 | |
end | |
local TYPE | |
TYPE="${3-}" | |
local MIRROR | |
MIRROR="$(nvm_get_mirror "${FLAVOR}" "${TYPE}")" | |
if [ -z "${MIRROR}" ]; then | |
return 2 | |
end | |
local VERSION | |
VERSION="${4}" | |
if [ -z "${VERSION}" ]; then | |
nvm_err 'A version number is required.' | |
return 3 | |
end | |
if [ "${KIND}" = 'binary' ]; and ! nvm_binary_available "${VERSION}"; then | |
nvm_err "No precompiled binary available for ${VERSION}." | |
return | |
end | |
local SLUG | |
SLUG="$(nvm_get_download_slug "${FLAVOR}" "${KIND}" "${VERSION}")" | |
local COMPRESSION | |
COMPRESSION='gz' | |
if nvm_supports_xz "${VERSION}"; then | |
COMPRESSION='xz' | |
end | |
local CHECKSUM | |
CHECKSUM="$(nvm_get_checksum "${FLAVOR}" "${TYPE}" "${VERSION}" "${SLUG}" "${COMPRESSION}")" | |
local tmpdir | |
if [ "${KIND}" = 'binary' ]; then | |
tmpdir="$(nvm_cache_dir)/bin/${SLUG}" | |
else | |
tmpdir="$(nvm_cache_dir)/src/${SLUG}" | |
end | |
command mkdir -p "${tmpdir}/files"; or ( | |
nvm_err "creating directory ${tmpdir}/files failed" | |
return 3 | |
) | |
local TARBALL | |
TARBALL="${tmpdir}/${SLUG}.tar.${COMPRESSION}" | |
local TARBALL_URL | |
if nvm_version_greater_than_or_equal_to "${VERSION}" 0.1.14; then | |
TARBALL_URL="${MIRROR}/${VERSION}/${SLUG}.tar.${COMPRESSION}" | |
else | |
# node <= 0.1.13 does not have a directory | |
TARBALL_URL="${MIRROR}/${SLUG}.tar.${COMPRESSION}" | |
end | |
if [ -r "${TARBALL}" ]; then | |
nvm_err "Local cache found: $(nvm_sanitize_path "${TARBALL}")" | |
if nvm_compare_checksum "${TARBALL}" "${CHECKSUM}" >/dev/null 2>&1; then | |
nvm_err "Checksums match! Using existing downloaded archive $(nvm_sanitize_path "${TARBALL}")" | |
nvm_echo "${TARBALL}" | |
return 0 | |
end | |
nvm_compare_checksum "${TARBALL}" "${CHECKSUM}" | |
nvm_err "Checksum check failed!" | |
nvm_err "Removing the broken local cache..." | |
command rm -rf "${TARBALL}" | |
end | |
nvm_err "Downloading ${TARBALL_URL}..." | |
nvm_download -L -C - --progress-bar "${TARBALL_URL}" -o "${TARBALL}"; or ( | |
command rm -rf "${TARBALL}" "${tmpdir}" | |
nvm_err "Binary download from ${TARBALL_URL} failed, trying source." | |
return 4 | |
) | |
if nvm_grep '404 Not Found' "${TARBALL}" >/dev/null; then | |
command rm -rf "${TARBALL}" "$tmpdir" | |
nvm_err "HTTP 404 at URL ${TARBALL_URL}"; | |
return 5 | |
end | |
nvm_compare_checksum "${TARBALL}" "${CHECKSUM}"; or ( | |
command rm -rf "${tmpdir}/files" | |
return 6 | |
) | |
nvm_echo "${TARBALL}" | |
} | |
nvm_get_make_jobs() { | |
if nvm_is_natural_num "${1-}"; then | |
NVM_MAKE_JOBS="$1" | |
nvm_echo "number of \`make\` jobs: $NVM_MAKE_JOBS" | |
return | |
elif [ -n "${1-}" ]; then | |
unset NVM_MAKE_JOBS | |
nvm_err "$1 is invalid for number of \`make\` jobs, must be a natural number" | |
end | |
local NVM_OS | |
NVM_OS="$(nvm_get_os)" | |
local NVM_CPU_CORES | |
switch ("_$NVM_OS") | |
case "_linux" | |
NVM_CPU_CORES="$(nvm_grep -c -E '^processor.+: [0-9]+' /proc/cpuinfo)" | |
case "_freebsd" | |
case "_darwin" | |
NVM_CPU_CORES="$(sysctl -n hw.ncpu)" | |
case "_sunos" | |
NVM_CPU_CORES="$(psrinfo | wc -l)" | |
case "_aix" | |
NVM_CPU_CORES="$(pmcycles -m | wc -l)" | |
end | |
if ! nvm_is_natural_num "$NVM_CPU_CORES" ; then | |
nvm_err 'Can not determine how many core(s) are available, running in single-threaded mode.' | |
nvm_err 'Please report an issue on GitHub to help us make nvm run faster on your computer!' | |
NVM_MAKE_JOBS=1 | |
else | |
nvm_echo "Detected that you have $NVM_CPU_CORES CPU core(s)" | |
if [ "$NVM_CPU_CORES" -gt 2 ]; then | |
NVM_MAKE_JOBS=$((NVM_CPU_CORES - 1)) | |
nvm_echo "Running with $NVM_MAKE_JOBS threads to speed up the build" | |
else | |
NVM_MAKE_JOBS=1 | |
nvm_echo 'Number of CPU core(s) less than or equal to 2, running in single-threaded mode' | |
end | |
end | |
} | |
# args: flavor, type, version, make jobs, additional | |
nvm_install_source() { | |
local FLAVOR | |
switch ("${1-}") | |
case node | |
case iojs | |
FLAVOR="${1}" | |
case '*' | |
nvm_err 'supported flavors: node, iojs' | |
return 2 | |
end | |
local TYPE | |
TYPE="${2-}" | |
local PREFIXED_VERSION | |
PREFIXED_VERSION="${3-}" | |
if [ -z "${PREFIXED_VERSION}" ]; then | |
nvm_err 'A version number is required.' | |
return 3 | |
end | |
local VERSION | |
VERSION="$(nvm_strip_iojs_prefix "${PREFIXED_VERSION}")" | |
local NVM_MAKE_JOBS | |
NVM_MAKE_JOBS="${4-}" | |
local ADDITIONAL_PARAMETERS | |
ADDITIONAL_PARAMETERS="${5-}" | |
local NVM_ARCH | |
NVM_ARCH="$(nvm_get_arch)" | |
if [ "${NVM_ARCH}" = 'armv6l' ]; or [ "${NVM_ARCH}" = 'armv7l' ]; then | |
if [ -n "${ADDITIONAL_PARAMETERS}" ]; then | |
ADDITIONAL_PARAMETERS="--without-snapshot ${ADDITIONAL_PARAMETERS}" | |
else | |
ADDITIONAL_PARAMETERS='--without-snapshot' | |
end | |
end | |
if [ -n "${ADDITIONAL_PARAMETERS}" ]; then | |
nvm_echo "Additional options while compiling: ${ADDITIONAL_PARAMETERS}" | |
end | |
local NVM_OS | |
NVM_OS="$(nvm_get_os)" | |
local make | |
make='make' | |
local MAKE_CXX | |
switch ("${NVM_OS}") | |
case 'freebsd' | |
make='gmake' | |
MAKE_CXX="CC=${CC:-cc} CXX=${CXX:-c++}" | |
case 'darwin' | |
MAKE_CXX="CC=${CC:-cc} CXX=${CXX:-c++}" | |
case 'aix' | |
make='gmake' | |
end | |
if nvm_has "clang++"; and nvm_has "clang"; and nvm_version_greater_than_or_equal_to "$(nvm_clang_version)" 3.5; then | |
if [ -z "${CC-}" ]; or [ -z "${CXX-}" ] ; then | |
nvm_echo "Clang v3.5+ detected! CC or CXX not specified, will use Clang as C/C++ compiler!" | |
MAKE_CXX="CC=${CC:-cc} CXX=${CXX:-c++}" | |
end | |
end | |
local tar_compression_flag | |
tar_compression_flag='z' | |
if nvm_supports_xz "${VERSION}"; then | |
tar_compression_flag='J' | |
end | |
local tar | |
tar='tar' | |
if [ "${NVM_OS}" = 'aix' ]; then | |
tar='gtar' | |
end | |
local TARBALL | |
local TMPDIR | |
local VERSION_PATH | |
TARBALL="$(nvm_download_artifact "${FLAVOR}" source "${TYPE}" "${VERSION}" | command tail -1)"; and \ | |
[ -f "${TARBALL}" ]; and \ | |
TMPDIR="$(dirname "${TARBALL}")/files"; and \ | |
if ! ( | |
# shellcheck disable=SC2086 | |
command mkdir -p "${TMPDIR}"; and \ | |
command "${tar}" -x${tar_compression_flag}f "${TARBALL}" -C "${TMPDIR}" --strip-components 1; and \ | |
VERSION_PATH="$(nvm_version_path "${PREFIXED_VERSION}")"; and \ | |
nvm_cd "${TMPDIR}"; and \ | |
nvm_echo '$>'./configure --prefix="${VERSION_PATH}" $ADDITIONAL_PARAMETERS'<'; and \ | |
./configure --prefix="${VERSION_PATH}" $ADDITIONAL_PARAMETERS; and \ | |
$make -j "${NVM_MAKE_JOBS}" ${MAKE_CXX-}; and \ | |
command rm -f "${VERSION_PATH}" 2>/dev/null; and \ | |
$make -j "${NVM_MAKE_JOBS}" ${MAKE_CXX-} install | |
); then | |
nvm_err "nvm: install ${VERSION} failed!" | |
command rm -rf "${TMPDIR-}" | |
return 1 | |
end | |
} | |
nvm_use_if_needed() { | |
if [ "_${1-}" = "_$(nvm_ls_current)" ]; then | |
return | |
end | |
nvm use "$@" | |
} | |
nvm_install_npm_if_needed() { | |
local VERSION | |
VERSION="$(nvm_ls_current)" | |
if ! nvm_has "npm"; then | |
nvm_echo 'Installing npm...' | |
if nvm_version_greater 0.2.0 "$VERSION"; then | |
nvm_err 'npm requires node v0.2.3 or higher' | |
else if nvm_version_greater_than_or_equal_to "$VERSION" 0.2.0; then | |
if nvm_version_greater 0.2.3 "$VERSION"; then | |
nvm_err 'npm requires node v0.2.3 or higher' | |
else | |
nvm_download -L https://npmjs.org/install.sh -o - | clean=yes npm_install=0.2.19 sh | |
end | |
else | |
nvm_download -L https://npmjs.org/install.sh -o - | clean=yes sh | |
end | |
end | |
return $? | |
} | |
nvm_match_version() { | |
local NVM_IOJS_PREFIX | |
NVM_IOJS_PREFIX="$(nvm_iojs_prefix)" | |
local PROVIDED_VERSION | |
PROVIDED_VERSION="$1" | |
switch ("_$PROVIDED_VERSION") | |
case "_$NVM_IOJS_PREFIX" | |
case'_io.js' | |
nvm_version "$NVM_IOJS_PREFIX" | |
case '_system' | |
nvm_echo 'system' | |
case * | |
nvm_version "$PROVIDED_VERSION" | |
end | |
} | |
nvm_npm_global_modules() { | |
local NPMLIST | |
local VERSION | |
VERSION="$1" | |
if [ "_$VERSION" = "_system" ]; then | |
NPMLIST=$(nvm use system > /dev/null; and npm list -g --depth=0 2> /dev/null | command sed 1,1d) | |
else | |
NPMLIST=$(nvm use "$VERSION" > /dev/null; and npm list -g --depth=0 2> /dev/null | command sed 1,1d) | |
end | |
local INSTALLS | |
INSTALLS=$(nvm_echo "$NPMLIST" | command sed -e '/ -> / d' -e '/\(empty\)/ d' -e 's/^.* \(.*@[^ ]*\).*/\1/' -e '/^npm@[^ ]*.*$/ d' | command xargs) | |
local LINKS | |
LINKS="$(nvm_echo "$NPMLIST" | command sed -n 's/.* -> \(.*\)/\1/ p')" | |
nvm_echo "$INSTALLS //// $LINKS" | |
} | |
nvm_die_on_prefix() { | |
local NVM_DELETE_PREFIX | |
NVM_DELETE_PREFIX="$1" | |
switch ("$NVM_DELETE_PREFIX") | |
case 0 | |
case 1 | |
nvm_echo "case 0 or 1" | |
case * | |
nvm_err 'First argument "delete the prefix" must be zero or one' | |
return 1 | |
end | |
local NVM_COMMAND | |
NVM_COMMAND="$2" | |
if [ -z "$NVM_COMMAND" ]; then | |
nvm_err 'Second argument "nvm command" must be nonempty' | |
return 2 | |
end | |
if [ -n "${PREFIX-}" ]; and ! (nvm_tree_contains_path "$NVM_DIR" "$PREFIX" >/dev/null 2>&1); then | |
nvm deactivate >/dev/null 2>&1 | |
nvm_err "nvm is not compatible with the \"PREFIX\" environment variable: currently set to \"$PREFIX\"" | |
nvm_err 'Run `unset PREFIX` to unset it.' | |
return 3 | |
end | |
if [ -n "${NPM_CONFIG_PREFIX-}" ]; and ! (nvm_tree_contains_path "$NVM_DIR" "$NPM_CONFIG_PREFIX" >/dev/null 2>&1); then | |
nvm deactivate >/dev/null 2>&1 | |
nvm_err "nvm is not compatible with the \"NPM_CONFIG_PREFIX\" environment variable: currently set to \"$NPM_CONFIG_PREFIX\"" | |
nvm_err 'Run `unset NPM_CONFIG_PREFIX` to unset it.' | |
return 4 | |
elif ! nvm_has 'npm'; then | |
return | |
end | |
local NVM_NPM_PREFIX | |
NVM_NPM_PREFIX="$(npm config --loglevel=warn get prefix)" | |
if ! (nvm_tree_contains_path "$NVM_DIR" "$NVM_NPM_PREFIX" >/dev/null 2>&1); then | |
if [ "_$NVM_DELETE_PREFIX" = "_1" ]; then | |
npm config --loglevel=warn delete prefix | |
else | |
nvm deactivate >/dev/null 2>&1 | |
nvm_err "nvm is not compatible with the npm config \"prefix\" option: currently set to \"$NVM_NPM_PREFIX\"" | |
if nvm_has 'npm'; then | |
nvm_err "Run \`npm config delete prefix\` or \`$NVM_COMMAND\` to unset it." | |
else | |
nvm_err "Run \`$NVM_COMMAND\` to unset it." | |
end | |
return 10 | |
end | |
end | |
} | |
# Succeeds if $IOJS_VERSION represents an io.js version that has a | |
# Solaris binary, fails otherwise. | |
# Currently, only io.js 3.3.1 has a Solaris binary available, and it's the | |
# latest io.js version available. The expectation is that any potential io.js | |
# version later than v3.3.1 will also have Solaris binaries. | |
iojs_version_has_solaris_binary() { | |
local IOJS_VERSION | |
IOJS_VERSION="$1" | |
local STRIPPED_IOJS_VERSION | |
STRIPPED_IOJS_VERSION="$(nvm_strip_iojs_prefix "$IOJS_VERSION")" | |
if [ "_$STRIPPED_IOJS_VERSION" = "$IOJS_VERSION" ]; then | |
return 1 | |
end | |
# io.js started shipping Solaris binaries with io.js v3.3.1 | |
nvm_version_greater_than_or_equal_to "$STRIPPED_IOJS_VERSION" v3.3.1 | |
} | |
# Succeeds if $NODE_VERSION represents a node version that has a | |
# Solaris binary, fails otherwise. | |
# Currently, node versions starting from v0.8.6 have a Solaris binary | |
# avaliable. | |
node_version_has_solaris_binary() { | |
local NODE_VERSION | |
NODE_VERSION="$1" | |
# Error out if $NODE_VERSION is actually an io.js version | |
local STRIPPED_IOJS_VERSION | |
STRIPPED_IOJS_VERSION="$(nvm_strip_iojs_prefix "$NODE_VERSION")" | |
if [ "_$STRIPPED_IOJS_VERSION" != "_$NODE_VERSION" ]; then | |
return 1 | |
end | |
# node (unmerged) started shipping Solaris binaries with v0.8.6 and | |
# node versions v1.0.0 or greater are not considered valid "unmerged" node | |
# versions. | |
nvm_version_greater_than_or_equal_to "$NODE_VERSION" v0.8.6; and | |
! nvm_version_greater_than_or_equal_to "$NODE_VERSION" v1.0.0 | |
} | |
# Succeeds if $VERSION represents a version (node, io.js or merged) that has a | |
# Solaris binary, fails otherwise. | |
nvm_has_solaris_binary() { | |
local VERSION=$1 | |
if nvm_is_merged_node_version "$VERSION"; then | |
return 0 # All merged node versions have a Solaris binary | |
else if nvm_is_iojs_version "$VERSION"; then | |
iojs_version_has_solaris_binary "$VERSION" | |
else | |
node_version_has_solaris_binary "$VERSION" | |
end | |
} | |
nvm_sanitize_path() { | |
local SANITIZED_PATH | |
SANITIZED_PATH="${1-}" | |
if [ "_$SANITIZED_PATH" != "_$NVM_DIR" ]; then | |
SANITIZED_PATH="$(nvm_echo "$SANITIZED_PATH" | command sed -e "s#$NVM_DIR#\$NVM_DIR#g")" | |
end | |
if [ "_$SANITIZED_PATH" != "_$HOME" ]; then | |
SANITIZED_PATH="$(nvm_echo "$SANITIZED_PATH" | command sed -e "s#$HOME#\$HOME#g")" | |
end | |
nvm_echo "$SANITIZED_PATH" | |
} | |
nvm_is_natural_num() { | |
if [ -z "$1" ]; then | |
return 4 | |
end | |
switch ("$1") | |
case 0 | |
return 1 | |
case -* | |
return 3 # some BSDs return false positives for double-negated args | |
case '*' | |
[ "$1" -eq "$1" ] 2> /dev/null # returns 2 if it doesn't match | |
end | |
} | |
# Check version dir permissions | |
nvm_check_file_permissions() { | |
local ZSH_HAS_NONOMATCH_UNSET | |
ZSH_HAS_NONOMATCH_UNSET=1 | |
if nvm_has "setopt"; then | |
ZSH_HAS_NONOMATCH_UNSET="$(set +e ; setopt | nvm_grep nonomatch > /dev/null ; nvm_echo $?)" | |
setopt nonomatch | |
end | |
for FILE in $1/* $1/.[!.]* $1/..?* ; do | |
if [ -d "$FILE" ]; then | |
if ! nvm_check_file_permissions "$FILE"; then | |
if [ "${ZSH_HAS_NONOMATCH_UNSET}" -eq 1 ]; and nvm_has "setopt"; then | |
setopt nomatch | |
end | |
return 2 | |
end | |
elif [ -e "$FILE" ]; and [ ! -w "$FILE" ]; and [ ! -O "$FILE" ]; then | |
nvm_err "file is not writable or self-owned: $(nvm_sanitize_path "$FILE")" | |
if [ "${ZSH_HAS_NONOMATCH_UNSET}" -eq 1 ]; and nvm_has "setopt"; then | |
setopt nomatch | |
end | |
return 1 | |
end | |
done | |
if [ "${ZSH_HAS_NONOMATCH_UNSET}" -eq 1 ]; and nvm_has "setopt"; then | |
setopt nomatch | |
end | |
return 0 | |
} | |
nvm_cache_dir() { | |
nvm_echo "${NVM_DIR}/.cache" | |
} | |
nvm() { | |
if [ $# -lt 1 ]; then | |
nvm --help | |
return | |
end | |
local DEFAULT_IFS | |
DEFAULT_IFS=" $(echo t | tr t \\t) | |
" | |
if [ "${IFS}" != "${DEFAULT_IFS}" ]; then | |
IFS="${DEFAULT_IFS}" nvm "$@" | |
return $? | |
end | |
local COMMAND | |
COMMAND="${1-}" | |
shift | |
# initialize local variables | |
local VERSION | |
local ADDITIONAL_PARAMETERS | |
switch ($COMMAND) | |
case "help" | |
case "--help" | |
local NVM_IOJS_PREFIX | |
NVM_IOJS_PREFIX="$(nvm_iojs_prefix)" | |
local NVM_NODE_PREFIX | |
NVM_NODE_PREFIX="$(nvm_node_prefix)" | |
nvm_echo | |
nvm_echo "Node Version Manager" | |
nvm_echo | |
nvm_echo 'Note: <version> refers to any version-like string nvm understands. This includes:' | |
nvm_echo ' - full or partial version numbers, starting with an optional "v" (0.10, v0.1.2, v1)' | |
nvm_echo " - default (built-in) aliases: $NVM_NODE_PREFIX, stable, unstable, $NVM_IOJS_PREFIX, system" | |
nvm_echo ' - custom aliases you define with `nvm alias foo`' | |
nvm_echo | |
nvm_echo ' Any options that produce colorized output should respect the `--no-colors` option.' | |
nvm_echo | |
nvm_echo 'Usage:' | |
nvm_echo ' nvm --help Show this message' | |
nvm_echo ' nvm --version Print out the installed version of nvm' | |
nvm_echo ' nvm install [-s] <version> Download and install a <version>, [-s] from source. Uses .nvmrc if available' | |
nvm_echo ' --reinstall-packages-from=<version> When installing, reinstall packages installed in <node|iojs|node version number>' | |
nvm_echo ' --lts When installing, only select from LTS (long-term support) versions' | |
nvm_echo ' --lts=<LTS name> When installing, only select from versions for a specific LTS line' | |
nvm_echo ' --skip-default-packages When installing, skip the default-packages file if it exists' | |
nvm_echo ' --latest-npm After installing, attempt to upgrade to the latest working npm on the given node version' | |
nvm_echo ' nvm uninstall <version> Uninstall a version' | |
nvm_echo ' nvm uninstall --lts Uninstall using automatic LTS (long-term support) alias `lts/*`, if available.' | |
nvm_echo ' nvm uninstall --lts=<LTS name> Uninstall using automatic alias for provided LTS line, if available.' | |
nvm_echo ' nvm use [--silent] <version> Modify PATH to use <version>. Uses .nvmrc if available' | |
nvm_echo ' --lts Uses automatic LTS (long-term support) alias `lts/*`, if available.' | |
nvm_echo ' --lts=<LTS name> Uses automatic alias for provided LTS line, if available.' | |
nvm_echo ' nvm exec [--silent] <version> [<command>] Run <command> on <version>. Uses .nvmrc if available' | |
nvm_echo ' --lts Uses automatic LTS (long-term support) alias `lts/*`, if available.' | |
nvm_echo ' --lts=<LTS name> Uses automatic alias for provided LTS line, if available.' | |
nvm_echo ' nvm run [--silent] <version> [<args>] Run `node` on <version> with <args> as arguments. Uses .nvmrc if available' | |
nvm_echo ' --lts Uses automatic LTS (long-term support) alias `lts/*`, if available.' | |
nvm_echo ' --lts=<LTS name> Uses automatic alias for provided LTS line, if available.' | |
nvm_echo ' nvm current Display currently activated version' | |
nvm_echo ' nvm ls List installed versions' | |
nvm_echo ' nvm ls <version> List versions matching a given <version>' | |
nvm_echo ' nvm ls-remote List remote versions available for install' | |
nvm_echo ' --lts When listing, only show LTS (long-term support) versions' | |
nvm_echo ' nvm ls-remote <version> List remote versions available for install, matching a given <version>' | |
nvm_echo ' --lts When listing, only show LTS (long-term support) versions' | |
nvm_echo ' --lts=<LTS name> When listing, only show versions for a specific LTS line' | |
nvm_echo ' nvm version <version> Resolve the given description to a single local version' | |
nvm_echo ' nvm version-remote <version> Resolve the given description to a single remote version' | |
nvm_echo ' --lts When listing, only select from LTS (long-term support) versions' | |
nvm_echo ' --lts=<LTS name> When listing, only select from versions for a specific LTS line' | |
nvm_echo ' nvm deactivate Undo effects of `nvm` on current shell' | |
nvm_echo ' nvm alias [<pattern>] Show all aliases beginning with <pattern>' | |
nvm_echo ' nvm alias <name> <version> Set an alias named <name> pointing to <version>' | |
nvm_echo ' nvm unalias <name> Deletes the alias named <name>' | |
nvm_echo ' nvm install-latest-npm Attempt to upgrade to the latest working `npm` on the current node version' | |
nvm_echo ' nvm reinstall-packages <version> Reinstall global `npm` packages contained in <version> to current version' | |
nvm_echo ' nvm unload Unload `nvm` from shell' | |
nvm_echo ' nvm which [<version>] Display path to installed node version. Uses .nvmrc if available' | |
nvm_echo ' nvm cache dir Display path to the cache directory for nvm' | |
nvm_echo ' nvm cache clear Empty cache directory for nvm' | |
nvm_echo | |
nvm_echo 'Example:' | |
nvm_echo ' nvm install 8.0.0 Install a specific version number' | |
nvm_echo ' nvm use 8.0 Use the latest available 8.0.x release' | |
nvm_echo ' nvm run 6.10.3 app.js Run app.js using node 6.10.3' | |
nvm_echo ' nvm exec 4.8.3 node app.js Run `node app.js` with the PATH pointing to node 4.8.3' | |
nvm_echo ' nvm alias default 8.1.0 Set default node version on a shell' | |
nvm_echo ' nvm alias default node Always default to the latest available node version on a shell' | |
nvm_echo | |
nvm_echo 'Note:' | |
nvm_echo ' to remove, delete, or uninstall nvm - just remove the `$NVM_DIR` folder (usually `~/.nvm`)' | |
nvm_echo | |
case "cache" | |
switch ("${1-}") | |
case dir | |
nvm_cache_dir | |
case clear | |
local DIR | |
DIR="$(nvm_cache_dir)" | |
if command rm -rf "${DIR}"; and command mkdir -p "${DIR}"; then | |
nvm_echo 'Cache cleared.' | |
else | |
nvm_err "Unable to clear cache: ${DIR}" | |
return 1 | |
end | |
case '*' | |
cmd >&2 nvm --help | |
return 127 | |
end | |
case "debug" | |
local ZSH_HAS_SHWORDSPLIT_UNSET | |
ZSH_HAS_SHWORDSPLIT_UNSET=1 | |
if nvm_has "setopt"; then | |
ZSH_HAS_SHWORDSPLIT_UNSET="$(set +e ; setopt | nvm_grep shwordsplit > /dev/null ; nvm_echo $?)" | |
setopt shwordsplit | |
end | |
nvm_err "nvm --version: v$(nvm --version)" | |
if [ -n "${TERM_PROGRAM-}" ]; then | |
nvm_err "\$TERM_PROGRAM: $TERM_PROGRAM" | |
end | |
nvm_err "\$SHELL: $SHELL" | |
nvm_err "\$HOME: $HOME" | |
nvm_err "\$NVM_DIR: '$(nvm_sanitize_path "$NVM_DIR")'" | |
nvm_err "\$PREFIX: '$(nvm_sanitize_path "$PREFIX")'" | |
nvm_err "\$NPM_CONFIG_PREFIX: '$(nvm_sanitize_path "$NPM_CONFIG_PREFIX")'" | |
nvm_err "\$NVM_NODEJS_ORG_MIRROR: '${NVM_NODEJS_ORG_MIRROR}'" | |
nvm_err "\$NVM_IOJS_ORG_MIRROR: '${NVM_IOJS_ORG_MIRROR}'" | |
nvm_err "shell version: '$(${SHELL} --version | command head -n 1)'" | |
nvm_err "uname -a: '$(uname -a | awk '{$2=""; print}' | xargs)'" | |
if [ "$(nvm_get_os)" = "darwin" ]; and nvm_has sw_vers; then | |
nvm_err "OS version: $(sw_vers | command awk '{print $2}' | command xargs)" | |
elif [ -r "/etc/issue" ]; then | |
nvm_err "OS version: $(command head -n 1 /etc/issue | command sed 's/\\.//g')" | |
end | |
if nvm_has "curl"; then | |
nvm_err "curl: $(nvm_command_info curl), $(command curl -V | command head -n 1)" | |
else | |
nvm_err "curl: not found" | |
end | |
if nvm_has "wget"; then | |
nvm_err "wget: $(nvm_command_info wget), $(command wget -V | command head -n 1)" | |
else | |
nvm_err "wget: not found" | |
end | |
for tool in git grep awk sed cut basename rm mkdir xargs; do | |
if nvm_has "${tool}"; then | |
nvm_err "${tool}: $(nvm_command_info ${tool}), $(command ${tool} --version | command head -n 1)" | |
else | |
nvm_err "${tool}: not found" | |
end | |
done | |
local NVM_DEBUG_OUTPUT | |
for NVM_DEBUG_COMMAND in 'nvm current' 'which node' 'which iojs' 'which npm' 'npm config get prefix' 'npm root -g' | |
do | |
NVM_DEBUG_OUTPUT="$($NVM_DEBUG_COMMAND 2>&1)" | |
nvm_err "$NVM_DEBUG_COMMAND: $(nvm_sanitize_path "$NVM_DEBUG_OUTPUT")" | |
done | |
if [ "$ZSH_HAS_SHWORDSPLIT_UNSET" -eq 1 ]; and nvm_has "unsetopt"; then | |
unsetopt shwordsplit | |
end | |
return 42 | |
case "install" | |
case "i" | |
local version_not_provided | |
version_not_provided=0 | |
local NVM_OS | |
NVM_OS="$(nvm_get_os)" | |
if ! nvm_has "curl"; and ! nvm_has "wget"; then | |
nvm_err 'nvm needs curl or wget to proceed.' | |
return 1 | |
end | |
if [ $# -lt 1 ]; then | |
version_not_provided=1 | |
end | |
local nobinary | |
nobinary=0 | |
local LTS | |
local NVM_UPGRADE_NPM | |
NVM_UPGRADE_NPM=0 | |
while [ $# -ne 0 ] | |
do | |
switch ("$1") | |
case -s | |
shift # consume "-s" | |
nobinary=1 | |
case -j | |
shift # consume "-j" | |
nvm_get_make_jobs "$1" | |
shift # consume job count | |
case --lts | |
LTS='*' | |
shift | |
case --lts=* | |
LTS="${1##--lts=}" | |
shift | |
case --latest-npm | |
NVM_UPGRADE_NPM=1 | |
shift | |
case '*' | |
break # stop parsing args | |
end | |
done | |
local provided_version | |
provided_version="${1-}" | |
if [ -z "$provided_version" ]; then | |
if [ "_${LTS-}" = '_*' ]; then | |
nvm_echo 'Installing latest LTS version.' | |
if [ $# -gt 0 ]; then | |
shift | |
end | |
else if [ "_${LTS-}" != '_' ]; then | |
nvm_echo "Installing with latest version of LTS line: $LTS" | |
if [ $# -gt 0 ]; then | |
shift | |
end | |
else | |
nvm_rc_version | |
if [ $version_not_provided -eq 1 ]; and [ -z "$NVM_RC_VERSION" ]; then | |
unset NVM_RC_VERSION | |
cmd >&2 nvm --help | |
return 127 | |
end | |
provided_version="$NVM_RC_VERSION" | |
unset NVM_RC_VERSION | |
end | |
else if [ $# -gt 0 ]; then | |
shift | |
end | |
switch ("${provided_version}") | |
case 'lts/*' | |
LTS='*' | |
provided_version='' | |
case lts/* | |
LTS="${provided_version##lts/}" | |
provided_version='' | |
end | |
VERSION="$(NVM_VERSION_ONLY=true NVM_LTS="${LTS-}" nvm_remote_version "${provided_version}")" | |
if [ "${VERSION}" = 'N/A' ]; then | |
local LTS_MSG | |
local REMOTE_CMD | |
if [ "${LTS-}" = '*' ]; then | |
LTS_MSG='(with LTS filter) ' | |
REMOTE_CMD='nvm ls-remote --lts' | |
else if [ -n "${LTS-}" ]; then | |
LTS_MSG="(with LTS filter '$LTS') " | |
REMOTE_CMD="nvm ls-remote --lts=${LTS}" | |
else | |
REMOTE_CMD='nvm ls-remote' | |
end | |
nvm_err "Version '$provided_version' ${LTS_MSG-}not found - try \`${REMOTE_CMD}\` to browse available versions." | |
return 3 | |
end | |
ADDITIONAL_PARAMETERS='' | |
local PROVIDED_REINSTALL_PACKAGES_FROM | |
local REINSTALL_PACKAGES_FROM | |
local SKIP_DEFAULT_PACKAGES | |
local DEFAULT_PACKAGES | |
while [ $# -ne 0 ] | |
do | |
switch ("$1") | |
case --reinstall-packages-from=* | |
PROVIDED_REINSTALL_PACKAGES_FROM="$(nvm_echo "$1" | command cut -c 27-)" | |
REINSTALL_PACKAGES_FROM="$(nvm_version "$PROVIDED_REINSTALL_PACKAGES_FROM")"; or: | |
case --copy-packages-from=* | |
PROVIDED_REINSTALL_PACKAGES_FROM="$(nvm_echo "$1" | command cut -c 22-)" | |
REINSTALL_PACKAGES_FROM="$(nvm_version "$PROVIDED_REINSTALL_PACKAGES_FROM")"; or: | |
case --skip-default-packages | |
SKIP_DEFAULT_PACKAGES=true | |
case * | |
ADDITIONAL_PARAMETERS="$ADDITIONAL_PARAMETERS $1" | |
end | |
shift | |
done | |
if [ -z "${SKIP_DEFAULT_PACKAGES-}" ]; and [ -f "${NVM_DIR}/default-packages" ]; then | |
DEFAULT_PACKAGES="" | |
# Read lines from $NVM_DIR/default-packages | |
local line | |
while IFS=" " read -r line; do | |
# Skip empty lines. | |
[ -n "${line}" ]; or continue | |
# Skip comment lines that begin with `#`. | |
[ "$(echo "$line" | cut -c1)" != "#" ]; or continue | |
# Fail on lines that have multiple space-separated words | |
switch (${line}) | |
case *\ * | |
nvm_err "Only one package per line is allowed in the ${NVM_DIR}/default-packages file. Please remove any lines with multiple space-seperated values." | |
return 1 | |
end | |
DEFAULT_PACKAGES="${DEFAULT_PACKAGES}${line} " | |
done < "${NVM_DIR}/default-packages" | |
end | |
if [ -n "${PROVIDED_REINSTALL_PACKAGES_FROM-}" ]; and [ "$(nvm_ensure_version_prefix "${PROVIDED_REINSTALL_PACKAGES_FROM}")" = "${VERSION}" ]; then | |
nvm_err "You can't reinstall global packages from the same version of node you're installing." | |
return 4 | |
elif [ "${REINSTALL_PACKAGES_FROM-}" = 'N/A' ]; then | |
nvm_err "If --reinstall-packages-from is provided, it must point to an installed version of node." | |
return 5 | |
end | |
local FLAVOR | |
if nvm_is_iojs_version "$VERSION"; then | |
FLAVOR="$(nvm_iojs_prefix)" | |
else | |
FLAVOR="$(nvm_node_prefix)" | |
end | |
if nvm_is_version_installed "$VERSION"; then | |
nvm_err "$VERSION is already installed." | |
if nvm use "$VERSION"; then | |
if [ "${NVM_UPGRADE_NPM}" = 1 ]; then | |
nvm install-latest-npm | |
end | |
if [ -z "${SKIP_DEFAULT_PACKAGES-}" ]; and [ -n "${DEFAULT_PACKAGES-}" ]; then | |
nvm_install_default_packages "$DEFAULT_PACKAGES" | |
end | |
if [ -n "${REINSTALL_PACKAGES_FROM-}" ]; and [ "_$REINSTALL_PACKAGES_FROM" != "_N/A" ]; then | |
nvm reinstall-packages "$REINSTALL_PACKAGES_FROM" | |
end | |
end | |
if [ -n "${LTS-}" ]; then | |
nvm_ensure_default_set "lts/${LTS}" | |
else | |
nvm_ensure_default_set "$provided_version" | |
end | |
return $? | |
end | |
local EXIT_CODE | |
EXIT_CODE=-1 | |
if [ -n "${NVM_INSTALL_THIRD_PARTY_HOOK-}" ]; then | |
nvm_err '** $NVM_INSTALL_THIRD_PARTY_HOOK env var set; dispatching to third-party installation method **' | |
local NVM_METHOD_PREFERENCE | |
NVM_METHOD_PREFERENCE='binary' | |
if [ $nobinary -eq 1 ]; then | |
NVM_METHOD_PREFERENCE='source' | |
end | |
local VERSION_PATH | |
VERSION_PATH="$(nvm_version_path "${VERSION}")" | |
"${NVM_INSTALL_THIRD_PARTY_HOOK}" "${VERSION}" "${FLAVOR}" std "${NVM_METHOD_PREFERENCE}" "${VERSION_PATH}"; or { | |
EXIT_CODE=$? | |
nvm_err '*** Third-party $NVM_INSTALL_THIRD_PARTY_HOOK env var failed to install! ***' | |
return $EXIT_CODE | |
} | |
if ! nvm_is_version_installed "${VERSION}"; then | |
nvm_err '*** Third-party $NVM_INSTALL_THIRD_PARTY_HOOK env var claimed to succeed, but failed to install! ***' | |
return 33 | |
end | |
EXIT_CODE=0 | |
else | |
if [ "_$NVM_OS" = "_freebsd" ]; then | |
# node.js and io.js do not have a FreeBSD binary | |
nobinary=1 | |
nvm_err "Currently, there is no binary for $NVM_OS" | |
elif [ "_$NVM_OS" = "_sunos" ]; then | |
# Not all node/io.js versions have a Solaris binary | |
if ! nvm_has_solaris_binary "$VERSION"; then | |
nobinary=1 | |
nvm_err "Currently, there is no binary of version $VERSION for $NVM_OS" | |
end | |
end | |
# skip binary install if "nobinary" option specified. | |
if [ $nobinary -ne 1 ]; and nvm_binary_available "$VERSION"; then | |
nvm_install_binary "${FLAVOR}" std "${VERSION}" | |
EXIT_CODE=$? | |
end | |
if [ "$EXIT_CODE" -ne 0 ]; then | |
if [ -z "${NVM_MAKE_JOBS-}" ]; then | |
nvm_get_make_jobs | |
end | |
nvm_install_source "${FLAVOR}" std "${VERSION}" "${NVM_MAKE_JOBS}" "${ADDITIONAL_PARAMETERS}" | |
EXIT_CODE=$? | |
end | |
end | |
if [ "$EXIT_CODE" -eq 0 ]; and nvm_use_if_needed "${VERSION}"; and nvm_install_npm_if_needed "${VERSION}"; then | |
if [ -n "${LTS-}" ]; then | |
nvm_ensure_default_set "lts/${LTS}" | |
else | |
nvm_ensure_default_set "$provided_version" | |
end | |
if [ "${NVM_UPGRADE_NPM}" = 1 ]; then | |
nvm install-latest-npm | |
EXIT_CODE=$? | |
end | |
if [ -z "${SKIP_DEFAULT_PACKAGES-}" ]; and [ -n "${DEFAULT_PACKAGES-}" ]; then | |
nvm_install_default_packages "$DEFAULT_PACKAGES" | |
end | |
if [ -n "${REINSTALL_PACKAGES_FROM-}" ]; and [ "_$REINSTALL_PACKAGES_FROM" != "_N/A" ]; then | |
nvm reinstall-packages "$REINSTALL_PACKAGES_FROM" | |
EXIT_CODE=$? | |
end | |
else | |
EXIT_CODE=$? | |
end | |
return $EXIT_CODE | |
case "uninstall" | |
if [ $# -ne 1 ]; then | |
cmd >&2 nvm --help | |
return 127 | |
end | |
local PATTERN | |
PATTERN="${1-}" | |
switch ("${PATTERN-}") | |
case -- | |
nvm_echo '-- Is not valid' | |
case --lts | |
case 'lts/*' | |
VERSION="$(nvm_match_version "lts/*")" | |
case lts/* | |
VERSION="$(nvm_match_version "lts/${PATTERN##lts/}")" | |
case --lts=* | |
VERSION="$(nvm_match_version "lts/${PATTERN##--lts=}")" | |
case * | |
VERSION="$(nvm_version "${PATTERN}")" | |
end | |
if [ "_${VERSION}" = "_$(nvm_ls_current)" ]; then | |
if nvm_is_iojs_version "${VERSION}"; then | |
nvm_err "nvm: Cannot uninstall currently-active io.js version, ${VERSION} (inferred from ${PATTERN})." | |
else | |
nvm_err "nvm: Cannot uninstall currently-active node version, ${VERSION} (inferred from ${PATTERN})." | |
end | |
return 1 | |
end | |
if ! nvm_is_version_installed "${VERSION}"; then | |
nvm_err "${VERSION} version is not installed..." | |
return; | |
end | |
local SLUG_BINARY | |
local SLUG_SOURCE | |
if nvm_is_iojs_version "${VERSION}"; then | |
SLUG_BINARY="$(nvm_get_download_slug iojs binary std "${VERSION}")" | |
SLUG_SOURCE="$(nvm_get_download_slug iojs source std "${VERSION}")" | |
else | |
SLUG_BINARY="$(nvm_get_download_slug node binary std "${VERSION}")" | |
SLUG_SOURCE="$(nvm_get_download_slug node source std "${VERSION}")" | |
end | |
local NVM_SUCCESS_MSG | |
if nvm_is_iojs_version "${VERSION}"; then | |
NVM_SUCCESS_MSG="Uninstalled io.js $(nvm_strip_iojs_prefix "${VERSION}")" | |
else | |
NVM_SUCCESS_MSG="Uninstalled node ${VERSION}" | |
end | |
local VERSION_PATH | |
VERSION_PATH="$(nvm_version_path "${VERSION}")" | |
if ! nvm_check_file_permissions "${VERSION_PATH}"; then | |
nvm_err 'Cannot uninstall, incorrect permissions on installation folder.' | |
nvm_err 'This is usually caused by running `npm install -g` as root. Run the following commands as root to fix the permissions and then try again.' | |
nvm_err | |
nvm_err " chown -R $(whoami) \"$(nvm_sanitize_path "${VERSION_PATH}")\"" | |
nvm_err " chmod -R u+w \"$(nvm_sanitize_path "${VERSION_PATH}")\"" | |
return 1 | |
end | |
# Delete all files related to target version. | |
local CACHE_DIR | |
CACHE_DIR="$(nvm_cache_dir)" | |
command rm -rf \ | |
"${CACHE_DIR}/bin/${SLUG_BINARY}/files" \ | |
"${CACHE_DIR}/src/${SLUG_SOURCE}/files" \ | |
"${VERSION_PATH}" 2>/dev/null | |
nvm_echo "${NVM_SUCCESS_MSG}" | |
# rm any aliases that point to uninstalled version. | |
for ALIAS in $(nvm_grep -l "$VERSION" "$(nvm_alias_path)/*" 2>/dev/null) | |
do | |
nvm unalias "$(command basename "$ALIAS")" | |
done | |
case "deactivate" | |
local NEWPATH | |
NEWPATH="$(nvm_strip_path "$PATH" "/bin")" | |
if [ "_$PATH" = "_$NEWPATH" ]; then | |
nvm_err "Could not find $NVM_DIR/*/bin in \$PATH" | |
else | |
export PATH="$NEWPATH" | |
hash -r | |
nvm_echo "$NVM_DIR/*/bin removed from \$PATH" | |
end | |
if [ -n "${MANPATH-}" ]; then | |
NEWPATH="$(nvm_strip_path "$MANPATH" "/share/man")" | |
if [ "_$MANPATH" = "_$NEWPATH" ]; then | |
nvm_err "Could not find $NVM_DIR/*/share/man in \$MANPATH" | |
else | |
export MANPATH="$NEWPATH" | |
nvm_echo "$NVM_DIR/*/share/man removed from \$MANPATH" | |
end | |
end | |
if [ -n "${NODE_PATH-}" ]; then | |
NEWPATH="$(nvm_strip_path "$NODE_PATH" "/lib/node_modules")" | |
if [ "_$NODE_PATH" != "_$NEWPATH" ]; then | |
export NODE_PATH="$NEWPATH" | |
nvm_echo "$NVM_DIR/*/lib/node_modules removed from \$NODE_PATH" | |
end | |
end | |
unset NVM_BIN | |
case "use" | |
local PROVIDED_VERSION | |
local NVM_USE_SILENT | |
NVM_USE_SILENT=0 | |
local NVM_DELETE_PREFIX | |
NVM_DELETE_PREFIX=0 | |
local NVM_LTS | |
while [ $# -ne 0 ] | |
do | |
switch ("$1") | |
case --silent | |
NVM_USE_SILENT=1 | |
case --delete-prefix | |
NVM_DELETE_PREFIX=1 | |
case -- | |
nvm_echo 'No flag provided' | |
case --lts | |
NVM_LTS='*' | |
case --lts=* | |
NVM_LTS="${1##--lts=}" | |
case --* | |
nvm_echo 'Not supported' | |
case '*' | |
if [ -n "${1-}" ]; then | |
PROVIDED_VERSION="$1" | |
end | |
end | |
shift | |
done | |
if [ -n "${NVM_LTS-}" ]; then | |
VERSION="$(nvm_match_version "lts/${NVM_LTS:-*}")" | |
elif [ -z "${PROVIDED_VERSION-}" ]; then | |
nvm_rc_version | |
if [ -n "${NVM_RC_VERSION-}" ]; then | |
PROVIDED_VERSION="$NVM_RC_VERSION" | |
VERSION="$(nvm_version "$PROVIDED_VERSION")" | |
end | |
unset NVM_RC_VERSION | |
else | |
VERSION="$(nvm_match_version "$PROVIDED_VERSION")" | |
end | |
if [ -z "${VERSION}" ]; then | |
cmd >&2 nvm --help | |
return 127 | |
end | |
if [ "_$VERSION" = '_system' ]; then | |
if nvm_has_system_node; and nvm deactivate >/dev/null 2>&1; then | |
if [ $NVM_USE_SILENT -ne 1 ]; then | |
nvm_echo "Now using system version of node: $(node -v 2>/dev/null)$(nvm_print_npm_version)" | |
end | |
return | |
elif nvm_has_system_iojs; and nvm deactivate >/dev/null 2>&1; then | |
if [ $NVM_USE_SILENT -ne 1 ]; then | |
nvm_echo "Now using system version of io.js: $(iojs --version 2>/dev/null)$(nvm_print_npm_version)" | |
end | |
return | |
elif [ $NVM_USE_SILENT -ne 1 ]; then | |
nvm_err 'System version of node not found.' | |
end | |
return 127 | |
elif [ "_$VERSION" = "_∞" ]; then | |
if [ $NVM_USE_SILENT -ne 1 ]; then | |
nvm_err "The alias \"$PROVIDED_VERSION\" leads to an infinite loop. Aborting." | |
end | |
return 8 | |
end | |
if [ "${VERSION}" = 'N/A' ]; then | |
nvm_err "N/A: version \"${PROVIDED_VERSION} -> ${VERSION}\" is not yet installed." | |
nvm_err "" | |
nvm_err "You need to run \"nvm install ${PROVIDED_VERSION}\" to install it before using it." | |
return 3 | |
# This nvm_ensure_version_installed call can be a performance bottleneck | |
# on shell startup. Perhaps we can optimize it away or make it faster. | |
elif ! nvm_ensure_version_installed "${VERSION}"; then | |
return $? | |
end | |
local NVM_VERSION_DIR | |
NVM_VERSION_DIR="$(nvm_version_path "$VERSION")" | |
# Change current version | |
PATH="$(nvm_change_path "$PATH" "/bin" "$NVM_VERSION_DIR")" | |
if nvm_has manpath; then | |
if [ -z "${MANPATH-}" ]; then | |
local MANPATH | |
MANPATH=$(manpath) | |
end | |
# Change current version | |
MANPATH="$(nvm_change_path "$MANPATH" "/share/man" "$NVM_VERSION_DIR")" | |
export MANPATH | |
end | |
export PATH | |
hash -r | |
export NVM_BIN="$NVM_VERSION_DIR/bin" | |
if [ "${NVM_SYMLINK_CURRENT-}" = true ]; then | |
command rm -f "$NVM_DIR/current"; and ln -s "$NVM_VERSION_DIR" "$NVM_DIR/current" | |
end | |
local NVM_USE_OUTPUT | |
if [ $NVM_USE_SILENT -ne 1 ]; then | |
if nvm_is_iojs_version "$VERSION"; then | |
NVM_USE_OUTPUT="Now using io.js $(nvm_strip_iojs_prefix "$VERSION")$(nvm_print_npm_version)" | |
else | |
NVM_USE_OUTPUT="Now using node $VERSION$(nvm_print_npm_version)" | |
end | |
end | |
if [ "_$VERSION" != "_system" ]; then | |
local NVM_USE_CMD | |
NVM_USE_CMD="nvm use --delete-prefix" | |
if [ -n "$PROVIDED_VERSION" ]; then | |
NVM_USE_CMD="$NVM_USE_CMD $VERSION" | |
end | |
if [ $NVM_USE_SILENT -eq 1 ]; then | |
NVM_USE_CMD="$NVM_USE_CMD --silent" | |
end | |
if ! nvm_die_on_prefix "$NVM_DELETE_PREFIX" "$NVM_USE_CMD"; then | |
return 11 | |
end | |
end | |
if [ -n "${NVM_USE_OUTPUT-}" ]; then | |
nvm_echo "$NVM_USE_OUTPUT" | |
end | |
case "run" | |
local provided_version | |
local has_checked_nvmrc | |
has_checked_nvmrc=0 | |
# run given version of node | |
local NVM_SILENT | |
local NVM_LTS | |
while [ $# -gt 0 ] | |
do | |
switch ("$1") | |
case --silent | |
NVM_SILENT='--silent' ; | |
shift | |
case --lts | |
NVM_LTS='*' ; | |
shift | |
case --lts=* | |
NVM_LTS="${1##--lts=}" ; | |
shift | |
case '*' | |
if [ -n "$1" ]; then | |
break | |
else | |
shift | |
end | |
end | |
done | |
if [ $# -lt 1 ]; and [ -z "${NVM_LTS-}" ]; then | |
if [ -n "${NVM_SILENT-}" ]; then | |
nvm_rc_version >/dev/null 2>&1; and has_checked_nvmrc=1 | |
else | |
nvm_rc_version; and has_checked_nvmrc=1 | |
end | |
if [ -n "$NVM_RC_VERSION" ]; then | |
VERSION="$(nvm_version "$NVM_RC_VERSION")"; or: | |
end | |
unset NVM_RC_VERSION | |
if [ "${VERSION:-N/A}" = 'N/A' ]; then | |
cmd >&2 nvm --help | |
return 127 | |
end | |
end | |
if [ -z "${NVM_LTS-}" ]; then | |
provided_version="$1" | |
if [ -n "$provided_version" ]; then | |
VERSION="$(nvm_version "$provided_version")"; or: | |
if [ "_${VERSION:-N/A}" = '_N/A' ]; and ! nvm_is_valid_version "$provided_version"; then | |
provided_version='' | |
if [ $has_checked_nvmrc -ne 1 ]; then | |
if [ -n "${NVM_SILENT-}" ]; then | |
nvm_rc_version >/dev/null 2>&1; and has_checked_nvmrc=1 | |
else | |
nvm_rc_version; and has_checked_nvmrc=1 | |
end | |
end | |
VERSION="$(nvm_version "$NVM_RC_VERSION")"; or: | |
unset NVM_RC_VERSION | |
else | |
shift | |
end | |
end | |
end | |
local NVM_IOJS | |
if nvm_is_iojs_version "$VERSION"; then | |
NVM_IOJS=true | |
end | |
local EXIT_CODE | |
local ZSH_HAS_SHWORDSPLIT_UNSET | |
ZSH_HAS_SHWORDSPLIT_UNSET=1 | |
if nvm_has "setopt"; then | |
ZSH_HAS_SHWORDSPLIT_UNSET="$(set +e ; setopt | nvm_grep shwordsplit > /dev/null ; nvm_echo $?)" | |
setopt shwordsplit | |
end | |
local LTS_ARG | |
if [ -n "${NVM_LTS-}" ]; then | |
LTS_ARG="--lts=${NVM_LTS-}" | |
VERSION='' | |
end | |
if [ "_$VERSION" = "_N/A" ]; then | |
nvm_ensure_version_installed "$provided_version" | |
else if [ "$NVM_IOJS" = true ]; then | |
nvm exec "${NVM_SILENT-}" "${LTS_ARG-}" "$VERSION" iojs "$@" | |
else | |
nvm exec "${NVM_SILENT-}" "${LTS_ARG-}" "$VERSION" node "$@" | |
end | |
EXIT_CODE="$?" | |
if [ "$ZSH_HAS_SHWORDSPLIT_UNSET" -eq 1 ]; and nvm_has "unsetopt"; then | |
unsetopt shwordsplit | |
end | |
return $EXIT_CODE | |
case "exec" | |
local NVM_SILENT | |
local NVM_LTS | |
while [ $# -gt 0 ] | |
do | |
switch ("$1") | |
case --silent | |
NVM_SILENT='--silent' ; | |
shift | |
case --lts | |
NVM_LTS='*' ; | |
shift | |
case --lts=* | |
NVM_LTS="${1##--lts=}" ; | |
shift | |
case -- | |
break | |
case --* | |
nvm_err "Unsupported option \"$1\"." | |
return 55 | |
case '*' | |
if [ -n "$1" ]; then | |
break | |
else | |
shift | |
end | |
end | |
done | |
local provided_version | |
provided_version="$1" | |
if [ "${NVM_LTS-}" != '' ]; then | |
provided_version="lts/${NVM_LTS:-*}" | |
VERSION="$provided_version" | |
else if [ -n "$provided_version" ]; then | |
VERSION="$(nvm_version "$provided_version")"; or: | |
if [ "_$VERSION" = '_N/A' ]; and ! nvm_is_valid_version "$provided_version"; then | |
if [ -n "${NVM_SILENT-}" ]; then | |
nvm_rc_version >/dev/null 2>&1 | |
else | |
nvm_rc_version | |
end | |
provided_version="$NVM_RC_VERSION" | |
unset NVM_RC_VERSION | |
VERSION="$(nvm_version "$provided_version")"; or: | |
else | |
shift | |
end | |
end | |
nvm_ensure_version_installed "$provided_version" | |
EXIT_CODE=$? | |
if [ "$EXIT_CODE" != "0" ]; then | |
return $EXIT_CODE | |
end | |
if [ -z "${NVM_SILENT-}" ]; then | |
if [ "${NVM_LTS-}" = '*' ]; then | |
nvm_echo "Running node latest LTS -> $(nvm_version "$VERSION")$(nvm use --silent "$VERSION"; and nvm_print_npm_version)" | |
else if [ -n "${NVM_LTS-}" ]; then | |
nvm_echo "Running node LTS \"${NVM_LTS-}\" -> $(nvm_version "$VERSION")$(nvm use --silent "$VERSION"; and nvm_print_npm_version)" | |
else if nvm_is_iojs_version "$VERSION"; then | |
nvm_echo "Running io.js $(nvm_strip_iojs_prefix "$VERSION")$(nvm use --silent "$VERSION"; and nvm_print_npm_version)" | |
else | |
nvm_echo "Running node $VERSION$(nvm use --silent "$VERSION"; and nvm_print_npm_version)" | |
end | |
end | |
NODE_VERSION="$VERSION" "$NVM_DIR/nvm-exec" "$@" | |
case "ls" | |
case "list" | |
local PATTERN | |
local NVM_NO_COLORS | |
while [ $# -gt 0 ] | |
do | |
switch ("${1}") | |
case -- | |
nvm_echo "-- Is not a valid option" | |
case --no-colors | |
NVM_NO_COLORS="${1}" | |
case --* | |
nvm_err "Unsupported option \"${1}\"." | |
return 55; | |
case * | |
PATTERN="${PATTERN:-$1}" | |
end | |
shift | |
done | |
local NVM_LS_OUTPUT | |
local NVM_LS_EXIT_CODE | |
NVM_LS_OUTPUT=$(nvm_ls "${PATTERN-}") | |
NVM_LS_EXIT_CODE=$? | |
NVM_NO_COLORS="${NVM_NO_COLORS-}" nvm_print_versions "$NVM_LS_OUTPUT" | |
if [ -z "${PATTERN-}" ]; then | |
if [ -n "${NVM_NO_COLORS-}" ]; then | |
nvm alias --no-colors | |
else | |
nvm alias | |
end | |
end | |
return $NVM_LS_EXIT_CODE | |
case "ls-remote" | |
case "list-remote" | |
local NVM_LTS | |
local PATTERN | |
local NVM_NO_COLORS | |
while [ $# -gt 0 ] | |
do | |
switch ("${1-}") | |
case -- | |
nvm_echo 'No flag passed' | |
case --lts | |
NVM_LTS='*' | |
case --lts=* | |
NVM_LTS="${1##--lts=}" | |
case --no-colors | |
NVM_NO_COLORS="${1}" | |
case --* | |
nvm_err "Unsupported option \"${1}\"." | |
return 55; | |
case '*' | |
if [ -z "${PATTERN-}" ]; then | |
PATTERN="${1-}" | |
if [ -z "${NVM_LTS-}" ]; then | |
switch ("${PATTERN}") | |
case 'lts/*' | |
NVM_LTS='*' | |
case lts/* | |
NVM_LTS="${PATTERN##lts/}" | |
end | |
end | |
end | |
end | |
shift | |
done | |
local NVM_OUTPUT | |
local EXIT_CODE | |
NVM_OUTPUT="$(NVM_LTS="${NVM_LTS-}" nvm_remote_versions "${PATTERN}"; and :)" | |
EXIT_CODE=$? | |
if [ -n "$NVM_OUTPUT" ]; then | |
NVM_NO_COLORS="${NVM_NO_COLORS-}" nvm_print_versions "$NVM_OUTPUT" | |
return $EXIT_CODE | |
end | |
NVM_NO_COLORS="${NVM_NO_COLORS-}" nvm_print_versions "N/A" | |
return 3 | |
case "current" | |
nvm_version current | |
case "which" | |
local provided_version | |
provided_version="${1-}" | |
if [ $# -eq 0 ]; then | |
nvm_rc_version | |
if [ -n "${NVM_RC_VERSION}" ]; then | |
provided_version="${NVM_RC_VERSION}" | |
VERSION=$(nvm_version "${NVM_RC_VERSION}"); or: | |
end | |
unset NVM_RC_VERSION | |
else if [ "_${1}" != '_system' ]; then | |
VERSION="$(nvm_version "${provided_version}")"; or: | |
else | |
VERSION="${1-}" | |
end | |
if [ -z "${VERSION}" ]; then | |
cmd >&2 nvm --help | |
return 127 | |
end | |
if [ "_$VERSION" = '_system' ]; then | |
if nvm_has_system_iojs >/dev/null 2>&1; or nvm_has_system_node >/dev/null 2>&1; then | |
local NVM_BIN | |
NVM_BIN="$(nvm use system >/dev/null 2>&1; and command which node)" | |
if [ -n "$NVM_BIN" ]; then | |
nvm_echo "$NVM_BIN" | |
return | |
end | |
return 1 | |
end | |
nvm_err 'System version of node not found.' | |
return 127 | |
elif [ "_$VERSION" = "_∞" ]; then | |
nvm_err "The alias \"$2\" leads to an infinite loop. Aborting." | |
return 8 | |
end | |
nvm_ensure_version_installed "$provided_version" | |
EXIT_CODE=$? | |
if [ "$EXIT_CODE" != "0" ]; then | |
return $EXIT_CODE | |
end | |
local NVM_VERSION_DIR | |
NVM_VERSION_DIR="$(nvm_version_path "$VERSION")" | |
nvm_echo "$NVM_VERSION_DIR/bin/node" | |
case "alias" | |
local NVM_ALIAS_DIR | |
NVM_ALIAS_DIR="$(nvm_alias_path)" | |
local NVM_CURRENT | |
NVM_CURRENT="$(nvm_ls_current)" | |
command mkdir -p "${NVM_ALIAS_DIR}/lts" | |
local ALIAS | |
local TARGET | |
local NVM_NO_COLORS | |
ALIAS='--' | |
TARGET='--' | |
while [ $# -gt 0 ] | |
do | |
switch ("${1-}") | |
case -- | |
nvm_echo 'No flag value specified' | |
case --no-colors | |
NVM_NO_COLORS="${1}" | |
case --* | |
nvm_err "Unsupported option \"${1}\"." | |
return 55 | |
case '*' | |
if [ "${ALIAS}" = '--' ]; then | |
ALIAS="${1-}" | |
elif [ "${TARGET}" = '--' ]; then | |
TARGET="${1-}" | |
end | |
end | |
shift | |
done | |
if [ -z "${TARGET}" ]; then | |
# for some reason the empty string was explicitly passed as the target | |
# so, unalias it. | |
nvm unalias "${ALIAS}" | |
return $? | |
elif [ "${TARGET}" != '--' ]; then | |
# a target was passed: create an alias | |
if [ "${ALIAS#*\/}" != "${ALIAS}" ]; then | |
nvm_err 'Aliases in subdirectories are not supported.' | |
return 1 | |
end | |
VERSION="$(nvm_version "${TARGET}")"; or: | |
if [ "${VERSION}" = 'N/A' ]; then | |
nvm_err "! WARNING: Version '${TARGET}' does not exist." | |
end | |
nvm_make_alias "${ALIAS}" "${TARGET}" | |
NVM_NO_COLORS="${NVM_NO_COLORS-}" NVM_CURRENT="${NVM_CURRENT-}" DEFAULT=false nvm_print_formatted_alias "${ALIAS}" "${TARGET}" "$VERSION" | |
else | |
if [ "${ALIAS-}" = '--' ]; then | |
unset ALIAS | |
end | |
nvm_list_aliases "${ALIAS-}" | |
end | |
case "unalias" | |
local NVM_ALIAS_DIR | |
NVM_ALIAS_DIR="$(nvm_alias_path)" | |
command mkdir -p "$NVM_ALIAS_DIR" | |
if [ $# -ne 1 ]; then | |
cmd >&2 nvm --help | |
return 127 | |
end | |
if [ "${1#*\/}" != "${1-}" ]; then | |
nvm_err 'Aliases in subdirectories are not supported.' | |
return 1 | |
end | |
[ ! -f "$NVM_ALIAS_DIR/${1-}" ]; and nvm_err "Alias ${1-} doesn't exist!"; and return | |
local NVM_ALIAS_ORIGINAL | |
NVM_ALIAS_ORIGINAL="$(nvm_alias "${1}")" | |
command rm -f "$NVM_ALIAS_DIR/${1}" | |
nvm_echo "Deleted alias ${1} - restore it with \`nvm alias \"${1}\" \"$NVM_ALIAS_ORIGINAL\"\`" | |
case "install-latest-npm" | |
if [ $# -ne 0 ]; then | |
cmd >&2 nvm --help | |
return 127 | |
end | |
nvm_install_latest_npm | |
case "reinstall-packages" | |
case "copy-packages" | |
if [ $# -ne 1 ]; then | |
cmd >&2 nvm --help | |
return 127 | |
end | |
local PROVIDED_VERSION | |
PROVIDED_VERSION="${1-}" | |
if [ "$PROVIDED_VERSION" = "$(nvm_ls_current)" ]; or [ "$(nvm_version "$PROVIDED_VERSION"; or:)" = "$(nvm_ls_current)" ]; then | |
nvm_err 'Can not reinstall packages from the current version of node.' | |
return 2 | |
end | |
local VERSION | |
if [ "_$PROVIDED_VERSION" = "_system" ]; then | |
if ! nvm_has_system_node; and ! nvm_has_system_iojs; then | |
nvm_err 'No system version of node or io.js detected.' | |
return 3 | |
end | |
VERSION="system" | |
else | |
VERSION="$(nvm_version "$PROVIDED_VERSION")"; or: | |
end | |
local NPMLIST | |
NPMLIST="$(nvm_npm_global_modules "$VERSION")" | |
local INSTALLS | |
local LINKS | |
INSTALLS="${NPMLIST%% //// *}" | |
LINKS="${NPMLIST##* //// }" | |
nvm_echo "Reinstalling global packages from $VERSION..." | |
nvm_echo "$INSTALLS" | command xargs npm install -g --quiet | |
nvm_echo "Linking global packages from $VERSION..." | |
( | |
set -f; IFS=' | |
' # necessary to turn off variable expansion except for newlines | |
for LINK in $LINKS; do | |
set +f; unset IFS # restore variable expansion | |
if [ -n "$LINK" ]; then | |
(nvm_cd "$LINK"; and npm link) | |
end | |
done | |
) | |
case "clear-cache" | |
command rm -f "$NVM_DIR/v*" "$(nvm_version_dir)" 2>/dev/null | |
nvm_echo 'Cache cleared.' | |
case "version" | |
nvm_version "${1}" | |
case "version-remote" | |
local NVM_LTS | |
local PATTERN | |
while [ $# -gt 0 ] | |
do | |
switch ("${1-}") | |
case -- | |
nvm_echo 'No flag value provided' | |
case --lts | |
NVM_LTS='*' | |
case --lts=* | |
NVM_LTS="${1##--lts=}" | |
case --* | |
nvm_err "Unsupported option \"${1}\"." | |
return 55; | |
case '*' | |
PATTERN="${PATTERN:-${1}}" | |
end | |
shift | |
done | |
switch ("${PATTERN}") | |
case 'lts/*' | |
NVM_LTS='*' | |
unset PATTERN | |
case lts/*) | |
NVM_LTS="${PATTERN##lts/}" | |
unset PATTERN | |
end | |
NVM_VERSION_ONLY=true NVM_LTS="${NVM_LTS-}" nvm_remote_version "${PATTERN:-node}" | |
case "--version" | |
nvm_echo '0.33.6' | |
case "unload" | |
nvm deactivate >/dev/null 2>&1 | |
unset -f nvm \ | |
nvm_iojs_prefix nvm_node_prefix \ | |
nvm_add_iojs_prefix nvm_strip_iojs_prefix \ | |
nvm_is_iojs_version nvm_is_alias nvm_has_non_aliased \ | |
nvm_ls_remote nvm_ls_remote_iojs nvm_ls_remote_index_tab \ | |
nvm_ls nvm_remote_version nvm_remote_versions \ | |
nvm_install_binary nvm_install_source nvm_clang_version \ | |
nvm_get_mirror nvm_get_download_slug nvm_download_artifact \ | |
nvm_install_npm_if_needed nvm_use_if_needed nvm_check_file_permissions \ | |
nvm_print_versions nvm_compute_checksum nvm_checksum \ | |
nvm_get_checksum_alg nvm_get_checksum nvm_compare_checksum \ | |
nvm_version nvm_rc_version nvm_match_version \ | |
nvm_ensure_default_set nvm_get_arch nvm_get_os \ | |
nvm_print_implicit_alias nvm_validate_implicit_alias \ | |
nvm_resolve_alias nvm_ls_current nvm_alias \ | |
nvm_binary_available nvm_change_path nvm_strip_path \ | |
nvm_num_version_groups nvm_format_version nvm_ensure_version_prefix \ | |
nvm_normalize_version nvm_is_valid_version \ | |
nvm_ensure_version_installed nvm_cache_dir \ | |
nvm_version_path nvm_alias_path nvm_version_dir \ | |
nvm_find_nvmrc nvm_find_up nvm_tree_contains_path \ | |
nvm_version_greater nvm_version_greater_than_or_equal_to \ | |
nvm_print_npm_version nvm_install_latest_npm nvm_npm_global_modules \ | |
nvm_has_system_node nvm_has_system_iojs \ | |
nvm_download nvm_get_latest nvm_has nvm_install_default_packages nvm_curl_use_compression nvm_curl_version \ | |
nvm_supports_source_options nvm_auto nvm_supports_xz \ | |
nvm_echo nvm_err nvm_grep nvm_cd \ | |
nvm_die_on_prefix nvm_get_make_jobs nvm_get_minor_version \ | |
nvm_has_solaris_binary nvm_is_merged_node_version \ | |
nvm_is_natural_num nvm_is_version_installed \ | |
nvm_list_aliases nvm_make_alias nvm_print_alias_path \ | |
nvm_print_default_alias nvm_print_formatted_alias nvm_resolve_local_alias \ | |
nvm_sanitize_path nvm_has_colors nvm_process_parameters \ | |
node_version_has_solaris_binary iojs_version_has_solaris_binary \ | |
nvm_curl_libz_support nvm_command_info \ | |
> /dev/null 2>&1 | |
unset NVM_RC_VERSION NVM_NODEJS_ORG_MIRROR NVM_IOJS_ORG_MIRROR NVM_DIR \ | |
NVM_CD_FLAGS NVM_BIN NVM_MAKE_JOBS \ | |
> /dev/null 2>&1 | |
case * | |
cmd >&2 nvm --help | |
return 127 | |
end cmd >&2 nvm --help | |
} | |
nvm_install_default_packages() { | |
nvm_echo "Installing default global packages from ${NVM_DIR}/default-packages..." | |
if ! nvm_echo "$1" | command xargs npm install -g --quiet; then | |
nvm_err "Failed installing default packages. Please check if your default-packages file or a package in it has problems!" | |
return 1 | |
end | |
} | |
nvm_supports_source_options() { | |
# shellcheck disable=SC1091 | |
[ "_$(echo '[ $# -gt 0 ]; and echo $1' | . /dev/stdin yes 2> /dev/null)" = "_yes" ] | |
} | |
nvm_supports_xz() { | |
if [ -z "${1-}" ]; or ! command which xz >/dev/null 2>&1; then | |
return 1 | |
end | |
# all node versions v4.0.0 and later have xz | |
if nvm_is_merged_node_version "${1}"; then | |
return 0 | |
end | |
# 0.12x: node v0.12.10 and later have xz | |
if nvm_version_greater_than_or_equal_to "${1}" "0.12.10"; \ | |
and nvm_version_greater "0.13.0" "${1}"; then | |
return 0 | |
end | |
# 0.10x: node v0.10.42 and later have xz | |
if nvm_version_greater_than_or_equal_to "${1}" "0.10.42"; \ | |
and nvm_version_greater "0.11.0" "${1}"; then | |
return 0 | |
end | |
local NVM_OS | |
NVM_OS="$(nvm_get_os)" | |
switch ("${NVM_OS}") | |
case darwin | |
# darwin only has xz for io.js v2.3.2 and later | |
nvm_version_greater_than_or_equal_to "${1}" "2.3.2" | |
case * | |
nvm_version_greater_than_or_equal_to "${1}" "1.0.0" | |
end | |
return $? | |
} | |
nvm_auto() { | |
local NVM_MODE | |
NVM_MODE="${1-}" | |
local VERSION | |
if [ "_$NVM_MODE" = '_install' ]; then | |
VERSION="$(nvm_alias default 2>/dev/null; or nvm_echo)" | |
if [ -n "$VERSION" ]; then | |
nvm install "$VERSION" >/dev/null | |
elif nvm_rc_version >/dev/null 2>&1; then | |
nvm install >/dev/null | |
end | |
elif [ "_$NVM_MODE" = '_use' ]; then | |
VERSION="$(nvm_resolve_local_alias default 2>/dev/null; or nvm_echo)" | |
if [ -n "$VERSION" ]; then | |
nvm use --silent "$VERSION" >/dev/null | |
elif nvm_rc_version >/dev/null 2>&1; then | |
nvm use --silent >/dev/null | |
end | |
elif [ "_$NVM_MODE" != '_none' ]; then | |
nvm_err 'Invalid auto mode supplied.' | |
return 1 | |
end | |
} | |
nvm_process_parameters() { | |
local NVM_AUTO_MODE | |
NVM_AUTO_MODE='use' | |
if nvm_supports_source_options; then | |
while [ $# -ne 0 ] | |
do | |
switch ("$1") | |
case --install | |
NVM_AUTO_MODE='install' | |
case --no-use | |
NVM_AUTO_MODE='none' | |
end | |
shift | |
done | |
end | |
nvm_auto "$NVM_AUTO_MODE" | |
} | |
nvm_process_parameters "$@" | |
} # this ensures the entire script is downloaded # |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment