netcron 1.0.7

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 netcron might be problematic. Click here for more details.

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