2010-04-15 09:13:33 -07:00
# Node Version Manager
2014-07-09 18:30:52 -07:00
# Implemented as a POSIX-compliant function
# Should work on sh, dash, bash, ksh, zsh
2010-04-15 09:13:33 -07:00
# To use source this file from your bash profile
#
# Implemented by Tim Caswell <tim@creationix.com>
# with much bash help from Matthew Ranney
2021-05-03 14:19:31 -07:00
# "local" warning, quote expansion warning, sed warning, `local` warning
# shellcheck disable=SC2039,SC2016,SC2001,SC3043
2015-05-11 01:46:18 -07:00
{ # this ensures the entire script is downloaded #
2021-05-03 14:19:31 -07:00
# shellcheck disable=SC3028
2014-03-23 16:42:38 +01:00
NVM_SCRIPT_SOURCE = " $_ "
2014-03-16 17:47:22 +01:00
2018-11-08 00:55:52 +01:00
nvm_is_zsh( ) {
[ -n " ${ ZSH_VERSION - } " ]
}
2019-02-24 00:03:19 +01:00
nvm_stdout_is_terminal( ) {
[ -t 1 ]
}
2016-05-05 00:17:35 -07:00
nvm_echo( ) {
2017-11-21 23:44:38 +08:00
command printf %s\\ n " $* " 2>/dev/null
2016-05-05 00:17:35 -07:00
}
[New] Added `set-colors` command. See details below:
This command allows users to replace default colors with their own custom colors.
- top-level commands modified: alias, ls, ls-remote
- helper functions added: nvm_echo_with_colors, nvm_err_with_colors,
nvm_set_colors, nvm_get_colors, nvm_print_color_code
- functions modified: nvm_print_formatted_alias, nvm_print_versions, nvm_print_alias_path (implicitly), nvm_print_default_alias (implicitly), nvm_list_aliases (implicitly)
We added tests and info on using this command to the README!
Co-authored-by: Dena Burd <29719099+gitburd@users.noreply.github.com>
Co-authored-by: Naomi Quinones <52065567+naomiquinones@users.noreply.github.com>
2020-08-17 14:56:13 -07:00
nvm_echo_with_colors( ) {
command printf %b\\ n " $* " 2>/dev/null
}
2016-11-03 10:08:24 -07:00
nvm_cd( ) {
\c d " $@ "
}
2016-05-05 00:17:35 -07:00
nvm_err( ) {
2016-05-11 15:37:21 -07:00
>& 2 nvm_echo " $@ "
2016-05-05 00:17:35 -07:00
}
[New] Added `set-colors` command. See details below:
This command allows users to replace default colors with their own custom colors.
- top-level commands modified: alias, ls, ls-remote
- helper functions added: nvm_echo_with_colors, nvm_err_with_colors,
nvm_set_colors, nvm_get_colors, nvm_print_color_code
- functions modified: nvm_print_formatted_alias, nvm_print_versions, nvm_print_alias_path (implicitly), nvm_print_default_alias (implicitly), nvm_list_aliases (implicitly)
We added tests and info on using this command to the README!
Co-authored-by: Dena Burd <29719099+gitburd@users.noreply.github.com>
Co-authored-by: Naomi Quinones <52065567+naomiquinones@users.noreply.github.com>
2020-08-17 14:56:13 -07:00
nvm_err_with_colors( ) {
>& 2 nvm_echo_with_colors " $@ "
}
2016-06-25 13:27:56 -07:00
nvm_grep( ) {
GREP_OPTIONS = '' command grep " $@ "
}
2014-03-18 01:41:02 +01:00
nvm_has( ) {
2018-05-22 20:57:40 +08:00
type " ${ 1 - } " >/dev/null 2>& 1
2013-12-12 10:46:40 +01:00
}
2017-03-20 16:57:26 +08:00
nvm_has_non_aliased( ) {
nvm_has " ${ 1 - } " && ! nvm_is_alias " ${ 1 - } "
}
2015-02-15 23:32:33 -08:00
nvm_is_alias( ) {
2015-02-20 13:35:49 -08:00
# this is intentionally not "command alias" so it works in zsh.
2018-05-22 20:57:40 +08:00
\a lias " ${ 1 - } " >/dev/null 2>& 1
2015-02-15 23:32:33 -08:00
}
2017-03-23 14:48:00 +08:00
nvm_command_info( ) {
local COMMAND
local INFO
COMMAND = " ${ 1 } "
2017-09-22 19:11:43 -07:00
if type " ${ COMMAND } " | nvm_grep -q hashed; then
2018-04-17 18:09:47 +08:00
INFO = " $( type " ${ COMMAND } " | command sed -E 's/\(|\)//g' | command awk '{print $4}' ) "
2017-09-22 19:11:43 -07:00
elif type " ${ COMMAND } " | nvm_grep -q aliased; then
2018-11-25 16:22:25 -08:00
# shellcheck disable=SC2230
2018-05-22 20:57:40 +08:00
INFO = " $( which " ${ COMMAND } " ) ( $( type " ${ COMMAND } " | command awk '{ $1=$2=$3=$4="" ;print }' | command sed -e 's/^\ *//g' -Ee "s/\`|'//g" ) ) "
2017-09-22 19:11:43 -07:00
elif type " ${ COMMAND } " | nvm_grep -q " ^ ${ COMMAND } is an alias for " ; then
2018-11-25 16:22:25 -08:00
# shellcheck disable=SC2230
2017-03-23 14:48:00 +08:00
INFO = " $( which " ${ COMMAND } " ) ( $( type " ${ COMMAND } " | command awk '{ $1=$2=$3=$4=$5="" ;print }' | command sed 's/^\ *//g' ) ) "
2022-10-20 10:49:43 +08:00
elif type " ${ COMMAND } " | nvm_grep -q " ^ ${ COMMAND } is / " ; then
2017-03-23 14:48:00 +08:00
INFO = " $( type " ${ COMMAND } " | command awk '{print $3}' ) "
else
INFO = " $( type " ${ COMMAND } " ) "
fi
nvm_echo " ${ INFO } "
}
2016-05-07 18:51:21 -07:00
nvm_has_colors( ) {
[New] Added `set-colors` command. See details below:
This command allows users to replace default colors with their own custom colors.
- top-level commands modified: alias, ls, ls-remote
- helper functions added: nvm_echo_with_colors, nvm_err_with_colors,
nvm_set_colors, nvm_get_colors, nvm_print_color_code
- functions modified: nvm_print_formatted_alias, nvm_print_versions, nvm_print_alias_path (implicitly), nvm_print_default_alias (implicitly), nvm_list_aliases (implicitly)
We added tests and info on using this command to the README!
Co-authored-by: Dena Burd <29719099+gitburd@users.noreply.github.com>
Co-authored-by: Naomi Quinones <52065567+naomiquinones@users.noreply.github.com>
2020-08-17 14:56:13 -07:00
local NVM_NUM_COLORS
2017-02-19 19:33:10 -08:00
if nvm_has tput; then
[New] Added `set-colors` command. See details below:
This command allows users to replace default colors with their own custom colors.
- top-level commands modified: alias, ls, ls-remote
- helper functions added: nvm_echo_with_colors, nvm_err_with_colors,
nvm_set_colors, nvm_get_colors, nvm_print_color_code
- functions modified: nvm_print_formatted_alias, nvm_print_versions, nvm_print_alias_path (implicitly), nvm_print_default_alias (implicitly), nvm_list_aliases (implicitly)
We added tests and info on using this command to the README!
Co-authored-by: Dena Burd <29719099+gitburd@users.noreply.github.com>
Co-authored-by: Naomi Quinones <52065567+naomiquinones@users.noreply.github.com>
2020-08-17 14:56:13 -07:00
NVM_NUM_COLORS = " $( tput -T " ${ TERM :- vt100 } " colors) "
2017-02-19 19:33:10 -08:00
fi
[New] Added `set-colors` command. See details below:
This command allows users to replace default colors with their own custom colors.
- top-level commands modified: alias, ls, ls-remote
- helper functions added: nvm_echo_with_colors, nvm_err_with_colors,
nvm_set_colors, nvm_get_colors, nvm_print_color_code
- functions modified: nvm_print_formatted_alias, nvm_print_versions, nvm_print_alias_path (implicitly), nvm_print_default_alias (implicitly), nvm_list_aliases (implicitly)
We added tests and info on using this command to the README!
Co-authored-by: Dena Burd <29719099+gitburd@users.noreply.github.com>
Co-authored-by: Naomi Quinones <52065567+naomiquinones@users.noreply.github.com>
2020-08-17 14:56:13 -07:00
[ " ${ NVM_NUM_COLORS :- -1 } " -ge 8 ]
2016-05-07 18:51:21 -07:00
}
2017-03-23 12:32:36 +08:00
nvm_curl_libz_support( ) {
2017-04-06 05:20:55 +08:00
curl -V 2>/dev/null | nvm_grep "^Features:" | nvm_grep -q "libz"
2017-03-23 12:32:36 +08:00
}
2017-06-10 15:25:26 +08:00
nvm_curl_use_compression( ) {
2018-05-22 20:57:40 +08:00
nvm_curl_libz_support && nvm_version_greater_than_or_equal_to " $( nvm_curl_version) " 7.21.0
2017-06-10 15:25:26 +08:00
}
2014-12-21 16:33:52 -08:00
nvm_get_latest( ) {
local NVM_LATEST_URL
2017-03-23 12:32:36 +08:00
local CURL_COMPRESSED_FLAG
2014-12-21 16:33:52 -08:00
if nvm_has "curl" ; then
2017-06-10 15:25:26 +08:00
if nvm_curl_use_compression; then
2017-04-09 13:44:07 +08:00
CURL_COMPRESSED_FLAG = "--compressed"
fi
2022-01-18 12:49:57 -08:00
NVM_LATEST_URL = " $( curl ${ CURL_COMPRESSED_FLAG :- } -q -w "%{url_effective}\\n" -L -s -S https://latest.nvm.sh -o /dev/null) "
2014-12-21 16:33:52 -08:00
elif nvm_has "wget" ; then
2022-01-18 12:49:57 -08:00
NVM_LATEST_URL = " $( wget -q https://latest.nvm.sh --server-response -O /dev/null 2>& 1 | command awk '/^ Location: /{DEST=$2} END{ print DEST }' ) "
2014-12-21 16:33:52 -08:00
else
2016-05-05 00:17:35 -07:00
nvm_err 'nvm needs curl or wget to proceed.'
2014-12-21 16:33:52 -08:00
return 1
fi
2016-08-07 23:31:16 -07:00
if [ -z " ${ NVM_LATEST_URL } " ] ; then
2022-01-18 12:49:57 -08:00
nvm_err "https://latest.nvm.sh did not redirect to the latest release on GitHub"
2014-12-21 16:33:52 -08:00
return 2
fi
2016-05-05 01:30:38 -07:00
nvm_echo " ${ NVM_LATEST_URL ##*/ } "
2014-12-21 16:33:52 -08:00
}
2014-07-07 15:40:59 -07:00
nvm_download( ) {
2017-03-23 12:32:36 +08:00
local CURL_COMPRESSED_FLAG
2014-07-07 10:04:20 -07:00
if nvm_has "curl" ; then
2017-06-10 15:25:26 +08:00
if nvm_curl_use_compression; then
2017-04-06 05:20:55 +08:00
CURL_COMPRESSED_FLAG = "--compressed"
fi
2017-06-27 15:04:28 +08:00
curl --fail ${ CURL_COMPRESSED_FLAG :- } -q " $@ "
2014-07-07 10:04:20 -07:00
elif nvm_has "wget" ; then
# Emulate curl with wget
2016-05-11 15:37:21 -07:00
ARGS = $( nvm_echo " $@ " | command sed -e 's/--progress-bar /--progress=bar /' \
2018-02-25 13:34:28 -08:00
-e 's/--compressed //' \
-e 's/--fail //' \
-e 's/-L //' \
-e 's/-I /--server-response /' \
-e 's/-s /-q /' \
2017-03-10 01:07:16 +08:00
-e 's/-sS /-nv /' \
2018-02-25 13:34:28 -08:00
-e 's/-o /-O /' \
-e 's/-C - /-c /' )
2016-08-23 00:28:21 -07:00
# shellcheck disable=SC2086
2014-08-08 11:48:13 -07:00
eval wget $ARGS
2014-07-07 10:04:20 -07:00
fi
}
2014-07-05 13:52:49 -07:00
2014-07-14 11:46:34 -07:00
nvm_has_system_node( ) {
2014-09-28 16:43:52 -07:00
[ " $( nvm deactivate >/dev/null 2>& 1 && command -v node) " != '' ]
2014-07-14 11:46:34 -07:00
}
2015-01-18 20:55:48 -06:00
nvm_has_system_iojs( ) {
[ " $( nvm deactivate >/dev/null 2>& 1 && command -v iojs) " != '' ]
}
2016-04-27 17:11:16 -07:00
nvm_is_version_installed( ) {
2021-01-02 00:03:24 +01:00
if [ -z " ${ 1 - } " ] ; then
return 1
fi
local NVM_NODE_BINARY
NVM_NODE_BINARY = 'node'
if [ " _ $( nvm_get_os) " = '_win' ] ; then
NVM_NODE_BINARY = 'node.exe'
fi
if [ -x " $( nvm_version_path " $1 " 2>/dev/null) /bin/ ${ NVM_NODE_BINARY } " ] ; then
return 0
fi
return 1
2016-04-27 17:11:16 -07:00
}
2015-04-12 10:59:17 -07:00
nvm_print_npm_version( ) {
2015-07-09 17:44:09 +10:00
if nvm_has "npm" ; then
2023-04-28 10:57:57 -07:00
local NPM_VERSION
NPM_VERSION = " $( npm --version 2>/dev/null) "
if [ -n " ${ NPM_VERSION } " ] ; then
command printf " (npm v ${ NPM_VERSION } ) "
fi
2015-04-12 10:59:17 -07:00
fi
}
2017-06-11 14:15:04 -07:00
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 = ''
fi
if [ -z " ${ NODE_VERSION } " ] ; then
nvm_err 'Unable to obtain node version.'
return 1
fi
local NPM_VERSION
NPM_VERSION = " $( npm --version 2>/dev/null) "
if [ -z " ${ NPM_VERSION } " ] ; then
nvm_err 'Unable to obtain npm version.'
return 2
fi
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 } "
2018-02-28 02:16:24 +08:00
NVM_NPM_CMD = 'nvm_echo npm'
2017-06-11 14:15:04 -07:00
fi
local NVM_IS_0_6
NVM_IS_0_6 = 0
if nvm_version_greater_than_or_equal_to " ${ NODE_VERSION } " 0.6.0 && nvm_version_greater 0.7.0 " ${ NODE_VERSION } " ; then
NVM_IS_0_6 = 1
fi
local NVM_IS_0_9
NVM_IS_0_9 = 0
if nvm_version_greater_than_or_equal_to " ${ NODE_VERSION } " 0.9.0 && nvm_version_greater 0.10.0 " ${ NODE_VERSION } " ; then
NVM_IS_0_9 = 1
fi
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 npm@1.3
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 && 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 npm@1.4.28
elif nvm_version_greater_than_or_equal_to " ${ NPM_VERSION } " 2.0.0 && 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
fi
fi
if [ $NVM_IS_0_9 -eq 1 ] || [ $NVM_IS_0_6 -eq 1 ] ; then
nvm_echo '* node v0.6 and v0.9 are unable to upgrade further'
2017-09-07 15:57:09 -07:00
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'
2017-06-11 14:15:04 -07:00
$NVM_NPM_CMD install -g npm@4.5
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 ] && [ $NVM_IS_0_6 -eq 0 ] ; then
2017-09-29 12:57:40 -04:00
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
fi
2018-04-24 14:39:46 -07:00
local NVM_IS_5_OR_ABOVE
NVM_IS_5_OR_ABOVE = 0
if [ $NVM_IS_4_4_OR_BELOW -eq 0 ] && nvm_version_greater_than_or_equal_to " ${ NODE_VERSION } " 5.0.0; then
NVM_IS_5_OR_ABOVE = 1
fi
local NVM_IS_6_OR_ABOVE
NVM_IS_6_OR_ABOVE = 0
2019-11-02 20:53:18 -07:00
local NVM_IS_6_2_OR_ABOVE
NVM_IS_6_2_OR_ABOVE = 0
2018-04-24 14:39:46 -07:00
if [ $NVM_IS_5_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to " ${ NODE_VERSION } " 6.0.0; then
NVM_IS_6_OR_ABOVE = 1
2019-11-02 20:53:18 -07:00
if nvm_version_greater_than_or_equal_to " ${ NODE_VERSION } " 6.2.0; then
NVM_IS_6_2_OR_ABOVE = 1
fi
2018-04-24 14:39:46 -07:00
fi
2019-11-02 20:53:18 -07:00
local NVM_IS_9_OR_ABOVE
NVM_IS_9_OR_ABOVE = 0
local NVM_IS_9_3_OR_ABOVE
NVM_IS_9_3_OR_ABOVE = 0
if [ $NVM_IS_6_2_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to " ${ NODE_VERSION } " 9.0.0; then
NVM_IS_9_OR_ABOVE = 1
if nvm_version_greater_than_or_equal_to " ${ NODE_VERSION } " 9.3.0; then
NVM_IS_9_3_OR_ABOVE = 1
fi
fi
2020-09-23 14:50:33 -07:00
local NVM_IS_10_OR_ABOVE
NVM_IS_10_OR_ABOVE = 0
if [ $NVM_IS_9_3_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to " ${ NODE_VERSION } " 10.0.0; then
NVM_IS_10_OR_ABOVE = 1
fi
2021-10-05 15:13:45 -07:00
local NVM_IS_12_LTS_OR_ABOVE
NVM_IS_12_LTS_OR_ABOVE = 0
if [ $NVM_IS_10_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to " ${ NODE_VERSION } " 12.13.0; then
NVM_IS_12_LTS_OR_ABOVE = 1
fi
local NVM_IS_13_OR_ABOVE
NVM_IS_13_OR_ABOVE = 0
if [ $NVM_IS_12_LTS_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to " ${ NODE_VERSION } " 13.0.0; then
NVM_IS_13_OR_ABOVE = 1
fi
local NVM_IS_14_LTS_OR_ABOVE
NVM_IS_14_LTS_OR_ABOVE = 0
if [ $NVM_IS_13_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to " ${ NODE_VERSION } " 14.15.0; then
NVM_IS_14_LTS_OR_ABOVE = 1
fi
2022-09-08 14:59:25 -07:00
local NVM_IS_14_17_OR_ABOVE
NVM_IS_14_17_OR_ABOVE = 0
if [ $NVM_IS_14_LTS_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to " ${ NODE_VERSION } " 14.17.0; then
NVM_IS_14_17_OR_ABOVE = 1
fi
2021-10-05 15:13:45 -07:00
local NVM_IS_15_OR_ABOVE
NVM_IS_15_OR_ABOVE = 0
if [ $NVM_IS_14_LTS_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to " ${ NODE_VERSION } " 15.0.0; then
NVM_IS_15_OR_ABOVE = 1
fi
local NVM_IS_16_OR_ABOVE
NVM_IS_16_OR_ABOVE = 0
if [ $NVM_IS_15_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to " ${ NODE_VERSION } " 16.0.0; then
NVM_IS_16_OR_ABOVE = 1
fi
2022-09-08 14:59:25 -07:00
local NVM_IS_16_LTS_OR_ABOVE
NVM_IS_16_LTS_OR_ABOVE = 0
if [ $NVM_IS_16_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to " ${ NODE_VERSION } " 16.13.0; then
NVM_IS_16_LTS_OR_ABOVE = 1
fi
local NVM_IS_17_OR_ABOVE
NVM_IS_17_OR_ABOVE = 0
if [ $NVM_IS_16_LTS_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to " ${ NODE_VERSION } " 17.0.0; then
NVM_IS_17_OR_ABOVE = 1
fi
local NVM_IS_18_OR_ABOVE
NVM_IS_18_OR_ABOVE = 0
if [ $NVM_IS_17_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to " ${ NODE_VERSION } " 18.0.0; then
NVM_IS_18_OR_ABOVE = 1
fi
2023-07-26 13:15:01 -07:00
local NVM_IS_18_17_OR_ABOVE
NVM_IS_18_17_OR_ABOVE = 0
if [ $NVM_IS_18_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to " ${ NODE_VERSION } " 18.17.0; then
NVM_IS_18_17_OR_ABOVE = 1
fi
local NVM_IS_19_OR_ABOVE
NVM_IS_19_OR_ABOVE = 0
if [ $NVM_IS_18_17_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to " ${ NODE_VERSION } " 19.0.0; then
NVM_IS_19_OR_ABOVE = 1
fi
local NVM_IS_20_5_OR_ABOVE
NVM_IS_20_5_OR_ABOVE = 0
if [ $NVM_IS_19_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to " ${ NODE_VERSION } " 20.5.0; then
NVM_IS_20_5_OR_ABOVE = 1
fi
2020-09-23 14:50:33 -07:00
2019-11-02 20:53:18 -07:00
if [ $NVM_IS_4_4_OR_BELOW -eq 1 ] || {
[ $NVM_IS_5_OR_ABOVE -eq 1 ] && nvm_version_greater 5.10.0 " ${ NODE_VERSION } " ; \
} ; then
2017-09-02 14:04:37 -07:00
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 npm@5.3
2017-12-12 00:13:00 -08:00
elif [ $NVM_IS_4_4_OR_BELOW -eq 0 ] && nvm_version_greater 4.7.0 " ${ NODE_VERSION } " ; then
2018-04-25 10:08:41 -07:00
nvm_echo '* `npm` `v5.4.1` is the last version that works on `node` `v4.5` and `v4.6`'
$NVM_NPM_CMD install -g npm@5.4.1
2018-04-24 14:39:46 -07:00
elif [ $NVM_IS_6_OR_ABOVE -eq 0 ] ; then
nvm_echo '* `npm` `v5.x` is the last version that works on `node` below `v6.0.0`'
$NVM_NPM_CMD install -g npm@5
2019-11-02 20:53:18 -07:00
elif \
{ [ $NVM_IS_6_OR_ABOVE -eq 1 ] && [ $NVM_IS_6_2_OR_ABOVE -eq 0 ] ; } \
|| { [ $NVM_IS_9_OR_ABOVE -eq 1 ] && [ $NVM_IS_9_3_OR_ABOVE -eq 0 ] ; } \
; then
nvm_echo '* `npm` `v6.9` is the last version that works on `node` `v6.0.x`, `v6.1.x`, `v9.0.x`, `v9.1.x`, or `v9.2.x`'
$NVM_NPM_CMD install -g npm@6.9
2020-09-23 14:50:33 -07:00
elif [ $NVM_IS_10_OR_ABOVE -eq 0 ] ; then
2022-12-21 14:28:15 -08:00
if nvm_version_greater 4.4.4 " ${ NPM_VERSION } " ; then
nvm_echo '* `npm` `v4.4.4` or later is required to install npm v6.14.18'
$NVM_NPM_CMD install -g npm@4
fi
2020-09-23 14:50:33 -07:00
nvm_echo '* `npm` `v6.x` is the last version that works on `node` below `v10.0.0`'
$NVM_NPM_CMD install -g npm@6
2021-10-05 15:13:45 -07:00
elif \
[ $NVM_IS_12_LTS_OR_ABOVE -eq 0 ] \
|| { [ $NVM_IS_13_OR_ABOVE -eq 1 ] && [ $NVM_IS_14_LTS_OR_ABOVE -eq 0 ] ; } \
|| { [ $NVM_IS_15_OR_ABOVE -eq 1 ] && [ $NVM_IS_16_OR_ABOVE -eq 0 ] ; } \
; then
nvm_echo '* `npm` `v7.x` is the last version that works on `node` `v13`, `v15`, below `v12.13`, or `v14.0` - `v14.15`'
$NVM_NPM_CMD install -g npm@7
2022-09-08 14:59:25 -07:00
elif \
{ [ $NVM_IS_12_LTS_OR_ABOVE -eq 1 ] && [ $NVM_IS_13_OR_ABOVE -eq 0 ] ; } \
|| { [ $NVM_IS_14_LTS_OR_ABOVE -eq 1 ] && [ $NVM_IS_14_17_OR_ABOVE -eq 0 ] ; } \
|| { [ $NVM_IS_16_OR_ABOVE -eq 1 ] && [ $NVM_IS_16_LTS_OR_ABOVE -eq 0 ] ; } \
|| { [ $NVM_IS_17_OR_ABOVE -eq 1 ] && [ $NVM_IS_18_OR_ABOVE -eq 0 ] ; } \
; then
nvm_echo '* `npm` `v8.x` is the last version that works on `node` `v12`, `v14.13` - `v14.16`, or `v16.0` - `v16.12`'
$NVM_NPM_CMD install -g npm@8
2023-07-26 13:15:01 -07:00
elif \
[ $NVM_IS_18_17_OR_ABOVE -eq 0 ] \
|| { [ $NVM_IS_19_OR_ABOVE -eq 1 ] && [ $NVM_IS_20_5_OR_ABOVE -eq 0 ] ; } \
; then
nvm_echo '* `npm` `v9.x` is the last version that works on `node` `< v18.17`, `v19`, or `v20.0` - `v20.4`'
$NVM_NPM_CMD install -g npm@9
2017-09-02 14:04:37 -07:00
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
fi
2017-06-11 14:15:04 -07:00
fi
nvm_echo " * npm upgraded to: v $( npm --version 2>/dev/null) "
}
2012-07-07 13:48:05 +02:00
# Make zsh glob matching behave same as bash
# This fixes the "zsh: no matches found" errors
2016-01-19 13:03:11 -05:00
if [ -z " ${ NVM_CD_FLAGS - } " ] ; then
2016-01-17 15:12:02 -08:00
export NVM_CD_FLAGS = ''
fi
2018-11-08 00:55:52 +01:00
if nvm_is_zsh; then
2014-02-15 15:57:51 -08:00
NVM_CD_FLAGS = "-q"
2013-09-19 02:50:20 +10:00
fi
2014-03-16 17:47:22 +01:00
# Auto detect the NVM_DIR when not set
2016-01-17 15:12:02 -08:00
if [ -z " ${ NVM_DIR - } " ] ; then
2016-05-10 01:11:17 -07:00
# shellcheck disable=SC2128
2016-08-07 23:31:16 -07:00
if [ -n " ${ BASH_SOURCE - } " ] ; then
2021-05-03 14:19:31 -07:00
# shellcheck disable=SC2169,SC3054
2014-03-23 16:42:38 +01:00
NVM_SCRIPT_SOURCE = " ${ BASH_SOURCE [0] } "
2014-02-18 21:51:39 -08:00
fi
2022-12-22 13:00:12 -08:00
# shellcheck disable=SC2086
2018-05-22 20:57:40 +08:00
NVM_DIR = " $( nvm_cd ${ NVM_CD_FLAGS } " $( dirname " ${ NVM_SCRIPT_SOURCE :- $0 } " ) " >/dev/null && \p wd) "
2015-10-12 16:02:35 -07:00
export NVM_DIR
2018-04-12 14:14:58 +08:00
else
2018-04-24 13:24:08 -07:00
# https://unix.stackexchange.com/a/198289
case $NVM_DIR in
*[ !/] */)
NVM_DIR = " ${ NVM_DIR % " ${ NVM_DIR ##*[!/] } " } "
export NVM_DIR
nvm_err "Warning: \$NVM_DIR should not have trailing slashes"
; ;
esac
2012-08-07 23:22:27 -07:00
fi
2018-05-22 20:57:40 +08:00
unset NVM_SCRIPT_SOURCE 2>/dev/null
2014-03-16 17:47:22 +01:00
2014-07-14 11:12:58 -07:00
nvm_tree_contains_path( ) {
local tree
2016-08-07 23:31:16 -07:00
tree = " ${ 1 - } "
2014-07-24 15:28:33 -04:00
local node_path
2016-08-07 23:31:16 -07:00
node_path = " ${ 2 - } "
2014-08-21 17:15:53 -07:00
2016-08-07 23:31:16 -07:00
if [ " @ ${ tree } @ " = "@@" ] || [ " @ ${ node_path } @ " = "@@" ] ; then
2016-05-05 00:17:35 -07:00
nvm_err "both the tree and the node path are required"
2014-08-21 17:15:53 -07:00
return 2
fi
2021-01-02 00:03:24 +01:00
local previous_pathdir
previous_pathdir = " ${ node_path } "
2014-07-14 11:12:58 -07:00
local pathdir
2021-01-02 00:03:24 +01:00
pathdir = $( dirname " ${ previous_pathdir } " )
while [ " ${ pathdir } " != '' ] && [ " ${ pathdir } " != '.' ] && [ " ${ pathdir } " != '/' ] &&
[ " ${ pathdir } " != " ${ tree } " ] && [ " ${ pathdir } " != " ${ previous_pathdir } " ] ; do
previous_pathdir = " ${ pathdir } "
pathdir = $( dirname " ${ previous_pathdir } " )
2014-07-14 11:12:58 -07:00
done
2016-08-07 23:31:16 -07:00
[ " ${ pathdir } " = " ${ tree } " ]
2014-07-14 11:12:58 -07:00
}
2020-08-23 14:40:42 -07:00
nvm_find_project_dir( ) {
local path_
path_ = " ${ PWD } "
2023-04-08 17:24:41 +01:00
while [ " ${ path_ } " != "" ] && [ " ${ path_ } " != '.' ] && [ ! -f " ${ path_ } /package.json " ] && [ ! -d " ${ path_ } /node_modules " ] ; do
2020-08-23 14:40:42 -07:00
path_ = ${ path_ %/* }
done
nvm_echo " ${ path_ } "
}
2014-04-30 10:31:51 +02:00
# Traverse up in directory tree to find containing folder
nvm_find_up( ) {
2017-11-20 22:31:12 +08:00
local path_
path_ = " ${ PWD } "
2023-04-08 17:24:41 +01:00
while [ " ${ path_ } " != "" ] && [ " ${ path_ } " != '.' ] && [ ! -f " ${ path_ } / ${ 1 - } " ] ; do
2017-11-20 22:31:12 +08:00
path_ = ${ path_ %/* }
2014-04-28 23:27:10 -07:00
done
2017-11-20 22:31:12 +08:00
nvm_echo " ${ path_ } "
2014-04-30 10:31:51 +02:00
}
nvm_find_nvmrc( ) {
2014-06-22 15:42:17 -07:00
local dir
dir = " $( nvm_find_up '.nvmrc' ) "
2016-08-07 23:31:16 -07:00
if [ -e " ${ dir } /.nvmrc " ] ; then
nvm_echo " ${ dir } /.nvmrc "
2014-04-30 10:31:51 +02:00
fi
2014-04-28 14:48:36 -07:00
}
2013-01-22 13:28:13 +01:00
# Obtain nvm version from rc file
2014-03-18 01:41:02 +01:00
nvm_rc_version( ) {
2014-09-28 16:40:53 -07:00
export NVM_RC_VERSION = ''
2014-06-22 15:42:17 -07:00
local NVMRC_PATH
NVMRC_PATH = " $( nvm_find_nvmrc) "
2017-04-06 03:55:42 +08:00
if [ ! -e " ${ NVMRC_PATH } " ] ; then
2020-08-08 17:27:46 -07:00
if [ " ${ NVM_SILENT :- 0 } " -ne 1 ] ; then
nvm_err "No .nvmrc file found"
fi
2014-09-15 07:51:00 -07:00
return 1
2013-01-22 13:28:13 +01:00
fi
2018-02-20 03:34:43 +08:00
NVM_RC_VERSION = " $( command head -n 1 " ${ NVMRC_PATH } " | command tr -d '\r' ) " || command printf ''
2018-12-03 13:59:19 +08:00
if [ -z " ${ NVM_RC_VERSION } " ] ; then
2020-08-08 17:27:46 -07:00
if [ " ${ NVM_SILENT :- 0 } " -ne 1 ] ; then
nvm_err " Warning: empty .nvmrc file found at \" ${ NVMRC_PATH } \" "
fi
2017-04-06 03:55:42 +08:00
return 2
fi
2020-08-08 17:27:46 -07:00
if [ " ${ NVM_SILENT :- 0 } " -ne 1 ] ; then
nvm_echo " Found ' ${ NVMRC_PATH } ' with version < ${ NVM_RC_VERSION } > "
fi
2013-01-22 13:28:13 +01:00
}
2016-11-14 12:28:41 +08:00
nvm_clang_version( ) {
clang --version | command awk '{ if ($2 == "version") print $3; else if ($3 == "version") print $4 }' | command sed 's/-.*$//g'
}
2017-06-10 15:25:26 +08:00
nvm_curl_version( ) {
curl -V | command awk '{ if ($1 == "curl") print $2 }' | command sed 's/-.*$//g'
}
2014-08-20 00:01:06 -07:00
nvm_version_greater( ) {
2016-05-05 01:27:17 -07:00
command awk ' BEGIN {
if ( ARGV[ 1] = = "" || ARGV[ 2] = = "" ) exit( 1)
split( ARGV[ 1] , a, /\. /) ;
split( ARGV[ 2] , b, /\. /) ;
for ( i = 1; i<= 3; i++) {
if ( a[ i] && a[ i] !~ /^[ 0-9] +$/) exit( 2) ;
if ( b[ i] && b[ i] !~ /^[ 0-9] +$/) { exit( 0) ; }
if ( a[ i] < b[ i] ) exit( 3) ;
else if ( a[ i] > b[ i] ) exit( 0) ;
}
exit( 4)
2018-05-22 20:57:40 +08:00
} ' " ${ 1 #v } " " ${ 2 #v } "
2014-08-20 00:01:06 -07:00
}
2014-09-19 10:09:45 -07:00
nvm_version_greater_than_or_equal_to( ) {
2016-05-05 01:27:17 -07:00
command awk ' BEGIN {
if ( ARGV[ 1] = = "" || ARGV[ 2] = = "" ) exit( 1)
split( ARGV[ 1] , a, /\. /) ;
split( ARGV[ 2] , b, /\. /) ;
for ( i = 1; i<= 3; i++) {
if ( a[ i] && a[ i] !~ /^[ 0-9] +$/) exit( 2) ;
if ( a[ i] < b[ i] ) exit( 3) ;
else if ( a[ i] > b[ i] ) exit( 0) ;
}
exit( 0)
2018-05-22 20:57:40 +08:00
} ' " ${ 1 #v } " " ${ 2 #v } "
2014-09-19 10:09:45 -07:00
}
2014-08-19 01:53:39 -07:00
nvm_version_dir( ) {
2015-01-10 20:10:00 -08:00
local NVM_WHICH_DIR
2016-08-07 23:31:16 -07:00
NVM_WHICH_DIR = " ${ 1 - } "
if [ -z " ${ NVM_WHICH_DIR } " ] || [ " ${ NVM_WHICH_DIR } " = "new" ] ; then
nvm_echo " ${ NVM_DIR } /versions/node "
elif [ " _ ${ NVM_WHICH_DIR } " = "_iojs" ] ; then
nvm_echo " ${ NVM_DIR } /versions/io.js "
elif [ " _ ${ NVM_WHICH_DIR } " = "_old" ] ; then
nvm_echo " ${ NVM_DIR } "
2014-08-19 01:53:39 -07:00
else
2016-05-05 00:17:35 -07:00
nvm_err 'unknown version dir'
2014-08-19 01:53:39 -07:00
return 3
fi
}
2015-01-12 01:27:53 -08:00
nvm_alias_path( ) {
2016-05-05 00:17:35 -07:00
nvm_echo " $( nvm_version_dir old) /alias "
2015-01-12 01:27:53 -08:00
}
2014-08-19 00:55:54 -07:00
nvm_version_path( ) {
local VERSION
2016-08-07 23:31:16 -07:00
VERSION = " ${ 1 - } "
if [ -z " ${ VERSION } " ] ; then
2016-05-05 00:17:35 -07:00
nvm_err 'version is required'
2014-08-19 01:56:34 -07:00
return 3
2016-08-07 23:31:16 -07:00
elif nvm_is_iojs_version " ${ VERSION } " ; then
nvm_echo " $( nvm_version_dir iojs) / $( nvm_strip_iojs_prefix " ${ VERSION } " ) "
elif nvm_version_greater 0.12.0 " ${ VERSION } " ; then
nvm_echo " $( nvm_version_dir old) / ${ VERSION } "
2014-08-20 00:18:29 -07:00
else
2016-08-07 23:31:16 -07:00
nvm_echo " $( nvm_version_dir new) / ${ VERSION } "
2014-08-19 00:55:54 -07:00
fi
}
2015-02-21 20:03:06 -08:00
nvm_ensure_version_installed( ) {
local PROVIDED_VERSION
2016-08-07 23:31:16 -07:00
PROVIDED_VERSION = " ${ 1 - } "
2022-03-22 18:58:18 +05:30
local IS_VERSION_FROM_NVMRC
IS_VERSION_FROM_NVMRC = " ${ 2 - } "
2017-03-31 00:52:56 -07:00
if [ " ${ PROVIDED_VERSION } " = 'system' ] ; then
if nvm_has_system_iojs || nvm_has_system_node; then
return 0
fi
nvm_err "N/A: no system version of node/io.js is installed."
return 1
fi
2015-02-21 20:03:06 -08:00
local LOCAL_VERSION
2015-06-28 18:15:15 -07:00
local EXIT_CODE
2016-08-07 23:31:16 -07:00
LOCAL_VERSION = " $( nvm_version " ${ PROVIDED_VERSION } " ) "
2015-06-28 18:15:15 -07:00
EXIT_CODE = " $? "
2015-02-21 20:03:06 -08:00
local NVM_VERSION_DIR
2016-08-07 23:31:16 -07:00
if [ " ${ EXIT_CODE } " != "0" ] || ! nvm_is_version_installed " ${ LOCAL_VERSION } " ; then
2016-11-25 00:56:28 -06:00
if VERSION = " $( nvm_resolve_alias " ${ PROVIDED_VERSION } " ) " ; then
2016-08-07 23:31:16 -07:00
nvm_err " N/A: version \" ${ PROVIDED_VERSION } -> ${ VERSION } \" is not yet installed. "
2015-02-21 20:03:06 -08:00
else
2015-09-11 10:42:47 +09:00
local PREFIXED_VERSION
2016-08-07 23:31:16 -07:00
PREFIXED_VERSION = " $( nvm_ensure_version_prefix " ${ PROVIDED_VERSION } " ) "
2016-07-05 20:34:08 -03:00
nvm_err " N/A: version \" ${ PREFIXED_VERSION :- $PROVIDED_VERSION } \" is not yet installed. "
2015-02-21 20:03:06 -08:00
fi
2017-03-28 15:27:49 +08:00
nvm_err ""
2022-03-22 18:58:18 +05:30
if [ " ${ IS_VERSION_FROM_NVMRC } " != '1' ] ; then
nvm_err " You need to run \`nvm install ${ PROVIDED_VERSION } \` to install and use it. "
else
nvm_err 'You need to run `nvm install` to install and use the node version specified in `.nvmrc`.'
fi
2015-02-21 20:03:06 -08:00
return 1
fi
}
2011-01-22 17:48:57 +01:00
# Expand a version using the version cache
2013-06-22 23:11:43 +10:00
nvm_version( ) {
2014-06-22 15:42:17 -07:00
local PATTERN
2016-08-07 23:31:16 -07:00
PATTERN = " ${ 1 - } "
2014-02-16 01:05:24 -08:00
local VERSION
2014-02-15 15:57:51 -08:00
# The default version is the current one
2016-08-07 23:31:16 -07:00
if [ -z " ${ PATTERN } " ] ; then
2014-02-15 15:57:51 -08:00
PATTERN = 'current'
fi
2011-11-04 20:36:04 +00:00
2016-08-07 23:31:16 -07:00
if [ " ${ PATTERN } " = "current" ] ; then
2014-07-18 18:16:21 -07:00
nvm_ls_current
return $?
fi
2015-04-04 14:31:56 -07:00
local NVM_NODE_PREFIX
NVM_NODE_PREFIX = " $( nvm_node_prefix) "
2016-08-07 23:31:16 -07:00
case " _ ${ PATTERN } " in
" _ ${ NVM_NODE_PREFIX } " | " _ ${ NVM_NODE_PREFIX } - " )
2015-01-19 10:05:36 -08:00
PATTERN = "stable"
; ;
esac
2016-08-07 23:31:16 -07:00
VERSION = " $( nvm_ls " ${ PATTERN } " | command tail -1) "
if [ -z " ${ VERSION } " ] || [ " _ ${ VERSION } " = "_N/A" ] ; then
2016-05-05 00:17:35 -07:00
nvm_echo "N/A"
2018-05-22 20:57:40 +08:00
return 3
2014-02-15 15:57:51 -08:00
fi
2017-04-06 03:55:42 +08:00
nvm_echo " ${ VERSION } "
2011-11-04 20:36:04 +00:00
}
2013-06-22 23:11:43 +10:00
nvm_remote_version( ) {
2014-06-22 15:42:17 -07:00
local PATTERN
2016-08-07 23:31:16 -07:00
PATTERN = " ${ 1 - } "
2014-02-16 01:05:24 -08:00
local VERSION
2018-05-22 20:57:40 +08:00
if nvm_validate_implicit_alias " ${ PATTERN } " 2>/dev/null; then
2016-08-07 23:31:16 -07:00
case " ${ PATTERN } " in
" $( nvm_iojs_prefix) " )
2016-09-16 23:16:58 -07:00
VERSION = " $( NVM_LTS = " ${ NVM_LTS - } " nvm_ls_remote_iojs | command tail -1) " && :
2015-01-21 10:48:20 -08:00
; ;
*)
2016-09-16 23:16:58 -07:00
VERSION = " $( NVM_LTS = " ${ NVM_LTS - } " nvm_ls_remote " ${ PATTERN } " ) " && :
2015-01-21 10:48:20 -08:00
; ;
esac
2015-02-10 14:41:45 -08:00
else
2016-08-07 23:31:16 -07:00
VERSION = " $( NVM_LTS = " ${ NVM_LTS - } " nvm_remote_versions " ${ PATTERN } " | command tail -1) "
2015-01-13 02:22:22 -08:00
fi
2016-04-18 01:00:55 -07:00
if [ -n " ${ NVM_VERSION_ONLY - } " ] ; then
command awk ' BEGIN {
n = split( ARGV[ 1] , a) ;
print a[ 1]
} ' " ${ VERSION } "
else
nvm_echo " ${ VERSION } "
fi
2016-08-07 23:31:16 -07:00
if [ " ${ VERSION } " = 'N/A' ] ; then
2014-06-20 11:45:14 -07:00
return 3
2014-02-15 15:57:51 -08:00
fi
2012-10-04 10:32:36 -07:00
}
2015-01-21 10:48:20 -08:00
nvm_remote_versions( ) {
2015-04-04 14:53:38 -07:00
local NVM_IOJS_PREFIX
NVM_IOJS_PREFIX = " $( nvm_iojs_prefix) "
2016-09-15 23:52:01 -07:00
local NVM_NODE_PREFIX
NVM_NODE_PREFIX = " $( nvm_node_prefix) "
2015-01-21 10:48:20 -08:00
local PATTERN
2016-08-07 23:31:16 -07:00
PATTERN = " ${ 1 - } "
2016-09-15 23:52:01 -07:00
local NVM_FLAVOR
if [ -n " ${ NVM_LTS - } " ] ; then
NVM_FLAVOR = " ${ NVM_NODE_PREFIX } "
fi
2016-08-07 23:31:16 -07:00
case " ${ PATTERN } " in
" ${ NVM_IOJS_PREFIX } " | "io.js" )
2018-01-26 11:30:57 +08:00
NVM_FLAVOR = " ${ NVM_IOJS_PREFIX } "
unset PATTERN
2015-01-21 10:48:20 -08:00
; ;
2016-09-15 23:52:01 -07:00
" ${ NVM_NODE_PREFIX } " )
2018-01-26 11:30:57 +08:00
NVM_FLAVOR = " ${ NVM_NODE_PREFIX } "
unset PATTERN
2015-01-21 10:48:20 -08:00
; ;
esac
2018-05-22 20:57:40 +08:00
if nvm_validate_implicit_alias " ${ PATTERN - } " 2>/dev/null; then
2016-09-15 23:52:01 -07:00
nvm_err 'Implicit aliases are not supported in nvm_remote_versions.'
return 1
fi
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 = ''
2016-12-26 21:57:55 -08:00
if [ -z " ${ NVM_FLAVOR - } " ] || [ " ${ NVM_FLAVOR - } " = " ${ NVM_NODE_PREFIX } " ] ; then
2016-09-15 23:52:01 -07:00
local NVM_LS_REMOTE_OUTPUT
2020-02-21 21:27:13 -08:00
# extra space is needed here to avoid weird behavior when `nvm_ls_remote` ends in a `*`
NVM_LS_REMOTE_OUTPUT = " $( NVM_LTS = " ${ NVM_LTS - } " nvm_ls_remote " ${ PATTERN - } " ) " && :
2016-09-15 23:52:01 -07:00
NVM_LS_REMOTE_EXIT_CODE = $?
# split output into two
NVM_LS_REMOTE_PRE_MERGED_OUTPUT = " ${ NVM_LS_REMOTE_OUTPUT %%v4 \. 0 \. 0 * } "
2021-11-19 08:53:43 -08:00
NVM_LS_REMOTE_POST_MERGED_OUTPUT = " ${ NVM_LS_REMOTE_OUTPUT # " $NVM_LS_REMOTE_PRE_MERGED_OUTPUT " } "
2016-09-15 23:52:01 -07:00
fi
local NVM_LS_REMOTE_IOJS_EXIT_CODE
NVM_LS_REMOTE_IOJS_EXIT_CODE = 0
local NVM_LS_REMOTE_IOJS_OUTPUT
2017-11-23 10:02:37 -06:00
NVM_LS_REMOTE_IOJS_OUTPUT = ''
2018-05-31 23:49:15 -07:00
if [ -z " ${ NVM_LTS - } " ] && {
[ -z " ${ NVM_FLAVOR - } " ] || [ " ${ NVM_FLAVOR - } " = " ${ NVM_IOJS_PREFIX } " ] ;
} ; then
2016-09-15 23:52:01 -07:00
NVM_LS_REMOTE_IOJS_OUTPUT = $( nvm_ls_remote_iojs " ${ PATTERN - } " ) && :
NVM_LS_REMOTE_IOJS_EXIT_CODE = $?
fi
2020-02-21 21:27:13 -08:00
# the `sed` removes both blank lines, and only-whitespace lines (see "weird behavior" ~19 lines up)
2016-09-15 23:52:01 -07:00
VERSIONS = " $( nvm_echo " ${ NVM_LS_REMOTE_PRE_MERGED_OUTPUT }
${ NVM_LS_REMOTE_IOJS_OUTPUT }
2020-02-21 21:27:13 -08:00
${ NVM_LS_REMOTE_POST_MERGED_OUTPUT } " | nvm_grep -v " N/A" | command sed '/^ * $/d') "
2016-09-15 23:52:01 -07:00
2016-08-07 23:31:16 -07:00
if [ -z " ${ VERSIONS } " ] ; then
2016-05-05 00:17:35 -07:00
nvm_echo 'N/A'
2015-01-21 10:48:20 -08:00
return 3
fi
2020-02-21 21:27:13 -08:00
# the `sed` is to remove trailing whitespaces (see "weird behavior" ~25 lines up)
nvm_echo " ${ VERSIONS } " | command sed 's/ *$//g'
2022-12-22 13:00:12 -08:00
# shellcheck disable=SC2317
2016-09-15 23:52:01 -07:00
return $NVM_LS_REMOTE_EXIT_CODE || $NVM_LS_REMOTE_IOJS_EXIT_CODE
2015-01-21 10:48:20 -08:00
}
2015-02-01 13:01:40 -08:00
nvm_is_valid_version( ) {
2018-05-22 20:57:40 +08:00
if nvm_validate_implicit_alias " ${ 1 - } " 2>/dev/null; then
2015-02-01 13:01:40 -08:00
return 0
fi
2016-08-07 23:31:16 -07:00
case " ${ 1 - } " in
2015-07-03 21:10:12 -07:00
" $( nvm_iojs_prefix) " | \
" $( nvm_node_prefix) " )
2015-02-01 13:01:40 -08:00
return 0
; ;
*)
local VERSION
2016-08-07 23:31:16 -07:00
VERSION = " $( nvm_strip_iojs_prefix " ${ 1 - } " ) "
nvm_version_greater_than_or_equal_to " ${ VERSION } " 0
2015-02-01 13:01:40 -08:00
; ;
esac
}
2012-10-21 22:57:32 +02:00
nvm_normalize_version( ) {
2016-05-05 01:30:38 -07:00
command awk ' BEGIN {
split( ARGV[ 1] , a, /\. /) ;
printf "%d%06d%06d\n" , a[ 1] , a[ 2] , a[ 3] ;
exit;
} ' " ${ 1 #v } "
2012-10-21 22:57:32 +02:00
}
2021-12-16 22:55:02 -08:00
nvm_normalize_lts( ) {
local LTS
LTS = " ${ 1 - } "
if [ " $( expr " ${ LTS } " : '^lts/-[1-9][0-9]*$' ) " -gt 0 ] ; then
local N
N = " $( echo " ${ LTS } " | cut -d '-' -f 2) "
N = $(( N+1))
local NVM_ALIAS_DIR
NVM_ALIAS_DIR = " $( nvm_alias_path) "
local RESULT
RESULT = " $( command ls " ${ NVM_ALIAS_DIR } /lts " | command tail -n " ${ N } " | command head -n 1) "
if [ " ${ RESULT } " != '*' ] ; then
nvm_echo " lts/ ${ RESULT } "
else
nvm_err 'That many LTS releases do not exist yet.'
return 2
fi
else
nvm_echo " ${ LTS } "
fi
}
2014-09-29 01:36:02 -07:00
nvm_ensure_version_prefix( ) {
2015-01-12 18:15:51 -08:00
local NVM_VERSION
2016-08-07 23:31:16 -07:00
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 } "
2015-01-12 18:15:51 -08:00
else
2016-08-07 23:31:16 -07:00
nvm_echo " ${ NVM_VERSION } "
2015-01-12 18:15:51 -08:00
fi
2012-10-21 22:57:32 +02:00
}
2014-04-16 02:24:54 -07:00
2014-09-29 01:36:02 -07:00
nvm_format_version( ) {
local VERSION
2016-08-07 23:31:16 -07:00
VERSION = " $( nvm_ensure_version_prefix " ${ 1 - } " ) "
2016-02-06 22:34:49 -08:00
local NUM_GROUPS
2016-08-07 23:31:16 -07:00
NUM_GROUPS = " $( nvm_num_version_groups " ${ VERSION } " ) "
if [ " ${ NUM_GROUPS } " -lt 3 ] ; then
2015-04-06 17:51:34 +00:00
nvm_format_version " ${ VERSION %. } .0 "
2014-09-29 01:36:02 -07:00
else
2016-11-11 19:37:56 +08:00
nvm_echo " ${ VERSION } " | command cut -f1-3 -d.
2014-09-29 01:36:02 -07:00
fi
}
2014-09-16 08:36:05 -07:00
nvm_num_version_groups( ) {
local VERSION
2016-08-07 23:31:16 -07:00
VERSION = " ${ 1 - } "
2015-04-06 11:10:43 -07:00
VERSION = " ${ VERSION #v } "
VERSION = " ${ VERSION %. } "
2016-08-07 23:31:16 -07:00
if [ -z " ${ VERSION } " ] ; then
2016-05-05 00:17:35 -07:00
nvm_echo "0"
2014-09-16 08:36:05 -07:00
return
fi
local NVM_NUM_DOTS
2016-08-07 23:31:16 -07:00
NVM_NUM_DOTS = $( nvm_echo " ${ VERSION } " | command sed -e 's/[^\.]//g' )
2014-09-16 08:36:05 -07:00
local NVM_NUM_GROUPS
2016-08-07 23:31:16 -07:00
NVM_NUM_GROUPS = " . ${ NVM_NUM_DOTS } " # add extra dot, since it's (n - 1) dots at this point
2016-05-05 00:17:35 -07:00
nvm_echo " ${# NVM_NUM_GROUPS } "
2014-09-16 08:36:05 -07:00
}
2014-05-05 22:03:11 +02:00
nvm_strip_path( ) {
2016-05-08 20:05:59 -07:00
if [ -z " ${ NVM_DIR - } " ] ; then
2016-08-07 23:31:16 -07:00
nvm_err '${NVM_DIR} not set!'
2016-05-08 20:05:59 -07:00
return 1
fi
2016-12-23 01:03:41 +09:00
command printf %s " ${ 1 - } " | command awk -v NVM_DIR = " ${ NVM_DIR } " -v RS = : '
index( $0 , NVM_DIR) = = 1 {
path = substr( $0 , length( NVM_DIR) + 1)
if ( path ~ "^(/versions/[^/]*)?/[^/]*'" ${ 2 - } " '.* $" ) { next }
}
2023-06-21 15:47:52 +01:00
# The final RT will contain a colon if the input has a trailing colon, or a null string otherwise
{ printf "%s%s" , sep, $0 ; sep = RS } END { printf "%s" , RT } '
2014-05-05 22:03:11 +02:00
}
2016-11-14 19:19:39 +02:00
nvm_change_path( ) {
# if there’ s no initial path, just return the supplementary path
2016-08-07 23:31:16 -07:00
if [ -z " ${ 1 - } " ] ; then
2016-11-14 19:19:39 +02:00
nvm_echo " ${ 3 - } ${ 2 - } "
# if the initial path doesn’ t contain an nvm path, prepend the supplementary
# path
2018-02-28 02:16:24 +08:00
elif ! nvm_echo " ${ 1 - } " | nvm_grep -q " ${ NVM_DIR } /[^/]* ${ 2 - } " \
&& ! nvm_echo " ${ 1 - } " | nvm_grep -q " ${ NVM_DIR } /versions/[^/]*/[^/]* ${ 2 - } " ; then
2016-11-14 19:19:39 +02:00
nvm_echo " ${ 3 - } ${ 2 - } : ${ 1 - } "
2018-06-08 15:23:02 +02:00
# if the initial path contains BOTH an nvm path (checked for above) and
# that nvm path is preceded by a system binary path, just prepend the
# supplementary path instead of replacing it.
2019-04-24 16:08:34 -07:00
# https://github.com/nvm-sh/nvm/issues/1652#issuecomment-342571223
2018-06-08 15:23:02 +02:00
elif nvm_echo " ${ 1 - } " | nvm_grep -Eq " (^|:)(/usr(/local)?)? ${ 2 - } :.* ${ NVM_DIR } /[^/]* ${ 2 - } " \
|| nvm_echo " ${ 1 - } " | nvm_grep -Eq " (^|:)(/usr(/local)?)? ${ 2 - } :.* ${ NVM_DIR } /versions/[^/]*/[^/]* ${ 2 - } " ; then
nvm_echo " ${ 3 - } ${ 2 - } : ${ 1 - } "
2016-11-14 19:19:39 +02:00
# use sed to replace the existing nvm path with the supplementary path. This
# preserves the order of the path.
2014-05-08 10:20:11 +02:00
else
2016-11-14 19:19:39 +02:00
nvm_echo " ${ 1 - } " | command sed \
2018-06-08 15:23:02 +02:00
-e " s# ${ NVM_DIR } /[^/]* ${ 2 - } [^:]*# ${ 3 - } ${ 2 - } # " \
-e " s# ${ NVM_DIR } /versions/[^/]*/[^/]* ${ 2 - } [^:]*# ${ 3 - } ${ 2 - } # "
2014-05-08 10:20:11 +02:00
fi
}
2012-10-21 22:57:32 +02:00
nvm_binary_available( ) {
# binaries started with node 0.8.6
2016-05-05 01:27:17 -07:00
nvm_version_greater_than_or_equal_to " $( nvm_strip_iojs_prefix " ${ 1 - } " ) " v0.8.6
2012-10-21 22:57:32 +02:00
}
[New] Added `set-colors` command. See details below:
This command allows users to replace default colors with their own custom colors.
- top-level commands modified: alias, ls, ls-remote
- helper functions added: nvm_echo_with_colors, nvm_err_with_colors,
nvm_set_colors, nvm_get_colors, nvm_print_color_code
- functions modified: nvm_print_formatted_alias, nvm_print_versions, nvm_print_alias_path (implicitly), nvm_print_default_alias (implicitly), nvm_list_aliases (implicitly)
We added tests and info on using this command to the README!
Co-authored-by: Dena Burd <29719099+gitburd@users.noreply.github.com>
Co-authored-by: Naomi Quinones <52065567+naomiquinones@users.noreply.github.com>
2020-08-17 14:56:13 -07:00
nvm_set_colors( ) {
if [ " ${# 1 } " -eq 5 ] && nvm_echo " $1 " | nvm_grep -E " ^[rRgGbBcCyYmMkKeW]{1,} $" 1>/dev/null; then
local INSTALLED_COLOR
local LTS_AND_SYSTEM_COLOR
local CURRENT_COLOR
local NOT_INSTALLED_COLOR
local DEFAULT_COLOR
INSTALLED_COLOR = " $( echo " $1 " | awk '{ print substr($0, 1, 1); }' ) "
LTS_AND_SYSTEM_COLOR = " $( echo " $1 " | awk '{ print substr($0, 2, 1); }' ) "
CURRENT_COLOR = " $( echo " $1 " | awk '{ print substr($0, 3, 1); }' ) "
NOT_INSTALLED_COLOR = " $( echo " $1 " | awk '{ print substr($0, 4, 1); }' ) "
DEFAULT_COLOR = " $( echo " $1 " | awk '{ print substr($0, 5, 1); }' ) "
if ! nvm_has_colors; then
nvm_echo " Setting colors to: ${ INSTALLED_COLOR } ${ LTS_AND_SYSTEM_COLOR } ${ CURRENT_COLOR } ${ NOT_INSTALLED_COLOR } ${ DEFAULT_COLOR } "
nvm_echo "WARNING: Colors may not display because they are not supported in this shell."
else
2022-10-13 20:16:42 -07:00
nvm_echo_with_colors " Setting colors to: $( nvm_wrap_with_color_code " ${ INSTALLED_COLOR } " " ${ INSTALLED_COLOR } " ) $( nvm_wrap_with_color_code " ${ LTS_AND_SYSTEM_COLOR } " " ${ LTS_AND_SYSTEM_COLOR } " ) $( nvm_wrap_with_color_code " ${ CURRENT_COLOR } " " ${ CURRENT_COLOR } " ) $( nvm_wrap_with_color_code " ${ NOT_INSTALLED_COLOR } " " ${ NOT_INSTALLED_COLOR } " ) $( nvm_wrap_with_color_code " ${ DEFAULT_COLOR } " " ${ DEFAULT_COLOR } " ) "
[New] Added `set-colors` command. See details below:
This command allows users to replace default colors with their own custom colors.
- top-level commands modified: alias, ls, ls-remote
- helper functions added: nvm_echo_with_colors, nvm_err_with_colors,
nvm_set_colors, nvm_get_colors, nvm_print_color_code
- functions modified: nvm_print_formatted_alias, nvm_print_versions, nvm_print_alias_path (implicitly), nvm_print_default_alias (implicitly), nvm_list_aliases (implicitly)
We added tests and info on using this command to the README!
Co-authored-by: Dena Burd <29719099+gitburd@users.noreply.github.com>
Co-authored-by: Naomi Quinones <52065567+naomiquinones@users.noreply.github.com>
2020-08-17 14:56:13 -07:00
fi
export NVM_COLORS = " $1 "
else
return 17
fi
}
nvm_get_colors( ) {
local COLOR
local SYS_COLOR
2022-10-13 20:16:42 -07:00
local COLORS
COLORS = " ${ NVM_COLORS :- bygre } "
case $1 in
1) COLOR = $( nvm_print_color_code " $( echo " $COLORS " | awk '{ print substr($0, 1, 1); }' ) " ) ; ;
2) COLOR = $( nvm_print_color_code " $( echo " $COLORS " | awk '{ print substr($0, 2, 1); }' ) " ) ; ;
3) COLOR = $( nvm_print_color_code " $( echo " $COLORS " | awk '{ print substr($0, 3, 1); }' ) " ) ; ;
4) COLOR = $( nvm_print_color_code " $( echo " $COLORS " | awk '{ print substr($0, 4, 1); }' ) " ) ; ;
5) COLOR = $( nvm_print_color_code " $( echo " $COLORS " | awk '{ print substr($0, 5, 1); }' ) " ) ; ;
6)
SYS_COLOR = $( nvm_print_color_code " $( echo " $COLORS " | awk '{ print substr($0, 2, 1); }' ) " )
COLOR = $( nvm_echo " $SYS_COLOR " | command tr '0;' '1;' )
[New] Added `set-colors` command. See details below:
This command allows users to replace default colors with their own custom colors.
- top-level commands modified: alias, ls, ls-remote
- helper functions added: nvm_echo_with_colors, nvm_err_with_colors,
nvm_set_colors, nvm_get_colors, nvm_print_color_code
- functions modified: nvm_print_formatted_alias, nvm_print_versions, nvm_print_alias_path (implicitly), nvm_print_default_alias (implicitly), nvm_list_aliases (implicitly)
We added tests and info on using this command to the README!
Co-authored-by: Dena Burd <29719099+gitburd@users.noreply.github.com>
Co-authored-by: Naomi Quinones <52065567+naomiquinones@users.noreply.github.com>
2020-08-17 14:56:13 -07:00
; ;
2022-10-13 20:16:42 -07:00
*)
nvm_err " Invalid color index, ${ 1 - } "
return 1
; ;
esac
nvm_echo " $COLOR "
}
nvm_wrap_with_color_code( ) {
local CODE
CODE = " $( nvm_print_color_code " ${ 1 } " 2>/dev/null || :) "
local TEXT
TEXT = " ${ 2 - } "
if nvm_has_colors && [ -n " ${ CODE } " ] ; then
nvm_echo_with_colors " \033[ ${ CODE } ${ TEXT } \033[0m "
[New] Added `set-colors` command. See details below:
This command allows users to replace default colors with their own custom colors.
- top-level commands modified: alias, ls, ls-remote
- helper functions added: nvm_echo_with_colors, nvm_err_with_colors,
nvm_set_colors, nvm_get_colors, nvm_print_color_code
- functions modified: nvm_print_formatted_alias, nvm_print_versions, nvm_print_alias_path (implicitly), nvm_print_default_alias (implicitly), nvm_list_aliases (implicitly)
We added tests and info on using this command to the README!
Co-authored-by: Dena Burd <29719099+gitburd@users.noreply.github.com>
Co-authored-by: Naomi Quinones <52065567+naomiquinones@users.noreply.github.com>
2020-08-17 14:56:13 -07:00
else
2022-10-13 20:16:42 -07:00
nvm_echo " ${ TEXT } "
[New] Added `set-colors` command. See details below:
This command allows users to replace default colors with their own custom colors.
- top-level commands modified: alias, ls, ls-remote
- helper functions added: nvm_echo_with_colors, nvm_err_with_colors,
nvm_set_colors, nvm_get_colors, nvm_print_color_code
- functions modified: nvm_print_formatted_alias, nvm_print_versions, nvm_print_alias_path (implicitly), nvm_print_default_alias (implicitly), nvm_list_aliases (implicitly)
We added tests and info on using this command to the README!
Co-authored-by: Dena Burd <29719099+gitburd@users.noreply.github.com>
Co-authored-by: Naomi Quinones <52065567+naomiquinones@users.noreply.github.com>
2020-08-17 14:56:13 -07:00
fi
2022-10-13 20:16:42 -07:00
}
[New] Added `set-colors` command. See details below:
This command allows users to replace default colors with their own custom colors.
- top-level commands modified: alias, ls, ls-remote
- helper functions added: nvm_echo_with_colors, nvm_err_with_colors,
nvm_set_colors, nvm_get_colors, nvm_print_color_code
- functions modified: nvm_print_formatted_alias, nvm_print_versions, nvm_print_alias_path (implicitly), nvm_print_default_alias (implicitly), nvm_list_aliases (implicitly)
We added tests and info on using this command to the README!
Co-authored-by: Dena Burd <29719099+gitburd@users.noreply.github.com>
Co-authored-by: Naomi Quinones <52065567+naomiquinones@users.noreply.github.com>
2020-08-17 14:56:13 -07:00
nvm_print_color_code( ) {
case " ${ 1 - } " in
2022-10-13 20:16:42 -07:00
'0' ) return 0 ; ;
'r' ) nvm_echo '0;31m' ; ;
'R' ) nvm_echo '1;31m' ; ;
'g' ) nvm_echo '0;32m' ; ;
'G' ) nvm_echo '1;32m' ; ;
'b' ) nvm_echo '0;34m' ; ;
'B' ) nvm_echo '1;34m' ; ;
'c' ) nvm_echo '0;36m' ; ;
'C' ) nvm_echo '1;36m' ; ;
'm' ) nvm_echo '0;35m' ; ;
'M' ) nvm_echo '1;35m' ; ;
'y' ) nvm_echo '0;33m' ; ;
'Y' ) nvm_echo '1;33m' ; ;
'k' ) nvm_echo '0;30m' ; ;
'K' ) nvm_echo '1;30m' ; ;
'e' ) nvm_echo '0;37m' ; ;
'W' ) nvm_echo '1;37m' ; ;
*)
nvm_err " Invalid color code: ${ 1 - } " ;
return 1
[New] Added `set-colors` command. See details below:
This command allows users to replace default colors with their own custom colors.
- top-level commands modified: alias, ls, ls-remote
- helper functions added: nvm_echo_with_colors, nvm_err_with_colors,
nvm_set_colors, nvm_get_colors, nvm_print_color_code
- functions modified: nvm_print_formatted_alias, nvm_print_versions, nvm_print_alias_path (implicitly), nvm_print_default_alias (implicitly), nvm_list_aliases (implicitly)
We added tests and info on using this command to the README!
Co-authored-by: Dena Burd <29719099+gitburd@users.noreply.github.com>
Co-authored-by: Naomi Quinones <52065567+naomiquinones@users.noreply.github.com>
2020-08-17 14:56:13 -07:00
; ;
esac
}
2016-04-27 22:35:14 -07:00
nvm_print_formatted_alias( ) {
local ALIAS
ALIAS = " ${ 1 - } "
local DEST
DEST = " ${ 2 - } "
local VERSION
2016-05-07 18:14:11 -07:00
VERSION = " ${ 3 - } "
2016-08-07 23:31:16 -07:00
if [ -z " ${ VERSION } " ] ; then
2016-09-16 23:16:58 -07:00
VERSION = " $( nvm_version " ${ DEST } " ) " || :
2016-05-07 18:14:11 -07:00
fi
2016-04-27 22:35:14 -07:00
local VERSION_FORMAT
local ALIAS_FORMAT
local DEST_FORMAT
[New] Added `set-colors` command. See details below:
This command allows users to replace default colors with their own custom colors.
- top-level commands modified: alias, ls, ls-remote
- helper functions added: nvm_echo_with_colors, nvm_err_with_colors,
nvm_set_colors, nvm_get_colors, nvm_print_color_code
- functions modified: nvm_print_formatted_alias, nvm_print_versions, nvm_print_alias_path (implicitly), nvm_print_default_alias (implicitly), nvm_list_aliases (implicitly)
We added tests and info on using this command to the README!
Co-authored-by: Dena Burd <29719099+gitburd@users.noreply.github.com>
Co-authored-by: Naomi Quinones <52065567+naomiquinones@users.noreply.github.com>
2020-08-17 14:56:13 -07:00
local INSTALLED_COLOR
local SYSTEM_COLOR
local CURRENT_COLOR
local NOT_INSTALLED_COLOR
local DEFAULT_COLOR
local LTS_COLOR
INSTALLED_COLOR = $( nvm_get_colors 1)
SYSTEM_COLOR = $( nvm_get_colors 2)
CURRENT_COLOR = $( nvm_get_colors 3)
NOT_INSTALLED_COLOR = $( nvm_get_colors 4)
DEFAULT_COLOR = $( nvm_get_colors 5)
LTS_COLOR = $( nvm_get_colors 6)
2016-04-27 22:35:14 -07:00
ALIAS_FORMAT = '%s'
DEST_FORMAT = '%s'
VERSION_FORMAT = '%s'
local NEWLINE
2017-12-09 17:47:38 +08:00
NEWLINE = '\n'
2016-08-07 23:31:16 -07:00
if [ " _ ${ DEFAULT } " = '_true' ] ; then
2017-12-09 17:47:38 +08:00
NEWLINE = ' (default)\n'
2016-05-07 18:51:21 -07:00
fi
local ARROW
ARROW = '->'
2016-08-06 23:57:15 -07:00
if [ -z " ${ NVM_NO_COLORS } " ] && nvm_has_colors; then
2016-05-07 18:51:21 -07:00
ARROW = '\033[0;90m->\033[0m'
2016-08-07 23:31:16 -07:00
if [ " _ ${ DEFAULT } " = '_true' ] ; then
[New] Added `set-colors` command. See details below:
This command allows users to replace default colors with their own custom colors.
- top-level commands modified: alias, ls, ls-remote
- helper functions added: nvm_echo_with_colors, nvm_err_with_colors,
nvm_set_colors, nvm_get_colors, nvm_print_color_code
- functions modified: nvm_print_formatted_alias, nvm_print_versions, nvm_print_alias_path (implicitly), nvm_print_default_alias (implicitly), nvm_list_aliases (implicitly)
We added tests and info on using this command to the README!
Co-authored-by: Dena Burd <29719099+gitburd@users.noreply.github.com>
Co-authored-by: Naomi Quinones <52065567+naomiquinones@users.noreply.github.com>
2020-08-17 14:56:13 -07:00
NEWLINE = " \033[ ${ DEFAULT_COLOR } (default)\033[0m\n "
2016-05-07 18:51:21 -07:00
fi
2016-08-07 23:31:16 -07:00
if [ " _ ${ VERSION } " = " _ ${ NVM_CURRENT - } " ] ; then
[New] Added `set-colors` command. See details below:
This command allows users to replace default colors with their own custom colors.
- top-level commands modified: alias, ls, ls-remote
- helper functions added: nvm_echo_with_colors, nvm_err_with_colors,
nvm_set_colors, nvm_get_colors, nvm_print_color_code
- functions modified: nvm_print_formatted_alias, nvm_print_versions, nvm_print_alias_path (implicitly), nvm_print_default_alias (implicitly), nvm_list_aliases (implicitly)
We added tests and info on using this command to the README!
Co-authored-by: Dena Burd <29719099+gitburd@users.noreply.github.com>
Co-authored-by: Naomi Quinones <52065567+naomiquinones@users.noreply.github.com>
2020-08-17 14:56:13 -07:00
ALIAS_FORMAT = " \033[ ${ CURRENT_COLOR } %s\033[0m "
DEST_FORMAT = " \033[ ${ CURRENT_COLOR } %s\033[0m "
VERSION_FORMAT = " \033[ ${ CURRENT_COLOR } %s\033[0m "
2016-08-07 23:31:16 -07:00
elif nvm_is_version_installed " ${ VERSION } " ; then
[New] Added `set-colors` command. See details below:
This command allows users to replace default colors with their own custom colors.
- top-level commands modified: alias, ls, ls-remote
- helper functions added: nvm_echo_with_colors, nvm_err_with_colors,
nvm_set_colors, nvm_get_colors, nvm_print_color_code
- functions modified: nvm_print_formatted_alias, nvm_print_versions, nvm_print_alias_path (implicitly), nvm_print_default_alias (implicitly), nvm_list_aliases (implicitly)
We added tests and info on using this command to the README!
Co-authored-by: Dena Burd <29719099+gitburd@users.noreply.github.com>
Co-authored-by: Naomi Quinones <52065567+naomiquinones@users.noreply.github.com>
2020-08-17 14:56:13 -07:00
ALIAS_FORMAT = " \033[ ${ INSTALLED_COLOR } %s\033[0m "
DEST_FORMAT = " \033[ ${ INSTALLED_COLOR } %s\033[0m "
VERSION_FORMAT = " \033[ ${ INSTALLED_COLOR } %s\033[0m "
2016-08-07 23:31:16 -07:00
elif [ " ${ VERSION } " = '∞' ] || [ " ${ VERSION } " = 'N/A' ] ; then
[New] Added `set-colors` command. See details below:
This command allows users to replace default colors with their own custom colors.
- top-level commands modified: alias, ls, ls-remote
- helper functions added: nvm_echo_with_colors, nvm_err_with_colors,
nvm_set_colors, nvm_get_colors, nvm_print_color_code
- functions modified: nvm_print_formatted_alias, nvm_print_versions, nvm_print_alias_path (implicitly), nvm_print_default_alias (implicitly), nvm_list_aliases (implicitly)
We added tests and info on using this command to the README!
Co-authored-by: Dena Burd <29719099+gitburd@users.noreply.github.com>
Co-authored-by: Naomi Quinones <52065567+naomiquinones@users.noreply.github.com>
2020-08-17 14:56:13 -07:00
ALIAS_FORMAT = " \033[ ${ NOT_INSTALLED_COLOR } %s\033[0m "
DEST_FORMAT = " \033[ ${ NOT_INSTALLED_COLOR } %s\033[0m "
VERSION_FORMAT = " \033[ ${ NOT_INSTALLED_COLOR } %s\033[0m "
2016-05-07 18:51:21 -07:00
fi
2016-04-30 12:50:59 -07:00
if [ " _ ${ NVM_LTS - } " = '_true' ] ; then
[New] Added `set-colors` command. See details below:
This command allows users to replace default colors with their own custom colors.
- top-level commands modified: alias, ls, ls-remote
- helper functions added: nvm_echo_with_colors, nvm_err_with_colors,
nvm_set_colors, nvm_get_colors, nvm_print_color_code
- functions modified: nvm_print_formatted_alias, nvm_print_versions, nvm_print_alias_path (implicitly), nvm_print_default_alias (implicitly), nvm_list_aliases (implicitly)
We added tests and info on using this command to the README!
Co-authored-by: Dena Burd <29719099+gitburd@users.noreply.github.com>
Co-authored-by: Naomi Quinones <52065567+naomiquinones@users.noreply.github.com>
2020-08-17 14:56:13 -07:00
ALIAS_FORMAT = " \033[ ${ LTS_COLOR } %s\033[0m "
2016-04-30 12:50:59 -07:00
fi
if [ " _ ${ DEST %/* } " = "_lts" ] ; then
[New] Added `set-colors` command. See details below:
This command allows users to replace default colors with their own custom colors.
- top-level commands modified: alias, ls, ls-remote
- helper functions added: nvm_echo_with_colors, nvm_err_with_colors,
nvm_set_colors, nvm_get_colors, nvm_print_color_code
- functions modified: nvm_print_formatted_alias, nvm_print_versions, nvm_print_alias_path (implicitly), nvm_print_default_alias (implicitly), nvm_list_aliases (implicitly)
We added tests and info on using this command to the README!
Co-authored-by: Dena Burd <29719099+gitburd@users.noreply.github.com>
Co-authored-by: Naomi Quinones <52065567+naomiquinones@users.noreply.github.com>
2020-08-17 14:56:13 -07:00
DEST_FORMAT = " \033[ ${ LTS_COLOR } %s\033[0m "
2016-04-30 12:50:59 -07:00
fi
2018-05-22 20:57:40 +08:00
elif [ " _ ${ VERSION } " != '_∞' ] && [ " _ ${ VERSION } " != '_N/A' ] ; then
2016-08-06 23:57:15 -07:00
VERSION_FORMAT = '%s *'
2016-04-27 22:35:14 -07:00
fi
2016-08-07 23:31:16 -07:00
if [ " ${ DEST } " = " ${ VERSION } " ] ; then
command printf -- " ${ ALIAS_FORMAT } ${ ARROW } ${ VERSION_FORMAT } ${ NEWLINE } " " ${ ALIAS } " " ${ DEST } "
2016-04-27 22:35:14 -07:00
else
2016-08-07 23:31:16 -07:00
command printf -- " ${ ALIAS_FORMAT } ${ ARROW } ${ DEST_FORMAT } ( ${ ARROW } ${ VERSION_FORMAT } ) ${ NEWLINE } " " ${ ALIAS } " " ${ DEST } " " ${ VERSION } "
2016-04-27 22:35:14 -07:00
fi
}
2016-04-26 22:29:55 -07:00
nvm_print_alias_path( ) {
local NVM_ALIAS_DIR
NVM_ALIAS_DIR = " ${ 1 - } "
2016-08-07 23:31:16 -07:00
if [ -z " ${ NVM_ALIAS_DIR } " ] ; then
2016-05-05 00:17:35 -07:00
nvm_err 'An alias dir is required.'
2016-04-26 22:29:55 -07:00
return 1
fi
local ALIAS_PATH
ALIAS_PATH = " ${ 2 - } "
2016-08-07 23:31:16 -07:00
if [ -z " ${ ALIAS_PATH } " ] ; then
2016-05-05 00:17:35 -07:00
nvm_err 'An alias path is required.'
2016-04-26 22:29:55 -07:00
return 2
fi
local ALIAS
2021-11-19 08:53:43 -08:00
ALIAS = " ${ ALIAS_PATH ## " ${ NVM_ALIAS_DIR } " \/ } "
2016-04-26 22:29:55 -07:00
local DEST
2018-05-22 20:57:40 +08:00
DEST = " $( nvm_alias " ${ ALIAS } " 2>/dev/null) " || :
2016-08-07 23:31:16 -07:00
if [ -n " ${ DEST } " ] ; then
2016-08-06 23:57:15 -07:00
NVM_NO_COLORS = " ${ NVM_NO_COLORS - } " NVM_LTS = " ${ NVM_LTS - } " DEFAULT = false nvm_print_formatted_alias " ${ ALIAS } " " ${ DEST } "
2016-04-26 22:29:55 -07:00
fi
}
nvm_print_default_alias( ) {
local ALIAS
ALIAS = " ${ 1 - } "
2016-08-07 23:31:16 -07:00
if [ -z " ${ ALIAS } " ] ; then
2016-05-05 00:17:35 -07:00
nvm_err 'A default alias is required.'
2016-04-27 22:35:14 -07:00
return 1
fi
2016-04-26 22:29:55 -07:00
local DEST
2016-08-07 23:31:16 -07:00
DEST = " $( nvm_print_implicit_alias local " ${ ALIAS } " ) "
if [ -n " ${ DEST } " ] ; then
2016-08-06 23:57:15 -07:00
NVM_NO_COLORS = " ${ NVM_NO_COLORS - } " DEFAULT = true nvm_print_formatted_alias " ${ ALIAS } " " ${ DEST } "
2016-04-26 22:29:55 -07:00
fi
}
2016-04-27 14:23:34 -07:00
nvm_make_alias( ) {
local ALIAS
ALIAS = " ${ 1 - } "
2016-08-07 23:31:16 -07:00
if [ -z " ${ ALIAS } " ] ; then
2016-05-05 00:17:35 -07:00
nvm_err "an alias name is required"
2016-04-27 14:23:34 -07:00
return 1
fi
local VERSION
VERSION = " ${ 2 - } "
2016-08-07 23:31:16 -07:00
if [ -z " ${ VERSION } " ] ; then
2016-05-05 00:17:35 -07:00
nvm_err "an alias target version is required"
2016-04-27 14:23:34 -07:00
return 2
fi
2016-08-07 23:31:16 -07:00
nvm_echo " ${ VERSION } " | tee " $( nvm_alias_path) / ${ ALIAS } " >/dev/null
2016-04-27 14:23:34 -07:00
}
2016-08-06 22:33:37 -07:00
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 "
2021-12-16 15:54:38 -08:00
if [ " ${ ALIAS } " != " ${ ALIAS #lts/ } " ] ; then
nvm_alias " ${ ALIAS } "
return $?
fi
2021-09-01 10:06:32 -07:00
nvm_is_zsh && unsetopt local_options nomatch
2017-04-27 21:57:04 +08:00
(
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
wait
2023-10-23 14:05:37 -07:00
) | command sort
2017-04-27 21:57:04 +08:00
(
local ALIAS_NAME
2023-03-10 00:53:29 -05:00
for ALIAS_NAME in " $( nvm_node_prefix) " "stable" "unstable" " $( nvm_iojs_prefix) " ; do
2017-04-27 21:57:04 +08:00
{
2021-05-03 14:19:31 -07:00
# shellcheck disable=SC2030,SC2031 # (https://github.com/koalaman/shellcheck/issues/2217)
2018-05-31 23:49:15 -07:00
if [ ! -f " ${ NVM_ALIAS_DIR } / ${ ALIAS_NAME } " ] && { [ -z " ${ ALIAS } " ] || [ " ${ ALIAS_NAME } " = " ${ ALIAS } " ] ; } ; then
2017-04-27 21:57:04 +08:00
NVM_NO_COLORS = " ${ NVM_NO_COLORS - } " NVM_CURRENT = " ${ NVM_CURRENT } " nvm_print_default_alias " ${ ALIAS_NAME } "
fi
} &
done
wait
2023-10-23 14:05:37 -07:00
) | command sort
2017-04-27 21:57:04 +08:00
(
local LTS_ALIAS
2021-05-03 14:19:31 -07:00
# shellcheck disable=SC2030,SC2031 # (https://github.com/koalaman/shellcheck/issues/2217)
2017-04-27 21:57:04 +08:00
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 } "
fi
} &
done
wait
2023-10-23 14:05:37 -07:00
) | command sort
2016-08-06 22:33:37 -07:00
return
}
2014-09-30 00:23:37 -07:00
nvm_alias( ) {
local ALIAS
2016-04-26 22:21:57 -07:00
ALIAS = " ${ 1 - } "
2016-08-07 23:31:16 -07:00
if [ -z " ${ ALIAS } " ] ; then
2016-05-05 00:17:35 -07:00
nvm_err 'An alias is required.'
2014-09-30 00:23:37 -07:00
return 1
fi
2021-12-16 22:55:02 -08:00
ALIAS = " $( nvm_normalize_lts " ${ ALIAS } " ) "
2014-09-30 00:23:37 -07:00
2021-12-16 22:55:02 -08:00
if [ -z " ${ ALIAS } " ] ; then
return 2
2020-03-04 01:03:36 -08:00
fi
2014-09-30 00:23:37 -07:00
local NVM_ALIAS_PATH
2021-12-16 22:55:02 -08:00
NVM_ALIAS_PATH = " $( nvm_alias_path) / ${ ALIAS } "
2016-08-07 23:31:16 -07:00
if [ ! -f " ${ NVM_ALIAS_PATH } " ] ; then
2016-05-05 00:17:35 -07:00
nvm_err 'Alias does not exist.'
2014-09-30 00:23:37 -07:00
return 2
fi
2023-10-23 14:06:19 -07:00
command awk 'NF' " ${ NVM_ALIAS_PATH } "
2014-09-30 00:23:37 -07:00
}
2014-07-14 11:29:24 -07:00
nvm_ls_current( ) {
2014-11-28 11:59:45 -06:00
local NVM_LS_CURRENT_NODE_PATH
2018-05-22 20:57:40 +08:00
if ! NVM_LS_CURRENT_NODE_PATH = " $( command which node 2>/dev/null) " ; then
2016-05-05 00:17:35 -07:00
nvm_echo 'none'
2016-08-07 23:31:16 -07:00
elif nvm_tree_contains_path " $( nvm_version_dir iojs) " " ${ NVM_LS_CURRENT_NODE_PATH } " ; then
2015-10-12 16:10:43 -07:00
nvm_add_iojs_prefix " $( iojs --version 2>/dev/null) "
2016-08-07 23:31:16 -07:00
elif nvm_tree_contains_path " ${ NVM_DIR } " " ${ NVM_LS_CURRENT_NODE_PATH } " ; then
2014-08-26 23:53:17 -07:00
local VERSION
2015-01-13 01:04:45 -08:00
VERSION = " $( node --version 2>/dev/null) "
2016-08-07 23:31:16 -07:00
if [ " ${ VERSION } " = "v0.6.21-pre" ] ; then
2016-05-05 00:17:35 -07:00
nvm_echo 'v0.6.21'
2014-08-26 23:53:17 -07:00
else
2023-04-28 10:55:03 -07:00
nvm_echo " ${ VERSION :- none } "
2014-08-26 23:53:17 -07:00
fi
2014-07-14 11:17:26 -07:00
else
2016-05-05 00:17:35 -07:00
nvm_echo 'system'
2014-07-14 11:17:26 -07:00
fi
2014-07-14 11:29:24 -07:00
}
2014-10-22 01:30:19 -07:00
nvm_resolve_alias( ) {
2016-08-07 23:31:16 -07:00
if [ -z " ${ 1 - } " ] ; then
2014-10-22 01:30:19 -07:00
return 1
fi
local PATTERN
2016-08-07 23:31:16 -07:00
PATTERN = " ${ 1 - } "
2014-10-22 01:30:19 -07:00
2014-10-22 01:48:02 -07:00
local ALIAS
2016-08-07 23:31:16 -07:00
ALIAS = " ${ PATTERN } "
2014-10-22 01:48:02 -07:00
local ALIAS_TEMP
local SEEN_ALIASES
2016-08-07 23:31:16 -07:00
SEEN_ALIASES = " ${ ALIAS } "
2014-10-22 01:48:02 -07:00
while true; do
2018-05-22 20:57:40 +08:00
ALIAS_TEMP = " $( nvm_alias " ${ ALIAS } " 2>/dev/null || nvm_echo) "
2014-10-22 01:48:02 -07:00
2016-08-07 23:31:16 -07:00
if [ -z " ${ ALIAS_TEMP } " ] ; then
2014-10-22 01:48:02 -07:00
break
fi
2018-05-22 20:57:40 +08:00
if command printf " ${ SEEN_ALIASES } " | nvm_grep -q -e " ^ ${ ALIAS_TEMP } $" ; then
2014-10-22 01:48:02 -07:00
ALIAS = "∞"
break
fi
2017-12-09 17:47:38 +08:00
SEEN_ALIASES = " ${ SEEN_ALIASES } \\n ${ ALIAS_TEMP } "
2016-08-07 23:31:16 -07:00
ALIAS = " ${ ALIAS_TEMP } "
2014-10-22 01:48:02 -07:00
done
2016-08-07 23:31:16 -07:00
if [ -n " ${ ALIAS } " ] && [ " _ ${ ALIAS } " != " _ ${ PATTERN } " ] ; then
2015-02-22 00:42:20 -08:00
local NVM_IOJS_PREFIX
NVM_IOJS_PREFIX = " $( nvm_iojs_prefix) "
local NVM_NODE_PREFIX
NVM_NODE_PREFIX = " $( nvm_node_prefix) "
2016-08-07 23:31:16 -07:00
case " ${ ALIAS } " in
'∞' | \
" ${ NVM_IOJS_PREFIX } " | " ${ NVM_IOJS_PREFIX } - " | \
2018-05-22 20:57:40 +08:00
" ${ NVM_NODE_PREFIX } " )
2016-08-07 23:31:16 -07:00
nvm_echo " ${ ALIAS } "
2015-02-22 00:42:20 -08:00
; ;
*)
2016-08-07 23:31:16 -07:00
nvm_ensure_version_prefix " ${ ALIAS } "
2015-02-22 00:42:20 -08:00
; ;
esac
2014-10-22 01:30:19 -07:00
return 0
fi
2018-05-22 20:57:40 +08:00
if nvm_validate_implicit_alias " ${ PATTERN } " 2>/dev/null; then
2014-10-22 01:30:19 -07:00
local IMPLICIT
2018-05-22 20:57:40 +08:00
IMPLICIT = " $( nvm_print_implicit_alias local " ${ PATTERN } " 2>/dev/null) "
2016-08-07 23:31:16 -07:00
if [ -n " ${ IMPLICIT } " ] ; then
nvm_ensure_version_prefix " ${ IMPLICIT } "
2014-10-22 01:30:19 -07:00
fi
fi
return 2
}
2015-02-21 13:51:07 -08:00
nvm_resolve_local_alias( ) {
2016-08-07 23:31:16 -07:00
if [ -z " ${ 1 - } " ] ; then
2015-02-21 13:51:07 -08:00
return 1
fi
local VERSION
local EXIT_CODE
2016-08-07 23:31:16 -07:00
VERSION = " $( nvm_resolve_alias " ${ 1 - } " ) "
2015-02-21 13:51:07 -08:00
EXIT_CODE = $?
2016-08-07 23:31:16 -07:00
if [ -z " ${ VERSION } " ] ; then
2015-02-21 13:51:07 -08:00
return $EXIT_CODE
fi
2016-08-07 23:31:16 -07:00
if [ " _ ${ VERSION } " != '_∞' ] ; then
nvm_version " ${ VERSION } "
2015-02-21 13:51:07 -08:00
else
2016-08-07 23:31:16 -07:00
nvm_echo " ${ VERSION } "
2015-02-21 13:51:07 -08:00
fi
}
2015-01-12 18:15:04 -08:00
nvm_iojs_prefix( ) {
2016-05-05 00:17:35 -07:00
nvm_echo 'iojs'
2015-01-12 18:15:04 -08:00
}
2015-01-13 14:16:35 -08:00
nvm_node_prefix( ) {
2016-05-05 00:17:35 -07:00
nvm_echo 'node'
2015-01-13 14:16:35 -08:00
}
2015-01-12 18:15:04 -08:00
2015-01-12 18:15:15 -08:00
nvm_is_iojs_version( ) {
2016-08-07 23:31:16 -07:00
case " ${ 1 - } " in iojs-*) return 0 ; ; esac
2015-04-04 14:29:55 -07:00
return 1
2015-01-12 18:15:15 -08:00
}
2015-01-13 00:57:32 -08:00
nvm_add_iojs_prefix( ) {
2016-08-07 23:31:16 -07:00
nvm_echo " $( nvm_iojs_prefix) - $( nvm_ensure_version_prefix " $( nvm_strip_iojs_prefix " ${ 1 - } " ) " ) "
2015-01-13 00:57:32 -08:00
}
2015-01-12 18:15:25 -08:00
nvm_strip_iojs_prefix( ) {
local NVM_IOJS_PREFIX
NVM_IOJS_PREFIX = " $( nvm_iojs_prefix) "
2016-08-07 23:31:16 -07:00
if [ " ${ 1 - } " = " ${ NVM_IOJS_PREFIX } " ] ; then
2016-05-05 00:17:35 -07:00
nvm_echo
2015-01-12 18:15:25 -08:00
else
2021-11-19 08:53:43 -08:00
nvm_echo " ${ 1 # " ${ NVM_IOJS_PREFIX } " - } "
2015-01-12 18:15:25 -08:00
fi
}
2013-06-22 23:11:43 +10:00
nvm_ls( ) {
2014-06-22 15:42:17 -07:00
local PATTERN
2016-01-17 15:12:02 -08:00
PATTERN = " ${ 1 - } "
2014-06-22 15:42:17 -07:00
local VERSIONS
VERSIONS = ''
2016-08-07 23:31:16 -07:00
if [ " ${ PATTERN } " = 'current' ] ; then
2014-07-14 11:29:24 -07:00
nvm_ls_current
2014-02-15 15:57:51 -08:00
return
fi
2011-11-04 20:36:04 +00:00
2015-02-10 10:36:12 -08:00
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
2016-08-07 23:31:16 -07:00
NVM_VERSION_DIR_IOJS = " $( nvm_version_dir " ${ NVM_IOJS_PREFIX } " ) "
2015-02-10 10:36:12 -08:00
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) "
2016-08-07 23:31:16 -07:00
case " ${ PATTERN } " in
2018-05-22 20:57:40 +08:00
" ${ NVM_IOJS_PREFIX } " | " ${ NVM_NODE_PREFIX } " )
2016-08-07 23:31:16 -07:00
PATTERN = " ${ PATTERN } - "
2015-01-18 20:45:02 -06:00
; ;
*)
2016-08-07 23:31:16 -07:00
if nvm_resolve_local_alias " ${ PATTERN } " ; then
2015-02-10 14:41:45 -08:00
return
fi
2016-08-07 23:31:16 -07:00
PATTERN = " $( nvm_ensure_version_prefix " ${ PATTERN } " ) "
2015-01-18 20:45:02 -06:00
; ;
esac
2016-08-07 23:31:16 -07:00
if [ " ${ PATTERN } " = 'N/A' ] ; then
2015-09-19 13:37:08 +09:00
return
fi
2014-02-15 15:57:51 -08:00
# If it looks like an explicit version, don't do anything funny
2015-04-04 14:29:55 -07:00
local NVM_PATTERN_STARTS_WITH_V
case $PATTERN in
v*) NVM_PATTERN_STARTS_WITH_V = true ; ;
*) NVM_PATTERN_STARTS_WITH_V = false ; ;
esac
2016-08-07 23:31:16 -07:00
if [ $NVM_PATTERN_STARTS_WITH_V = true ] && [ " _ $( 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 } " ) "
2014-06-12 10:56:20 -04:00
fi
2014-02-15 15:57:51 -08:00
else
2016-08-07 23:31:16 -07:00
case " ${ PATTERN } " in
" ${ NVM_IOJS_PREFIX } - " | " ${ NVM_NODE_PREFIX } - " | "system" ) ; ;
2015-01-18 20:45:02 -06:00
*)
local NUM_VERSION_GROUPS
2016-08-07 23:31:16 -07:00
NUM_VERSION_GROUPS = " $( nvm_num_version_groups " ${ PATTERN } " ) "
if [ " ${ NUM_VERSION_GROUPS } " = "2" ] || [ " ${ NUM_VERSION_GROUPS } " = "1" ] ; then
2015-04-06 17:51:34 +00:00
PATTERN = " ${ PATTERN %. } . "
2015-01-18 20:45:02 -06:00
fi
; ;
esac
2015-01-12 01:15:48 -08:00
2018-11-08 00:55:52 +01:00
nvm_is_zsh && setopt local_options shwordsplit
2020-10-09 09:43:21 -05:00
nvm_is_zsh && unsetopt local_options markdirs
2015-01-12 01:15:48 -08:00
2015-10-07 13:57:29 -07:00
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 = ''
2015-01-18 20:45:02 -06:00
local NVM_ADD_SYSTEM
NVM_ADD_SYSTEM = false
2016-08-07 23:31:16 -07:00
if nvm_is_iojs_version " ${ PATTERN } " ; then
NVM_DIRS_TO_SEARCH1 = " ${ NVM_VERSION_DIR_IOJS } "
PATTERN = " $( nvm_strip_iojs_prefix " ${ PATTERN } " ) "
2015-01-18 20:45:02 -06:00
if nvm_has_system_iojs; then
NVM_ADD_SYSTEM = true
fi
2016-08-07 23:31:16 -07:00
elif [ " ${ PATTERN } " = " ${ NVM_NODE_PREFIX } - " ] ; then
NVM_DIRS_TO_SEARCH1 = " ${ NVM_VERSION_DIR_OLD } "
NVM_DIRS_TO_SEARCH2 = " ${ NVM_VERSION_DIR_NEW } "
2015-01-18 20:45:02 -06:00
PATTERN = ''
if nvm_has_system_node; then
NVM_ADD_SYSTEM = true
fi
2015-01-12 18:16:11 -08:00
else
2016-08-07 23:31:16 -07:00
NVM_DIRS_TO_SEARCH1 = " ${ NVM_VERSION_DIR_OLD } "
NVM_DIRS_TO_SEARCH2 = " ${ NVM_VERSION_DIR_NEW } "
NVM_DIRS_TO_SEARCH3 = " ${ NVM_VERSION_DIR_IOJS } "
2015-01-18 20:45:02 -06:00
if nvm_has_system_iojs || nvm_has_system_node; then
NVM_ADD_SYSTEM = true
fi
2015-01-12 18:16:11 -08:00
fi
2015-10-07 13:57:29 -07:00
2016-08-07 23:31:16 -07:00
if ! [ -d " ${ NVM_DIRS_TO_SEARCH1 } " ] || ! ( command ls -1qA " ${ NVM_DIRS_TO_SEARCH1 } " | nvm_grep -q .) ; then
2015-10-07 13:57:29 -07:00
NVM_DIRS_TO_SEARCH1 = ''
fi
2016-08-07 23:31:16 -07:00
if ! [ -d " ${ NVM_DIRS_TO_SEARCH2 } " ] || ! ( command ls -1qA " ${ NVM_DIRS_TO_SEARCH2 } " | nvm_grep -q .) ; then
NVM_DIRS_TO_SEARCH2 = " ${ NVM_DIRS_TO_SEARCH1 } "
2015-10-07 13:57:29 -07:00
fi
2016-08-07 23:31:16 -07:00
if ! [ -d " ${ NVM_DIRS_TO_SEARCH3 } " ] || ! ( command ls -1qA " ${ NVM_DIRS_TO_SEARCH3 } " | nvm_grep -q .) ; then
NVM_DIRS_TO_SEARCH3 = " ${ NVM_DIRS_TO_SEARCH2 } "
2015-10-07 13:57:29 -07:00
fi
2015-01-12 23:57:45 -08:00
2016-06-24 01:38:27 -07:00
local SEARCH_PATTERN
2016-08-07 23:31:16 -07:00
if [ -z " ${ PATTERN } " ] ; then
2015-01-12 23:57:45 -08:00
PATTERN = 'v'
2016-06-24 01:38:27 -07:00
SEARCH_PATTERN = '.*'
else
2018-02-28 02:16:24 +08:00
SEARCH_PATTERN = " $( nvm_echo " ${ PATTERN } " | command sed 's#\.#\\\.#g;' ) "
2015-01-12 23:57:45 -08:00
fi
2016-08-07 23:31:16 -07:00
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 } * " \
2017-03-21 04:30:22 +08:00
| command sed -e "
2016-06-24 01:38:27 -07:00
s#${ NVM_VERSION_DIR_IOJS } /#versions/${ NVM_IOJS_PREFIX } /#;
s#^${ NVM_DIR } /##;
2017-12-09 17:47:38 +08:00
\\ #^[^v]# d;
\\ #^versions\$# d;
2015-04-02 16:58:31 +00:00
s#^versions/##;
2016-06-24 01:38:27 -07:00
s#^v#${ NVM_NODE_PREFIX } /v#;
2017-12-09 17:47:38 +08:00
\\ #${SEARCH_PATTERN}# !d;
2016-06-24 01:38:27 -07:00
" \
2017-12-09 17:47:38 +08:00
-e 's#^\([^/]\{1,\}\)/\(.*\)$#\2.\1#;' \
2016-06-24 01:38:27 -07:00
| command sort -t. -u -k 1.2,1n -k 2,2n -k 3,3n \
2019-02-23 15:02:31 -08:00
| command sed -e 's#\(.*\)\.\([^\.]\{1,\}\)$#\2-\1#;' \
-e " s#^ ${ NVM_NODE_PREFIX } -##; " \
2015-07-03 21:10:12 -07:00
) "
2015-02-20 23:12:00 -08:00
fi
2014-02-15 15:57:51 -08:00
fi
2014-09-05 00:10:51 -07:00
2016-01-17 15:12:02 -08:00
if [ " ${ NVM_ADD_SYSTEM - } " = true ] ; then
2016-08-07 23:31:16 -07:00
if [ -z " ${ PATTERN } " ] || [ " ${ PATTERN } " = 'v' ] ; then
2023-03-10 00:53:29 -05:00
VERSIONS = " ${ VERSIONS }
system"
2016-08-07 23:31:16 -07:00
elif [ " ${ PATTERN } " = 'system' ] ; then
2023-03-10 00:53:29 -05:00
VERSIONS = "system"
2014-09-05 00:10:51 -07:00
fi
fi
2016-08-07 23:31:16 -07:00
if [ -z " ${ VERSIONS } " ] ; then
2016-05-05 00:17:35 -07:00
nvm_echo 'N/A'
2014-06-20 11:45:14 -07:00
return 3
2014-02-15 15:57:51 -08:00
fi
2014-09-05 00:10:51 -07:00
2016-08-07 23:31:16 -07:00
nvm_echo " ${ VERSIONS } "
2011-11-04 20:36:04 +00:00
}
2013-06-22 23:11:43 +10:00
nvm_ls_remote( ) {
2014-06-22 15:42:17 -07:00
local PATTERN
2016-08-07 23:31:16 -07:00
PATTERN = " ${ 1 - } "
2018-05-22 20:57:40 +08:00
if nvm_validate_implicit_alias " ${ PATTERN } " 2>/dev/null ; then
2018-05-24 12:23:02 -04:00
local IMPLICIT
IMPLICIT = " $( nvm_print_implicit_alias remote " ${ PATTERN } " ) "
if [ -z " ${ IMPLICIT - } " ] || [ " ${ IMPLICIT } " = 'N/A' ] ; then
nvm_echo "N/A"
return 3
fi
PATTERN = " $( NVM_LTS = " ${ NVM_LTS - } " nvm_ls_remote " ${ IMPLICIT } " | command tail -1 | command awk '{ print $1 }' ) "
2016-08-07 23:31:16 -07:00
elif [ -n " ${ PATTERN } " ] ; then
PATTERN = " $( nvm_ensure_version_prefix " ${ PATTERN } " ) "
2014-02-15 15:57:51 -08:00
else
PATTERN = ".*"
fi
2016-09-15 22:45:10 -07:00
NVM_LTS = " ${ NVM_LTS - } " nvm_ls_remote_index_tab node std " ${ PATTERN } "
2015-01-13 02:14:29 -08:00
}
nvm_ls_remote_iojs( ) {
2016-09-15 22:45:10 -07:00
NVM_LTS = " ${ NVM_LTS - } " nvm_ls_remote_index_tab iojs std " ${ 1 - } "
2015-07-03 21:10:12 -07:00
}
2016-09-15 22:45:10 -07:00
# args flavor, type, version
2015-10-17 10:19:39 -07:00
nvm_ls_remote_index_tab( ) {
2016-04-23 23:47:25 -07:00
local LTS
LTS = " ${ NVM_LTS - } "
2016-09-15 22:45:10 -07:00
if [ " $# " -lt 3 ] ; then
2016-05-05 00:17:35 -07:00
nvm_err 'not enough arguments'
2015-10-17 10:19:39 -07:00
return 5
2015-07-03 21:10:12 -07:00
fi
2016-09-15 22:45:10 -07:00
local FLAVOR
FLAVOR = " ${ 1 - } "
2015-10-17 10:19:39 -07:00
local TYPE
2016-09-15 22:45:10 -07:00
TYPE = " ${ 2 - } "
local MIRROR
MIRROR = " $( nvm_get_mirror " ${ FLAVOR } " " ${ TYPE } " ) "
if [ -z " ${ MIRROR } " ] ; then
return 3
fi
2015-10-17 10:19:39 -07:00
local PREFIX
2016-01-17 15:12:02 -08:00
PREFIX = ''
2016-09-15 22:45:10 -07:00
case " ${ FLAVOR } - ${ TYPE } " in
2015-10-17 10:19:39 -07:00
iojs-std) PREFIX = " $( nvm_iojs_prefix) - " ; ;
2015-10-17 10:34:42 -07:00
node-std) PREFIX = '' ; ;
2015-10-17 10:19:39 -07:00
iojs-*)
2016-05-05 00:17:35 -07:00
nvm_err 'unknown type of io.js release'
2015-10-17 10:19:39 -07:00
return 4
; ;
2016-09-15 22:45:10 -07:00
*)
2016-05-05 00:17:35 -07:00
nvm_err 'unknown type of node.js release'
2015-10-17 10:34:42 -07:00
return 4
; ;
2015-10-17 10:19:39 -07:00
esac
local SORT_COMMAND
2016-11-11 19:37:56 +08:00
SORT_COMMAND = 'command sort'
2016-09-15 22:45:10 -07:00
case " ${ FLAVOR } " in
2016-11-11 19:37:56 +08:00
node) SORT_COMMAND = 'command sort -t. -u -k 1.2,1n -k 2,2n -k 3,3n' ; ;
2015-10-17 10:34:42 -07:00
esac
2016-09-15 22:45:10 -07:00
2015-01-13 02:14:29 -08:00
local PATTERN
2016-09-15 22:45:10 -07:00
PATTERN = " ${ 3 - } "
2020-09-24 13:46:29 -07:00
if [ " ${ PATTERN # " ${ PATTERN %? } " } " = '.' ] ; then
PATTERN = " ${ PATTERN %. } "
fi
2015-01-13 02:14:29 -08:00
local VERSIONS
2020-02-21 21:27:13 -08:00
if [ -n " ${ PATTERN } " ] && [ " ${ PATTERN } " != '*' ] ; then
2016-09-15 22:45:10 -07:00
if [ " ${ FLAVOR } " = 'iojs' ] ; then
2016-08-07 23:31:16 -07:00
PATTERN = " $( nvm_ensure_version_prefix " $( nvm_strip_iojs_prefix " ${ PATTERN } " ) " ) "
2015-10-17 10:19:39 -07:00
else
2016-08-07 23:31:16 -07:00
PATTERN = " $( nvm_ensure_version_prefix " ${ PATTERN } " ) "
2015-10-17 10:19:39 -07:00
fi
2015-01-13 02:14:29 -08:00
else
2016-04-17 23:39:27 -07:00
unset PATTERN
2015-01-13 02:14:29 -08:00
fi
2016-09-15 22:45:10 -07:00
2018-11-08 00:55:52 +01:00
nvm_is_zsh && setopt local_options shwordsplit
2016-04-27 15:20:22 -07:00
local VERSION_LIST
2016-08-07 23:31:16 -07:00
VERSION_LIST = " $( nvm_download -L -s " ${ MIRROR } /index.tab " -o - \
2015-04-06 17:51:34 +00:00
| command sed "
1d;
2016-08-07 23:31:16 -07:00
s/^/${ PREFIX } /;
2016-04-17 23:39:27 -07:00
" \
2016-04-27 15:20:22 -07:00
) "
local LTS_ALIAS
local LTS_VERSION
2016-08-29 09:15:57 -07:00
command mkdir -p " $( nvm_alias_path) /lts "
2021-09-03 23:40:13 -07:00
{ command awk ' {
2016-04-27 15:20:22 -07:00
if ( $10 ~ /^\- ?$/) { next }
if ( $10 && !a[ tolower( $10 ) ] ++) {
if ( alias ) { print alias, version }
2016-10-18 11:33:07 -07:00
alias_name = "lts/" tolower( $10 )
if ( !alias) { print "lts/*" , alias_name }
alias = alias_name
2016-04-27 15:20:22 -07:00
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 #* } "
2018-05-22 20:57:40 +08:00
nvm_make_alias " ${ LTS_ALIAS } " " ${ LTS_VERSION } " >/dev/null 2>& 1
2021-09-03 23:40:13 -07:00
done ; } << EOF
$VERSION_LIST
EOF
2016-04-27 15:20:22 -07:00
2021-12-16 23:01:05 -08:00
if [ -n " ${ LTS - } " ] ; then
LTS = " $( nvm_normalize_lts " lts/ ${ LTS } " ) "
LTS = " ${ LTS #lts/ } "
fi
2020-02-21 21:27:13 -08:00
VERSIONS = " $( { command awk -v lts = " ${ LTS - } " ' {
2016-04-17 23:39:27 -07:00
if ( !$1 ) { next }
2020-02-21 21:27:13 -08:00
if ( lts && $10 ~ /^\- ?$/) { next }
2016-04-25 00:55:35 -07:00
if ( lts && lts != "*" && tolower( $10 ) !~ tolower( lts) ) { next }
2020-02-21 21:27:13 -08:00
if ( $10 !~ /^\- ?$/) {
if ( $10 && $10 != prev) {
print $1 , $10 , "*"
} else {
print $1 , $10
}
} else {
print $1
}
prev = $10 ;
2016-04-17 23:39:27 -07:00
} ' \
2016-04-22 10:25:47 -07:00
| nvm_grep -w " ${ PATTERN :- .* } " \
2018-05-23 19:47:11 -04:00
| $SORT_COMMAND ; } << EOF
$VERSION_LIST
EOF
) "
2016-08-07 23:31:16 -07:00
if [ -z " ${ VERSIONS } " ] ; then
2016-05-05 00:17:35 -07:00
nvm_echo 'N/A'
2015-01-13 02:14:29 -08:00
return 3
fi
2016-08-07 23:31:16 -07:00
nvm_echo " ${ VERSIONS } "
2012-10-04 10:32:36 -07:00
}
2020-07-31 22:13:21 -07:00
nvm_get_checksum_binary( ) {
if nvm_has_non_aliased 'sha256sum' ; then
nvm_echo 'sha256sum'
elif nvm_has_non_aliased 'shasum' ; then
nvm_echo 'shasum'
elif nvm_has_non_aliased 'sha256' ; then
nvm_echo 'sha256'
elif nvm_has_non_aliased 'gsha256sum' ; then
nvm_echo 'gsha256sum'
elif nvm_has_non_aliased 'openssl' ; then
nvm_echo 'openssl'
elif nvm_has_non_aliased 'bssl' ; then
nvm_echo 'bssl'
elif nvm_has_non_aliased 'sha1sum' ; then
nvm_echo 'sha1sum'
elif nvm_has_non_aliased 'sha1' ; then
nvm_echo 'sha1'
2016-08-09 22:24:09 -07:00
else
2017-03-08 12:54:37 +00:00
nvm_err 'Unaliased sha256sum, shasum, sha256, gsha256sum, openssl, or bssl not found.'
2020-07-31 22:13:21 -07:00
nvm_err 'Unaliased sha1sum or sha1 not found.'
2016-08-09 22:24:09 -07:00
return 1
fi
}
2020-07-31 22:13:21 -07:00
nvm_get_checksum_alg( ) {
local NVM_CHECKSUM_BIN
NVM_CHECKSUM_BIN = " $( nvm_get_checksum_binary 2>/dev/null) "
case " ${ NVM_CHECKSUM_BIN - } " in
sha256sum | shasum | sha256 | gsha256sum | openssl | bssl)
nvm_echo 'sha-256'
; ;
sha1sum | sha1)
nvm_echo 'sha-1'
; ;
*)
nvm_get_checksum_binary
return $?
; ;
esac
}
2016-08-10 23:10:41 -07:00
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
fi
2017-03-20 16:57:26 +08:00
if nvm_has_non_aliased "sha256sum" ; then
2016-08-10 23:10:41 -07:00
nvm_err 'Computing checksum with sha256sum'
command sha256sum " ${ FILE } " | command awk '{print $1}'
2017-03-20 16:57:26 +08:00
elif nvm_has_non_aliased "shasum" ; then
2016-08-10 23:10:41 -07:00
nvm_err 'Computing checksum with shasum -a 256'
command shasum -a 256 " ${ FILE } " | command awk '{print $1}'
2017-03-20 16:57:26 +08:00
elif nvm_has_non_aliased "sha256" ; then
2016-08-10 23:10:41 -07:00
nvm_err 'Computing checksum with sha256 -q'
command sha256 -q " ${ FILE } " | command awk '{print $1}'
2017-03-20 16:57:26 +08:00
elif nvm_has_non_aliased "gsha256sum" ; then
2016-08-10 23:10:41 -07:00
nvm_err 'Computing checksum with gsha256sum'
command gsha256sum " ${ FILE } " | command awk '{print $1}'
2017-03-20 16:57:26 +08:00
elif nvm_has_non_aliased "openssl" ; then
2016-08-10 23:10:41 -07:00
nvm_err 'Computing checksum with openssl dgst -sha256'
2017-03-21 04:23:53 +08:00
command openssl dgst -sha256 " ${ FILE } " | command awk '{print $NF}'
2017-03-20 16:57:26 +08:00
elif nvm_has_non_aliased "bssl" ; then
2016-08-10 23:10:41 -07:00
nvm_err 'Computing checksum with bssl sha256sum'
command bssl sha256sum " ${ FILE } " | command awk '{print $1}'
2017-03-20 16:57:26 +08:00
elif nvm_has_non_aliased "sha1sum" ; then
2016-08-10 23:10:41 -07:00
nvm_err 'Computing checksum with sha1sum'
command sha1sum " ${ FILE } " | command awk '{print $1}'
2017-03-20 16:57:26 +08:00
elif nvm_has_non_aliased "sha1" ; then
2016-08-10 23:10:41 -07:00
nvm_err 'Computing checksum with sha1 -q'
command sha1 -q " ${ FILE } "
fi
}
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
fi
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
fi
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
2023-08-06 14:51:48 +12:00
elif [ " ${ COMPUTED_SUM } " != " ${ CHECKSUM } " ] && [ " ${ COMPUTED_SUM } " != " \\ ${ CHECKSUM } " ] ; then
2016-08-10 23:10:41 -07:00
nvm_err " Checksums do not match: ' ${ COMPUTED_SUM } ' found, ' ${ CHECKSUM } ' expected. "
return 1
fi
nvm_err 'Checksums matched!'
}
2016-08-11 01:45:11 -07:00
# args: flavor, type, version, slug, compression
2016-08-10 23:10:41 -07:00
nvm_get_checksum( ) {
2016-08-11 01:45:11 -07:00
local FLAVOR
case " ${ 1 - } " in
node | iojs) FLAVOR = " ${ 1 } " ; ;
*)
nvm_err 'supported flavors: node, iojs'
return 2
; ;
esac
local MIRROR
MIRROR = " $( nvm_get_mirror " ${ FLAVOR } " " ${ 2 - } " ) "
if [ -z " ${ MIRROR } " ] ; then
return 1
fi
2016-08-10 23:10:41 -07:00
local SHASUMS_URL
if [ " $( nvm_get_checksum_alg) " = 'sha-256' ] ; then
2016-08-11 01:45:11 -07:00
SHASUMS_URL = " ${ MIRROR } / ${ 3 } /SHASUMS256.txt "
2016-08-10 23:10:41 -07:00
else
2016-08-11 01:45:11 -07:00
SHASUMS_URL = " ${ MIRROR } / ${ 3 } /SHASUMS.txt "
2016-08-10 23:10:41 -07:00
fi
2016-08-11 01:45:11 -07:00
2021-01-02 00:03:24 +01:00
nvm_download -L -s " ${ SHASUMS_URL } " -o - | command awk " { if (\" ${ 4 } . ${ 5 } \" == \$2) print \$1} "
2016-08-10 23:10:41 -07:00
}
2014-03-18 01:41:02 +01:00
nvm_print_versions( ) {
2014-06-22 15:42:17 -07:00
local NVM_CURRENT
2022-06-05 13:27:03 +08:00
NVM_CURRENT = $( nvm_ls_current)
[New] Added `set-colors` command. See details below:
This command allows users to replace default colors with their own custom colors.
- top-level commands modified: alias, ls, ls-remote
- helper functions added: nvm_echo_with_colors, nvm_err_with_colors,
nvm_set_colors, nvm_get_colors, nvm_print_color_code
- functions modified: nvm_print_formatted_alias, nvm_print_versions, nvm_print_alias_path (implicitly), nvm_print_default_alias (implicitly), nvm_list_aliases (implicitly)
We added tests and info on using this command to the README!
Co-authored-by: Dena Burd <29719099+gitburd@users.noreply.github.com>
Co-authored-by: Naomi Quinones <52065567+naomiquinones@users.noreply.github.com>
2020-08-17 14:56:13 -07:00
local INSTALLED_COLOR
local SYSTEM_COLOR
local CURRENT_COLOR
local NOT_INSTALLED_COLOR
local DEFAULT_COLOR
local LTS_COLOR
2022-06-05 13:27:03 +08:00
local NVM_HAS_COLORS
2022-10-26 10:12:06 -07:00
NVM_HAS_COLORS = 0
[New] Added `set-colors` command. See details below:
This command allows users to replace default colors with their own custom colors.
- top-level commands modified: alias, ls, ls-remote
- helper functions added: nvm_echo_with_colors, nvm_err_with_colors,
nvm_set_colors, nvm_get_colors, nvm_print_color_code
- functions modified: nvm_print_formatted_alias, nvm_print_versions, nvm_print_alias_path (implicitly), nvm_print_default_alias (implicitly), nvm_list_aliases (implicitly)
We added tests and info on using this command to the README!
Co-authored-by: Dena Burd <29719099+gitburd@users.noreply.github.com>
Co-authored-by: Naomi Quinones <52065567+naomiquinones@users.noreply.github.com>
2020-08-17 14:56:13 -07:00
INSTALLED_COLOR = $( nvm_get_colors 1)
SYSTEM_COLOR = $( nvm_get_colors 2)
CURRENT_COLOR = $( nvm_get_colors 3)
NOT_INSTALLED_COLOR = $( nvm_get_colors 4)
DEFAULT_COLOR = $( nvm_get_colors 5)
LTS_COLOR = $( nvm_get_colors 6)
2016-08-06 23:57:15 -07:00
if [ -z " ${ NVM_NO_COLORS - } " ] && nvm_has_colors; then
2016-05-07 18:51:21 -07:00
NVM_HAS_COLORS = 1
fi
2022-06-05 13:27:03 +08:00
command awk \
-v remote_versions = " $( printf '%s' " ${ 1 - } " | tr '\n' '|' ) " \
-v installed_versions = " $( nvm_ls | tr '\n' '|' ) " -v current = " $NVM_CURRENT " \
-v installed_color = " $INSTALLED_COLOR " -v system_color = " $SYSTEM_COLOR " \
-v current_color = " $CURRENT_COLOR " -v default_color = " $DEFAULT_COLOR " \
-v old_lts_color = " $DEFAULT_COLOR " -v has_colors = " $NVM_HAS_COLORS " '
2022-10-18 11:25:12 +08:00
function alen( arr, i, len) { len = 0; for ( i in arr) len++; return len; }
2022-06-05 13:27:03 +08:00
BEGIN {
2022-10-13 20:16:42 -07:00
fmt_installed = has_colors ? ( installed_color ? "\033[" installed_color "%15s\033[0m" : "%15s" ) : "%15s *" ;
fmt_system = has_colors ? ( system_color ? "\033[" system_color "%15s\033[0m" : "%15s" ) : "%15s *" ;
fmt_current = has_colors ? ( current_color ? "\033[" current_color "->%13s\033[0m" : "%15s" ) : "->%13s *" ;
2022-06-05 13:27:03 +08:00
latest_lts_color = current_color;
sub( /0; /, "1;" , latest_lts_color) ;
2022-10-13 20:16:42 -07:00
fmt_latest_lts = has_colors && latest_lts_color ? ( "\033[" latest_lts_color " (Latest LTS: %s)\033[0m" ) : " (Latest LTS: %s)" ;
fmt_old_lts = has_colors && old_lts_color ? ( "\033[" old_lts_color " (LTS: %s)\033[0m" ) : " (LTS: %s)" ;
2022-06-05 13:27:03 +08:00
split( remote_versions, lines, "|" ) ;
split( installed_versions, installed, "|" ) ;
2022-10-18 11:25:12 +08:00
rows = alen( lines) ;
2022-06-05 13:27:03 +08:00
for ( n = 1; n <= rows; n++) {
split( lines[ n] , fields, "[[:blank:]]+" ) ;
2022-10-18 11:25:12 +08:00
cols = alen( fields) ;
2022-06-05 13:27:03 +08:00
version = fields[ 1] ;
is_installed = 0;
for ( i in installed) {
if ( version = = installed[ i] ) {
is_installed = 1;
break;
}
}
fmt_version = "%15s" ;
if ( version = = current) {
fmt_version = fmt_current;
} else if ( version = = "system" ) {
fmt_version = fmt_system;
} else if ( is_installed) {
fmt_version = fmt_installed;
}
padding = ( !has_colors && is_installed) ? "" : " " ;
if ( cols = = 1) {
formatted = sprintf( fmt_version, version) ;
} else if ( cols = = 2) {
formatted = sprintf( ( fmt_version padding fmt_old_lts) , version, fields[ 2] ) ;
} else if ( cols = = 3 && fields[ 3] = = "*" ) {
formatted = sprintf( ( fmt_version padding fmt_latest_lts) , version, fields[ 2] ) ;
}
output[ n] = formatted;
}
for ( n = 1; n <= rows; n++) {
print output[ n]
}
exit
} '
2011-01-22 17:48:57 +01:00
}
2014-09-28 22:36:02 -07:00
nvm_validate_implicit_alias( ) {
2015-02-10 14:41:45 -08:00
local NVM_IOJS_PREFIX
NVM_IOJS_PREFIX = " $( nvm_iojs_prefix) "
local NVM_NODE_PREFIX
NVM_NODE_PREFIX = " $( nvm_node_prefix) "
case " $1 " in
2018-05-22 20:57:40 +08:00
"stable" | "unstable" | " ${ NVM_IOJS_PREFIX } " | " ${ NVM_NODE_PREFIX } " )
2015-02-10 14:41:45 -08:00
return
; ;
*)
2018-05-22 20:57:40 +08:00
nvm_err " Only implicit aliases 'stable', 'unstable', ' ${ NVM_IOJS_PREFIX } ', and ' ${ NVM_NODE_PREFIX } ' are supported. "
2015-02-10 14:41:45 -08:00
return 1
; ;
esac
2014-09-28 22:36:02 -07:00
}
2014-09-28 22:40:17 -07:00
nvm_print_implicit_alias( ) {
if [ " _ $1 " != "_local" ] && [ " _ $1 " != "_remote" ] ; then
2016-05-05 00:17:35 -07:00
nvm_err "nvm_print_implicit_alias must be specified with local or remote as the first argument."
2014-09-28 22:40:17 -07:00
return 1
fi
2015-07-03 21:10:12 -07:00
local NVM_IMPLICIT
NVM_IMPLICIT = " $2 "
2018-05-22 20:57:40 +08:00
if ! nvm_validate_implicit_alias " ${ NVM_IMPLICIT } " ; then
2014-09-28 22:40:17 -07:00
return 2
fi
2015-02-10 14:41:45 -08:00
local NVM_IOJS_PREFIX
NVM_IOJS_PREFIX = " $( nvm_iojs_prefix) "
local NVM_NODE_PREFIX
NVM_NODE_PREFIX = " $( nvm_node_prefix) "
local NVM_COMMAND
2015-07-03 21:10:12 -07:00
local NVM_ADD_PREFIX_COMMAND
2014-09-28 22:40:17 -07:00
local LAST_TWO
2018-05-22 20:57:40 +08:00
case " ${ NVM_IMPLICIT } " in
" ${ NVM_IOJS_PREFIX } " )
2015-02-10 14:41:45 -08:00
NVM_COMMAND = "nvm_ls_remote_iojs"
2015-07-03 21:10:12 -07:00
NVM_ADD_PREFIX_COMMAND = "nvm_add_iojs_prefix"
2015-02-10 14:41:45 -08:00
if [ " _ $1 " = "_local" ] ; then
2018-05-22 20:57:40 +08:00
NVM_COMMAND = " nvm_ls ${ NVM_IMPLICIT } "
2015-02-10 14:41:45 -08:00
fi
2018-11-08 00:55:52 +01:00
nvm_is_zsh && setopt local_options shwordsplit
2015-02-10 14:41:45 -08:00
local NVM_IOJS_VERSION
local EXIT_CODE
2018-05-22 20:57:40 +08:00
NVM_IOJS_VERSION = " $( ${ NVM_COMMAND } ) " && :
2015-02-10 14:41:45 -08:00
EXIT_CODE = " $? "
2018-05-22 20:57:40 +08:00
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) "
2015-09-09 22:37:32 +09:00
fi
2015-02-10 14:41:45 -08:00
2015-09-09 22:37:32 +09:00
if [ " _ $NVM_IOJS_VERSION " = "_N/A" ] ; then
2016-05-05 00:17:35 -07:00
nvm_echo 'N/A'
2015-09-09 22:37:32 +09:00
else
2018-05-22 20:57:40 +08:00
${ NVM_ADD_PREFIX_COMMAND } " ${ NVM_IOJS_VERSION } "
2015-09-09 22:37:32 +09:00
fi
2015-02-10 14:41:45 -08:00
return $EXIT_CODE
; ;
2018-05-22 20:57:40 +08:00
" ${ NVM_NODE_PREFIX } " )
2016-05-05 00:17:35 -07:00
nvm_echo 'stable'
2015-02-10 14:41:45 -08:00
return
; ;
*)
NVM_COMMAND = "nvm_ls_remote"
if [ " _ $1 " = "_local" ] ; then
NVM_COMMAND = "nvm_ls node"
fi
2018-11-08 00:55:52 +01:00
nvm_is_zsh && setopt local_options shwordsplit
2015-02-10 14:41:45 -08:00
2016-06-25 13:27:56 -07:00
LAST_TWO = $( $NVM_COMMAND | nvm_grep -e '^v' | command cut -c2- | command cut -d . -f 1,2 | uniq)
2015-02-10 14:41:45 -08:00
; ;
esac
2014-09-28 22:40:17 -07:00
local MINOR
local STABLE
local UNSTABLE
local MOD
2015-08-22 09:45:49 -07:00
local NORMALIZED_VERSION
2014-10-10 23:26:10 -04:00
2018-11-08 00:55:52 +01:00
nvm_is_zsh && setopt local_options shwordsplit
2014-09-28 22:40:17 -07:00
for MINOR in $LAST_TWO ; do
2015-08-22 09:45:49 -07:00
NORMALIZED_VERSION = " $( nvm_normalize_version " $MINOR " ) "
if [ " _0 ${ NORMALIZED_VERSION #? } " != " _ $NORMALIZED_VERSION " ] ; then
2014-09-28 22:40:17 -07:00
STABLE = " $MINOR "
2015-08-22 09:45:49 -07:00
else
2018-05-22 20:57:40 +08:00
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 } "
2015-08-22 09:45:49 -07:00
fi
2014-09-28 22:40:17 -07:00
fi
done
2014-10-10 23:26:10 -04:00
2015-10-12 16:07:29 -07:00
if [ " _ $2 " = '_stable' ] ; then
2016-05-05 00:17:35 -07:00
nvm_echo " ${ STABLE } "
2015-10-12 16:07:29 -07:00
elif [ " _ $2 " = '_unstable' ] ; then
2018-05-24 12:23:02 -04:00
nvm_echo " ${ UNSTABLE :- "N/A" } "
2014-09-28 22:40:17 -07:00
fi
}
2015-01-13 02:41:55 -08:00
nvm_get_os( ) {
local NVM_UNAME
2016-05-30 18:06:33 -07:00
NVM_UNAME = " $( command uname -a) "
2015-01-13 02:41:55 -08:00
local NVM_OS
2018-05-22 20:57:40 +08:00
case " ${ NVM_UNAME } " in
2015-01-13 02:41:55 -08:00
Linux\ *) NVM_OS = linux ; ;
Darwin\ *) NVM_OS = darwin ; ;
SunOS\ *) NVM_OS = sunos ; ;
FreeBSD\ *) NVM_OS = freebsd ; ;
2020-12-26 22:23:35 +05:30
OpenBSD\ *) NVM_OS = openbsd ; ;
2016-11-10 11:53:48 +00:00
AIX\ *) NVM_OS = aix ; ;
2021-01-02 00:03:24 +01:00
CYGWIN* | MSYS* | MINGW*) NVM_OS = win ; ;
2015-01-13 02:41:55 -08:00
esac
2016-05-05 00:17:35 -07:00
nvm_echo " ${ NVM_OS - } "
2015-01-13 02:41:55 -08:00
}
nvm_get_arch( ) {
2015-09-28 16:02:34 -07:00
local HOST_ARCH
local NVM_OS
local EXIT_CODE
2023-03-08 09:15:51 +01:00
local LONG_BIT
2015-09-28 16:02:34 -07:00
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.
2018-05-22 20:57:40 +08:00
if [ " _ ${ NVM_OS } " = "_sunos" ] ; then
2016-11-25 00:56:28 -06:00
if HOST_ARCH = $( pkg_info -Q MACHINE_ARCH pkg_install) ; then
2018-02-28 02:16:24 +08:00
HOST_ARCH = $( nvm_echo " ${ HOST_ARCH } " | command tail -1)
2016-07-29 13:51:06 -07:00
else
2016-11-25 00:56:28 -06:00
HOST_ARCH = $( isainfo -n)
2015-09-28 16:02:34 -07:00
fi
2018-05-22 20:57:40 +08:00
elif [ " _ ${ NVM_OS } " = "_aix" ] ; then
2018-01-26 11:30:57 +08:00
HOST_ARCH = ppc64
2015-09-28 16:02:34 -07:00
else
2018-01-26 11:30:57 +08:00
HOST_ARCH = " $( command uname -m) "
2023-03-08 09:15:51 +01:00
LONG_BIT = " $( getconf LONG_BIT 2>/dev/null) "
2015-09-28 16:02:34 -07:00
fi
2015-01-13 02:41:55 -08:00
local NVM_ARCH
2018-05-22 20:57:40 +08:00
case " ${ HOST_ARCH } " in
2015-09-28 16:02:34 -07:00
x86_64 | amd64) NVM_ARCH = "x64" ; ;
2015-04-28 22:56:43 -07:00
i*86) NVM_ARCH = "x86" ; ;
2023-04-29 16:41:31 -07:00
aarch64 | armv8l) NVM_ARCH = "arm64" ; ;
2018-05-22 20:57:40 +08:00
*) NVM_ARCH = " ${ HOST_ARCH } " ; ;
2015-01-13 02:41:55 -08:00
esac
2021-03-22 14:56:25 -05:00
2023-03-08 09:15:51 +01:00
# If running inside a 32Bit docker container the kernel still is 64bit
# change ARCH to 32bit if LONG_BIT is 32
if [ " _ ${ LONG_BIT } " = "_32" ] && [ " ${ NVM_ARCH } " = "x64" ] ; then
NVM_ARCH = "x86"
fi
2021-12-26 15:31:53 +11:00
# If running a 64bit ARM kernel but a 32bit ARM userland,
# change ARCH to 32bit ARM (armv7l) if /sbin/init is 32bit executable
2023-01-22 11:48:59 +01:00
if [ " $( uname) " = "Linux" ] \
&& [ " ${ NVM_ARCH } " = arm64 ] \
&& [ " $( command od -An -t x1 -j 4 -N 1 "/sbin/init" 2>/dev/null) " = ' 01' ] \
; then
2021-03-22 14:56:25 -05:00
NVM_ARCH = armv7l
HOST_ARCH = armv7l
fi
2016-05-05 00:17:35 -07:00
nvm_echo " ${ NVM_ARCH } "
2015-01-13 02:41:55 -08:00
}
2016-02-04 11:16:09 -08:00
nvm_get_minor_version( ) {
local VERSION
VERSION = " $1 "
2018-05-22 20:57:40 +08:00
if [ -z " ${ VERSION } " ] ; then
2016-05-05 00:17:35 -07:00
nvm_err 'a version is required'
2016-02-04 11:16:09 -08:00
return 1
fi
2018-05-22 20:57:40 +08:00
case " ${ VERSION } " in
2016-02-04 11:16:09 -08:00
v | .* | *..* | v*[ !.0123456789] * | [ !v] *[ !.0123456789] * | [ !v0123456789] * | v[ !0123456789] *)
2016-05-05 00:17:35 -07:00
nvm_err 'invalid version number'
2016-02-04 11:16:09 -08:00
return 2
; ;
esac
local PREFIXED_VERSION
2018-05-22 20:57:40 +08:00
PREFIXED_VERSION = " $( nvm_format_version " ${ VERSION } " ) "
2016-02-04 11:16:09 -08:00
local MINOR
2018-05-22 20:57:40 +08:00
MINOR = " $( nvm_echo " ${ PREFIXED_VERSION } " | nvm_grep -e '^v' | command cut -c2- | command cut -d . -f 1,2) "
if [ -z " ${ MINOR } " ] ; then
2016-05-05 00:17:35 -07:00
nvm_err 'invalid version number! (please report this)'
2016-02-04 11:16:09 -08:00
return 3
fi
2016-05-05 00:17:35 -07:00
nvm_echo " ${ MINOR } "
2016-02-04 11:16:09 -08:00
}
2015-04-05 16:49:29 -07:00
nvm_ensure_default_set( ) {
local VERSION
VERSION = " $1 "
2018-05-22 20:57:40 +08:00
if [ -z " ${ VERSION } " ] ; then
2016-05-05 00:17:35 -07:00
nvm_err 'nvm_ensure_default_set: a version is required'
2015-04-05 16:49:29 -07:00
return 1
2017-04-06 03:55:42 +08:00
elif nvm_alias default >/dev/null 2>& 1; then
2015-04-05 16:49:29 -07:00
# default already set
return 0
fi
local OUTPUT
2018-05-22 20:57:40 +08:00
OUTPUT = " $( nvm alias default " ${ VERSION } " ) "
2015-04-05 16:49:29 -07:00
local EXIT_CODE
EXIT_CODE = " $? "
2018-05-22 20:57:40 +08:00
nvm_echo " Creating default alias: ${ OUTPUT } "
2015-04-05 16:49:29 -07:00
return $EXIT_CODE
}
2015-08-23 22:09:31 -07:00
nvm_is_merged_node_version( ) {
2018-01-26 11:30:57 +08:00
nvm_version_greater_than_or_equal_to " $1 " v4.0.0
2015-08-23 22:09:31 -07:00
}
2016-08-10 23:09:54 -07:00
nvm_get_mirror( ) {
case " ${ 1 } - ${ 2 } " in
2017-03-16 23:54:55 -07:00
node-std) nvm_echo " ${ NVM_NODEJS_ORG_MIRROR :- https : //nodejs.org/dist } " ; ;
iojs-std) nvm_echo " ${ NVM_IOJS_ORG_MIRROR :- https : //iojs.org/dist } " ; ;
2016-08-10 23:09:54 -07:00
*)
nvm_err 'unknown type of node.js or io.js release'
return 1
; ;
esac
}
2021-01-02 00:03:24 +01:00
# args: os, prefixed version, version, tarball, extract directory
nvm_install_binary_extract( ) {
if [ " $# " -ne 5 ] ; then
nvm_err 'nvm_install_binary_extract needs 5 parameters'
return 1
fi
local NVM_OS
local PREFIXED_VERSION
local VERSION
local TARBALL
local TMPDIR
NVM_OS = " ${ 1 } "
PREFIXED_VERSION = " ${ 2 } "
VERSION = " ${ 3 } "
TARBALL = " ${ 4 } "
TMPDIR = " ${ 5 } "
local VERSION_PATH
[ -n " ${ TMPDIR - } " ] && \
command mkdir -p " ${ TMPDIR } " && \
VERSION_PATH = " $( nvm_version_path " ${ PREFIXED_VERSION } " ) " || return 1
2021-01-02 00:03:24 +01:00
# For Windows system (GitBash with MSYS, Cygwin)
if [ " ${ NVM_OS } " = 'win' ] ; then
VERSION_PATH = " ${ VERSION_PATH } /bin "
command unzip -q " ${ TARBALL } " -d " ${ TMPDIR } " || return 1
# For non Windows system (including WSL running on Windows)
2021-01-02 00:03:24 +01:00
else
2021-12-19 02:58:18 +00:00
nvm_extract_tarball " ${ NVM_OS } " " ${ VERSION } " " ${ TARBALL } " " ${ TMPDIR } "
2021-01-02 00:03:24 +01:00
fi
command mkdir -p " ${ VERSION_PATH } " || return 1
2021-01-02 00:03:24 +01:00
if [ " ${ NVM_OS } " = 'win' ] ; then
command mv " ${ TMPDIR } / " */* " ${ VERSION_PATH } " || return 1
command chmod +x " ${ VERSION_PATH } " /node.exe || return 1
command chmod +x " ${ VERSION_PATH } " /npm || return 1
command chmod +x " ${ VERSION_PATH } " /npx 2>/dev/null
else
command mv " ${ TMPDIR } / " * " ${ VERSION_PATH } " || return 1
fi
2021-01-02 00:03:24 +01:00
command rm -rf " ${ TMPDIR } "
return 0
}
2016-09-15 21:40:44 -07:00
# args: flavor, type, version, reinstall
2016-08-11 01:45:11 -07:00
nvm_install_binary( ) {
local FLAVOR
case " ${ 1 - } " in
node | iojs) FLAVOR = " ${ 1 } " ; ;
*)
nvm_err 'supported flavors: node, iojs'
return 4
; ;
esac
2016-09-15 21:40:44 -07:00
local TYPE
TYPE = " ${ 2 - } "
2016-08-10 23:21:56 -07:00
2016-08-11 01:45:11 -07:00
local PREFIXED_VERSION
PREFIXED_VERSION = " ${ 3 - } "
2016-09-17 09:24:42 -07:00
if [ -z " ${ PREFIXED_VERSION } " ] ; then
nvm_err 'A version number is required.'
return 3
fi
2021-02-16 19:34:23 +05:30
local nosource
nosource = " ${ 4 - } "
2015-08-22 22:09:04 -07:00
local VERSION
2016-08-11 01:45:11 -07:00
VERSION = " $( nvm_strip_iojs_prefix " ${ PREFIXED_VERSION } " ) "
2015-08-22 22:09:04 -07:00
2021-01-02 00:03:24 +01:00
local NVM_OS
NVM_OS = " $( nvm_get_os) "
2016-08-10 23:21:56 -07:00
2021-01-02 00:03:24 +01:00
if [ -z " ${ NVM_OS } " ] ; then
return 2
2015-09-09 12:15:38 +10:00
fi
2015-08-22 22:09:04 -07:00
2016-08-10 23:21:56 -07:00
local TARBALL
local TMPDIR
2016-08-10 16:57:03 -07:00
2017-03-10 01:07:16 +08:00
local PROGRESS_BAR
2016-11-06 20:43:47 +08:00
local NODE_OR_IOJS
if [ " ${ FLAVOR } " = 'node' ] ; then
NODE_OR_IOJS = " ${ FLAVOR } "
2019-01-22 15:46:29 +08:00
elif [ " ${ FLAVOR } " = 'iojs' ] ; then
NODE_OR_IOJS = "io.js"
2016-11-06 20:43:47 +08:00
fi
2017-03-10 01:07:16 +08:00
if [ " ${ NVM_NO_PROGRESS - } " = "1" ] ; then
# --silent, --show-error, use short option as @samrocketman mentions the compatibility issue.
PROGRESS_BAR = "-sS"
else
PROGRESS_BAR = "--progress-bar"
fi
2016-11-06 20:43:47 +08:00
nvm_echo " Downloading and installing ${ NODE_OR_IOJS - } ${ VERSION } ... "
2017-03-10 01:07:16 +08:00
TARBALL = " $( PROGRESS_BAR = " ${ PROGRESS_BAR } " nvm_download_artifact " ${ FLAVOR } " binary " ${ TYPE - } " " ${ VERSION } " | command tail -1) "
2016-08-11 01:45:11 -07:00
if [ -f " ${ TARBALL } " ] ; then
TMPDIR = " $( dirname " ${ TARBALL } " ) /files "
fi
2018-10-22 08:32:29 -05:00
2021-01-02 00:03:24 +01:00
if nvm_install_binary_extract " ${ NVM_OS } " " ${ PREFIXED_VERSION } " " ${ VERSION } " " ${ TARBALL } " " ${ TMPDIR } " ; then
2018-10-22 08:32:29 -05:00
if [ -n " ${ ALIAS - } " ] ; then
nvm alias " ${ ALIAS } " " ${ provided_version } "
fi
2016-08-10 16:57:03 -07:00
return 0
fi
2021-02-16 19:34:23 +05:30
# Read nosource from arguments
if [ " ${ nosource - } " = '1' ] ; then
nvm_err 'Binary download failed. Download from source aborted.'
return 0
fi
2016-08-10 16:57:03 -07:00
nvm_err 'Binary download failed, trying source.'
2016-08-11 01:45:11 -07:00
if [ -n " ${ TMPDIR - } " ] ; then
command rm -rf " ${ TMPDIR } "
2015-01-13 17:52:18 -08:00
fi
2016-08-11 01:45:11 -07:00
return 1
2015-01-13 17:52:18 -08:00
}
2016-08-10 23:21:56 -07:00
# args: flavor, kind, version
nvm_get_download_slug( ) {
local FLAVOR
case " ${ 1 - } " in
node | iojs) FLAVOR = " ${ 1 } " ; ;
*)
nvm_err 'supported flavors: node, iojs'
return 1
; ;
esac
2015-01-13 14:08:56 -08:00
2016-08-10 23:21:56 -07:00
local KIND
case " ${ 2 - } " in
binary | source ) KIND = " ${ 2 } " ; ;
*)
nvm_err 'supported kinds: binary, source'
return 2
; ;
esac
local VERSION
2016-09-15 21:40:44 -07:00
VERSION = " ${ 3 - } "
2015-01-13 17:52:18 -08:00
2015-01-13 14:08:56 -08:00
local NVM_OS
NVM_OS = " $( nvm_get_os) "
2016-08-10 23:21:56 -07:00
local NVM_ARCH
NVM_ARCH = " $( nvm_get_arch) "
if ! nvm_is_merged_node_version " ${ VERSION } " ; then
if [ " ${ NVM_ARCH } " = 'armv6l' ] || [ " ${ NVM_ARCH } " = 'armv7l' ] ; then
2018-01-26 11:30:57 +08:00
NVM_ARCH = "arm-pi"
2015-01-13 14:08:56 -08:00
fi
fi
2016-08-10 23:21:56 -07:00
2022-03-30 10:53:01 -04:00
# If running MAC M1 :: Node v14.17.0 was the first version to offer official experimental support:
# https://github.com/nodejs/node/issues/40126 (although binary distributions aren't available until v16)
if \
nvm_version_greater '14.17.0' " ${ VERSION } " \
|| ( nvm_version_greater_than_or_equal_to " ${ VERSION } " '15.0.0' && nvm_version_greater '16.0.0' " ${ VERSION } " ) \
; then
2021-11-21 15:59:39 +05:30
if [ " _ ${ NVM_OS } " = '_darwin' ] && [ " ${ NVM_ARCH } " = 'arm64' ] ; then
NVM_ARCH = x64
fi
fi
2016-08-10 23:21:56 -07:00
if [ " ${ KIND } " = 'binary' ] ; then
nvm_echo " ${ FLAVOR } - ${ VERSION } - ${ NVM_OS } - ${ NVM_ARCH } "
elif [ " ${ KIND } " = 'source' ] ; then
nvm_echo " ${ FLAVOR } - ${ VERSION } "
fi
}
2021-01-02 00:03:24 +01:00
nvm_get_artifact_compression( ) {
local VERSION
VERSION = " ${ 1 - } "
local NVM_OS
NVM_OS = " $( nvm_get_os) "
local COMPRESSION
COMPRESSION = 'tar.gz'
2021-01-02 00:03:24 +01:00
if [ " _ ${ NVM_OS } " = '_win' ] ; then
COMPRESSION = 'zip'
elif nvm_supports_xz " ${ VERSION } " ; then
2021-01-02 00:03:24 +01:00
COMPRESSION = 'tar.xz'
fi
nvm_echo " ${ COMPRESSION } "
}
2016-08-10 23:21:56 -07:00
# args: flavor, kind, type, version
nvm_download_artifact( ) {
local FLAVOR
case " ${ 1 - } " in
node | iojs) FLAVOR = " ${ 1 } " ; ;
*)
nvm_err 'supported flavors: node, iojs'
return 1
; ;
esac
local KIND
case " ${ 2 - } " in
binary | source ) KIND = " ${ 2 } " ; ;
*)
nvm_err 'supported kinds: binary, source'
return 1
; ;
esac
2016-08-11 01:45:11 -07:00
local TYPE
TYPE = " ${ 3 - } "
2016-08-10 23:21:56 -07:00
local MIRROR
2016-08-11 01:45:11 -07:00
MIRROR = " $( nvm_get_mirror " ${ FLAVOR } " " ${ TYPE } " ) "
2016-08-10 23:21:56 -07:00
if [ -z " ${ MIRROR } " ] ; then
return 2
fi
local VERSION
VERSION = " ${ 4 } "
2016-09-17 09:24:42 -07:00
if [ -z " ${ VERSION } " ] ; then
nvm_err 'A version number is required.'
return 3
fi
2016-08-13 09:14:45 -07:00
if [ " ${ KIND } " = 'binary' ] && ! nvm_binary_available " ${ VERSION } " ; then
nvm_err " No precompiled binary available for ${ VERSION } . "
2016-08-10 23:21:56 -07:00
return
fi
local SLUG
SLUG = " $( nvm_get_download_slug " ${ FLAVOR } " " ${ KIND } " " ${ VERSION } " ) "
local COMPRESSION
2021-01-02 00:03:24 +01:00
COMPRESSION = " $( nvm_get_artifact_compression " ${ VERSION } " ) "
2016-08-10 23:21:56 -07:00
local CHECKSUM
2016-08-11 01:45:11 -07:00
CHECKSUM = " $( nvm_get_checksum " ${ FLAVOR } " " ${ TYPE } " " ${ VERSION } " " ${ SLUG } " " ${ COMPRESSION } " ) "
2016-08-10 23:21:56 -07:00
local tmpdir
2016-08-13 09:14:45 -07:00
if [ " ${ KIND } " = 'binary' ] ; then
2016-08-13 21:15:12 -07:00
tmpdir = " $( nvm_cache_dir) /bin/ ${ SLUG } "
2016-08-13 09:14:45 -07:00
else
2016-08-13 21:15:12 -07:00
tmpdir = " $( nvm_cache_dir) /src/ ${ SLUG } "
2016-08-13 09:14:45 -07:00
fi
2016-08-10 23:21:56 -07:00
command mkdir -p " ${ tmpdir } /files " || (
nvm_err " creating directory ${ tmpdir } /files failed "
return 3
)
local TARBALL
2021-01-02 00:03:24 +01:00
TARBALL = " ${ tmpdir } / ${ SLUG } . ${ COMPRESSION } "
2016-08-10 23:21:56 -07:00
local TARBALL_URL
2016-08-13 09:14:45 -07:00
if nvm_version_greater_than_or_equal_to " ${ VERSION } " 0.1.14; then
2021-01-02 00:03:24 +01:00
TARBALL_URL = " ${ MIRROR } / ${ VERSION } / ${ SLUG } . ${ COMPRESSION } "
2016-08-13 09:14:45 -07:00
else
# node <= 0.1.13 does not have a directory
2021-01-02 00:03:24 +01:00
TARBALL_URL = " ${ MIRROR } / ${ SLUG } . ${ COMPRESSION } "
2016-08-13 09:14:45 -07:00
fi
2016-08-10 23:21:56 -07:00
2016-11-07 18:51:13 +08:00
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
2016-08-10 23:21:56 -07:00
fi
2016-11-07 18:51:13 +08:00
nvm_compare_checksum " ${ TARBALL } " " ${ CHECKSUM } "
nvm_err "Checksum check failed!"
nvm_err "Removing the broken local cache..."
command rm -rf " ${ TARBALL } "
fi
nvm_err " Downloading ${ TARBALL_URL } ... "
2017-03-10 01:07:16 +08:00
nvm_download -L -C - " ${ PROGRESS_BAR } " " ${ TARBALL_URL } " -o " ${ TARBALL } " || (
2016-11-07 18:51:13 +08:00
command rm -rf " ${ TARBALL } " " ${ tmpdir } "
nvm_err " Binary download from ${ TARBALL_URL } failed, trying source. "
return 4
)
2016-08-10 23:21:56 -07:00
2016-11-07 18:51:13 +08:00
if nvm_grep '404 Not Found' " ${ TARBALL } " >/dev/null; then
2018-05-22 20:57:40 +08:00
command rm -rf " ${ TARBALL } " " ${ tmpdir } "
nvm_err " HTTP 404 at URL ${ TARBALL_URL } "
2016-11-07 18:51:13 +08:00
return 5
2016-08-10 23:21:56 -07:00
fi
2016-11-07 18:51:13 +08:00
nvm_compare_checksum " ${ TARBALL } " " ${ CHECKSUM } " || (
command rm -rf " ${ tmpdir } /files "
return 6
)
2016-08-10 23:21:56 -07:00
nvm_echo " ${ TARBALL } "
2015-01-13 14:08:56 -08:00
}
2021-12-19 02:58:18 +00:00
# args: nvm_os, version, tarball, tmpdir
nvm_extract_tarball( ) {
if [ " $# " -ne 4 ] ; then
nvm_err 'nvm_extract_tarball requires exactly 4 arguments'
return 5
fi
local NVM_OS
NVM_OS = " ${ 1 - } "
local VERSION
VERSION = " ${ 2 - } "
local TARBALL
TARBALL = " ${ 3 - } "
local TMPDIR
TMPDIR = " ${ 4 - } "
local tar_compression_flag
tar_compression_flag = 'z'
if nvm_supports_xz " ${ VERSION } " ; then
tar_compression_flag = 'J'
fi
local tar
tar = 'tar'
if [ " ${ NVM_OS } " = 'aix' ] ; then
tar = 'gtar'
fi
2021-12-19 02:58:18 +00:00
if [ " ${ NVM_OS } " = 'openbsd' ] ; then
if [ " ${ tar_compression_flag } " = 'J' ] ; then
command xzcat " ${ TARBALL } " | " ${ tar } " -xf - -C " ${ TMPDIR } " -s '/[^\/]*\///' || return 1
else
command " ${ tar } " -x${ tar_compression_flag } f " ${ TARBALL } " -C " ${ TMPDIR } " -s '/[^\/]*\///' || return 1
fi
else
command " ${ tar } " -x${ tar_compression_flag } f " ${ TARBALL } " -C " ${ TMPDIR } " --strip-components 1 || return 1
fi
2021-12-19 02:58:18 +00:00
}
2015-12-28 12:20:14 -08:00
nvm_get_make_jobs( ) {
2016-01-17 15:12:02 -08:00
if nvm_is_natural_num " ${ 1 - } " ; then
2015-12-28 12:20:14 -08:00
NVM_MAKE_JOBS = " $1 "
2018-05-22 20:57:40 +08:00
nvm_echo " number of \`make\` jobs: ${ NVM_MAKE_JOBS } "
2015-12-28 12:20:14 -08:00
return
2016-01-17 15:12:02 -08:00
elif [ -n " ${ 1 - } " ] ; then
2015-12-28 12:20:14 -08:00
unset NVM_MAKE_JOBS
2016-05-05 00:17:35 -07:00
nvm_err " $1 is invalid for number of \`make\` jobs, must be a natural number "
2015-12-28 12:20:14 -08:00
fi
local NVM_OS
NVM_OS = " $( nvm_get_os) "
2016-11-24 18:04:14 +00:00
local NVM_CPU_CORES
2018-05-22 20:57:40 +08:00
case " _ ${ NVM_OS } " in
2016-11-28 03:39:48 +08:00
"_linux" )
NVM_CPU_CORES = " $( nvm_grep -c -E '^processor.+: [0-9]+' /proc/cpuinfo) "
; ;
2020-12-26 22:23:35 +05:30
"_freebsd" | "_darwin" | "_openbsd" )
2016-11-28 03:39:48 +08:00
NVM_CPU_CORES = " $( sysctl -n hw.ncpu) "
; ;
"_sunos" )
NVM_CPU_CORES = " $( psrinfo | wc -l) "
; ;
"_aix" )
NVM_CPU_CORES = " $( pmcycles -m | wc -l) "
; ;
esac
2018-05-22 20:57:40 +08:00
if ! nvm_is_natural_num " ${ NVM_CPU_CORES } " ; then
2016-11-24 18:04:14 +00:00
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!'
2015-12-28 12:20:14 -08:00
NVM_MAKE_JOBS = 1
else
2018-05-22 20:57:40 +08:00
nvm_echo " Detected that you have ${ NVM_CPU_CORES } CPU core(s) "
if [ " ${ NVM_CPU_CORES } " -gt 2 ] ; then
2016-11-24 18:04:14 +00:00
NVM_MAKE_JOBS = $(( NVM_CPU_CORES - 1 ))
2018-05-22 20:57:40 +08:00
nvm_echo " Running with ${ NVM_MAKE_JOBS } threads to speed up the build "
2015-12-28 12:20:14 -08:00
else
NVM_MAKE_JOBS = 1
2016-11-24 18:04:14 +00:00
nvm_echo 'Number of CPU core(s) less than or equal to 2, running in single-threaded mode'
2015-12-28 12:20:14 -08:00
fi
fi
}
2016-08-11 23:19:47 -07:00
# args: flavor, type, version, make jobs, additional
nvm_install_source( ) {
local FLAVOR
case " ${ 1 - } " in
node | iojs) FLAVOR = " ${ 1 } " ; ;
*)
nvm_err 'supported flavors: node, iojs'
return 4
; ;
esac
2015-01-25 12:00:52 -08:00
2016-08-11 23:19:47 -07:00
local TYPE
TYPE = " ${ 2 - } "
2015-01-25 12:00:52 -08:00
2016-08-11 23:19:47 -07:00
local PREFIXED_VERSION
PREFIXED_VERSION = " ${ 3 - } "
2016-09-17 09:24:42 -07:00
if [ -z " ${ PREFIXED_VERSION } " ] ; then
nvm_err 'A version number is required.'
return 3
fi
2015-01-13 17:33:19 -08:00
local VERSION
2016-08-11 23:19:47 -07:00
VERSION = " $( nvm_strip_iojs_prefix " ${ PREFIXED_VERSION } " ) "
2015-12-28 12:20:14 -08:00
local NVM_MAKE_JOBS
2016-08-11 23:19:47 -07:00
NVM_MAKE_JOBS = " ${ 4 - } "
2015-01-13 17:33:19 -08:00
local ADDITIONAL_PARAMETERS
2016-08-11 23:19:47 -07:00
ADDITIONAL_PARAMETERS = " ${ 5 - } "
2015-01-13 17:33:19 -08:00
2015-06-12 23:36:02 +01:00
local NVM_ARCH
NVM_ARCH = " $( nvm_get_arch) "
2016-08-13 09:14:45 -07:00
if [ " ${ NVM_ARCH } " = 'armv6l' ] || [ " ${ NVM_ARCH } " = 'armv7l' ] ; then
2017-03-17 23:20:17 -07:00
if [ -n " ${ ADDITIONAL_PARAMETERS } " ] ; then
ADDITIONAL_PARAMETERS = " --without-snapshot ${ ADDITIONAL_PARAMETERS } "
else
ADDITIONAL_PARAMETERS = '--without-snapshot'
fi
2015-06-12 23:36:02 +01:00
fi
2016-08-13 09:14:45 -07:00
if [ -n " ${ ADDITIONAL_PARAMETERS } " ] ; then
nvm_echo " Additional options while compiling: ${ ADDITIONAL_PARAMETERS } "
2015-01-13 17:33:19 -08:00
fi
local NVM_OS
NVM_OS = " $( nvm_get_os) "
local make
make = 'make'
2016-11-29 15:30:01 +08:00
local MAKE_CXX
case " ${ NVM_OS } " in
2016-04-14 20:57:10 -04:00
'freebsd' | 'openbsd' )
2016-11-29 15:30:01 +08:00
make = 'gmake'
MAKE_CXX = " CC= ${ CC :- cc } CXX= ${ CXX :- c ++ } "
; ;
'darwin' )
MAKE_CXX = " CC= ${ CC :- cc } CXX= ${ CXX :- c ++ } "
; ;
'aix' )
make = 'gmake'
; ;
esac
2017-06-13 13:06:53 +08:00
if nvm_has "clang++" && nvm_has "clang" && nvm_version_greater_than_or_equal_to " $( nvm_clang_version) " 3.5; then
2018-05-22 20:57:40 +08:00
if [ -z " ${ CC - } " ] || [ -z " ${ CXX - } " ] ; then
2017-04-08 09:16:54 -07:00
nvm_echo "Clang v3.5+ detected! CC or CXX not specified, will use Clang as C/C++ compiler!"
2016-11-29 15:30:01 +08:00
MAKE_CXX = " CC= ${ CC :- cc } CXX= ${ CXX :- c ++ } "
fi
2016-11-14 05:39:34 +08:00
fi
2015-12-05 15:06:01 +08:00
2016-08-13 09:14:45 -07:00
local TARBALL
local TMPDIR
local VERSION_PATH
2017-03-10 01:07:16 +08:00
if [ " ${ NVM_NO_PROGRESS - } " = "1" ] ; then
# --silent, --show-error, use short option as @samrocketman mentions the compatibility issue.
PROGRESS_BAR = "-sS"
else
PROGRESS_BAR = "--progress-bar"
fi
2018-11-08 00:55:52 +01:00
nvm_is_zsh && setopt local_options shwordsplit
2018-04-29 15:35:38 -07:00
2017-03-10 01:07:16 +08:00
TARBALL = " $( PROGRESS_BAR = " ${ PROGRESS_BAR } " nvm_download_artifact " ${ FLAVOR } " source " ${ TYPE } " " ${ VERSION } " | command tail -1) " && \
2016-11-14 03:45:52 +08:00
[ -f " ${ TARBALL } " ] && \
TMPDIR = " $( dirname " ${ TARBALL } " ) /files " && \
2017-04-06 03:55:42 +08:00
if ! (
2016-11-14 03:45:52 +08:00
# shellcheck disable=SC2086
2016-08-13 09:14:45 -07:00
command mkdir -p " ${ TMPDIR } " && \
2021-12-19 02:58:18 +00:00
nvm_extract_tarball " ${ NVM_OS } " " ${ VERSION } " " ${ TARBALL } " " ${ TMPDIR } " && \
2016-08-11 23:19:47 -07:00
VERSION_PATH = " $( nvm_version_path " ${ PREFIXED_VERSION } " ) " && \
2016-11-03 10:08:24 -07:00
nvm_cd " ${ TMPDIR } " && \
2017-03-17 23:20:17 -07:00
nvm_echo '$>' ./configure --prefix= " ${ VERSION_PATH } " $ADDITIONAL_PARAMETERS '<' && \
2016-08-13 09:14:45 -07:00
./configure --prefix= " ${ VERSION_PATH } " $ADDITIONAL_PARAMETERS && \
$make -j " ${ NVM_MAKE_JOBS } " ${ MAKE_CXX - } && \
command rm -f " ${ VERSION_PATH } " 2>/dev/null && \
2016-11-14 03:45:52 +08:00
$make -j " ${ NVM_MAKE_JOBS } " ${ MAKE_CXX - } install
2016-08-13 09:14:45 -07:00
) ; then
2017-04-06 03:55:42 +08:00
nvm_err " nvm: install ${ VERSION } failed! "
command rm -rf " ${ TMPDIR - } "
return 1
2015-01-13 17:33:19 -08:00
fi
}
2017-03-27 15:00:50 -07:00
nvm_use_if_needed( ) {
if [ " _ ${ 1 - } " = " _ $( nvm_ls_current) " ] ; then
return
fi
nvm use " $@ "
}
nvm_install_npm_if_needed( ) {
local VERSION
VERSION = " $( nvm_ls_current) "
if ! nvm_has "npm" ; then
nvm_echo 'Installing npm...'
2018-05-22 20:57:40 +08:00
if nvm_version_greater 0.2.0 " ${ VERSION } " ; then
2017-03-27 15:00:50 -07:00
nvm_err 'npm requires node v0.2.3 or higher'
2018-05-22 20:57:40 +08:00
elif nvm_version_greater_than_or_equal_to " ${ VERSION } " 0.2.0; then
if nvm_version_greater 0.2.3 " ${ VERSION } " ; then
2017-03-27 15:00:50 -07:00
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
fi
else
nvm_download -L https://npmjs.org/install.sh -o - | clean = yes sh
fi
fi
return $?
}
2015-06-28 18:08:38 -07:00
nvm_match_version( ) {
local NVM_IOJS_PREFIX
NVM_IOJS_PREFIX = " $( nvm_iojs_prefix) "
local PROVIDED_VERSION
PROVIDED_VERSION = " $1 "
2018-05-22 20:57:40 +08:00
case " _ ${ PROVIDED_VERSION } " in
" _ ${ NVM_IOJS_PREFIX } " | '_io.js' )
nvm_version " ${ NVM_IOJS_PREFIX } "
2015-06-28 18:08:38 -07:00
; ;
2016-05-05 00:17:35 -07:00
'_system' )
nvm_echo 'system'
2015-06-28 18:08:38 -07:00
; ;
*)
2018-05-22 20:57:40 +08:00
nvm_version " ${ PROVIDED_VERSION } "
2015-06-28 18:08:38 -07:00
; ;
esac
}
2015-07-02 23:47:29 -07:00
nvm_npm_global_modules( ) {
local NPMLIST
local VERSION
VERSION = " $1 "
2020-03-10 23:51:17 -07:00
NPMLIST = $( nvm use " ${ VERSION } " >/dev/null && npm list -g --depth= 0 2>/dev/null | command sed 1,1d | nvm_grep -v 'UNMET PEER DEPENDENCY' )
2015-07-02 23:47:29 -07:00
local INSTALLS
2018-05-22 20:57:40 +08:00
INSTALLS = $( nvm_echo " ${ NPMLIST } " | command sed -e '/ -> / d' -e '/\(empty\)/ d' -e 's/^.* \(.*@[^ ]*\).*/\1/' -e '/^npm@[^ ]*.*$/ d' | command xargs)
2015-07-02 23:47:29 -07:00
local LINKS
2018-05-22 20:57:40 +08:00
LINKS = " $( nvm_echo " ${ NPMLIST } " | command sed -n 's/.* -> \(.*\)/\1/ p' ) "
2015-07-02 23:47:29 -07:00
2018-05-22 20:57:40 +08:00
nvm_echo " ${ INSTALLS } //// ${ LINKS } "
2015-07-02 23:47:29 -07:00
}
2020-08-24 22:44:25 -07:00
nvm_npmrc_bad_news_bears( ) {
local NVM_NPMRC
NVM_NPMRC = " ${ 1 - } "
if [ -n " ${ NVM_NPMRC } " ] && [ -f " ${ NVM_NPMRC } " ] && nvm_grep -Ee '^(prefix|globalconfig) *=' <" ${ NVM_NPMRC } " >/dev/null; then
return 0
fi
return 1
}
2015-09-21 04:47:30 -07:00
nvm_die_on_prefix( ) {
local NVM_DELETE_PREFIX
2020-08-23 22:50:41 -07:00
NVM_DELETE_PREFIX = " ${ 1 - } "
2018-05-22 20:57:40 +08:00
case " ${ NVM_DELETE_PREFIX } " in
0 | 1) ; ;
2015-09-21 04:47:30 -07:00
*)
2016-05-05 00:17:35 -07:00
nvm_err 'First argument "delete the prefix" must be zero or one'
2015-09-21 04:47:30 -07:00
return 1
; ;
esac
local NVM_COMMAND
2020-08-23 22:50:41 -07:00
NVM_COMMAND = " ${ 2 - } "
local NVM_VERSION_DIR
NVM_VERSION_DIR = " ${ 3 - } "
if [ -z " ${ NVM_COMMAND } " ] || [ -z " ${ NVM_VERSION_DIR } " ] ; then
nvm_err 'Second argument "nvm command", and third argument "nvm version dir", must both be nonempty'
2015-09-21 04:47:30 -07:00
return 2
fi
2017-12-05 00:00:18 -08:00
# npm first looks at $PREFIX (case-sensitive)
# we do not bother to test the value here; if this env var is set, unset it to continue.
2020-12-21 23:03:30 -08:00
# however, `npm exec` in npm v7.2+ sets $PREFIX; if set, inherit it
2020-12-21 23:47:25 -08:00
if [ -n " ${ PREFIX - } " ] && [ " $( nvm_version_path " $( node -v) " ) " != " ${ PREFIX } " ] ; then
2015-09-21 04:47:37 -07:00
nvm deactivate >/dev/null 2>& 1
2017-12-05 00:00:18 -08:00
nvm_err " nvm is not compatible with the \"PREFIX\" environment variable: currently set to \" ${ PREFIX } \" "
2016-05-05 00:17:35 -07:00
nvm_err 'Run `unset PREFIX` to unset it.'
2015-09-21 04:47:37 -07:00
return 3
fi
2021-01-02 00:03:24 +01:00
local NVM_OS
NVM_OS = " $( nvm_get_os) "
2017-12-05 00:00:18 -08:00
# npm normalizes NPM_CONFIG_-prefixed env vars
# https://github.com/npm/npmconf/blob/22827e4038d6eebaafeb5c13ed2b92cf97b8fb82/npmconf.js#L331-L348
# https://github.com/npm/npm/blob/5e426a78ca02d0044f8dd26e0c5f881217081cbd/lib/config/core.js#L343-L359
#
# here, we avoid trying to replicate "which one wins" or testing the value; if any are defined, it errors
# until none are left.
2021-09-08 23:49:16 -07:00
local NVM_NPM_CONFIG_x_PREFIX_ENV
2020-11-28 15:16:35 +01:00
NVM_NPM_CONFIG_x_PREFIX_ENV = " $( command awk 'BEGIN { for (name in ENVIRON) if (toupper(name) == "NPM_CONFIG_PREFIX") { print name; break } }' ) "
2021-09-08 23:49:16 -07:00
if [ -n " ${ NVM_NPM_CONFIG_x_PREFIX_ENV - } " ] ; then
2017-12-05 00:00:18 -08:00
local NVM_CONFIG_VALUE
2021-09-08 23:49:16 -07:00
eval " NVM_CONFIG_VALUE=\"\$ ${ NVM_NPM_CONFIG_x_PREFIX_ENV } \" "
2021-01-02 00:03:24 +01:00
if [ -n " ${ NVM_CONFIG_VALUE - } " ] && [ " _ ${ NVM_OS } " = "_win" ] ; then
NVM_CONFIG_VALUE = " $( cd " $NVM_CONFIG_VALUE " 2>/dev/null && pwd ) "
fi
2019-12-15 23:39:32 -08:00
if [ -n " ${ NVM_CONFIG_VALUE - } " ] && ! nvm_tree_contains_path " ${ NVM_DIR } " " ${ NVM_CONFIG_VALUE } " ; then
2017-12-05 00:00:18 -08:00
nvm deactivate >/dev/null 2>& 1
2021-09-08 23:49:16 -07:00
nvm_err " nvm is not compatible with the \" ${ NVM_NPM_CONFIG_x_PREFIX_ENV } \" environment variable: currently set to \" ${ NVM_CONFIG_VALUE } \" "
nvm_err " Run \`unset ${ NVM_NPM_CONFIG_x_PREFIX_ENV } \` to unset it. "
2017-12-05 00:00:18 -08:00
return 4
fi
fi
2020-08-24 22:44:25 -07:00
# here, npm config checks npmrc files.
# the stack is: cli, env, project, user, global, builtin, defaults
# cli does not apply; env is covered above, defaults don't exist for prefix
# there are 4 npmrc locations to check: project, global, user, and builtin
# project: find the closest node_modules or package.json-containing dir, `.npmrc`
# global: default prefix + `/etc/npmrc`
# user: $HOME/.npmrc
# builtin: npm install location, `npmrc`
#
# if any of them have a `prefix`, fail.
# if any have `globalconfig`, fail also, just in case, to avoid spidering configs.
local NVM_NPM_BUILTIN_NPMRC
NVM_NPM_BUILTIN_NPMRC = " ${ NVM_VERSION_DIR } /lib/node_modules/npm/npmrc "
if nvm_npmrc_bad_news_bears " ${ NVM_NPM_BUILTIN_NPMRC } " ; then
if [ " _ ${ NVM_DELETE_PREFIX } " = "_1" ] ; then
npm config --loglevel= warn delete prefix --userconfig= " ${ NVM_NPM_BUILTIN_NPMRC } "
npm config --loglevel= warn delete globalconfig --userconfig= " ${ NVM_NPM_BUILTIN_NPMRC } "
else
nvm_err " Your builtin npmrc file ( $( nvm_sanitize_path " ${ NVM_NPM_BUILTIN_NPMRC } " ) ) "
nvm_err 'has a `globalconfig` and/or a `prefix` setting, which are incompatible with nvm.'
nvm_err " Run \` ${ NVM_COMMAND } \` to unset it. "
return 10
fi
2015-09-21 04:47:30 -07:00
fi
2015-09-21 04:47:37 -07:00
2020-08-24 22:44:25 -07:00
local NVM_NPM_GLOBAL_NPMRC
NVM_NPM_GLOBAL_NPMRC = " ${ NVM_VERSION_DIR } /etc/npmrc "
if nvm_npmrc_bad_news_bears " ${ NVM_NPM_GLOBAL_NPMRC } " ; then
if [ " _ ${ NVM_DELETE_PREFIX } " = "_1" ] ; then
npm config --global --loglevel= warn delete prefix
npm config --global --loglevel= warn delete globalconfig
else
nvm_err " Your global npmrc file ( $( nvm_sanitize_path " ${ NVM_NPM_GLOBAL_NPMRC } " ) ) "
nvm_err 'has a `globalconfig` and/or a `prefix` setting, which are incompatible with nvm.'
nvm_err " Run \` ${ NVM_COMMAND } \` to unset it. "
return 10
fi
fi
local NVM_NPM_USER_NPMRC
NVM_NPM_USER_NPMRC = " ${ HOME } /.npmrc "
if nvm_npmrc_bad_news_bears " ${ NVM_NPM_USER_NPMRC } " ; then
if [ " _ ${ NVM_DELETE_PREFIX } " = "_1" ] ; then
npm config --loglevel= warn delete prefix --userconfig= " ${ NVM_NPM_USER_NPMRC } "
npm config --loglevel= warn delete globalconfig --userconfig= " ${ NVM_NPM_USER_NPMRC } "
else
nvm_err " Your user’ s .npmrc file ( $( nvm_sanitize_path " ${ NVM_NPM_USER_NPMRC } " ) ) "
nvm_err 'has a `globalconfig` and/or a `prefix` setting, which are incompatible with nvm.'
nvm_err " Run \` ${ NVM_COMMAND } \` to unset it. "
return 10
fi
fi
local NVM_NPM_PROJECT_NPMRC
NVM_NPM_PROJECT_NPMRC = " $( nvm_find_project_dir) /.npmrc "
if nvm_npmrc_bad_news_bears " ${ NVM_NPM_PROJECT_NPMRC } " ; then
2018-05-22 20:57:40 +08:00
if [ " _ ${ NVM_DELETE_PREFIX } " = "_1" ] ; then
2016-09-18 13:39:50 -07:00
npm config --loglevel= warn delete prefix
2020-08-24 22:44:25 -07:00
npm config --loglevel= warn delete globalconfig
2015-09-21 04:47:30 -07:00
else
2020-08-24 22:44:25 -07:00
nvm_err " Your project npmrc file ( $( nvm_sanitize_path " ${ NVM_NPM_PROJECT_NPMRC } " ) ) "
nvm_err 'has a `globalconfig` and/or a `prefix` setting, which are incompatible with nvm.'
nvm_err " Run \` ${ NVM_COMMAND } \` to unset it. "
2015-09-23 06:25:55 -07:00
return 10
2015-09-21 04:47:30 -07:00
fi
fi
}
2015-09-28 16:02:34 -07:00
# 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.
2020-05-08 16:08:27 -04:00
nvm_iojs_version_has_solaris_binary( ) {
2015-10-12 16:30:59 -07:00
local IOJS_VERSION
IOJS_VERSION = " $1 "
local STRIPPED_IOJS_VERSION
2018-05-22 20:57:40 +08:00
STRIPPED_IOJS_VERSION = " $( nvm_strip_iojs_prefix " ${ IOJS_VERSION } " ) "
if [ " _ ${ STRIPPED_IOJS_VERSION } " = " ${ IOJS_VERSION } " ] ; then
2015-09-28 16:02:34 -07:00
return 1
fi
# io.js started shipping Solaris binaries with io.js v3.3.1
2018-05-22 20:57:40 +08:00
nvm_version_greater_than_or_equal_to " ${ STRIPPED_IOJS_VERSION } " v3.3.1
2015-09-28 16:02:34 -07:00
}
# 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
2018-03-06 04:38:01 +00:00
# available.
2020-05-08 16:08:27 -04:00
nvm_node_version_has_solaris_binary( ) {
2015-10-12 16:30:59 -07:00
local NODE_VERSION
NODE_VERSION = " $1 "
2015-09-28 16:02:34 -07:00
# Error out if $NODE_VERSION is actually an io.js version
2015-10-12 16:30:59 -07:00
local STRIPPED_IOJS_VERSION
2018-05-22 20:57:40 +08:00
STRIPPED_IOJS_VERSION = " $( nvm_strip_iojs_prefix " ${ NODE_VERSION } " ) "
if [ " _ ${ STRIPPED_IOJS_VERSION } " != " _ ${ NODE_VERSION } " ] ; then
2015-09-28 16:02:34 -07:00
return 1
fi
# 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.
2018-05-22 20:57:40 +08:00
nvm_version_greater_than_or_equal_to " ${ NODE_VERSION } " v0.8.6 \
&& ! nvm_version_greater_than_or_equal_to " ${ NODE_VERSION } " v1.0.0
2015-09-28 16:02:34 -07:00
}
# Succeeds if $VERSION represents a version (node, io.js or merged) that has a
# Solaris binary, fails otherwise.
nvm_has_solaris_binary( ) {
2021-11-19 08:53:43 -08:00
local VERSION = " ${ 1 - } "
2018-05-22 20:57:40 +08:00
if nvm_is_merged_node_version " ${ VERSION } " ; then
2015-09-28 16:02:34 -07:00
return 0 # All merged node versions have a Solaris binary
2018-05-22 20:57:40 +08:00
elif nvm_is_iojs_version " ${ VERSION } " ; then
2020-05-08 16:08:27 -04:00
nvm_iojs_version_has_solaris_binary " ${ VERSION } "
2015-09-28 16:02:34 -07:00
else
2020-05-08 16:08:27 -04:00
nvm_node_version_has_solaris_binary " ${ VERSION } "
2015-09-28 16:02:34 -07:00
fi
}
2015-10-01 09:41:34 -07:00
nvm_sanitize_path( ) {
local SANITIZED_PATH
2016-05-05 23:52:26 -07:00
SANITIZED_PATH = " ${ 1 - } "
2018-05-22 20:57:40 +08:00
if [ " _ ${ SANITIZED_PATH } " != " _ ${ NVM_DIR } " ] ; then
SANITIZED_PATH = " $( nvm_echo " ${ SANITIZED_PATH } " | command sed -e " s# ${ NVM_DIR } #\${NVM_DIR}#g " ) "
2015-10-01 09:41:34 -07:00
fi
2018-05-22 20:57:40 +08:00
if [ " _ ${ SANITIZED_PATH } " != " _ ${ HOME } " ] ; then
SANITIZED_PATH = " $( nvm_echo " ${ SANITIZED_PATH } " | command sed -e " s# ${ HOME } #\${HOME}#g " ) "
2016-05-05 23:52:26 -07:00
fi
2018-05-22 20:57:40 +08:00
nvm_echo " ${ SANITIZED_PATH } "
2015-10-01 09:41:34 -07:00
}
2015-12-05 15:06:01 +08:00
nvm_is_natural_num( ) {
2015-12-27 13:15:53 -08:00
if [ -z " $1 " ] ; then
return 4
2015-12-05 15:06:01 +08:00
fi
2015-12-27 13:15:53 -08:00
case " $1 " in
0) return 1 ; ;
-*) return 3 ; ; # some BSDs return false positives for double-negated args
*)
2018-05-22 20:57:40 +08:00
[ " $1 " -eq " $1 " ] 2>/dev/null # returns 2 if it doesn't match
2015-12-27 13:15:53 -08:00
; ;
esac
2015-12-05 15:06:01 +08:00
}
2016-04-18 18:23:24 -07:00
# Check version dir permissions
nvm_check_file_permissions( ) {
2018-11-08 00:55:52 +01:00
nvm_is_zsh && setopt local_options nonomatch
2018-05-31 23:56:20 -07:00
for FILE in " $1 " /* " $1 " /.[ !.] * " $1 " /..?* ; do
2017-04-06 03:55:42 +08:00
if [ -d " $FILE " ] ; then
2020-03-05 17:40:17 -08:00
if [ -n " ${ NVM_DEBUG - } " ] ; then
nvm_err " ${ FILE } "
fi
2023-08-25 22:49:41 -07:00
if [ ! -L " ${ FILE } " ] && ! nvm_check_file_permissions " ${ FILE } " ; then
2017-04-06 03:55:42 +08:00
return 2
fi
elif [ -e " $FILE " ] && [ ! -w " $FILE " ] && [ ! -O " $FILE " ] ; then
nvm_err " file is not writable or self-owned: $( nvm_sanitize_path " $FILE " ) "
return 1
fi
2016-04-18 18:23:24 -07:00
done
return 0
}
2016-08-13 21:15:12 -07:00
nvm_cache_dir( ) {
nvm_echo " ${ NVM_DIR } /.cache "
}
2013-06-22 23:11:43 +10:00
nvm( ) {
2021-08-24 09:34:01 -07:00
if [ " $# " -lt 1 ] ; then
2016-05-05 00:14:12 -07:00
nvm --help
2010-04-15 09:20:27 -07:00
return
fi
2012-11-20 15:32:59 +01:00
2017-04-28 00:41:55 -07:00
local DEFAULT_IFS
2018-02-28 02:16:24 +08:00
DEFAULT_IFS = " $( nvm_echo t | command tr t \\ t)
2017-04-28 00:41:55 -07:00
"
2019-02-23 22:21:46 -08:00
if [ " ${ -#*e } " != " $- " ] ; then
set +e
local EXIT_CODE
IFS = " ${ DEFAULT_IFS } " nvm " $@ "
2021-08-24 09:34:01 -07:00
EXIT_CODE = " $? "
2019-02-23 22:21:46 -08:00
set -e
2021-08-24 09:34:01 -07:00
return " $EXIT_CODE "
2021-09-14 23:26:31 -07:00
elif [ " ${ -#*a } " != " $- " ] ; then
set +a
local EXIT_CODE
IFS = " ${ DEFAULT_IFS } " nvm " $@ "
EXIT_CODE = " $? "
set -a
return " $EXIT_CODE "
2021-12-27 16:02:25 +11:00
elif [ -n " ${ BASH - } " ] && [ " ${ -#*E } " != " $- " ] ; then
# shellcheck disable=SC3041
set +E
local EXIT_CODE
IFS = " ${ DEFAULT_IFS } " nvm " $@ "
EXIT_CODE = " $? "
# shellcheck disable=SC3041
set -E
return " $EXIT_CODE "
2019-02-23 22:21:46 -08:00
elif [ " ${ IFS } " != " ${ DEFAULT_IFS } " ] ; then
2017-04-28 00:41:55 -07:00
IFS = " ${ DEFAULT_IFS } " nvm " $@ "
2021-08-24 09:34:01 -07:00
return " $? "
2017-04-28 00:41:55 -07:00
fi
2020-12-08 12:28:24 -05:00
local i
2020-08-04 16:32:19 -07:00
for i in " $@ "
do
case $i in
2020-11-20 13:06:28 +02:00
--) break ; ;
2020-08-04 16:32:19 -07:00
'-h' | 'help' | '--help' )
[New] Added `set-colors` command. See details below:
This command allows users to replace default colors with their own custom colors.
- top-level commands modified: alias, ls, ls-remote
- helper functions added: nvm_echo_with_colors, nvm_err_with_colors,
nvm_set_colors, nvm_get_colors, nvm_print_color_code
- functions modified: nvm_print_formatted_alias, nvm_print_versions, nvm_print_alias_path (implicitly), nvm_print_default_alias (implicitly), nvm_list_aliases (implicitly)
We added tests and info on using this command to the README!
Co-authored-by: Dena Burd <29719099+gitburd@users.noreply.github.com>
Co-authored-by: Naomi Quinones <52065567+naomiquinones@users.noreply.github.com>
2020-08-17 14:56:13 -07:00
NVM_NO_COLORS = ""
for j in " $@ " ; do
if [ " ${ j } " = '--no-colors' ] ; then
NVM_NO_COLORS = " ${ j } "
break
fi
done
2020-08-04 16:32:19 -07:00
local NVM_IOJS_PREFIX
NVM_IOJS_PREFIX = " $( nvm_iojs_prefix) "
local NVM_NODE_PREFIX
NVM_NODE_PREFIX = " $( nvm_node_prefix) "
NVM_VERSION = " $( nvm --version) "
nvm_echo
nvm_echo " Node Version Manager (v ${ NVM_VERSION } ) "
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'
[New] Added `set-colors` command. See details below:
This command allows users to replace default colors with their own custom colors.
- top-level commands modified: alias, ls, ls-remote
- helper functions added: nvm_echo_with_colors, nvm_err_with_colors,
nvm_set_colors, nvm_get_colors, nvm_print_color_code
- functions modified: nvm_print_formatted_alias, nvm_print_versions, nvm_print_alias_path (implicitly), nvm_print_default_alias (implicitly), nvm_list_aliases (implicitly)
We added tests and info on using this command to the README!
Co-authored-by: Dena Burd <29719099+gitburd@users.noreply.github.com>
Co-authored-by: Naomi Quinones <52065567+naomiquinones@users.noreply.github.com>
2020-08-17 14:56:13 -07:00
nvm_echo ' --no-colors Suppress colored output'
2020-08-04 16:32:19 -07:00
nvm_echo ' nvm --version Print out the installed version of nvm'
2020-10-02 22:22:12 -07:00
nvm_echo ' nvm install [<version>] Download and install a <version>. Uses .nvmrc if available and version is omitted.'
nvm_echo ' The following optional arguments, if provided, must appear directly after `nvm install`:'
nvm_echo ' -s Skip binary download, install from source only.'
2021-02-16 19:34:23 +05:30
nvm_echo ' -b Skip source download, install from binary only.'
2020-08-04 16:32:19 -07:00
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 ' --no-progress Disable the progress bar on any downloads'
nvm_echo ' --alias=<name> After installing, set the alias specified to the version specified. (same as: nvm alias <name> <version>)'
nvm_echo ' --default After installing, set default alias to the version specified. (same as: nvm alias default <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.'
2020-10-02 22:22:12 -07:00
nvm_echo ' nvm use [<version>] Modify PATH to use <version>. Uses .nvmrc if available and version is omitted.'
nvm_echo ' The following optional arguments, if provided, must appear directly after `nvm use`:'
nvm_echo ' --silent Silences stdout/stderr output'
2020-08-04 16:32:19 -07:00
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.'
2020-10-02 22:22:12 -07:00
nvm_echo ' nvm exec [<version>] [<command>] Run <command> on <version>. Uses .nvmrc if available and version is omitted.'
nvm_echo ' The following optional arguments, if provided, must appear directly after `nvm exec`:'
nvm_echo ' --silent Silences stdout/stderr output'
2020-08-04 16:32:19 -07:00
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.'
2020-10-02 22:22:12 -07:00
nvm_echo ' nvm run [<version>] [<args>] Run `node` on <version> with <args> as arguments. Uses .nvmrc if available and version is omitted.'
nvm_echo ' The following optional arguments, if provided, must appear directly after `nvm run`:'
nvm_echo ' --silent Silences stdout/stderr output'
2020-08-04 16:32:19 -07:00
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 of Node'
nvm_echo ' nvm ls [<version>] List installed versions, matching a given <version> if provided'
nvm_echo ' --no-colors Suppress colored output'
nvm_echo ' --no-alias Suppress `nvm alias` output'
nvm_echo ' nvm ls-remote [<version>] List remote versions available for install, matching a given <version> if provided'
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 ' --no-colors Suppress colored output'
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'
2020-10-02 22:22:12 -07:00
nvm_echo ' nvm deactivate Undo effects of `nvm` on current shell'
nvm_echo ' --silent Silences stdout/stderr output'
2020-08-04 16:32:19 -07:00
nvm_echo ' nvm alias [<pattern>] Show all aliases beginning with <pattern>'
nvm_echo ' --no-colors Suppress colored output'
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'
2020-10-02 22:22:12 -07:00
nvm_echo ' nvm which [current | <version>] Display path to installed node version. Uses .nvmrc if available and version is omitted.'
nvm_echo ' --silent Silences stdout/stderr output when a version is omitted'
2020-08-04 16:32:19 -07:00
nvm_echo ' nvm cache dir Display path to the cache directory for nvm'
nvm_echo ' nvm cache clear Empty cache directory for nvm'
[New] Added `set-colors` command. See details below:
This command allows users to replace default colors with their own custom colors.
- top-level commands modified: alias, ls, ls-remote
- helper functions added: nvm_echo_with_colors, nvm_err_with_colors,
nvm_set_colors, nvm_get_colors, nvm_print_color_code
- functions modified: nvm_print_formatted_alias, nvm_print_versions, nvm_print_alias_path (implicitly), nvm_print_default_alias (implicitly), nvm_list_aliases (implicitly)
We added tests and info on using this command to the README!
Co-authored-by: Dena Burd <29719099+gitburd@users.noreply.github.com>
Co-authored-by: Naomi Quinones <52065567+naomiquinones@users.noreply.github.com>
2020-08-17 14:56:13 -07:00
nvm_echo ' nvm set-colors [<color codes>] Set five text colors using format "yMeBg". Available when supported.'
nvm_echo ' Initial colors are:'
2022-10-13 20:16:42 -07:00
nvm_echo_with_colors " $( nvm_wrap_with_color_code b b) $( nvm_wrap_with_color_code y y) $( nvm_wrap_with_color_code g g) $( nvm_wrap_with_color_code r r) $( nvm_wrap_with_color_code e e) "
[New] Added `set-colors` command. See details below:
This command allows users to replace default colors with their own custom colors.
- top-level commands modified: alias, ls, ls-remote
- helper functions added: nvm_echo_with_colors, nvm_err_with_colors,
nvm_set_colors, nvm_get_colors, nvm_print_color_code
- functions modified: nvm_print_formatted_alias, nvm_print_versions, nvm_print_alias_path (implicitly), nvm_print_default_alias (implicitly), nvm_list_aliases (implicitly)
We added tests and info on using this command to the README!
Co-authored-by: Dena Burd <29719099+gitburd@users.noreply.github.com>
Co-authored-by: Naomi Quinones <52065567+naomiquinones@users.noreply.github.com>
2020-08-17 14:56:13 -07:00
nvm_echo ' Color codes:'
2022-10-13 20:16:42 -07:00
nvm_echo_with_colors " $( nvm_wrap_with_color_code r r) / $( nvm_wrap_with_color_code R R) = $( nvm_wrap_with_color_code r red) / $( nvm_wrap_with_color_code R 'bold red' ) "
nvm_echo_with_colors " $( nvm_wrap_with_color_code g g) / $( nvm_wrap_with_color_code G G) = $( nvm_wrap_with_color_code g green) / $( nvm_wrap_with_color_code G 'bold green' ) "
nvm_echo_with_colors " $( nvm_wrap_with_color_code b b) / $( nvm_wrap_with_color_code B B) = $( nvm_wrap_with_color_code b blue) / $( nvm_wrap_with_color_code B 'bold blue' ) "
nvm_echo_with_colors " $( nvm_wrap_with_color_code c c) / $( nvm_wrap_with_color_code C C) = $( nvm_wrap_with_color_code c cyan) / $( nvm_wrap_with_color_code C 'bold cyan' ) "
nvm_echo_with_colors " $( nvm_wrap_with_color_code m m) / $( nvm_wrap_with_color_code M M) = $( nvm_wrap_with_color_code m magenta) / $( nvm_wrap_with_color_code M 'bold magenta' ) "
nvm_echo_with_colors " $( nvm_wrap_with_color_code y y) / $( nvm_wrap_with_color_code Y Y) = $( nvm_wrap_with_color_code y yellow) / $( nvm_wrap_with_color_code Y 'bold yellow' ) "
nvm_echo_with_colors " $( nvm_wrap_with_color_code k k) / $( nvm_wrap_with_color_code K K) = $( nvm_wrap_with_color_code k black) / $( nvm_wrap_with_color_code K 'bold black' ) "
nvm_echo_with_colors " $( nvm_wrap_with_color_code e e) / $( nvm_wrap_with_color_code W W) = $( nvm_wrap_with_color_code e 'light grey' ) / $( nvm_wrap_with_color_code W white) "
2020-08-04 16:32:19 -07:00
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 ' nvm install node Install the latest available version'
nvm_echo ' nvm use node Use the latest version'
nvm_echo ' nvm install --lts Install the latest LTS version'
nvm_echo ' nvm use --lts Use the latest LTS version'
nvm_echo
[New] Added `set-colors` command. See details below:
This command allows users to replace default colors with their own custom colors.
- top-level commands modified: alias, ls, ls-remote
- helper functions added: nvm_echo_with_colors, nvm_err_with_colors,
nvm_set_colors, nvm_get_colors, nvm_print_color_code
- functions modified: nvm_print_formatted_alias, nvm_print_versions, nvm_print_alias_path (implicitly), nvm_print_default_alias (implicitly), nvm_list_aliases (implicitly)
We added tests and info on using this command to the README!
Co-authored-by: Dena Burd <29719099+gitburd@users.noreply.github.com>
Co-authored-by: Naomi Quinones <52065567+naomiquinones@users.noreply.github.com>
2020-08-17 14:56:13 -07:00
nvm_echo ' nvm set-colors cgYmW Set text colors to cyan, green, bold yellow, magenta, and white'
nvm_echo
2020-08-04 16:32:19 -07:00
nvm_echo 'Note:'
nvm_echo ' to remove, delete, or uninstall nvm - just remove the `$NVM_DIR` folder (usually `~/.nvm`)'
nvm_echo
return 0;
; ;
esac
done
2016-08-07 00:08:46 -07:00
local COMMAND
COMMAND = " ${ 1 - } "
shift
2012-11-20 15:32:59 +01:00
# initialize local variables
local VERSION
local ADDITIONAL_PARAMETERS
2016-08-07 00:08:46 -07:00
case $COMMAND in
2018-05-22 20:57:40 +08:00
"cache" )
2016-08-13 21:15:12 -07:00
case " ${ 1 - } " in
dir) nvm_cache_dir ; ;
clear)
local DIR
DIR = " $( nvm_cache_dir) "
if command rm -rf " ${ DIR } " && command mkdir -p " ${ DIR } " ; then
2017-10-28 20:30:28 -04:00
nvm_echo 'nvm cache cleared.'
2016-08-13 21:15:12 -07:00
else
2017-10-28 20:30:28 -04:00
nvm_err " Unable to clear nvm cache: ${ DIR } "
2016-08-13 21:15:12 -07:00
return 1
fi
; ;
*)
>& 2 nvm --help
return 127
; ;
esac
; ;
2018-05-22 20:57:40 +08:00
"debug" )
2018-02-24 02:53:40 +08:00
local OS_VERSION
2018-11-08 00:55:52 +01:00
nvm_is_zsh && setopt local_options shwordsplit
2016-05-05 00:17:35 -07:00
nvm_err " nvm --version: v $( nvm --version) "
2017-07-13 06:15:00 +08:00
if [ -n " ${ TERM_PROGRAM - } " ] ; then
2018-05-22 20:57:40 +08:00
nvm_err " \$TERM_PROGRAM: ${ TERM_PROGRAM } "
2017-07-13 06:15:00 +08:00
fi
2018-05-22 20:57:40 +08:00
nvm_err " \$SHELL: ${ SHELL } "
2021-05-03 14:19:31 -07:00
# shellcheck disable=SC2169,SC3028
2017-11-05 03:25:04 +08:00
nvm_err " \$SHLVL: ${ SHLVL - } "
2020-07-25 13:38:52 -07:00
nvm_err " whoami: ' $( whoami) ' "
2018-05-22 20:57:40 +08:00
nvm_err " \${HOME}: ${ HOME } "
nvm_err " \${NVM_DIR}: ' $( nvm_sanitize_path " ${ NVM_DIR } " ) ' "
nvm_err " \${PATH}: $( nvm_sanitize_path " ${ PATH } " ) "
nvm_err " \$PREFIX: ' $( nvm_sanitize_path " ${ PREFIX } " ) ' "
nvm_err " \${NPM_CONFIG_PREFIX}: ' $( nvm_sanitize_path " ${ NPM_CONFIG_PREFIX } " ) ' "
2017-02-14 09:06:23 -08:00
nvm_err " \$NVM_NODEJS_ORG_MIRROR: ' ${ NVM_NODEJS_ORG_MIRROR } ' "
nvm_err " \$NVM_IOJS_ORG_MIRROR: ' ${ NVM_IOJS_ORG_MIRROR } ' "
2017-03-23 14:48:00 +08:00
nvm_err " shell version: ' $( ${ SHELL } --version | command head -n 1) ' "
2018-02-20 04:05:47 +08:00
nvm_err " uname -a: ' $( command uname -a | command awk '{$2=""; print}' | command xargs) ' "
2020-07-31 22:13:21 -07:00
nvm_err " checksum binary: ' $( nvm_get_checksum_binary 2>/dev/null) ' "
2017-03-23 14:48:00 +08:00
if [ " $( nvm_get_os) " = "darwin" ] && nvm_has sw_vers; then
2018-02-24 02:53:40 +08:00
OS_VERSION = " $( sw_vers | command awk '{print $2}' | command xargs) "
2017-03-23 14:48:00 +08:00
elif [ -r "/etc/issue" ] ; then
2018-02-24 02:53:40 +08:00
OS_VERSION = " $( command head -n 1 /etc/issue | command sed 's/\\.//g' ) "
2018-05-22 20:57:40 +08:00
if [ -z " ${ OS_VERSION } " ] && [ -r "/etc/os-release" ] ; then
2018-02-24 02:53:40 +08:00
# shellcheck disable=SC1091
OS_VERSION = " $( . /etc/os-release && echo " ${ NAME } " " ${ VERSION } " ) "
fi
fi
if [ -n " ${ OS_VERSION } " ] ; then
nvm_err " OS version: ${ OS_VERSION } "
2017-03-23 14:48:00 +08:00
fi
2022-10-21 16:48:00 +08:00
if nvm_has "awk" ; then
2022-10-24 10:51:20 -07:00
nvm_err " awk: $( nvm_command_info awk) , $( { command awk --version 2>/dev/null || command awk -W version; } \
2022-10-21 16:48:00 +08:00
| command head -n 1) "
else
nvm_err "awk: not found"
fi
2017-03-23 14:48:00 +08:00
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"
fi
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"
fi
2017-09-21 22:09:02 +08:00
2017-11-04 22:52:35 +08:00
local TEST_TOOLS ADD_TEST_TOOLS
2022-10-21 16:48:00 +08:00
TEST_TOOLS = "git grep"
2017-11-04 22:52:35 +08:00
ADD_TEST_TOOLS = "sed cut basename rm mkdir xargs"
if [ "darwin" != " $( nvm_get_os) " ] && [ "freebsd" != " $( nvm_get_os) " ] ; then
TEST_TOOLS = " ${ TEST_TOOLS } ${ ADD_TEST_TOOLS } "
else
for tool in ${ ADD_TEST_TOOLS } ; do
if nvm_has " ${ tool } " ; then
nvm_err " ${ tool } : $( nvm_command_info " ${ tool } " ) "
else
nvm_err " ${ tool } : not found "
fi
done
fi
for tool in ${ TEST_TOOLS } ; do
local NVM_TOOL_VERSION
2017-09-21 22:09:02 +08:00
if nvm_has " ${ tool } " ; then
2017-11-04 22:52:35 +08:00
if command ls -l " $( nvm_command_info " ${ tool } " | command awk '{print $1}' ) " | command grep -q busybox; then
NVM_TOOL_VERSION = " $( command " ${ tool } " --help 2>& 1 | command head -n 1) "
else
NVM_TOOL_VERSION = " $( command " ${ tool } " --version 2>& 1 | command head -n 1) "
fi
nvm_err " ${ tool } : $( nvm_command_info " ${ tool } " ) , ${ NVM_TOOL_VERSION } "
2017-09-21 22:09:02 +08:00
else
nvm_err " ${ tool } : not found "
fi
2017-11-04 22:52:35 +08:00
unset NVM_TOOL_VERSION
2017-09-21 22:09:02 +08:00
done
2017-11-04 22:52:35 +08:00
unset TEST_TOOLS ADD_TEST_TOOLS
2017-09-21 22:09:02 +08:00
2015-06-28 17:19:15 -07:00
local NVM_DEBUG_OUTPUT
2018-05-22 20:57:40 +08:00
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 } " ) "
2015-05-14 14:56:26 -07:00
done
return 42
; ;
2018-05-22 20:57:40 +08:00
"install" | "i" )
2014-06-22 15:42:17 -07:00
local version_not_provided
version_not_provided = 0
2015-01-13 02:41:55 -08:00
local NVM_OS
NVM_OS = " $( nvm_get_os) "
2012-11-20 15:32:59 +01:00
2014-07-18 13:18:09 -07:00
if ! nvm_has "curl" && ! nvm_has "wget" ; then
2016-05-05 00:17:35 -07:00
nvm_err 'nvm needs curl or wget to proceed.'
2014-03-21 09:23:16 -07:00
return 1
2012-02-24 11:25:27 -06:00
fi
2012-07-03 10:36:23 +01:00
2016-08-07 00:08:46 -07:00
if [ $# -lt 1 ] ; then
2014-04-16 02:25:58 -07:00
version_not_provided = 1
2010-04-15 09:20:27 -07:00
fi
2013-01-12 00:37:17 +09:00
2015-12-27 12:52:01 -08:00
local nobinary
2021-02-16 19:34:23 +05:30
local nosource
2017-03-10 01:07:16 +08:00
local noprogress
2013-01-12 00:37:17 +09:00
nobinary = 0
2017-03-10 01:07:16 +08:00
noprogress = 0
2021-02-16 19:34:23 +05:30
nosource = 0
2016-04-25 00:44:24 -07:00
local LTS
2018-10-22 08:32:29 -05:00
local ALIAS
2017-06-11 14:15:04 -07:00
local NVM_UPGRADE_NPM
NVM_UPGRADE_NPM = 0
2020-06-04 16:15:39 -07:00
local PROVIDED_REINSTALL_PACKAGES_FROM
local REINSTALL_PACKAGES_FROM
local SKIP_DEFAULT_PACKAGES
2018-05-22 20:57:40 +08:00
while [ $# -ne 0 ] ; do
2015-12-27 12:52:01 -08:00
case " $1 " in
2019-02-25 00:13:50 -08:00
---*)
nvm_err 'arguments with `---` are not supported - this is likely a typo'
return 55;
; ;
2015-12-27 12:52:01 -08:00
-s)
shift # consume "-s"
nobinary = 1
2021-02-16 19:34:23 +05:30
if [ $nosource -eq 1 ] ; then
nvm err '-s and -b cannot be set together since they would skip install from both binary and source'
return 6
fi
; ;
-b)
shift # consume "-b"
nosource = 1
if [ $nobinary -eq 1 ] ; then
nvm err '-s and -b cannot be set together since they would skip install from both binary and source'
return 6
fi
2015-12-27 12:52:01 -08:00
; ;
-j)
shift # consume "-j"
2015-12-28 12:20:14 -08:00
nvm_get_make_jobs " $1 "
2015-12-27 12:52:01 -08:00
shift # consume job count
; ;
2017-03-10 01:07:16 +08:00
--no-progress)
noprogress = 1
shift
; ;
2016-04-25 00:44:24 -07:00
--lts)
LTS = '*'
shift
; ;
--lts= *)
LTS = " ${ 1 ##--lts= } "
shift
2016-04-25 00:44:24 -07:00
; ;
2017-06-11 14:15:04 -07:00
--latest-npm)
NVM_UPGRADE_NPM = 1
shift
; ;
2018-10-22 08:32:29 -05:00
--default)
if [ -n " ${ ALIAS - } " ] ; then
nvm_err '--default and --alias are mutually exclusive, and may not be provided more than once'
return 6
fi
ALIAS = 'default'
shift
; ;
--alias= *)
if [ -n " ${ ALIAS - } " ] ; then
nvm_err '--default and --alias are mutually exclusive, and may not be provided more than once'
return 6
fi
ALIAS = " ${ 1 ##--alias= } "
shift
; ;
2020-06-04 16:15:39 -07:00
--reinstall-packages-from= *)
if [ -n " ${ PROVIDED_REINSTALL_PACKAGES_FROM - } " ] ; then
nvm_err '--reinstall-packages-from may not be provided more than once'
return 6
fi
PROVIDED_REINSTALL_PACKAGES_FROM = " $( nvm_echo " $1 " | command cut -c 27-) "
if [ -z " ${ PROVIDED_REINSTALL_PACKAGES_FROM } " ] ; then
nvm_err 'If --reinstall-packages-from is provided, it must point to an installed version of node.'
return 6
fi
REINSTALL_PACKAGES_FROM = " $( nvm_version " ${ PROVIDED_REINSTALL_PACKAGES_FROM } " ) " || :
shift
; ;
--copy-packages-from= *)
if [ -n " ${ PROVIDED_REINSTALL_PACKAGES_FROM - } " ] ; then
nvm_err '--reinstall-packages-from may not be provided more than once, or combined with `--copy-packages-from`'
return 6
fi
PROVIDED_REINSTALL_PACKAGES_FROM = " $( nvm_echo " $1 " | command cut -c 22-) "
if [ -z " ${ PROVIDED_REINSTALL_PACKAGES_FROM } " ] ; then
nvm_err 'If --copy-packages-from is provided, it must point to an installed version of node.'
return 6
fi
REINSTALL_PACKAGES_FROM = " $( nvm_version " ${ PROVIDED_REINSTALL_PACKAGES_FROM } " ) " || :
shift
; ;
--reinstall-packages-from | --copy-packages-from)
nvm_err " If ${ 1 } is provided, it must point to an installed version of node using \`=\`. "
return 6
; ;
--skip-default-packages)
SKIP_DEFAULT_PACKAGES = true
shift
; ;
2015-12-27 12:52:01 -08:00
*)
break # stop parsing args
; ;
esac
done
2013-01-12 00:37:17 +09:00
2015-12-27 12:52:01 -08:00
local provided_version
2016-04-25 00:44:24 -07:00
provided_version = " ${ 1 - } "
2014-09-14 16:04:37 -07:00
2018-05-22 20:57:40 +08:00
if [ -z " ${ provided_version } " ] ; then
2016-04-25 00:44:24 -07:00
if [ " _ ${ LTS - } " = '_*' ] ; then
nvm_echo 'Installing latest LTS version.'
if [ $# -gt 0 ] ; then
shift
fi
elif [ " _ ${ LTS - } " != '_' ] ; then
2018-05-22 20:57:40 +08:00
nvm_echo " Installing with latest version of LTS line: ${ LTS } "
2016-04-25 00:44:24 -07:00
if [ $# -gt 0 ] ; then
shift
fi
else
2014-04-16 02:25:58 -07:00
nvm_rc_version
2018-05-22 20:57:40 +08:00
if [ $version_not_provided -eq 1 ] && [ -z " ${ NVM_RC_VERSION } " ] ; then
2017-04-06 03:55:42 +08:00
unset NVM_RC_VERSION
>& 2 nvm --help
return 127
2016-04-25 00:44:24 -07:00
fi
2018-05-22 20:57:40 +08:00
provided_version = " ${ NVM_RC_VERSION } "
2017-02-18 00:48:41 -08:00
unset NVM_RC_VERSION
2014-04-16 02:25:58 -07:00
fi
2016-04-25 00:44:24 -07:00
elif [ $# -gt 0 ] ; then
2014-09-14 16:04:37 -07:00
shift
2014-04-16 02:25:58 -07:00
fi
2013-04-24 15:42:10 +08:00
2016-08-23 10:23:21 -07:00
case " ${ provided_version } " in
'lts/*' )
LTS = '*'
provided_version = ''
; ;
lts/*)
LTS = " ${ provided_version ##lts/ } "
provided_version = ''
; ;
esac
VERSION = " $( NVM_VERSION_ONLY = true NVM_LTS = " ${ LTS - } " nvm_remote_version " ${ provided_version } " ) "
2015-01-16 11:10:37 -06:00
2016-09-15 23:52:01 -07:00
if [ " ${ VERSION } " = 'N/A' ] ; then
2016-04-25 00:44:24 -07:00
local LTS_MSG
local REMOTE_CMD
if [ " ${ LTS - } " = '*' ] ; then
LTS_MSG = '(with LTS filter) '
REMOTE_CMD = 'nvm ls-remote --lts'
elif [ -n " ${ LTS - } " ] ; then
2018-05-22 20:57:40 +08:00
LTS_MSG = " (with LTS filter ' ${ LTS } ') "
2016-04-25 00:44:24 -07:00
REMOTE_CMD = " nvm ls-remote --lts= ${ LTS } "
else
REMOTE_CMD = 'nvm ls-remote'
fi
2018-05-22 20:57:40 +08:00
nvm_err " Version ' ${ provided_version } ' ${ LTS_MSG - } not found - try \` ${ REMOTE_CMD } \` to browse available versions. "
2015-01-21 16:19:22 -08:00
return 3
fi
2013-01-12 00:37:17 +09:00
ADDITIONAL_PARAMETERS = ''
2018-05-22 20:57:40 +08:00
while [ $# -ne 0 ] ; do
2015-04-04 14:29:55 -07:00
case " $1 " in
--reinstall-packages-from= *)
2020-06-04 16:15:39 -07:00
if [ -n " ${ PROVIDED_REINSTALL_PACKAGES_FROM - } " ] ; then
nvm_err '--reinstall-packages-from may not be provided more than once'
return 6
fi
2016-05-05 00:17:35 -07:00
PROVIDED_REINSTALL_PACKAGES_FROM = " $( nvm_echo " $1 " | command cut -c 27-) "
2018-03-14 00:13:07 -07:00
if [ -z " ${ PROVIDED_REINSTALL_PACKAGES_FROM } " ] ; then
nvm_err 'If --reinstall-packages-from is provided, it must point to an installed version of node.'
return 6
fi
2018-05-22 20:57:40 +08:00
REINSTALL_PACKAGES_FROM = " $( nvm_version " ${ PROVIDED_REINSTALL_PACKAGES_FROM } " ) " || :
2015-04-04 14:29:55 -07:00
; ;
--copy-packages-from= *)
2020-06-04 16:15:39 -07:00
if [ -n " ${ PROVIDED_REINSTALL_PACKAGES_FROM - } " ] ; then
nvm_err '--reinstall-packages-from may not be provided more than once, or combined with `--copy-packages-from`'
return 6
fi
2016-05-05 00:17:35 -07:00
PROVIDED_REINSTALL_PACKAGES_FROM = " $( nvm_echo " $1 " | command cut -c 22-) "
2020-06-04 16:15:39 -07:00
if [ -z " ${ PROVIDED_REINSTALL_PACKAGES_FROM } " ] ; then
nvm_err 'If --copy-packages-from is provided, it must point to an installed version of node.'
return 6
fi
2018-05-22 20:57:40 +08:00
REINSTALL_PACKAGES_FROM = " $( nvm_version " ${ PROVIDED_REINSTALL_PACKAGES_FROM } " ) " || :
2015-04-04 14:29:55 -07:00
; ;
2020-06-04 16:15:39 -07:00
--reinstall-packages-from | --copy-packages-from)
nvm_err " If ${ 1 } is provided, it must point to an installed version of node using \`=\`. "
return 6
; ;
2017-03-28 09:37:14 -07:00
--skip-default-packages)
SKIP_DEFAULT_PACKAGES = true
; ;
2015-04-04 14:29:55 -07:00
*)
2018-05-22 20:57:40 +08:00
ADDITIONAL_PARAMETERS = " ${ ADDITIONAL_PARAMETERS } $1 "
2015-04-04 14:29:55 -07:00
; ;
esac
2012-08-01 11:10:25 +02:00
shift
done
2016-09-15 23:52:01 -07:00
if [ -n " ${ PROVIDED_REINSTALL_PACKAGES_FROM - } " ] && [ " $( nvm_ensure_version_prefix " ${ PROVIDED_REINSTALL_PACKAGES_FROM } " ) " = " ${ VERSION } " ] ; then
2016-05-05 00:17:35 -07:00
nvm_err "You can't reinstall global packages from the same version of node you're installing."
2014-09-21 11:13:50 -07:00
return 4
2016-09-15 23:52:01 -07:00
elif [ " ${ REINSTALL_PACKAGES_FROM - } " = 'N/A' ] ; then
2016-05-05 00:17:35 -07:00
nvm_err "If --reinstall-packages-from is provided, it must point to an installed version of node."
2014-09-21 11:13:50 -07:00
return 5
fi
2016-08-11 23:19:47 -07:00
local FLAVOR
2018-05-22 20:57:40 +08:00
if nvm_is_iojs_version " ${ VERSION } " ; then
2016-08-11 23:19:47 -07:00
FLAVOR = " $( nvm_iojs_prefix) "
else
FLAVOR = " $( nvm_node_prefix) "
2015-01-16 11:10:37 -06:00
fi
2022-10-13 15:03:36 -07:00
local EXIT_CODE
2022-10-15 20:25:52 +08:00
EXIT_CODE = 0
2022-10-13 15:03:36 -07:00
2018-05-22 20:57:40 +08:00
if nvm_is_version_installed " ${ VERSION } " ; then
nvm_err " ${ VERSION } is already installed. "
2022-10-15 20:25:52 +08:00
nvm use " ${ VERSION } "
EXIT_CODE = $?
if [ $EXIT_CODE -eq 0 ] ; then
2017-06-11 14:15:04 -07:00
if [ " ${ NVM_UPGRADE_NPM } " = 1 ] ; then
nvm install-latest-npm
2022-10-13 15:03:36 -07:00
EXIT_CODE = $?
2017-06-11 14:15:04 -07:00
fi
2022-10-13 15:03:36 -07:00
if [ $EXIT_CODE -ne 0 ] && [ -z " ${ SKIP_DEFAULT_PACKAGES - } " ] ; then
nvm_install_default_packages
2017-03-28 09:37:14 -07:00
fi
2022-10-13 15:03:36 -07:00
if [ $EXIT_CODE -ne 0 ] && [ -n " ${ REINSTALL_PACKAGES_FROM - } " ] && [ " _ ${ REINSTALL_PACKAGES_FROM } " != "_N/A" ] ; then
2018-05-22 20:57:40 +08:00
nvm reinstall-packages " ${ REINSTALL_PACKAGES_FROM } "
2022-10-13 15:03:36 -07:00
EXIT_CODE = $?
2017-03-28 09:37:14 -07:00
fi
2014-09-21 11:14:18 -07:00
fi
2022-10-15 20:25:52 +08:00
2016-04-25 00:44:24 -07:00
if [ -n " ${ LTS - } " ] ; then
2018-04-09 23:23:27 -07:00
LTS = " $( echo " ${ LTS } " | tr '[:upper:]' '[:lower:]' ) "
2016-04-25 00:44:24 -07:00
nvm_ensure_default_set " lts/ ${ LTS } "
else
2018-05-22 20:57:40 +08:00
nvm_ensure_default_set " ${ provided_version } "
2016-04-25 00:44:24 -07:00
fi
2018-10-22 08:32:29 -05:00
2022-10-13 15:03:36 -07:00
if [ $EXIT_CODE -ne 0 ] && [ -n " ${ ALIAS - } " ] ; then
2018-10-22 08:32:29 -05:00
nvm alias " ${ ALIAS } " " ${ provided_version } "
2022-10-13 15:03:36 -07:00
EXIT_CODE = $?
2018-10-22 08:32:29 -05:00
fi
2022-10-13 15:03:36 -07:00
return $EXIT_CODE
2014-05-05 22:46:46 -07:00
fi
2011-09-17 13:16:37 +02:00
2016-11-03 23:42:55 -07:00
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'
2015-09-28 16:02:34 -07:00
fi
2016-11-03 23:42:55 -07:00
local VERSION_PATH
VERSION_PATH = " $( nvm_version_path " ${ VERSION } " ) "
" ${ NVM_INSTALL_THIRD_PARTY_HOOK } " " ${ VERSION } " " ${ FLAVOR } " std " ${ NVM_METHOD_PREFERENCE } " " ${ VERSION_PATH } " || {
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
fi
2016-12-10 00:20:04 +08:00
EXIT_CODE = 0
2016-11-03 23:42:55 -07:00
else
2016-08-11 23:19:47 -07:00
2018-05-22 20:57:40 +08:00
if [ " _ ${ NVM_OS } " = "_freebsd" ] ; then
2016-11-03 23:42:55 -07:00
# node.js and io.js do not have a FreeBSD binary
nobinary = 1
2018-02-12 02:15:01 +08:00
nvm_err "Currently, there is no binary for FreeBSD"
2016-04-14 20:57:10 -04:00
elif [ " _ $NVM_OS " = "_openbsd" ] ; then
# node.js and io.js do not have a OpenBSD binary
nobinary = 1
nvm_err "Currently, there is no binary for OpenBSD"
2018-05-22 20:57:40 +08:00
elif [ " _ ${ NVM_OS } " = "_sunos" ] ; then
2016-11-03 23:42:55 -07:00
# Not all node/io.js versions have a Solaris binary
2018-05-22 20:57:40 +08:00
if ! nvm_has_solaris_binary " ${ VERSION } " ; then
2018-01-26 11:30:57 +08:00
nobinary = 1
2018-05-22 20:57:40 +08:00
nvm_err " Currently, there is no binary of version ${ VERSION } for SunOS "
2016-11-03 23:42:55 -07:00
fi
2015-01-13 17:52:18 -08:00
fi
2016-11-03 23:42:55 -07:00
# skip binary install if "nobinary" option specified.
2018-05-22 20:57:40 +08:00
if [ $nobinary -ne 1 ] && nvm_binary_available " ${ VERSION } " ; then
2021-02-16 19:34:23 +05:30
NVM_NO_PROGRESS = " ${ NVM_NO_PROGRESS :- ${ noprogress } } " nvm_install_binary " ${ FLAVOR } " std " ${ VERSION } " " ${ nosource } "
2016-12-10 00:20:04 +08:00
EXIT_CODE = $?
2022-10-15 20:25:52 +08:00
else
EXIT_CODE = -1
2016-01-17 15:12:02 -08:00
fi
2022-10-15 20:25:52 +08:00
2018-05-22 20:57:40 +08:00
if [ $EXIT_CODE -ne 0 ] ; then
2016-11-03 23:42:55 -07:00
if [ -z " ${ NVM_MAKE_JOBS - } " ] ; then
nvm_get_make_jobs
fi
2016-07-01 23:22:15 +08:00
2021-01-02 00:03:24 +01:00
if [ " _ ${ NVM_OS } " = "_win" ] ; then
nvm_err 'Installing from source on non-WSL Windows is not supported'
EXIT_CODE = 87
else
NVM_NO_PROGRESS = " ${ NVM_NO_PROGRESS :- ${ noprogress } } " nvm_install_source " ${ FLAVOR } " std " ${ VERSION } " " ${ NVM_MAKE_JOBS } " " ${ ADDITIONAL_PARAMETERS } "
EXIT_CODE = $?
fi
2016-08-11 23:19:47 -07:00
fi
2015-04-05 16:00:16 -07:00
fi
2015-01-13 17:52:18 -08:00
2018-05-22 20:57:40 +08:00
if [ $EXIT_CODE -eq 0 ] && nvm_use_if_needed " ${ VERSION } " && nvm_install_npm_if_needed " ${ VERSION } " ; then
2017-02-11 23:14:58 -08:00
if [ -n " ${ LTS - } " ] ; then
nvm_ensure_default_set " lts/ ${ LTS } "
else
2018-05-22 20:57:40 +08:00
nvm_ensure_default_set " ${ provided_version } "
2017-02-11 23:14:58 -08:00
fi
2017-06-11 14:15:04 -07:00
if [ " ${ NVM_UPGRADE_NPM } " = 1 ] ; then
nvm install-latest-npm
EXIT_CODE = $?
fi
2022-10-13 15:03:36 -07:00
if [ $EXIT_CODE -eq 0 ] && [ -z " ${ SKIP_DEFAULT_PACKAGES - } " ] ; then
nvm_install_default_packages
2017-03-28 09:37:14 -07:00
fi
2022-10-13 15:03:36 -07:00
if [ $EXIT_CODE -eq 0 ] && [ -n " ${ REINSTALL_PACKAGES_FROM - } " ] && [ " _ ${ REINSTALL_PACKAGES_FROM } " != "_N/A" ] ; then
2018-05-22 20:57:40 +08:00
nvm reinstall-packages " ${ REINSTALL_PACKAGES_FROM } "
2016-12-10 00:20:04 +08:00
EXIT_CODE = $?
2014-09-21 11:14:18 -07:00
fi
2017-03-27 15:00:50 -07:00
else
EXIT_CODE = $?
2015-01-13 17:52:18 -08:00
fi
2016-12-10 00:20:04 +08:00
return $EXIT_CODE
2010-04-15 09:20:27 -07:00
; ;
2018-05-22 20:57:40 +08:00
"uninstall" )
2016-07-17 20:18:05 -07:00
if [ $# -ne 1 ] ; then
2016-05-05 00:14:12 -07:00
>& 2 nvm --help
2015-03-14 10:34:52 -07:00
return 127
fi
2015-01-19 10:04:12 -08:00
local PATTERN
2016-07-17 20:18:05 -07:00
PATTERN = " ${ 1 - } "
case " ${ PATTERN - } " in
2016-08-06 23:57:15 -07:00
--) ; ;
2016-08-23 10:23:21 -07:00
--lts | 'lts/*' )
2016-08-23 00:26:35 -07:00
VERSION = " $( nvm_match_version "lts/*" ) "
2016-07-17 20:18:05 -07:00
; ;
2016-08-23 10:23:21 -07:00
lts/*)
VERSION = " $( nvm_match_version " lts/ ${ PATTERN ##lts/ } " ) "
; ;
2016-07-17 20:18:05 -07:00
--lts= *)
2016-08-23 00:26:35 -07:00
VERSION = " $( nvm_match_version " lts/ ${ PATTERN ##--lts= } " ) "
2015-01-19 10:04:12 -08:00
; ;
*)
2016-07-17 20:18:05 -07:00
VERSION = " $( nvm_version " ${ PATTERN } " ) "
2015-01-19 10:04:12 -08:00
; ;
esac
2016-07-17 20:18:05 -07:00
2016-08-13 09:14:45 -07:00
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 } ). "
2015-01-16 10:41:40 -06:00
else
2016-08-13 09:14:45 -07:00
nvm_err " nvm: Cannot uninstall currently-active node version, ${ VERSION } (inferred from ${ PATTERN } ). "
2015-01-16 10:41:40 -06:00
fi
2013-06-03 22:26:52 +03:00
return 1
2011-08-19 18:00:25 -07:00
fi
2015-01-19 10:04:12 -08:00
2016-08-13 09:14:45 -07:00
if ! nvm_is_version_installed " ${ VERSION } " ; then
nvm_err " ${ VERSION } version is not installed... "
2018-05-22 20:57:40 +08:00
return
2011-08-19 18:00:25 -07:00
fi
2016-08-13 09:14:45 -07:00
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 } " ) "
fi
2012-10-12 09:20:46 +02:00
2015-01-19 10:04:12 -08:00
local NVM_SUCCESS_MSG
2016-08-13 09:14:45 -07:00
if nvm_is_iojs_version " ${ VERSION } " ; then
NVM_SUCCESS_MSG = " Uninstalled io.js $( nvm_strip_iojs_prefix " ${ VERSION } " ) "
2015-01-16 10:41:40 -06:00
else
2016-08-13 09:14:45 -07:00
NVM_SUCCESS_MSG = " Uninstalled node ${ VERSION } "
2015-01-16 10:41:40 -06:00
fi
2016-04-17 22:22:37 +01:00
2016-04-27 17:11:16 -07:00
local VERSION_PATH
2016-08-13 09:14:45 -07:00
VERSION_PATH = " $( nvm_version_path " ${ VERSION } " ) "
if ! nvm_check_file_permissions " ${ VERSION_PATH } " ; then
2016-05-05 00:17:35 -07:00
nvm_err 'Cannot uninstall, incorrect permissions on installation folder.'
2016-05-05 23:58:27 -07:00
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.'
2016-05-05 00:17:35 -07:00
nvm_err
2016-08-13 09:14:45 -07:00
nvm_err " chown -R $( whoami) \" $( nvm_sanitize_path " ${ VERSION_PATH } " ) \" "
nvm_err " chmod -R u+w \" $( nvm_sanitize_path " ${ VERSION_PATH } " ) \" "
2016-04-17 22:22:37 +01:00
return 1
fi
2011-08-19 18:00:25 -07:00
# Delete all files related to target version.
2016-08-13 21:15:12 -07:00
local CACHE_DIR
CACHE_DIR = " $( nvm_cache_dir) "
2016-08-13 09:14:45 -07:00
command rm -rf \
2016-08-13 21:15:12 -07:00
" ${ CACHE_DIR } /bin/ ${ SLUG_BINARY } /files " \
" ${ CACHE_DIR } /src/ ${ SLUG_SOURCE } /files " \
2016-08-13 09:14:45 -07:00
" ${ VERSION_PATH } " 2>/dev/null
nvm_echo " ${ NVM_SUCCESS_MSG } "
2011-08-19 18:00:25 -07:00
2015-01-19 10:04:12 -08:00
# rm any aliases that point to uninstalled version.
2018-05-22 20:57:40 +08:00
for ALIAS in $( nvm_grep -l " ${ VERSION } " " $( nvm_alias_path) /* " 2>/dev/null) ; do
nvm unalias " $( command basename " ${ ALIAS } " ) "
2011-08-19 18:00:25 -07:00
done
; ;
2018-05-22 20:57:40 +08:00
"deactivate" )
2020-08-13 13:40:32 -07:00
local NVM_SILENT
while [ $# -ne 0 ] ; do
case " ${ 1 } " in
--silent) NVM_SILENT = 1 ; ;
--) ; ;
esac
shift
done
2014-09-19 10:10:53 -07:00
local NEWPATH
2018-05-22 20:57:40 +08:00
NEWPATH = " $( nvm_strip_path " ${ PATH } " "/bin" ) "
if [ " _ ${ PATH } " = " _ ${ NEWPATH } " ] ; then
2020-08-13 13:40:32 -07:00
if [ " ${ NVM_SILENT :- 0 } " -ne 1 ] ; then
nvm_err " Could not find ${ NVM_DIR } /*/bin in \${PATH} "
fi
2014-09-19 10:10:53 -07:00
else
2018-05-22 20:57:40 +08:00
export PATH = " ${ NEWPATH } "
2011-05-05 13:51:08 -07:00
hash -r
2020-08-13 13:40:32 -07:00
if [ " ${ NVM_SILENT :- 0 } " -ne 1 ] ; then
nvm_echo " ${ NVM_DIR } /*/bin removed from \${PATH} "
fi
2010-04-20 18:51:07 -05:00
fi
2014-09-19 10:10:53 -07:00
2016-01-17 15:12:02 -08:00
if [ -n " ${ MANPATH - } " ] ; then
2018-05-22 20:57:40 +08:00
NEWPATH = " $( nvm_strip_path " ${ MANPATH } " "/share/man" ) "
if [ " _ ${ MANPATH } " = " _ ${ NEWPATH } " ] ; then
2020-08-13 13:40:32 -07:00
if [ " ${ NVM_SILENT :- 0 } " -ne 1 ] ; then
nvm_err " Could not find ${ NVM_DIR } /*/share/man in \${MANPATH} "
fi
2016-01-17 15:12:02 -08:00
else
2018-05-22 20:57:40 +08:00
export MANPATH = " ${ NEWPATH } "
2020-08-13 13:40:32 -07:00
if [ " ${ NVM_SILENT :- 0 } " -ne 1 ] ; then
nvm_echo " ${ NVM_DIR } /*/share/man removed from \${MANPATH} "
fi
2016-01-17 15:12:02 -08:00
fi
2014-09-19 10:10:53 -07:00
fi
2016-01-17 15:12:02 -08:00
if [ -n " ${ NODE_PATH - } " ] ; then
2018-05-22 20:57:40 +08:00
NEWPATH = " $( nvm_strip_path " ${ NODE_PATH } " "/lib/node_modules" ) "
if [ " _ ${ NODE_PATH } " != " _ ${ NEWPATH } " ] ; then
export NODE_PATH = " ${ NEWPATH } "
2020-08-13 13:40:32 -07:00
if [ " ${ NVM_SILENT :- 0 } " -ne 1 ] ; then
nvm_echo " ${ NVM_DIR } /*/lib/node_modules removed from \${NODE_PATH} "
fi
2016-01-17 15:12:02 -08:00
fi
2014-01-01 02:04:37 -02:00
fi
2016-12-16 10:57:22 -08:00
unset NVM_BIN
2020-02-07 06:23:35 -08:00
unset NVM_INC
2010-04-26 12:40:35 -05:00
; ;
2018-05-22 20:57:40 +08:00
"use" )
2015-03-03 11:29:15 -08:00
local PROVIDED_VERSION
2020-08-08 17:27:46 -07:00
local NVM_SILENT
local NVM_SILENT_ARG
2015-09-21 04:47:37 -07:00
local NVM_DELETE_PREFIX
NVM_DELETE_PREFIX = 0
2016-05-01 23:41:39 -07:00
local NVM_LTS
2022-03-22 18:58:18 +05:30
local IS_VERSION_FROM_NVMRC
IS_VERSION_FROM_NVMRC = 0
2015-09-21 04:47:37 -07:00
2018-05-22 20:57:40 +08:00
while [ $# -ne 0 ] ; do
2015-09-20 19:45:53 -07:00
case " $1 " in
2020-08-08 17:27:46 -07:00
--silent)
NVM_SILENT = 1
NVM_SILENT_ARG = '--silent'
; ;
2015-09-21 04:47:37 -07:00
--delete-prefix) NVM_DELETE_PREFIX = 1 ; ;
2016-08-06 23:57:15 -07:00
--) ; ;
2016-05-01 23:41:39 -07:00
--lts) NVM_LTS = '*' ; ;
--lts= *) NVM_LTS = " ${ 1 ##--lts= } " ; ;
--*) ; ;
2015-09-20 19:45:53 -07:00
*)
2016-05-01 23:41:39 -07:00
if [ -n " ${ 1 - } " ] ; then
2015-09-20 19:45:53 -07:00
PROVIDED_VERSION = " $1 "
fi
; ;
esac
2015-07-09 17:44:09 +10:00
shift
2015-09-20 19:45:53 -07:00
done
2015-07-09 17:44:09 +10:00
2016-05-01 23:41:39 -07:00
if [ -n " ${ NVM_LTS - } " ] ; then
VERSION = " $( nvm_match_version " lts/ ${ NVM_LTS :- * } " ) "
2017-08-08 00:05:38 -07:00
elif [ -z " ${ PROVIDED_VERSION - } " ] ; then
2020-08-08 17:27:46 -07:00
NVM_SILENT = " ${ NVM_SILENT :- 0 } " nvm_rc_version
2017-08-08 00:05:38 -07:00
if [ -n " ${ NVM_RC_VERSION - } " ] ; then
2018-05-22 20:57:40 +08:00
PROVIDED_VERSION = " ${ NVM_RC_VERSION } "
2022-03-22 18:58:18 +05:30
IS_VERSION_FROM_NVMRC = 1
2018-05-22 20:57:40 +08:00
VERSION = " $( nvm_version " ${ PROVIDED_VERSION } " ) "
2013-01-22 13:28:13 +01:00
fi
2017-02-18 00:48:41 -08:00
unset NVM_RC_VERSION
2019-10-08 14:40:17 -07:00
if [ -z " ${ VERSION } " ] ; then
nvm_err 'Please see `nvm --help` or https://github.com/nvm-sh/nvm#nvmrc for more information.'
return 127
fi
2013-01-22 13:28:13 +01:00
else
2018-05-22 20:57:40 +08:00
VERSION = " $( nvm_match_version " ${ PROVIDED_VERSION } " ) "
2013-01-22 13:28:13 +01:00
fi
2015-01-18 20:45:02 -06:00
2016-08-07 23:31:16 -07:00
if [ -z " ${ VERSION } " ] ; then
2016-05-05 00:14:12 -07:00
>& 2 nvm --help
2014-04-25 10:35:52 -07:00
return 127
2013-01-22 13:28:13 +01:00
fi
2014-09-28 16:43:40 -07:00
2018-05-22 20:57:40 +08:00
if [ " _ ${ VERSION } " = '_system' ] ; then
2020-08-08 17:27:46 -07:00
if nvm_has_system_node && nvm deactivate " ${ NVM_SILENT_ARG - } " >/dev/null 2>& 1; then
if [ " ${ NVM_SILENT :- 0 } " -ne 1 ] ; then
2016-05-05 00:17:35 -07:00
nvm_echo " Now using system version of node: $( node -v 2>/dev/null) $( nvm_print_npm_version) "
2015-07-09 18:40:52 +10:00
fi
2014-09-28 16:43:40 -07:00
return
2020-08-08 17:27:46 -07:00
elif nvm_has_system_iojs && nvm deactivate " ${ NVM_SILENT_ARG - } " >/dev/null 2>& 1; then
if [ " ${ NVM_SILENT :- 0 } " -ne 1 ] ; then
2016-05-05 00:17:35 -07:00
nvm_echo " Now using system version of io.js: $( iojs --version 2>/dev/null) $( nvm_print_npm_version) "
2015-07-09 18:40:52 +10:00
fi
2015-01-18 20:55:48 -06:00
return
2020-08-08 17:27:46 -07:00
elif [ " ${ NVM_SILENT :- 0 } " -ne 1 ] ; then
2017-03-30 00:41:31 +08:00
nvm_err 'System version of node not found.'
2014-09-28 16:43:40 -07:00
fi
2017-03-30 00:41:31 +08:00
return 127
2018-05-22 20:57:40 +08:00
elif [ " _ ${ VERSION } " = "_∞" ] ; then
2020-08-08 17:27:46 -07:00
if [ " ${ NVM_SILENT :- 0 } " -ne 1 ] ; then
2018-05-22 20:57:40 +08:00
nvm_err " The alias \" ${ PROVIDED_VERSION } \" leads to an infinite loop. Aborting. "
2015-07-09 18:40:52 +10:00
fi
2014-10-22 01:48:16 -07:00
return 8
2013-02-11 19:23:25 +01:00
fi
2016-11-14 19:31:35 +08:00
if [ " ${ VERSION } " = 'N/A' ] ; then
2020-08-08 17:27:46 -07:00
if [ " ${ NVM_SILENT :- 0 } " -ne 1 ] ; then
2022-03-22 18:58:18 +05:30
nvm_ensure_version_installed " ${ PROVIDED_VERSION } " " ${ IS_VERSION_FROM_NVMRC } "
2020-08-08 17:27:46 -07:00
fi
2016-11-14 19:31:35 +08:00
return 3
2015-03-27 03:17:42 +00:00
# This nvm_ensure_version_installed call can be a performance bottleneck
# on shell startup. Perhaps we can optimize it away or make it faster.
2022-03-22 18:58:18 +05:30
elif ! nvm_ensure_version_installed " ${ VERSION } " " ${ IS_VERSION_FROM_NVMRC } " ; then
2016-09-18 02:00:32 -07:00
return $?
2015-02-21 20:03:28 -08:00
fi
2014-08-19 00:56:06 -07:00
local NVM_VERSION_DIR
2018-05-22 20:57:40 +08:00
NVM_VERSION_DIR = " $( nvm_version_path " ${ VERSION } " ) "
2015-02-21 20:03:28 -08:00
2016-11-14 19:19:39 +02:00
# Change current version
2018-05-22 20:57:40 +08:00
PATH = " $( nvm_change_path " ${ PATH } " "/bin" " ${ NVM_VERSION_DIR } " ) "
2014-11-02 13:54:54 -08:00
if nvm_has manpath; then
2017-04-27 20:17:21 +09:00
if [ -z " ${ MANPATH - } " ] ; then
2017-03-16 04:07:37 +08:00
local MANPATH
2014-11-02 13:54:54 -08:00
MANPATH = $( manpath)
fi
2016-11-14 19:19:39 +02:00
# Change current version
2018-05-22 20:57:40 +08:00
MANPATH = " $( nvm_change_path " ${ MANPATH } " "/share/man" " ${ NVM_VERSION_DIR } " ) "
2014-11-02 13:54:54 -08:00
export MANPATH
2013-08-10 16:31:06 +10:00
fi
2010-04-19 10:22:28 -05:00
export PATH
2011-05-05 13:51:08 -07:00
hash -r
2018-05-22 20:57:40 +08:00
export NVM_BIN = " ${ NVM_VERSION_DIR } /bin "
2020-02-07 06:23:35 -08:00
export NVM_INC = " ${ NVM_VERSION_DIR } /include/node "
2016-01-17 15:12:02 -08:00
if [ " ${ NVM_SYMLINK_CURRENT - } " = true ] ; then
2018-05-22 20:57:40 +08:00
command rm -f " ${ NVM_DIR } /current " && ln -s " ${ NVM_VERSION_DIR } " " ${ NVM_DIR } /current "
2014-08-28 22:45:07 +09:00
fi
2015-10-07 14:40:31 -07:00
local NVM_USE_OUTPUT
2017-11-23 10:02:37 -06:00
NVM_USE_OUTPUT = ''
2020-08-08 17:27:46 -07:00
if [ " ${ NVM_SILENT :- 0 } " -ne 1 ] ; then
2018-05-22 20:57:40 +08:00
if nvm_is_iojs_version " ${ VERSION } " ; then
NVM_USE_OUTPUT = " Now using io.js $( nvm_strip_iojs_prefix " ${ VERSION } " ) $( nvm_print_npm_version) "
2015-12-06 23:52:40 -08:00
else
2018-05-22 20:57:40 +08:00
NVM_USE_OUTPUT = " Now using node ${ VERSION } $( nvm_print_npm_version) "
2015-07-09 18:40:52 +10:00
fi
2015-01-21 22:06:38 -08:00
fi
2018-05-22 20:57:40 +08:00
if [ " _ ${ VERSION } " != "_system" ] ; then
2015-09-21 04:47:37 -07:00
local NVM_USE_CMD
NVM_USE_CMD = "nvm use --delete-prefix"
2018-05-22 20:57:40 +08:00
if [ -n " ${ PROVIDED_VERSION } " ] ; then
NVM_USE_CMD = " ${ NVM_USE_CMD } ${ VERSION } "
2015-09-21 04:47:37 -07:00
fi
2020-08-08 17:27:46 -07:00
if [ " ${ NVM_SILENT :- 0 } " -eq 1 ] ; then
2018-05-22 20:57:40 +08:00
NVM_USE_CMD = " ${ NVM_USE_CMD } --silent "
2015-09-21 04:47:37 -07:00
fi
2020-08-23 22:50:41 -07:00
if ! nvm_die_on_prefix " ${ NVM_DELETE_PREFIX } " " ${ NVM_USE_CMD } " " ${ NVM_VERSION_DIR } " ; then
2015-09-21 04:47:37 -07:00
return 11
fi
fi
2020-08-08 17:27:46 -07:00
if [ -n " ${ NVM_USE_OUTPUT - } " ] && [ " ${ NVM_SILENT :- 0 } " -ne 1 ] ; then
2018-05-22 20:57:40 +08:00
nvm_echo " ${ NVM_USE_OUTPUT } "
2015-10-07 14:40:31 -07:00
fi
2010-04-15 09:20:27 -07:00
; ;
2018-05-22 20:57:40 +08:00
"run" )
2014-04-19 15:09:40 -07:00
local provided_version
2014-06-22 15:42:17 -07:00
local has_checked_nvmrc
has_checked_nvmrc = 0
2022-03-22 18:58:18 +05:30
local IS_VERSION_FROM_NVMRC
IS_VERSION_FROM_NVMRC = 0
2011-10-29 09:39:30 +02:00
# run given version of node
2015-09-23 05:16:45 -07:00
local NVM_SILENT
2020-08-13 14:37:41 -07:00
local NVM_SILENT_ARG
2016-05-04 00:29:37 -07:00
local NVM_LTS
2018-05-22 20:57:40 +08:00
while [ $# -gt 0 ] ; do
2016-05-04 00:35:43 -07:00
case " $1 " in
2020-08-13 14:37:41 -07:00
--silent)
NVM_SILENT = 1
NVM_SILENT_ARG = '--silent'
shift
; ;
2016-05-04 00:29:37 -07:00
--lts) NVM_LTS = '*' ; shift ; ;
--lts= *) NVM_LTS = " ${ 1 ##--lts= } " ; shift ; ;
2016-05-04 00:35:43 -07:00
*)
if [ -n " $1 " ] ; then
break
else
shift
fi
; ; # stop processing arguments
esac
done
2015-09-23 05:16:45 -07:00
2016-05-04 00:29:37 -07:00
if [ $# -lt 1 ] && [ -z " ${ NVM_LTS - } " ] ; then
2020-08-13 14:37:41 -07:00
NVM_SILENT = " ${ NVM_SILENT :- 0 } " nvm_rc_version && has_checked_nvmrc = 1
2018-05-22 20:57:40 +08:00
if [ -n " ${ NVM_RC_VERSION - } " ] ; then
VERSION = " $( nvm_version " ${ NVM_RC_VERSION - } " ) " || :
2014-04-19 15:09:40 -07:00
fi
2017-02-18 00:48:41 -08:00
unset NVM_RC_VERSION
2016-05-04 00:29:37 -07:00
if [ " ${ VERSION :- N /A } " = 'N/A' ] ; then
2016-05-05 00:14:12 -07:00
>& 2 nvm --help
2014-04-25 10:35:52 -07:00
return 127
2014-04-16 02:25:58 -07:00
fi
fi
2014-04-19 15:09:40 -07:00
2016-05-04 00:29:37 -07:00
if [ -z " ${ NVM_LTS - } " ] ; then
provided_version = " $1 "
2018-05-22 20:57:40 +08:00
if [ -n " ${ provided_version } " ] ; then
VERSION = " $( nvm_version " ${ provided_version } " ) " || :
if [ " _ ${ VERSION :- N /A } " = '_N/A' ] && ! nvm_is_valid_version " ${ provided_version } " ; then
2016-05-04 00:29:37 -07:00
provided_version = ''
if [ $has_checked_nvmrc -ne 1 ] ; then
2020-08-13 14:37:41 -07:00
NVM_SILENT = " ${ NVM_SILENT :- 0 } " nvm_rc_version && has_checked_nvmrc = 1
2015-10-13 21:58:35 -07:00
fi
2022-03-22 18:58:18 +05:30
provided_version = " ${ NVM_RC_VERSION } "
IS_VERSION_FROM_NVMRC = 1
2018-05-22 20:57:40 +08:00
VERSION = " $( nvm_version " ${ NVM_RC_VERSION } " ) " || :
2017-02-18 00:48:41 -08:00
unset NVM_RC_VERSION
2016-05-04 00:29:37 -07:00
else
shift
2014-04-19 15:09:40 -07:00
fi
fi
2011-10-29 09:39:30 +02:00
fi
2014-04-19 15:09:40 -07:00
2015-01-15 01:38:47 -08:00
local NVM_IOJS
2018-05-22 20:57:40 +08:00
if nvm_is_iojs_version " ${ VERSION } " ; then
2015-01-15 01:38:47 -08:00
NVM_IOJS = true
fi
2015-02-01 13:02:46 -08:00
local EXIT_CODE
2015-01-15 01:38:47 -08:00
2018-11-08 00:55:52 +01:00
nvm_is_zsh && setopt local_options shwordsplit
2016-05-04 00:29:37 -07:00
local LTS_ARG
if [ -n " ${ NVM_LTS - } " ] ; then
LTS_ARG = " --lts= ${ NVM_LTS - } "
VERSION = ''
fi
2018-05-22 20:57:40 +08:00
if [ " _ ${ VERSION } " = "_N/A" ] ; then
2022-03-22 18:58:18 +05:30
nvm_ensure_version_installed " ${ provided_version } " " ${ IS_VERSION_FROM_NVMRC } "
2018-05-22 20:57:40 +08:00
elif [ " ${ NVM_IOJS } " = true ] ; then
2020-08-13 14:37:41 -07:00
nvm exec " ${ NVM_SILENT_ARG - } " " ${ LTS_ARG - } " " ${ VERSION } " iojs " $@ "
2015-01-15 01:38:47 -08:00
else
2020-08-13 14:37:41 -07:00
nvm exec " ${ NVM_SILENT_ARG - } " " ${ LTS_ARG - } " " ${ VERSION } " node " $@ "
2015-01-15 01:38:47 -08:00
fi
2016-05-04 00:58:12 -07:00
EXIT_CODE = " $? "
2014-10-01 01:46:46 -07:00
return $EXIT_CODE
2011-10-29 09:39:30 +02:00
; ;
2018-05-22 20:57:40 +08:00
"exec" )
2015-09-23 05:16:45 -07:00
local NVM_SILENT
2016-05-03 23:18:44 -07:00
local NVM_LTS
2018-05-22 20:57:40 +08:00
while [ $# -gt 0 ] ; do
2016-05-04 00:34:07 -07:00
case " $1 " in
2020-08-13 14:37:41 -07:00
--silent) NVM_SILENT = 1 ; shift ; ;
2016-05-03 23:18:44 -07:00
--lts) NVM_LTS = '*' ; shift ; ;
--lts= *) NVM_LTS = " ${ 1 ##--lts= } " ; shift ; ;
2016-05-04 00:34:07 -07:00
--) break ; ;
--*)
2016-05-05 00:17:35 -07:00
nvm_err " Unsupported option \" $1 \". "
2016-05-04 00:34:07 -07:00
return 55
; ;
*)
if [ -n " $1 " ] ; then
break
else
shift
fi
; ; # stop processing arguments
esac
done
2015-09-23 05:16:45 -07:00
2014-08-01 01:26:33 -07:00
local provided_version
2014-09-27 17:25:52 -07:00
provided_version = " $1 "
2016-05-03 23:18:44 -07:00
if [ " ${ NVM_LTS - } " != '' ] ; then
provided_version = " lts/ ${ NVM_LTS :- * } "
2018-05-22 20:57:40 +08:00
VERSION = " ${ provided_version } "
elif [ -n " ${ provided_version } " ] ; then
VERSION = " $( nvm_version " ${ provided_version } " ) " || :
if [ " _ ${ VERSION } " = '_N/A' ] && ! nvm_is_valid_version " ${ provided_version } " ; then
2020-08-13 14:37:41 -07:00
NVM_SILENT = " ${ NVM_SILENT :- 0 } " nvm_rc_version && has_checked_nvmrc = 1
2018-05-22 20:57:40 +08:00
provided_version = " ${ NVM_RC_VERSION } "
2017-02-18 00:48:41 -08:00
unset NVM_RC_VERSION
2018-05-22 20:57:40 +08:00
VERSION = " $( nvm_version " ${ provided_version } " ) " || :
2014-08-01 01:26:33 -07:00
else
shift
fi
fi
2018-05-22 20:57:40 +08:00
nvm_ensure_version_installed " ${ provided_version } "
2015-02-21 20:03:28 -08:00
EXIT_CODE = $?
2018-05-22 20:57:40 +08:00
if [ " ${ EXIT_CODE } " != "0" ] ; then
2022-12-22 13:00:12 -08:00
# shellcheck disable=SC2086
2015-02-21 20:03:28 -08:00
return $EXIT_CODE
2014-08-01 01:26:33 -07:00
fi
2015-02-21 20:03:28 -08:00
2020-08-13 14:37:41 -07:00
if [ " ${ NVM_SILENT :- 0 } " -ne 1 ] ; then
2016-05-03 23:18:44 -07:00
if [ " ${ NVM_LTS - } " = '*' ] ; then
2018-05-22 20:57:40 +08:00
nvm_echo " Running node latest LTS -> $( nvm_version " ${ VERSION } " ) $( nvm use --silent " ${ VERSION } " && nvm_print_npm_version) "
2016-05-03 23:18:44 -07:00
elif [ -n " ${ NVM_LTS - } " ] ; then
2018-05-22 20:57:40 +08:00
nvm_echo " Running node LTS \" ${ NVM_LTS - } \" -> $( nvm_version " ${ VERSION } " ) $( nvm use --silent " ${ VERSION } " && nvm_print_npm_version) "
elif nvm_is_iojs_version " ${ VERSION } " ; then
nvm_echo " Running io.js $( nvm_strip_iojs_prefix " ${ VERSION } " ) $( nvm use --silent " ${ VERSION } " && nvm_print_npm_version) "
2016-05-04 00:33:56 -07:00
else
2018-05-22 20:57:40 +08:00
nvm_echo " Running node ${ VERSION } $( nvm use --silent " ${ VERSION } " && nvm_print_npm_version) "
2016-05-04 00:33:56 -07:00
fi
fi
2018-05-22 20:57:40 +08:00
NODE_VERSION = " ${ VERSION } " " ${ NVM_DIR } /nvm-exec " " $@ "
2014-08-01 01:26:33 -07:00
; ;
2018-05-22 20:57:40 +08:00
"ls" | "list" )
2016-08-06 23:57:15 -07:00
local PATTERN
local NVM_NO_COLORS
2019-02-23 22:41:46 -08:00
local NVM_NO_ALIAS
[New] Added `set-colors` command. See details below:
This command allows users to replace default colors with their own custom colors.
- top-level commands modified: alias, ls, ls-remote
- helper functions added: nvm_echo_with_colors, nvm_err_with_colors,
nvm_set_colors, nvm_get_colors, nvm_print_color_code
- functions modified: nvm_print_formatted_alias, nvm_print_versions, nvm_print_alias_path (implicitly), nvm_print_default_alias (implicitly), nvm_list_aliases (implicitly)
We added tests and info on using this command to the README!
Co-authored-by: Dena Burd <29719099+gitburd@users.noreply.github.com>
Co-authored-by: Naomi Quinones <52065567+naomiquinones@users.noreply.github.com>
2020-08-17 14:56:13 -07:00
2018-05-22 20:57:40 +08:00
while [ $# -gt 0 ] ; do
2016-08-06 23:57:15 -07:00
case " ${ 1 } " in
--) ; ;
--no-colors) NVM_NO_COLORS = " ${ 1 } " ; ;
2019-02-23 22:41:46 -08:00
--no-alias) NVM_NO_ALIAS = " ${ 1 } " ; ;
2016-08-06 23:57:15 -07:00
--*)
nvm_err " Unsupported option \" ${ 1 } \". "
2018-05-22 20:57:40 +08:00
return 55
2016-08-06 23:57:15 -07:00
; ;
*)
PATTERN = " ${ PATTERN :- $1 } "
; ;
esac
shift
done
2019-05-14 08:31:24 -04:00
if [ -n " ${ PATTERN - } " ] && [ -n " ${ NVM_NO_ALIAS - } " ] ; then
2019-02-23 22:41:46 -08:00
nvm_err '`--no-alias` is not supported when a pattern is provided.'
return 55
fi
2014-06-22 17:20:31 -07:00
local NVM_LS_OUTPUT
local NVM_LS_EXIT_CODE
2016-08-06 23:57:15 -07:00
NVM_LS_OUTPUT = $( nvm_ls " ${ PATTERN - } " )
2014-06-22 11:33:26 -07:00
NVM_LS_EXIT_CODE = $?
2018-05-22 20:57:40 +08:00
NVM_NO_COLORS = " ${ NVM_NO_COLORS - } " nvm_print_versions " ${ NVM_LS_OUTPUT } "
2019-02-23 22:41:46 -08:00
if [ -z " ${ NVM_NO_ALIAS - } " ] && [ -z " ${ PATTERN - } " ] ; then
2016-08-06 23:57:15 -07:00
if [ -n " ${ NVM_NO_COLORS - } " ] ; then
nvm alias --no-colors
else
nvm alias
fi
2010-04-15 09:53:39 -07:00
fi
2014-06-26 16:52:48 -07:00
return $NVM_LS_EXIT_CODE
2011-01-22 17:48:57 +01:00
; ;
2018-05-22 20:57:40 +08:00
"ls-remote" | "list-remote" )
2016-09-15 23:52:01 -07:00
local NVM_LTS
2016-04-23 23:47:25 -07:00
local PATTERN
2016-08-06 23:57:15 -07:00
local NVM_NO_COLORS
[New] Added `set-colors` command. See details below:
This command allows users to replace default colors with their own custom colors.
- top-level commands modified: alias, ls, ls-remote
- helper functions added: nvm_echo_with_colors, nvm_err_with_colors,
nvm_set_colors, nvm_get_colors, nvm_print_color_code
- functions modified: nvm_print_formatted_alias, nvm_print_versions, nvm_print_alias_path (implicitly), nvm_print_default_alias (implicitly), nvm_list_aliases (implicitly)
We added tests and info on using this command to the README!
Co-authored-by: Dena Burd <29719099+gitburd@users.noreply.github.com>
Co-authored-by: Naomi Quinones <52065567+naomiquinones@users.noreply.github.com>
2020-08-17 14:56:13 -07:00
2018-05-22 20:57:40 +08:00
while [ $# -gt 0 ] ; do
2016-08-07 00:08:46 -07:00
case " ${ 1 - } " in
2016-08-06 23:57:15 -07:00
--) ; ;
2016-08-23 10:23:21 -07:00
--lts)
2016-09-15 23:52:01 -07:00
NVM_LTS = '*'
2016-08-23 10:23:21 -07:00
; ;
2016-04-25 00:55:35 -07:00
--lts= *)
2016-09-15 23:52:01 -07:00
NVM_LTS = " ${ 1 ##--lts= } "
2016-04-25 00:55:35 -07:00
; ;
2016-08-06 23:57:15 -07:00
--no-colors) NVM_NO_COLORS = " ${ 1 } " ; ;
2016-04-23 23:47:25 -07:00
--*)
2016-08-07 00:08:46 -07:00
nvm_err " Unsupported option \" ${ 1 } \". "
2018-05-22 20:57:40 +08:00
return 55
2016-04-23 23:47:25 -07:00
; ;
*)
2016-08-23 10:23:21 -07:00
if [ -z " ${ PATTERN - } " ] ; then
2016-08-07 00:08:46 -07:00
PATTERN = " ${ 1 - } "
2016-09-15 23:52:01 -07:00
if [ -z " ${ NVM_LTS - } " ] ; then
2016-08-23 10:23:21 -07:00
case " ${ PATTERN } " in
2021-12-16 22:58:06 -08:00
'lts/*' )
NVM_LTS = '*'
PATTERN = ''
; ;
lts/*)
NVM_LTS = " ${ PATTERN ##lts/ } "
PATTERN = ''
; ;
2016-04-23 23:47:25 -07:00
esac
fi
fi
; ;
esac
shift
done
2015-01-13 14:19:58 -08:00
2015-01-19 12:33:26 -08:00
local NVM_OUTPUT
2016-09-18 19:06:18 -07:00
local EXIT_CODE
2016-09-15 23:52:01 -07:00
NVM_OUTPUT = " $( NVM_LTS = " ${ NVM_LTS - } " nvm_remote_versions " ${ PATTERN } " && :) "
2016-09-18 19:06:18 -07:00
EXIT_CODE = $?
2018-05-22 20:57:40 +08:00
if [ -n " ${ NVM_OUTPUT } " ] ; then
NVM_NO_COLORS = " ${ NVM_NO_COLORS - } " nvm_print_versions " ${ NVM_OUTPUT } "
2016-09-18 19:06:18 -07:00
return $EXIT_CODE
2015-01-19 12:33:26 -08:00
fi
2017-04-06 03:55:42 +08:00
NVM_NO_COLORS = " ${ NVM_NO_COLORS - } " nvm_print_versions "N/A"
return 3
2012-10-04 09:41:32 -07:00
; ;
2018-05-22 20:57:40 +08:00
"current" )
2014-03-17 13:16:12 +01:00
nvm_version current
2013-03-13 13:21:30 +00:00
; ;
2018-05-22 20:57:40 +08:00
"which" )
2020-08-13 13:40:32 -07:00
local NVM_SILENT
2015-02-21 20:03:28 -08:00
local provided_version
2020-08-13 13:40:32 -07:00
while [ $# -ne 0 ] ; do
case " ${ 1 } " in
--silent) NVM_SILENT = 1 ; ;
--) ; ;
*) provided_version = " ${ 1 - } " ; ;
esac
shift
done
if [ -z " ${ provided_version - } " ] ; then
NVM_SILENT = " ${ NVM_SILENT :- 0 } " nvm_rc_version
2016-08-07 00:08:46 -07:00
if [ -n " ${ NVM_RC_VERSION } " ] ; then
provided_version = " ${ NVM_RC_VERSION } "
2016-09-16 23:16:58 -07:00
VERSION = $( nvm_version " ${ NVM_RC_VERSION } " ) || :
2014-11-22 08:17:15 -08:00
fi
2017-02-18 00:48:41 -08:00
unset NVM_RC_VERSION
2020-08-13 13:40:32 -07:00
elif [ " ${ provided_version } " != 'system' ] ; then
2016-09-16 23:16:58 -07:00
VERSION = " $( nvm_version " ${ provided_version } " ) " || :
2014-11-21 16:54:31 -08:00
else
2020-08-13 13:40:32 -07:00
VERSION = " ${ provided_version - } "
2014-11-21 16:54:31 -08:00
fi
2016-08-07 00:08:46 -07:00
if [ -z " ${ VERSION } " ] ; then
2016-05-05 00:14:12 -07:00
>& 2 nvm --help
2014-11-21 16:54:31 -08:00
return 127
fi
2018-05-22 20:57:40 +08:00
if [ " _ ${ VERSION } " = '_system' ] ; then
2015-01-18 20:55:48 -06:00
if nvm_has_system_iojs >/dev/null 2>& 1 || nvm_has_system_node >/dev/null 2>& 1; then
2014-12-19 16:12:13 -08:00
local NVM_BIN
2015-01-02 09:47:26 +08:00
NVM_BIN = " $( nvm use system >/dev/null 2>& 1 && command which node) "
2018-05-22 20:57:40 +08:00
if [ -n " ${ NVM_BIN } " ] ; then
nvm_echo " ${ NVM_BIN } "
2014-12-19 16:12:13 -08:00
return
fi
2017-03-09 23:11:06 +08:00
return 1
2014-11-21 16:54:31 -08:00
fi
2017-04-06 03:55:42 +08:00
nvm_err 'System version of node not found.'
return 127
2020-08-13 13:40:32 -07:00
elif [ " ${ VERSION } " = '∞' ] ; then
nvm_err " The alias \" ${ 2 } \" leads to an infinite loop. Aborting. "
2014-11-21 16:54:31 -08:00
return 8
fi
2018-05-22 20:57:40 +08:00
nvm_ensure_version_installed " ${ provided_version } "
2015-02-21 20:03:28 -08:00
EXIT_CODE = $?
2018-05-22 20:57:40 +08:00
if [ " ${ EXIT_CODE } " != "0" ] ; then
2022-12-22 13:00:12 -08:00
# shellcheck disable=SC2086
2015-02-21 20:03:28 -08:00
return $EXIT_CODE
fi
2014-11-21 16:54:31 -08:00
local NVM_VERSION_DIR
2018-05-22 20:57:40 +08:00
NVM_VERSION_DIR = " $( nvm_version_path " ${ VERSION } " ) "
nvm_echo " ${ NVM_VERSION_DIR } /bin/node "
2014-11-21 16:54:31 -08:00
; ;
2018-05-22 20:57:40 +08:00
"alias" )
2016-08-08 15:50:05 -07:00
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 "
2016-08-08 13:21:42 -07:00
local ALIAS
local TARGET
2016-08-06 23:57:15 -07:00
local NVM_NO_COLORS
ALIAS = '--'
2016-08-08 13:37:14 -07:00
TARGET = '--'
[New] Added `set-colors` command. See details below:
This command allows users to replace default colors with their own custom colors.
- top-level commands modified: alias, ls, ls-remote
- helper functions added: nvm_echo_with_colors, nvm_err_with_colors,
nvm_set_colors, nvm_get_colors, nvm_print_color_code
- functions modified: nvm_print_formatted_alias, nvm_print_versions, nvm_print_alias_path (implicitly), nvm_print_default_alias (implicitly), nvm_list_aliases (implicitly)
We added tests and info on using this command to the README!
Co-authored-by: Dena Burd <29719099+gitburd@users.noreply.github.com>
Co-authored-by: Naomi Quinones <52065567+naomiquinones@users.noreply.github.com>
2020-08-17 14:56:13 -07:00
2018-05-22 20:57:40 +08:00
while [ $# -gt 0 ] ; do
2016-08-08 13:37:14 -07:00
case " ${ 1 - } " in
--) ; ;
2016-08-06 23:57:15 -07:00
--no-colors) NVM_NO_COLORS = " ${ 1 } " ; ;
2016-08-08 13:37:14 -07:00
--*)
nvm_err " Unsupported option \" ${ 1 } \". "
return 55
; ;
*)
if [ " ${ ALIAS } " = '--' ] ; then
ALIAS = " ${ 1 - } "
elif [ " ${ TARGET } " = '--' ] ; then
TARGET = " ${ 1 - } "
fi
; ;
esac
shift
done
2016-08-08 13:21:42 -07:00
2016-08-08 15:50:05 -07:00
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
fi
2016-09-16 23:16:58 -07:00
VERSION = " $( nvm_version " ${ TARGET } " ) " || :
2016-08-08 15:50:05 -07:00
if [ " ${ VERSION } " = 'N/A' ] ; then
nvm_err " ! WARNING: Version ' ${ TARGET } ' does not exist. "
fi
nvm_make_alias " ${ ALIAS } " " ${ TARGET } "
2018-05-22 20:57:40 +08:00
NVM_NO_COLORS = " ${ NVM_NO_COLORS - } " NVM_CURRENT = " ${ NVM_CURRENT - } " DEFAULT = false nvm_print_formatted_alias " ${ ALIAS } " " ${ TARGET } " " ${ VERSION } "
2016-08-08 15:50:05 -07:00
else
if [ " ${ ALIAS - } " = '--' ] ; then
unset ALIAS
2016-08-08 13:37:14 -07:00
fi
2016-08-08 15:50:05 -07:00
2017-05-16 22:58:26 -07:00
nvm_list_aliases " ${ ALIAS - } "
2011-01-22 19:12:13 +01:00
fi
; ;
2018-05-22 20:57:40 +08:00
"unalias" )
2015-01-12 01:27:53 -08:00
local NVM_ALIAS_DIR
NVM_ALIAS_DIR = " $( nvm_alias_path) "
2018-05-22 20:57:40 +08:00
command mkdir -p " ${ NVM_ALIAS_DIR } "
2016-08-07 00:08:46 -07:00
if [ $# -ne 1 ] ; then
2016-05-05 00:14:12 -07:00
>& 2 nvm --help
2015-03-14 10:34:52 -07:00
return 127
fi
2016-08-07 00:08:46 -07:00
if [ " ${ 1 #* \/ } " != " ${ 1 - } " ] ; then
2016-05-05 00:17:35 -07:00
nvm_err 'Aliases in subdirectories are not supported.'
2016-04-26 23:07:10 -07:00
return 1
fi
2019-01-23 16:39:57 -08:00
local NVM_IOJS_PREFIX
local NVM_NODE_PREFIX
NVM_IOJS_PREFIX = " $( nvm_iojs_prefix) "
NVM_NODE_PREFIX = " $( nvm_node_prefix) "
2019-11-12 11:16:08 -08:00
local NVM_ALIAS_EXISTS
NVM_ALIAS_EXISTS = 0
if [ -f " ${ NVM_ALIAS_DIR } / ${ 1 - } " ] ; then
NVM_ALIAS_EXISTS = 1
fi
if [ $NVM_ALIAS_EXISTS -eq 0 ] ; then
case " $1 " in
"stable" | "unstable" | " ${ NVM_IOJS_PREFIX } " | " ${ NVM_NODE_PREFIX } " | "system" )
nvm_err " ${ 1 - } is a default (built-in) alias and cannot be deleted. "
return 1
; ;
esac
nvm_err " Alias ${ 1 - } doesn't exist! "
return
fi
2019-01-23 16:39:57 -08:00
2015-12-13 21:34:28 -08:00
local NVM_ALIAS_ORIGINAL
2016-08-07 00:08:46 -07:00
NVM_ALIAS_ORIGINAL = " $( nvm_alias " ${ 1 } " ) "
2018-05-22 20:57:40 +08:00
command rm -f " ${ NVM_ALIAS_DIR } / ${ 1 } "
nvm_echo " Deleted alias ${ 1 } - restore it with \`nvm alias \" ${ 1 } \" \" ${ NVM_ALIAS_ORIGINAL } \"\` "
2011-08-19 18:00:25 -07:00
; ;
2017-06-11 14:15:04 -07:00
"install-latest-npm" )
if [ $# -ne 0 ] ; then
>& 2 nvm --help
return 127
fi
nvm_install_latest_npm
; ;
2018-05-22 20:57:40 +08:00
"reinstall-packages" | "copy-packages" )
2016-08-07 00:08:46 -07:00
if [ $# -ne 1 ] ; then
2016-05-05 00:14:12 -07:00
>& 2 nvm --help
2014-06-17 00:40:07 +02:00
return 127
fi
2013-12-18 17:21:00 +02:00
2014-09-05 00:42:59 -07:00
local PROVIDED_VERSION
2016-08-07 00:08:46 -07:00
PROVIDED_VERSION = " ${ 1 - } "
2014-09-05 00:42:59 -07:00
2018-05-22 20:57:40 +08:00
if [ " ${ PROVIDED_VERSION } " = " $( nvm_ls_current) " ] || [ " $( nvm_version " ${ PROVIDED_VERSION } " || :) " = " $( nvm_ls_current) " ] ; then
2016-05-05 00:17:35 -07:00
nvm_err 'Can not reinstall packages from the current version of node.'
2014-09-05 00:42:59 -07:00
return 2
fi
2015-05-08 14:15:42 -07:00
local VERSION
2018-05-22 20:57:40 +08:00
if [ " _ ${ PROVIDED_VERSION } " = "_system" ] ; then
2015-01-18 20:55:48 -06:00
if ! nvm_has_system_node && ! nvm_has_system_iojs; then
2016-05-05 00:17:35 -07:00
nvm_err 'No system version of node or io.js detected.'
2014-09-05 00:43:12 -07:00
return 3
fi
2015-05-08 14:15:42 -07:00
VERSION = "system"
2014-09-05 00:43:12 -07:00
else
2018-05-22 20:57:40 +08:00
VERSION = " $( nvm_version " ${ PROVIDED_VERSION } " ) " || :
2014-09-05 00:43:12 -07:00
fi
2013-12-18 17:21:00 +02:00
2015-07-02 23:47:29 -07:00
local NPMLIST
2018-05-22 20:57:40 +08:00
NPMLIST = " $( nvm_npm_global_modules " ${ VERSION } " ) "
2015-03-17 14:19:32 +08:00
local INSTALLS
2015-07-02 23:47:29 -07:00
local LINKS
INSTALLS = " ${ NPMLIST %% //// * } "
LINKS = " ${ NPMLIST ##* //// } "
2015-03-17 14:19:32 +08:00
2018-05-22 20:57:40 +08:00
nvm_echo " Reinstalling global packages from ${ VERSION } ... "
2018-02-27 14:05:33 +08:00
if [ -n " ${ INSTALLS } " ] ; then
2018-05-22 20:57:40 +08:00
nvm_echo " ${ INSTALLS } " | command xargs npm install -g --quiet
2018-02-27 14:05:33 +08:00
else
nvm_echo "No installed global packages found..."
fi
2015-03-17 14:19:32 +08:00
2018-05-22 20:57:40 +08:00
nvm_echo " Linking global packages from ${ VERSION } ... "
2018-02-27 14:05:33 +08:00
if [ -n " ${ LINKS } " ] ; then
(
set -f; IFS = '
2015-07-02 22:45:11 -07:00
' # necessary to turn off variable expansion except for newlines
2018-05-22 20:57:40 +08:00
for LINK in ${ LINKS } ; do
2018-02-27 14:05:33 +08:00
set +f; unset IFS # restore variable expansion
2018-05-22 20:57:40 +08:00
if [ -n " ${ LINK } " ] ; then
2021-09-07 10:14:18 -07:00
case " ${ LINK } " in
'/' *) ( nvm_cd " ${ LINK } " && npm link) ; ;
*) ( nvm_cd " $( npm root -g) /../ ${ LINK } " && npm link)
esac
2018-02-27 14:05:33 +08:00
fi
done
)
else
nvm_echo "No linked global packages found..."
fi
2011-07-02 09:14:48 -07:00
; ;
2018-05-22 20:57:40 +08:00
"clear-cache" )
command rm -f " ${ NVM_DIR } /v* " " $( nvm_version_dir) " 2>/dev/null
2017-10-28 20:30:28 -04:00
nvm_echo 'nvm cache cleared.'
2011-01-22 17:48:57 +01:00
; ;
2018-05-22 20:57:40 +08:00
"version" )
2016-08-07 00:08:46 -07:00
nvm_version " ${ 1 } "
2015-08-04 14:03:57 -07:00
; ;
2018-05-22 20:57:40 +08:00
"version-remote" )
2016-04-24 16:26:32 -07:00
local NVM_LTS
local PATTERN
2018-05-22 20:57:40 +08:00
while [ $# -gt 0 ] ; do
2016-08-07 00:08:46 -07:00
case " ${ 1 - } " in
2016-08-06 23:57:15 -07:00
--) ; ;
2016-04-24 16:26:32 -07:00
--lts)
NVM_LTS = '*'
; ;
2016-04-25 00:55:35 -07:00
--lts= *)
2016-08-07 00:08:46 -07:00
NVM_LTS = " ${ 1 ##--lts= } "
2016-04-25 00:55:35 -07:00
; ;
2016-04-24 16:26:32 -07:00
--*)
2016-08-07 00:08:46 -07:00
nvm_err " Unsupported option \" ${ 1 } \". "
2018-05-22 20:57:40 +08:00
return 55
2016-04-24 16:26:32 -07:00
; ;
*)
2016-08-07 00:08:46 -07:00
PATTERN = " ${ PATTERN :- ${ 1 } } "
2016-04-24 16:26:32 -07:00
; ;
esac
shift
done
2018-11-21 21:25:20 -06:00
case " ${ PATTERN - } " in
2016-08-23 10:23:21 -07:00
'lts/*' )
NVM_LTS = '*'
unset PATTERN
; ;
lts/*)
NVM_LTS = " ${ PATTERN ##lts/ } "
unset PATTERN
; ;
esac
2016-04-24 16:26:32 -07:00
NVM_VERSION_ONLY = true NVM_LTS = " ${ NVM_LTS - } " nvm_remote_version " ${ PATTERN :- node } "
2010-04-15 09:20:27 -07:00
; ;
2020-07-27 10:26:35 -07:00
"--version" | "-v" )
2023-08-21 21:10:10 -07:00
nvm_echo '0.39.5'
2014-03-20 23:19:47 -07:00
; ;
2018-05-22 20:57:40 +08:00
"unload" )
2017-02-18 00:50:33 -08:00
nvm deactivate >/dev/null 2>& 1
2016-08-10 23:10:41 -07:00
unset -f nvm \
2015-01-13 14:16:35 -08:00
nvm_iojs_prefix nvm_node_prefix \
2015-01-13 00:57:32 -08:00
nvm_add_iojs_prefix nvm_strip_iojs_prefix \
2017-03-20 16:57:26 +08:00
nvm_is_iojs_version nvm_is_alias nvm_has_non_aliased \
2015-10-17 10:19:39 -07:00
nvm_ls_remote nvm_ls_remote_iojs nvm_ls_remote_index_tab \
2015-07-03 21:10:12 -07:00
nvm_ls nvm_remote_version nvm_remote_versions \
2017-03-27 15:00:50 -07:00
nvm_install_binary nvm_install_source nvm_clang_version \
2016-08-10 23:21:56 -07:00
nvm_get_mirror nvm_get_download_slug nvm_download_artifact \
2017-03-27 15:00:50 -07:00
nvm_install_npm_if_needed nvm_use_if_needed nvm_check_file_permissions \
2020-07-31 22:10:28 -07:00
nvm_print_versions nvm_compute_checksum \
2020-07-31 22:13:21 -07:00
nvm_get_checksum_binary \
2016-08-10 23:10:41 -07:00
nvm_get_checksum_alg nvm_get_checksum nvm_compare_checksum \
2015-07-03 21:10:12 -07:00
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 \
2016-11-14 19:19:39 +02:00
nvm_binary_available nvm_change_path nvm_strip_path \
2015-07-03 21:10:12 -07:00
nvm_num_version_groups nvm_format_version nvm_ensure_version_prefix \
2021-12-17 13:55:14 -08:00
nvm_normalize_version nvm_is_valid_version nvm_normalize_lts \
2016-11-28 04:10:42 +08:00
nvm_ensure_version_installed nvm_cache_dir \
2015-07-03 21:10:12 -07:00
nvm_version_path nvm_alias_path nvm_version_dir \
2020-08-23 14:40:42 -07:00
nvm_find_nvmrc nvm_find_up nvm_find_project_dir nvm_tree_contains_path \
2015-01-12 18:15:04 -08:00
nvm_version_greater nvm_version_greater_than_or_equal_to \
2017-06-11 14:15:04 -07:00
nvm_print_npm_version nvm_install_latest_npm nvm_npm_global_modules \
2015-07-03 21:10:12 -07:00
nvm_has_system_node nvm_has_system_iojs \
2019-02-01 13:27:18 -08:00
nvm_download nvm_get_latest nvm_has nvm_install_default_packages nvm_get_default_packages \
nvm_curl_use_compression nvm_curl_version \
2021-01-07 13:00:26 -08:00
nvm_auto nvm_supports_xz \
2016-11-28 04:10:42 +08:00
nvm_echo nvm_err nvm_grep nvm_cd \
2016-08-11 10:58:16 -07:00
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 \
2020-05-08 16:08:27 -04:00
nvm_node_version_has_solaris_binary nvm_iojs_version_has_solaris_binary \
2019-02-24 00:03:19 +01:00
nvm_curl_libz_support nvm_command_info nvm_is_zsh nvm_stdout_is_terminal \
2020-08-24 22:44:25 -07:00
nvm_npmrc_bad_news_bears \
2022-10-13 20:16:42 -07:00
nvm_get_colors nvm_set_colors nvm_print_color_code nvm_wrap_with_color_code nvm_format_help_message_colors \
[New] Added `set-colors` command. See details below:
This command allows users to replace default colors with their own custom colors.
- top-level commands modified: alias, ls, ls-remote
- helper functions added: nvm_echo_with_colors, nvm_err_with_colors,
nvm_set_colors, nvm_get_colors, nvm_print_color_code
- functions modified: nvm_print_formatted_alias, nvm_print_versions, nvm_print_alias_path (implicitly), nvm_print_default_alias (implicitly), nvm_list_aliases (implicitly)
We added tests and info on using this command to the README!
Co-authored-by: Dena Burd <29719099+gitburd@users.noreply.github.com>
Co-authored-by: Naomi Quinones <52065567+naomiquinones@users.noreply.github.com>
2020-08-17 14:56:13 -07:00
nvm_echo_with_colors nvm_err_with_colors \
2021-12-19 02:58:18 +00:00
nvm_get_artifact_compression nvm_install_binary_extract nvm_extract_tarball \
2018-05-22 20:57:40 +08:00
>/dev/null 2>& 1
2017-09-07 16:52:05 +02:00
unset NVM_RC_VERSION NVM_NODEJS_ORG_MIRROR NVM_IOJS_ORG_MIRROR NVM_DIR \
2020-02-07 06:23:35 -08:00
NVM_CD_FLAGS NVM_BIN NVM_INC NVM_MAKE_JOBS \
[New] Added `set-colors` command. See details below:
This command allows users to replace default colors with their own custom colors.
- top-level commands modified: alias, ls, ls-remote
- helper functions added: nvm_echo_with_colors, nvm_err_with_colors,
nvm_set_colors, nvm_get_colors, nvm_print_color_code
- functions modified: nvm_print_formatted_alias, nvm_print_versions, nvm_print_alias_path (implicitly), nvm_print_default_alias (implicitly), nvm_list_aliases (implicitly)
We added tests and info on using this command to the README!
Co-authored-by: Dena Burd <29719099+gitburd@users.noreply.github.com>
Co-authored-by: Naomi Quinones <52065567+naomiquinones@users.noreply.github.com>
2020-08-17 14:56:13 -07:00
NVM_COLORS INSTALLED_COLOR SYSTEM_COLOR \
CURRENT_COLOR NOT_INSTALLED_COLOR DEFAULT_COLOR LTS_COLOR \
2018-05-22 20:57:40 +08:00
>/dev/null 2>& 1
2014-03-16 18:09:54 +01:00
; ;
[New] Added `set-colors` command. See details below:
This command allows users to replace default colors with their own custom colors.
- top-level commands modified: alias, ls, ls-remote
- helper functions added: nvm_echo_with_colors, nvm_err_with_colors,
nvm_set_colors, nvm_get_colors, nvm_print_color_code
- functions modified: nvm_print_formatted_alias, nvm_print_versions, nvm_print_alias_path (implicitly), nvm_print_default_alias (implicitly), nvm_list_aliases (implicitly)
We added tests and info on using this command to the README!
Co-authored-by: Dena Burd <29719099+gitburd@users.noreply.github.com>
Co-authored-by: Naomi Quinones <52065567+naomiquinones@users.noreply.github.com>
2020-08-17 14:56:13 -07:00
"set-colors" )
local EXIT_CODE
nvm_set_colors " ${ 1 - } "
EXIT_CODE = $?
if [ " $EXIT_CODE " -eq 17 ] ; then
>& 2 nvm --help
nvm_echo
nvm_err_with_colors "\033[1;37mPlease pass in five \033[1;31mvalid color codes\033[1;37m. Choose from: rRgGbBcCyYmMkKeW\033[0m"
fi
; ;
2018-05-22 20:57:40 +08:00
*)
2016-05-05 00:14:12 -07:00
>& 2 nvm --help
2015-03-14 10:34:52 -07:00
return 127
2010-04-15 09:20:27 -07:00
; ;
esac
2010-12-10 11:32:16 -08:00
}
2011-01-22 19:16:24 +01:00
2019-02-01 13:27:18 -08:00
nvm_get_default_packages( ) {
2019-02-02 13:45:11 -08:00
local NVM_DEFAULT_PACKAGE_FILE = " ${ NVM_DIR } /default-packages "
if [ -f " ${ NVM_DEFAULT_PACKAGE_FILE } " ] ; then
2019-02-01 13:27:18 -08:00
local DEFAULT_PACKAGES
DEFAULT_PACKAGES = ''
# Read lines from $NVM_DIR/default-packages
local line
2019-02-02 13:45:11 -08:00
# ensure a trailing newline
WORK = $( mktemp -d) || exit $?
2019-02-04 14:45:04 -08:00
# shellcheck disable=SC2064
2020-08-11 10:16:42 -07:00
trap " command rm -rf ' $WORK ' " EXIT
2019-02-02 13:45:11 -08:00
# shellcheck disable=SC1003
sed -e '$a\' " ${ NVM_DEFAULT_PACKAGE_FILE } " > " ${ WORK } /default-packages "
2019-02-01 13:27:18 -08:00
while IFS = ' ' read -r line; do
# Skip empty lines.
[ -n " ${ line - } " ] || continue
# Skip comment lines that begin with `#`.
[ " $( nvm_echo " ${ line } " | command cut -c1) " != "#" ] || continue
# Fail on lines that have multiple space-separated words
case $line in
*\ *)
nvm_err " Only one package per line is allowed in the ${ NVM_DIR } /default-packages file. Please remove any lines with multiple space-separated values. "
return 1
; ;
esac
DEFAULT_PACKAGES = " ${ DEFAULT_PACKAGES } ${ line } "
2019-02-02 13:45:11 -08:00
done < " ${ WORK } /default-packages "
2020-08-11 10:16:42 -07:00
echo " ${ DEFAULT_PACKAGES } " | command xargs
2019-02-01 13:27:18 -08:00
fi
}
2017-03-28 09:37:14 -07:00
nvm_install_default_packages( ) {
2022-10-13 15:03:36 -07:00
local DEFAULT_PACKAGES
DEFAULT_PACKAGES = " $( nvm_get_default_packages) "
EXIT_CODE = $?
if [ $EXIT_CODE -ne 0 ] || [ -z " ${ DEFAULT_PACKAGES } " ] ; then
return $EXIT_CODE
fi
2017-03-28 09:37:14 -07:00
nvm_echo " Installing default global packages from ${ NVM_DIR } /default-packages... "
2022-10-13 15:03:36 -07:00
nvm_echo " npm install -g --quiet ${ DEFAULT_PACKAGES } "
2017-03-28 09:37:14 -07:00
2022-10-13 15:03:36 -07:00
if ! nvm_echo " ${ DEFAULT_PACKAGES } " | command xargs npm install -g --quiet; then
2017-03-28 09:37:14 -07:00
nvm_err "Failed installing default packages. Please check if your default-packages file or a package in it has problems!"
return 1
fi
}
2015-09-09 12:15:38 +10:00
nvm_supports_xz( ) {
2020-01-29 16:20:15 -05:00
if [ -z " ${ 1 - } " ] ; then
2016-02-09 11:19:14 -08:00
return 1
fi
2020-01-29 16:20:15 -05:00
local NVM_OS
NVM_OS = " $( nvm_get_os) "
if [ " _ ${ NVM_OS } " = '_darwin' ] ; then
local MACOS_VERSION
MACOS_VERSION = " $( sw_vers -productVersion) "
if nvm_version_greater "10.9.0" " ${ MACOS_VERSION } " ; then
# macOS 10.8 and earlier doesn't support extracting xz-compressed tarballs with tar
return 1
fi
elif [ " _ ${ NVM_OS } " = '_freebsd' ] ; then
if ! [ -e '/usr/lib/liblzma.so' ] ; then
# FreeBSD without /usr/lib/liblzma.so doesn't support extracting xz-compressed tarballs with tar
return 1
fi
else
if ! command which xz >/dev/null 2>& 1; then
# Most OSes without xz on the PATH don't support extracting xz-compressed tarballs with tar
# (Should correctly handle Linux, SmartOS, maybe more)
return 1
fi
fi
2016-02-09 11:19:14 -08:00
# all node versions v4.0.0 and later have xz
if nvm_is_merged_node_version " ${ 1 } " ; then
return 0
fi
# 0.12x: node v0.12.10 and later have xz
2018-05-22 20:57:40 +08:00
if nvm_version_greater_than_or_equal_to " ${ 1 } " "0.12.10" && nvm_version_greater "0.13.0" " ${ 1 } " ; then
2016-02-09 11:19:14 -08:00
return 0
fi
# 0.10x: node v0.10.42 and later have xz
2018-05-22 20:57:40 +08:00
if nvm_version_greater_than_or_equal_to " ${ 1 } " "0.10.42" && nvm_version_greater "0.11.0" " ${ 1 } " ; then
2016-02-09 11:19:14 -08:00
return 0
fi
case " ${ NVM_OS } " in
darwin)
# darwin only has xz for io.js v2.3.2 and later
nvm_version_greater_than_or_equal_to " ${ 1 } " "2.3.2"
; ;
*)
nvm_version_greater_than_or_equal_to " ${ 1 } " "1.0.0"
; ;
esac
return $?
2015-09-09 12:15:38 +10:00
}
2016-01-20 12:50:45 -08:00
nvm_auto( ) {
local NVM_MODE
NVM_MODE = " ${ 1 - } "
local VERSION
2020-08-19 11:40:45 -07:00
local NVM_CURRENT
2018-05-22 20:57:40 +08:00
if [ " _ ${ NVM_MODE } " = '_install' ] ; then
2016-05-05 00:17:35 -07:00
VERSION = " $( nvm_alias default 2>/dev/null || nvm_echo) "
2018-05-22 20:57:40 +08:00
if [ -n " ${ VERSION } " ] ; then
nvm install " ${ VERSION } " >/dev/null
2016-01-20 12:50:45 -08:00
elif nvm_rc_version >/dev/null 2>& 1; then
nvm install >/dev/null
fi
elif [ " _ $NVM_MODE " = '_use' ] ; then
2020-08-19 11:40:45 -07:00
NVM_CURRENT = " $( nvm_ls_current) "
2016-11-14 19:18:24 +02:00
if [ " _ ${ NVM_CURRENT } " = '_none' ] || [ " _ ${ NVM_CURRENT } " = '_system' ] ; then
VERSION = " $( nvm_resolve_local_alias default 2>/dev/null || 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
fi
else
nvm use --silent " ${ NVM_CURRENT } " >/dev/null
2016-01-20 12:50:45 -08:00
fi
2018-05-22 20:57:40 +08:00
elif [ " _ ${ NVM_MODE } " != '_none' ] ; then
2016-05-05 00:17:35 -07:00
nvm_err 'Invalid auto mode supplied.'
2016-01-20 12:50:45 -08:00
return 1
2014-12-26 12:19:35 -08:00
fi
2016-01-20 12:50:45 -08:00
}
2016-02-15 12:49:56 +01:00
nvm_process_parameters( ) {
local NVM_AUTO_MODE
NVM_AUTO_MODE = 'use'
2021-08-24 09:34:01 -07:00
while [ " $# " -ne 0 ] ; do
2021-01-07 13:00:26 -08:00
case " $1 " in
--install) NVM_AUTO_MODE = 'install' ; ;
--no-use) NVM_AUTO_MODE = 'none' ; ;
esac
shift
done
2018-05-22 20:57:40 +08:00
nvm_auto " ${ NVM_AUTO_MODE } "
2016-02-15 12:49:56 +01:00
}
nvm_process_parameters " $@ "
2015-05-11 01:46:18 -07:00
} # this ensures the entire script is downloaded #