browserify_rb 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,2284 @@
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
+ { # this ensures the entire script is downloaded #
10
+
11
+ NVM_SCRIPT_SOURCE="$_"
12
+
13
+ nvm_has() {
14
+ type "$1" > /dev/null 2>&1
15
+ }
16
+
17
+ nvm_is_alias() {
18
+ # this is intentionally not "command alias" so it works in zsh.
19
+ \alias "$1" > /dev/null 2>&1
20
+ }
21
+
22
+ nvm_get_latest() {
23
+ local NVM_LATEST_URL
24
+ if nvm_has "curl"; then
25
+ NVM_LATEST_URL="$(curl -q -w "%{url_effective}\n" -L -s -S http://latest.nvm.sh -o /dev/null)"
26
+ elif nvm_has "wget"; then
27
+ NVM_LATEST_URL="$(wget http://latest.nvm.sh --server-response -O /dev/null 2>&1 | command awk '/^ Location: /{DEST=$2} END{ print DEST }')"
28
+ else
29
+ >&2 echo 'nvm needs curl or wget to proceed.'
30
+ return 1
31
+ fi
32
+ if [ "_$NVM_LATEST_URL" = "_" ]; then
33
+ >&2 echo "http://latest.nvm.sh did not redirect to the latest release on Github"
34
+ return 2
35
+ else
36
+ echo "$NVM_LATEST_URL" | command awk -F '/' '{print $NF}'
37
+ fi
38
+ }
39
+
40
+ nvm_download() {
41
+ if nvm_has "curl"; then
42
+ curl -q $*
43
+ elif nvm_has "wget"; then
44
+ # Emulate curl with wget
45
+ ARGS=$(echo "$*" | command sed -e 's/--progress-bar /--progress=bar /' \
46
+ -e 's/-L //' \
47
+ -e 's/-I /--server-response /' \
48
+ -e 's/-s /-q /' \
49
+ -e 's/-o /-O /' \
50
+ -e 's/-C - /-c /')
51
+ eval wget $ARGS
52
+ fi
53
+ }
54
+
55
+ nvm_has_system_node() {
56
+ [ "$(nvm deactivate >/dev/null 2>&1 && command -v node)" != '' ]
57
+ }
58
+
59
+ nvm_has_system_iojs() {
60
+ [ "$(nvm deactivate >/dev/null 2>&1 && command -v iojs)" != '' ]
61
+ }
62
+
63
+ nvm_print_npm_version() {
64
+ if nvm_has "npm"; then
65
+ echo " (npm v$(npm --version 2>/dev/null))"
66
+ fi
67
+ }
68
+
69
+ # Make zsh glob matching behave same as bash
70
+ # This fixes the "zsh: no matches found" errors
71
+ if nvm_has "unsetopt"; then
72
+ unsetopt nomatch 2>/dev/null
73
+ NVM_CD_FLAGS="-q"
74
+ fi
75
+
76
+ # Auto detect the NVM_DIR when not set
77
+ if [ -z "$NVM_DIR" ]; then
78
+ if [ -n "$BASH_SOURCE" ]; then
79
+ NVM_SCRIPT_SOURCE="${BASH_SOURCE[0]}"
80
+ fi
81
+ NVM_DIR="$(cd $NVM_CD_FLAGS "$(dirname "${NVM_SCRIPT_SOURCE:-$0}")" > /dev/null && \pwd)"
82
+ export NVM_DIR
83
+ fi
84
+ unset NVM_SCRIPT_SOURCE 2> /dev/null
85
+
86
+
87
+ # Setup mirror location if not already set
88
+ if [ -z "$NVM_NODEJS_ORG_MIRROR" ]; then
89
+ export NVM_NODEJS_ORG_MIRROR="https://nodejs.org/dist"
90
+ fi
91
+
92
+ if [ -z "$NVM_IOJS_ORG_MIRROR" ]; then
93
+ export NVM_IOJS_ORG_MIRROR="https://iojs.org/dist"
94
+ fi
95
+
96
+ nvm_tree_contains_path() {
97
+ local tree
98
+ tree="$1"
99
+ local node_path
100
+ node_path="$2"
101
+
102
+ if [ "@$tree@" = "@@" ] || [ "@$node_path@" = "@@" ]; then
103
+ >&2 echo "both the tree and the node path are required"
104
+ return 2
105
+ fi
106
+
107
+ local pathdir
108
+ pathdir=$(dirname "$node_path")
109
+ while [ "$pathdir" != "" ] && [ "$pathdir" != "." ] && [ "$pathdir" != "/" ] && [ "$pathdir" != "$tree" ]; do
110
+ pathdir=$(dirname "$pathdir")
111
+ done
112
+ [ "$pathdir" = "$tree" ]
113
+ }
114
+
115
+ # Traverse up in directory tree to find containing folder
116
+ nvm_find_up() {
117
+ local path
118
+ path=$PWD
119
+ while [ "$path" != "" ] && [ ! -f "$path/$1" ]; do
120
+ path=${path%/*}
121
+ done
122
+ echo "$path"
123
+ }
124
+
125
+
126
+ nvm_find_nvmrc() {
127
+ local dir
128
+ dir="$(nvm_find_up '.nvmrc')"
129
+ if [ -e "$dir/.nvmrc" ]; then
130
+ echo "$dir/.nvmrc"
131
+ fi
132
+ }
133
+
134
+ # Obtain nvm version from rc file
135
+ nvm_rc_version() {
136
+ export NVM_RC_VERSION=''
137
+ local NVMRC_PATH
138
+ NVMRC_PATH="$(nvm_find_nvmrc)"
139
+ if [ -e "$NVMRC_PATH" ]; then
140
+ read -r NVM_RC_VERSION < "$NVMRC_PATH"
141
+ echo "Found '$NVMRC_PATH' with version <$NVM_RC_VERSION>"
142
+ else
143
+ >&2 echo "No .nvmrc file found"
144
+ return 1
145
+ fi
146
+ }
147
+
148
+ nvm_version_greater() {
149
+ local LHS
150
+ LHS="$(nvm_normalize_version "$1")"
151
+ local RHS
152
+ RHS="$(nvm_normalize_version "$2")"
153
+ [ "$LHS" -gt "$RHS" ];
154
+ }
155
+
156
+ nvm_version_greater_than_or_equal_to() {
157
+ local LHS
158
+ LHS="$(nvm_normalize_version "$1")"
159
+ local RHS
160
+ RHS="$(nvm_normalize_version "$2")"
161
+ [ "$LHS" -ge "$RHS" ];
162
+ }
163
+
164
+ nvm_version_dir() {
165
+ local NVM_WHICH_DIR
166
+ NVM_WHICH_DIR="$1"
167
+ if [ -z "$NVM_WHICH_DIR" ] || [ "_$NVM_WHICH_DIR" = "_new" ]; then
168
+ echo "$NVM_DIR/versions/node"
169
+ elif [ "_$NVM_WHICH_DIR" = "_iojs" ]; then
170
+ echo "$NVM_DIR/versions/io.js"
171
+ elif [ "_$NVM_WHICH_DIR" = "_old" ]; then
172
+ echo "$NVM_DIR"
173
+ else
174
+ echo "unknown version dir" >&2
175
+ return 3
176
+ fi
177
+ }
178
+
179
+ nvm_alias_path() {
180
+ echo "$(nvm_version_dir old)/alias"
181
+ }
182
+
183
+ nvm_version_path() {
184
+ local VERSION
185
+ VERSION="$1"
186
+ if [ -z "$VERSION" ]; then
187
+ echo "version is required" >&2
188
+ return 3
189
+ elif nvm_is_iojs_version "$VERSION"; then
190
+ echo "$(nvm_version_dir iojs)/$(nvm_strip_iojs_prefix "$VERSION")"
191
+ elif nvm_version_greater 0.12.0 "$VERSION"; then
192
+ echo "$(nvm_version_dir old)/$VERSION"
193
+ else
194
+ echo "$(nvm_version_dir new)/$VERSION"
195
+ fi
196
+ }
197
+
198
+ nvm_ensure_version_installed() {
199
+ local PROVIDED_VERSION
200
+ PROVIDED_VERSION="$1"
201
+ local LOCAL_VERSION
202
+ local EXIT_CODE
203
+ LOCAL_VERSION="$(nvm_version "$PROVIDED_VERSION")"
204
+ EXIT_CODE="$?"
205
+ local NVM_VERSION_DIR
206
+ if [ "_$EXIT_CODE" = "_0" ]; then
207
+ NVM_VERSION_DIR="$(nvm_version_path "$LOCAL_VERSION")"
208
+ fi
209
+ if [ "_$EXIT_CODE" != "_0" ] || [ ! -d "$NVM_VERSION_DIR" ]; then
210
+ VERSION="$(nvm_resolve_alias "$PROVIDED_VERSION")"
211
+ if [ $? -eq 0 ]; then
212
+ echo "N/A: version \"$PROVIDED_VERSION -> $VERSION\" is not yet installed" >&2
213
+ else
214
+ local PREFIXED_VERSION
215
+ PREFIXED_VERSION="$(nvm_ensure_version_prefix "$PROVIDED_VERSION")"
216
+ echo "N/A: version \"${PREFIXED_VERSION:-$PROVIDED_VERSION}\" is not yet installed" >&2
217
+ fi
218
+ return 1
219
+ fi
220
+ }
221
+
222
+ # Expand a version using the version cache
223
+ nvm_version() {
224
+ local PATTERN
225
+ PATTERN="$1"
226
+ local VERSION
227
+ # The default version is the current one
228
+ if [ -z "$PATTERN" ]; then
229
+ PATTERN='current'
230
+ fi
231
+
232
+ if [ "$PATTERN" = "current" ]; then
233
+ nvm_ls_current
234
+ return $?
235
+ fi
236
+
237
+ local NVM_NODE_PREFIX
238
+ NVM_NODE_PREFIX="$(nvm_node_prefix)"
239
+ case "_$PATTERN" in
240
+ "_$NVM_NODE_PREFIX" | "_$NVM_NODE_PREFIX-")
241
+ PATTERN="stable"
242
+ ;;
243
+ esac
244
+ VERSION="$(nvm_ls "$PATTERN" | command tail -n1)"
245
+ if [ -z "$VERSION" ] || [ "_$VERSION" = "_N/A" ]; then
246
+ echo "N/A"
247
+ return 3;
248
+ else
249
+ echo "$VERSION"
250
+ fi
251
+ }
252
+
253
+ nvm_remote_version() {
254
+ local PATTERN
255
+ PATTERN="$1"
256
+ local VERSION
257
+ if nvm_validate_implicit_alias "$PATTERN" 2> /dev/null ; then
258
+ case "_$PATTERN" in
259
+ "_$(nvm_iojs_prefix)")
260
+ VERSION="$(nvm_ls_remote_iojs | command tail -n1)"
261
+ ;;
262
+ *)
263
+ VERSION="$(nvm_ls_remote "$PATTERN")"
264
+ ;;
265
+ esac
266
+ else
267
+ VERSION="$(nvm_remote_versions "$PATTERN" | command tail -n1)"
268
+ fi
269
+ echo "$VERSION"
270
+ if [ "_$VERSION" = '_N/A' ]; then
271
+ return 3
272
+ fi
273
+ }
274
+
275
+ nvm_remote_versions() {
276
+ local NVM_IOJS_PREFIX
277
+ NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
278
+ local PATTERN
279
+ PATTERN="$1"
280
+ case "_$PATTERN" in
281
+ "_$NVM_IOJS_PREFIX" | "_io.js")
282
+ VERSIONS="$(nvm_ls_remote_iojs)"
283
+ ;;
284
+ "_$(nvm_node_prefix)")
285
+ VERSIONS="$(nvm_ls_remote)"
286
+ ;;
287
+ *)
288
+ if nvm_validate_implicit_alias "$PATTERN" 2> /dev/null ; then
289
+ echo >&2 "Implicit aliases are not supported in nvm_remote_versions."
290
+ return 1
291
+ fi
292
+ VERSIONS="$(echo "$(nvm_ls_remote "$PATTERN")
293
+ $(nvm_ls_remote_iojs "$PATTERN")" | command grep -v "N/A" | command sed '/^$/d')"
294
+ ;;
295
+ esac
296
+
297
+ if [ -z "$VERSIONS" ]; then
298
+ echo "N/A"
299
+ return 3
300
+ else
301
+ echo "$VERSIONS"
302
+ fi
303
+ }
304
+
305
+ nvm_is_valid_version() {
306
+ if nvm_validate_implicit_alias "$1" 2> /dev/null; then
307
+ return 0
308
+ fi
309
+ case "$1" in
310
+ "$(nvm_iojs_prefix)" | \
311
+ "$(nvm_node_prefix)")
312
+ return 0
313
+ ;;
314
+ *)
315
+ local VERSION
316
+ VERSION="$(nvm_strip_iojs_prefix "$1")"
317
+ nvm_version_greater "$VERSION"
318
+ ;;
319
+ esac
320
+ }
321
+
322
+ nvm_normalize_version() {
323
+ echo "${1#v}" | command awk -F. '{ printf("%d%06d%06d\n", $1,$2,$3); }'
324
+ }
325
+
326
+ nvm_ensure_version_prefix() {
327
+ local NVM_VERSION
328
+ NVM_VERSION="$(nvm_strip_iojs_prefix "$1" | command sed -e 's/^\([0-9]\)/v\1/g')"
329
+ if nvm_is_iojs_version "$1"; then
330
+ nvm_add_iojs_prefix "$NVM_VERSION"
331
+ else
332
+ echo "$NVM_VERSION"
333
+ fi
334
+ }
335
+
336
+ nvm_format_version() {
337
+ local VERSION
338
+ VERSION="$(nvm_ensure_version_prefix "$1")"
339
+ if [ "_$(nvm_num_version_groups "$VERSION")" != "_3" ]; then
340
+ nvm_format_version "${VERSION%.}.0"
341
+ else
342
+ echo "$VERSION"
343
+ fi
344
+ }
345
+
346
+ nvm_num_version_groups() {
347
+ local VERSION
348
+ VERSION="$1"
349
+ VERSION="${VERSION#v}"
350
+ VERSION="${VERSION%.}"
351
+ if [ -z "$VERSION" ]; then
352
+ echo "0"
353
+ return
354
+ fi
355
+ local NVM_NUM_DOTS
356
+ NVM_NUM_DOTS=$(echo "$VERSION" | command sed -e 's/[^\.]//g')
357
+ local NVM_NUM_GROUPS
358
+ NVM_NUM_GROUPS=".$NVM_NUM_DOTS" # add extra dot, since it's (n - 1) dots at this point
359
+ echo "${#NVM_NUM_GROUPS}"
360
+ }
361
+
362
+ nvm_strip_path() {
363
+ echo "$1" | command sed \
364
+ -e "s#$NVM_DIR/[^/]*$2[^:]*:##g" \
365
+ -e "s#:$NVM_DIR/[^/]*$2[^:]*##g" \
366
+ -e "s#$NVM_DIR/[^/]*$2[^:]*##g" \
367
+ -e "s#$NVM_DIR/versions/[^/]*/[^/]*$2[^:]*:##g" \
368
+ -e "s#:$NVM_DIR/versions/[^/]*/[^/]*$2[^:]*##g" \
369
+ -e "s#$NVM_DIR/versions/[^/]*/[^/]*$2[^:]*##g"
370
+ }
371
+
372
+ nvm_prepend_path() {
373
+ if [ -z "$1" ]; then
374
+ echo "$2"
375
+ else
376
+ echo "$2:$1"
377
+ fi
378
+ }
379
+
380
+ nvm_binary_available() {
381
+ # binaries started with node 0.8.6
382
+ local FIRST_VERSION_WITH_BINARY
383
+ FIRST_VERSION_WITH_BINARY="0.8.6"
384
+ nvm_version_greater_than_or_equal_to "$(nvm_strip_iojs_prefix "$1")" "$FIRST_VERSION_WITH_BINARY"
385
+ }
386
+
387
+ nvm_alias() {
388
+ local ALIAS
389
+ ALIAS="$1"
390
+ if [ -z "$ALIAS" ]; then
391
+ echo >&2 'An alias is required.'
392
+ return 1
393
+ fi
394
+
395
+ local NVM_ALIAS_PATH
396
+ NVM_ALIAS_PATH="$(nvm_alias_path)/$ALIAS"
397
+ if [ ! -f "$NVM_ALIAS_PATH" ]; then
398
+ echo >&2 'Alias does not exist.'
399
+ return 2
400
+ fi
401
+
402
+ command cat "$NVM_ALIAS_PATH"
403
+ }
404
+
405
+ nvm_ls_current() {
406
+ local NVM_LS_CURRENT_NODE_PATH
407
+ NVM_LS_CURRENT_NODE_PATH="$(command which node 2> /dev/null)"
408
+ if [ $? -ne 0 ]; then
409
+ echo 'none'
410
+ elif nvm_tree_contains_path "$(nvm_version_dir iojs)" "$NVM_LS_CURRENT_NODE_PATH"; then
411
+ nvm_add_iojs_prefix "$(iojs --version 2>/dev/null)"
412
+ elif nvm_tree_contains_path "$NVM_DIR" "$NVM_LS_CURRENT_NODE_PATH"; then
413
+ local VERSION
414
+ VERSION="$(node --version 2>/dev/null)"
415
+ if [ "$VERSION" = "v0.6.21-pre" ]; then
416
+ echo "v0.6.21"
417
+ else
418
+ echo "$VERSION"
419
+ fi
420
+ else
421
+ echo 'system'
422
+ fi
423
+ }
424
+
425
+ nvm_resolve_alias() {
426
+ if [ -z "$1" ]; then
427
+ return 1
428
+ fi
429
+
430
+ local PATTERN
431
+ PATTERN="$1"
432
+
433
+ local ALIAS
434
+ ALIAS="$PATTERN"
435
+ local ALIAS_TEMP
436
+
437
+ local SEEN_ALIASES
438
+ SEEN_ALIASES="$ALIAS"
439
+ while true; do
440
+ ALIAS_TEMP="$(nvm_alias "$ALIAS" 2> /dev/null)"
441
+
442
+ if [ -z "$ALIAS_TEMP" ]; then
443
+ break
444
+ fi
445
+
446
+ if [ -n "$ALIAS_TEMP" ] \
447
+ && command printf "$SEEN_ALIASES" | command grep -e "^$ALIAS_TEMP$" > /dev/null; then
448
+ ALIAS="∞"
449
+ break
450
+ fi
451
+
452
+ SEEN_ALIASES="$SEEN_ALIASES\n$ALIAS_TEMP"
453
+ ALIAS="$ALIAS_TEMP"
454
+ done
455
+
456
+ if [ -n "$ALIAS" ] && [ "_$ALIAS" != "_$PATTERN" ]; then
457
+ local NVM_IOJS_PREFIX
458
+ NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
459
+ local NVM_NODE_PREFIX
460
+ NVM_NODE_PREFIX="$(nvm_node_prefix)"
461
+ case "_$ALIAS" in
462
+ "_∞" | \
463
+ "_$NVM_IOJS_PREFIX" | "_$NVM_IOJS_PREFIX-" | \
464
+ "_$NVM_NODE_PREFIX" )
465
+ echo "$ALIAS"
466
+ ;;
467
+ *)
468
+ nvm_ensure_version_prefix "$ALIAS"
469
+ ;;
470
+ esac
471
+ return 0
472
+ fi
473
+
474
+ if nvm_validate_implicit_alias "$PATTERN" 2> /dev/null ; then
475
+ local IMPLICIT
476
+ IMPLICIT="$(nvm_print_implicit_alias local "$PATTERN" 2> /dev/null)"
477
+ if [ -n "$IMPLICIT" ]; then
478
+ nvm_ensure_version_prefix "$IMPLICIT"
479
+ fi
480
+ fi
481
+
482
+ return 2
483
+ }
484
+
485
+ nvm_resolve_local_alias() {
486
+ if [ -z "$1" ]; then
487
+ return 1
488
+ fi
489
+
490
+ local VERSION
491
+ local EXIT_CODE
492
+ VERSION="$(nvm_resolve_alias "$1")"
493
+ EXIT_CODE=$?
494
+ if [ -z "$VERSION" ]; then
495
+ return $EXIT_CODE
496
+ fi
497
+ if [ "_$VERSION" != "_∞" ]; then
498
+ nvm_version "$VERSION"
499
+ else
500
+ echo "$VERSION"
501
+ fi
502
+ }
503
+
504
+ nvm_iojs_prefix() {
505
+ echo "iojs"
506
+ }
507
+ nvm_node_prefix() {
508
+ echo "node"
509
+ }
510
+
511
+ nvm_is_iojs_version() {
512
+ case "$1" in iojs-*) return 0 ;; esac
513
+ return 1
514
+ }
515
+
516
+ nvm_add_iojs_prefix() {
517
+ command echo "$(nvm_iojs_prefix)-$(nvm_ensure_version_prefix "$(nvm_strip_iojs_prefix "$1")")"
518
+ }
519
+
520
+ nvm_strip_iojs_prefix() {
521
+ local NVM_IOJS_PREFIX
522
+ NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
523
+ if [ "_$1" = "_$NVM_IOJS_PREFIX" ]; then
524
+ echo
525
+ else
526
+ echo "${1#"$NVM_IOJS_PREFIX"-}"
527
+ fi
528
+ }
529
+
530
+ nvm_ls() {
531
+ local PATTERN
532
+ PATTERN="$1"
533
+ local VERSIONS
534
+ VERSIONS=''
535
+ if [ "$PATTERN" = 'current' ]; then
536
+ nvm_ls_current
537
+ return
538
+ fi
539
+
540
+ local NVM_IOJS_PREFIX
541
+ NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
542
+ local NVM_NODE_PREFIX
543
+ NVM_NODE_PREFIX="$(nvm_node_prefix)"
544
+ local NVM_VERSION_DIR_IOJS
545
+ NVM_VERSION_DIR_IOJS="$(nvm_version_dir "$NVM_IOJS_PREFIX")"
546
+ local NVM_VERSION_DIR_NEW
547
+ NVM_VERSION_DIR_NEW="$(nvm_version_dir new)"
548
+ local NVM_VERSION_DIR_OLD
549
+ NVM_VERSION_DIR_OLD="$(nvm_version_dir old)"
550
+
551
+ case "$PATTERN" in
552
+ "$NVM_IOJS_PREFIX" | "$NVM_NODE_PREFIX" )
553
+ PATTERN="$PATTERN-"
554
+ ;;
555
+ *)
556
+ if nvm_resolve_local_alias "$PATTERN"; then
557
+ return
558
+ fi
559
+ PATTERN="$(nvm_ensure_version_prefix "$PATTERN")"
560
+ ;;
561
+ esac
562
+ if [ "_$PATTERN" = "_N/A" ]; then
563
+ return
564
+ fi
565
+ # If it looks like an explicit version, don't do anything funny
566
+ local NVM_PATTERN_STARTS_WITH_V
567
+ case $PATTERN in
568
+ v*) NVM_PATTERN_STARTS_WITH_V=true ;;
569
+ *) NVM_PATTERN_STARTS_WITH_V=false ;;
570
+ esac
571
+ if [ $NVM_PATTERN_STARTS_WITH_V = true ] && [ "_$(nvm_num_version_groups "$PATTERN")" = "_3" ]; then
572
+ if [ -d "$(nvm_version_path "$PATTERN")" ]; then
573
+ VERSIONS="$PATTERN"
574
+ elif [ -d "$(nvm_version_path "$(nvm_add_iojs_prefix "$PATTERN")")" ]; then
575
+ VERSIONS="$(nvm_add_iojs_prefix "$PATTERN")"
576
+ fi
577
+ else
578
+ case "$PATTERN" in
579
+ "$NVM_IOJS_PREFIX-" | "$NVM_NODE_PREFIX-" | "system") ;;
580
+ *)
581
+ local NUM_VERSION_GROUPS
582
+ NUM_VERSION_GROUPS="$(nvm_num_version_groups "$PATTERN")"
583
+ if [ "_$NUM_VERSION_GROUPS" = "_2" ] || [ "_$NUM_VERSION_GROUPS" = "_1" ]; then
584
+ PATTERN="${PATTERN%.}."
585
+ fi
586
+ ;;
587
+ esac
588
+
589
+ local ZHS_HAS_SHWORDSPLIT_UNSET
590
+ ZHS_HAS_SHWORDSPLIT_UNSET=1
591
+ if nvm_has "setopt"; then
592
+ ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | command grep shwordsplit > /dev/null ; echo $?)
593
+ setopt shwordsplit
594
+ fi
595
+
596
+ local NVM_DIRS_TO_SEARCH1
597
+ NVM_DIRS_TO_SEARCH1=''
598
+ local NVM_DIRS_TO_SEARCH2
599
+ NVM_DIRS_TO_SEARCH2=''
600
+ local NVM_DIRS_TO_SEARCH3
601
+ NVM_DIRS_TO_SEARCH3=''
602
+ local NVM_ADD_SYSTEM
603
+ NVM_ADD_SYSTEM=false
604
+ if nvm_is_iojs_version "$PATTERN"; then
605
+ NVM_DIRS_TO_SEARCH1="$NVM_VERSION_DIR_IOJS"
606
+ PATTERN="$(nvm_strip_iojs_prefix "$PATTERN")"
607
+ if nvm_has_system_iojs; then
608
+ NVM_ADD_SYSTEM=true
609
+ fi
610
+ elif [ "_$PATTERN" = "_$NVM_NODE_PREFIX-" ]; then
611
+ NVM_DIRS_TO_SEARCH1="$NVM_VERSION_DIR_OLD"
612
+ NVM_DIRS_TO_SEARCH2="$NVM_VERSION_DIR_NEW"
613
+ PATTERN=''
614
+ if nvm_has_system_node; then
615
+ NVM_ADD_SYSTEM=true
616
+ fi
617
+ else
618
+ NVM_DIRS_TO_SEARCH1="$NVM_VERSION_DIR_OLD"
619
+ NVM_DIRS_TO_SEARCH2="$NVM_VERSION_DIR_NEW"
620
+ NVM_DIRS_TO_SEARCH3="$NVM_VERSION_DIR_IOJS"
621
+ if nvm_has_system_iojs || nvm_has_system_node; then
622
+ NVM_ADD_SYSTEM=true
623
+ fi
624
+ fi
625
+
626
+ if ! [ -d "$NVM_DIRS_TO_SEARCH1" ]; then
627
+ NVM_DIRS_TO_SEARCH1=''
628
+ fi
629
+ if ! [ -d "$NVM_DIRS_TO_SEARCH2" ]; then
630
+ NVM_DIRS_TO_SEARCH2="$NVM_DIRS_TO_SEARCH1"
631
+ fi
632
+ if ! [ -d "$NVM_DIRS_TO_SEARCH3" ]; then
633
+ NVM_DIRS_TO_SEARCH3="$NVM_DIRS_TO_SEARCH2"
634
+ fi
635
+
636
+ if [ -z "$PATTERN" ]; then
637
+ PATTERN='v'
638
+ fi
639
+ if [ -n "$NVM_DIRS_TO_SEARCH1$NVM_DIRS_TO_SEARCH2$NVM_DIRS_TO_SEARCH3" ]; then
640
+ VERSIONS="$(command find "$NVM_DIRS_TO_SEARCH1" "$NVM_DIRS_TO_SEARCH2" "$NVM_DIRS_TO_SEARCH3" -maxdepth 1 -type d -name "$PATTERN*" \
641
+ | command sed "
642
+ s#$NVM_VERSION_DIR_IOJS/#$NVM_IOJS_PREFIX-#;
643
+ \#$NVM_VERSION_DIR_IOJS# d;
644
+ s#^$NVM_DIR/##;
645
+ \#^versions\$# d;
646
+ s#^versions/##;
647
+ s#^v#$NVM_NODE_PREFIX-v#;
648
+ s#^\($NVM_IOJS_PREFIX\)[-/]v#\1.v#;
649
+ s#^\($NVM_NODE_PREFIX\)[-/]v#\1.v#" \
650
+ | command sort -t. -u -k 2.2,2n -k 3,3n -k 4,4n \
651
+ | command sed "
652
+ s/^\($NVM_IOJS_PREFIX\)\./\1-/;
653
+ s/^$NVM_NODE_PREFIX\.//" \
654
+ )"
655
+ fi
656
+
657
+ if [ "$ZHS_HAS_SHWORDSPLIT_UNSET" -eq 1 ] && nvm_has "unsetopt"; then
658
+ unsetopt shwordsplit
659
+ fi
660
+ fi
661
+
662
+ if [ "$NVM_ADD_SYSTEM" = true ]; then
663
+ if [ -z "$PATTERN" ] || [ "_$PATTERN" = "_v" ]; then
664
+ VERSIONS="$VERSIONS$(command printf '\n%s' 'system')"
665
+ elif [ "$PATTERN" = 'system' ]; then
666
+ VERSIONS="$(command printf '%s' 'system')"
667
+ fi
668
+ fi
669
+
670
+ if [ -z "$VERSIONS" ]; then
671
+ echo "N/A"
672
+ return 3
673
+ fi
674
+
675
+ echo "$VERSIONS"
676
+ }
677
+
678
+ nvm_ls_remote() {
679
+ local PATTERN
680
+ PATTERN="$1"
681
+ if nvm_validate_implicit_alias "$PATTERN" 2> /dev/null ; then
682
+ PATTERN="$(nvm_ls_remote "$(nvm_print_implicit_alias remote "$PATTERN")" | command tail -n1)"
683
+ elif [ -n "$PATTERN" ]; then
684
+ PATTERN="$(nvm_ensure_version_prefix "$PATTERN")"
685
+ else
686
+ PATTERN=".*"
687
+ fi
688
+ nvm_ls_remote_index_tab node std "$NVM_NODEJS_ORG_MIRROR" "$PATTERN"
689
+ }
690
+
691
+ nvm_ls_remote_iojs() {
692
+ nvm_ls_remote_index_tab iojs std "$NVM_IOJS_ORG_MIRROR" "$1"
693
+ }
694
+
695
+ nvm_ls_remote_index_tab() {
696
+ if [ "$#" -lt 4 ]; then
697
+ echo "not enough arguments" >&2
698
+ return 5
699
+ fi
700
+ local TYPE
701
+ TYPE="$1"
702
+ local PREFIX
703
+ case "$TYPE-$2" in
704
+ iojs-std) PREFIX="$(nvm_iojs_prefix)-" ;;
705
+ node-std) PREFIX='' ;;
706
+ iojs-*)
707
+ echo "unknown type of io.js release" >&2
708
+ return 4
709
+ ;;
710
+ node-*)
711
+ echo "unknown type of node.js release" >&2
712
+ return 4
713
+ ;;
714
+ esac
715
+ local SORT_COMMAND
716
+ SORT_COMMAND='sort'
717
+ case "$TYPE" in
718
+ node) SORT_COMMAND='sort -t. -u -k 1.2,1n -k 2,2n -k 3,3n' ;;
719
+ esac
720
+ local MIRROR
721
+ MIRROR="$3"
722
+ local PATTERN
723
+ PATTERN="$4"
724
+ local VERSIONS
725
+ if [ -n "$PATTERN" ]; then
726
+ if [ "_$TYPE" = "_iojs" ]; then
727
+ PATTERN="$(nvm_ensure_version_prefix "$(nvm_strip_iojs_prefix "$PATTERN")")"
728
+ else
729
+ PATTERN="$(nvm_ensure_version_prefix "$PATTERN")"
730
+ fi
731
+ else
732
+ PATTERN=".*"
733
+ fi
734
+ ZHS_HAS_SHWORDSPLIT_UNSET=1
735
+ if nvm_has "setopt"; then
736
+ ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | command grep shwordsplit > /dev/null ; echo $?)
737
+ setopt shwordsplit
738
+ fi
739
+ VERSIONS="$(nvm_download -L -s "$MIRROR/index.tab" -o - \
740
+ | command sed "
741
+ 1d;
742
+ s/^/$PREFIX/;
743
+ s/[[:blank:]].*//" \
744
+ | command grep -w "$PATTERN" \
745
+ | $SORT_COMMAND)"
746
+ if [ "$ZHS_HAS_SHWORDSPLIT_UNSET" -eq 1 ] && nvm_has "unsetopt"; then
747
+ unsetopt shwordsplit
748
+ fi
749
+ if [ -z "$VERSIONS" ]; then
750
+ echo "N/A"
751
+ return 3
752
+ fi
753
+ echo "$VERSIONS"
754
+ }
755
+
756
+ nvm_checksum() {
757
+ local NVM_CHECKSUM
758
+ if nvm_has "sha1sum" && ! nvm_is_alias "sha1sum"; then
759
+ NVM_CHECKSUM="$(command sha1sum "$1" | command awk '{print $1}')"
760
+ elif nvm_has "sha1" && ! nvm_is_alias "sha1"; then
761
+ NVM_CHECKSUM="$(command sha1 -q "$1")"
762
+ elif nvm_has "shasum" && ! nvm_is_alias "shasum"; then
763
+ NVM_CHECKSUM="$(shasum "$1" | command awk '{print $1}')"
764
+ else
765
+ echo "Unaliased sha1sum, sha1, or shasum not found." >&2
766
+ return 2
767
+ fi
768
+
769
+ if [ "_$NVM_CHECKSUM" = "_$2" ]; then
770
+ return
771
+ elif [ -z "$2" ]; then
772
+ echo 'Checksums empty' #missing in raspberry pi binary
773
+ return
774
+ else
775
+ echo 'Checksums do not match.' >&2
776
+ return 1
777
+ fi
778
+ }
779
+
780
+ nvm_print_versions() {
781
+ local VERSION
782
+ local FORMAT
783
+ local NVM_CURRENT
784
+ NVM_CURRENT=$(nvm_ls_current)
785
+ echo "$1" | while read -r VERSION; do
786
+ if [ "_$VERSION" = "_$NVM_CURRENT" ]; then
787
+ FORMAT='\033[0;32m-> %12s\033[0m'
788
+ elif [ "$VERSION" = "system" ]; then
789
+ FORMAT='\033[0;33m%15s\033[0m'
790
+ elif [ -d "$(nvm_version_path "$VERSION" 2> /dev/null)" ]; then
791
+ FORMAT='\033[0;34m%15s\033[0m'
792
+ else
793
+ FORMAT='%15s'
794
+ fi
795
+ command printf "$FORMAT\n" "$VERSION"
796
+ done
797
+ }
798
+
799
+ nvm_validate_implicit_alias() {
800
+ local NVM_IOJS_PREFIX
801
+ NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
802
+ local NVM_NODE_PREFIX
803
+ NVM_NODE_PREFIX="$(nvm_node_prefix)"
804
+
805
+ case "$1" in
806
+ "stable" | "unstable" | "$NVM_IOJS_PREFIX" | "$NVM_NODE_PREFIX" )
807
+ return
808
+ ;;
809
+ *)
810
+ echo "Only implicit aliases 'stable', 'unstable', '$NVM_IOJS_PREFIX', and '$NVM_NODE_PREFIX' are supported." >&2
811
+ return 1
812
+ ;;
813
+ esac
814
+ }
815
+
816
+ nvm_print_implicit_alias() {
817
+ if [ "_$1" != "_local" ] && [ "_$1" != "_remote" ]; then
818
+ echo "nvm_print_implicit_alias must be specified with local or remote as the first argument." >&2
819
+ return 1
820
+ fi
821
+
822
+ local NVM_IMPLICIT
823
+ NVM_IMPLICIT="$2"
824
+ if ! nvm_validate_implicit_alias "$NVM_IMPLICIT"; then
825
+ return 2
826
+ fi
827
+
828
+ local ZHS_HAS_SHWORDSPLIT_UNSET
829
+
830
+ local NVM_IOJS_PREFIX
831
+ NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
832
+ local NVM_NODE_PREFIX
833
+ NVM_NODE_PREFIX="$(nvm_node_prefix)"
834
+ local NVM_COMMAND
835
+ local NVM_ADD_PREFIX_COMMAND
836
+ local LAST_TWO
837
+ case "$NVM_IMPLICIT" in
838
+ "$NVM_IOJS_PREFIX" | "$NVM_IOJS_RC_PREFIX")
839
+ NVM_COMMAND="nvm_ls_remote_iojs"
840
+ NVM_ADD_PREFIX_COMMAND="nvm_add_iojs_prefix"
841
+ if [ "_$1" = "_local" ]; then
842
+ NVM_COMMAND="nvm_ls $NVM_IMPLICIT"
843
+ fi
844
+
845
+ ZHS_HAS_SHWORDSPLIT_UNSET=1
846
+ if nvm_has "setopt"; then
847
+ ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | command grep shwordsplit > /dev/null ; echo $?)
848
+ setopt shwordsplit
849
+ fi
850
+
851
+ local NVM_IOJS_VERSION
852
+ local EXIT_CODE
853
+ NVM_IOJS_VERSION="$($NVM_COMMAND)"
854
+ EXIT_CODE="$?"
855
+ if [ "_$EXIT_CODE" = "_0" ]; then
856
+ NVM_IOJS_VERSION="$(echo "$NVM_IOJS_VERSION" | sed "s/^$NVM_IMPLICIT-//" | command grep -e '^v' | command cut -c2- | command cut -d . -f 1,2 | uniq | command tail -1)"
857
+ fi
858
+
859
+ if [ "$ZHS_HAS_SHWORDSPLIT_UNSET" -eq 1 ] && nvm_has "unsetopt"; then
860
+ unsetopt shwordsplit
861
+ fi
862
+
863
+ if [ "_$NVM_IOJS_VERSION" = "_N/A" ]; then
864
+ echo "N/A"
865
+ else
866
+ $NVM_ADD_PREFIX_COMMAND "$NVM_IOJS_VERSION"
867
+ fi
868
+ return $EXIT_CODE
869
+ ;;
870
+ "$NVM_NODE_PREFIX")
871
+ echo "stable"
872
+ return
873
+ ;;
874
+ *)
875
+ NVM_COMMAND="nvm_ls_remote"
876
+ if [ "_$1" = "_local" ]; then
877
+ NVM_COMMAND="nvm_ls node"
878
+ fi
879
+
880
+ ZHS_HAS_SHWORDSPLIT_UNSET=1
881
+ if nvm_has "setopt"; then
882
+ ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | command grep shwordsplit > /dev/null ; echo $?)
883
+ setopt shwordsplit
884
+ fi
885
+
886
+ LAST_TWO=$($NVM_COMMAND | command grep -e '^v' | command cut -c2- | command cut -d . -f 1,2 | uniq)
887
+
888
+ if [ "$ZHS_HAS_SHWORDSPLIT_UNSET" -eq 1 ] && nvm_has "unsetopt"; then
889
+ unsetopt shwordsplit
890
+ fi
891
+ ;;
892
+ esac
893
+ local MINOR
894
+ local STABLE
895
+ local UNSTABLE
896
+ local MOD
897
+ local NORMALIZED_VERSION
898
+
899
+ ZHS_HAS_SHWORDSPLIT_UNSET=1
900
+ if nvm_has "setopt"; then
901
+ ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | command grep shwordsplit > /dev/null ; echo $?)
902
+ setopt shwordsplit
903
+ fi
904
+ for MINOR in $LAST_TWO; do
905
+ NORMALIZED_VERSION="$(nvm_normalize_version "$MINOR")"
906
+ if [ "_0${NORMALIZED_VERSION#?}" != "_$NORMALIZED_VERSION" ]; then
907
+ STABLE="$MINOR"
908
+ else
909
+ MOD=$(expr "$NORMALIZED_VERSION" \/ 1000000 \% 2)
910
+ if [ "$MOD" -eq 0 ]; then
911
+ STABLE="$MINOR"
912
+ elif [ "$MOD" -eq 1 ]; then
913
+ UNSTABLE="$MINOR"
914
+ fi
915
+ fi
916
+ done
917
+ if [ "$ZHS_HAS_SHWORDSPLIT_UNSET" -eq 1 ] && nvm_has "unsetopt"; then
918
+ unsetopt shwordsplit
919
+ fi
920
+
921
+ if [ "_$2" = '_stable' ]; then
922
+ echo "${STABLE}"
923
+ elif [ "_$2" = '_unstable' ]; then
924
+ echo "${UNSTABLE}"
925
+ fi
926
+ }
927
+
928
+ nvm_get_os() {
929
+ local NVM_UNAME
930
+ NVM_UNAME="$(uname -a)"
931
+ local NVM_OS
932
+ case "$NVM_UNAME" in
933
+ Linux\ *) NVM_OS=linux ;;
934
+ Darwin\ *) NVM_OS=darwin ;;
935
+ SunOS\ *) NVM_OS=sunos ;;
936
+ FreeBSD\ *) NVM_OS=freebsd ;;
937
+ esac
938
+ echo "$NVM_OS"
939
+ }
940
+
941
+ nvm_get_arch() {
942
+ local HOST_ARCH
943
+ local NVM_OS
944
+ local EXIT_CODE
945
+
946
+ NVM_OS="$(nvm_get_os)"
947
+ # If the OS is SunOS, first try to use pkgsrc to guess
948
+ # the most appropriate arch. If it's not available, use
949
+ # isainfo to get the instruction set supported by the
950
+ # kernel.
951
+ if [ "_$NVM_OS" = "_sunos" ]; then
952
+ HOST_ARCH=$(pkg_info -Q MACHINE_ARCH pkg_install)
953
+ EXIT_CODE=$?
954
+ if [ $EXIT_CODE -ne 0 ]; then
955
+ HOST_ARCH=$(isainfo -n)
956
+ fi
957
+ else
958
+ HOST_ARCH="$(uname -m)"
959
+ fi
960
+
961
+ local NVM_ARCH
962
+ case "$HOST_ARCH" in
963
+ x86_64 | amd64) NVM_ARCH="x64" ;;
964
+ i*86) NVM_ARCH="x86" ;;
965
+ *) NVM_ARCH="$HOST_ARCH" ;;
966
+ esac
967
+ echo "$NVM_ARCH"
968
+ }
969
+
970
+ nvm_ensure_default_set() {
971
+ local VERSION
972
+ VERSION="$1"
973
+ if [ -z "$VERSION" ]; then
974
+ echo 'nvm_ensure_default_set: a version is required' >&2
975
+ return 1
976
+ fi
977
+ if nvm_alias default >/dev/null 2>&1; then
978
+ # default already set
979
+ return 0
980
+ fi
981
+ local OUTPUT
982
+ OUTPUT="$(nvm alias default "$VERSION")"
983
+ local EXIT_CODE
984
+ EXIT_CODE="$?"
985
+ echo "Creating default alias: $OUTPUT"
986
+ return $EXIT_CODE
987
+ }
988
+
989
+ nvm_is_merged_node_version() {
990
+ nvm_version_greater_than_or_equal_to "$1" v4.0.0
991
+ }
992
+
993
+ nvm_install_merged_node_binary() {
994
+ local NVM_NODE_TYPE
995
+ NVM_NODE_TYPE="$1"
996
+ local MIRROR
997
+ if [ "_$NVM_NODE_TYPE" = "_std" ]; then
998
+ MIRROR="$NVM_NODEJS_ORG_MIRROR"
999
+ else
1000
+ echo "unknown type of node.js release" >&2
1001
+ return 4
1002
+ fi
1003
+ local VERSION
1004
+ VERSION="$2"
1005
+ local REINSTALL_PACKAGES_FROM
1006
+ REINSTALL_PACKAGES_FROM="$3"
1007
+
1008
+ if ! nvm_is_merged_node_version "$VERSION" || nvm_is_iojs_version "$VERSION"; then
1009
+ echo 'nvm_install_merged_node_binary requires a node version v4.0 or greater.' >&2
1010
+ return 10
1011
+ fi
1012
+
1013
+ local VERSION_PATH
1014
+ VERSION_PATH="$(nvm_version_path "$VERSION")"
1015
+ local NVM_OS
1016
+ NVM_OS="$(nvm_get_os)"
1017
+ local t
1018
+ local url
1019
+ local sum
1020
+ local NODE_PREFIX
1021
+ local compression
1022
+ compression="gz"
1023
+ local tar_compression_flag
1024
+ tar_compression_flag="x"
1025
+ if nvm_supports_xz "$VERSION"; then
1026
+ compression="xz"
1027
+ tar_compression_flag="J"
1028
+ fi
1029
+ NODE_PREFIX="$(nvm_node_prefix)"
1030
+
1031
+ if [ -n "$NVM_OS" ]; then
1032
+ t="$VERSION-$NVM_OS-$(nvm_get_arch)"
1033
+ url="$MIRROR/$VERSION/$NODE_PREFIX-${t}.tar.${compression}"
1034
+ sum="$(nvm_download -L -s "$MIRROR/$VERSION/SHASUMS256.txt" -o - | command grep "${NODE_PREFIX}-${t}.tar.${compression}" | command awk '{print $1}')"
1035
+ local tmpdir
1036
+ tmpdir="$NVM_DIR/bin/node-${t}"
1037
+ local tmptarball
1038
+ tmptarball="$tmpdir/node-${t}.tar.${compression}"
1039
+ local NVM_INSTALL_ERRORED
1040
+ command mkdir -p "$tmpdir" && \
1041
+ echo "Downloading $url..." && \
1042
+ nvm_download -L -C - --progress-bar "$url" -o "$tmptarball" || \
1043
+ NVM_INSTALL_ERRORED=true
1044
+ if grep '404 Not Found' "$tmptarball" >/dev/null; then
1045
+ NVM_INSTALL_ERRORED=true
1046
+ echo >&2 "HTTP 404 at URL $url";
1047
+ fi
1048
+ if (
1049
+ [ "$NVM_INSTALL_ERRORED" != true ] && \
1050
+ echo "WARNING: checksums are currently disabled for node.js v4.0 and later" >&2 && \
1051
+ # nvm_checksum "$tmptarball" "$sum" && \
1052
+ command tar -x${tar_compression_flag}f "$tmptarball" -C "$tmpdir" --strip-components 1 && \
1053
+ command rm -f "$tmptarball" && \
1054
+ command mkdir -p "$VERSION_PATH" && \
1055
+ command mv "$tmpdir"/* "$VERSION_PATH"
1056
+ ); then
1057
+ return 0
1058
+ else
1059
+ echo >&2 "Binary download failed, trying source." >&2
1060
+ command rm -rf "$tmptarball" "$tmpdir"
1061
+ return 1
1062
+ fi
1063
+ fi
1064
+ return 2
1065
+ }
1066
+
1067
+ nvm_install_iojs_binary() {
1068
+ local NVM_IOJS_TYPE
1069
+ NVM_IOJS_TYPE="$1"
1070
+ local MIRROR
1071
+ if [ "_$NVM_IOJS_TYPE" = "_std" ]; then
1072
+ MIRROR="$NVM_IOJS_ORG_MIRROR"
1073
+ else
1074
+ echo "unknown type of io.js release" >&2
1075
+ return 4
1076
+ fi
1077
+ local PREFIXED_VERSION
1078
+ PREFIXED_VERSION="$2"
1079
+ local REINSTALL_PACKAGES_FROM
1080
+ REINSTALL_PACKAGES_FROM="$3"
1081
+
1082
+ if ! nvm_is_iojs_version "$PREFIXED_VERSION"; then
1083
+ echo 'nvm_install_iojs_binary requires an iojs-prefixed version.' >&2
1084
+ return 10
1085
+ fi
1086
+
1087
+ local VERSION
1088
+ VERSION="$(nvm_strip_iojs_prefix "$PREFIXED_VERSION")"
1089
+ local VERSION_PATH
1090
+ VERSION_PATH="$(nvm_version_path "$PREFIXED_VERSION")"
1091
+ local NVM_OS
1092
+ NVM_OS="$(nvm_get_os)"
1093
+ local t
1094
+ local url
1095
+ local sum
1096
+ local compression
1097
+ compression="gz"
1098
+ local tar_compression_flag
1099
+ tar_compression_flag="x"
1100
+ if nvm_supports_xz "$VERSION"; then
1101
+ compression="xz"
1102
+ tar_compression_flag="J"
1103
+ fi
1104
+
1105
+ if [ -n "$NVM_OS" ]; then
1106
+ if nvm_binary_available "$VERSION"; then
1107
+ t="$VERSION-$NVM_OS-$(nvm_get_arch)"
1108
+ url="$MIRROR/$VERSION/$(nvm_iojs_prefix)-${t}.tar.${compression}"
1109
+ sum="$(nvm_download -L -s "$MIRROR/$VERSION/SHASUMS256.txt" -o - | command grep "$(nvm_iojs_prefix)-${t}.tar.${compression}" | command awk '{print $1}')"
1110
+ local tmpdir
1111
+ tmpdir="$NVM_DIR/bin/iojs-${t}"
1112
+ local tmptarball
1113
+ tmptarball="$tmpdir/iojs-${t}.tar.${compression}"
1114
+ local NVM_INSTALL_ERRORED
1115
+ command mkdir -p "$tmpdir" && \
1116
+ echo "Downloading $url..." && \
1117
+ nvm_download -L -C - --progress-bar "$url" -o "$tmptarball" || \
1118
+ NVM_INSTALL_ERRORED=true
1119
+ if grep '404 Not Found' "$tmptarball" >/dev/null; then
1120
+ NVM_INSTALL_ERRORED=true
1121
+ echo >&2 "HTTP 404 at URL $url";
1122
+ fi
1123
+ if (
1124
+ [ "$NVM_INSTALL_ERRORED" != true ] && \
1125
+ echo "WARNING: checksums are currently disabled for io.js" >&2 && \
1126
+ # nvm_checksum "$tmptarball" "$sum" && \
1127
+ command tar -x${tar_compression_flag}f "$tmptarball" -C "$tmpdir" --strip-components 1 && \
1128
+ command rm -f "$tmptarball" && \
1129
+ command mkdir -p "$VERSION_PATH" && \
1130
+ command mv "$tmpdir"/* "$VERSION_PATH"
1131
+ ); then
1132
+ return 0
1133
+ else
1134
+ echo >&2 "Binary download failed, trying source." >&2
1135
+ command rm -rf "$tmptarball" "$tmpdir"
1136
+ return 1
1137
+ fi
1138
+ fi
1139
+ fi
1140
+ return 2
1141
+ }
1142
+
1143
+ nvm_install_node_binary() {
1144
+ local VERSION
1145
+ VERSION="$1"
1146
+ local REINSTALL_PACKAGES_FROM
1147
+ REINSTALL_PACKAGES_FROM="$2"
1148
+
1149
+ if nvm_is_iojs_version "$PREFIXED_VERSION"; then
1150
+ echo 'nvm_install_node_binary does not allow an iojs-prefixed version.' >&2
1151
+ return 10
1152
+ fi
1153
+
1154
+ local VERSION_PATH
1155
+ VERSION_PATH="$(nvm_version_path "$VERSION")"
1156
+ local NVM_OS
1157
+ NVM_OS="$(nvm_get_os)"
1158
+ local t
1159
+ local url
1160
+ local sum
1161
+
1162
+ if [ -n "$NVM_OS" ]; then
1163
+ if nvm_binary_available "$VERSION"; then
1164
+ local NVM_ARCH
1165
+ NVM_ARCH="$(nvm_get_arch)"
1166
+ if [ "_$NVM_ARCH" = '_armv6l' ] || [ "_$NVM_ARCH" = 'armv7l' ]; then
1167
+ NVM_ARCH="arm-pi"
1168
+ fi
1169
+ t="$VERSION-$NVM_OS-$NVM_ARCH"
1170
+ url="$NVM_NODEJS_ORG_MIRROR/$VERSION/node-${t}.tar.gz"
1171
+ sum=$(nvm_download -L -s "$NVM_NODEJS_ORG_MIRROR/$VERSION/SHASUMS.txt" -o - | command grep "node-${t}.tar.gz" | command awk '{print $1}')
1172
+ local tmpdir
1173
+ tmpdir="$NVM_DIR/bin/node-${t}"
1174
+ local tmptarball
1175
+ tmptarball="$tmpdir/node-${t}.tar.gz"
1176
+ local NVM_INSTALL_ERRORED
1177
+ command mkdir -p "$tmpdir" && \
1178
+ nvm_download -L -C - --progress-bar "$url" -o "$tmptarball" || \
1179
+ NVM_INSTALL_ERRORED=true
1180
+ if grep '404 Not Found' "$tmptarball" >/dev/null; then
1181
+ NVM_INSTALL_ERRORED=true
1182
+ echo >&2 "HTTP 404 at URL $url";
1183
+ fi
1184
+ if (
1185
+ [ "$NVM_INSTALL_ERRORED" != true ] && \
1186
+ nvm_checksum "$tmptarball" "$sum" && \
1187
+ command tar -xzf "$tmptarball" -C "$tmpdir" --strip-components 1 && \
1188
+ command rm -f "$tmptarball" && \
1189
+ command mkdir -p "$VERSION_PATH" && \
1190
+ command mv "$tmpdir"/* "$VERSION_PATH"
1191
+ ); then
1192
+ return 0
1193
+ else
1194
+ echo >&2 "Binary download failed, trying source."
1195
+ command rm -rf "$tmptarball" "$tmpdir"
1196
+ return 1
1197
+ fi
1198
+ fi
1199
+ fi
1200
+ return 2
1201
+ }
1202
+
1203
+ nvm_install_node_source() {
1204
+ local VERSION
1205
+ VERSION="$1"
1206
+ local ADDITIONAL_PARAMETERS
1207
+ ADDITIONAL_PARAMETERS="$2"
1208
+
1209
+ local NVM_ARCH
1210
+ NVM_ARCH="$(nvm_get_arch)"
1211
+ if [ "_$NVM_ARCH" = '_armv6l' ] || [ "_$NVM_ARCH" = '_armv7l' ]; then
1212
+ ADDITIONAL_PARAMETERS="--without-snapshot $ADDITIONAL_PARAMETERS"
1213
+ fi
1214
+
1215
+ if [ -n "$ADDITIONAL_PARAMETERS" ]; then
1216
+ echo "Additional options while compiling: $ADDITIONAL_PARAMETERS"
1217
+ fi
1218
+
1219
+ local VERSION_PATH
1220
+ VERSION_PATH="$(nvm_version_path "$VERSION")"
1221
+ local NVM_OS
1222
+ NVM_OS="$(nvm_get_os)"
1223
+
1224
+ local tarball
1225
+ tarball=''
1226
+ local sum
1227
+ sum=''
1228
+ local make
1229
+ make='make'
1230
+ if [ "_$NVM_OS" = "_freebsd" ]; then
1231
+ make='gmake'
1232
+ MAKE_CXX="CXX=c++"
1233
+ fi
1234
+ local tmpdir
1235
+ tmpdir="$NVM_DIR/src"
1236
+ local tmptarball
1237
+ tmptarball="$tmpdir/node-$VERSION.tar.gz"
1238
+
1239
+ if [ "$(nvm_download -L -s -I "$NVM_NODEJS_ORG_MIRROR/$VERSION/node-$VERSION.tar.gz" -o - 2>&1 | command grep '200 OK')" != '' ]; then
1240
+ tarball="$NVM_NODEJS_ORG_MIRROR/$VERSION/node-$VERSION.tar.gz"
1241
+ sum=$(nvm_download -L -s "$NVM_NODEJS_ORG_MIRROR/$VERSION/SHASUMS.txt" -o - | command grep "node-${VERSION}.tar.gz" | command awk '{print $1}')
1242
+ elif [ "$(nvm_download -L -s -I "$NVM_NODEJS_ORG_MIRROR/node-$VERSION.tar.gz" -o - | command grep '200 OK')" != '' ]; then
1243
+ tarball="$NVM_NODEJS_ORG_MIRROR/node-$VERSION.tar.gz"
1244
+ fi
1245
+
1246
+ if (
1247
+ [ -n "$tarball" ] && \
1248
+ command mkdir -p "$tmpdir" && \
1249
+ echo "Downloading $tarball..." && \
1250
+ nvm_download -L --progress-bar "$tarball" -o "$tmptarball" && \
1251
+ nvm_checksum "$tmptarball" "$sum" && \
1252
+ command tar -xzf "$tmptarball" -C "$tmpdir" && \
1253
+ cd "$tmpdir/node-$VERSION" && \
1254
+ ./configure --prefix="$VERSION_PATH" $ADDITIONAL_PARAMETERS && \
1255
+ $make $MAKE_CXX && \
1256
+ command rm -f "$VERSION_PATH" 2>/dev/null && \
1257
+ $make $MAKE_CXX install
1258
+ )
1259
+ then
1260
+ if ! nvm_has "npm" ; then
1261
+ echo "Installing npm..."
1262
+ if nvm_version_greater 0.2.0 "$VERSION"; then
1263
+ echo "npm requires node v0.2.3 or higher" >&2
1264
+ elif nvm_version_greater_than_or_equal_to "$VERSION" 0.2.0; then
1265
+ if nvm_version_greater 0.2.3 "$VERSION"; then
1266
+ echo "npm requires node v0.2.3 or higher" >&2
1267
+ else
1268
+ nvm_download -L https://npmjs.org/install.sh -o - | clean=yes npm_install=0.2.19 sh
1269
+ fi
1270
+ else
1271
+ nvm_download -L https://npmjs.org/install.sh -o - | clean=yes sh
1272
+ fi
1273
+ fi
1274
+ else
1275
+ echo "nvm: install $VERSION failed!" >&2
1276
+ return 1
1277
+ fi
1278
+
1279
+ return $?
1280
+ }
1281
+
1282
+ nvm_match_version() {
1283
+ local NVM_IOJS_PREFIX
1284
+ NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
1285
+ local PROVIDED_VERSION
1286
+ PROVIDED_VERSION="$1"
1287
+ case "_$PROVIDED_VERSION" in
1288
+ "_$NVM_IOJS_PREFIX" | "_io.js")
1289
+ nvm_version "$NVM_IOJS_PREFIX"
1290
+ ;;
1291
+ "_system")
1292
+ echo "system"
1293
+ ;;
1294
+ *)
1295
+ nvm_version "$PROVIDED_VERSION"
1296
+ ;;
1297
+ esac
1298
+ }
1299
+
1300
+ nvm_npm_global_modules() {
1301
+ local NPMLIST
1302
+ local VERSION
1303
+ VERSION="$1"
1304
+ if [ "_$VERSION" = "_system" ]; then
1305
+ NPMLIST=$(nvm use system > /dev/null && npm list -g --depth=0 2> /dev/null | command tail -n +2)
1306
+ else
1307
+ NPMLIST=$(nvm use "$VERSION" > /dev/null && npm list -g --depth=0 2> /dev/null | command tail -n +2)
1308
+ fi
1309
+
1310
+ local INSTALLS
1311
+ INSTALLS=$(echo "$NPMLIST" | command sed -e '/ -> / d' -e '/\(empty\)/ d' -e 's/^.* \(.*@[^ ]*\).*/\1/' -e '/^npm@[^ ]*.*$/ d' | command xargs)
1312
+
1313
+ local LINKS
1314
+ LINKS="$(echo "$NPMLIST" | command sed -n 's/.* -> \(.*\)/\1/ p')"
1315
+
1316
+ echo "$INSTALLS //// $LINKS"
1317
+ }
1318
+
1319
+ nvm_die_on_prefix() {
1320
+ local NVM_DELETE_PREFIX
1321
+ NVM_DELETE_PREFIX="$1"
1322
+ case "$NVM_DELETE_PREFIX" in
1323
+ 0|1) ;;
1324
+ *)
1325
+ echo >&2 'First argument "delete the prefix" must be zero or one'
1326
+ return 1
1327
+ ;;
1328
+ esac
1329
+ local NVM_COMMAND
1330
+ NVM_COMMAND="$2"
1331
+ if [ -z "$NVM_COMMAND" ]; then
1332
+ echo >&2 'Second argument "nvm command" must be nonempty'
1333
+ return 2
1334
+ fi
1335
+
1336
+ if [ -n "$PREFIX" ] && ! (nvm_tree_contains_path "$NVM_DIR" "$PREFIX" >/dev/null 2>&1); then
1337
+ nvm deactivate >/dev/null 2>&1
1338
+ echo >&2 "nvm is not compatible with the \"PREFIX\" environment variable: currently set to \"$PREFIX\""
1339
+ echo >&2 "Run \`unset PREFIX\` to unset it."
1340
+ return 3
1341
+ fi
1342
+
1343
+ if [ -n "$NPM_CONFIG_PREFIX" ] && ! (nvm_tree_contains_path "$NVM_DIR" "$NPM_CONFIG_PREFIX" >/dev/null 2>&1); then
1344
+ nvm deactivate >/dev/null 2>&1
1345
+ echo >&2 "nvm is not compatible with the \"NPM_CONFIG_PREFIX\" environment variable: currently set to \"$NPM_CONFIG_PREFIX\""
1346
+ echo >&2 "Run \`unset NPM_CONFIG_PREFIX\` to unset it."
1347
+ return 4
1348
+ fi
1349
+
1350
+ if ! nvm_has 'npm'; then
1351
+ return
1352
+ fi
1353
+
1354
+ local NVM_NPM_PREFIX
1355
+ NVM_NPM_PREFIX="$(NPM_CONFIG_LOGLEVEL=warn npm config get prefix)"
1356
+ if ! (nvm_tree_contains_path "$NVM_DIR" "$NVM_NPM_PREFIX" >/dev/null 2>&1); then
1357
+ if [ "_$NVM_DELETE_PREFIX" = "_1" ]; then
1358
+ NPM_CONFIG_LOGLEVEL=warn npm config delete prefix
1359
+ else
1360
+ nvm deactivate >/dev/null 2>&1
1361
+ echo >&2 "nvm is not compatible with the npm config \"prefix\" option: currently set to \"$NVM_NPM_PREFIX\""
1362
+ if nvm_has 'npm'; then
1363
+ echo >&2 "Run \`npm config delete prefix\` or \`$NVM_COMMAND\` to unset it."
1364
+ else
1365
+ echo >&2 "Run \`$NVM_COMMAND\` to unset it."
1366
+ fi
1367
+ return 10
1368
+ fi
1369
+ fi
1370
+ }
1371
+
1372
+ # Succeeds if $IOJS_VERSION represents an io.js version that has a
1373
+ # Solaris binary, fails otherwise.
1374
+ # Currently, only io.js 3.3.1 has a Solaris binary available, and it's the
1375
+ # latest io.js version available. The expectation is that any potential io.js
1376
+ # version later than v3.3.1 will also have Solaris binaries.
1377
+ iojs_version_has_solaris_binary() {
1378
+ local IOJS_VERSION
1379
+ IOJS_VERSION="$1"
1380
+ local STRIPPED_IOJS_VERSION
1381
+ STRIPPED_IOJS_VERSION="$(nvm_strip_iojs_prefix "$IOJS_VERSION")"
1382
+ if [ "_$STRIPPED_IOJS_VERSION" = "$IOJS_VERSION" ]; then
1383
+ return 1
1384
+ fi
1385
+
1386
+ # io.js started shipping Solaris binaries with io.js v3.3.1
1387
+ nvm_version_greater_than_or_equal_to "$STRIPPED_IOJS_VERSION" v3.3.1
1388
+ }
1389
+
1390
+ # Succeeds if $NODE_VERSION represents a node version that has a
1391
+ # Solaris binary, fails otherwise.
1392
+ # Currently, node versions starting from v0.8.6 have a Solaris binary
1393
+ # avaliable.
1394
+ node_version_has_solaris_binary() {
1395
+ local NODE_VERSION
1396
+ NODE_VERSION="$1"
1397
+ # Error out if $NODE_VERSION is actually an io.js version
1398
+ local STRIPPED_IOJS_VERSION
1399
+ STRIPPED_IOJS_VERSION="$(nvm_strip_iojs_prefix "$NODE_VERSION")"
1400
+ if [ "_$STRIPPED_IOJS_VERSION" != "_$NODE_VERSION" ]; then
1401
+ return 1
1402
+ fi
1403
+
1404
+ # node (unmerged) started shipping Solaris binaries with v0.8.6 and
1405
+ # node versions v1.0.0 or greater are not considered valid "unmerged" node
1406
+ # versions.
1407
+ nvm_version_greater_than_or_equal_to "$NODE_VERSION" v0.8.6 &&
1408
+ ! nvm_version_greater_than_or_equal_to "$NODE_VERSION" v1.0.0
1409
+ }
1410
+
1411
+ # Succeeds if $VERSION represents a version (node, io.js or merged) that has a
1412
+ # Solaris binary, fails otherwise.
1413
+ nvm_has_solaris_binary() {
1414
+ local VERSION=$1
1415
+ if nvm_is_merged_node_version "$VERSION"; then
1416
+ return 0 # All merged node versions have a Solaris binary
1417
+ elif nvm_is_iojs_version "$VERSION"; then
1418
+ iojs_version_has_solaris_binary "$VERSION"
1419
+ else
1420
+ node_version_has_solaris_binary "$VERSION"
1421
+ fi
1422
+ }
1423
+
1424
+ nvm_sanitize_path() {
1425
+ local SANITIZED_PATH
1426
+ SANITIZED_PATH="$1"
1427
+ if [ "_$1" != "_$NVM_DIR" ]; then
1428
+ SANITIZED_PATH="$(echo "$SANITIZED_PATH" | command sed "s#$NVM_DIR#\$NVM_DIR#g")"
1429
+ fi
1430
+ echo "$SANITIZED_PATH" | command sed "s#$HOME#\$HOME#g"
1431
+ }
1432
+
1433
+ nvm() {
1434
+ if [ $# -lt 1 ]; then
1435
+ nvm help
1436
+ return
1437
+ fi
1438
+
1439
+ local GREP_OPTIONS
1440
+ GREP_OPTIONS=''
1441
+
1442
+ # initialize local variables
1443
+ local VERSION
1444
+ local ADDITIONAL_PARAMETERS
1445
+ local ALIAS
1446
+
1447
+ case $1 in
1448
+ "help" )
1449
+ local NVM_IOJS_PREFIX
1450
+ NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
1451
+ local NVM_NODE_PREFIX
1452
+ NVM_NODE_PREFIX="$(nvm_node_prefix)"
1453
+ echo
1454
+ echo "Node Version Manager"
1455
+ echo
1456
+ echo 'Note: <version> refers to any version-like string nvm understands. This includes:'
1457
+ echo ' - full or partial version numbers, starting with an optional "v" (0.10, v0.1.2, v1)'
1458
+ echo " - default (built-in) aliases: $NVM_NODE_PREFIX, stable, unstable, $NVM_IOJS_PREFIX, system"
1459
+ echo ' - custom aliases you define with `nvm alias foo`'
1460
+ echo
1461
+ echo 'Usage:'
1462
+ echo ' nvm help Show this message'
1463
+ echo ' nvm --version Print out the latest released version of nvm'
1464
+ echo ' nvm install [-s] <version> Download and install a <version>, [-s] from source. Uses .nvmrc if available'
1465
+ echo ' --reinstall-packages-from=<version> When installing, reinstall packages installed in <node|iojs|node version number>'
1466
+ echo ' nvm uninstall <version> Uninstall a version'
1467
+ echo ' nvm use [--silent] <version> Modify PATH to use <version>. Uses .nvmrc if available'
1468
+ echo ' nvm exec [--silent] <version> [<command>] Run <command> on <version>. Uses .nvmrc if available'
1469
+ echo ' nvm run [--silent] <version> [<args>] Run `node` on <version> with <args> as arguments. Uses .nvmrc if available'
1470
+ echo ' nvm current Display currently activated version'
1471
+ echo ' nvm ls List installed versions'
1472
+ echo ' nvm ls <version> List versions matching a given description'
1473
+ echo ' nvm ls-remote List remote versions available for install'
1474
+ echo ' nvm version <version> Resolve the given description to a single local version'
1475
+ echo ' nvm version-remote <version> Resolve the given description to a single remote version'
1476
+ echo ' nvm deactivate Undo effects of `nvm` on current shell'
1477
+ echo ' nvm alias [<pattern>] Show all aliases beginning with <pattern>'
1478
+ echo ' nvm alias <name> <version> Set an alias named <name> pointing to <version>'
1479
+ echo ' nvm unalias <name> Deletes the alias named <name>'
1480
+ echo ' nvm reinstall-packages <version> Reinstall global `npm` packages contained in <version> to current version'
1481
+ echo ' nvm unload Unload `nvm` from shell'
1482
+ echo ' nvm which [<version>] Display path to installed node version. Uses .nvmrc if available'
1483
+ echo
1484
+ echo 'Example:'
1485
+ echo ' nvm install v0.10.32 Install a specific version number'
1486
+ echo ' nvm use 0.10 Use the latest available 0.10.x release'
1487
+ echo ' nvm run 0.10.32 app.js Run app.js using node v0.10.32'
1488
+ echo ' nvm exec 0.10.32 node app.js Run `node app.js` with the PATH pointing to node v0.10.32'
1489
+ echo ' nvm alias default 0.10.32 Set default node version on a shell'
1490
+ echo
1491
+ echo 'Note:'
1492
+ echo ' to remove, delete, or uninstall nvm - just remove the `$NVM_DIR` folder (usually `~/.nvm`)'
1493
+ echo
1494
+ ;;
1495
+
1496
+ "debug" )
1497
+ local ZHS_HAS_SHWORDSPLIT_UNSET
1498
+ if nvm_has "setopt"; then
1499
+ ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | command grep shwordsplit > /dev/null ; echo $?)
1500
+ setopt shwordsplit
1501
+ fi
1502
+ echo >&2 "nvm --version: v$(nvm --version)"
1503
+ echo >&2 "\$SHELL: $SHELL"
1504
+ echo >&2 "\$HOME: $HOME"
1505
+ echo >&2 "\$NVM_DIR: '$(nvm_sanitize_path "$NVM_DIR")'"
1506
+ echo >&2 "\$PREFIX: '$(nvm_sanitize_path "$PREFIX")'"
1507
+ echo >&2 "\$NPM_CONFIG_PREFIX: '$(nvm_sanitize_path "$NPM_CONFIG_PREFIX")'"
1508
+ local NVM_DEBUG_OUTPUT
1509
+ for NVM_DEBUG_COMMAND in 'nvm current' 'which node' 'which iojs' 'which npm' 'npm config get prefix' 'npm root -g'
1510
+ do
1511
+ NVM_DEBUG_OUTPUT="$($NVM_DEBUG_COMMAND 2>&1)"
1512
+ echo >&2 "$NVM_DEBUG_COMMAND: $(nvm_sanitize_path "$NVM_DEBUG_OUTPUT")"
1513
+ done
1514
+ if [ "$ZHS_HAS_SHWORDSPLIT_UNSET" -eq 1 ] && nvm_has "unsetopt"; then
1515
+ unsetopt shwordsplit
1516
+ fi
1517
+ return 42
1518
+ ;;
1519
+
1520
+ "install" | "i" )
1521
+ local nobinary
1522
+ local version_not_provided
1523
+ version_not_provided=0
1524
+ local provided_version
1525
+ local NVM_OS
1526
+ NVM_OS="$(nvm_get_os)"
1527
+
1528
+ if ! nvm_has "curl" && ! nvm_has "wget"; then
1529
+ echo 'nvm needs curl or wget to proceed.' >&2;
1530
+ return 1
1531
+ fi
1532
+
1533
+ if [ $# -lt 2 ]; then
1534
+ version_not_provided=1
1535
+ nvm_rc_version
1536
+ if [ -z "$NVM_RC_VERSION" ]; then
1537
+ >&2 nvm help
1538
+ return 127
1539
+ fi
1540
+ fi
1541
+
1542
+ shift
1543
+
1544
+ nobinary=0
1545
+ if [ "_$1" = "_-s" ]; then
1546
+ nobinary=1
1547
+ shift
1548
+ fi
1549
+
1550
+ provided_version="$1"
1551
+
1552
+ if [ -z "$provided_version" ]; then
1553
+ if [ $version_not_provided -ne 1 ]; then
1554
+ nvm_rc_version
1555
+ fi
1556
+ provided_version="$NVM_RC_VERSION"
1557
+ else
1558
+ shift
1559
+ fi
1560
+
1561
+ VERSION="$(nvm_remote_version "$provided_version")"
1562
+
1563
+ if [ "_$VERSION" = "_N/A" ]; then
1564
+ echo "Version '$provided_version' not found - try \`nvm ls-remote\` to browse available versions." >&2
1565
+ return 3
1566
+ fi
1567
+
1568
+ ADDITIONAL_PARAMETERS=''
1569
+ local PROVIDED_REINSTALL_PACKAGES_FROM
1570
+ local REINSTALL_PACKAGES_FROM
1571
+
1572
+ while [ $# -ne 0 ]
1573
+ do
1574
+ case "$1" in
1575
+ --reinstall-packages-from=*)
1576
+ PROVIDED_REINSTALL_PACKAGES_FROM="$(echo "$1" | command cut -c 27-)"
1577
+ REINSTALL_PACKAGES_FROM="$(nvm_version "$PROVIDED_REINSTALL_PACKAGES_FROM")"
1578
+ ;;
1579
+ --copy-packages-from=*)
1580
+ PROVIDED_REINSTALL_PACKAGES_FROM="$(echo "$1" | command cut -c 22-)"
1581
+ REINSTALL_PACKAGES_FROM="$(nvm_version "$PROVIDED_REINSTALL_PACKAGES_FROM")"
1582
+ ;;
1583
+ *)
1584
+ ADDITIONAL_PARAMETERS="$ADDITIONAL_PARAMETERS $1"
1585
+ ;;
1586
+ esac
1587
+ shift
1588
+ done
1589
+
1590
+ if [ "_$(nvm_ensure_version_prefix "$PROVIDED_REINSTALL_PACKAGES_FROM")" = "_$VERSION" ]; then
1591
+ echo "You can't reinstall global packages from the same version of node you're installing." >&2
1592
+ return 4
1593
+ elif [ ! -z "$PROVIDED_REINSTALL_PACKAGES_FROM" ] && [ "_$REINSTALL_PACKAGES_FROM" = "_N/A" ]; then
1594
+ echo "If --reinstall-packages-from is provided, it must point to an installed version of node." >&2
1595
+ return 5
1596
+ fi
1597
+
1598
+ local NVM_NODE_MERGED
1599
+ local NVM_IOJS
1600
+ if nvm_is_iojs_version "$VERSION"; then
1601
+ NVM_IOJS=true
1602
+ elif nvm_is_merged_node_version "$VERSION"; then
1603
+ NVM_NODE_MERGED=true
1604
+ fi
1605
+
1606
+ local VERSION_PATH
1607
+ VERSION_PATH="$(nvm_version_path "$VERSION")"
1608
+ if [ -d "$VERSION_PATH" ]; then
1609
+ echo "$VERSION is already installed." >&2
1610
+ if nvm use "$VERSION" && [ ! -z "$REINSTALL_PACKAGES_FROM" ] && [ "_$REINSTALL_PACKAGES_FROM" != "_N/A" ]; then
1611
+ nvm reinstall-packages "$REINSTALL_PACKAGES_FROM"
1612
+ fi
1613
+ return $?
1614
+ fi
1615
+
1616
+ if [ "_$NVM_OS" = "_freebsd" ]; then
1617
+ # node.js and io.js do not have a FreeBSD binary
1618
+ nobinary=1
1619
+ echo "Currently, there is no binary for $NVM_OS" >&2
1620
+ elif [ "_$NVM_OS" = "_sunos" ]; then
1621
+ # Not all node/io.js versions have a Solaris binary
1622
+ if ! nvm_has_solaris_binary "$VERSION"; then
1623
+ nobinary=1
1624
+ echo "Currently, there is no binary of version $VERSION for $NVM_OS" >&2
1625
+ fi
1626
+ fi
1627
+ local NVM_INSTALL_SUCCESS
1628
+ # skip binary install if "nobinary" option specified.
1629
+ if [ $nobinary -ne 1 ] && nvm_binary_available "$VERSION"; then
1630
+ if [ "$NVM_IOJS" = true ] && nvm_install_iojs_binary std "$VERSION" "$REINSTALL_PACKAGES_FROM"; then
1631
+ NVM_INSTALL_SUCCESS=true
1632
+ elif [ "$NVM_NODE_MERGED" = true ] && nvm_install_merged_node_binary std "$VERSION" "$REINSTALL_PACKAGES_FROM"; then
1633
+ NVM_INSTALL_SUCCESS=true
1634
+ elif [ "$NVM_IOJS" != true ] && nvm_install_node_binary "$VERSION" "$REINSTALL_PACKAGES_FROM"; then
1635
+ NVM_INSTALL_SUCCESS=true
1636
+ fi
1637
+ fi
1638
+ if [ "$NVM_INSTALL_SUCCESS" != true ]; then
1639
+ if [ "$NVM_IOJS" != true ] && [ "$NVM_NODE_MERGED" != true ]; then
1640
+ if nvm_install_node_source "$VERSION" "$ADDITIONAL_PARAMETERS"; then
1641
+ NVM_INSTALL_SUCCESS=true
1642
+ fi
1643
+ elif [ "$NVM_IOJS" = true ]; then
1644
+ # nvm_install_iojs_source "$VERSION" "$ADDITIONAL_PARAMETERS"
1645
+ echo "Installing iojs from source is not currently supported" >&2
1646
+ return 105
1647
+ elif [ "$NVM_NODE_MERGED" = true ]; then
1648
+ # nvm_install_merged_node_source "$VERSION" "$ADDITIONAL_PARAMETERS"
1649
+ echo "Installing node v1.0 and greater from source is not currently supported" >&2
1650
+ return 106
1651
+ fi
1652
+ fi
1653
+
1654
+ if [ "$NVM_INSTALL_SUCCESS" = true ] && nvm use "$VERSION"; then
1655
+ if [ ! -z "$REINSTALL_PACKAGES_FROM" ] \
1656
+ && [ "_$REINSTALL_PACKAGES_FROM" != "_N/A" ]; then
1657
+ nvm reinstall-packages "$REINSTALL_PACKAGES_FROM"
1658
+ fi
1659
+ fi
1660
+ return $?
1661
+ ;;
1662
+ "uninstall" )
1663
+ if [ $# -ne 2 ]; then
1664
+ >&2 nvm help
1665
+ return 127
1666
+ fi
1667
+
1668
+ local PATTERN
1669
+ PATTERN="$2"
1670
+ case "_$PATTERN" in
1671
+ "_$(nvm_iojs_prefix)" | "_$(nvm_iojs_prefix)-" \
1672
+ | "_$(nvm_node_prefix)" | "_$(nvm_node_prefix)-")
1673
+ VERSION="$(nvm_version "$PATTERN")"
1674
+ ;;
1675
+ *)
1676
+ VERSION="$(nvm_version "$PATTERN")"
1677
+ ;;
1678
+ esac
1679
+ if [ "_$VERSION" = "_$(nvm_ls_current)" ]; then
1680
+ if nvm_is_iojs_version "$VERSION"; then
1681
+ echo "nvm: Cannot uninstall currently-active io.js version, $VERSION (inferred from $PATTERN)." >&2
1682
+ else
1683
+ echo "nvm: Cannot uninstall currently-active node version, $VERSION (inferred from $PATTERN)." >&2
1684
+ fi
1685
+ return 1
1686
+ fi
1687
+
1688
+ local VERSION_PATH
1689
+ VERSION_PATH="$(nvm_version_path "$VERSION")"
1690
+ if [ ! -d "$VERSION_PATH" ]; then
1691
+ echo "$VERSION version is not installed..." >&2
1692
+ return;
1693
+ fi
1694
+
1695
+ t="$VERSION-$(nvm_get_os)-$(nvm_get_arch)"
1696
+
1697
+ local NVM_PREFIX
1698
+ local NVM_SUCCESS_MSG
1699
+ if nvm_is_iojs_version "$VERSION"; then
1700
+ NVM_PREFIX="$(nvm_iojs_prefix)"
1701
+ NVM_SUCCESS_MSG="Uninstalled io.js $(nvm_strip_iojs_prefix "$VERSION")"
1702
+ else
1703
+ NVM_PREFIX="$(nvm_node_prefix)"
1704
+ NVM_SUCCESS_MSG="Uninstalled node $VERSION"
1705
+ fi
1706
+ # Delete all files related to target version.
1707
+ command rm -rf "$NVM_DIR/src/$NVM_PREFIX-$VERSION" \
1708
+ "$NVM_DIR/src/$NVM_PREFIX-$VERSION.tar.*" \
1709
+ "$NVM_DIR/bin/$NVM_PREFIX-${t}" \
1710
+ "$NVM_DIR/bin/$NVM_PREFIX-${t}.tar.*" \
1711
+ "$VERSION_PATH" 2>/dev/null
1712
+ echo "$NVM_SUCCESS_MSG"
1713
+
1714
+ # rm any aliases that point to uninstalled version.
1715
+ for ALIAS in $(command grep -l "$VERSION" "$(nvm_alias_path)/*" 2>/dev/null)
1716
+ do
1717
+ nvm unalias "$(command basename "$ALIAS")"
1718
+ done
1719
+ ;;
1720
+ "deactivate" )
1721
+ local NEWPATH
1722
+ NEWPATH="$(nvm_strip_path "$PATH" "/bin")"
1723
+ if [ "_$PATH" = "_$NEWPATH" ]; then
1724
+ echo "Could not find $NVM_DIR/*/bin in \$PATH" >&2
1725
+ else
1726
+ export PATH="$NEWPATH"
1727
+ hash -r
1728
+ echo "$NVM_DIR/*/bin removed from \$PATH"
1729
+ fi
1730
+
1731
+ NEWPATH="$(nvm_strip_path "$MANPATH" "/share/man")"
1732
+ if [ "_$MANPATH" = "_$NEWPATH" ]; then
1733
+ echo "Could not find $NVM_DIR/*/share/man in \$MANPATH" >&2
1734
+ else
1735
+ export MANPATH="$NEWPATH"
1736
+ echo "$NVM_DIR/*/share/man removed from \$MANPATH"
1737
+ fi
1738
+
1739
+ NEWPATH="$(nvm_strip_path "$NODE_PATH" "/lib/node_modules")"
1740
+ if [ "_$NODE_PATH" != "_$NEWPATH" ]; then
1741
+ export NODE_PATH="$NEWPATH"
1742
+ echo "$NVM_DIR/*/lib/node_modules removed from \$NODE_PATH"
1743
+ fi
1744
+ ;;
1745
+ "use" )
1746
+ local PROVIDED_VERSION
1747
+ local NVM_USE_SILENT
1748
+ NVM_USE_SILENT=0
1749
+ local NVM_DELETE_PREFIX
1750
+ NVM_DELETE_PREFIX=0
1751
+
1752
+ shift # remove "use"
1753
+ while [ $# -ne 0 ]
1754
+ do
1755
+ case "$1" in
1756
+ --silent) NVM_USE_SILENT=1 ;;
1757
+ --delete-prefix) NVM_DELETE_PREFIX=1 ;;
1758
+ *)
1759
+ if [ -n "$1" ]; then
1760
+ PROVIDED_VERSION="$1"
1761
+ fi
1762
+ ;;
1763
+ esac
1764
+ shift
1765
+ done
1766
+
1767
+ if [ -z "$PROVIDED_VERSION" ]; then
1768
+ nvm_rc_version
1769
+ if [ -n "$NVM_RC_VERSION" ]; then
1770
+ PROVIDED_VERSION="$NVM_RC_VERSION"
1771
+ VERSION="$(nvm_version "$PROVIDED_VERSION")"
1772
+ fi
1773
+ else
1774
+ VERSION="$(nvm_match_version "$PROVIDED_VERSION")"
1775
+ fi
1776
+
1777
+ if [ -z "$VERSION" ]; then
1778
+ >&2 nvm help
1779
+ return 127
1780
+ fi
1781
+
1782
+ if [ "_$VERSION" = '_system' ]; then
1783
+ if nvm_has_system_node && nvm deactivate >/dev/null 2>&1; then
1784
+ if [ $NVM_USE_SILENT -ne 1 ]; then
1785
+ echo "Now using system version of node: $(node -v 2>/dev/null)$(nvm_print_npm_version)"
1786
+ fi
1787
+ return
1788
+ elif nvm_has_system_iojs && nvm deactivate >/dev/null 2>&1; then
1789
+ if [ $NVM_USE_SILENT -ne 1 ]; then
1790
+ echo "Now using system version of io.js: $(iojs --version 2>/dev/null)$(nvm_print_npm_version)"
1791
+ fi
1792
+ return
1793
+ else
1794
+ if [ $NVM_USE_SILENT -ne 1 ]; then
1795
+ echo "System version of node not found." >&2
1796
+ fi
1797
+ return 127
1798
+ fi
1799
+ elif [ "_$VERSION" = "_∞" ]; then
1800
+ if [ $NVM_USE_SILENT -ne 1 ]; then
1801
+ echo "The alias \"$PROVIDED_VERSION\" leads to an infinite loop. Aborting." >&2
1802
+ fi
1803
+ return 8
1804
+ fi
1805
+
1806
+ # This nvm_ensure_version_installed call can be a performance bottleneck
1807
+ # on shell startup. Perhaps we can optimize it away or make it faster.
1808
+ nvm_ensure_version_installed "$PROVIDED_VERSION"
1809
+ EXIT_CODE=$?
1810
+ if [ "$EXIT_CODE" != "0" ]; then
1811
+ return $EXIT_CODE
1812
+ fi
1813
+
1814
+ local NVM_VERSION_DIR
1815
+ NVM_VERSION_DIR="$(nvm_version_path "$VERSION")"
1816
+
1817
+ # Strip other version from PATH
1818
+ PATH="$(nvm_strip_path "$PATH" "/bin")"
1819
+ # Prepend current version
1820
+ PATH="$(nvm_prepend_path "$PATH" "$NVM_VERSION_DIR/bin")"
1821
+ if nvm_has manpath; then
1822
+ if [ -z "$MANPATH" ]; then
1823
+ MANPATH=$(manpath)
1824
+ fi
1825
+ # Strip other version from MANPATH
1826
+ MANPATH="$(nvm_strip_path "$MANPATH" "/share/man")"
1827
+ # Prepend current version
1828
+ MANPATH="$(nvm_prepend_path "$MANPATH" "$NVM_VERSION_DIR/share/man")"
1829
+ export MANPATH
1830
+ fi
1831
+ export PATH
1832
+ hash -r
1833
+ export NVM_PATH="$NVM_VERSION_DIR/lib/node"
1834
+ export NVM_BIN="$NVM_VERSION_DIR/bin"
1835
+ if [ "$NVM_SYMLINK_CURRENT" = true ]; then
1836
+ command rm -f "$NVM_DIR/current" && ln -s "$NVM_VERSION_DIR" "$NVM_DIR/current"
1837
+ fi
1838
+ local NVM_USE_OUTPUT
1839
+ if nvm_is_iojs_version "$VERSION"; then
1840
+ if [ $NVM_USE_SILENT -ne 1 ]; then
1841
+ NVM_USE_OUTPUT="Now using io.js $(nvm_strip_iojs_prefix "$VERSION")$(nvm_print_npm_version)"
1842
+ fi
1843
+ else
1844
+ if [ $NVM_USE_SILENT -ne 1 ]; then
1845
+ NVM_USE_OUTPUT="Now using node $VERSION$(nvm_print_npm_version)"
1846
+ fi
1847
+ fi
1848
+ if [ "_$VERSION" != "_system" ]; then
1849
+ local NVM_USE_CMD
1850
+ NVM_USE_CMD="nvm use --delete-prefix"
1851
+ if [ -n "$PROVIDED_VERSION" ]; then
1852
+ NVM_USE_CMD="$NVM_USE_CMD $VERSION"
1853
+ fi
1854
+ if [ $NVM_USE_SILENT -eq 1 ]; then
1855
+ NVM_USE_CMD="$NVM_USE_CMD --silent"
1856
+ fi
1857
+ if ! nvm_die_on_prefix "$NVM_DELETE_PREFIX" "$NVM_USE_CMD"; then
1858
+ return 11
1859
+ fi
1860
+ fi
1861
+ if [ -n "$NVM_USE_OUTPUT" ]; then
1862
+ echo "$NVM_USE_OUTPUT"
1863
+ fi
1864
+ ;;
1865
+ "run" )
1866
+ local provided_version
1867
+ local has_checked_nvmrc
1868
+ has_checked_nvmrc=0
1869
+ # run given version of node
1870
+ shift
1871
+
1872
+ local NVM_SILENT
1873
+ NVM_SILENT=0
1874
+ if [ "_$1" = "_--silent" ]; then
1875
+ NVM_SILENT=1
1876
+ shift
1877
+ fi
1878
+
1879
+ if [ $# -lt 1 ]; then
1880
+ if [ "$NVM_SILENT" -eq 1 ]; then
1881
+ nvm_rc_version >/dev/null 2>&1 && has_checked_nvmrc=1
1882
+ else
1883
+ nvm_rc_version && has_checked_nvmrc=1
1884
+ fi
1885
+ if [ -n "$NVM_RC_VERSION" ]; then
1886
+ VERSION="$(nvm_version "$NVM_RC_VERSION")"
1887
+ else
1888
+ VERSION='N/A'
1889
+ fi
1890
+ if [ $VERSION = "N/A" ]; then
1891
+ >&2 nvm help
1892
+ return 127
1893
+ fi
1894
+ fi
1895
+
1896
+ provided_version="$1"
1897
+ if [ -n "$provided_version" ]; then
1898
+ VERSION="$(nvm_version "$provided_version")"
1899
+ if [ "_$VERSION" = "_N/A" ] && ! nvm_is_valid_version "$provided_version"; then
1900
+ provided_version=''
1901
+ if [ $has_checked_nvmrc -ne 1 ]; then
1902
+ if [ "$NVM_SILENT" -eq 1 ]; then
1903
+ nvm_rc_version >/dev/null 2>&1 && has_checked_nvmrc=1
1904
+ else
1905
+ nvm_rc_version && has_checked_nvmrc=1
1906
+ fi
1907
+ fi
1908
+ VERSION="$(nvm_version "$NVM_RC_VERSION")"
1909
+ else
1910
+ shift
1911
+ fi
1912
+ fi
1913
+
1914
+ local NVM_IOJS
1915
+ if nvm_is_iojs_version "$VERSION"; then
1916
+ NVM_IOJS=true
1917
+ fi
1918
+
1919
+ local ARGS
1920
+ ARGS="$@"
1921
+ local OUTPUT
1922
+ local EXIT_CODE
1923
+
1924
+ local ZHS_HAS_SHWORDSPLIT_UNSET
1925
+ ZHS_HAS_SHWORDSPLIT_UNSET=1
1926
+ if nvm_has "setopt"; then
1927
+ ZHS_HAS_SHWORDSPLIT_UNSET=$(setopt | command grep shwordsplit > /dev/null ; echo $?)
1928
+ setopt shwordsplit
1929
+ fi
1930
+ if [ "_$VERSION" = "_N/A" ]; then
1931
+ nvm_ensure_version_installed "$provided_version"
1932
+ EXIT_CODE=$?
1933
+ elif [ -z "$ARGS" ]; then
1934
+ if [ "$NVM_IOJS" = true ]; then
1935
+ nvm exec "$VERSION" iojs
1936
+ else
1937
+ nvm exec "$VERSION" node
1938
+ fi
1939
+ EXIT_CODE="$?"
1940
+ elif [ "$NVM_IOJS" = true ]; then
1941
+ [ $NVM_SILENT -eq 1 ] || echo "Running io.js $(nvm_strip_iojs_prefix "$VERSION")$(nvm use --silent "$VERSION" && nvm_print_npm_version)"
1942
+ OUTPUT="$(nvm use "$VERSION" >/dev/null && iojs $ARGS)"
1943
+ EXIT_CODE="$?"
1944
+ else
1945
+ [ $NVM_SILENT -eq 1 ] || echo "Running node $VERSION$(nvm use --silent "$VERSION" && nvm_print_npm_version)"
1946
+ OUTPUT="$(nvm use "$VERSION" >/dev/null && node $ARGS)"
1947
+ EXIT_CODE="$?"
1948
+ fi
1949
+ if [ "$ZHS_HAS_SHWORDSPLIT_UNSET" -eq 1 ] && nvm_has "unsetopt"; then
1950
+ unsetopt shwordsplit
1951
+ fi
1952
+ if [ -n "$OUTPUT" ]; then
1953
+ echo "$OUTPUT"
1954
+ fi
1955
+ return $EXIT_CODE
1956
+ ;;
1957
+ "exec" )
1958
+ shift
1959
+
1960
+ local NVM_SILENT
1961
+ NVM_SILENT=0
1962
+ if [ "_$1" = "_--silent" ]; then
1963
+ NVM_SILENT=1
1964
+ shift
1965
+ fi
1966
+
1967
+ local provided_version
1968
+ provided_version="$1"
1969
+ if [ -n "$provided_version" ]; then
1970
+ VERSION="$(nvm_version "$provided_version")"
1971
+ if [ "_$VERSION" = "_N/A" ] && ! nvm_is_valid_version "$provided_version"; then
1972
+ if [ "$NVM_SILENT" -eq 1 ]; then
1973
+ nvm_rc_version >/dev/null 2>&1
1974
+ else
1975
+ nvm_rc_version
1976
+ fi
1977
+ provided_version="$NVM_RC_VERSION"
1978
+ VERSION="$(nvm_version "$provided_version")"
1979
+ else
1980
+ shift
1981
+ fi
1982
+ fi
1983
+
1984
+ nvm_ensure_version_installed "$provided_version"
1985
+ EXIT_CODE=$?
1986
+ if [ "$EXIT_CODE" != "0" ]; then
1987
+ return $EXIT_CODE
1988
+ fi
1989
+
1990
+ [ $NVM_SILENT -eq 1 ] || echo "Running node $VERSION$(nvm use --silent "$VERSION" && nvm_print_npm_version)"
1991
+ NODE_VERSION="$VERSION" "$NVM_DIR/nvm-exec" "$@"
1992
+ ;;
1993
+ "ls" | "list" )
1994
+ local NVM_LS_OUTPUT
1995
+ local NVM_LS_EXIT_CODE
1996
+ NVM_LS_OUTPUT=$(nvm_ls "$2")
1997
+ NVM_LS_EXIT_CODE=$?
1998
+ nvm_print_versions "$NVM_LS_OUTPUT"
1999
+ if [ $# -eq 1 ]; then
2000
+ nvm alias
2001
+ fi
2002
+ return $NVM_LS_EXIT_CODE
2003
+ ;;
2004
+ "ls-remote" | "list-remote" )
2005
+ local PATTERN
2006
+ PATTERN="$2"
2007
+ local NVM_IOJS_PREFIX
2008
+ NVM_IOJS_PREFIX="$(nvm_iojs_prefix)"
2009
+ local NVM_NODE_PREFIX
2010
+ NVM_NODE_PREFIX="$(nvm_node_prefix)"
2011
+ local NVM_FLAVOR
2012
+ case "_$PATTERN" in
2013
+ "_$NVM_IOJS_PREFIX" | "_$NVM_NODE_PREFIX" )
2014
+ NVM_FLAVOR="$PATTERN"
2015
+ PATTERN="$3"
2016
+ ;;
2017
+ esac
2018
+
2019
+ local NVM_LS_REMOTE_EXIT_CODE
2020
+ NVM_LS_REMOTE_EXIT_CODE=0
2021
+ local NVM_LS_REMOTE_PRE_MERGED_OUTPUT
2022
+ NVM_LS_REMOTE_PRE_MERGED_OUTPUT=''
2023
+ local NVM_LS_REMOTE_POST_MERGED_OUTPUT
2024
+ NVM_LS_REMOTE_POST_MERGED_OUTPUT=''
2025
+ if [ "_$NVM_FLAVOR" != "_$NVM_IOJS_PREFIX" ]; then
2026
+ local NVM_LS_REMOTE_OUTPUT
2027
+ NVM_LS_REMOTE_OUTPUT=$(nvm_ls_remote "$PATTERN")
2028
+ # split output into two
2029
+ NVM_LS_REMOTE_PRE_MERGED_OUTPUT="${NVM_LS_REMOTE_OUTPUT%%v4\.0\.0*}"
2030
+ NVM_LS_REMOTE_POST_MERGED_OUTPUT="${NVM_LS_REMOTE_OUTPUT#$NVM_LS_REMOTE_PRE_MERGED_OUTPUT}"
2031
+ NVM_LS_REMOTE_EXIT_CODE=$?
2032
+ fi
2033
+
2034
+ local NVM_LS_REMOTE_IOJS_EXIT_CODE
2035
+ NVM_LS_REMOTE_IOJS_EXIT_CODE=0
2036
+ local NVM_LS_REMOTE_IOJS_OUTPUT
2037
+ NVM_LS_REMOTE_IOJS_OUTPUT=''
2038
+ if [ "_$NVM_FLAVOR" != "_$NVM_NODE_PREFIX" ]; then
2039
+ NVM_LS_REMOTE_IOJS_OUTPUT=$(nvm_ls_remote_iojs "$PATTERN")
2040
+ NVM_LS_REMOTE_IOJS_EXIT_CODE=$?
2041
+ fi
2042
+
2043
+ local NVM_OUTPUT
2044
+ NVM_OUTPUT="$(echo "$NVM_LS_REMOTE_PRE_MERGED_OUTPUT
2045
+ $NVM_LS_REMOTE_IOJS_OUTPUT
2046
+ $NVM_LS_REMOTE_POST_MERGED_OUTPUT" | command grep -v "N/A" | command sed '/^$/d')"
2047
+ if [ -n "$NVM_OUTPUT" ]; then
2048
+ nvm_print_versions "$NVM_OUTPUT"
2049
+ return $NVM_LS_REMOTE_EXIT_CODE || $NVM_LS_REMOTE_IOJS_EXIT_CODE
2050
+ else
2051
+ nvm_print_versions "N/A"
2052
+ return 3
2053
+ fi
2054
+ ;;
2055
+ "current" )
2056
+ nvm_version current
2057
+ ;;
2058
+ "which" )
2059
+ local provided_version
2060
+ provided_version="$2"
2061
+ if [ $# -eq 1 ]; then
2062
+ nvm_rc_version
2063
+ if [ -n "$NVM_RC_VERSION" ]; then
2064
+ provided_version="$NVM_RC_VERSION"
2065
+ VERSION=$(nvm_version "$NVM_RC_VERSION")
2066
+ fi
2067
+ elif [ "_$2" != '_system' ]; then
2068
+ VERSION="$(nvm_version "$provided_version")"
2069
+ else
2070
+ VERSION="$2"
2071
+ fi
2072
+ if [ -z "$VERSION" ]; then
2073
+ >&2 nvm help
2074
+ return 127
2075
+ fi
2076
+
2077
+ if [ "_$VERSION" = '_system' ]; then
2078
+ if nvm_has_system_iojs >/dev/null 2>&1 || nvm_has_system_node >/dev/null 2>&1; then
2079
+ local NVM_BIN
2080
+ NVM_BIN="$(nvm use system >/dev/null 2>&1 && command which node)"
2081
+ if [ -n "$NVM_BIN" ]; then
2082
+ echo "$NVM_BIN"
2083
+ return
2084
+ else
2085
+ return 1
2086
+ fi
2087
+ else
2088
+ echo "System version of node not found." >&2
2089
+ return 127
2090
+ fi
2091
+ elif [ "_$VERSION" = "_∞" ]; then
2092
+ echo "The alias \"$2\" leads to an infinite loop. Aborting." >&2
2093
+ return 8
2094
+ fi
2095
+
2096
+ nvm_ensure_version_installed "$provided_version"
2097
+ EXIT_CODE=$?
2098
+ if [ "$EXIT_CODE" != "0" ]; then
2099
+ return $EXIT_CODE
2100
+ fi
2101
+ local NVM_VERSION_DIR
2102
+ NVM_VERSION_DIR="$(nvm_version_path "$VERSION")"
2103
+ echo "$NVM_VERSION_DIR/bin/node"
2104
+ ;;
2105
+ "alias" )
2106
+ local NVM_ALIAS_DIR
2107
+ NVM_ALIAS_DIR="$(nvm_alias_path)"
2108
+ command mkdir -p "$NVM_ALIAS_DIR"
2109
+ if [ $# -le 2 ]; then
2110
+ local DEST
2111
+ for ALIAS_PATH in "$NVM_ALIAS_DIR"/"$2"*; do
2112
+ ALIAS="$(command basename "$ALIAS_PATH")"
2113
+ DEST="$(nvm_alias "$ALIAS" 2> /dev/null)"
2114
+ if [ -n "$DEST" ]; then
2115
+ VERSION="$(nvm_version "$DEST")"
2116
+ if [ "_$DEST" = "_$VERSION" ]; then
2117
+ echo "$ALIAS -> $DEST"
2118
+ else
2119
+ echo "$ALIAS -> $DEST (-> $VERSION)"
2120
+ fi
2121
+ fi
2122
+ done
2123
+
2124
+ for ALIAS in "$(nvm_node_prefix)" "stable" "unstable" "$(nvm_iojs_prefix)"; do
2125
+ if [ ! -f "$NVM_ALIAS_DIR/$ALIAS" ]; then
2126
+ if [ $# -lt 2 ] || [ "~$ALIAS" = "~$2" ]; then
2127
+ DEST="$(nvm_print_implicit_alias local "$ALIAS")"
2128
+ if [ "_$DEST" != "_" ]; then
2129
+ VERSION="$(nvm_version "$DEST")"
2130
+ if [ "_$DEST" = "_$VERSION" ]; then
2131
+ echo "$ALIAS -> $DEST (default)"
2132
+ else
2133
+ echo "$ALIAS -> $DEST (-> $VERSION) (default)"
2134
+ fi
2135
+ fi
2136
+ fi
2137
+ fi
2138
+ done
2139
+ return
2140
+ fi
2141
+ if [ -z "$3" ]; then
2142
+ command rm -f "$NVM_ALIAS_DIR/$2"
2143
+ echo "$2 -> *poof*"
2144
+ return
2145
+ fi
2146
+ VERSION="$(nvm_version "$3")"
2147
+ if [ $? -ne 0 ]; then
2148
+ echo "! WARNING: Version '$3' does not exist." >&2
2149
+ fi
2150
+ echo "$3" | tee "$NVM_ALIAS_DIR/$2" >/dev/null
2151
+ if [ ! "_$3" = "_$VERSION" ]; then
2152
+ echo "$2 -> $3 (-> $VERSION)"
2153
+ else
2154
+ echo "$2 -> $3"
2155
+ fi
2156
+ ;;
2157
+ "unalias" )
2158
+ local NVM_ALIAS_DIR
2159
+ NVM_ALIAS_DIR="$(nvm_alias_path)"
2160
+ command mkdir -p "$NVM_ALIAS_DIR"
2161
+ if [ $# -ne 2 ]; then
2162
+ >&2 nvm help
2163
+ return 127
2164
+ fi
2165
+ [ ! -f "$NVM_ALIAS_DIR/$2" ] && echo "Alias $2 doesn't exist!" >&2 && return
2166
+ local NVM_ALIAS_ORIGINAL
2167
+ NVM_ALIAS_ORIGINAL="$(nvm_alias "$2")"
2168
+ command rm -f "$NVM_ALIAS_DIR/$2"
2169
+ echo "Deleted alias $2 - restore it with \`nvm alias $2 "$NVM_ALIAS_ORIGINAL"\`"
2170
+ ;;
2171
+ "reinstall-packages" | "copy-packages" )
2172
+ if [ $# -ne 2 ]; then
2173
+ >&2 nvm help
2174
+ return 127
2175
+ fi
2176
+
2177
+ local PROVIDED_VERSION
2178
+ PROVIDED_VERSION="$2"
2179
+
2180
+ if [ "$PROVIDED_VERSION" = "$(nvm_ls_current)" ] || [ "$(nvm_version "$PROVIDED_VERSION")" = "$(nvm_ls_current)" ]; then
2181
+ echo 'Can not reinstall packages from the current version of node.' >&2
2182
+ return 2
2183
+ fi
2184
+
2185
+ local VERSION
2186
+ if [ "_$PROVIDED_VERSION" = "_system" ]; then
2187
+ if ! nvm_has_system_node && ! nvm_has_system_iojs; then
2188
+ echo 'No system version of node or io.js detected.' >&2
2189
+ return 3
2190
+ fi
2191
+ VERSION="system"
2192
+ else
2193
+ VERSION="$(nvm_version "$PROVIDED_VERSION")"
2194
+ fi
2195
+
2196
+ local NPMLIST
2197
+ NPMLIST="$(nvm_npm_global_modules "$VERSION")"
2198
+ local INSTALLS
2199
+ local LINKS
2200
+ INSTALLS="${NPMLIST%% //// *}"
2201
+ LINKS="${NPMLIST##* //// }"
2202
+
2203
+ echo "Reinstalling global packages from $VERSION..."
2204
+ echo "$INSTALLS" | command xargs npm install -g --quiet
2205
+
2206
+ echo "Linking global packages from $VERSION..."
2207
+ set -f; IFS='
2208
+ ' # necessary to turn off variable expansion except for newlines
2209
+ for LINK in $LINKS; do
2210
+ set +f; unset IFS # restore variable expansion
2211
+ if [ -n "$LINK" ]; then
2212
+ (cd "$LINK" && npm link)
2213
+ fi
2214
+ done
2215
+ set +f; unset IFS # restore variable expansion in case $LINKS was empty
2216
+ ;;
2217
+ "clear-cache" )
2218
+ command rm -f "$NVM_DIR/v*" "$(nvm_version_dir)" 2>/dev/null
2219
+ echo "Cache cleared."
2220
+ ;;
2221
+ "version" )
2222
+ nvm_version "$2"
2223
+ ;;
2224
+ "version-remote" )
2225
+ nvm_remote_version "$2"
2226
+ ;;
2227
+ "--version" )
2228
+ echo "0.29.0"
2229
+ ;;
2230
+ "unload" )
2231
+ unset -f nvm nvm_print_versions nvm_checksum \
2232
+ nvm_iojs_prefix nvm_node_prefix \
2233
+ nvm_add_iojs_prefix nvm_strip_iojs_prefix \
2234
+ nvm_is_iojs_version nvm_is_alias \
2235
+ nvm_ls_remote nvm_ls_remote_iojs nvm_ls_remote_index_tab \
2236
+ nvm_ls nvm_remote_version nvm_remote_versions \
2237
+ nvm_install_iojs_binary nvm_install_node_binary \
2238
+ nvm_install_node_source \
2239
+ nvm_version nvm_rc_version nvm_match_version \
2240
+ nvm_ensure_default_set nvm_get_arch nvm_get_os \
2241
+ nvm_print_implicit_alias nvm_validate_implicit_alias \
2242
+ nvm_resolve_alias nvm_ls_current nvm_alias \
2243
+ nvm_binary_available nvm_prepend_path nvm_strip_path \
2244
+ nvm_num_version_groups nvm_format_version nvm_ensure_version_prefix \
2245
+ nvm_normalize_version nvm_is_valid_version \
2246
+ nvm_ensure_version_installed \
2247
+ nvm_version_path nvm_alias_path nvm_version_dir \
2248
+ nvm_find_nvmrc nvm_find_up nvm_tree_contains_path \
2249
+ nvm_version_greater nvm_version_greater_than_or_equal_to \
2250
+ nvm_print_npm_version nvm_npm_global_modules \
2251
+ nvm_has_system_node nvm_has_system_iojs \
2252
+ nvm_download nvm_get_latest nvm_has nvm_get_latest \
2253
+ nvm_supports_source_options nvm_supports_xz > /dev/null 2>&1
2254
+ unset RC_VERSION NVM_NODEJS_ORG_MIRROR NVM_DIR NVM_CD_FLAGS > /dev/null 2>&1
2255
+ ;;
2256
+ * )
2257
+ >&2 nvm help
2258
+ return 127
2259
+ ;;
2260
+ esac
2261
+ }
2262
+
2263
+ nvm_supports_source_options() {
2264
+ [ "_$(echo '[ $# -gt 0 ] && echo $1' | . /dev/stdin yes 2> /dev/null)" = "_yes" ]
2265
+ }
2266
+
2267
+ nvm_supports_xz() {
2268
+ command which xz >/dev/null 2>&1 && nvm_version_greater_than_or_equal_to "$1" "2.3.2"
2269
+ }
2270
+
2271
+ NVM_VERSION="$(nvm_alias default 2>/dev/null || echo)"
2272
+ if nvm_supports_source_options && [ "$#" -gt 0 ] && [ "_$1" = "_--install" ]; then
2273
+ if [ -n "$NVM_VERSION" ]; then
2274
+ nvm install "$NVM_VERSION" >/dev/null
2275
+ elif nvm_rc_version >/dev/null 2>&1; then
2276
+ nvm install >/dev/null
2277
+ fi
2278
+ elif [ -n "$NVM_VERSION" ]; then
2279
+ nvm use --silent "$NVM_VERSION" >/dev/null
2280
+ elif nvm_rc_version >/dev/null 2>&1; then
2281
+ nvm use --silent >/dev/null
2282
+ fi
2283
+
2284
+ } # this ensures the entire script is downloaded #