fe-core-components 9.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of fe-core-components might be problematic. Click here for more details.

Files changed (323) hide show
  1. package/.dockerignore +16 -0
  2. package/.editorconfig +28 -0
  3. package/.gitattributes +1 -0
  4. package/.github/FUNDING.yml +12 -0
  5. package/.github/ISSUE_TEMPLATE.md +44 -0
  6. package/.github/SECURITY.md +3 -0
  7. package/.github/workflows/latest-npm.yml +76 -0
  8. package/.github/workflows/lint.yml +73 -0
  9. package/.github/workflows/rebase.yml +23 -0
  10. package/.github/workflows/release.yml +32 -0
  11. package/.github/workflows/require-allow-edits.yml +21 -0
  12. package/.github/workflows/shellcheck.yml +55 -0
  13. package/.github/workflows/toc.yml +37 -0
  14. package/.github/workflows/windows-npm.yml +133 -0
  15. package/.mailmap +1 -0
  16. package/.travis.yml +75 -0
  17. package/CODE_OF_CONDUCT.md +106 -0
  18. package/CONTRIBUTING.md +21 -0
  19. package/Dockerfile +111 -0
  20. package/GOVERNANCE.md +10 -0
  21. package/LICENSE.md +22 -0
  22. package/Makefile +85 -0
  23. package/PROJECT_CHARTER.md +49 -0
  24. package/README.md +970 -0
  25. package/ROADMAP.md +9 -0
  26. package/bash_completion +99 -0
  27. package/index.js +48 -0
  28. package/install.sh +463 -0
  29. package/nvm-exec +15 -0
  30. package/nvm.sh +4323 -0
  31. package/package.json +12 -0
  32. package/package.json.ori +51 -0
  33. package/rename_test.sh +52 -0
  34. package/test/common.sh +103 -0
  35. package/test/fast/Aliases/'nvm alias' should not accept aliases with slashes +26 -0
  36. package/test/fast/Aliases/'nvm unalias' should accept aliases when they shadow a built-in alias +17 -0
  37. package/test/fast/Aliases/'nvm unalias' should not accept aliases with names equal to built-in alias +25 -0
  38. package/test/fast/Aliases/'nvm unalias' should not accept aliases with slashes +26 -0
  39. package/test/fast/Aliases/Running 'nvm alias /313/202aliasname/313/203 /313/202target/313/203' again should change the target" +24 -0
  40. package/test/fast/Aliases/Running 'nvm alias /313/202aliasname/313/203' should list but one alias" +4 -0
  41. package/test/fast/Aliases/Running 'nvm alias' lists implicit aliases when they do not exist +26 -0
  42. package/test/fast/Aliases/Running 'nvm alias' lists manual aliases instead of implicit aliases when present +49 -0
  43. package/test/fast/Aliases/Running 'nvm alias' should list all aliases +48 -0
  44. package/test/fast/Aliases/circular/nvm_resolve_alias +36 -0
  45. package/test/fast/Aliases/circular/nvm_resolve_local_alias +36 -0
  46. package/test/fast/Aliases/circular/setup +9 -0
  47. package/test/fast/Aliases/circular/teardown +9 -0
  48. package/test/fast/Aliases/lts/'nvm alias' should ensure LTS alias dir exists +18 -0
  49. package/test/fast/Aliases/lts/setup_dir +10 -0
  50. package/test/fast/Aliases/lts/teardown_dir +10 -0
  51. package/test/fast/Aliases/nvm_ensure_default_set +20 -0
  52. package/test/fast/Aliases/nvm_list_aliases calls nvm_get_colors +22 -0
  53. package/test/fast/Aliases/nvm_list_aliases works with LTS aliases +25 -0
  54. package/test/fast/Aliases/nvm_list_aliases works with no LTS aliases present +21 -0
  55. package/test/fast/Aliases/nvm_print_alias_path calls nvm_get_colors +28 -0
  56. package/test/fast/Aliases/nvm_print_formatted_alias calls nvm_get_colors +21 -0
  57. package/test/fast/Aliases/nvm_resolve_alias +33 -0
  58. package/test/fast/Aliases/nvm_resolve_local_alias +35 -0
  59. package/test/fast/Aliases/setup +14 -0
  60. package/test/fast/Aliases/teardown +17 -0
  61. package/test/fast/Listing paths/Running 'nvm which 0.0.2' should display only version 0.0.2 +27 -0
  62. package/test/fast/Listing paths/Running 'nvm which foo' should return a nonzero exit code when not found +6 -0
  63. package/test/fast/Listing paths/teardown +3 -0
  64. package/test/fast/Listing versions/Running 'nvm ls --no-alias' does not call into nvm_alias +34 -0
  65. package/test/fast/Listing versions/Running 'nvm ls --no-alias' with a pattern errors +15 -0
  66. package/test/fast/Listing versions/Running 'nvm ls 0.0.2' should display only version 0.0.2 +21 -0
  67. package/test/fast/Listing versions/Running 'nvm ls 0.2' should display only 0.2.x versions +42 -0
  68. package/test/fast/Listing versions/Running 'nvm ls foo' should return a nonzero exit code when not found +6 -0
  69. package/test/fast/Listing versions/Running 'nvm ls io' should return NA +6 -0
  70. package/test/fast/Listing versions/Running 'nvm ls node_' should return a nonzero exit code when not found +6 -0
  71. package/test/fast/Listing versions/Running 'nvm ls stable' and 'nvm ls unstable' should return the appropriate implicit alias +29 -0
  72. package/test/fast/Listing versions/Running 'nvm ls system' should include 'system' when appropriate +21 -0
  73. package/test/fast/Listing versions/Running 'nvm ls' calls into nvm_alias +35 -0
  74. package/test/fast/Listing versions/Running 'nvm ls' should display all installed versions +44 -0
  75. package/test/fast/Listing versions/Running 'nvm ls' should filter out '.nvm' +10 -0
  76. package/test/fast/Listing versions/Running 'nvm ls' should filter out 'versions' +10 -0
  77. package/test/fast/Listing versions/Running 'nvm ls' should include 'system' when appropriate +21 -0
  78. package/test/fast/Listing versions/Running 'nvm ls' should list versions in the 'versions' directory +12 -0
  79. package/test/fast/Listing versions/Running 'nvm ls' should not show a trailing slash +40 -0
  80. package/test/fast/Listing versions/Running 'nvm ls' with node-like versioning vx.x.x should only list a matched version +11 -0
  81. package/test/fast/Listing versions/Running 'nvm ls' with nounset should not fail +23 -0
  82. package/test/fast/Listing versions/Using a nonstandard IFS should not break +19 -0
  83. package/test/fast/Listing versions/teardown +16 -0
  84. package/test/fast/Running 'nvm alias' should create a file in the alias directory +9 -0
  85. package/test/fast/Running 'nvm current' should display current nvm environment +11 -0
  86. package/test/fast/Running 'nvm deactivate' should unset the nvm environment variables +23 -0
  87. package/test/fast/Running 'nvm install' with '--reinstall-packages-from' requires a valid version +57 -0
  88. package/test/fast/Running 'nvm install' with an invalid version fails nicely +13 -0
  89. package/test/fast/Running 'nvm unalias' should remove the alias file +13 -0
  90. package/test/fast/Running 'nvm uninstall' should remove the appropriate directory +12 -0
  91. package/test/fast/Running 'nvm uninstall' with incorrect file permissions fails nicely +14 -0
  92. package/test/fast/Running 'nvm unload' should unset all function and variables +30 -0
  93. package/test/fast/Running 'nvm use foo' where 'foo' is circular aborts +39 -0
  94. package/test/fast/Running 'nvm use iojs' uses latest io.js version +37 -0
  95. package/test/fast/Running 'nvm use system' should work as expected +44 -0
  96. package/test/fast/Running 'nvm use x' should create and change the 'current' symlink +36 -0
  97. package/test/fast/Running 'nvm use x' should not create the 'current' symlink if $NVM_SYMLINK_CURRENT is false +86 -0
  98. package/test/fast/Running 'nvm use' should drop CR char automatically +33 -0
  99. package/test/fast/Set Colors/nvm_echo_with_colors +21 -0
  100. package/test/fast/Set Colors/nvm_err_with_colors +19 -0
  101. package/test/fast/Set Colors/nvm_print_default_alias calls nvm_get_colors +24 -0
  102. package/test/fast/Set Colors/nvm_print_versions calls nvm_get_colors +52 -0
  103. package/test/fast/Sourcing nvm.sh should make the nvm command available +7 -0
  104. package/test/fast/Sourcing nvm.sh should not modify parameters of caller +7 -0
  105. package/test/fast/Unit tests/mocks/LTS_names.txt +7 -0
  106. package/test/fast/Unit tests/mocks/iojs.org-dist-index.tab +42 -0
  107. package/test/fast/Unit tests/mocks/lts-star.txt +1 -0
  108. package/test/fast/Unit tests/mocks/nodejs.org-dist-index.tab +614 -0
  109. package/test/fast/Unit tests/mocks/nodejs.org-download-nightly-index.tab +2576 -0
  110. package/test/fast/Unit tests/mocks/nvm ls-remote iojs.txt +41 -0
  111. package/test/fast/Unit tests/mocks/nvm ls-remote lts.txt +166 -0
  112. package/test/fast/Unit tests/mocks/nvm ls-remote node.txt +613 -0
  113. package/test/fast/Unit tests/mocks/nvm ls-remote.txt +654 -0
  114. package/test/fast/Unit tests/mocks/nvm_ls_remote LTS argon.txt +36 -0
  115. package/test/fast/Unit tests/mocks/nvm_ls_remote LTS nightly argon.txt +1 -0
  116. package/test/fast/Unit tests/mocks/nvm_ls_remote LTS nightly.txt +25 -0
  117. package/test/fast/Unit tests/mocks/nvm_ls_remote LTS.txt +166 -0
  118. package/test/fast/Unit tests/mocks/nvm_ls_remote nightly.txt +146 -0
  119. package/test/fast/Unit tests/mocks/nvm_ls_remote stable nightly.txt +1 -0
  120. package/test/fast/Unit tests/mocks/nvm_ls_remote stable.txt +1 -0
  121. package/test/fast/Unit tests/mocks/nvm_ls_remote.txt +613 -0
  122. package/test/fast/Unit tests/mocks/nvm_ls_remote_iojs.txt +41 -0
  123. package/test/fast/Unit tests/mocks/nvm_make_alias LTS alias calls.txt +8 -0
  124. package/test/fast/Unit tests/mocks/nvm_print_implicit_alias remote stable nightly.txt +1 -0
  125. package/test/fast/Unit tests/mocks/nvm_print_implicit_alias remote stable.txt +1 -0
  126. package/test/fast/Unit tests/mocks/project_dirs/inside-n_m-nested/node_modules/foo/bar/.gitkeep +0 -0
  127. package/test/fast/Unit tests/mocks/project_dirs/inside-n_m-nested-pkg/node_modules/foo/bar/.gitkeep +0 -0
  128. package/test/fast/Unit tests/mocks/project_dirs/inside-n_m-nested-pkg/node_modules/foo/package.json +0 -0
  129. package/test/fast/Unit tests/mocks/project_dirs/nested-both/a/b/c/d/.gitkeep +0 -0
  130. package/test/fast/Unit tests/mocks/project_dirs/nested-both/node_modules/.gitkeep +0 -0
  131. package/test/fast/Unit tests/mocks/project_dirs/nested-both/package.json +0 -0
  132. package/test/fast/Unit tests/mocks/project_dirs/nested-n_m/a/b/c/d/.gitkeep +0 -0
  133. package/test/fast/Unit tests/mocks/project_dirs/nested-n_m/node_modules/.gitkeep +0 -0
  134. package/test/fast/Unit tests/mocks/project_dirs/nested-pkg/a/b/c/d/.gitkeep +0 -0
  135. package/test/fast/Unit tests/mocks/project_dirs/nested-pkg/package.json +0 -0
  136. package/test/fast/Unit tests/mocks/project_dirs/no-nesting-both/node_modules/.gitkeep +0 -0
  137. package/test/fast/Unit tests/mocks/project_dirs/no-nesting-both/package.json +0 -0
  138. package/test/fast/Unit tests/mocks/project_dirs/no-nesting-n_m/node_modules/.gitkeep +0 -0
  139. package/test/fast/Unit tests/mocks/project_dirs/no-nesting-pkg/package.json +0 -0
  140. package/test/fast/Unit tests/nvm ls-remote +73 -0
  141. package/test/fast/Unit tests/nvm set_colors +52 -0
  142. package/test/fast/Unit tests/nvm version-remote +51 -0
  143. package/test/fast/Unit tests/nvm_add_iojs_prefix +9 -0
  144. package/test/fast/Unit tests/nvm_alias +32 -0
  145. package/test/fast/Unit tests/nvm_alias LTS-N +36 -0
  146. package/test/fast/Unit tests/nvm_alias_path +7 -0
  147. package/test/fast/Unit tests/nvm_change_path +57 -0
  148. package/test/fast/Unit tests/nvm_check_for_help +9 -0
  149. package/test/fast/Unit tests/nvm_clang_version +62 -0
  150. package/test/fast/Unit tests/nvm_command_info +58 -0
  151. package/test/fast/Unit tests/nvm_compare_checksum +72 -0
  152. package/test/fast/Unit tests/nvm_compute_checksum +23 -0
  153. package/test/fast/Unit tests/nvm_curl_libz_support +39 -0
  154. package/test/fast/Unit tests/nvm_curl_use_compression +38 -0
  155. package/test/fast/Unit tests/nvm_curl_version +32 -0
  156. package/test/fast/Unit tests/nvm_die_on_prefix +192 -0
  157. package/test/fast/Unit tests/nvm_download +18 -0
  158. package/test/fast/Unit tests/nvm_ensure_default_set +15 -0
  159. package/test/fast/Unit tests/nvm_ensure_version_installed +63 -0
  160. package/test/fast/Unit tests/nvm_ensure_version_prefix +12 -0
  161. package/test/fast/Unit tests/nvm_find_project_dir +33 -0
  162. package/test/fast/Unit tests/nvm_find_up +25 -0
  163. package/test/fast/Unit tests/nvm_format_version +20 -0
  164. package/test/fast/Unit tests/nvm_get_arch +84 -0
  165. package/test/fast/Unit tests/nvm_get_artifact_compression +22 -0
  166. package/test/fast/Unit tests/nvm_get_checksum +45 -0
  167. package/test/fast/Unit tests/nvm_get_checksum_alg +20 -0
  168. package/test/fast/Unit tests/nvm_get_checksum_binary +20 -0
  169. package/test/fast/Unit tests/nvm_get_colors +79 -0
  170. package/test/fast/Unit tests/nvm_get_default_packages +92 -0
  171. package/test/fast/Unit tests/nvm_get_download_slug +111 -0
  172. package/test/fast/Unit tests/nvm_get_latest missing curl or wget +20 -0
  173. package/test/fast/Unit tests/nvm_get_minor_version +45 -0
  174. package/test/fast/Unit tests/nvm_get_mirror +32 -0
  175. package/test/fast/Unit tests/nvm_has +11 -0
  176. package/test/fast/Unit tests/nvm_has_non_aliased +24 -0
  177. package/test/fast/Unit tests/nvm_has_solaris_binary +32 -0
  178. package/test/fast/Unit tests/nvm_has_system_iojs +27 -0
  179. package/test/fast/Unit tests/nvm_has_system_node +27 -0
  180. package/test/fast/Unit tests/nvm_install_binary_extract +59 -0
  181. package/test/fast/Unit tests/nvm_install_binary_nosource +30 -0
  182. package/test/fast/Unit tests/nvm_install_latest_npm +58 -0
  183. package/test/fast/Unit tests/nvm_install_no_progress_bar +43 -0
  184. package/test/fast/Unit tests/nvm_iojs_prefix +7 -0
  185. package/test/fast/Unit tests/nvm_iojs_version_has_solaris_binary +17 -0
  186. package/test/fast/Unit tests/nvm_is_alias +20 -0
  187. package/test/fast/Unit tests/nvm_is_iojs_version +10 -0
  188. package/test/fast/Unit tests/nvm_is_merged_node_version +10 -0
  189. package/test/fast/Unit tests/nvm_is_natural_num +17 -0
  190. package/test/fast/Unit tests/nvm_is_valid_version +13 -0
  191. package/test/fast/Unit tests/nvm_is_version_installed +54 -0
  192. package/test/fast/Unit tests/nvm_ls_current +39 -0
  193. package/test/fast/Unit tests/nvm_ls_remote +86 -0
  194. package/test/fast/Unit tests/nvm_ls_remote LTS aliases +49 -0
  195. package/test/fast/Unit tests/nvm_ls_remote nightly +65 -0
  196. package/test/fast/Unit tests/nvm_ls_remote_iojs +37 -0
  197. package/test/fast/Unit tests/nvm_make_alias +19 -0
  198. package/test/fast/Unit tests/nvm_node_prefix +7 -0
  199. package/test/fast/Unit tests/nvm_node_version_has_solaris_binary +33 -0
  200. package/test/fast/Unit tests/nvm_normalize_lts +38 -0
  201. package/test/fast/Unit tests/nvm_num_version_groups +24 -0
  202. package/test/fast/Unit tests/nvm_print_alias_path +44 -0
  203. package/test/fast/Unit tests/nvm_print_color_code +20 -0
  204. package/test/fast/Unit tests/nvm_print_default_alias +38 -0
  205. package/test/fast/Unit tests/nvm_print_implicit_alias errors +25 -0
  206. package/test/fast/Unit tests/nvm_print_implicit_alias success +106 -0
  207. package/test/fast/Unit tests/nvm_print_npm_version +28 -0
  208. package/test/fast/Unit tests/nvm_remote_version +78 -0
  209. package/test/fast/Unit tests/nvm_remote_versions +77 -0
  210. package/test/fast/Unit tests/nvm_stdout_is_terminal +32 -0
  211. package/test/fast/Unit tests/nvm_strip_iojs_prefix +10 -0
  212. package/test/fast/Unit tests/nvm_strip_path +18 -0
  213. package/test/fast/Unit tests/nvm_supports_xz +42 -0
  214. package/test/fast/Unit tests/nvm_tree_contains_path +31 -0
  215. package/test/fast/Unit tests/nvm_use_if_needed +24 -0
  216. package/test/fast/Unit tests/nvm_validate_implicit_alias +20 -0
  217. package/test/fast/Unit tests/nvm_version +48 -0
  218. package/test/fast/Unit tests/nvm_version_dir +11 -0
  219. package/test/fast/Unit tests/nvm_version_greater +15 -0
  220. package/test/fast/Unit tests/nvm_version_path +14 -0
  221. package/test/fast/nvm should remove the last trailing slash in $NVM_DIR +18 -0
  222. package/test/fast/setup +14 -0
  223. package/test/fast/setup_dir +18 -0
  224. package/test/fast/teardown +12 -0
  225. package/test/fast/teardown_dir +15 -0
  226. package/test/install_script/install_nvm_from_git +129 -0
  227. package/test/install_script/nvm_check_global_modules +63 -0
  228. package/test/install_script/nvm_detect_profile +118 -0
  229. package/test/install_script/nvm_do_install +8 -0
  230. package/test/install_script/nvm_download +18 -0
  231. package/test/install_script/nvm_install_dir +25 -0
  232. package/test/install_script/nvm_install_with_aliased_dot +24 -0
  233. package/test/install_script/nvm_install_with_node_version +12 -0
  234. package/test/install_script/nvm_profile_is_bash_or_zsh +13 -0
  235. package/test/install_script/nvm_reset +38 -0
  236. package/test/install_script/nvm_source +43 -0
  237. package/test/installation_iojs/install already installed uses it +25 -0
  238. package/test/installation_iojs/install from binary +22 -0
  239. package/test/installation_iojs/install from source +22 -0
  240. package/test/installation_iojs/install two versions and use the latest one +25 -0
  241. package/test/installation_iojs/install version specified in .nvmrc from binary +22 -0
  242. package/test/installation_iojs/install version specified in .nvmrc from source +23 -0
  243. package/test/installation_iojs/install while reinstalling packages +31 -0
  244. package/test/installation_iojs/nvm install v1 works +19 -0
  245. package/test/installation_iojs/setup_dir +5 -0
  246. package/test/installation_iojs/teardown_dir +16 -0
  247. package/test/installation_node/default-packages +123 -0
  248. package/test/installation_node/install LTS +29 -0
  249. package/test/installation_node/install already installed uses it +23 -0
  250. package/test/installation_node/install from binary +23 -0
  251. package/test/installation_node/install from binary with binary flag set +37 -0
  252. package/test/installation_node/install from source +29 -0
  253. package/test/installation_node/install from source implicitly +23 -0
  254. package/test/installation_node/install from source with thread parameter +33 -0
  255. package/test/installation_node/install from source without V8 snapshot for ARM +25 -0
  256. package/test/installation_node/install hook +45 -0
  257. package/test/installation_node/install latest npm +51 -0
  258. package/test/installation_node/install two versions and use the latest one +24 -0
  259. package/test/installation_node/install version specified in .nvmrc from binary +20 -0
  260. package/test/installation_node/install version specified in .nvmrc from source +20 -0
  261. package/test/installation_node/install while reinstalling packages +46 -0
  262. package/test/installation_node/install with --alias +11 -0
  263. package/test/installation_node/install with --default +11 -0
  264. package/test/installation_node/install with --latest-npm +12 -0
  265. package/test/installation_node/setup_dir +5 -0
  266. package/test/installation_node/teardown_dir +18 -0
  267. package/test/mocks/isainfo_amd64 +5 -0
  268. package/test/mocks/isainfo_x86 +5 -0
  269. package/test/mocks/pkg_info_amd64 +4 -0
  270. package/test/mocks/pkg_info_fail +1 -0
  271. package/test/mocks/pkg_info_x86 +1 -0
  272. package/test/mocks/uname_osx_amd64 +5 -0
  273. package/test/mocks/uname_osx_x86 +5 -0
  274. package/test/mocks/uname_smartos_amd64 +5 -0
  275. package/test/mocks/uname_smartos_x86 +5 -0
  276. package/test/slow/Running 'nvm current' should display current nvm environment +9 -0
  277. package/test/slow/node 0.6.21 should install 0.6.21-pre +11 -0
  278. package/test/slow/nvm exec/Preamble works and respects 'silent' flag +30 -0
  279. package/test/slow/nvm exec/Running 'nvm exec --lts' should work +18 -0
  280. package/test/slow/nvm exec/Running 'nvm exec 0.x' should work +15 -0
  281. package/test/slow/nvm exec/Running 'nvm exec' should pick up .nvmrc version +16 -0
  282. package/test/slow/nvm exec/Running 'nvm exec' with help should not parse +9 -0
  283. package/test/slow/nvm exec/setup_dir +10 -0
  284. package/test/slow/nvm exec/teardown_dir +13 -0
  285. package/test/slow/nvm reinstall-packages/Running 'nvm copy-packages $(nvm ls current)' should error out +17 -0
  286. package/test/slow/nvm reinstall-packages/setup_dir +11 -0
  287. package/test/slow/nvm reinstall-packages/should work as expected +31 -0
  288. package/test/slow/nvm reinstall-packages/teardown_dir +13 -0
  289. package/test/slow/nvm reinstall-packages/test-npmlink/index.js +2 -0
  290. package/test/slow/nvm reinstall-packages/test-npmlink/package.json +10 -0
  291. package/test/slow/nvm reinstall-packages/works with no installs +18 -0
  292. package/test/slow/nvm run/Running 'nvm run --harmony --version' should work +8 -0
  293. package/test/slow/nvm run/Running 'nvm run --lts' should work +15 -0
  294. package/test/slow/nvm run/Running 'nvm run 0.x' should error out sensibly when 0.x is not installed +16 -0
  295. package/test/slow/nvm run/Running 'nvm run 0.x' should work +8 -0
  296. package/test/slow/nvm run/Running 'nvm run' should pick up .nvmrc version +12 -0
  297. package/test/slow/nvm run/setup_dir +11 -0
  298. package/test/slow/nvm run/teardown_dir +14 -0
  299. package/test/slow/nvm uninstall/Running 'nvm uninstall 0.12.6' uninstalls v0.12.6 +33 -0
  300. package/test/slow/nvm uninstall/Running 'nvm uninstall' with incorrect file permissions fails nicely +30 -0
  301. package/test/slow/nvm uninstall/setup_dir +4 -0
  302. package/test/slow/nvm uninstall/teardown_dir +5 -0
  303. package/test/slow/nvm use/Running 'nvm use --lts' uses latest LTS version +22 -0
  304. package/test/slow/nvm use/Running 'nvm use --lts=foo' uses latest 'foo' LTS version +22 -0
  305. package/test/slow/nvm use/Running 'nvm use iojs' uses latest io.js version +20 -0
  306. package/test/slow/nvm use/Running 'nvm use node --silent' doesn't print anything +13 -0
  307. package/test/slow/nvm use/Running 'nvm use node' uses latest stable node version +20 -0
  308. package/test/slow/nvm use/Running 'nvm use v1.0.0' uses iojs-v1.0.0 iojs version +20 -0
  309. package/test/slow/nvm use/Running 'nvm use' calls 'nvm_die_on_prefix' +22 -0
  310. package/test/slow/nvm use/setup_dir +23 -0
  311. package/test/slow/nvm use/teardown_dir +22 -0
  312. package/test/slow/nvm_get_latest/nvm_get_latest +101 -0
  313. package/test/slow/nvm_get_latest/nvm_get_latest failed redirect +25 -0
  314. package/test/sourcing/Sourcing nvm.sh global alias bug +30 -0
  315. package/test/sourcing/Sourcing nvm.sh should keep version if one is active +20 -0
  316. package/test/sourcing/Sourcing nvm.sh should use the default if available and no nvm node is loaded +28 -0
  317. package/test/sourcing/Sourcing nvm.sh with --install and .nvmrc should install it +27 -0
  318. package/test/sourcing/Sourcing nvm.sh with --install should install the default +32 -0
  319. package/test/sourcing/Sourcing nvm.sh with --no-use should not use anything +31 -0
  320. package/test/sourcing/Sourcing nvm.sh with no default should return 0 +11 -0
  321. package/test/sourcing/setup +14 -0
  322. package/test/sourcing/teardown +7 -0
  323. package/update_test_mocks.sh +59 -0
package/nvm.sh ADDED
@@ -0,0 +1,4323 @@
1
+ # Node Version Manager
2
+ # Implemented as a POSIX-compliant function
3
+ # Should work on sh, dash, bash, ksh, zsh
4
+ # To use source this file from your bash profile
5
+ #
6
+ # Implemented by Tim Caswell <tim@creationix.com>
7
+ # with much bash help from Matthew Ranney
8
+
9
+ # "local" warning, quote expansion warning, sed warning, `local` warning
10
+ # shellcheck disable=SC2039,SC2016,SC2001,SC3043
11
+ { # this ensures the entire script is downloaded #
12
+
13
+ # shellcheck disable=SC3028
14
+ NVM_SCRIPT_SOURCE="$_"
15
+
16
+ nvm_is_zsh() {
17
+ [ -n "${ZSH_VERSION-}" ]
18
+ }
19
+
20
+ nvm_stdout_is_terminal() {
21
+ [ -t 1 ]
22
+ }
23
+
24
+ nvm_echo() {
25
+ command printf %s\\n "$*" 2>/dev/null
26
+ }
27
+
28
+ nvm_echo_with_colors() {
29
+ command printf %b\\n "$*" 2>/dev/null
30
+ }
31
+
32
+ nvm_cd() {
33
+ \cd "$@"
34
+ }
35
+
36
+ nvm_err() {
37
+ >&2 nvm_echo "$@"
38
+ }
39
+
40
+ nvm_err_with_colors() {
41
+ >&2 nvm_echo_with_colors "$@"
42
+ }
43
+
44
+ nvm_grep() {
45
+ GREP_OPTIONS='' command grep "$@"
46
+ }
47
+
48
+ nvm_has() {
49
+ type "${1-}" >/dev/null 2>&1
50
+ }
51
+
52
+ nvm_has_non_aliased() {
53
+ nvm_has "${1-}" && ! nvm_is_alias "${1-}"
54
+ }
55
+
56
+ nvm_is_alias() {
57
+ # this is intentionally not "command alias" so it works in zsh.
58
+ \alias "${1-}" >/dev/null 2>&1
59
+ }
60
+
61
+ nvm_command_info() {
62
+ local COMMAND
63
+ local INFO
64
+ COMMAND="${1}"
65
+ if type "${COMMAND}" | nvm_grep -q hashed; then
66
+ INFO="$(type "${COMMAND}" | command sed -E 's/\(|\)//g' | command awk '{print $4}')"
67
+ elif type "${COMMAND}" | nvm_grep -q aliased; then
68
+ # shellcheck disable=SC2230
69
+ INFO="$(which "${COMMAND}") ($(type "${COMMAND}" | command awk '{ $1=$2=$3=$4="" ;print }' | command sed -e 's/^\ *//g' -Ee "s/\`|'//g"))"
70
+ elif type "${COMMAND}" | nvm_grep -q "^${COMMAND} is an alias for"; then
71
+ # shellcheck disable=SC2230
72
+ INFO="$(which "${COMMAND}") ($(type "${COMMAND}" | command awk '{ $1=$2=$3=$4=$5="" ;print }' | command sed 's/^\ *//g'))"
73
+ elif type "${COMMAND}" | nvm_grep -q "^${COMMAND} is \\/"; then
74
+ INFO="$(type "${COMMAND}" | command awk '{print $3}')"
75
+ else
76
+ INFO="$(type "${COMMAND}")"
77
+ fi
78
+ nvm_echo "${INFO}"
79
+ }
80
+
81
+ nvm_has_colors() {
82
+ local NVM_NUM_COLORS
83
+ if nvm_has tput; then
84
+ NVM_NUM_COLORS="$(tput -T "${TERM:-vt100}" colors)"
85
+ fi
86
+ [ "${NVM_NUM_COLORS:--1}" -ge 8 ]
87
+ }
88
+
89
+ nvm_curl_libz_support() {
90
+ curl -V 2>/dev/null | nvm_grep "^Features:" | nvm_grep -q "libz"
91
+ }
92
+
93
+ nvm_curl_use_compression() {
94
+ nvm_curl_libz_support && nvm_version_greater_than_or_equal_to "$(nvm_curl_version)" 7.21.0
95
+ }
96
+
97
+ nvm_get_latest() {
98
+ local NVM_LATEST_URL
99
+ local CURL_COMPRESSED_FLAG
100
+ if nvm_has "curl"; then
101
+ if nvm_curl_use_compression; then
102
+ CURL_COMPRESSED_FLAG="--compressed"
103
+ fi
104
+ NVM_LATEST_URL="$(curl ${CURL_COMPRESSED_FLAG:-} -q -w "%{url_effective}\\n" -L -s -S http://latest.nvm.sh -o /dev/null)"
105
+ elif nvm_has "wget"; then
106
+ NVM_LATEST_URL="$(wget -q http://latest.nvm.sh --server-response -O /dev/null 2>&1 | command awk '/^ Location: /{DEST=$2} END{ print DEST }')"
107
+ else
108
+ nvm_err 'nvm needs curl or wget to proceed.'
109
+ return 1
110
+ fi
111
+ if [ -z "${NVM_LATEST_URL}" ]; then
112
+ nvm_err "http://latest.nvm.sh did not redirect to the latest release on GitHub"
113
+ return 2
114
+ fi
115
+ nvm_echo "${NVM_LATEST_URL##*/}"
116
+ }
117
+
118
+ nvm_download() {
119
+ local CURL_COMPRESSED_FLAG
120
+ if nvm_has "curl"; then
121
+ if nvm_curl_use_compression; then
122
+ CURL_COMPRESSED_FLAG="--compressed"
123
+ fi
124
+ curl --fail ${CURL_COMPRESSED_FLAG:-} -q "$@"
125
+ elif nvm_has "wget"; then
126
+ # Emulate curl with wget
127
+ ARGS=$(nvm_echo "$@" | command sed -e 's/--progress-bar /--progress=bar /' \
128
+ -e 's/--compressed //' \
129
+ -e 's/--fail //' \
130
+ -e 's/-L //' \
131
+ -e 's/-I /--server-response /' \
132
+ -e 's/-s /-q /' \
133
+ -e 's/-sS /-nv /' \
134
+ -e 's/-o /-O /' \
135
+ -e 's/-C - /-c /')
136
+ # shellcheck disable=SC2086
137
+ eval wget $ARGS
138
+ fi
139
+ }
140
+
141
+ nvm_has_system_node() {
142
+ [ "$(nvm deactivate >/dev/null 2>&1 && command -v node)" != '' ]
143
+ }
144
+
145
+ nvm_has_system_iojs() {
146
+ [ "$(nvm deactivate >/dev/null 2>&1 && command -v iojs)" != '' ]
147
+ }
148
+
149
+ nvm_is_version_installed() {
150
+ if [ -z "${1-}" ]; then
151
+ return 1
152
+ fi
153
+ local NVM_NODE_BINARY
154
+ NVM_NODE_BINARY='node'
155
+ if [ "_$(nvm_get_os)" = '_win' ]; then
156
+ NVM_NODE_BINARY='node.exe'
157
+ fi
158
+ if [ -x "$(nvm_version_path "$1" 2>/dev/null)/bin/${NVM_NODE_BINARY}" ]; then
159
+ return 0
160
+ fi
161
+ return 1
162
+ }
163
+
164
+ nvm_print_npm_version() {
165
+ if nvm_has "npm"; then
166
+ command printf " (npm v$(npm --version 2>/dev/null))"
167
+ fi
168
+ }
169
+
170
+ nvm_install_latest_npm() {
171
+ nvm_echo 'Attempting to upgrade to the latest working version of npm...'
172
+ local NODE_VERSION
173
+ NODE_VERSION="$(nvm_strip_iojs_prefix "$(nvm_ls_current)")"
174
+ if [ "${NODE_VERSION}" = 'system' ]; then
175
+ NODE_VERSION="$(node --version)"
176
+ elif [ "${NODE_VERSION}" = 'none' ]; then
177
+ nvm_echo "Detected node version ${NODE_VERSION}, npm version v${NPM_VERSION}"
178
+ NODE_VERSION=''
179
+ fi
180
+ if [ -z "${NODE_VERSION}" ]; then
181
+ nvm_err 'Unable to obtain node version.'
182
+ return 1
183
+ fi
184
+ local NPM_VERSION
185
+ NPM_VERSION="$(npm --version 2>/dev/null)"
186
+ if [ -z "${NPM_VERSION}" ]; then
187
+ nvm_err 'Unable to obtain npm version.'
188
+ return 2
189
+ fi
190
+
191
+ local NVM_NPM_CMD
192
+ NVM_NPM_CMD='npm'
193
+ if [ "${NVM_DEBUG-}" = 1 ]; then
194
+ nvm_echo "Detected node version ${NODE_VERSION}, npm version v${NPM_VERSION}"
195
+ NVM_NPM_CMD='nvm_echo npm'
196
+ fi
197
+
198
+ local NVM_IS_0_6
199
+ NVM_IS_0_6=0
200
+ if nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 0.6.0 && nvm_version_greater 0.7.0 "${NODE_VERSION}"; then
201
+ NVM_IS_0_6=1
202
+ fi
203
+ local NVM_IS_0_9
204
+ NVM_IS_0_9=0
205
+ if nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 0.9.0 && nvm_version_greater 0.10.0 "${NODE_VERSION}"; then
206
+ NVM_IS_0_9=1
207
+ fi
208
+
209
+ if [ $NVM_IS_0_6 -eq 1 ]; then
210
+ nvm_echo '* `node` v0.6.x can only upgrade to `npm` v1.3.x'
211
+ $NVM_NPM_CMD install -g npm@1.3
212
+ elif [ $NVM_IS_0_9 -eq 0 ]; then
213
+ # node 0.9 breaks here, for some reason
214
+ if nvm_version_greater_than_or_equal_to "${NPM_VERSION}" 1.0.0 && nvm_version_greater 2.0.0 "${NPM_VERSION}"; then
215
+ nvm_echo '* `npm` v1.x needs to first jump to `npm` v1.4.28 to be able to upgrade further'
216
+ $NVM_NPM_CMD install -g npm@1.4.28
217
+ elif nvm_version_greater_than_or_equal_to "${NPM_VERSION}" 2.0.0 && nvm_version_greater 3.0.0 "${NPM_VERSION}"; then
218
+ nvm_echo '* `npm` v2.x needs to first jump to the latest v2 to be able to upgrade further'
219
+ $NVM_NPM_CMD install -g npm@2
220
+ fi
221
+ fi
222
+
223
+ if [ $NVM_IS_0_9 -eq 1 ] || [ $NVM_IS_0_6 -eq 1 ]; then
224
+ nvm_echo '* node v0.6 and v0.9 are unable to upgrade further'
225
+ elif nvm_version_greater 1.1.0 "${NODE_VERSION}"; then
226
+ nvm_echo '* `npm` v4.5.x is the last version that works on `node` versions < v1.1.0'
227
+ $NVM_NPM_CMD install -g npm@4.5
228
+ elif nvm_version_greater 4.0.0 "${NODE_VERSION}"; then
229
+ nvm_echo '* `npm` v5 and higher do not work on `node` versions below v4.0.0'
230
+ $NVM_NPM_CMD install -g npm@4
231
+ elif [ $NVM_IS_0_9 -eq 0 ] && [ $NVM_IS_0_6 -eq 0 ]; then
232
+ local NVM_IS_4_4_OR_BELOW
233
+ NVM_IS_4_4_OR_BELOW=0
234
+ if nvm_version_greater 4.5.0 "${NODE_VERSION}"; then
235
+ NVM_IS_4_4_OR_BELOW=1
236
+ fi
237
+
238
+ local NVM_IS_5_OR_ABOVE
239
+ NVM_IS_5_OR_ABOVE=0
240
+ if [ $NVM_IS_4_4_OR_BELOW -eq 0 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 5.0.0; then
241
+ NVM_IS_5_OR_ABOVE=1
242
+ fi
243
+
244
+ local NVM_IS_6_OR_ABOVE
245
+ NVM_IS_6_OR_ABOVE=0
246
+ local NVM_IS_6_2_OR_ABOVE
247
+ NVM_IS_6_2_OR_ABOVE=0
248
+ if [ $NVM_IS_5_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 6.0.0; then
249
+ NVM_IS_6_OR_ABOVE=1
250
+ if nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 6.2.0; then
251
+ NVM_IS_6_2_OR_ABOVE=1
252
+ fi
253
+ fi
254
+
255
+ local NVM_IS_9_OR_ABOVE
256
+ NVM_IS_9_OR_ABOVE=0
257
+ local NVM_IS_9_3_OR_ABOVE
258
+ NVM_IS_9_3_OR_ABOVE=0
259
+ if [ $NVM_IS_6_2_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 9.0.0; then
260
+ NVM_IS_9_OR_ABOVE=1
261
+ if nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 9.3.0; then
262
+ NVM_IS_9_3_OR_ABOVE=1
263
+ fi
264
+ fi
265
+
266
+ local NVM_IS_10_OR_ABOVE
267
+ NVM_IS_10_OR_ABOVE=0
268
+ if [ $NVM_IS_9_3_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 10.0.0; then
269
+ NVM_IS_10_OR_ABOVE=1
270
+ fi
271
+ local NVM_IS_12_LTS_OR_ABOVE
272
+ NVM_IS_12_LTS_OR_ABOVE=0
273
+ if [ $NVM_IS_10_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 12.13.0; then
274
+ NVM_IS_12_LTS_OR_ABOVE=1
275
+ fi
276
+ local NVM_IS_13_OR_ABOVE
277
+ NVM_IS_13_OR_ABOVE=0
278
+ if [ $NVM_IS_12_LTS_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 13.0.0; then
279
+ NVM_IS_13_OR_ABOVE=1
280
+ fi
281
+ local NVM_IS_14_LTS_OR_ABOVE
282
+ NVM_IS_14_LTS_OR_ABOVE=0
283
+ if [ $NVM_IS_13_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 14.15.0; then
284
+ NVM_IS_14_LTS_OR_ABOVE=1
285
+ fi
286
+ local NVM_IS_15_OR_ABOVE
287
+ NVM_IS_15_OR_ABOVE=0
288
+ if [ $NVM_IS_14_LTS_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 15.0.0; then
289
+ NVM_IS_15_OR_ABOVE=1
290
+ fi
291
+ local NVM_IS_16_OR_ABOVE
292
+ NVM_IS_16_OR_ABOVE=0
293
+ if [ $NVM_IS_15_OR_ABOVE -eq 1 ] && nvm_version_greater_than_or_equal_to "${NODE_VERSION}" 16.0.0; then
294
+ NVM_IS_16_OR_ABOVE=1
295
+ fi
296
+
297
+ if [ $NVM_IS_4_4_OR_BELOW -eq 1 ] || {
298
+ [ $NVM_IS_5_OR_ABOVE -eq 1 ] && nvm_version_greater 5.10.0 "${NODE_VERSION}"; \
299
+ }; then
300
+ 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`'
301
+ $NVM_NPM_CMD install -g npm@5.3
302
+ elif [ $NVM_IS_4_4_OR_BELOW -eq 0 ] && nvm_version_greater 4.7.0 "${NODE_VERSION}"; then
303
+ nvm_echo '* `npm` `v5.4.1` is the last version that works on `node` `v4.5` and `v4.6`'
304
+ $NVM_NPM_CMD install -g npm@5.4.1
305
+ elif [ $NVM_IS_6_OR_ABOVE -eq 0 ]; then
306
+ nvm_echo '* `npm` `v5.x` is the last version that works on `node` below `v6.0.0`'
307
+ $NVM_NPM_CMD install -g npm@5
308
+ elif \
309
+ { [ $NVM_IS_6_OR_ABOVE -eq 1 ] && [ $NVM_IS_6_2_OR_ABOVE -eq 0 ]; } \
310
+ || { [ $NVM_IS_9_OR_ABOVE -eq 1 ] && [ $NVM_IS_9_3_OR_ABOVE -eq 0 ]; } \
311
+ ; then
312
+ 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`'
313
+ $NVM_NPM_CMD install -g npm@6.9
314
+ elif [ $NVM_IS_10_OR_ABOVE -eq 0 ]; then
315
+ nvm_echo '* `npm` `v6.x` is the last version that works on `node` below `v10.0.0`'
316
+ $NVM_NPM_CMD install -g npm@6
317
+ elif \
318
+ [ $NVM_IS_12_LTS_OR_ABOVE -eq 0 ] \
319
+ || { [ $NVM_IS_13_OR_ABOVE -eq 1 ] && [ $NVM_IS_14_LTS_OR_ABOVE -eq 0 ]; } \
320
+ || { [ $NVM_IS_15_OR_ABOVE -eq 1 ] && [ $NVM_IS_16_OR_ABOVE -eq 0 ]; } \
321
+ ; then
322
+ nvm_echo '* `npm` `v7.x` is the last version that works on `node` `v13`, `v15`, below `v12.13`, or `v14.0` - `v14.15`'
323
+ $NVM_NPM_CMD install -g npm@7
324
+ else
325
+ nvm_echo '* Installing latest `npm`; if this does not work on your node version, please report a bug!'
326
+ $NVM_NPM_CMD install -g npm
327
+ fi
328
+ fi
329
+ nvm_echo "* npm upgraded to: v$(npm --version 2>/dev/null)"
330
+ }
331
+
332
+ # Make zsh glob matching behave same as bash
333
+ # This fixes the "zsh: no matches found" errors
334
+ if [ -z "${NVM_CD_FLAGS-}" ]; then
335
+ export NVM_CD_FLAGS=''
336
+ fi
337
+ if nvm_is_zsh; then
338
+ NVM_CD_FLAGS="-q"
339
+ fi
340
+
341
+ # Auto detect the NVM_DIR when not set
342
+ if [ -z "${NVM_DIR-}" ]; then
343
+ # shellcheck disable=SC2128
344
+ if [ -n "${BASH_SOURCE-}" ]; then
345
+ # shellcheck disable=SC2169,SC3054
346
+ NVM_SCRIPT_SOURCE="${BASH_SOURCE[0]}"
347
+ fi
348
+ NVM_DIR="$(nvm_cd ${NVM_CD_FLAGS} "$(dirname "${NVM_SCRIPT_SOURCE:-$0}")" >/dev/null && \pwd)"
349
+ export NVM_DIR
350
+ else
351
+ # https://unix.stackexchange.com/a/198289
352
+ case $NVM_DIR in
353
+ *[!/]*/)
354
+ NVM_DIR="${NVM_DIR%"${NVM_DIR##*[!/]}"}"
355
+ export NVM_DIR
356
+ nvm_err "Warning: \$NVM_DIR should not have trailing slashes"
357
+ ;;
358
+ esac
359
+ fi
360
+ unset NVM_SCRIPT_SOURCE 2>/dev/null
361
+
362
+ nvm_tree_contains_path() {
363
+ local tree
364
+ tree="${1-}"
365
+ local node_path
366
+ node_path="${2-}"
367
+
368
+ if [ "@${tree}@" = "@@" ] || [ "@${node_path}@" = "@@" ]; then
369
+ nvm_err "both the tree and the node path are required"
370
+ return 2
371
+ fi
372
+
373
+ local previous_pathdir
374
+ previous_pathdir="${node_path}"
375
+ local pathdir
376
+ pathdir=$(dirname "${previous_pathdir}")
377
+ while [ "${pathdir}" != '' ] && [ "${pathdir}" != '.' ] && [ "${pathdir}" != '/' ] &&
378
+ [ "${pathdir}" != "${tree}" ] && [ "${pathdir}" != "${previous_pathdir}" ]; do
379
+ previous_pathdir="${pathdir}"
380
+ pathdir=$(dirname "${previous_pathdir}")
381
+ done
382
+ [ "${pathdir}" = "${tree}" ]
383
+ }
384
+
385
+ nvm_find_project_dir() {
386
+ local path_
387
+ path_="${PWD}"
388
+ while [ "${path_}" != "" ] && [ ! -f "${path_}/package.json" ] && [ ! -d "${path_}/node_modules" ]; do
389
+ path_=${path_%/*}
390
+ done
391
+ nvm_echo "${path_}"
392
+ }
393
+
394
+ # Traverse up in directory tree to find containing folder
395
+ nvm_find_up() {
396
+ local path_
397
+ path_="${PWD}"
398
+ while [ "${path_}" != "" ] && [ ! -f "${path_}/${1-}" ]; do
399
+ path_=${path_%/*}
400
+ done
401
+ nvm_echo "${path_}"
402
+ }
403
+
404
+ nvm_find_nvmrc() {
405
+ local dir
406
+ dir="$(nvm_find_up '.nvmrc')"
407
+ if [ -e "${dir}/.nvmrc" ]; then
408
+ nvm_echo "${dir}/.nvmrc"
409
+ fi
410
+ }
411
+
412
+ # Obtain nvm version from rc file
413
+ nvm_rc_version() {
414
+ export NVM_RC_VERSION=''
415
+ local NVMRC_PATH
416
+ NVMRC_PATH="$(nvm_find_nvmrc)"
417
+ if [ ! -e "${NVMRC_PATH}" ]; then
418
+ if [ "${NVM_SILENT:-0}" -ne 1 ]; then
419
+ nvm_err "No .nvmrc file found"
420
+ fi
421
+ return 1
422
+ fi
423
+ NVM_RC_VERSION="$(command head -n 1 "${NVMRC_PATH}" | command tr -d '\r')" || command printf ''
424
+ if [ -z "${NVM_RC_VERSION}" ]; then
425
+ if [ "${NVM_SILENT:-0}" -ne 1 ]; then
426
+ nvm_err "Warning: empty .nvmrc file found at \"${NVMRC_PATH}\""
427
+ fi
428
+ return 2
429
+ fi
430
+ if [ "${NVM_SILENT:-0}" -ne 1 ]; then
431
+ nvm_echo "Found '${NVMRC_PATH}' with version <${NVM_RC_VERSION}>"
432
+ fi
433
+ }
434
+
435
+ nvm_clang_version() {
436
+ clang --version | command awk '{ if ($2 == "version") print $3; else if ($3 == "version") print $4 }' | command sed 's/-.*$//g'
437
+ }
438
+
439
+ nvm_curl_version() {
440
+ curl -V | command awk '{ if ($1 == "curl") print $2 }' | command sed 's/-.*$//g'
441
+ }
442
+
443
+ nvm_version_greater() {
444
+ command awk 'BEGIN {
445
+ if (ARGV[1] == "" || ARGV[2] == "") exit(1)
446
+ split(ARGV[1], a, /\./);
447
+ split(ARGV[2], b, /\./);
448
+ for (i=1; i<=3; i++) {
449
+ if (a[i] && a[i] !~ /^[0-9]+$/) exit(2);
450
+ if (b[i] && b[i] !~ /^[0-9]+$/) { exit(0); }
451
+ if (a[i] < b[i]) exit(3);
452
+ else if (a[i] > b[i]) exit(0);
453
+ }
454
+ exit(4)
455
+ }' "${1#v}" "${2#v}"
456
+ }
457
+
458
+ nvm_version_greater_than_or_equal_to() {
459
+ command awk 'BEGIN {
460
+ if (ARGV[1] == "" || ARGV[2] == "") exit(1)
461
+ split(ARGV[1], a, /\./);
462
+ split(ARGV[2], b, /\./);
463
+ for (i=1; i<=3; i++) {
464
+ if (a[i] && a[i] !~ /^[0-9]+$/) exit(2);
465
+ if (a[i] < b[i]) exit(3);
466
+ else if (a[i] > b[i]) exit(0);
467
+ }
468
+ exit(0)
469
+ }' "${1#v}" "${2#v}"
470
+ }
471
+
472
+ nvm_version_dir() {
473
+ local NVM_WHICH_DIR
474
+ NVM_WHICH_DIR="${1-}"
475
+ if [ -z "${NVM_WHICH_DIR}" ] || [ "${NVM_WHICH_DIR}" = "new" ]; then
476
+ nvm_echo "${NVM_DIR}/versions/node"
477
+ elif [ "_${NVM_WHICH_DIR}" = "_iojs" ]; then
478
+ nvm_echo "${NVM_DIR}/versions/io.js"
479
+ elif [ "_${NVM_WHICH_DIR}" = "_old" ]; then
480
+ nvm_echo "${NVM_DIR}"
481
+ else
482
+ nvm_err 'unknown version dir'
483
+ return 3
484
+ fi
485
+ }
486
+
487
+ nvm_alias_path() {
488
+ nvm_echo "$(nvm_version_dir old)/alias"
489
+ }
490
+
491
+ nvm_version_path() {
492
+ local VERSION
493
+ VERSION="${1-}"
494
+ if [ -z "${VERSION}" ]; then
495
+ nvm_err 'version is required'
496
+ return 3
497
+ elif nvm_is_iojs_version "${VERSION}"; then
498
+ nvm_echo "$(nvm_version_dir iojs)/$(nvm_strip_iojs_prefix "${VERSION}")"
499
+ elif nvm_version_greater 0.12.0 "${VERSION}"; then
500
+ nvm_echo "$(nvm_version_dir old)/${VERSION}"
501
+ else
502
+ nvm_echo "$(nvm_version_dir new)/${VERSION}"
503
+ fi
504
+ }
505
+
506
+ nvm_ensure_version_installed() {
507
+ local PROVIDED_VERSION
508
+ PROVIDED_VERSION="${1-}"
509
+ if [ "${PROVIDED_VERSION}" = 'system' ]; then
510
+ if nvm_has_system_iojs || nvm_has_system_node; then
511
+ return 0
512
+ fi
513
+ nvm_err "N/A: no system version of node/io.js is installed."
514
+ return 1
515
+ fi
516
+ local LOCAL_VERSION
517
+ local EXIT_CODE
518
+ LOCAL_VERSION="$(nvm_version "${PROVIDED_VERSION}")"
519
+ EXIT_CODE="$?"
520
+ local NVM_VERSION_DIR
521
+ if [ "${EXIT_CODE}" != "0" ] || ! nvm_is_version_installed "${LOCAL_VERSION}"; then
522
+ if VERSION="$(nvm_resolve_alias "${PROVIDED_VERSION}")"; then
523
+ nvm_err "N/A: version \"${PROVIDED_VERSION} -> ${VERSION}\" is not yet installed."
524
+ else
525
+ local PREFIXED_VERSION
526
+ PREFIXED_VERSION="$(nvm_ensure_version_prefix "${PROVIDED_VERSION}")"
527
+ nvm_err "N/A: version \"${PREFIXED_VERSION:-$PROVIDED_VERSION}\" is not yet installed."
528
+ fi
529
+ nvm_err ""
530
+ nvm_err "You need to run \"nvm install ${PROVIDED_VERSION}\" to install it before using it."
531
+ return 1
532
+ fi
533
+ }
534
+
535
+ # Expand a version using the version cache
536
+ nvm_version() {
537
+ local PATTERN
538
+ PATTERN="${1-}"
539
+ local VERSION
540
+ # The default version is the current one
541
+ if [ -z "${PATTERN}" ]; then
542
+ PATTERN='current'
543
+ fi
544
+
545
+ if [ "${PATTERN}" = "current" ]; then
546
+ nvm_ls_current
547
+ return $?
548
+ fi
549
+
550
+ local NVM_NODE_PREFIX
551
+ NVM_NODE_PREFIX="$(nvm_node_prefix)"
552
+ case "_${PATTERN}" in
553
+ "_${NVM_NODE_PREFIX}" | "_${NVM_NODE_PREFIX}-")
554
+ PATTERN="stable"
555
+ ;;
556
+ esac
557
+ VERSION="$(nvm_ls "${PATTERN}" | command tail -1)"
558
+ if [ -z "${VERSION}" ] || [ "_${VERSION}" = "_N/A" ]; then
559
+ nvm_echo "N/A"
560
+ return 3
561
+ fi
562
+ nvm_echo "${VERSION}"
563
+ }
564
+
565
+ nvm_remote_version() {
566
+ local PATTERN
567
+ PATTERN="${1-}"
568
+ local VERSION
569
+ if nvm_validate_implicit_alias "${PATTERN}" 2>/dev/null; then
570
+ case "${PATTERN}" in
571
+ "$(nvm_iojs_prefix)")
572
+ VERSION="$(NVM_LTS="${NVM_LTS-}" nvm_ls_remote_iojs | command tail -1)" &&:
573
+ ;;
574
+ *)
575
+ VERSION="$(NVM_LTS="${NVM_LTS-}" nvm_ls_remote "${PATTERN}")" &&:
576
+ ;;
577
+ esac
578
+ else
579
+ VERSION="$(NVM_LTS="${NVM_LTS-}" nvm_remote_versions "${PATTERN}" | command tail -1)"
580
+ fi
581
+ if [ -n "${NVM_VERSION_ONLY-}" ]; then
582
+ command awk 'BEGIN {
583
+ n = split(ARGV[1], a);
584
+ print a[1]
585
+ }' "${VERSION}"
586
+ else
587
+ nvm_echo "${VERSION}"
588
+ fi
589
+ if [ "${VERSION}" = 'N/A' ]; then
590
+ return 3
591
+ fi
592
+ }
593
+
594
+ nvm_remote_versions() {
595
+ local NVM_IOJS_PREFIX
596
+ NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
597
+ local NVM_NODE_PREFIX
598
+ NVM_NODE_PREFIX="$(nvm_node_prefix)"
599
+
600
+ local PATTERN
601
+ PATTERN="${1-}"
602
+
603
+ local NVM_FLAVOR
604
+ if [ -n "${NVM_LTS-}" ]; then
605
+ NVM_FLAVOR="${NVM_NODE_PREFIX}"
606
+ fi
607
+
608
+ case "${PATTERN}" in
609
+ "${NVM_IOJS_PREFIX}" | "io.js")
610
+ NVM_FLAVOR="${NVM_IOJS_PREFIX}"
611
+ unset PATTERN
612
+ ;;
613
+ "${NVM_NODE_PREFIX}")
614
+ NVM_FLAVOR="${NVM_NODE_PREFIX}"
615
+ unset PATTERN
616
+ ;;
617
+ esac
618
+
619
+ if nvm_validate_implicit_alias "${PATTERN-}" 2>/dev/null; then
620
+ nvm_err 'Implicit aliases are not supported in nvm_remote_versions.'
621
+ return 1
622
+ fi
623
+
624
+ local NVM_LS_REMOTE_EXIT_CODE
625
+ NVM_LS_REMOTE_EXIT_CODE=0
626
+ local NVM_LS_REMOTE_PRE_MERGED_OUTPUT
627
+ NVM_LS_REMOTE_PRE_MERGED_OUTPUT=''
628
+ local NVM_LS_REMOTE_POST_MERGED_OUTPUT
629
+ NVM_LS_REMOTE_POST_MERGED_OUTPUT=''
630
+ if [ -z "${NVM_FLAVOR-}" ] || [ "${NVM_FLAVOR-}" = "${NVM_NODE_PREFIX}" ]; then
631
+ local NVM_LS_REMOTE_OUTPUT
632
+ # extra space is needed here to avoid weird behavior when `nvm_ls_remote` ends in a `*`
633
+ NVM_LS_REMOTE_OUTPUT="$(NVM_LTS="${NVM_LTS-}" nvm_ls_remote "${PATTERN-}") " &&:
634
+ NVM_LS_REMOTE_EXIT_CODE=$?
635
+ # split output into two
636
+ NVM_LS_REMOTE_PRE_MERGED_OUTPUT="${NVM_LS_REMOTE_OUTPUT%%v4\.0\.0*}"
637
+ NVM_LS_REMOTE_POST_MERGED_OUTPUT="${NVM_LS_REMOTE_OUTPUT#"$NVM_LS_REMOTE_PRE_MERGED_OUTPUT"}"
638
+ fi
639
+
640
+ local NVM_LS_REMOTE_IOJS_EXIT_CODE
641
+ NVM_LS_REMOTE_IOJS_EXIT_CODE=0
642
+ local NVM_LS_REMOTE_IOJS_OUTPUT
643
+ NVM_LS_REMOTE_IOJS_OUTPUT=''
644
+ if [ -z "${NVM_LTS-}" ] && {
645
+ [ -z "${NVM_FLAVOR-}" ] || [ "${NVM_FLAVOR-}" = "${NVM_IOJS_PREFIX}" ];
646
+ }; then
647
+ NVM_LS_REMOTE_IOJS_OUTPUT=$(nvm_ls_remote_iojs "${PATTERN-}") &&:
648
+ NVM_LS_REMOTE_IOJS_EXIT_CODE=$?
649
+ fi
650
+
651
+ # the `sed` removes both blank lines, and only-whitespace lines (see "weird behavior" ~19 lines up)
652
+ VERSIONS="$(nvm_echo "${NVM_LS_REMOTE_PRE_MERGED_OUTPUT}
653
+ ${NVM_LS_REMOTE_IOJS_OUTPUT}
654
+ ${NVM_LS_REMOTE_POST_MERGED_OUTPUT}" | nvm_grep -v "N/A" | command sed '/^ *$/d')"
655
+
656
+ if [ -z "${VERSIONS}" ]; then
657
+ nvm_echo 'N/A'
658
+ return 3
659
+ fi
660
+ # the `sed` is to remove trailing whitespaces (see "weird behavior" ~25 lines up)
661
+ nvm_echo "${VERSIONS}" | command sed 's/ *$//g'
662
+ return $NVM_LS_REMOTE_EXIT_CODE || $NVM_LS_REMOTE_IOJS_EXIT_CODE
663
+ }
664
+
665
+ nvm_is_valid_version() {
666
+ if nvm_validate_implicit_alias "${1-}" 2>/dev/null; then
667
+ return 0
668
+ fi
669
+ case "${1-}" in
670
+ "$(nvm_iojs_prefix)" | \
671
+ "$(nvm_node_prefix)")
672
+ return 0
673
+ ;;
674
+ *)
675
+ local VERSION
676
+ VERSION="$(nvm_strip_iojs_prefix "${1-}")"
677
+ nvm_version_greater_than_or_equal_to "${VERSION}" 0
678
+ ;;
679
+ esac
680
+ }
681
+
682
+ nvm_normalize_version() {
683
+ command awk 'BEGIN {
684
+ split(ARGV[1], a, /\./);
685
+ printf "%d%06d%06d\n", a[1], a[2], a[3];
686
+ exit;
687
+ }' "${1#v}"
688
+ }
689
+
690
+ nvm_normalize_lts() {
691
+ local LTS
692
+ LTS="${1-}"
693
+
694
+ if [ "$(expr "${LTS}" : '^lts/-[1-9][0-9]*$')" -gt 0 ]; then
695
+ local N
696
+ N="$(echo "${LTS}" | cut -d '-' -f 2)"
697
+ N=$((N+1))
698
+ local NVM_ALIAS_DIR
699
+ NVM_ALIAS_DIR="$(nvm_alias_path)"
700
+ local RESULT
701
+ RESULT="$(command ls "${NVM_ALIAS_DIR}/lts" | command tail -n "${N}" | command head -n 1)"
702
+ if [ "${RESULT}" != '*' ]; then
703
+ nvm_echo "lts/${RESULT}"
704
+ else
705
+ nvm_err 'That many LTS releases do not exist yet.'
706
+ return 2
707
+ fi
708
+ else
709
+ nvm_echo "${LTS}"
710
+ fi
711
+ }
712
+
713
+ nvm_ensure_version_prefix() {
714
+ local NVM_VERSION
715
+ NVM_VERSION="$(nvm_strip_iojs_prefix "${1-}" | command sed -e 's/^\([0-9]\)/v\1/g')"
716
+ if nvm_is_iojs_version "${1-}"; then
717
+ nvm_add_iojs_prefix "${NVM_VERSION}"
718
+ else
719
+ nvm_echo "${NVM_VERSION}"
720
+ fi
721
+ }
722
+
723
+ nvm_format_version() {
724
+ local VERSION
725
+ VERSION="$(nvm_ensure_version_prefix "${1-}")"
726
+ local NUM_GROUPS
727
+ NUM_GROUPS="$(nvm_num_version_groups "${VERSION}")"
728
+ if [ "${NUM_GROUPS}" -lt 3 ]; then
729
+ nvm_format_version "${VERSION%.}.0"
730
+ else
731
+ nvm_echo "${VERSION}" | command cut -f1-3 -d.
732
+ fi
733
+ }
734
+
735
+ nvm_num_version_groups() {
736
+ local VERSION
737
+ VERSION="${1-}"
738
+ VERSION="${VERSION#v}"
739
+ VERSION="${VERSION%.}"
740
+ if [ -z "${VERSION}" ]; then
741
+ nvm_echo "0"
742
+ return
743
+ fi
744
+ local NVM_NUM_DOTS
745
+ NVM_NUM_DOTS=$(nvm_echo "${VERSION}" | command sed -e 's/[^\.]//g')
746
+ local NVM_NUM_GROUPS
747
+ NVM_NUM_GROUPS=".${NVM_NUM_DOTS}" # add extra dot, since it's (n - 1) dots at this point
748
+ nvm_echo "${#NVM_NUM_GROUPS}"
749
+ }
750
+
751
+ nvm_strip_path() {
752
+ if [ -z "${NVM_DIR-}" ]; then
753
+ nvm_err '${NVM_DIR} not set!'
754
+ return 1
755
+ fi
756
+ command printf %s "${1-}" | command awk -v NVM_DIR="${NVM_DIR}" -v RS=: '
757
+ index($0, NVM_DIR) == 1 {
758
+ path = substr($0, length(NVM_DIR) + 1)
759
+ if (path ~ "^(/versions/[^/]*)?/[^/]*'"${2-}"'.*$") { next }
760
+ }
761
+ { print }' | command paste -s -d: -
762
+ }
763
+
764
+ nvm_change_path() {
765
+ # if there’s no initial path, just return the supplementary path
766
+ if [ -z "${1-}" ]; then
767
+ nvm_echo "${3-}${2-}"
768
+ # if the initial path doesn’t contain an nvm path, prepend the supplementary
769
+ # path
770
+ elif ! nvm_echo "${1-}" | nvm_grep -q "${NVM_DIR}/[^/]*${2-}" \
771
+ && ! nvm_echo "${1-}" | nvm_grep -q "${NVM_DIR}/versions/[^/]*/[^/]*${2-}"; then
772
+ nvm_echo "${3-}${2-}:${1-}"
773
+ # if the initial path contains BOTH an nvm path (checked for above) and
774
+ # that nvm path is preceded by a system binary path, just prepend the
775
+ # supplementary path instead of replacing it.
776
+ # https://github.com/nvm-sh/nvm/issues/1652#issuecomment-342571223
777
+ elif nvm_echo "${1-}" | nvm_grep -Eq "(^|:)(/usr(/local)?)?${2-}:.*${NVM_DIR}/[^/]*${2-}" \
778
+ || nvm_echo "${1-}" | nvm_grep -Eq "(^|:)(/usr(/local)?)?${2-}:.*${NVM_DIR}/versions/[^/]*/[^/]*${2-}"; then
779
+ nvm_echo "${3-}${2-}:${1-}"
780
+ # use sed to replace the existing nvm path with the supplementary path. This
781
+ # preserves the order of the path.
782
+ else
783
+ nvm_echo "${1-}" | command sed \
784
+ -e "s#${NVM_DIR}/[^/]*${2-}[^:]*#${3-}${2-}#" \
785
+ -e "s#${NVM_DIR}/versions/[^/]*/[^/]*${2-}[^:]*#${3-}${2-}#"
786
+ fi
787
+ }
788
+
789
+ nvm_binary_available() {
790
+ # binaries started with node 0.8.6
791
+ nvm_version_greater_than_or_equal_to "$(nvm_strip_iojs_prefix "${1-}")" v0.8.6
792
+ }
793
+
794
+ nvm_set_colors() {
795
+ if [ "${#1}" -eq 5 ] && nvm_echo "$1" | nvm_grep -E "^[rRgGbBcCyYmMkKeW]{1,}$" 1>/dev/null; then
796
+ local INSTALLED_COLOR
797
+ local LTS_AND_SYSTEM_COLOR
798
+ local CURRENT_COLOR
799
+ local NOT_INSTALLED_COLOR
800
+ local DEFAULT_COLOR
801
+
802
+ INSTALLED_COLOR="$(echo "$1" | awk '{ print substr($0, 1, 1); }')"
803
+ LTS_AND_SYSTEM_COLOR="$(echo "$1" | awk '{ print substr($0, 2, 1); }')"
804
+ CURRENT_COLOR="$(echo "$1" | awk '{ print substr($0, 3, 1); }')"
805
+ NOT_INSTALLED_COLOR="$(echo "$1" | awk '{ print substr($0, 4, 1); }')"
806
+ DEFAULT_COLOR="$(echo "$1" | awk '{ print substr($0, 5, 1); }')"
807
+ if ! nvm_has_colors; then
808
+ nvm_echo "Setting colors to: ${INSTALLED_COLOR} ${LTS_AND_SYSTEM_COLOR} ${CURRENT_COLOR} ${NOT_INSTALLED_COLOR} ${DEFAULT_COLOR}"
809
+ nvm_echo "WARNING: Colors may not display because they are not supported in this shell."
810
+ else
811
+ nvm_echo_with_colors "Setting colors to: \033[$(nvm_print_color_code "${INSTALLED_COLOR}") ${INSTALLED_COLOR}\033[$(nvm_print_color_code "${LTS_AND_SYSTEM_COLOR}") ${LTS_AND_SYSTEM_COLOR}\033[$(nvm_print_color_code "${CURRENT_COLOR}") ${CURRENT_COLOR}\033[$(nvm_print_color_code "${NOT_INSTALLED_COLOR}") ${NOT_INSTALLED_COLOR}\033[$(nvm_print_color_code "${DEFAULT_COLOR}") ${DEFAULT_COLOR}\033[0m"
812
+ fi
813
+ export NVM_COLORS="$1"
814
+ else
815
+ return 17
816
+ fi
817
+ }
818
+
819
+ nvm_get_colors() {
820
+ local COLOR
821
+ local SYS_COLOR
822
+ if [ -n "${NVM_COLORS-}" ]; then
823
+ case $1 in
824
+ 1) COLOR=$(nvm_print_color_code "$(echo "$NVM_COLORS" | awk '{ print substr($0, 1, 1); }')");;
825
+ 2) COLOR=$(nvm_print_color_code "$(echo "$NVM_COLORS" | awk '{ print substr($0, 2, 1); }')");;
826
+ 3) COLOR=$(nvm_print_color_code "$(echo "$NVM_COLORS" | awk '{ print substr($0, 3, 1); }')");;
827
+ 4) COLOR=$(nvm_print_color_code "$(echo "$NVM_COLORS" | awk '{ print substr($0, 4, 1); }')");;
828
+ 5) COLOR=$(nvm_print_color_code "$(echo "$NVM_COLORS" | awk '{ print substr($0, 5, 1); }')");;
829
+ 6)
830
+ SYS_COLOR=$(nvm_print_color_code "$(echo "$NVM_COLORS" | awk '{ print substr($0, 2, 1); }')")
831
+ COLOR=$(nvm_echo "$SYS_COLOR" | command tr '0;' '1;')
832
+ ;;
833
+ *)
834
+ nvm_err "Invalid color index, ${1-}"
835
+ return 1
836
+ ;;
837
+ esac
838
+ else
839
+ case $1 in
840
+ 1) COLOR='0;34m';;
841
+ 2) COLOR='0;33m';;
842
+ 3) COLOR='0;32m';;
843
+ 4) COLOR='0;31m';;
844
+ 5) COLOR='0;37m';;
845
+ 6) COLOR='1;33m';;
846
+ *)
847
+ nvm_err "Invalid color index, ${1-}"
848
+ return 1
849
+ ;;
850
+ esac
851
+ fi
852
+
853
+ echo "$COLOR"
854
+ }
855
+
856
+ nvm_print_color_code() {
857
+ case "${1-}" in
858
+ 'r') nvm_echo '0;31m';;
859
+ 'R') nvm_echo '1;31m';;
860
+ 'g') nvm_echo '0;32m';;
861
+ 'G') nvm_echo '1;32m';;
862
+ 'b') nvm_echo '0;34m';;
863
+ 'B') nvm_echo '1;34m';;
864
+ 'c') nvm_echo '0;36m';;
865
+ 'C') nvm_echo '1;36m';;
866
+ 'm') nvm_echo '0;35m';;
867
+ 'M') nvm_echo '1;35m';;
868
+ 'y') nvm_echo '0;33m';;
869
+ 'Y') nvm_echo '1;33m';;
870
+ 'k') nvm_echo '0;30m';;
871
+ 'K') nvm_echo '1;30m';;
872
+ 'e') nvm_echo '0;37m';;
873
+ 'W') nvm_echo '1;37m';;
874
+ *) nvm_err 'Invalid color code';
875
+ return 1
876
+ ;;
877
+ esac
878
+ }
879
+
880
+ nvm_print_formatted_alias() {
881
+ local ALIAS
882
+ ALIAS="${1-}"
883
+ local DEST
884
+ DEST="${2-}"
885
+ local VERSION
886
+ VERSION="${3-}"
887
+ if [ -z "${VERSION}" ]; then
888
+ VERSION="$(nvm_version "${DEST}")" ||:
889
+ fi
890
+ local VERSION_FORMAT
891
+ local ALIAS_FORMAT
892
+ local DEST_FORMAT
893
+
894
+ local INSTALLED_COLOR
895
+ local SYSTEM_COLOR
896
+ local CURRENT_COLOR
897
+ local NOT_INSTALLED_COLOR
898
+ local DEFAULT_COLOR
899
+ local LTS_COLOR
900
+
901
+ INSTALLED_COLOR=$(nvm_get_colors 1)
902
+ SYSTEM_COLOR=$(nvm_get_colors 2)
903
+ CURRENT_COLOR=$(nvm_get_colors 3)
904
+ NOT_INSTALLED_COLOR=$(nvm_get_colors 4)
905
+ DEFAULT_COLOR=$(nvm_get_colors 5)
906
+ LTS_COLOR=$(nvm_get_colors 6)
907
+
908
+ ALIAS_FORMAT='%s'
909
+ DEST_FORMAT='%s'
910
+ VERSION_FORMAT='%s'
911
+ local NEWLINE
912
+ NEWLINE='\n'
913
+ if [ "_${DEFAULT}" = '_true' ]; then
914
+ NEWLINE=' (default)\n'
915
+ fi
916
+ local ARROW
917
+ ARROW='->'
918
+ if [ -z "${NVM_NO_COLORS}" ] && nvm_has_colors; then
919
+ ARROW='\033[0;90m->\033[0m'
920
+ if [ "_${DEFAULT}" = '_true' ]; then
921
+ NEWLINE=" \033[${DEFAULT_COLOR}(default)\033[0m\n"
922
+ fi
923
+ if [ "_${VERSION}" = "_${NVM_CURRENT-}" ]; then
924
+ ALIAS_FORMAT="\033[${CURRENT_COLOR}%s\033[0m"
925
+ DEST_FORMAT="\033[${CURRENT_COLOR}%s\033[0m"
926
+ VERSION_FORMAT="\033[${CURRENT_COLOR}%s\033[0m"
927
+ elif nvm_is_version_installed "${VERSION}"; then
928
+ ALIAS_FORMAT="\033[${INSTALLED_COLOR}%s\033[0m"
929
+ DEST_FORMAT="\033[${INSTALLED_COLOR}%s\033[0m"
930
+ VERSION_FORMAT="\033[${INSTALLED_COLOR}%s\033[0m"
931
+ elif [ "${VERSION}" = '∞' ] || [ "${VERSION}" = 'N/A' ]; then
932
+ ALIAS_FORMAT="\033[${NOT_INSTALLED_COLOR}%s\033[0m"
933
+ DEST_FORMAT="\033[${NOT_INSTALLED_COLOR}%s\033[0m"
934
+ VERSION_FORMAT="\033[${NOT_INSTALLED_COLOR}%s\033[0m"
935
+ fi
936
+ if [ "_${NVM_LTS-}" = '_true' ]; then
937
+ ALIAS_FORMAT="\033[${LTS_COLOR}%s\033[0m"
938
+ fi
939
+ if [ "_${DEST%/*}" = "_lts" ]; then
940
+ DEST_FORMAT="\033[${LTS_COLOR}%s\033[0m"
941
+ fi
942
+ elif [ "_${VERSION}" != '_∞' ] && [ "_${VERSION}" != '_N/A' ]; then
943
+ VERSION_FORMAT='%s *'
944
+ fi
945
+ if [ "${DEST}" = "${VERSION}" ]; then
946
+ command printf -- "${ALIAS_FORMAT} ${ARROW} ${VERSION_FORMAT}${NEWLINE}" "${ALIAS}" "${DEST}"
947
+ else
948
+ command printf -- "${ALIAS_FORMAT} ${ARROW} ${DEST_FORMAT} (${ARROW} ${VERSION_FORMAT})${NEWLINE}" "${ALIAS}" "${DEST}" "${VERSION}"
949
+ fi
950
+ }
951
+
952
+ nvm_print_alias_path() {
953
+ local NVM_ALIAS_DIR
954
+ NVM_ALIAS_DIR="${1-}"
955
+ if [ -z "${NVM_ALIAS_DIR}" ]; then
956
+ nvm_err 'An alias dir is required.'
957
+ return 1
958
+ fi
959
+ local ALIAS_PATH
960
+ ALIAS_PATH="${2-}"
961
+ if [ -z "${ALIAS_PATH}" ]; then
962
+ nvm_err 'An alias path is required.'
963
+ return 2
964
+ fi
965
+ local ALIAS
966
+ ALIAS="${ALIAS_PATH##"${NVM_ALIAS_DIR}"\/}"
967
+ local DEST
968
+ DEST="$(nvm_alias "${ALIAS}" 2>/dev/null)" ||:
969
+ if [ -n "${DEST}" ]; then
970
+ NVM_NO_COLORS="${NVM_NO_COLORS-}" NVM_LTS="${NVM_LTS-}" DEFAULT=false nvm_print_formatted_alias "${ALIAS}" "${DEST}"
971
+ fi
972
+ }
973
+
974
+ nvm_print_default_alias() {
975
+ local ALIAS
976
+ ALIAS="${1-}"
977
+ if [ -z "${ALIAS}" ]; then
978
+ nvm_err 'A default alias is required.'
979
+ return 1
980
+ fi
981
+ local DEST
982
+ DEST="$(nvm_print_implicit_alias local "${ALIAS}")"
983
+ if [ -n "${DEST}" ]; then
984
+ NVM_NO_COLORS="${NVM_NO_COLORS-}" DEFAULT=true nvm_print_formatted_alias "${ALIAS}" "${DEST}"
985
+ fi
986
+ }
987
+
988
+ nvm_make_alias() {
989
+ local ALIAS
990
+ ALIAS="${1-}"
991
+ if [ -z "${ALIAS}" ]; then
992
+ nvm_err "an alias name is required"
993
+ return 1
994
+ fi
995
+ local VERSION
996
+ VERSION="${2-}"
997
+ if [ -z "${VERSION}" ]; then
998
+ nvm_err "an alias target version is required"
999
+ return 2
1000
+ fi
1001
+ nvm_echo "${VERSION}" | tee "$(nvm_alias_path)/${ALIAS}" >/dev/null
1002
+ }
1003
+
1004
+ nvm_list_aliases() {
1005
+ local ALIAS
1006
+ ALIAS="${1-}"
1007
+
1008
+ local NVM_CURRENT
1009
+ NVM_CURRENT="$(nvm_ls_current)"
1010
+ local NVM_ALIAS_DIR
1011
+ NVM_ALIAS_DIR="$(nvm_alias_path)"
1012
+ command mkdir -p "${NVM_ALIAS_DIR}/lts"
1013
+
1014
+ if [ "${ALIAS}" != "${ALIAS#lts/}" ]; then
1015
+ nvm_alias "${ALIAS}"
1016
+ return $?
1017
+ fi
1018
+
1019
+ nvm_is_zsh && unsetopt local_options nomatch
1020
+ (
1021
+ local ALIAS_PATH
1022
+ for ALIAS_PATH in "${NVM_ALIAS_DIR}/${ALIAS}"*; do
1023
+ NVM_NO_COLORS="${NVM_NO_COLORS-}" NVM_CURRENT="${NVM_CURRENT}" nvm_print_alias_path "${NVM_ALIAS_DIR}" "${ALIAS_PATH}" &
1024
+ done
1025
+ wait
1026
+ ) | sort
1027
+
1028
+ (
1029
+ local ALIAS_NAME
1030
+ for ALIAS_NAME in "$(nvm_node_prefix)" "stable" "unstable"; do
1031
+ {
1032
+ # shellcheck disable=SC2030,SC2031 # (https://github.com/koalaman/shellcheck/issues/2217)
1033
+ if [ ! -f "${NVM_ALIAS_DIR}/${ALIAS_NAME}" ] && { [ -z "${ALIAS}" ] || [ "${ALIAS_NAME}" = "${ALIAS}" ]; }; then
1034
+ NVM_NO_COLORS="${NVM_NO_COLORS-}" NVM_CURRENT="${NVM_CURRENT}" nvm_print_default_alias "${ALIAS_NAME}"
1035
+ fi
1036
+ } &
1037
+ done
1038
+ wait
1039
+ ALIAS_NAME="$(nvm_iojs_prefix)"
1040
+ # shellcheck disable=SC2030,SC2031 # (https://github.com/koalaman/shellcheck/issues/2217)
1041
+ if [ ! -f "${NVM_ALIAS_DIR}/${ALIAS_NAME}" ] && { [ -z "${ALIAS}" ] || [ "${ALIAS_NAME}" = "${ALIAS}" ]; }; then
1042
+ NVM_NO_COLORS="${NVM_NO_COLORS-}" NVM_CURRENT="${NVM_CURRENT}" nvm_print_default_alias "${ALIAS_NAME}"
1043
+ fi
1044
+ ) | sort
1045
+
1046
+ (
1047
+ local LTS_ALIAS
1048
+ # shellcheck disable=SC2030,SC2031 # (https://github.com/koalaman/shellcheck/issues/2217)
1049
+ for ALIAS_PATH in "${NVM_ALIAS_DIR}/lts/${ALIAS}"*; do
1050
+ {
1051
+ LTS_ALIAS="$(NVM_NO_COLORS="${NVM_NO_COLORS-}" NVM_LTS=true nvm_print_alias_path "${NVM_ALIAS_DIR}" "${ALIAS_PATH}")"
1052
+ if [ -n "${LTS_ALIAS}" ]; then
1053
+ nvm_echo "${LTS_ALIAS}"
1054
+ fi
1055
+ } &
1056
+ done
1057
+ wait
1058
+ ) | sort
1059
+ return
1060
+ }
1061
+
1062
+ nvm_alias() {
1063
+ local ALIAS
1064
+ ALIAS="${1-}"
1065
+ if [ -z "${ALIAS}" ]; then
1066
+ nvm_err 'An alias is required.'
1067
+ return 1
1068
+ fi
1069
+ ALIAS="$(nvm_normalize_lts "${ALIAS}")"
1070
+
1071
+ if [ -z "${ALIAS}" ]; then
1072
+ return 2
1073
+ fi
1074
+
1075
+ local NVM_ALIAS_PATH
1076
+ NVM_ALIAS_PATH="$(nvm_alias_path)/${ALIAS}"
1077
+ if [ ! -f "${NVM_ALIAS_PATH}" ]; then
1078
+ nvm_err 'Alias does not exist.'
1079
+ return 2
1080
+ fi
1081
+
1082
+ command cat "${NVM_ALIAS_PATH}"
1083
+ }
1084
+
1085
+ nvm_ls_current() {
1086
+ local NVM_LS_CURRENT_NODE_PATH
1087
+ if ! NVM_LS_CURRENT_NODE_PATH="$(command which node 2>/dev/null)"; then
1088
+ nvm_echo 'none'
1089
+ elif nvm_tree_contains_path "$(nvm_version_dir iojs)" "${NVM_LS_CURRENT_NODE_PATH}"; then
1090
+ nvm_add_iojs_prefix "$(iojs --version 2>/dev/null)"
1091
+ elif nvm_tree_contains_path "${NVM_DIR}" "${NVM_LS_CURRENT_NODE_PATH}"; then
1092
+ local VERSION
1093
+ VERSION="$(node --version 2>/dev/null)"
1094
+ if [ "${VERSION}" = "v0.6.21-pre" ]; then
1095
+ nvm_echo 'v0.6.21'
1096
+ else
1097
+ nvm_echo "${VERSION}"
1098
+ fi
1099
+ else
1100
+ nvm_echo 'system'
1101
+ fi
1102
+ }
1103
+
1104
+ nvm_resolve_alias() {
1105
+ if [ -z "${1-}" ]; then
1106
+ return 1
1107
+ fi
1108
+
1109
+ local PATTERN
1110
+ PATTERN="${1-}"
1111
+
1112
+ local ALIAS
1113
+ ALIAS="${PATTERN}"
1114
+ local ALIAS_TEMP
1115
+
1116
+ local SEEN_ALIASES
1117
+ SEEN_ALIASES="${ALIAS}"
1118
+ while true; do
1119
+ ALIAS_TEMP="$(nvm_alias "${ALIAS}" 2>/dev/null || nvm_echo)"
1120
+
1121
+ if [ -z "${ALIAS_TEMP}" ]; then
1122
+ break
1123
+ fi
1124
+
1125
+ if command printf "${SEEN_ALIASES}" | nvm_grep -q -e "^${ALIAS_TEMP}$"; then
1126
+ ALIAS="∞"
1127
+ break
1128
+ fi
1129
+
1130
+ SEEN_ALIASES="${SEEN_ALIASES}\\n${ALIAS_TEMP}"
1131
+ ALIAS="${ALIAS_TEMP}"
1132
+ done
1133
+
1134
+ if [ -n "${ALIAS}" ] && [ "_${ALIAS}" != "_${PATTERN}" ]; then
1135
+ local NVM_IOJS_PREFIX
1136
+ NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
1137
+ local NVM_NODE_PREFIX
1138
+ NVM_NODE_PREFIX="$(nvm_node_prefix)"
1139
+ case "${ALIAS}" in
1140
+ '∞' | \
1141
+ "${NVM_IOJS_PREFIX}" | "${NVM_IOJS_PREFIX}-" | \
1142
+ "${NVM_NODE_PREFIX}")
1143
+ nvm_echo "${ALIAS}"
1144
+ ;;
1145
+ *)
1146
+ nvm_ensure_version_prefix "${ALIAS}"
1147
+ ;;
1148
+ esac
1149
+ return 0
1150
+ fi
1151
+
1152
+ if nvm_validate_implicit_alias "${PATTERN}" 2>/dev/null; then
1153
+ local IMPLICIT
1154
+ IMPLICIT="$(nvm_print_implicit_alias local "${PATTERN}" 2>/dev/null)"
1155
+ if [ -n "${IMPLICIT}" ]; then
1156
+ nvm_ensure_version_prefix "${IMPLICIT}"
1157
+ fi
1158
+ fi
1159
+
1160
+ return 2
1161
+ }
1162
+
1163
+ nvm_resolve_local_alias() {
1164
+ if [ -z "${1-}" ]; then
1165
+ return 1
1166
+ fi
1167
+
1168
+ local VERSION
1169
+ local EXIT_CODE
1170
+ VERSION="$(nvm_resolve_alias "${1-}")"
1171
+ EXIT_CODE=$?
1172
+ if [ -z "${VERSION}" ]; then
1173
+ return $EXIT_CODE
1174
+ fi
1175
+ if [ "_${VERSION}" != '_∞' ]; then
1176
+ nvm_version "${VERSION}"
1177
+ else
1178
+ nvm_echo "${VERSION}"
1179
+ fi
1180
+ }
1181
+
1182
+ nvm_iojs_prefix() {
1183
+ nvm_echo 'iojs'
1184
+ }
1185
+ nvm_node_prefix() {
1186
+ nvm_echo 'node'
1187
+ }
1188
+
1189
+ nvm_is_iojs_version() {
1190
+ case "${1-}" in iojs-*) return 0 ;; esac
1191
+ return 1
1192
+ }
1193
+
1194
+ nvm_add_iojs_prefix() {
1195
+ nvm_echo "$(nvm_iojs_prefix)-$(nvm_ensure_version_prefix "$(nvm_strip_iojs_prefix "${1-}")")"
1196
+ }
1197
+
1198
+ nvm_strip_iojs_prefix() {
1199
+ local NVM_IOJS_PREFIX
1200
+ NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
1201
+ if [ "${1-}" = "${NVM_IOJS_PREFIX}" ]; then
1202
+ nvm_echo
1203
+ else
1204
+ nvm_echo "${1#"${NVM_IOJS_PREFIX}"-}"
1205
+ fi
1206
+ }
1207
+
1208
+ nvm_ls() {
1209
+ local PATTERN
1210
+ PATTERN="${1-}"
1211
+ local VERSIONS
1212
+ VERSIONS=''
1213
+ if [ "${PATTERN}" = 'current' ]; then
1214
+ nvm_ls_current
1215
+ return
1216
+ fi
1217
+
1218
+ local NVM_IOJS_PREFIX
1219
+ NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
1220
+ local NVM_NODE_PREFIX
1221
+ NVM_NODE_PREFIX="$(nvm_node_prefix)"
1222
+ local NVM_VERSION_DIR_IOJS
1223
+ NVM_VERSION_DIR_IOJS="$(nvm_version_dir "${NVM_IOJS_PREFIX}")"
1224
+ local NVM_VERSION_DIR_NEW
1225
+ NVM_VERSION_DIR_NEW="$(nvm_version_dir new)"
1226
+ local NVM_VERSION_DIR_OLD
1227
+ NVM_VERSION_DIR_OLD="$(nvm_version_dir old)"
1228
+
1229
+ case "${PATTERN}" in
1230
+ "${NVM_IOJS_PREFIX}" | "${NVM_NODE_PREFIX}")
1231
+ PATTERN="${PATTERN}-"
1232
+ ;;
1233
+ *)
1234
+ if nvm_resolve_local_alias "${PATTERN}"; then
1235
+ return
1236
+ fi
1237
+ PATTERN="$(nvm_ensure_version_prefix "${PATTERN}")"
1238
+ ;;
1239
+ esac
1240
+ if [ "${PATTERN}" = 'N/A' ]; then
1241
+ return
1242
+ fi
1243
+ # If it looks like an explicit version, don't do anything funny
1244
+ local NVM_PATTERN_STARTS_WITH_V
1245
+ case $PATTERN in
1246
+ v*) NVM_PATTERN_STARTS_WITH_V=true ;;
1247
+ *) NVM_PATTERN_STARTS_WITH_V=false ;;
1248
+ esac
1249
+ if [ $NVM_PATTERN_STARTS_WITH_V = true ] && [ "_$(nvm_num_version_groups "${PATTERN}")" = "_3" ]; then
1250
+ if nvm_is_version_installed "${PATTERN}"; then
1251
+ VERSIONS="${PATTERN}"
1252
+ elif nvm_is_version_installed "$(nvm_add_iojs_prefix "${PATTERN}")"; then
1253
+ VERSIONS="$(nvm_add_iojs_prefix "${PATTERN}")"
1254
+ fi
1255
+ else
1256
+ case "${PATTERN}" in
1257
+ "${NVM_IOJS_PREFIX}-" | "${NVM_NODE_PREFIX}-" | "system") ;;
1258
+ *)
1259
+ local NUM_VERSION_GROUPS
1260
+ NUM_VERSION_GROUPS="$(nvm_num_version_groups "${PATTERN}")"
1261
+ if [ "${NUM_VERSION_GROUPS}" = "2" ] || [ "${NUM_VERSION_GROUPS}" = "1" ]; then
1262
+ PATTERN="${PATTERN%.}."
1263
+ fi
1264
+ ;;
1265
+ esac
1266
+
1267
+ nvm_is_zsh && setopt local_options shwordsplit
1268
+ nvm_is_zsh && unsetopt local_options markdirs
1269
+
1270
+ local NVM_DIRS_TO_SEARCH1
1271
+ NVM_DIRS_TO_SEARCH1=''
1272
+ local NVM_DIRS_TO_SEARCH2
1273
+ NVM_DIRS_TO_SEARCH2=''
1274
+ local NVM_DIRS_TO_SEARCH3
1275
+ NVM_DIRS_TO_SEARCH3=''
1276
+ local NVM_ADD_SYSTEM
1277
+ NVM_ADD_SYSTEM=false
1278
+ if nvm_is_iojs_version "${PATTERN}"; then
1279
+ NVM_DIRS_TO_SEARCH1="${NVM_VERSION_DIR_IOJS}"
1280
+ PATTERN="$(nvm_strip_iojs_prefix "${PATTERN}")"
1281
+ if nvm_has_system_iojs; then
1282
+ NVM_ADD_SYSTEM=true
1283
+ fi
1284
+ elif [ "${PATTERN}" = "${NVM_NODE_PREFIX}-" ]; then
1285
+ NVM_DIRS_TO_SEARCH1="${NVM_VERSION_DIR_OLD}"
1286
+ NVM_DIRS_TO_SEARCH2="${NVM_VERSION_DIR_NEW}"
1287
+ PATTERN=''
1288
+ if nvm_has_system_node; then
1289
+ NVM_ADD_SYSTEM=true
1290
+ fi
1291
+ else
1292
+ NVM_DIRS_TO_SEARCH1="${NVM_VERSION_DIR_OLD}"
1293
+ NVM_DIRS_TO_SEARCH2="${NVM_VERSION_DIR_NEW}"
1294
+ NVM_DIRS_TO_SEARCH3="${NVM_VERSION_DIR_IOJS}"
1295
+ if nvm_has_system_iojs || nvm_has_system_node; then
1296
+ NVM_ADD_SYSTEM=true
1297
+ fi
1298
+ fi
1299
+
1300
+ if ! [ -d "${NVM_DIRS_TO_SEARCH1}" ] || ! (command ls -1qA "${NVM_DIRS_TO_SEARCH1}" | nvm_grep -q .); then
1301
+ NVM_DIRS_TO_SEARCH1=''
1302
+ fi
1303
+ if ! [ -d "${NVM_DIRS_TO_SEARCH2}" ] || ! (command ls -1qA "${NVM_DIRS_TO_SEARCH2}" | nvm_grep -q .); then
1304
+ NVM_DIRS_TO_SEARCH2="${NVM_DIRS_TO_SEARCH1}"
1305
+ fi
1306
+ if ! [ -d "${NVM_DIRS_TO_SEARCH3}" ] || ! (command ls -1qA "${NVM_DIRS_TO_SEARCH3}" | nvm_grep -q .); then
1307
+ NVM_DIRS_TO_SEARCH3="${NVM_DIRS_TO_SEARCH2}"
1308
+ fi
1309
+
1310
+ local SEARCH_PATTERN
1311
+ if [ -z "${PATTERN}" ]; then
1312
+ PATTERN='v'
1313
+ SEARCH_PATTERN='.*'
1314
+ else
1315
+ SEARCH_PATTERN="$(nvm_echo "${PATTERN}" | command sed 's#\.#\\\.#g;')"
1316
+ fi
1317
+ if [ -n "${NVM_DIRS_TO_SEARCH1}${NVM_DIRS_TO_SEARCH2}${NVM_DIRS_TO_SEARCH3}" ]; then
1318
+ VERSIONS="$(command find "${NVM_DIRS_TO_SEARCH1}"/* "${NVM_DIRS_TO_SEARCH2}"/* "${NVM_DIRS_TO_SEARCH3}"/* -name . -o -type d -prune -o -path "${PATTERN}*" \
1319
+ | command sed -e "
1320
+ s#${NVM_VERSION_DIR_IOJS}/#versions/${NVM_IOJS_PREFIX}/#;
1321
+ s#^${NVM_DIR}/##;
1322
+ \\#^[^v]# d;
1323
+ \\#^versions\$# d;
1324
+ s#^versions/##;
1325
+ s#^v#${NVM_NODE_PREFIX}/v#;
1326
+ \\#${SEARCH_PATTERN}# !d;
1327
+ " \
1328
+ -e 's#^\([^/]\{1,\}\)/\(.*\)$#\2.\1#;' \
1329
+ | command sort -t. -u -k 1.2,1n -k 2,2n -k 3,3n \
1330
+ | command sed -e 's#\(.*\)\.\([^\.]\{1,\}\)$#\2-\1#;' \
1331
+ -e "s#^${NVM_NODE_PREFIX}-##;" \
1332
+ )"
1333
+ fi
1334
+ fi
1335
+
1336
+ if [ "${NVM_ADD_SYSTEM-}" = true ]; then
1337
+ if [ -z "${PATTERN}" ] || [ "${PATTERN}" = 'v' ]; then
1338
+ VERSIONS="${VERSIONS}$(command printf '\n%s' 'system')"
1339
+ elif [ "${PATTERN}" = 'system' ]; then
1340
+ VERSIONS="$(command printf '%s' 'system')"
1341
+ fi
1342
+ fi
1343
+
1344
+ if [ -z "${VERSIONS}" ]; then
1345
+ nvm_echo 'N/A'
1346
+ return 3
1347
+ fi
1348
+
1349
+ nvm_echo "${VERSIONS}"
1350
+ }
1351
+
1352
+ nvm_ls_remote() {
1353
+ local PATTERN
1354
+ PATTERN="${1-}"
1355
+ if nvm_validate_implicit_alias "${PATTERN}" 2>/dev/null ; then
1356
+ local IMPLICIT
1357
+ IMPLICIT="$(nvm_print_implicit_alias remote "${PATTERN}")"
1358
+ if [ -z "${IMPLICIT-}" ] || [ "${IMPLICIT}" = 'N/A' ]; then
1359
+ nvm_echo "N/A"
1360
+ return 3
1361
+ fi
1362
+ PATTERN="$(NVM_LTS="${NVM_LTS-}" nvm_ls_remote "${IMPLICIT}" | command tail -1 | command awk '{ print $1 }')"
1363
+ elif [ -n "${PATTERN}" ]; then
1364
+ PATTERN="$(nvm_ensure_version_prefix "${PATTERN}")"
1365
+ else
1366
+ PATTERN=".*"
1367
+ fi
1368
+ NVM_LTS="${NVM_LTS-}" nvm_ls_remote_index_tab node std "${PATTERN}"
1369
+ }
1370
+
1371
+ nvm_ls_remote_iojs() {
1372
+ NVM_LTS="${NVM_LTS-}" nvm_ls_remote_index_tab iojs std "${1-}"
1373
+ }
1374
+
1375
+ # args flavor, type, version
1376
+ nvm_ls_remote_index_tab() {
1377
+ local LTS
1378
+ LTS="${NVM_LTS-}"
1379
+ if [ "$#" -lt 3 ]; then
1380
+ nvm_err 'not enough arguments'
1381
+ return 5
1382
+ fi
1383
+
1384
+ local FLAVOR
1385
+ FLAVOR="${1-}"
1386
+
1387
+ local TYPE
1388
+ TYPE="${2-}"
1389
+
1390
+ local MIRROR
1391
+ MIRROR="$(nvm_get_mirror "${FLAVOR}" "${TYPE}")"
1392
+ if [ -z "${MIRROR}" ]; then
1393
+ return 3
1394
+ fi
1395
+
1396
+ local PREFIX
1397
+ PREFIX=''
1398
+ case "${FLAVOR}-${TYPE}" in
1399
+ iojs-std) PREFIX="$(nvm_iojs_prefix)-" ;;
1400
+ node-std) PREFIX='' ;;
1401
+ iojs-*)
1402
+ nvm_err 'unknown type of io.js release'
1403
+ return 4
1404
+ ;;
1405
+ *)
1406
+ nvm_err 'unknown type of node.js release'
1407
+ return 4
1408
+ ;;
1409
+ esac
1410
+ local SORT_COMMAND
1411
+ SORT_COMMAND='command sort'
1412
+ case "${FLAVOR}" in
1413
+ node) SORT_COMMAND='command sort -t. -u -k 1.2,1n -k 2,2n -k 3,3n' ;;
1414
+ esac
1415
+
1416
+ local PATTERN
1417
+ PATTERN="${3-}"
1418
+
1419
+ if [ "${PATTERN#"${PATTERN%?}"}" = '.' ]; then
1420
+ PATTERN="${PATTERN%.}"
1421
+ fi
1422
+
1423
+ local VERSIONS
1424
+ if [ -n "${PATTERN}" ] && [ "${PATTERN}" != '*' ]; then
1425
+ if [ "${FLAVOR}" = 'iojs' ]; then
1426
+ PATTERN="$(nvm_ensure_version_prefix "$(nvm_strip_iojs_prefix "${PATTERN}")")"
1427
+ else
1428
+ PATTERN="$(nvm_ensure_version_prefix "${PATTERN}")"
1429
+ fi
1430
+ else
1431
+ unset PATTERN
1432
+ fi
1433
+
1434
+ nvm_is_zsh && setopt local_options shwordsplit
1435
+ local VERSION_LIST
1436
+ VERSION_LIST="$(nvm_download -L -s "${MIRROR}/index.tab" -o - \
1437
+ | command sed "
1438
+ 1d;
1439
+ s/^/${PREFIX}/;
1440
+ " \
1441
+ )"
1442
+ local LTS_ALIAS
1443
+ local LTS_VERSION
1444
+ command mkdir -p "$(nvm_alias_path)/lts"
1445
+ { command awk '{
1446
+ if ($10 ~ /^\-?$/) { next }
1447
+ if ($10 && !a[tolower($10)]++) {
1448
+ if (alias) { print alias, version }
1449
+ alias_name = "lts/" tolower($10)
1450
+ if (!alias) { print "lts/*", alias_name }
1451
+ alias = alias_name
1452
+ version = $1
1453
+ }
1454
+ }
1455
+ END {
1456
+ if (alias) {
1457
+ print alias, version
1458
+ }
1459
+ }' \
1460
+ | while read -r LTS_ALIAS_LINE; do
1461
+ LTS_ALIAS="${LTS_ALIAS_LINE%% *}"
1462
+ LTS_VERSION="${LTS_ALIAS_LINE#* }"
1463
+ nvm_make_alias "${LTS_ALIAS}" "${LTS_VERSION}" >/dev/null 2>&1
1464
+ done; } << EOF
1465
+ $VERSION_LIST
1466
+ EOF
1467
+
1468
+ if [ -n "${LTS-}" ]; then
1469
+ LTS="$(nvm_normalize_lts "lts/${LTS}")"
1470
+ LTS="${LTS#lts/}"
1471
+ fi
1472
+
1473
+ VERSIONS="$({ command awk -v lts="${LTS-}" '{
1474
+ if (!$1) { next }
1475
+ if (lts && $10 ~ /^\-?$/) { next }
1476
+ if (lts && lts != "*" && tolower($10) !~ tolower(lts)) { next }
1477
+ if ($10 !~ /^\-?$/) {
1478
+ if ($10 && $10 != prev) {
1479
+ print $1, $10, "*"
1480
+ } else {
1481
+ print $1, $10
1482
+ }
1483
+ } else {
1484
+ print $1
1485
+ }
1486
+ prev=$10;
1487
+ }' \
1488
+ | nvm_grep -w "${PATTERN:-.*}" \
1489
+ | $SORT_COMMAND; } << EOF
1490
+ $VERSION_LIST
1491
+ EOF
1492
+ )"
1493
+ if [ -z "${VERSIONS}" ]; then
1494
+ nvm_echo 'N/A'
1495
+ return 3
1496
+ fi
1497
+ nvm_echo "${VERSIONS}"
1498
+ }
1499
+
1500
+ nvm_get_checksum_binary() {
1501
+ if nvm_has_non_aliased 'sha256sum'; then
1502
+ nvm_echo 'sha256sum'
1503
+ elif nvm_has_non_aliased 'shasum'; then
1504
+ nvm_echo 'shasum'
1505
+ elif nvm_has_non_aliased 'sha256'; then
1506
+ nvm_echo 'sha256'
1507
+ elif nvm_has_non_aliased 'gsha256sum'; then
1508
+ nvm_echo 'gsha256sum'
1509
+ elif nvm_has_non_aliased 'openssl'; then
1510
+ nvm_echo 'openssl'
1511
+ elif nvm_has_non_aliased 'bssl'; then
1512
+ nvm_echo 'bssl'
1513
+ elif nvm_has_non_aliased 'sha1sum'; then
1514
+ nvm_echo 'sha1sum'
1515
+ elif nvm_has_non_aliased 'sha1'; then
1516
+ nvm_echo 'sha1'
1517
+ else
1518
+ nvm_err 'Unaliased sha256sum, shasum, sha256, gsha256sum, openssl, or bssl not found.'
1519
+ nvm_err 'Unaliased sha1sum or sha1 not found.'
1520
+ return 1
1521
+ fi
1522
+ }
1523
+
1524
+ nvm_get_checksum_alg() {
1525
+ local NVM_CHECKSUM_BIN
1526
+ NVM_CHECKSUM_BIN="$(nvm_get_checksum_binary 2>/dev/null)"
1527
+ case "${NVM_CHECKSUM_BIN-}" in
1528
+ sha256sum | shasum | sha256 | gsha256sum | openssl | bssl)
1529
+ nvm_echo 'sha-256'
1530
+ ;;
1531
+ sha1sum | sha1)
1532
+ nvm_echo 'sha-1'
1533
+ ;;
1534
+ *)
1535
+ nvm_get_checksum_binary
1536
+ return $?
1537
+ ;;
1538
+ esac
1539
+ }
1540
+
1541
+ nvm_compute_checksum() {
1542
+ local FILE
1543
+ FILE="${1-}"
1544
+ if [ -z "${FILE}" ]; then
1545
+ nvm_err 'Provided file to checksum is empty.'
1546
+ return 2
1547
+ elif ! [ -f "${FILE}" ]; then
1548
+ nvm_err 'Provided file to checksum does not exist.'
1549
+ return 1
1550
+ fi
1551
+
1552
+ if nvm_has_non_aliased "sha256sum"; then
1553
+ nvm_err 'Computing checksum with sha256sum'
1554
+ command sha256sum "${FILE}" | command awk '{print $1}'
1555
+ elif nvm_has_non_aliased "shasum"; then
1556
+ nvm_err 'Computing checksum with shasum -a 256'
1557
+ command shasum -a 256 "${FILE}" | command awk '{print $1}'
1558
+ elif nvm_has_non_aliased "sha256"; then
1559
+ nvm_err 'Computing checksum with sha256 -q'
1560
+ command sha256 -q "${FILE}" | command awk '{print $1}'
1561
+ elif nvm_has_non_aliased "gsha256sum"; then
1562
+ nvm_err 'Computing checksum with gsha256sum'
1563
+ command gsha256sum "${FILE}" | command awk '{print $1}'
1564
+ elif nvm_has_non_aliased "openssl"; then
1565
+ nvm_err 'Computing checksum with openssl dgst -sha256'
1566
+ command openssl dgst -sha256 "${FILE}" | command awk '{print $NF}'
1567
+ elif nvm_has_non_aliased "bssl"; then
1568
+ nvm_err 'Computing checksum with bssl sha256sum'
1569
+ command bssl sha256sum "${FILE}" | command awk '{print $1}'
1570
+ elif nvm_has_non_aliased "sha1sum"; then
1571
+ nvm_err 'Computing checksum with sha1sum'
1572
+ command sha1sum "${FILE}" | command awk '{print $1}'
1573
+ elif nvm_has_non_aliased "sha1"; then
1574
+ nvm_err 'Computing checksum with sha1 -q'
1575
+ command sha1 -q "${FILE}"
1576
+ fi
1577
+ }
1578
+
1579
+ nvm_compare_checksum() {
1580
+ local FILE
1581
+ FILE="${1-}"
1582
+ if [ -z "${FILE}" ]; then
1583
+ nvm_err 'Provided file to checksum is empty.'
1584
+ return 4
1585
+ elif ! [ -f "${FILE}" ]; then
1586
+ nvm_err 'Provided file to checksum does not exist.'
1587
+ return 3
1588
+ fi
1589
+
1590
+ local COMPUTED_SUM
1591
+ COMPUTED_SUM="$(nvm_compute_checksum "${FILE}")"
1592
+
1593
+ local CHECKSUM
1594
+ CHECKSUM="${2-}"
1595
+ if [ -z "${CHECKSUM}" ]; then
1596
+ nvm_err 'Provided checksum to compare to is empty.'
1597
+ return 2
1598
+ fi
1599
+
1600
+ if [ -z "${COMPUTED_SUM}" ]; then
1601
+ nvm_err "Computed checksum of '${FILE}' is empty." # missing in raspberry pi binary
1602
+ nvm_err 'WARNING: Continuing *without checksum verification*'
1603
+ return
1604
+ elif [ "${COMPUTED_SUM}" != "${CHECKSUM}" ]; then
1605
+ nvm_err "Checksums do not match: '${COMPUTED_SUM}' found, '${CHECKSUM}' expected."
1606
+ return 1
1607
+ fi
1608
+ nvm_err 'Checksums matched!'
1609
+ }
1610
+
1611
+ # args: flavor, type, version, slug, compression
1612
+ nvm_get_checksum() {
1613
+ local FLAVOR
1614
+ case "${1-}" in
1615
+ node | iojs) FLAVOR="${1}" ;;
1616
+ *)
1617
+ nvm_err 'supported flavors: node, iojs'
1618
+ return 2
1619
+ ;;
1620
+ esac
1621
+
1622
+ local MIRROR
1623
+ MIRROR="$(nvm_get_mirror "${FLAVOR}" "${2-}")"
1624
+ if [ -z "${MIRROR}" ]; then
1625
+ return 1
1626
+ fi
1627
+
1628
+ local SHASUMS_URL
1629
+ if [ "$(nvm_get_checksum_alg)" = 'sha-256' ]; then
1630
+ SHASUMS_URL="${MIRROR}/${3}/SHASUMS256.txt"
1631
+ else
1632
+ SHASUMS_URL="${MIRROR}/${3}/SHASUMS.txt"
1633
+ fi
1634
+
1635
+ nvm_download -L -s "${SHASUMS_URL}" -o - | command awk "{ if (\"${4}.${5}\" == \$2) print \$1}"
1636
+ }
1637
+
1638
+ nvm_print_versions() {
1639
+ local VERSION
1640
+ local LTS
1641
+ local FORMAT
1642
+ local NVM_CURRENT
1643
+ local NVM_LATEST_LTS_COLOR
1644
+ local NVM_OLD_LTS_COLOR
1645
+
1646
+ local INSTALLED_COLOR
1647
+ local SYSTEM_COLOR
1648
+ local CURRENT_COLOR
1649
+ local NOT_INSTALLED_COLOR
1650
+ local DEFAULT_COLOR
1651
+ local LTS_COLOR
1652
+
1653
+ INSTALLED_COLOR=$(nvm_get_colors 1)
1654
+ SYSTEM_COLOR=$(nvm_get_colors 2)
1655
+ CURRENT_COLOR=$(nvm_get_colors 3)
1656
+ NOT_INSTALLED_COLOR=$(nvm_get_colors 4)
1657
+ DEFAULT_COLOR=$(nvm_get_colors 5)
1658
+ LTS_COLOR=$(nvm_get_colors 6)
1659
+
1660
+ NVM_CURRENT=$(nvm_ls_current)
1661
+ NVM_LATEST_LTS_COLOR=$(nvm_echo "${CURRENT_COLOR}" | command tr '0;' '1;')
1662
+ NVM_OLD_LTS_COLOR="${DEFAULT_COLOR}"
1663
+ local NVM_HAS_COLORS
1664
+ if [ -z "${NVM_NO_COLORS-}" ] && nvm_has_colors; then
1665
+ NVM_HAS_COLORS=1
1666
+ fi
1667
+ local LTS_LENGTH
1668
+ local LTS_FORMAT
1669
+ nvm_echo "${1-}" \
1670
+ | command sed '1!G;h;$!d' \
1671
+ | command awk '{ if ($2 && $3 && $3 == "*") { print $1, "(Latest LTS: " $2 ")" } else if ($2) { print $1, "(LTS: " $2 ")" } else { print $1 } }' \
1672
+ | command sed '1!G;h;$!d' \
1673
+ | while read -r VERSION_LINE; do
1674
+ VERSION="${VERSION_LINE%% *}"
1675
+ LTS="${VERSION_LINE#* }"
1676
+ FORMAT='%15s'
1677
+ if [ "_${VERSION}" = "_${NVM_CURRENT}" ]; then
1678
+ if [ "${NVM_HAS_COLORS-}" = '1' ]; then
1679
+ FORMAT="\033[${CURRENT_COLOR}-> %12s\033[0m"
1680
+ else
1681
+ FORMAT='-> %12s *'
1682
+ fi
1683
+ elif [ "${VERSION}" = "system" ]; then
1684
+ if [ "${NVM_HAS_COLORS-}" = '1' ]; then
1685
+ FORMAT="\033[${SYSTEM_COLOR}%15s\033[0m"
1686
+ else
1687
+ FORMAT='%15s *'
1688
+ fi
1689
+ elif nvm_is_version_installed "${VERSION}"; then
1690
+ if [ "${NVM_HAS_COLORS-}" = '1' ]; then
1691
+ FORMAT="\033[${INSTALLED_COLOR}%15s\033[0m"
1692
+ else
1693
+ FORMAT='%15s *'
1694
+ fi
1695
+ fi
1696
+ if [ "${LTS}" != "${VERSION}" ]; then
1697
+ case "${LTS}" in
1698
+ *Latest*)
1699
+ LTS="${LTS##Latest }"
1700
+ LTS_LENGTH="${#LTS}"
1701
+ if [ "${NVM_HAS_COLORS-}" = '1' ]; then
1702
+ LTS_FORMAT=" \\033[${NVM_LATEST_LTS_COLOR}%${LTS_LENGTH}s\\033[0m"
1703
+ else
1704
+ LTS_FORMAT=" %${LTS_LENGTH}s"
1705
+ fi
1706
+ ;;
1707
+ *)
1708
+ LTS_LENGTH="${#LTS}"
1709
+ if [ "${NVM_HAS_COLORS-}" = '1' ]; then
1710
+ LTS_FORMAT=" \\033[${NVM_OLD_LTS_COLOR}%${LTS_LENGTH}s\\033[0m"
1711
+ else
1712
+ LTS_FORMAT=" %${LTS_LENGTH}s"
1713
+ fi
1714
+ ;;
1715
+ esac
1716
+ command printf -- "${FORMAT}${LTS_FORMAT}\\n" "${VERSION}" " ${LTS}"
1717
+ else
1718
+ command printf -- "${FORMAT}\\n" "${VERSION}"
1719
+ fi
1720
+ done
1721
+ }
1722
+
1723
+ nvm_validate_implicit_alias() {
1724
+ local NVM_IOJS_PREFIX
1725
+ NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
1726
+ local NVM_NODE_PREFIX
1727
+ NVM_NODE_PREFIX="$(nvm_node_prefix)"
1728
+
1729
+ case "$1" in
1730
+ "stable" | "unstable" | "${NVM_IOJS_PREFIX}" | "${NVM_NODE_PREFIX}")
1731
+ return
1732
+ ;;
1733
+ *)
1734
+ nvm_err "Only implicit aliases 'stable', 'unstable', '${NVM_IOJS_PREFIX}', and '${NVM_NODE_PREFIX}' are supported."
1735
+ return 1
1736
+ ;;
1737
+ esac
1738
+ }
1739
+
1740
+ nvm_print_implicit_alias() {
1741
+ if [ "_$1" != "_local" ] && [ "_$1" != "_remote" ]; then
1742
+ nvm_err "nvm_print_implicit_alias must be specified with local or remote as the first argument."
1743
+ return 1
1744
+ fi
1745
+
1746
+ local NVM_IMPLICIT
1747
+ NVM_IMPLICIT="$2"
1748
+ if ! nvm_validate_implicit_alias "${NVM_IMPLICIT}"; then
1749
+ return 2
1750
+ fi
1751
+
1752
+ local NVM_IOJS_PREFIX
1753
+ NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
1754
+ local NVM_NODE_PREFIX
1755
+ NVM_NODE_PREFIX="$(nvm_node_prefix)"
1756
+ local NVM_COMMAND
1757
+ local NVM_ADD_PREFIX_COMMAND
1758
+ local LAST_TWO
1759
+ case "${NVM_IMPLICIT}" in
1760
+ "${NVM_IOJS_PREFIX}")
1761
+ NVM_COMMAND="nvm_ls_remote_iojs"
1762
+ NVM_ADD_PREFIX_COMMAND="nvm_add_iojs_prefix"
1763
+ if [ "_$1" = "_local" ]; then
1764
+ NVM_COMMAND="nvm_ls ${NVM_IMPLICIT}"
1765
+ fi
1766
+
1767
+ nvm_is_zsh && setopt local_options shwordsplit
1768
+
1769
+ local NVM_IOJS_VERSION
1770
+ local EXIT_CODE
1771
+ NVM_IOJS_VERSION="$(${NVM_COMMAND})" &&:
1772
+ EXIT_CODE="$?"
1773
+ if [ "_${EXIT_CODE}" = "_0" ]; then
1774
+ 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)"
1775
+ fi
1776
+
1777
+ if [ "_$NVM_IOJS_VERSION" = "_N/A" ]; then
1778
+ nvm_echo 'N/A'
1779
+ else
1780
+ ${NVM_ADD_PREFIX_COMMAND} "${NVM_IOJS_VERSION}"
1781
+ fi
1782
+ return $EXIT_CODE
1783
+ ;;
1784
+ "${NVM_NODE_PREFIX}")
1785
+ nvm_echo 'stable'
1786
+ return
1787
+ ;;
1788
+ *)
1789
+ NVM_COMMAND="nvm_ls_remote"
1790
+ if [ "_$1" = "_local" ]; then
1791
+ NVM_COMMAND="nvm_ls node"
1792
+ fi
1793
+
1794
+ nvm_is_zsh && setopt local_options shwordsplit
1795
+
1796
+ LAST_TWO=$($NVM_COMMAND | nvm_grep -e '^v' | command cut -c2- | command cut -d . -f 1,2 | uniq)
1797
+ ;;
1798
+ esac
1799
+ local MINOR
1800
+ local STABLE
1801
+ local UNSTABLE
1802
+ local MOD
1803
+ local NORMALIZED_VERSION
1804
+
1805
+ nvm_is_zsh && setopt local_options shwordsplit
1806
+ for MINOR in $LAST_TWO; do
1807
+ NORMALIZED_VERSION="$(nvm_normalize_version "$MINOR")"
1808
+ if [ "_0${NORMALIZED_VERSION#?}" != "_$NORMALIZED_VERSION" ]; then
1809
+ STABLE="$MINOR"
1810
+ else
1811
+ MOD="$(awk 'BEGIN { print int(ARGV[1] / 1000000) % 2 ; exit(0) }' "${NORMALIZED_VERSION}")"
1812
+ if [ "${MOD}" -eq 0 ]; then
1813
+ STABLE="${MINOR}"
1814
+ elif [ "${MOD}" -eq 1 ]; then
1815
+ UNSTABLE="${MINOR}"
1816
+ fi
1817
+ fi
1818
+ done
1819
+
1820
+ if [ "_$2" = '_stable' ]; then
1821
+ nvm_echo "${STABLE}"
1822
+ elif [ "_$2" = '_unstable' ]; then
1823
+ nvm_echo "${UNSTABLE:-"N/A"}"
1824
+ fi
1825
+ }
1826
+
1827
+ nvm_get_os() {
1828
+ local NVM_UNAME
1829
+ NVM_UNAME="$(command uname -a)"
1830
+ local NVM_OS
1831
+ case "${NVM_UNAME}" in
1832
+ Linux\ *) NVM_OS=linux ;;
1833
+ Darwin\ *) NVM_OS=darwin ;;
1834
+ SunOS\ *) NVM_OS=sunos ;;
1835
+ FreeBSD\ *) NVM_OS=freebsd ;;
1836
+ OpenBSD\ *) NVM_OS=openbsd ;;
1837
+ AIX\ *) NVM_OS=aix ;;
1838
+ CYGWIN* | MSYS* | MINGW*) NVM_OS=win ;;
1839
+ esac
1840
+ nvm_echo "${NVM_OS-}"
1841
+ }
1842
+
1843
+ nvm_get_arch() {
1844
+ local HOST_ARCH
1845
+ local NVM_OS
1846
+ local EXIT_CODE
1847
+
1848
+ NVM_OS="$(nvm_get_os)"
1849
+ # If the OS is SunOS, first try to use pkgsrc to guess
1850
+ # the most appropriate arch. If it's not available, use
1851
+ # isainfo to get the instruction set supported by the
1852
+ # kernel.
1853
+ if [ "_${NVM_OS}" = "_sunos" ]; then
1854
+ if HOST_ARCH=$(pkg_info -Q MACHINE_ARCH pkg_install); then
1855
+ HOST_ARCH=$(nvm_echo "${HOST_ARCH}" | command tail -1)
1856
+ else
1857
+ HOST_ARCH=$(isainfo -n)
1858
+ fi
1859
+ elif [ "_${NVM_OS}" = "_aix" ]; then
1860
+ HOST_ARCH=ppc64
1861
+ else
1862
+ HOST_ARCH="$(command uname -m)"
1863
+ fi
1864
+
1865
+ local NVM_ARCH
1866
+ case "${HOST_ARCH}" in
1867
+ x86_64 | amd64) NVM_ARCH="x64" ;;
1868
+ i*86) NVM_ARCH="x86" ;;
1869
+ aarch64) NVM_ARCH="arm64" ;;
1870
+ *) NVM_ARCH="${HOST_ARCH}" ;;
1871
+ esac
1872
+
1873
+ # If running a 64bit ARM kernel but a 32bit ARM userland, change ARCH to 32bit ARM (armv7l)
1874
+ L=$(ls -dl /sbin/init 2>/dev/null) # if /sbin/init is 32bit executable
1875
+ if [ "$(uname)" = "Linux" ] && [ "${NVM_ARCH}" = arm64 ] && [ "$(od -An -t x1 -j 4 -N 1 "${L#*-> }")" = ' 01' ]; then
1876
+ NVM_ARCH=armv7l
1877
+ HOST_ARCH=armv7l
1878
+ fi
1879
+
1880
+ nvm_echo "${NVM_ARCH}"
1881
+ }
1882
+
1883
+ nvm_get_minor_version() {
1884
+ local VERSION
1885
+ VERSION="$1"
1886
+
1887
+ if [ -z "${VERSION}" ]; then
1888
+ nvm_err 'a version is required'
1889
+ return 1
1890
+ fi
1891
+
1892
+ case "${VERSION}" in
1893
+ v | .* | *..* | v*[!.0123456789]* | [!v]*[!.0123456789]* | [!v0123456789]* | v[!0123456789]*)
1894
+ nvm_err 'invalid version number'
1895
+ return 2
1896
+ ;;
1897
+ esac
1898
+
1899
+ local PREFIXED_VERSION
1900
+ PREFIXED_VERSION="$(nvm_format_version "${VERSION}")"
1901
+
1902
+ local MINOR
1903
+ MINOR="$(nvm_echo "${PREFIXED_VERSION}" | nvm_grep -e '^v' | command cut -c2- | command cut -d . -f 1,2)"
1904
+ if [ -z "${MINOR}" ]; then
1905
+ nvm_err 'invalid version number! (please report this)'
1906
+ return 3
1907
+ fi
1908
+ nvm_echo "${MINOR}"
1909
+ }
1910
+
1911
+ nvm_ensure_default_set() {
1912
+ local VERSION
1913
+ VERSION="$1"
1914
+ if [ -z "${VERSION}" ]; then
1915
+ nvm_err 'nvm_ensure_default_set: a version is required'
1916
+ return 1
1917
+ elif nvm_alias default >/dev/null 2>&1; then
1918
+ # default already set
1919
+ return 0
1920
+ fi
1921
+ local OUTPUT
1922
+ OUTPUT="$(nvm alias default "${VERSION}")"
1923
+ local EXIT_CODE
1924
+ EXIT_CODE="$?"
1925
+ nvm_echo "Creating default alias: ${OUTPUT}"
1926
+ return $EXIT_CODE
1927
+ }
1928
+
1929
+ nvm_is_merged_node_version() {
1930
+ nvm_version_greater_than_or_equal_to "$1" v4.0.0
1931
+ }
1932
+
1933
+ nvm_get_mirror() {
1934
+ case "${1}-${2}" in
1935
+ node-std) nvm_echo "${NVM_NODEJS_ORG_MIRROR:-https://nodejs.org/dist}" ;;
1936
+ iojs-std) nvm_echo "${NVM_IOJS_ORG_MIRROR:-https://iojs.org/dist}" ;;
1937
+ *)
1938
+ nvm_err 'unknown type of node.js or io.js release'
1939
+ return 1
1940
+ ;;
1941
+ esac
1942
+ }
1943
+
1944
+ # args: os, prefixed version, version, tarball, extract directory
1945
+ nvm_install_binary_extract() {
1946
+ if [ "$#" -ne 5 ]; then
1947
+ nvm_err 'nvm_install_binary_extract needs 5 parameters'
1948
+ return 1
1949
+ fi
1950
+
1951
+ local NVM_OS
1952
+ local PREFIXED_VERSION
1953
+ local VERSION
1954
+ local TARBALL
1955
+ local TMPDIR
1956
+ NVM_OS="${1}"
1957
+ PREFIXED_VERSION="${2}"
1958
+ VERSION="${3}"
1959
+ TARBALL="${4}"
1960
+ TMPDIR="${5}"
1961
+
1962
+ local VERSION_PATH
1963
+
1964
+ [ -n "${TMPDIR-}" ] && \
1965
+ command mkdir -p "${TMPDIR}" && \
1966
+ VERSION_PATH="$(nvm_version_path "${PREFIXED_VERSION}")" || return 1
1967
+
1968
+ # For Windows system (GitBash with MSYS, Cygwin)
1969
+ if [ "${NVM_OS}" = 'win' ]; then
1970
+ VERSION_PATH="${VERSION_PATH}/bin"
1971
+ command unzip -q "${TARBALL}" -d "${TMPDIR}" || return 1
1972
+ # For non Windows system (including WSL running on Windows)
1973
+ else
1974
+ local tar_compression_flag
1975
+ tar_compression_flag='z'
1976
+ if nvm_supports_xz "${VERSION}"; then
1977
+ tar_compression_flag='J'
1978
+ fi
1979
+
1980
+ local tar
1981
+ if [ "${NVM_OS}" = 'aix' ]; then
1982
+ tar='gtar'
1983
+ else
1984
+ tar='tar'
1985
+ fi
1986
+ command "${tar}" -x${tar_compression_flag}f "${TARBALL}" -C "${TMPDIR}" --strip-components 1 || return 1
1987
+ fi
1988
+
1989
+ command mkdir -p "${VERSION_PATH}" || return 1
1990
+
1991
+ if [ "${NVM_OS}" = 'win' ]; then
1992
+ command mv "${TMPDIR}/"*/* "${VERSION_PATH}" || return 1
1993
+ command chmod +x "${VERSION_PATH}"/node.exe || return 1
1994
+ command chmod +x "${VERSION_PATH}"/npm || return 1
1995
+ command chmod +x "${VERSION_PATH}"/npx 2>/dev/null
1996
+ else
1997
+ command mv "${TMPDIR}/"* "${VERSION_PATH}" || return 1
1998
+ fi
1999
+
2000
+ command rm -rf "${TMPDIR}"
2001
+
2002
+ return 0
2003
+ }
2004
+
2005
+ # args: flavor, type, version, reinstall
2006
+ nvm_install_binary() {
2007
+ local FLAVOR
2008
+ case "${1-}" in
2009
+ node | iojs) FLAVOR="${1}" ;;
2010
+ *)
2011
+ nvm_err 'supported flavors: node, iojs'
2012
+ return 4
2013
+ ;;
2014
+ esac
2015
+
2016
+ local TYPE
2017
+ TYPE="${2-}"
2018
+
2019
+ local PREFIXED_VERSION
2020
+ PREFIXED_VERSION="${3-}"
2021
+ if [ -z "${PREFIXED_VERSION}" ]; then
2022
+ nvm_err 'A version number is required.'
2023
+ return 3
2024
+ fi
2025
+
2026
+ local nosource
2027
+ nosource="${4-}"
2028
+
2029
+ local VERSION
2030
+ VERSION="$(nvm_strip_iojs_prefix "${PREFIXED_VERSION}")"
2031
+
2032
+ local NVM_OS
2033
+ NVM_OS="$(nvm_get_os)"
2034
+
2035
+ if [ -z "${NVM_OS}" ]; then
2036
+ return 2
2037
+ fi
2038
+
2039
+ local TARBALL
2040
+ local TMPDIR
2041
+
2042
+ local PROGRESS_BAR
2043
+ local NODE_OR_IOJS
2044
+ if [ "${FLAVOR}" = 'node' ]; then
2045
+ NODE_OR_IOJS="${FLAVOR}"
2046
+ elif [ "${FLAVOR}" = 'iojs' ]; then
2047
+ NODE_OR_IOJS="io.js"
2048
+ fi
2049
+ if [ "${NVM_NO_PROGRESS-}" = "1" ]; then
2050
+ # --silent, --show-error, use short option as @samrocketman mentions the compatibility issue.
2051
+ PROGRESS_BAR="-sS"
2052
+ else
2053
+ PROGRESS_BAR="--progress-bar"
2054
+ fi
2055
+ nvm_echo "Downloading and installing ${NODE_OR_IOJS-} ${VERSION}..."
2056
+ TARBALL="$(PROGRESS_BAR="${PROGRESS_BAR}" nvm_download_artifact "${FLAVOR}" binary "${TYPE-}" "${VERSION}" | command tail -1)"
2057
+ if [ -f "${TARBALL}" ]; then
2058
+ TMPDIR="$(dirname "${TARBALL}")/files"
2059
+ fi
2060
+
2061
+ if nvm_install_binary_extract "${NVM_OS}" "${PREFIXED_VERSION}" "${VERSION}" "${TARBALL}" "${TMPDIR}"; then
2062
+ if [ -n "${ALIAS-}" ]; then
2063
+ nvm alias "${ALIAS}" "${provided_version}"
2064
+ fi
2065
+ return 0
2066
+ fi
2067
+
2068
+
2069
+ # Read nosource from arguments
2070
+ if [ "${nosource-}" = '1' ]; then
2071
+ nvm_err 'Binary download failed. Download from source aborted.'
2072
+ return 0
2073
+ fi
2074
+
2075
+ nvm_err 'Binary download failed, trying source.'
2076
+ if [ -n "${TMPDIR-}" ]; then
2077
+ command rm -rf "${TMPDIR}"
2078
+ fi
2079
+ return 1
2080
+ }
2081
+
2082
+ # args: flavor, kind, version
2083
+ nvm_get_download_slug() {
2084
+ local FLAVOR
2085
+ case "${1-}" in
2086
+ node | iojs) FLAVOR="${1}" ;;
2087
+ *)
2088
+ nvm_err 'supported flavors: node, iojs'
2089
+ return 1
2090
+ ;;
2091
+ esac
2092
+
2093
+ local KIND
2094
+ case "${2-}" in
2095
+ binary | source) KIND="${2}" ;;
2096
+ *)
2097
+ nvm_err 'supported kinds: binary, source'
2098
+ return 2
2099
+ ;;
2100
+ esac
2101
+
2102
+ local VERSION
2103
+ VERSION="${3-}"
2104
+
2105
+ local NVM_OS
2106
+ NVM_OS="$(nvm_get_os)"
2107
+
2108
+ local NVM_ARCH
2109
+ NVM_ARCH="$(nvm_get_arch)"
2110
+ if ! nvm_is_merged_node_version "${VERSION}"; then
2111
+ if [ "${NVM_ARCH}" = 'armv6l' ] || [ "${NVM_ARCH}" = 'armv7l' ]; then
2112
+ NVM_ARCH="arm-pi"
2113
+ fi
2114
+ fi
2115
+
2116
+ # If node version in below 16.0.0 then there is no arm64 packages available in node repositories, so we have to install "x64" arch packages
2117
+ # If running MAC M1 :: arm64 arch and Darwin OS then use "x64" Architecture because node doesn't provide darwin_arm64 package below v16.0.0
2118
+ if nvm_version_greater '16.0.0' "${VERSION}"; then
2119
+ if [ "_${NVM_OS}" = '_darwin' ] && [ "${NVM_ARCH}" = 'arm64' ]; then
2120
+ NVM_ARCH=x64
2121
+ fi
2122
+ fi
2123
+
2124
+ if [ "${KIND}" = 'binary' ]; then
2125
+ nvm_echo "${FLAVOR}-${VERSION}-${NVM_OS}-${NVM_ARCH}"
2126
+ elif [ "${KIND}" = 'source' ]; then
2127
+ nvm_echo "${FLAVOR}-${VERSION}"
2128
+ fi
2129
+ }
2130
+
2131
+ nvm_get_artifact_compression() {
2132
+ local VERSION
2133
+ VERSION="${1-}"
2134
+
2135
+ local NVM_OS
2136
+ NVM_OS="$(nvm_get_os)"
2137
+
2138
+ local COMPRESSION
2139
+ COMPRESSION='tar.gz'
2140
+ if [ "_${NVM_OS}" = '_win' ]; then
2141
+ COMPRESSION='zip'
2142
+ elif nvm_supports_xz "${VERSION}"; then
2143
+ COMPRESSION='tar.xz'
2144
+ fi
2145
+
2146
+ nvm_echo "${COMPRESSION}"
2147
+ }
2148
+
2149
+ # args: flavor, kind, type, version
2150
+ nvm_download_artifact() {
2151
+ local FLAVOR
2152
+ case "${1-}" in
2153
+ node | iojs) FLAVOR="${1}" ;;
2154
+ *)
2155
+ nvm_err 'supported flavors: node, iojs'
2156
+ return 1
2157
+ ;;
2158
+ esac
2159
+
2160
+ local KIND
2161
+ case "${2-}" in
2162
+ binary | source) KIND="${2}" ;;
2163
+ *)
2164
+ nvm_err 'supported kinds: binary, source'
2165
+ return 1
2166
+ ;;
2167
+ esac
2168
+
2169
+ local TYPE
2170
+ TYPE="${3-}"
2171
+
2172
+ local MIRROR
2173
+ MIRROR="$(nvm_get_mirror "${FLAVOR}" "${TYPE}")"
2174
+ if [ -z "${MIRROR}" ]; then
2175
+ return 2
2176
+ fi
2177
+
2178
+ local VERSION
2179
+ VERSION="${4}"
2180
+
2181
+ if [ -z "${VERSION}" ]; then
2182
+ nvm_err 'A version number is required.'
2183
+ return 3
2184
+ fi
2185
+
2186
+ if [ "${KIND}" = 'binary' ] && ! nvm_binary_available "${VERSION}"; then
2187
+ nvm_err "No precompiled binary available for ${VERSION}."
2188
+ return
2189
+ fi
2190
+
2191
+ local SLUG
2192
+ SLUG="$(nvm_get_download_slug "${FLAVOR}" "${KIND}" "${VERSION}")"
2193
+
2194
+ local COMPRESSION
2195
+ COMPRESSION="$(nvm_get_artifact_compression "${VERSION}")"
2196
+
2197
+ local CHECKSUM
2198
+ CHECKSUM="$(nvm_get_checksum "${FLAVOR}" "${TYPE}" "${VERSION}" "${SLUG}" "${COMPRESSION}")"
2199
+
2200
+ local tmpdir
2201
+ if [ "${KIND}" = 'binary' ]; then
2202
+ tmpdir="$(nvm_cache_dir)/bin/${SLUG}"
2203
+ else
2204
+ tmpdir="$(nvm_cache_dir)/src/${SLUG}"
2205
+ fi
2206
+ command mkdir -p "${tmpdir}/files" || (
2207
+ nvm_err "creating directory ${tmpdir}/files failed"
2208
+ return 3
2209
+ )
2210
+
2211
+ local TARBALL
2212
+ TARBALL="${tmpdir}/${SLUG}.${COMPRESSION}"
2213
+ local TARBALL_URL
2214
+ if nvm_version_greater_than_or_equal_to "${VERSION}" 0.1.14; then
2215
+ TARBALL_URL="${MIRROR}/${VERSION}/${SLUG}.${COMPRESSION}"
2216
+ else
2217
+ # node <= 0.1.13 does not have a directory
2218
+ TARBALL_URL="${MIRROR}/${SLUG}.${COMPRESSION}"
2219
+ fi
2220
+
2221
+ if [ -r "${TARBALL}" ]; then
2222
+ nvm_err "Local cache found: $(nvm_sanitize_path "${TARBALL}")"
2223
+ if nvm_compare_checksum "${TARBALL}" "${CHECKSUM}" >/dev/null 2>&1; then
2224
+ nvm_err "Checksums match! Using existing downloaded archive $(nvm_sanitize_path "${TARBALL}")"
2225
+ nvm_echo "${TARBALL}"
2226
+ return 0
2227
+ fi
2228
+ nvm_compare_checksum "${TARBALL}" "${CHECKSUM}"
2229
+ nvm_err "Checksum check failed!"
2230
+ nvm_err "Removing the broken local cache..."
2231
+ command rm -rf "${TARBALL}"
2232
+ fi
2233
+ nvm_err "Downloading ${TARBALL_URL}..."
2234
+ nvm_download -L -C - "${PROGRESS_BAR}" "${TARBALL_URL}" -o "${TARBALL}" || (
2235
+ command rm -rf "${TARBALL}" "${tmpdir}"
2236
+ nvm_err "Binary download from ${TARBALL_URL} failed, trying source."
2237
+ return 4
2238
+ )
2239
+
2240
+ if nvm_grep '404 Not Found' "${TARBALL}" >/dev/null; then
2241
+ command rm -rf "${TARBALL}" "${tmpdir}"
2242
+ nvm_err "HTTP 404 at URL ${TARBALL_URL}"
2243
+ return 5
2244
+ fi
2245
+
2246
+ nvm_compare_checksum "${TARBALL}" "${CHECKSUM}" || (
2247
+ command rm -rf "${tmpdir}/files"
2248
+ return 6
2249
+ )
2250
+
2251
+ nvm_echo "${TARBALL}"
2252
+ }
2253
+
2254
+ nvm_get_make_jobs() {
2255
+ if nvm_is_natural_num "${1-}"; then
2256
+ NVM_MAKE_JOBS="$1"
2257
+ nvm_echo "number of \`make\` jobs: ${NVM_MAKE_JOBS}"
2258
+ return
2259
+ elif [ -n "${1-}" ]; then
2260
+ unset NVM_MAKE_JOBS
2261
+ nvm_err "$1 is invalid for number of \`make\` jobs, must be a natural number"
2262
+ fi
2263
+ local NVM_OS
2264
+ NVM_OS="$(nvm_get_os)"
2265
+ local NVM_CPU_CORES
2266
+ case "_${NVM_OS}" in
2267
+ "_linux")
2268
+ NVM_CPU_CORES="$(nvm_grep -c -E '^processor.+: [0-9]+' /proc/cpuinfo)"
2269
+ ;;
2270
+ "_freebsd" | "_darwin" | "_openbsd")
2271
+ NVM_CPU_CORES="$(sysctl -n hw.ncpu)"
2272
+ ;;
2273
+ "_sunos")
2274
+ NVM_CPU_CORES="$(psrinfo | wc -l)"
2275
+ ;;
2276
+ "_aix")
2277
+ NVM_CPU_CORES="$(pmcycles -m | wc -l)"
2278
+ ;;
2279
+ esac
2280
+ if ! nvm_is_natural_num "${NVM_CPU_CORES}"; then
2281
+ nvm_err 'Can not determine how many core(s) are available, running in single-threaded mode.'
2282
+ nvm_err 'Please report an issue on GitHub to help us make nvm run faster on your computer!'
2283
+ NVM_MAKE_JOBS=1
2284
+ else
2285
+ nvm_echo "Detected that you have ${NVM_CPU_CORES} CPU core(s)"
2286
+ if [ "${NVM_CPU_CORES}" -gt 2 ]; then
2287
+ NVM_MAKE_JOBS=$((NVM_CPU_CORES - 1))
2288
+ nvm_echo "Running with ${NVM_MAKE_JOBS} threads to speed up the build"
2289
+ else
2290
+ NVM_MAKE_JOBS=1
2291
+ nvm_echo 'Number of CPU core(s) less than or equal to 2, running in single-threaded mode'
2292
+ fi
2293
+ fi
2294
+ }
2295
+
2296
+ # args: flavor, type, version, make jobs, additional
2297
+ nvm_install_source() {
2298
+ local FLAVOR
2299
+ case "${1-}" in
2300
+ node | iojs) FLAVOR="${1}" ;;
2301
+ *)
2302
+ nvm_err 'supported flavors: node, iojs'
2303
+ return 4
2304
+ ;;
2305
+ esac
2306
+
2307
+ local TYPE
2308
+ TYPE="${2-}"
2309
+
2310
+ local PREFIXED_VERSION
2311
+ PREFIXED_VERSION="${3-}"
2312
+ if [ -z "${PREFIXED_VERSION}" ]; then
2313
+ nvm_err 'A version number is required.'
2314
+ return 3
2315
+ fi
2316
+
2317
+ local VERSION
2318
+ VERSION="$(nvm_strip_iojs_prefix "${PREFIXED_VERSION}")"
2319
+
2320
+ local NVM_MAKE_JOBS
2321
+ NVM_MAKE_JOBS="${4-}"
2322
+
2323
+ local ADDITIONAL_PARAMETERS
2324
+ ADDITIONAL_PARAMETERS="${5-}"
2325
+
2326
+ local NVM_ARCH
2327
+ NVM_ARCH="$(nvm_get_arch)"
2328
+ if [ "${NVM_ARCH}" = 'armv6l' ] || [ "${NVM_ARCH}" = 'armv7l' ]; then
2329
+ if [ -n "${ADDITIONAL_PARAMETERS}" ]; then
2330
+ ADDITIONAL_PARAMETERS="--without-snapshot ${ADDITIONAL_PARAMETERS}"
2331
+ else
2332
+ ADDITIONAL_PARAMETERS='--without-snapshot'
2333
+ fi
2334
+ fi
2335
+
2336
+ if [ -n "${ADDITIONAL_PARAMETERS}" ]; then
2337
+ nvm_echo "Additional options while compiling: ${ADDITIONAL_PARAMETERS}"
2338
+ fi
2339
+
2340
+ local NVM_OS
2341
+ NVM_OS="$(nvm_get_os)"
2342
+
2343
+ local make
2344
+ make='make'
2345
+ local MAKE_CXX
2346
+ case "${NVM_OS}" in
2347
+ 'freebsd' | 'openbsd')
2348
+ make='gmake'
2349
+ MAKE_CXX="CC=${CC:-cc} CXX=${CXX:-c++}"
2350
+ ;;
2351
+ 'darwin')
2352
+ MAKE_CXX="CC=${CC:-cc} CXX=${CXX:-c++}"
2353
+ ;;
2354
+ 'aix')
2355
+ make='gmake'
2356
+ ;;
2357
+ esac
2358
+ if nvm_has "clang++" && nvm_has "clang" && nvm_version_greater_than_or_equal_to "$(nvm_clang_version)" 3.5; then
2359
+ if [ -z "${CC-}" ] || [ -z "${CXX-}" ]; then
2360
+ nvm_echo "Clang v3.5+ detected! CC or CXX not specified, will use Clang as C/C++ compiler!"
2361
+ MAKE_CXX="CC=${CC:-cc} CXX=${CXX:-c++}"
2362
+ fi
2363
+ fi
2364
+
2365
+ local tar_compression_flag
2366
+ tar_compression_flag='z'
2367
+ if nvm_supports_xz "${VERSION}"; then
2368
+ tar_compression_flag='J'
2369
+ fi
2370
+
2371
+ local tar
2372
+ tar='tar'
2373
+ if [ "${NVM_OS}" = 'aix' ]; then
2374
+ tar='gtar'
2375
+ fi
2376
+
2377
+ local TARBALL
2378
+ local TMPDIR
2379
+ local VERSION_PATH
2380
+
2381
+ if [ "${NVM_NO_PROGRESS-}" = "1" ]; then
2382
+ # --silent, --show-error, use short option as @samrocketman mentions the compatibility issue.
2383
+ PROGRESS_BAR="-sS"
2384
+ else
2385
+ PROGRESS_BAR="--progress-bar"
2386
+ fi
2387
+
2388
+ nvm_is_zsh && setopt local_options shwordsplit
2389
+
2390
+ TARBALL="$(PROGRESS_BAR="${PROGRESS_BAR}" nvm_download_artifact "${FLAVOR}" source "${TYPE}" "${VERSION}" | command tail -1)" && \
2391
+ [ -f "${TARBALL}" ] && \
2392
+ TMPDIR="$(dirname "${TARBALL}")/files" && \
2393
+ if ! (
2394
+ # shellcheck disable=SC2086
2395
+ command mkdir -p "${TMPDIR}" && \
2396
+ command "${tar}" -x${tar_compression_flag}f "${TARBALL}" -C "${TMPDIR}" --strip-components 1 && \
2397
+ VERSION_PATH="$(nvm_version_path "${PREFIXED_VERSION}")" && \
2398
+ nvm_cd "${TMPDIR}" && \
2399
+ nvm_echo '$>'./configure --prefix="${VERSION_PATH}" $ADDITIONAL_PARAMETERS'<' && \
2400
+ ./configure --prefix="${VERSION_PATH}" $ADDITIONAL_PARAMETERS && \
2401
+ $make -j "${NVM_MAKE_JOBS}" ${MAKE_CXX-} && \
2402
+ command rm -f "${VERSION_PATH}" 2>/dev/null && \
2403
+ $make -j "${NVM_MAKE_JOBS}" ${MAKE_CXX-} install
2404
+ ); then
2405
+ nvm_err "nvm: install ${VERSION} failed!"
2406
+ command rm -rf "${TMPDIR-}"
2407
+ return 1
2408
+ fi
2409
+ }
2410
+
2411
+ nvm_use_if_needed() {
2412
+ if [ "_${1-}" = "_$(nvm_ls_current)" ]; then
2413
+ return
2414
+ fi
2415
+ nvm use "$@"
2416
+ }
2417
+
2418
+ nvm_install_npm_if_needed() {
2419
+ local VERSION
2420
+ VERSION="$(nvm_ls_current)"
2421
+ if ! nvm_has "npm"; then
2422
+ nvm_echo 'Installing npm...'
2423
+ if nvm_version_greater 0.2.0 "${VERSION}"; then
2424
+ nvm_err 'npm requires node v0.2.3 or higher'
2425
+ elif nvm_version_greater_than_or_equal_to "${VERSION}" 0.2.0; then
2426
+ if nvm_version_greater 0.2.3 "${VERSION}"; then
2427
+ nvm_err 'npm requires node v0.2.3 or higher'
2428
+ else
2429
+ nvm_download -L https://npmjs.org/install.sh -o - | clean=yes npm_install=0.2.19 sh
2430
+ fi
2431
+ else
2432
+ nvm_download -L https://npmjs.org/install.sh -o - | clean=yes sh
2433
+ fi
2434
+ fi
2435
+ return $?
2436
+ }
2437
+
2438
+ nvm_match_version() {
2439
+ local NVM_IOJS_PREFIX
2440
+ NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
2441
+ local PROVIDED_VERSION
2442
+ PROVIDED_VERSION="$1"
2443
+ case "_${PROVIDED_VERSION}" in
2444
+ "_${NVM_IOJS_PREFIX}" | '_io.js')
2445
+ nvm_version "${NVM_IOJS_PREFIX}"
2446
+ ;;
2447
+ '_system')
2448
+ nvm_echo 'system'
2449
+ ;;
2450
+ *)
2451
+ nvm_version "${PROVIDED_VERSION}"
2452
+ ;;
2453
+ esac
2454
+ }
2455
+
2456
+ nvm_npm_global_modules() {
2457
+ local NPMLIST
2458
+ local VERSION
2459
+ VERSION="$1"
2460
+ NPMLIST=$(nvm use "${VERSION}" >/dev/null && npm list -g --depth=0 2>/dev/null | command sed 1,1d | nvm_grep -v 'UNMET PEER DEPENDENCY')
2461
+
2462
+ local INSTALLS
2463
+ INSTALLS=$(nvm_echo "${NPMLIST}" | command sed -e '/ -> / d' -e '/\(empty\)/ d' -e 's/^.* \(.*@[^ ]*\).*/\1/' -e '/^npm@[^ ]*.*$/ d' | command xargs)
2464
+
2465
+ local LINKS
2466
+ LINKS="$(nvm_echo "${NPMLIST}" | command sed -n 's/.* -> \(.*\)/\1/ p')"
2467
+
2468
+ nvm_echo "${INSTALLS} //// ${LINKS}"
2469
+ }
2470
+
2471
+ nvm_npmrc_bad_news_bears() {
2472
+ local NVM_NPMRC
2473
+ NVM_NPMRC="${1-}"
2474
+ if [ -n "${NVM_NPMRC}" ] && [ -f "${NVM_NPMRC}" ] && nvm_grep -Ee '^(prefix|globalconfig) *=' <"${NVM_NPMRC}" >/dev/null; then
2475
+ return 0
2476
+ fi
2477
+ return 1
2478
+ }
2479
+
2480
+ nvm_die_on_prefix() {
2481
+ local NVM_DELETE_PREFIX
2482
+ NVM_DELETE_PREFIX="${1-}"
2483
+ case "${NVM_DELETE_PREFIX}" in
2484
+ 0 | 1) ;;
2485
+ *)
2486
+ nvm_err 'First argument "delete the prefix" must be zero or one'
2487
+ return 1
2488
+ ;;
2489
+ esac
2490
+ local NVM_COMMAND
2491
+ NVM_COMMAND="${2-}"
2492
+ local NVM_VERSION_DIR
2493
+ NVM_VERSION_DIR="${3-}"
2494
+ if [ -z "${NVM_COMMAND}" ] || [ -z "${NVM_VERSION_DIR}" ]; then
2495
+ nvm_err 'Second argument "nvm command", and third argument "nvm version dir", must both be nonempty'
2496
+ return 2
2497
+ fi
2498
+
2499
+ # npm first looks at $PREFIX (case-sensitive)
2500
+ # we do not bother to test the value here; if this env var is set, unset it to continue.
2501
+ # however, `npm exec` in npm v7.2+ sets $PREFIX; if set, inherit it
2502
+ if [ -n "${PREFIX-}" ] && [ "$(nvm_version_path "$(node -v)")" != "${PREFIX}" ]; then
2503
+ nvm deactivate >/dev/null 2>&1
2504
+ nvm_err "nvm is not compatible with the \"PREFIX\" environment variable: currently set to \"${PREFIX}\""
2505
+ nvm_err 'Run `unset PREFIX` to unset it.'
2506
+ return 3
2507
+ fi
2508
+
2509
+ local NVM_OS
2510
+ NVM_OS="$(nvm_get_os)"
2511
+
2512
+ # npm normalizes NPM_CONFIG_-prefixed env vars
2513
+ # https://github.com/npm/npmconf/blob/22827e4038d6eebaafeb5c13ed2b92cf97b8fb82/npmconf.js#L331-L348
2514
+ # https://github.com/npm/npm/blob/5e426a78ca02d0044f8dd26e0c5f881217081cbd/lib/config/core.js#L343-L359
2515
+ #
2516
+ # here, we avoid trying to replicate "which one wins" or testing the value; if any are defined, it errors
2517
+ # until none are left.
2518
+ local NVM_NPM_CONFIG_x_PREFIX_ENV
2519
+ NVM_NPM_CONFIG_x_PREFIX_ENV="$(command awk 'BEGIN { for (name in ENVIRON) if (toupper(name) == "NPM_CONFIG_PREFIX") { print name; break } }')"
2520
+ if [ -n "${NVM_NPM_CONFIG_x_PREFIX_ENV-}" ]; then
2521
+ local NVM_CONFIG_VALUE
2522
+ eval "NVM_CONFIG_VALUE=\"\$${NVM_NPM_CONFIG_x_PREFIX_ENV}\""
2523
+ if [ -n "${NVM_CONFIG_VALUE-}" ] && [ "_${NVM_OS}" = "_win" ]; then
2524
+ NVM_CONFIG_VALUE="$(cd "$NVM_CONFIG_VALUE" 2>/dev/null && pwd)"
2525
+ fi
2526
+ if [ -n "${NVM_CONFIG_VALUE-}" ] && ! nvm_tree_contains_path "${NVM_DIR}" "${NVM_CONFIG_VALUE}"; then
2527
+ nvm deactivate >/dev/null 2>&1
2528
+ nvm_err "nvm is not compatible with the \"${NVM_NPM_CONFIG_x_PREFIX_ENV}\" environment variable: currently set to \"${NVM_CONFIG_VALUE}\""
2529
+ nvm_err "Run \`unset ${NVM_NPM_CONFIG_x_PREFIX_ENV}\` to unset it."
2530
+ return 4
2531
+ fi
2532
+ fi
2533
+
2534
+ # here, npm config checks npmrc files.
2535
+ # the stack is: cli, env, project, user, global, builtin, defaults
2536
+ # cli does not apply; env is covered above, defaults don't exist for prefix
2537
+ # there are 4 npmrc locations to check: project, global, user, and builtin
2538
+ # project: find the closest node_modules or package.json-containing dir, `.npmrc`
2539
+ # global: default prefix + `/etc/npmrc`
2540
+ # user: $HOME/.npmrc
2541
+ # builtin: npm install location, `npmrc`
2542
+ #
2543
+ # if any of them have a `prefix`, fail.
2544
+ # if any have `globalconfig`, fail also, just in case, to avoid spidering configs.
2545
+
2546
+ local NVM_NPM_BUILTIN_NPMRC
2547
+ NVM_NPM_BUILTIN_NPMRC="${NVM_VERSION_DIR}/lib/node_modules/npm/npmrc"
2548
+ if nvm_npmrc_bad_news_bears "${NVM_NPM_BUILTIN_NPMRC}"; then
2549
+ if [ "_${NVM_DELETE_PREFIX}" = "_1" ]; then
2550
+ npm config --loglevel=warn delete prefix --userconfig="${NVM_NPM_BUILTIN_NPMRC}"
2551
+ npm config --loglevel=warn delete globalconfig --userconfig="${NVM_NPM_BUILTIN_NPMRC}"
2552
+ else
2553
+ nvm_err "Your builtin npmrc file ($(nvm_sanitize_path "${NVM_NPM_BUILTIN_NPMRC}"))"
2554
+ nvm_err 'has a `globalconfig` and/or a `prefix` setting, which are incompatible with nvm.'
2555
+ nvm_err "Run \`${NVM_COMMAND}\` to unset it."
2556
+ return 10
2557
+ fi
2558
+ fi
2559
+
2560
+ local NVM_NPM_GLOBAL_NPMRC
2561
+ NVM_NPM_GLOBAL_NPMRC="${NVM_VERSION_DIR}/etc/npmrc"
2562
+ if nvm_npmrc_bad_news_bears "${NVM_NPM_GLOBAL_NPMRC}"; then
2563
+ if [ "_${NVM_DELETE_PREFIX}" = "_1" ]; then
2564
+ npm config --global --loglevel=warn delete prefix
2565
+ npm config --global --loglevel=warn delete globalconfig
2566
+ else
2567
+ nvm_err "Your global npmrc file ($(nvm_sanitize_path "${NVM_NPM_GLOBAL_NPMRC}"))"
2568
+ nvm_err 'has a `globalconfig` and/or a `prefix` setting, which are incompatible with nvm.'
2569
+ nvm_err "Run \`${NVM_COMMAND}\` to unset it."
2570
+ return 10
2571
+ fi
2572
+ fi
2573
+
2574
+ local NVM_NPM_USER_NPMRC
2575
+ NVM_NPM_USER_NPMRC="${HOME}/.npmrc"
2576
+ if nvm_npmrc_bad_news_bears "${NVM_NPM_USER_NPMRC}"; then
2577
+ if [ "_${NVM_DELETE_PREFIX}" = "_1" ]; then
2578
+ npm config --loglevel=warn delete prefix --userconfig="${NVM_NPM_USER_NPMRC}"
2579
+ npm config --loglevel=warn delete globalconfig --userconfig="${NVM_NPM_USER_NPMRC}"
2580
+ else
2581
+ nvm_err "Your user’s .npmrc file ($(nvm_sanitize_path "${NVM_NPM_USER_NPMRC}"))"
2582
+ nvm_err 'has a `globalconfig` and/or a `prefix` setting, which are incompatible with nvm.'
2583
+ nvm_err "Run \`${NVM_COMMAND}\` to unset it."
2584
+ return 10
2585
+ fi
2586
+ fi
2587
+
2588
+ local NVM_NPM_PROJECT_NPMRC
2589
+ NVM_NPM_PROJECT_NPMRC="$(nvm_find_project_dir)/.npmrc"
2590
+ if nvm_npmrc_bad_news_bears "${NVM_NPM_PROJECT_NPMRC}"; then
2591
+ if [ "_${NVM_DELETE_PREFIX}" = "_1" ]; then
2592
+ npm config --loglevel=warn delete prefix
2593
+ npm config --loglevel=warn delete globalconfig
2594
+ else
2595
+ nvm_err "Your project npmrc file ($(nvm_sanitize_path "${NVM_NPM_PROJECT_NPMRC}"))"
2596
+ nvm_err 'has a `globalconfig` and/or a `prefix` setting, which are incompatible with nvm.'
2597
+ nvm_err "Run \`${NVM_COMMAND}\` to unset it."
2598
+ return 10
2599
+ fi
2600
+ fi
2601
+ }
2602
+
2603
+ # Succeeds if $IOJS_VERSION represents an io.js version that has a
2604
+ # Solaris binary, fails otherwise.
2605
+ # Currently, only io.js 3.3.1 has a Solaris binary available, and it's the
2606
+ # latest io.js version available. The expectation is that any potential io.js
2607
+ # version later than v3.3.1 will also have Solaris binaries.
2608
+ nvm_iojs_version_has_solaris_binary() {
2609
+ local IOJS_VERSION
2610
+ IOJS_VERSION="$1"
2611
+ local STRIPPED_IOJS_VERSION
2612
+ STRIPPED_IOJS_VERSION="$(nvm_strip_iojs_prefix "${IOJS_VERSION}")"
2613
+ if [ "_${STRIPPED_IOJS_VERSION}" = "${IOJS_VERSION}" ]; then
2614
+ return 1
2615
+ fi
2616
+
2617
+ # io.js started shipping Solaris binaries with io.js v3.3.1
2618
+ nvm_version_greater_than_or_equal_to "${STRIPPED_IOJS_VERSION}" v3.3.1
2619
+ }
2620
+
2621
+ # Succeeds if $NODE_VERSION represents a node version that has a
2622
+ # Solaris binary, fails otherwise.
2623
+ # Currently, node versions starting from v0.8.6 have a Solaris binary
2624
+ # available.
2625
+ nvm_node_version_has_solaris_binary() {
2626
+ local NODE_VERSION
2627
+ NODE_VERSION="$1"
2628
+ # Error out if $NODE_VERSION is actually an io.js version
2629
+ local STRIPPED_IOJS_VERSION
2630
+ STRIPPED_IOJS_VERSION="$(nvm_strip_iojs_prefix "${NODE_VERSION}")"
2631
+ if [ "_${STRIPPED_IOJS_VERSION}" != "_${NODE_VERSION}" ]; then
2632
+ return 1
2633
+ fi
2634
+
2635
+ # node (unmerged) started shipping Solaris binaries with v0.8.6 and
2636
+ # node versions v1.0.0 or greater are not considered valid "unmerged" node
2637
+ # versions.
2638
+ nvm_version_greater_than_or_equal_to "${NODE_VERSION}" v0.8.6 \
2639
+ && ! nvm_version_greater_than_or_equal_to "${NODE_VERSION}" v1.0.0
2640
+ }
2641
+
2642
+ # Succeeds if $VERSION represents a version (node, io.js or merged) that has a
2643
+ # Solaris binary, fails otherwise.
2644
+ nvm_has_solaris_binary() {
2645
+ local VERSION="${1-}"
2646
+ if nvm_is_merged_node_version "${VERSION}"; then
2647
+ return 0 # All merged node versions have a Solaris binary
2648
+ elif nvm_is_iojs_version "${VERSION}"; then
2649
+ nvm_iojs_version_has_solaris_binary "${VERSION}"
2650
+ else
2651
+ nvm_node_version_has_solaris_binary "${VERSION}"
2652
+ fi
2653
+ }
2654
+
2655
+ nvm_sanitize_path() {
2656
+ local SANITIZED_PATH
2657
+ SANITIZED_PATH="${1-}"
2658
+ if [ "_${SANITIZED_PATH}" != "_${NVM_DIR}" ]; then
2659
+ SANITIZED_PATH="$(nvm_echo "${SANITIZED_PATH}" | command sed -e "s#${NVM_DIR}#\${NVM_DIR}#g")"
2660
+ fi
2661
+ if [ "_${SANITIZED_PATH}" != "_${HOME}" ]; then
2662
+ SANITIZED_PATH="$(nvm_echo "${SANITIZED_PATH}" | command sed -e "s#${HOME}#\${HOME}#g")"
2663
+ fi
2664
+ nvm_echo "${SANITIZED_PATH}"
2665
+ }
2666
+
2667
+ nvm_is_natural_num() {
2668
+ if [ -z "$1" ]; then
2669
+ return 4
2670
+ fi
2671
+ case "$1" in
2672
+ 0) return 1 ;;
2673
+ -*) return 3 ;; # some BSDs return false positives for double-negated args
2674
+ *)
2675
+ [ "$1" -eq "$1" ] 2>/dev/null # returns 2 if it doesn't match
2676
+ ;;
2677
+ esac
2678
+ }
2679
+
2680
+ # Check version dir permissions
2681
+ nvm_check_file_permissions() {
2682
+ nvm_is_zsh && setopt local_options nonomatch
2683
+ for FILE in "$1"/* "$1"/.[!.]* "$1"/..?* ; do
2684
+ if [ -d "$FILE" ]; then
2685
+ if [ -n "${NVM_DEBUG-}" ]; then
2686
+ nvm_err "${FILE}"
2687
+ fi
2688
+ if ! nvm_check_file_permissions "${FILE}"; then
2689
+ return 2
2690
+ fi
2691
+ elif [ -e "$FILE" ] && [ ! -w "$FILE" ] && [ ! -O "$FILE" ]; then
2692
+ nvm_err "file is not writable or self-owned: $(nvm_sanitize_path "$FILE")"
2693
+ return 1
2694
+ fi
2695
+ done
2696
+ return 0
2697
+ }
2698
+
2699
+ nvm_cache_dir() {
2700
+ nvm_echo "${NVM_DIR}/.cache"
2701
+ }
2702
+
2703
+ nvm() {
2704
+ if [ "$#" -lt 1 ]; then
2705
+ nvm --help
2706
+ return
2707
+ fi
2708
+
2709
+ local DEFAULT_IFS
2710
+ DEFAULT_IFS=" $(nvm_echo t | command tr t \\t)
2711
+ "
2712
+ if [ "${-#*e}" != "$-" ]; then
2713
+ set +e
2714
+ local EXIT_CODE
2715
+ IFS="${DEFAULT_IFS}" nvm "$@"
2716
+ EXIT_CODE="$?"
2717
+ set -e
2718
+ return "$EXIT_CODE"
2719
+ elif [ "${-#*a}" != "$-" ]; then
2720
+ set +a
2721
+ local EXIT_CODE
2722
+ IFS="${DEFAULT_IFS}" nvm "$@"
2723
+ EXIT_CODE="$?"
2724
+ set -a
2725
+ return "$EXIT_CODE"
2726
+ elif [ "${IFS}" != "${DEFAULT_IFS}" ]; then
2727
+ IFS="${DEFAULT_IFS}" nvm "$@"
2728
+ return "$?"
2729
+ fi
2730
+
2731
+ local i
2732
+ for i in "$@"
2733
+ do
2734
+ case $i in
2735
+ --) break ;;
2736
+ '-h'|'help'|'--help')
2737
+ NVM_NO_COLORS=""
2738
+ for j in "$@"; do
2739
+ if [ "${j}" = '--no-colors' ]; then
2740
+ NVM_NO_COLORS="${j}"
2741
+ break
2742
+ fi
2743
+ done
2744
+
2745
+ local INITIAL_COLOR_INFO
2746
+ local RED_INFO
2747
+ local GREEN_INFO
2748
+ local BLUE_INFO
2749
+ local CYAN_INFO
2750
+ local MAGENTA_INFO
2751
+ local YELLOW_INFO
2752
+ local BLACK_INFO
2753
+ local GREY_WHITE_INFO
2754
+
2755
+ if [ -z "${NVM_NO_COLORS-}" ] && nvm_has_colors; then
2756
+ INITIAL_COLOR_INFO='\033[0;32m g\033[0m \033[0;34m b\033[0m \033[0;33m y\033[0m \033[0;31m r\033[0m \033[0;37m e\033[0m'
2757
+ RED_INFO='\033[0;31m r\033[0m/\033[1;31mR\033[0m = \033[0;31mred\033[0m / \033[1;31mbold red\033[0m'
2758
+ GREEN_INFO='\033[0;32m g\033[0m/\033[1;32mG\033[0m = \033[0;32mgreen\033[0m / \033[1;32mbold green\033[0m'
2759
+ BLUE_INFO='\033[0;34m b\033[0m/\033[1;34mB\033[0m = \033[0;34mblue\033[0m / \033[1;34mbold blue\033[0m'
2760
+ CYAN_INFO='\033[0;36m c\033[0m/\033[1;36mC\033[0m = \033[0;36mcyan\033[0m / \033[1;36mbold cyan\033[0m'
2761
+ MAGENTA_INFO='\033[0;35m m\033[0m/\033[1;35mM\033[0m = \033[0;35mmagenta\033[0m / \033[1;35mbold magenta\033[0m'
2762
+ YELLOW_INFO='\033[0;33m y\033[0m/\033[1;33mY\033[0m = \033[0;33myellow\033[0m / \033[1;33mbold yellow\033[0m'
2763
+ BLACK_INFO='\033[0;30m k\033[0m/\033[1;30mK\033[0m = \033[0;30mblack\033[0m / \033[1;30mbold black\033[0m'
2764
+ GREY_WHITE_INFO='\033[0;37m e\033[0m/\033[1;37mW\033[0m = \033[0;37mlight grey\033[0m / \033[1;37mwhite\033[0m'
2765
+ else
2766
+ INITIAL_COLOR_INFO='gbYre'
2767
+ RED_INFO='r/R = red / bold red'
2768
+ GREEN_INFO='g/G = green / bold green'
2769
+ BLUE_INFO='b/B = blue / bold blue'
2770
+ CYAN_INFO='c/C = cyan / bold cyan'
2771
+ MAGENTA_INFO='m/M = magenta / bold magenta'
2772
+ YELLOW_INFO='y/Y = yellow / bold yellow'
2773
+ BLACK_INFO='k/K = black / bold black'
2774
+ GREY_WHITE_INFO='e/W = light grey / white'
2775
+ fi
2776
+
2777
+ local NVM_IOJS_PREFIX
2778
+ NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
2779
+ local NVM_NODE_PREFIX
2780
+ NVM_NODE_PREFIX="$(nvm_node_prefix)"
2781
+ NVM_VERSION="$(nvm --version)"
2782
+ nvm_echo
2783
+ nvm_echo "Node Version Manager (v${NVM_VERSION})"
2784
+ nvm_echo
2785
+ nvm_echo 'Note: <version> refers to any version-like string nvm understands. This includes:'
2786
+ nvm_echo ' - full or partial version numbers, starting with an optional "v" (0.10, v0.1.2, v1)'
2787
+ nvm_echo " - default (built-in) aliases: ${NVM_NODE_PREFIX}, stable, unstable, ${NVM_IOJS_PREFIX}, system"
2788
+ nvm_echo ' - custom aliases you define with `nvm alias foo`'
2789
+ nvm_echo
2790
+ nvm_echo ' Any options that produce colorized output should respect the `--no-colors` option.'
2791
+ nvm_echo
2792
+ nvm_echo 'Usage:'
2793
+ nvm_echo ' nvm --help Show this message'
2794
+ nvm_echo ' --no-colors Suppress colored output'
2795
+ nvm_echo ' nvm --version Print out the installed version of nvm'
2796
+ nvm_echo ' nvm install [<version>] Download and install a <version>. Uses .nvmrc if available and version is omitted.'
2797
+ nvm_echo ' The following optional arguments, if provided, must appear directly after `nvm install`:'
2798
+ nvm_echo ' -s Skip binary download, install from source only.'
2799
+ nvm_echo ' -b Skip source download, install from binary only.'
2800
+ nvm_echo ' --reinstall-packages-from=<version> When installing, reinstall packages installed in <node|iojs|node version number>'
2801
+ nvm_echo ' --lts When installing, only select from LTS (long-term support) versions'
2802
+ nvm_echo ' --lts=<LTS name> When installing, only select from versions for a specific LTS line'
2803
+ nvm_echo ' --skip-default-packages When installing, skip the default-packages file if it exists'
2804
+ nvm_echo ' --latest-npm After installing, attempt to upgrade to the latest working npm on the given node version'
2805
+ nvm_echo ' --no-progress Disable the progress bar on any downloads'
2806
+ nvm_echo ' --alias=<name> After installing, set the alias specified to the version specified. (same as: nvm alias <name> <version>)'
2807
+ nvm_echo ' --default After installing, set default alias to the version specified. (same as: nvm alias default <version>)'
2808
+ nvm_echo ' nvm uninstall <version> Uninstall a version'
2809
+ nvm_echo ' nvm uninstall --lts Uninstall using automatic LTS (long-term support) alias `lts/*`, if available.'
2810
+ nvm_echo ' nvm uninstall --lts=<LTS name> Uninstall using automatic alias for provided LTS line, if available.'
2811
+ nvm_echo ' nvm use [<version>] Modify PATH to use <version>. Uses .nvmrc if available and version is omitted.'
2812
+ nvm_echo ' The following optional arguments, if provided, must appear directly after `nvm use`:'
2813
+ nvm_echo ' --silent Silences stdout/stderr output'
2814
+ nvm_echo ' --lts Uses automatic LTS (long-term support) alias `lts/*`, if available.'
2815
+ nvm_echo ' --lts=<LTS name> Uses automatic alias for provided LTS line, if available.'
2816
+ nvm_echo ' nvm exec [<version>] [<command>] Run <command> on <version>. Uses .nvmrc if available and version is omitted.'
2817
+ nvm_echo ' The following optional arguments, if provided, must appear directly after `nvm exec`:'
2818
+ nvm_echo ' --silent Silences stdout/stderr output'
2819
+ nvm_echo ' --lts Uses automatic LTS (long-term support) alias `lts/*`, if available.'
2820
+ nvm_echo ' --lts=<LTS name> Uses automatic alias for provided LTS line, if available.'
2821
+ nvm_echo ' nvm run [<version>] [<args>] Run `node` on <version> with <args> as arguments. Uses .nvmrc if available and version is omitted.'
2822
+ nvm_echo ' The following optional arguments, if provided, must appear directly after `nvm run`:'
2823
+ nvm_echo ' --silent Silences stdout/stderr output'
2824
+ nvm_echo ' --lts Uses automatic LTS (long-term support) alias `lts/*`, if available.'
2825
+ nvm_echo ' --lts=<LTS name> Uses automatic alias for provided LTS line, if available.'
2826
+ nvm_echo ' nvm current Display currently activated version of Node'
2827
+ nvm_echo ' nvm ls [<version>] List installed versions, matching a given <version> if provided'
2828
+ nvm_echo ' --no-colors Suppress colored output'
2829
+ nvm_echo ' --no-alias Suppress `nvm alias` output'
2830
+ nvm_echo ' nvm ls-remote [<version>] List remote versions available for install, matching a given <version> if provided'
2831
+ nvm_echo ' --lts When listing, only show LTS (long-term support) versions'
2832
+ nvm_echo ' --lts=<LTS name> When listing, only show versions for a specific LTS line'
2833
+ nvm_echo ' --no-colors Suppress colored output'
2834
+ nvm_echo ' nvm version <version> Resolve the given description to a single local version'
2835
+ nvm_echo ' nvm version-remote <version> Resolve the given description to a single remote version'
2836
+ nvm_echo ' --lts When listing, only select from LTS (long-term support) versions'
2837
+ nvm_echo ' --lts=<LTS name> When listing, only select from versions for a specific LTS line'
2838
+ nvm_echo ' nvm deactivate Undo effects of `nvm` on current shell'
2839
+ nvm_echo ' --silent Silences stdout/stderr output'
2840
+ nvm_echo ' nvm alias [<pattern>] Show all aliases beginning with <pattern>'
2841
+ nvm_echo ' --no-colors Suppress colored output'
2842
+ nvm_echo ' nvm alias <name> <version> Set an alias named <name> pointing to <version>'
2843
+ nvm_echo ' nvm unalias <name> Deletes the alias named <name>'
2844
+ nvm_echo ' nvm install-latest-npm Attempt to upgrade to the latest working `npm` on the current node version'
2845
+ nvm_echo ' nvm reinstall-packages <version> Reinstall global `npm` packages contained in <version> to current version'
2846
+ nvm_echo ' nvm unload Unload `nvm` from shell'
2847
+ nvm_echo ' nvm which [current | <version>] Display path to installed node version. Uses .nvmrc if available and version is omitted.'
2848
+ nvm_echo ' --silent Silences stdout/stderr output when a version is omitted'
2849
+ nvm_echo ' nvm cache dir Display path to the cache directory for nvm'
2850
+ nvm_echo ' nvm cache clear Empty cache directory for nvm'
2851
+ nvm_echo ' nvm set-colors [<color codes>] Set five text colors using format "yMeBg". Available when supported.'
2852
+ nvm_echo ' Initial colors are:'
2853
+ nvm_echo_with_colors " ${INITIAL_COLOR_INFO}"
2854
+ nvm_echo ' Color codes:'
2855
+ nvm_echo_with_colors " ${RED_INFO}"
2856
+ nvm_echo_with_colors " ${GREEN_INFO}"
2857
+ nvm_echo_with_colors " ${BLUE_INFO}"
2858
+ nvm_echo_with_colors " ${CYAN_INFO}"
2859
+ nvm_echo_with_colors " ${MAGENTA_INFO}"
2860
+ nvm_echo_with_colors " ${YELLOW_INFO}"
2861
+ nvm_echo_with_colors " ${BLACK_INFO}"
2862
+ nvm_echo_with_colors " ${GREY_WHITE_INFO}"
2863
+ nvm_echo
2864
+ nvm_echo 'Example:'
2865
+ nvm_echo ' nvm install 8.0.0 Install a specific version number'
2866
+ nvm_echo ' nvm use 8.0 Use the latest available 8.0.x release'
2867
+ nvm_echo ' nvm run 6.10.3 app.js Run app.js using node 6.10.3'
2868
+ nvm_echo ' nvm exec 4.8.3 node app.js Run `node app.js` with the PATH pointing to node 4.8.3'
2869
+ nvm_echo ' nvm alias default 8.1.0 Set default node version on a shell'
2870
+ nvm_echo ' nvm alias default node Always default to the latest available node version on a shell'
2871
+ nvm_echo
2872
+ nvm_echo ' nvm install node Install the latest available version'
2873
+ nvm_echo ' nvm use node Use the latest version'
2874
+ nvm_echo ' nvm install --lts Install the latest LTS version'
2875
+ nvm_echo ' nvm use --lts Use the latest LTS version'
2876
+ nvm_echo
2877
+ nvm_echo ' nvm set-colors cgYmW Set text colors to cyan, green, bold yellow, magenta, and white'
2878
+ nvm_echo
2879
+ nvm_echo 'Note:'
2880
+ nvm_echo ' to remove, delete, or uninstall nvm - just remove the `$NVM_DIR` folder (usually `~/.nvm`)'
2881
+ nvm_echo
2882
+ return 0;
2883
+ ;;
2884
+ esac
2885
+ done
2886
+
2887
+ local COMMAND
2888
+ COMMAND="${1-}"
2889
+ shift
2890
+
2891
+ # initialize local variables
2892
+ local VERSION
2893
+ local ADDITIONAL_PARAMETERS
2894
+
2895
+ case $COMMAND in
2896
+ "cache")
2897
+ case "${1-}" in
2898
+ dir) nvm_cache_dir ;;
2899
+ clear)
2900
+ local DIR
2901
+ DIR="$(nvm_cache_dir)"
2902
+ if command rm -rf "${DIR}" && command mkdir -p "${DIR}"; then
2903
+ nvm_echo 'nvm cache cleared.'
2904
+ else
2905
+ nvm_err "Unable to clear nvm cache: ${DIR}"
2906
+ return 1
2907
+ fi
2908
+ ;;
2909
+ *)
2910
+ >&2 nvm --help
2911
+ return 127
2912
+ ;;
2913
+ esac
2914
+ ;;
2915
+
2916
+ "debug")
2917
+ local OS_VERSION
2918
+ nvm_is_zsh && setopt local_options shwordsplit
2919
+ nvm_err "nvm --version: v$(nvm --version)"
2920
+ if [ -n "${TERM_PROGRAM-}" ]; then
2921
+ nvm_err "\$TERM_PROGRAM: ${TERM_PROGRAM}"
2922
+ fi
2923
+ nvm_err "\$SHELL: ${SHELL}"
2924
+ # shellcheck disable=SC2169,SC3028
2925
+ nvm_err "\$SHLVL: ${SHLVL-}"
2926
+ nvm_err "whoami: '$(whoami)'"
2927
+ nvm_err "\${HOME}: ${HOME}"
2928
+ nvm_err "\${NVM_DIR}: '$(nvm_sanitize_path "${NVM_DIR}")'"
2929
+ nvm_err "\${PATH}: $(nvm_sanitize_path "${PATH}")"
2930
+ nvm_err "\$PREFIX: '$(nvm_sanitize_path "${PREFIX}")'"
2931
+ nvm_err "\${NPM_CONFIG_PREFIX}: '$(nvm_sanitize_path "${NPM_CONFIG_PREFIX}")'"
2932
+ nvm_err "\$NVM_NODEJS_ORG_MIRROR: '${NVM_NODEJS_ORG_MIRROR}'"
2933
+ nvm_err "\$NVM_IOJS_ORG_MIRROR: '${NVM_IOJS_ORG_MIRROR}'"
2934
+ nvm_err "shell version: '$(${SHELL} --version | command head -n 1)'"
2935
+ nvm_err "uname -a: '$(command uname -a | command awk '{$2=""; print}' | command xargs)'"
2936
+ nvm_err "checksum binary: '$(nvm_get_checksum_binary 2>/dev/null)'"
2937
+ if [ "$(nvm_get_os)" = "darwin" ] && nvm_has sw_vers; then
2938
+ OS_VERSION="$(sw_vers | command awk '{print $2}' | command xargs)"
2939
+ elif [ -r "/etc/issue" ]; then
2940
+ OS_VERSION="$(command head -n 1 /etc/issue | command sed 's/\\.//g')"
2941
+ if [ -z "${OS_VERSION}" ] && [ -r "/etc/os-release" ]; then
2942
+ # shellcheck disable=SC1091
2943
+ OS_VERSION="$(. /etc/os-release && echo "${NAME}" "${VERSION}")"
2944
+ fi
2945
+ fi
2946
+ if [ -n "${OS_VERSION}" ]; then
2947
+ nvm_err "OS version: ${OS_VERSION}"
2948
+ fi
2949
+ if nvm_has "curl"; then
2950
+ nvm_err "curl: $(nvm_command_info curl), $(command curl -V | command head -n 1)"
2951
+ else
2952
+ nvm_err "curl: not found"
2953
+ fi
2954
+ if nvm_has "wget"; then
2955
+ nvm_err "wget: $(nvm_command_info wget), $(command wget -V | command head -n 1)"
2956
+ else
2957
+ nvm_err "wget: not found"
2958
+ fi
2959
+
2960
+ local TEST_TOOLS ADD_TEST_TOOLS
2961
+ TEST_TOOLS="git grep awk"
2962
+ ADD_TEST_TOOLS="sed cut basename rm mkdir xargs"
2963
+ if [ "darwin" != "$(nvm_get_os)" ] && [ "freebsd" != "$(nvm_get_os)" ]; then
2964
+ TEST_TOOLS="${TEST_TOOLS} ${ADD_TEST_TOOLS}"
2965
+ else
2966
+ for tool in ${ADD_TEST_TOOLS} ; do
2967
+ if nvm_has "${tool}"; then
2968
+ nvm_err "${tool}: $(nvm_command_info "${tool}")"
2969
+ else
2970
+ nvm_err "${tool}: not found"
2971
+ fi
2972
+ done
2973
+ fi
2974
+ for tool in ${TEST_TOOLS} ; do
2975
+ local NVM_TOOL_VERSION
2976
+ if nvm_has "${tool}"; then
2977
+ if command ls -l "$(nvm_command_info "${tool}" | command awk '{print $1}')" | command grep -q busybox; then
2978
+ NVM_TOOL_VERSION="$(command "${tool}" --help 2>&1 | command head -n 1)"
2979
+ else
2980
+ NVM_TOOL_VERSION="$(command "${tool}" --version 2>&1 | command head -n 1)"
2981
+ fi
2982
+ nvm_err "${tool}: $(nvm_command_info "${tool}"), ${NVM_TOOL_VERSION}"
2983
+ else
2984
+ nvm_err "${tool}: not found"
2985
+ fi
2986
+ unset NVM_TOOL_VERSION
2987
+ done
2988
+ unset TEST_TOOLS ADD_TEST_TOOLS
2989
+
2990
+ local NVM_DEBUG_OUTPUT
2991
+ for NVM_DEBUG_COMMAND in 'nvm current' 'which node' 'which iojs' 'which npm' 'npm config get prefix' 'npm root -g'; do
2992
+ NVM_DEBUG_OUTPUT="$(${NVM_DEBUG_COMMAND} 2>&1)"
2993
+ nvm_err "${NVM_DEBUG_COMMAND}: $(nvm_sanitize_path "${NVM_DEBUG_OUTPUT}")"
2994
+ done
2995
+ return 42
2996
+ ;;
2997
+
2998
+ "install" | "i")
2999
+ local version_not_provided
3000
+ version_not_provided=0
3001
+ local NVM_OS
3002
+ NVM_OS="$(nvm_get_os)"
3003
+
3004
+ if ! nvm_has "curl" && ! nvm_has "wget"; then
3005
+ nvm_err 'nvm needs curl or wget to proceed.'
3006
+ return 1
3007
+ fi
3008
+
3009
+ if [ $# -lt 1 ]; then
3010
+ version_not_provided=1
3011
+ fi
3012
+
3013
+ local nobinary
3014
+ local nosource
3015
+ local noprogress
3016
+ nobinary=0
3017
+ noprogress=0
3018
+ nosource=0
3019
+ local LTS
3020
+ local ALIAS
3021
+ local NVM_UPGRADE_NPM
3022
+ NVM_UPGRADE_NPM=0
3023
+
3024
+ local PROVIDED_REINSTALL_PACKAGES_FROM
3025
+ local REINSTALL_PACKAGES_FROM
3026
+ local SKIP_DEFAULT_PACKAGES
3027
+ local DEFAULT_PACKAGES
3028
+
3029
+ while [ $# -ne 0 ]; do
3030
+ case "$1" in
3031
+ ---*)
3032
+ nvm_err 'arguments with `---` are not supported - this is likely a typo'
3033
+ return 55;
3034
+ ;;
3035
+ -s)
3036
+ shift # consume "-s"
3037
+ nobinary=1
3038
+ if [ $nosource -eq 1 ]; then
3039
+ nvm err '-s and -b cannot be set together since they would skip install from both binary and source'
3040
+ return 6
3041
+ fi
3042
+ ;;
3043
+ -b)
3044
+ shift # consume "-b"
3045
+ nosource=1
3046
+ if [ $nobinary -eq 1 ]; then
3047
+ nvm err '-s and -b cannot be set together since they would skip install from both binary and source'
3048
+ return 6
3049
+ fi
3050
+ ;;
3051
+ -j)
3052
+ shift # consume "-j"
3053
+ nvm_get_make_jobs "$1"
3054
+ shift # consume job count
3055
+ ;;
3056
+ --no-progress)
3057
+ noprogress=1
3058
+ shift
3059
+ ;;
3060
+ --lts)
3061
+ LTS='*'
3062
+ shift
3063
+ ;;
3064
+ --lts=*)
3065
+ LTS="${1##--lts=}"
3066
+ shift
3067
+ ;;
3068
+ --latest-npm)
3069
+ NVM_UPGRADE_NPM=1
3070
+ shift
3071
+ ;;
3072
+ --default)
3073
+ if [ -n "${ALIAS-}" ]; then
3074
+ nvm_err '--default and --alias are mutually exclusive, and may not be provided more than once'
3075
+ return 6
3076
+ fi
3077
+ ALIAS='default'
3078
+ shift
3079
+ ;;
3080
+ --alias=*)
3081
+ if [ -n "${ALIAS-}" ]; then
3082
+ nvm_err '--default and --alias are mutually exclusive, and may not be provided more than once'
3083
+ return 6
3084
+ fi
3085
+ ALIAS="${1##--alias=}"
3086
+ shift
3087
+ ;;
3088
+ --reinstall-packages-from=*)
3089
+ if [ -n "${PROVIDED_REINSTALL_PACKAGES_FROM-}" ]; then
3090
+ nvm_err '--reinstall-packages-from may not be provided more than once'
3091
+ return 6
3092
+ fi
3093
+ PROVIDED_REINSTALL_PACKAGES_FROM="$(nvm_echo "$1" | command cut -c 27-)"
3094
+ if [ -z "${PROVIDED_REINSTALL_PACKAGES_FROM}" ]; then
3095
+ nvm_err 'If --reinstall-packages-from is provided, it must point to an installed version of node.'
3096
+ return 6
3097
+ fi
3098
+ REINSTALL_PACKAGES_FROM="$(nvm_version "${PROVIDED_REINSTALL_PACKAGES_FROM}")" ||:
3099
+ shift
3100
+ ;;
3101
+ --copy-packages-from=*)
3102
+ if [ -n "${PROVIDED_REINSTALL_PACKAGES_FROM-}" ]; then
3103
+ nvm_err '--reinstall-packages-from may not be provided more than once, or combined with `--copy-packages-from`'
3104
+ return 6
3105
+ fi
3106
+ PROVIDED_REINSTALL_PACKAGES_FROM="$(nvm_echo "$1" | command cut -c 22-)"
3107
+ if [ -z "${PROVIDED_REINSTALL_PACKAGES_FROM}" ]; then
3108
+ nvm_err 'If --copy-packages-from is provided, it must point to an installed version of node.'
3109
+ return 6
3110
+ fi
3111
+ REINSTALL_PACKAGES_FROM="$(nvm_version "${PROVIDED_REINSTALL_PACKAGES_FROM}")" ||:
3112
+ shift
3113
+ ;;
3114
+ --reinstall-packages-from | --copy-packages-from)
3115
+ nvm_err "If ${1} is provided, it must point to an installed version of node using \`=\`."
3116
+ return 6
3117
+ ;;
3118
+ --skip-default-packages)
3119
+ SKIP_DEFAULT_PACKAGES=true
3120
+ shift
3121
+ ;;
3122
+ *)
3123
+ break # stop parsing args
3124
+ ;;
3125
+ esac
3126
+ done
3127
+
3128
+ local provided_version
3129
+ provided_version="${1-}"
3130
+
3131
+ if [ -z "${provided_version}" ]; then
3132
+ if [ "_${LTS-}" = '_*' ]; then
3133
+ nvm_echo 'Installing latest LTS version.'
3134
+ if [ $# -gt 0 ]; then
3135
+ shift
3136
+ fi
3137
+ elif [ "_${LTS-}" != '_' ]; then
3138
+ nvm_echo "Installing with latest version of LTS line: ${LTS}"
3139
+ if [ $# -gt 0 ]; then
3140
+ shift
3141
+ fi
3142
+ else
3143
+ nvm_rc_version
3144
+ if [ $version_not_provided -eq 1 ] && [ -z "${NVM_RC_VERSION}" ]; then
3145
+ unset NVM_RC_VERSION
3146
+ >&2 nvm --help
3147
+ return 127
3148
+ fi
3149
+ provided_version="${NVM_RC_VERSION}"
3150
+ unset NVM_RC_VERSION
3151
+ fi
3152
+ elif [ $# -gt 0 ]; then
3153
+ shift
3154
+ fi
3155
+
3156
+ case "${provided_version}" in
3157
+ 'lts/*')
3158
+ LTS='*'
3159
+ provided_version=''
3160
+ ;;
3161
+ lts/*)
3162
+ LTS="${provided_version##lts/}"
3163
+ provided_version=''
3164
+ ;;
3165
+ esac
3166
+
3167
+ VERSION="$(NVM_VERSION_ONLY=true NVM_LTS="${LTS-}" nvm_remote_version "${provided_version}")"
3168
+
3169
+ if [ "${VERSION}" = 'N/A' ]; then
3170
+ local LTS_MSG
3171
+ local REMOTE_CMD
3172
+ if [ "${LTS-}" = '*' ]; then
3173
+ LTS_MSG='(with LTS filter) '
3174
+ REMOTE_CMD='nvm ls-remote --lts'
3175
+ elif [ -n "${LTS-}" ]; then
3176
+ LTS_MSG="(with LTS filter '${LTS}') "
3177
+ REMOTE_CMD="nvm ls-remote --lts=${LTS}"
3178
+ else
3179
+ REMOTE_CMD='nvm ls-remote'
3180
+ fi
3181
+ nvm_err "Version '${provided_version}' ${LTS_MSG-}not found - try \`${REMOTE_CMD}\` to browse available versions."
3182
+ return 3
3183
+ fi
3184
+
3185
+ ADDITIONAL_PARAMETERS=''
3186
+
3187
+ while [ $# -ne 0 ]; do
3188
+ case "$1" in
3189
+ --reinstall-packages-from=*)
3190
+ if [ -n "${PROVIDED_REINSTALL_PACKAGES_FROM-}" ]; then
3191
+ nvm_err '--reinstall-packages-from may not be provided more than once'
3192
+ return 6
3193
+ fi
3194
+ PROVIDED_REINSTALL_PACKAGES_FROM="$(nvm_echo "$1" | command cut -c 27-)"
3195
+ if [ -z "${PROVIDED_REINSTALL_PACKAGES_FROM}" ]; then
3196
+ nvm_err 'If --reinstall-packages-from is provided, it must point to an installed version of node.'
3197
+ return 6
3198
+ fi
3199
+ REINSTALL_PACKAGES_FROM="$(nvm_version "${PROVIDED_REINSTALL_PACKAGES_FROM}")" ||:
3200
+ ;;
3201
+ --copy-packages-from=*)
3202
+ if [ -n "${PROVIDED_REINSTALL_PACKAGES_FROM-}" ]; then
3203
+ nvm_err '--reinstall-packages-from may not be provided more than once, or combined with `--copy-packages-from`'
3204
+ return 6
3205
+ fi
3206
+ PROVIDED_REINSTALL_PACKAGES_FROM="$(nvm_echo "$1" | command cut -c 22-)"
3207
+ if [ -z "${PROVIDED_REINSTALL_PACKAGES_FROM}" ]; then
3208
+ nvm_err 'If --copy-packages-from is provided, it must point to an installed version of node.'
3209
+ return 6
3210
+ fi
3211
+ REINSTALL_PACKAGES_FROM="$(nvm_version "${PROVIDED_REINSTALL_PACKAGES_FROM}")" ||:
3212
+ ;;
3213
+ --reinstall-packages-from | --copy-packages-from)
3214
+ nvm_err "If ${1} is provided, it must point to an installed version of node using \`=\`."
3215
+ return 6
3216
+ ;;
3217
+ --skip-default-packages)
3218
+ SKIP_DEFAULT_PACKAGES=true
3219
+ ;;
3220
+ *)
3221
+ ADDITIONAL_PARAMETERS="${ADDITIONAL_PARAMETERS} $1"
3222
+ ;;
3223
+ esac
3224
+ shift
3225
+ done
3226
+
3227
+ if [ -z "${SKIP_DEFAULT_PACKAGES-}" ]; then
3228
+ DEFAULT_PACKAGES="$(nvm_get_default_packages)"
3229
+ EXIT_CODE=$?
3230
+ if [ $EXIT_CODE -ne 0 ]; then
3231
+ return $EXIT_CODE
3232
+ fi
3233
+ fi
3234
+
3235
+ if [ -n "${PROVIDED_REINSTALL_PACKAGES_FROM-}" ] && [ "$(nvm_ensure_version_prefix "${PROVIDED_REINSTALL_PACKAGES_FROM}")" = "${VERSION}" ]; then
3236
+ nvm_err "You can't reinstall global packages from the same version of node you're installing."
3237
+ return 4
3238
+ elif [ "${REINSTALL_PACKAGES_FROM-}" = 'N/A' ]; then
3239
+ nvm_err "If --reinstall-packages-from is provided, it must point to an installed version of node."
3240
+ return 5
3241
+ fi
3242
+
3243
+ local FLAVOR
3244
+ if nvm_is_iojs_version "${VERSION}"; then
3245
+ FLAVOR="$(nvm_iojs_prefix)"
3246
+ else
3247
+ FLAVOR="$(nvm_node_prefix)"
3248
+ fi
3249
+
3250
+ if nvm_is_version_installed "${VERSION}"; then
3251
+ nvm_err "${VERSION} is already installed."
3252
+ if nvm use "${VERSION}"; then
3253
+ if [ "${NVM_UPGRADE_NPM}" = 1 ]; then
3254
+ nvm install-latest-npm
3255
+ fi
3256
+ if [ -z "${SKIP_DEFAULT_PACKAGES-}" ] && [ -n "${DEFAULT_PACKAGES-}" ]; then
3257
+ nvm_install_default_packages "${DEFAULT_PACKAGES}"
3258
+ fi
3259
+ if [ -n "${REINSTALL_PACKAGES_FROM-}" ] && [ "_${REINSTALL_PACKAGES_FROM}" != "_N/A" ]; then
3260
+ nvm reinstall-packages "${REINSTALL_PACKAGES_FROM}"
3261
+ fi
3262
+ fi
3263
+ if [ -n "${LTS-}" ]; then
3264
+ LTS="$(echo "${LTS}" | tr '[:upper:]' '[:lower:]')"
3265
+ nvm_ensure_default_set "lts/${LTS}"
3266
+ else
3267
+ nvm_ensure_default_set "${provided_version}"
3268
+ fi
3269
+
3270
+ if [ -n "${ALIAS-}" ]; then
3271
+ nvm alias "${ALIAS}" "${provided_version}"
3272
+ fi
3273
+
3274
+ return $?
3275
+ fi
3276
+
3277
+ local EXIT_CODE
3278
+ EXIT_CODE=-1
3279
+ if [ -n "${NVM_INSTALL_THIRD_PARTY_HOOK-}" ]; then
3280
+ nvm_err '** $NVM_INSTALL_THIRD_PARTY_HOOK env var set; dispatching to third-party installation method **'
3281
+ local NVM_METHOD_PREFERENCE
3282
+ NVM_METHOD_PREFERENCE='binary'
3283
+ if [ $nobinary -eq 1 ]; then
3284
+ NVM_METHOD_PREFERENCE='source'
3285
+ fi
3286
+ local VERSION_PATH
3287
+ VERSION_PATH="$(nvm_version_path "${VERSION}")"
3288
+ "${NVM_INSTALL_THIRD_PARTY_HOOK}" "${VERSION}" "${FLAVOR}" std "${NVM_METHOD_PREFERENCE}" "${VERSION_PATH}" || {
3289
+ EXIT_CODE=$?
3290
+ nvm_err '*** Third-party $NVM_INSTALL_THIRD_PARTY_HOOK env var failed to install! ***'
3291
+ return $EXIT_CODE
3292
+ }
3293
+ if ! nvm_is_version_installed "${VERSION}"; then
3294
+ nvm_err '*** Third-party $NVM_INSTALL_THIRD_PARTY_HOOK env var claimed to succeed, but failed to install! ***'
3295
+ return 33
3296
+ fi
3297
+ EXIT_CODE=0
3298
+ else
3299
+
3300
+ if [ "_${NVM_OS}" = "_freebsd" ]; then
3301
+ # node.js and io.js do not have a FreeBSD binary
3302
+ nobinary=1
3303
+ nvm_err "Currently, there is no binary for FreeBSD"
3304
+ elif [ "_$NVM_OS" = "_openbsd" ]; then
3305
+ # node.js and io.js do not have a OpenBSD binary
3306
+ nobinary=1
3307
+ nvm_err "Currently, there is no binary for OpenBSD"
3308
+ elif [ "_${NVM_OS}" = "_sunos" ]; then
3309
+ # Not all node/io.js versions have a Solaris binary
3310
+ if ! nvm_has_solaris_binary "${VERSION}"; then
3311
+ nobinary=1
3312
+ nvm_err "Currently, there is no binary of version ${VERSION} for SunOS"
3313
+ fi
3314
+ fi
3315
+
3316
+ # skip binary install if "nobinary" option specified.
3317
+ if [ $nobinary -ne 1 ] && nvm_binary_available "${VERSION}"; then
3318
+ NVM_NO_PROGRESS="${NVM_NO_PROGRESS:-${noprogress}}" nvm_install_binary "${FLAVOR}" std "${VERSION}" "${nosource}"
3319
+ EXIT_CODE=$?
3320
+ fi
3321
+ if [ $EXIT_CODE -ne 0 ]; then
3322
+ if [ -z "${NVM_MAKE_JOBS-}" ]; then
3323
+ nvm_get_make_jobs
3324
+ fi
3325
+
3326
+ if [ "_${NVM_OS}" = "_win" ]; then
3327
+ nvm_err 'Installing from source on non-WSL Windows is not supported'
3328
+ EXIT_CODE=87
3329
+ else
3330
+ NVM_NO_PROGRESS="${NVM_NO_PROGRESS:-${noprogress}}" nvm_install_source "${FLAVOR}" std "${VERSION}" "${NVM_MAKE_JOBS}" "${ADDITIONAL_PARAMETERS}"
3331
+ EXIT_CODE=$?
3332
+ fi
3333
+ fi
3334
+
3335
+ fi
3336
+
3337
+ if [ $EXIT_CODE -eq 0 ] && nvm_use_if_needed "${VERSION}" && nvm_install_npm_if_needed "${VERSION}"; then
3338
+ if [ -n "${LTS-}" ]; then
3339
+ nvm_ensure_default_set "lts/${LTS}"
3340
+ else
3341
+ nvm_ensure_default_set "${provided_version}"
3342
+ fi
3343
+ if [ "${NVM_UPGRADE_NPM}" = 1 ]; then
3344
+ nvm install-latest-npm
3345
+ EXIT_CODE=$?
3346
+ fi
3347
+ if [ -z "${SKIP_DEFAULT_PACKAGES-}" ] && [ -n "${DEFAULT_PACKAGES-}" ]; then
3348
+ nvm_install_default_packages "${DEFAULT_PACKAGES}"
3349
+ fi
3350
+ if [ -n "${REINSTALL_PACKAGES_FROM-}" ] && [ "_${REINSTALL_PACKAGES_FROM}" != "_N/A" ]; then
3351
+ nvm reinstall-packages "${REINSTALL_PACKAGES_FROM}"
3352
+ EXIT_CODE=$?
3353
+ fi
3354
+ else
3355
+ EXIT_CODE=$?
3356
+ fi
3357
+ return $EXIT_CODE
3358
+ ;;
3359
+ "uninstall")
3360
+ if [ $# -ne 1 ]; then
3361
+ >&2 nvm --help
3362
+ return 127
3363
+ fi
3364
+
3365
+ local PATTERN
3366
+ PATTERN="${1-}"
3367
+ case "${PATTERN-}" in
3368
+ --) ;;
3369
+ --lts | 'lts/*')
3370
+ VERSION="$(nvm_match_version "lts/*")"
3371
+ ;;
3372
+ lts/*)
3373
+ VERSION="$(nvm_match_version "lts/${PATTERN##lts/}")"
3374
+ ;;
3375
+ --lts=*)
3376
+ VERSION="$(nvm_match_version "lts/${PATTERN##--lts=}")"
3377
+ ;;
3378
+ *)
3379
+ VERSION="$(nvm_version "${PATTERN}")"
3380
+ ;;
3381
+ esac
3382
+
3383
+ if [ "_${VERSION}" = "_$(nvm_ls_current)" ]; then
3384
+ if nvm_is_iojs_version "${VERSION}"; then
3385
+ nvm_err "nvm: Cannot uninstall currently-active io.js version, ${VERSION} (inferred from ${PATTERN})."
3386
+ else
3387
+ nvm_err "nvm: Cannot uninstall currently-active node version, ${VERSION} (inferred from ${PATTERN})."
3388
+ fi
3389
+ return 1
3390
+ fi
3391
+
3392
+ if ! nvm_is_version_installed "${VERSION}"; then
3393
+ nvm_err "${VERSION} version is not installed..."
3394
+ return
3395
+ fi
3396
+
3397
+ local SLUG_BINARY
3398
+ local SLUG_SOURCE
3399
+ if nvm_is_iojs_version "${VERSION}"; then
3400
+ SLUG_BINARY="$(nvm_get_download_slug iojs binary std "${VERSION}")"
3401
+ SLUG_SOURCE="$(nvm_get_download_slug iojs source std "${VERSION}")"
3402
+ else
3403
+ SLUG_BINARY="$(nvm_get_download_slug node binary std "${VERSION}")"
3404
+ SLUG_SOURCE="$(nvm_get_download_slug node source std "${VERSION}")"
3405
+ fi
3406
+
3407
+ local NVM_SUCCESS_MSG
3408
+ if nvm_is_iojs_version "${VERSION}"; then
3409
+ NVM_SUCCESS_MSG="Uninstalled io.js $(nvm_strip_iojs_prefix "${VERSION}")"
3410
+ else
3411
+ NVM_SUCCESS_MSG="Uninstalled node ${VERSION}"
3412
+ fi
3413
+
3414
+ local VERSION_PATH
3415
+ VERSION_PATH="$(nvm_version_path "${VERSION}")"
3416
+ if ! nvm_check_file_permissions "${VERSION_PATH}"; then
3417
+ nvm_err 'Cannot uninstall, incorrect permissions on installation folder.'
3418
+ 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.'
3419
+ nvm_err
3420
+ nvm_err " chown -R $(whoami) \"$(nvm_sanitize_path "${VERSION_PATH}")\""
3421
+ nvm_err " chmod -R u+w \"$(nvm_sanitize_path "${VERSION_PATH}")\""
3422
+ return 1
3423
+ fi
3424
+
3425
+ # Delete all files related to target version.
3426
+ local CACHE_DIR
3427
+ CACHE_DIR="$(nvm_cache_dir)"
3428
+ command rm -rf \
3429
+ "${CACHE_DIR}/bin/${SLUG_BINARY}/files" \
3430
+ "${CACHE_DIR}/src/${SLUG_SOURCE}/files" \
3431
+ "${VERSION_PATH}" 2>/dev/null
3432
+ nvm_echo "${NVM_SUCCESS_MSG}"
3433
+
3434
+ # rm any aliases that point to uninstalled version.
3435
+ for ALIAS in $(nvm_grep -l "${VERSION}" "$(nvm_alias_path)/*" 2>/dev/null); do
3436
+ nvm unalias "$(command basename "${ALIAS}")"
3437
+ done
3438
+ ;;
3439
+ "deactivate")
3440
+ local NVM_SILENT
3441
+ while [ $# -ne 0 ]; do
3442
+ case "${1}" in
3443
+ --silent) NVM_SILENT=1 ;;
3444
+ --) ;;
3445
+ esac
3446
+ shift
3447
+ done
3448
+ local NEWPATH
3449
+ NEWPATH="$(nvm_strip_path "${PATH}" "/bin")"
3450
+ if [ "_${PATH}" = "_${NEWPATH}" ]; then
3451
+ if [ "${NVM_SILENT:-0}" -ne 1 ]; then
3452
+ nvm_err "Could not find ${NVM_DIR}/*/bin in \${PATH}"
3453
+ fi
3454
+ else
3455
+ export PATH="${NEWPATH}"
3456
+ hash -r
3457
+ if [ "${NVM_SILENT:-0}" -ne 1 ]; then
3458
+ nvm_echo "${NVM_DIR}/*/bin removed from \${PATH}"
3459
+ fi
3460
+ fi
3461
+
3462
+ if [ -n "${MANPATH-}" ]; then
3463
+ NEWPATH="$(nvm_strip_path "${MANPATH}" "/share/man")"
3464
+ if [ "_${MANPATH}" = "_${NEWPATH}" ]; then
3465
+ if [ "${NVM_SILENT:-0}" -ne 1 ]; then
3466
+ nvm_err "Could not find ${NVM_DIR}/*/share/man in \${MANPATH}"
3467
+ fi
3468
+ else
3469
+ export MANPATH="${NEWPATH}"
3470
+ if [ "${NVM_SILENT:-0}" -ne 1 ]; then
3471
+ nvm_echo "${NVM_DIR}/*/share/man removed from \${MANPATH}"
3472
+ fi
3473
+ fi
3474
+ fi
3475
+
3476
+ if [ -n "${NODE_PATH-}" ]; then
3477
+ NEWPATH="$(nvm_strip_path "${NODE_PATH}" "/lib/node_modules")"
3478
+ if [ "_${NODE_PATH}" != "_${NEWPATH}" ]; then
3479
+ export NODE_PATH="${NEWPATH}"
3480
+ if [ "${NVM_SILENT:-0}" -ne 1 ]; then
3481
+ nvm_echo "${NVM_DIR}/*/lib/node_modules removed from \${NODE_PATH}"
3482
+ fi
3483
+ fi
3484
+ fi
3485
+ unset NVM_BIN
3486
+ unset NVM_INC
3487
+ ;;
3488
+ "use")
3489
+ local PROVIDED_VERSION
3490
+ local NVM_SILENT
3491
+ local NVM_SILENT_ARG
3492
+ local NVM_DELETE_PREFIX
3493
+ NVM_DELETE_PREFIX=0
3494
+ local NVM_LTS
3495
+
3496
+ while [ $# -ne 0 ]; do
3497
+ case "$1" in
3498
+ --silent)
3499
+ NVM_SILENT=1
3500
+ NVM_SILENT_ARG='--silent'
3501
+ ;;
3502
+ --delete-prefix) NVM_DELETE_PREFIX=1 ;;
3503
+ --) ;;
3504
+ --lts) NVM_LTS='*' ;;
3505
+ --lts=*) NVM_LTS="${1##--lts=}" ;;
3506
+ --*) ;;
3507
+ *)
3508
+ if [ -n "${1-}" ]; then
3509
+ PROVIDED_VERSION="$1"
3510
+ fi
3511
+ ;;
3512
+ esac
3513
+ shift
3514
+ done
3515
+
3516
+ if [ -n "${NVM_LTS-}" ]; then
3517
+ VERSION="$(nvm_match_version "lts/${NVM_LTS:-*}")"
3518
+ elif [ -z "${PROVIDED_VERSION-}" ]; then
3519
+ NVM_SILENT="${NVM_SILENT:-0}" nvm_rc_version
3520
+ if [ -n "${NVM_RC_VERSION-}" ]; then
3521
+ PROVIDED_VERSION="${NVM_RC_VERSION}"
3522
+ VERSION="$(nvm_version "${PROVIDED_VERSION}")"
3523
+ fi
3524
+ unset NVM_RC_VERSION
3525
+ if [ -z "${VERSION}" ]; then
3526
+ nvm_err 'Please see `nvm --help` or https://github.com/nvm-sh/nvm#nvmrc for more information.'
3527
+ return 127
3528
+ fi
3529
+ else
3530
+ VERSION="$(nvm_match_version "${PROVIDED_VERSION}")"
3531
+ fi
3532
+
3533
+ if [ -z "${VERSION}" ]; then
3534
+ >&2 nvm --help
3535
+ return 127
3536
+ fi
3537
+
3538
+ if [ "_${VERSION}" = '_system' ]; then
3539
+ if nvm_has_system_node && nvm deactivate "${NVM_SILENT_ARG-}" >/dev/null 2>&1; then
3540
+ if [ "${NVM_SILENT:-0}" -ne 1 ]; then
3541
+ nvm_echo "Now using system version of node: $(node -v 2>/dev/null)$(nvm_print_npm_version)"
3542
+ fi
3543
+ return
3544
+ elif nvm_has_system_iojs && nvm deactivate "${NVM_SILENT_ARG-}" >/dev/null 2>&1; then
3545
+ if [ "${NVM_SILENT:-0}" -ne 1 ]; then
3546
+ nvm_echo "Now using system version of io.js: $(iojs --version 2>/dev/null)$(nvm_print_npm_version)"
3547
+ fi
3548
+ return
3549
+ elif [ "${NVM_SILENT:-0}" -ne 1 ]; then
3550
+ nvm_err 'System version of node not found.'
3551
+ fi
3552
+ return 127
3553
+ elif [ "_${VERSION}" = "_∞" ]; then
3554
+ if [ "${NVM_SILENT:-0}" -ne 1 ]; then
3555
+ nvm_err "The alias \"${PROVIDED_VERSION}\" leads to an infinite loop. Aborting."
3556
+ fi
3557
+ return 8
3558
+ fi
3559
+ if [ "${VERSION}" = 'N/A' ]; then
3560
+ if [ "${NVM_SILENT:-0}" -ne 1 ]; then
3561
+ nvm_err "N/A: version \"${PROVIDED_VERSION} -> ${VERSION}\" is not yet installed."
3562
+ nvm_err ""
3563
+ nvm_err "You need to run \"nvm install ${PROVIDED_VERSION}\" to install it before using it."
3564
+ fi
3565
+ return 3
3566
+ # This nvm_ensure_version_installed call can be a performance bottleneck
3567
+ # on shell startup. Perhaps we can optimize it away or make it faster.
3568
+ elif ! nvm_ensure_version_installed "${VERSION}"; then
3569
+ return $?
3570
+ fi
3571
+
3572
+ local NVM_VERSION_DIR
3573
+ NVM_VERSION_DIR="$(nvm_version_path "${VERSION}")"
3574
+
3575
+ # Change current version
3576
+ PATH="$(nvm_change_path "${PATH}" "/bin" "${NVM_VERSION_DIR}")"
3577
+ if nvm_has manpath; then
3578
+ if [ -z "${MANPATH-}" ]; then
3579
+ local MANPATH
3580
+ MANPATH=$(manpath)
3581
+ fi
3582
+ # Change current version
3583
+ MANPATH="$(nvm_change_path "${MANPATH}" "/share/man" "${NVM_VERSION_DIR}")"
3584
+ export MANPATH
3585
+ fi
3586
+ export PATH
3587
+ hash -r
3588
+ export NVM_BIN="${NVM_VERSION_DIR}/bin"
3589
+ export NVM_INC="${NVM_VERSION_DIR}/include/node"
3590
+ if [ "${NVM_SYMLINK_CURRENT-}" = true ]; then
3591
+ command rm -f "${NVM_DIR}/current" && ln -s "${NVM_VERSION_DIR}" "${NVM_DIR}/current"
3592
+ fi
3593
+ local NVM_USE_OUTPUT
3594
+ NVM_USE_OUTPUT=''
3595
+ if [ "${NVM_SILENT:-0}" -ne 1 ]; then
3596
+ if nvm_is_iojs_version "${VERSION}"; then
3597
+ NVM_USE_OUTPUT="Now using io.js $(nvm_strip_iojs_prefix "${VERSION}")$(nvm_print_npm_version)"
3598
+ else
3599
+ NVM_USE_OUTPUT="Now using node ${VERSION}$(nvm_print_npm_version)"
3600
+ fi
3601
+ fi
3602
+ if [ "_${VERSION}" != "_system" ]; then
3603
+ local NVM_USE_CMD
3604
+ NVM_USE_CMD="nvm use --delete-prefix"
3605
+ if [ -n "${PROVIDED_VERSION}" ]; then
3606
+ NVM_USE_CMD="${NVM_USE_CMD} ${VERSION}"
3607
+ fi
3608
+ if [ "${NVM_SILENT:-0}" -eq 1 ]; then
3609
+ NVM_USE_CMD="${NVM_USE_CMD} --silent"
3610
+ fi
3611
+ if ! nvm_die_on_prefix "${NVM_DELETE_PREFIX}" "${NVM_USE_CMD}" "${NVM_VERSION_DIR}"; then
3612
+ return 11
3613
+ fi
3614
+ fi
3615
+ if [ -n "${NVM_USE_OUTPUT-}" ] && [ "${NVM_SILENT:-0}" -ne 1 ]; then
3616
+ nvm_echo "${NVM_USE_OUTPUT}"
3617
+ fi
3618
+ ;;
3619
+ "run")
3620
+ local provided_version
3621
+ local has_checked_nvmrc
3622
+ has_checked_nvmrc=0
3623
+ # run given version of node
3624
+
3625
+ local NVM_SILENT
3626
+ local NVM_SILENT_ARG
3627
+ local NVM_LTS
3628
+ while [ $# -gt 0 ]; do
3629
+ case "$1" in
3630
+ --silent)
3631
+ NVM_SILENT=1
3632
+ NVM_SILENT_ARG='--silent'
3633
+ shift
3634
+ ;;
3635
+ --lts) NVM_LTS='*' ; shift ;;
3636
+ --lts=*) NVM_LTS="${1##--lts=}" ; shift ;;
3637
+ *)
3638
+ if [ -n "$1" ]; then
3639
+ break
3640
+ else
3641
+ shift
3642
+ fi
3643
+ ;; # stop processing arguments
3644
+ esac
3645
+ done
3646
+
3647
+ if [ $# -lt 1 ] && [ -z "${NVM_LTS-}" ]; then
3648
+ NVM_SILENT="${NVM_SILENT:-0}" nvm_rc_version && has_checked_nvmrc=1
3649
+ if [ -n "${NVM_RC_VERSION-}" ]; then
3650
+ VERSION="$(nvm_version "${NVM_RC_VERSION-}")" ||:
3651
+ fi
3652
+ unset NVM_RC_VERSION
3653
+ if [ "${VERSION:-N/A}" = 'N/A' ]; then
3654
+ >&2 nvm --help
3655
+ return 127
3656
+ fi
3657
+ fi
3658
+
3659
+ if [ -z "${NVM_LTS-}" ]; then
3660
+ provided_version="$1"
3661
+ if [ -n "${provided_version}" ]; then
3662
+ VERSION="$(nvm_version "${provided_version}")" ||:
3663
+ if [ "_${VERSION:-N/A}" = '_N/A' ] && ! nvm_is_valid_version "${provided_version}"; then
3664
+ provided_version=''
3665
+ if [ $has_checked_nvmrc -ne 1 ]; then
3666
+ NVM_SILENT="${NVM_SILENT:-0}" nvm_rc_version && has_checked_nvmrc=1
3667
+ fi
3668
+ VERSION="$(nvm_version "${NVM_RC_VERSION}")" ||:
3669
+ unset NVM_RC_VERSION
3670
+ else
3671
+ shift
3672
+ fi
3673
+ fi
3674
+ fi
3675
+
3676
+ local NVM_IOJS
3677
+ if nvm_is_iojs_version "${VERSION}"; then
3678
+ NVM_IOJS=true
3679
+ fi
3680
+
3681
+ local EXIT_CODE
3682
+
3683
+ nvm_is_zsh && setopt local_options shwordsplit
3684
+ local LTS_ARG
3685
+ if [ -n "${NVM_LTS-}" ]; then
3686
+ LTS_ARG="--lts=${NVM_LTS-}"
3687
+ VERSION=''
3688
+ fi
3689
+ if [ "_${VERSION}" = "_N/A" ]; then
3690
+ nvm_ensure_version_installed "${provided_version}"
3691
+ elif [ "${NVM_IOJS}" = true ]; then
3692
+ nvm exec "${NVM_SILENT_ARG-}" "${LTS_ARG-}" "${VERSION}" iojs "$@"
3693
+ else
3694
+ nvm exec "${NVM_SILENT_ARG-}" "${LTS_ARG-}" "${VERSION}" node "$@"
3695
+ fi
3696
+ EXIT_CODE="$?"
3697
+ return $EXIT_CODE
3698
+ ;;
3699
+ "exec")
3700
+ local NVM_SILENT
3701
+ local NVM_LTS
3702
+ while [ $# -gt 0 ]; do
3703
+ case "$1" in
3704
+ --silent) NVM_SILENT=1 ; shift ;;
3705
+ --lts) NVM_LTS='*' ; shift ;;
3706
+ --lts=*) NVM_LTS="${1##--lts=}" ; shift ;;
3707
+ --) break ;;
3708
+ --*)
3709
+ nvm_err "Unsupported option \"$1\"."
3710
+ return 55
3711
+ ;;
3712
+ *)
3713
+ if [ -n "$1" ]; then
3714
+ break
3715
+ else
3716
+ shift
3717
+ fi
3718
+ ;; # stop processing arguments
3719
+ esac
3720
+ done
3721
+
3722
+ local provided_version
3723
+ provided_version="$1"
3724
+ if [ "${NVM_LTS-}" != '' ]; then
3725
+ provided_version="lts/${NVM_LTS:-*}"
3726
+ VERSION="${provided_version}"
3727
+ elif [ -n "${provided_version}" ]; then
3728
+ VERSION="$(nvm_version "${provided_version}")" ||:
3729
+ if [ "_${VERSION}" = '_N/A' ] && ! nvm_is_valid_version "${provided_version}"; then
3730
+ NVM_SILENT="${NVM_SILENT:-0}" nvm_rc_version && has_checked_nvmrc=1
3731
+ provided_version="${NVM_RC_VERSION}"
3732
+ unset NVM_RC_VERSION
3733
+ VERSION="$(nvm_version "${provided_version}")" ||:
3734
+ else
3735
+ shift
3736
+ fi
3737
+ fi
3738
+
3739
+ nvm_ensure_version_installed "${provided_version}"
3740
+ EXIT_CODE=$?
3741
+ if [ "${EXIT_CODE}" != "0" ]; then
3742
+ return $EXIT_CODE
3743
+ fi
3744
+
3745
+ if [ "${NVM_SILENT:-0}" -ne 1 ]; then
3746
+ if [ "${NVM_LTS-}" = '*' ]; then
3747
+ nvm_echo "Running node latest LTS -> $(nvm_version "${VERSION}")$(nvm use --silent "${VERSION}" && nvm_print_npm_version)"
3748
+ elif [ -n "${NVM_LTS-}" ]; then
3749
+ nvm_echo "Running node LTS \"${NVM_LTS-}\" -> $(nvm_version "${VERSION}")$(nvm use --silent "${VERSION}" && nvm_print_npm_version)"
3750
+ elif nvm_is_iojs_version "${VERSION}"; then
3751
+ nvm_echo "Running io.js $(nvm_strip_iojs_prefix "${VERSION}")$(nvm use --silent "${VERSION}" && nvm_print_npm_version)"
3752
+ else
3753
+ nvm_echo "Running node ${VERSION}$(nvm use --silent "${VERSION}" && nvm_print_npm_version)"
3754
+ fi
3755
+ fi
3756
+ NODE_VERSION="${VERSION}" "${NVM_DIR}/nvm-exec" "$@"
3757
+ ;;
3758
+ "ls" | "list")
3759
+ local PATTERN
3760
+ local NVM_NO_COLORS
3761
+ local NVM_NO_ALIAS
3762
+
3763
+ while [ $# -gt 0 ]; do
3764
+ case "${1}" in
3765
+ --) ;;
3766
+ --no-colors) NVM_NO_COLORS="${1}" ;;
3767
+ --no-alias) NVM_NO_ALIAS="${1}" ;;
3768
+ --*)
3769
+ nvm_err "Unsupported option \"${1}\"."
3770
+ return 55
3771
+ ;;
3772
+ *)
3773
+ PATTERN="${PATTERN:-$1}"
3774
+ ;;
3775
+ esac
3776
+ shift
3777
+ done
3778
+ if [ -n "${PATTERN-}" ] && [ -n "${NVM_NO_ALIAS-}" ]; then
3779
+ nvm_err '`--no-alias` is not supported when a pattern is provided.'
3780
+ return 55
3781
+ fi
3782
+ local NVM_LS_OUTPUT
3783
+ local NVM_LS_EXIT_CODE
3784
+ NVM_LS_OUTPUT=$(nvm_ls "${PATTERN-}")
3785
+ NVM_LS_EXIT_CODE=$?
3786
+ NVM_NO_COLORS="${NVM_NO_COLORS-}" nvm_print_versions "${NVM_LS_OUTPUT}"
3787
+ if [ -z "${NVM_NO_ALIAS-}" ] && [ -z "${PATTERN-}" ]; then
3788
+ if [ -n "${NVM_NO_COLORS-}" ]; then
3789
+ nvm alias --no-colors
3790
+ else
3791
+ nvm alias
3792
+ fi
3793
+ fi
3794
+ return $NVM_LS_EXIT_CODE
3795
+ ;;
3796
+ "ls-remote" | "list-remote")
3797
+ local NVM_LTS
3798
+ local PATTERN
3799
+ local NVM_NO_COLORS
3800
+
3801
+ while [ $# -gt 0 ]; do
3802
+ case "${1-}" in
3803
+ --) ;;
3804
+ --lts)
3805
+ NVM_LTS='*'
3806
+ ;;
3807
+ --lts=*)
3808
+ NVM_LTS="${1##--lts=}"
3809
+ ;;
3810
+ --no-colors) NVM_NO_COLORS="${1}" ;;
3811
+ --*)
3812
+ nvm_err "Unsupported option \"${1}\"."
3813
+ return 55
3814
+ ;;
3815
+ *)
3816
+ if [ -z "${PATTERN-}" ]; then
3817
+ PATTERN="${1-}"
3818
+ if [ -z "${NVM_LTS-}" ]; then
3819
+ case "${PATTERN}" in
3820
+ 'lts/*')
3821
+ NVM_LTS='*'
3822
+ PATTERN=''
3823
+ ;;
3824
+ lts/*)
3825
+ NVM_LTS="${PATTERN##lts/}"
3826
+ PATTERN=''
3827
+ ;;
3828
+ esac
3829
+ fi
3830
+ fi
3831
+ ;;
3832
+ esac
3833
+ shift
3834
+ done
3835
+
3836
+ local NVM_OUTPUT
3837
+ local EXIT_CODE
3838
+ NVM_OUTPUT="$(NVM_LTS="${NVM_LTS-}" nvm_remote_versions "${PATTERN}" &&:)"
3839
+ EXIT_CODE=$?
3840
+ if [ -n "${NVM_OUTPUT}" ]; then
3841
+ NVM_NO_COLORS="${NVM_NO_COLORS-}" nvm_print_versions "${NVM_OUTPUT}"
3842
+ return $EXIT_CODE
3843
+ fi
3844
+ NVM_NO_COLORS="${NVM_NO_COLORS-}" nvm_print_versions "N/A"
3845
+ return 3
3846
+ ;;
3847
+ "current")
3848
+ nvm_version current
3849
+ ;;
3850
+ "which")
3851
+ local NVM_SILENT
3852
+ local provided_version
3853
+ while [ $# -ne 0 ]; do
3854
+ case "${1}" in
3855
+ --silent) NVM_SILENT=1 ;;
3856
+ --) ;;
3857
+ *) provided_version="${1-}" ;;
3858
+ esac
3859
+ shift
3860
+ done
3861
+ if [ -z "${provided_version-}" ]; then
3862
+ NVM_SILENT="${NVM_SILENT:-0}" nvm_rc_version
3863
+ if [ -n "${NVM_RC_VERSION}" ]; then
3864
+ provided_version="${NVM_RC_VERSION}"
3865
+ VERSION=$(nvm_version "${NVM_RC_VERSION}") ||:
3866
+ fi
3867
+ unset NVM_RC_VERSION
3868
+ elif [ "${provided_version}" != 'system' ]; then
3869
+ VERSION="$(nvm_version "${provided_version}")" ||:
3870
+ else
3871
+ VERSION="${provided_version-}"
3872
+ fi
3873
+ if [ -z "${VERSION}" ]; then
3874
+ >&2 nvm --help
3875
+ return 127
3876
+ fi
3877
+
3878
+ if [ "_${VERSION}" = '_system' ]; then
3879
+ if nvm_has_system_iojs >/dev/null 2>&1 || nvm_has_system_node >/dev/null 2>&1; then
3880
+ local NVM_BIN
3881
+ NVM_BIN="$(nvm use system >/dev/null 2>&1 && command which node)"
3882
+ if [ -n "${NVM_BIN}" ]; then
3883
+ nvm_echo "${NVM_BIN}"
3884
+ return
3885
+ fi
3886
+ return 1
3887
+ fi
3888
+ nvm_err 'System version of node not found.'
3889
+ return 127
3890
+ elif [ "${VERSION}" = '∞' ]; then
3891
+ nvm_err "The alias \"${2}\" leads to an infinite loop. Aborting."
3892
+ return 8
3893
+ fi
3894
+
3895
+ nvm_ensure_version_installed "${provided_version}"
3896
+ EXIT_CODE=$?
3897
+ if [ "${EXIT_CODE}" != "0" ]; then
3898
+ return $EXIT_CODE
3899
+ fi
3900
+ local NVM_VERSION_DIR
3901
+ NVM_VERSION_DIR="$(nvm_version_path "${VERSION}")"
3902
+ nvm_echo "${NVM_VERSION_DIR}/bin/node"
3903
+ ;;
3904
+ "alias")
3905
+ local NVM_ALIAS_DIR
3906
+ NVM_ALIAS_DIR="$(nvm_alias_path)"
3907
+ local NVM_CURRENT
3908
+ NVM_CURRENT="$(nvm_ls_current)"
3909
+
3910
+ command mkdir -p "${NVM_ALIAS_DIR}/lts"
3911
+
3912
+ local ALIAS
3913
+ local TARGET
3914
+ local NVM_NO_COLORS
3915
+ ALIAS='--'
3916
+ TARGET='--'
3917
+
3918
+ while [ $# -gt 0 ]; do
3919
+ case "${1-}" in
3920
+ --) ;;
3921
+ --no-colors) NVM_NO_COLORS="${1}" ;;
3922
+ --*)
3923
+ nvm_err "Unsupported option \"${1}\"."
3924
+ return 55
3925
+ ;;
3926
+ *)
3927
+ if [ "${ALIAS}" = '--' ]; then
3928
+ ALIAS="${1-}"
3929
+ elif [ "${TARGET}" = '--' ]; then
3930
+ TARGET="${1-}"
3931
+ fi
3932
+ ;;
3933
+ esac
3934
+ shift
3935
+ done
3936
+
3937
+ if [ -z "${TARGET}" ]; then
3938
+ # for some reason the empty string was explicitly passed as the target
3939
+ # so, unalias it.
3940
+ nvm unalias "${ALIAS}"
3941
+ return $?
3942
+ elif [ "${TARGET}" != '--' ]; then
3943
+ # a target was passed: create an alias
3944
+ if [ "${ALIAS#*\/}" != "${ALIAS}" ]; then
3945
+ nvm_err 'Aliases in subdirectories are not supported.'
3946
+ return 1
3947
+ fi
3948
+ VERSION="$(nvm_version "${TARGET}")" ||:
3949
+ if [ "${VERSION}" = 'N/A' ]; then
3950
+ nvm_err "! WARNING: Version '${TARGET}' does not exist."
3951
+ fi
3952
+ nvm_make_alias "${ALIAS}" "${TARGET}"
3953
+ NVM_NO_COLORS="${NVM_NO_COLORS-}" NVM_CURRENT="${NVM_CURRENT-}" DEFAULT=false nvm_print_formatted_alias "${ALIAS}" "${TARGET}" "${VERSION}"
3954
+ else
3955
+ if [ "${ALIAS-}" = '--' ]; then
3956
+ unset ALIAS
3957
+ fi
3958
+
3959
+ nvm_list_aliases "${ALIAS-}"
3960
+ fi
3961
+ ;;
3962
+ "unalias")
3963
+ local NVM_ALIAS_DIR
3964
+ NVM_ALIAS_DIR="$(nvm_alias_path)"
3965
+ command mkdir -p "${NVM_ALIAS_DIR}"
3966
+ if [ $# -ne 1 ]; then
3967
+ >&2 nvm --help
3968
+ return 127
3969
+ fi
3970
+ if [ "${1#*\/}" != "${1-}" ]; then
3971
+ nvm_err 'Aliases in subdirectories are not supported.'
3972
+ return 1
3973
+ fi
3974
+
3975
+ local NVM_IOJS_PREFIX
3976
+ local NVM_NODE_PREFIX
3977
+ NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
3978
+ NVM_NODE_PREFIX="$(nvm_node_prefix)"
3979
+ local NVM_ALIAS_EXISTS
3980
+ NVM_ALIAS_EXISTS=0
3981
+ if [ -f "${NVM_ALIAS_DIR}/${1-}" ]; then
3982
+ NVM_ALIAS_EXISTS=1
3983
+ fi
3984
+
3985
+ if [ $NVM_ALIAS_EXISTS -eq 0 ]; then
3986
+ case "$1" in
3987
+ "stable" | "unstable" | "${NVM_IOJS_PREFIX}" | "${NVM_NODE_PREFIX}" | "system")
3988
+ nvm_err "${1-} is a default (built-in) alias and cannot be deleted."
3989
+ return 1
3990
+ ;;
3991
+ esac
3992
+
3993
+ nvm_err "Alias ${1-} doesn't exist!"
3994
+ return
3995
+ fi
3996
+
3997
+ local NVM_ALIAS_ORIGINAL
3998
+ NVM_ALIAS_ORIGINAL="$(nvm_alias "${1}")"
3999
+ command rm -f "${NVM_ALIAS_DIR}/${1}"
4000
+ nvm_echo "Deleted alias ${1} - restore it with \`nvm alias \"${1}\" \"${NVM_ALIAS_ORIGINAL}\"\`"
4001
+ ;;
4002
+ "install-latest-npm")
4003
+ if [ $# -ne 0 ]; then
4004
+ >&2 nvm --help
4005
+ return 127
4006
+ fi
4007
+
4008
+ nvm_install_latest_npm
4009
+ ;;
4010
+ "reinstall-packages" | "copy-packages")
4011
+ if [ $# -ne 1 ]; then
4012
+ >&2 nvm --help
4013
+ return 127
4014
+ fi
4015
+
4016
+ local PROVIDED_VERSION
4017
+ PROVIDED_VERSION="${1-}"
4018
+
4019
+ if [ "${PROVIDED_VERSION}" = "$(nvm_ls_current)" ] || [ "$(nvm_version "${PROVIDED_VERSION}" ||:)" = "$(nvm_ls_current)" ]; then
4020
+ nvm_err 'Can not reinstall packages from the current version of node.'
4021
+ return 2
4022
+ fi
4023
+
4024
+ local VERSION
4025
+ if [ "_${PROVIDED_VERSION}" = "_system" ]; then
4026
+ if ! nvm_has_system_node && ! nvm_has_system_iojs; then
4027
+ nvm_err 'No system version of node or io.js detected.'
4028
+ return 3
4029
+ fi
4030
+ VERSION="system"
4031
+ else
4032
+ VERSION="$(nvm_version "${PROVIDED_VERSION}")" ||:
4033
+ fi
4034
+
4035
+ local NPMLIST
4036
+ NPMLIST="$(nvm_npm_global_modules "${VERSION}")"
4037
+ local INSTALLS
4038
+ local LINKS
4039
+ INSTALLS="${NPMLIST%% //// *}"
4040
+ LINKS="${NPMLIST##* //// }"
4041
+
4042
+ nvm_echo "Reinstalling global packages from ${VERSION}..."
4043
+ if [ -n "${INSTALLS}" ]; then
4044
+ nvm_echo "${INSTALLS}" | command xargs npm install -g --quiet
4045
+ else
4046
+ nvm_echo "No installed global packages found..."
4047
+ fi
4048
+
4049
+ nvm_echo "Linking global packages from ${VERSION}..."
4050
+ if [ -n "${LINKS}" ]; then
4051
+ (
4052
+ set -f; IFS='
4053
+ ' # necessary to turn off variable expansion except for newlines
4054
+ for LINK in ${LINKS}; do
4055
+ set +f; unset IFS # restore variable expansion
4056
+ if [ -n "${LINK}" ]; then
4057
+ case "${LINK}" in
4058
+ '/'*) (nvm_cd "${LINK}" && npm link) ;;
4059
+ *) (nvm_cd "$(npm root -g)/../${LINK}" && npm link)
4060
+ esac
4061
+ fi
4062
+ done
4063
+ )
4064
+ else
4065
+ nvm_echo "No linked global packages found..."
4066
+ fi
4067
+ ;;
4068
+ "clear-cache")
4069
+ command rm -f "${NVM_DIR}/v*" "$(nvm_version_dir)" 2>/dev/null
4070
+ nvm_echo 'nvm cache cleared.'
4071
+ ;;
4072
+ "version")
4073
+ nvm_version "${1}"
4074
+ ;;
4075
+ "version-remote")
4076
+ local NVM_LTS
4077
+ local PATTERN
4078
+ while [ $# -gt 0 ]; do
4079
+ case "${1-}" in
4080
+ --) ;;
4081
+ --lts)
4082
+ NVM_LTS='*'
4083
+ ;;
4084
+ --lts=*)
4085
+ NVM_LTS="${1##--lts=}"
4086
+ ;;
4087
+ --*)
4088
+ nvm_err "Unsupported option \"${1}\"."
4089
+ return 55
4090
+ ;;
4091
+ *)
4092
+ PATTERN="${PATTERN:-${1}}"
4093
+ ;;
4094
+ esac
4095
+ shift
4096
+ done
4097
+ case "${PATTERN-}" in
4098
+ 'lts/*')
4099
+ NVM_LTS='*'
4100
+ unset PATTERN
4101
+ ;;
4102
+ lts/*)
4103
+ NVM_LTS="${PATTERN##lts/}"
4104
+ unset PATTERN
4105
+ ;;
4106
+ esac
4107
+ NVM_VERSION_ONLY=true NVM_LTS="${NVM_LTS-}" nvm_remote_version "${PATTERN:-node}"
4108
+ ;;
4109
+ "--version" | "-v")
4110
+ nvm_echo '0.39.1'
4111
+ ;;
4112
+ "unload")
4113
+ nvm deactivate >/dev/null 2>&1
4114
+ unset -f nvm \
4115
+ nvm_iojs_prefix nvm_node_prefix \
4116
+ nvm_add_iojs_prefix nvm_strip_iojs_prefix \
4117
+ nvm_is_iojs_version nvm_is_alias nvm_has_non_aliased \
4118
+ nvm_ls_remote nvm_ls_remote_iojs nvm_ls_remote_index_tab \
4119
+ nvm_ls nvm_remote_version nvm_remote_versions \
4120
+ nvm_install_binary nvm_install_source nvm_clang_version \
4121
+ nvm_get_mirror nvm_get_download_slug nvm_download_artifact \
4122
+ nvm_install_npm_if_needed nvm_use_if_needed nvm_check_file_permissions \
4123
+ nvm_print_versions nvm_compute_checksum \
4124
+ nvm_get_checksum_binary \
4125
+ nvm_get_checksum_alg nvm_get_checksum nvm_compare_checksum \
4126
+ nvm_version nvm_rc_version nvm_match_version \
4127
+ nvm_ensure_default_set nvm_get_arch nvm_get_os \
4128
+ nvm_print_implicit_alias nvm_validate_implicit_alias \
4129
+ nvm_resolve_alias nvm_ls_current nvm_alias \
4130
+ nvm_binary_available nvm_change_path nvm_strip_path \
4131
+ nvm_num_version_groups nvm_format_version nvm_ensure_version_prefix \
4132
+ nvm_normalize_version nvm_is_valid_version nvm_normalize_lts \
4133
+ nvm_ensure_version_installed nvm_cache_dir \
4134
+ nvm_version_path nvm_alias_path nvm_version_dir \
4135
+ nvm_find_nvmrc nvm_find_up nvm_find_project_dir nvm_tree_contains_path \
4136
+ nvm_version_greater nvm_version_greater_than_or_equal_to \
4137
+ nvm_print_npm_version nvm_install_latest_npm nvm_npm_global_modules \
4138
+ nvm_has_system_node nvm_has_system_iojs \
4139
+ nvm_download nvm_get_latest nvm_has nvm_install_default_packages nvm_get_default_packages \
4140
+ nvm_curl_use_compression nvm_curl_version \
4141
+ nvm_auto nvm_supports_xz \
4142
+ nvm_echo nvm_err nvm_grep nvm_cd \
4143
+ nvm_die_on_prefix nvm_get_make_jobs nvm_get_minor_version \
4144
+ nvm_has_solaris_binary nvm_is_merged_node_version \
4145
+ nvm_is_natural_num nvm_is_version_installed \
4146
+ nvm_list_aliases nvm_make_alias nvm_print_alias_path \
4147
+ nvm_print_default_alias nvm_print_formatted_alias nvm_resolve_local_alias \
4148
+ nvm_sanitize_path nvm_has_colors nvm_process_parameters \
4149
+ nvm_node_version_has_solaris_binary nvm_iojs_version_has_solaris_binary \
4150
+ nvm_curl_libz_support nvm_command_info nvm_is_zsh nvm_stdout_is_terminal \
4151
+ nvm_npmrc_bad_news_bears \
4152
+ nvm_get_colors nvm_set_colors nvm_print_color_code nvm_format_help_message_colors \
4153
+ nvm_echo_with_colors nvm_err_with_colors \
4154
+ nvm_get_artifact_compression nvm_install_binary_extract \
4155
+ >/dev/null 2>&1
4156
+ unset NVM_RC_VERSION NVM_NODEJS_ORG_MIRROR NVM_IOJS_ORG_MIRROR NVM_DIR \
4157
+ NVM_CD_FLAGS NVM_BIN NVM_INC NVM_MAKE_JOBS \
4158
+ NVM_COLORS INSTALLED_COLOR SYSTEM_COLOR \
4159
+ CURRENT_COLOR NOT_INSTALLED_COLOR DEFAULT_COLOR LTS_COLOR \
4160
+ >/dev/null 2>&1
4161
+ ;;
4162
+ "set-colors")
4163
+ local EXIT_CODE
4164
+ nvm_set_colors "${1-}"
4165
+ EXIT_CODE=$?
4166
+ if [ "$EXIT_CODE" -eq 17 ]; then
4167
+ >&2 nvm --help
4168
+ nvm_echo
4169
+ nvm_err_with_colors "\033[1;37mPlease pass in five \033[1;31mvalid color codes\033[1;37m. Choose from: rRgGbBcCyYmMkKeW\033[0m"
4170
+ fi
4171
+ ;;
4172
+ *)
4173
+ >&2 nvm --help
4174
+ return 127
4175
+ ;;
4176
+ esac
4177
+ }
4178
+
4179
+ nvm_get_default_packages() {
4180
+ local NVM_DEFAULT_PACKAGE_FILE="${NVM_DIR}/default-packages"
4181
+ if [ -f "${NVM_DEFAULT_PACKAGE_FILE}" ]; then
4182
+ local DEFAULT_PACKAGES
4183
+ DEFAULT_PACKAGES=''
4184
+
4185
+ # Read lines from $NVM_DIR/default-packages
4186
+ local line
4187
+ # ensure a trailing newline
4188
+ WORK=$(mktemp -d) || exit $?
4189
+ # shellcheck disable=SC2064
4190
+ trap "command rm -rf '$WORK'" EXIT
4191
+ # shellcheck disable=SC1003
4192
+ sed -e '$a\' "${NVM_DEFAULT_PACKAGE_FILE}" > "${WORK}/default-packages"
4193
+ while IFS=' ' read -r line; do
4194
+ # Skip empty lines.
4195
+ [ -n "${line-}" ] || continue
4196
+
4197
+ # Skip comment lines that begin with `#`.
4198
+ [ "$(nvm_echo "${line}" | command cut -c1)" != "#" ] || continue
4199
+
4200
+ # Fail on lines that have multiple space-separated words
4201
+ case $line in
4202
+ *\ *)
4203
+ 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."
4204
+ return 1
4205
+ ;;
4206
+ esac
4207
+
4208
+ DEFAULT_PACKAGES="${DEFAULT_PACKAGES}${line} "
4209
+ done < "${WORK}/default-packages"
4210
+ echo "${DEFAULT_PACKAGES}" | command xargs
4211
+ fi
4212
+ }
4213
+
4214
+ nvm_install_default_packages() {
4215
+ nvm_echo "Installing default global packages from ${NVM_DIR}/default-packages..."
4216
+ nvm_echo "npm install -g --quiet $1"
4217
+
4218
+ if ! nvm_echo "$1" | command xargs npm install -g --quiet; then
4219
+ nvm_err "Failed installing default packages. Please check if your default-packages file or a package in it has problems!"
4220
+ return 1
4221
+ fi
4222
+ }
4223
+
4224
+ nvm_supports_xz() {
4225
+ if [ -z "${1-}" ]; then
4226
+ return 1
4227
+ fi
4228
+
4229
+ local NVM_OS
4230
+ NVM_OS="$(nvm_get_os)"
4231
+ if [ "_${NVM_OS}" = '_darwin' ]; then
4232
+ local MACOS_VERSION
4233
+ MACOS_VERSION="$(sw_vers -productVersion)"
4234
+ if nvm_version_greater "10.9.0" "${MACOS_VERSION}"; then
4235
+ # macOS 10.8 and earlier doesn't support extracting xz-compressed tarballs with tar
4236
+ return 1
4237
+ fi
4238
+ elif [ "_${NVM_OS}" = '_freebsd' ]; then
4239
+ if ! [ -e '/usr/lib/liblzma.so' ]; then
4240
+ # FreeBSD without /usr/lib/liblzma.so doesn't support extracting xz-compressed tarballs with tar
4241
+ return 1
4242
+ fi
4243
+ else
4244
+ if ! command which xz >/dev/null 2>&1; then
4245
+ # Most OSes without xz on the PATH don't support extracting xz-compressed tarballs with tar
4246
+ # (Should correctly handle Linux, SmartOS, maybe more)
4247
+ return 1
4248
+ fi
4249
+ fi
4250
+
4251
+ # all node versions v4.0.0 and later have xz
4252
+ if nvm_is_merged_node_version "${1}"; then
4253
+ return 0
4254
+ fi
4255
+
4256
+ # 0.12x: node v0.12.10 and later have xz
4257
+ if nvm_version_greater_than_or_equal_to "${1}" "0.12.10" && nvm_version_greater "0.13.0" "${1}"; then
4258
+ return 0
4259
+ fi
4260
+
4261
+ # 0.10x: node v0.10.42 and later have xz
4262
+ if nvm_version_greater_than_or_equal_to "${1}" "0.10.42" && nvm_version_greater "0.11.0" "${1}"; then
4263
+ return 0
4264
+ fi
4265
+
4266
+ case "${NVM_OS}" in
4267
+ darwin)
4268
+ # darwin only has xz for io.js v2.3.2 and later
4269
+ nvm_version_greater_than_or_equal_to "${1}" "2.3.2"
4270
+ ;;
4271
+ *)
4272
+ nvm_version_greater_than_or_equal_to "${1}" "1.0.0"
4273
+ ;;
4274
+ esac
4275
+ return $?
4276
+ }
4277
+
4278
+ nvm_auto() {
4279
+ local NVM_MODE
4280
+ NVM_MODE="${1-}"
4281
+ local VERSION
4282
+ local NVM_CURRENT
4283
+ if [ "_${NVM_MODE}" = '_install' ]; then
4284
+ VERSION="$(nvm_alias default 2>/dev/null || nvm_echo)"
4285
+ if [ -n "${VERSION}" ]; then
4286
+ nvm install "${VERSION}" >/dev/null
4287
+ elif nvm_rc_version >/dev/null 2>&1; then
4288
+ nvm install >/dev/null
4289
+ fi
4290
+ elif [ "_$NVM_MODE" = '_use' ]; then
4291
+ NVM_CURRENT="$(nvm_ls_current)"
4292
+ if [ "_${NVM_CURRENT}" = '_none' ] || [ "_${NVM_CURRENT}" = '_system' ]; then
4293
+ VERSION="$(nvm_resolve_local_alias default 2>/dev/null || nvm_echo)"
4294
+ if [ -n "${VERSION}" ]; then
4295
+ nvm use --silent "${VERSION}" >/dev/null
4296
+ elif nvm_rc_version >/dev/null 2>&1; then
4297
+ nvm use --silent >/dev/null
4298
+ fi
4299
+ else
4300
+ nvm use --silent "${NVM_CURRENT}" >/dev/null
4301
+ fi
4302
+ elif [ "_${NVM_MODE}" != '_none' ]; then
4303
+ nvm_err 'Invalid auto mode supplied.'
4304
+ return 1
4305
+ fi
4306
+ }
4307
+
4308
+ nvm_process_parameters() {
4309
+ local NVM_AUTO_MODE
4310
+ NVM_AUTO_MODE='use'
4311
+ while [ "$#" -ne 0 ]; do
4312
+ case "$1" in
4313
+ --install) NVM_AUTO_MODE='install' ;;
4314
+ --no-use) NVM_AUTO_MODE='none' ;;
4315
+ esac
4316
+ shift
4317
+ done
4318
+ nvm_auto "${NVM_AUTO_MODE}"
4319
+ }
4320
+
4321
+ nvm_process_parameters "$@"
4322
+
4323
+ } # this ensures the entire script is downloaded #