semver 1.0.10 → 1.0.14

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.
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  { "name" : "semver"
2
- , "version" : "1.0.10"
2
+ , "version" : "1.0.14"
3
3
  , "description" : "The semantic version parser used by npm."
4
4
  , "main" : "semver.js"
5
- , "scripts" : { "test" : "tap semver.js" }
5
+ , "scripts" : { "test" : "tap test.js" }
6
6
  , "devDependencies": { "tap" : "0.x >=0.0.4" }
7
7
  , "license" :
8
8
  { "type" : "MIT"
package/semver.js CHANGED
@@ -1,3 +1,4 @@
1
+ ;(function (exports) { // nothing in here is node-specific.
1
2
 
2
3
  // See http://semver.org/
3
4
  // This implementation is a *hair* less strict in that it allows
@@ -11,8 +12,9 @@ var semver = "\\s*[v=]*\\s*([0-9]+)" // major
11
12
  , exprComparator = "^((<|>)?=?)\s*("+semver+")$|^$"
12
13
  , xRangePlain = "[v=]*([0-9]+|x|X|\\*)"
13
14
  + "(?:\\.([0-9]+|x|X|\\*)"
14
- + "(?:\\.([0-9]+|x|X|\\*))?)?"
15
- , xRange = "((?:<|>)?=?)?\\s*" + xRangePlain
15
+ + "(?:\\.([0-9]+|x|X|\\*)"
16
+ + "([a-zA-Z-][a-zA-Z0-9-\.:]*)?)?)?"
17
+ , xRange = "((?:<|>)=?)?\\s*" + xRangePlain
16
18
  , exprSpermy = "(?:~>?)"+xRange
17
19
  , expressions = exports.expressions =
18
20
  { parse : new RegExp("^\\s*"+semver+"\\s*$")
@@ -24,6 +26,7 @@ var semver = "\\s*[v=]*\\s*([0-9]+)" // major
24
26
  , parseSpermy : new RegExp("^"+exprSpermy+"$")
25
27
  }
26
28
 
29
+
27
30
  Object.getOwnPropertyNames(expressions).forEach(function (i) {
28
31
  exports[i] = function (str) {
29
32
  return ("" + (str || "")).match(expressions[i])
@@ -33,6 +36,7 @@ Object.getOwnPropertyNames(expressions).forEach(function (i) {
33
36
  exports.rangeReplace = ">=$1 <=$7"
34
37
  exports.clean = clean
35
38
  exports.compare = compare
39
+ exports.rcompare = rcompare
36
40
  exports.satisfies = satisfies
37
41
  exports.gt = gt
38
42
  exports.gte = gte
@@ -48,6 +52,9 @@ exports.validPackage = validPackage
48
52
  exports.validRange = validRange
49
53
  exports.maxSatisfying = maxSatisfying
50
54
 
55
+ exports.replaceStars = replaceStars
56
+ exports.toComparators = toComparators
57
+
51
58
  function stringify (version) {
52
59
  var v = version
53
60
  return [v[1]||'', v[2]||'', v[3]||''].join(".") + (v[4]||'') + (v[5]||'')
@@ -107,11 +114,11 @@ function toComparators (range) {
107
114
  }
108
115
 
109
116
  function replaceStars (stars) {
110
- return stars.replace(starExpression, starReplace)
117
+ return stars.trim().replace(starExpression, starReplace)
111
118
  }
112
119
 
113
- // "2.x","2.x.x" --> ">=2.0.0 <2.1"
114
- // "2.3.x" --> ">=2.3.0 <2.4.0"
120
+ // "2.x","2.x.x" --> ">=2.0.0- <2.1.0-"
121
+ // "2.3.x" --> ">=2.3.0- <2.4.0-"
115
122
  function replaceXRanges (ranges) {
116
123
  return ranges.split(/\s+/)
117
124
  .map(replaceXRange)
@@ -120,7 +127,7 @@ function replaceXRanges (ranges) {
120
127
 
121
128
  function replaceXRange (version) {
122
129
  return version.trim().replace(expressions.parseXRange,
123
- function (v, gtlt, M, m, p) {
130
+ function (v, gtlt, M, m, p, t) {
124
131
  var anyX = !M || M.toLowerCase() === "x" || M === "*"
125
132
  || !m || m.toLowerCase() === "x" || m === "*"
126
133
  || !p || p.toLowerCase() === "x" || p === "*"
@@ -131,7 +138,7 @@ function replaceXRange (version) {
131
138
  ;(!M || M === "*" || M.toLowerCase() === "x") && (M = 0)
132
139
  ;(!m || m === "*" || m.toLowerCase() === "x") && (m = 0)
133
140
  ;(!p || p === "*" || p.toLowerCase() === "x") && (p = 0)
134
- ret = gtlt + M+"."+m+"."+p
141
+ ret = gtlt + M+"."+m+"."+p+"-"
135
142
  } else if (!M || M === "*" || M.toLowerCase() === "x") {
136
143
  ret = "*" // allow any
137
144
  } else if (!m || m === "*" || m.toLowerCase() === "x") {
@@ -155,27 +162,29 @@ function replaceXRange (version) {
155
162
  // ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0
156
163
  function replaceSpermies (version) {
157
164
  return version.trim().replace(expressions.parseSpermy,
158
- function (v, gtlt, M, m, p) {
165
+ function (v, gtlt, M, m, p, t) {
159
166
  if (gtlt) throw new Error(
160
167
  "Using '"+gtlt+"' with ~ makes no sense. Don't do it.")
168
+
161
169
  if (!M || M.toLowerCase() === "x") {
162
- return "*"
170
+ return ""
163
171
  }
164
- // ~1 == >=1.0.0 <2.0.0
172
+ // ~1 == >=1.0.0- <2.0.0-
165
173
  if (!m || m.toLowerCase() === "x") {
166
- return ">="+M+".0.0 <"+(+M+1)+".0.0"
174
+ return ">="+M+".0.0- <"+(+M+1)+".0.0-"
167
175
  }
168
- // ~1.2 == >=1.2.0 <1.3.0
176
+ // ~1.2 == >=1.2.0- <1.3.0-
169
177
  if (!p || p.toLowerCase() === "x") {
170
- return ">="+M+"."+m+".0 <"+M+"."+(+m+1)+".0"
178
+ return ">="+M+"."+m+".0- <"+M+"."+(+m+1)+".0-"
171
179
  }
172
- // ~1.2.3 == >=1.2.3 <1.3.0
173
- return ">="+M+"."+m+"."+p+" <"+M+"."+(+m+1)+".0"
180
+ // ~1.2.3 == >=1.2.3- <1.3.0-
181
+ t = t || "-"
182
+ return ">="+M+"."+m+"."+p+t+" <"+M+"."+(+m+1)+".0-"
174
183
  })
175
184
  }
176
185
 
177
186
  function validRange (range) {
178
- range = range.trim().replace(starExpression, starReplace)
187
+ range = replaceStars(range)
179
188
  var c = toComparators(range)
180
189
  return (c.length === 0)
181
190
  ? null
@@ -293,242 +302,4 @@ function inc (version, release) {
293
302
 
294
303
  return stringify(version)
295
304
  }
296
-
297
- if (module === require.main) { // tests below
298
-
299
- var tap = require("tap")
300
- , test = tap.test
301
-
302
- tap.plan(5)
303
-
304
- test("\ncomparison tests", function (t) {
305
- ; [ ["0.0.0", "0.0.0foo"]
306
- , ["0.0.1", "0.0.0"]
307
- , ["1.0.0", "0.9.9"]
308
- , ["0.10.0", "0.9.0"]
309
- , ["0.99.0", "0.10.0"]
310
- , ["2.0.0", "1.2.3"]
311
- , ["v0.0.0", "0.0.0foo"]
312
- , ["v0.0.1", "0.0.0"]
313
- , ["v1.0.0", "0.9.9"]
314
- , ["v0.10.0", "0.9.0"]
315
- , ["v0.99.0", "0.10.0"]
316
- , ["v2.0.0", "1.2.3"]
317
- , ["0.0.0", "v0.0.0foo"]
318
- , ["0.0.1", "v0.0.0"]
319
- , ["1.0.0", "v0.9.9"]
320
- , ["0.10.0", "v0.9.0"]
321
- , ["0.99.0", "v0.10.0"]
322
- , ["2.0.0", "v1.2.3"]
323
- , ["1.2.3", "1.2.3-asdf"]
324
- , ["1.2.3-4", "1.2.3"]
325
- , ["1.2.3-4-foo", "1.2.3"]
326
- , ["1.2.3-5", "1.2.3-5-foo"]
327
- , ["1.2.3-5", "1.2.3-4"]
328
- , ["1.2.3-5-foo", "1.2.3-5-Foo"]
329
- ].forEach(function (v) {
330
- var v0 = v[0]
331
- , v1 = v[1]
332
- t.ok(gt(v0, v1), "gt('"+v0+"', '"+v1+"')")
333
- t.ok(lt(v1, v0), "lt('"+v1+"', '"+v0+"')")
334
- t.ok(!gt(v1, v0), "!gt('"+v1+"', '"+v0+"')")
335
- t.ok(!lt(v0, v1), "!lt('"+v0+"', '"+v1+"')")
336
- t.ok(eq(v0, v0), "eq('"+v0+"', '"+v0+"')")
337
- t.ok(eq(v1, v1), "eq('"+v1+"', '"+v1+"')")
338
- t.ok(neq(v0, v1), "neq('"+v0+"', '"+v1+"')")
339
- t.ok(cmp(v1, "==", v1), "cmp('"+v1+"' == '"+v1+"')")
340
- t.ok(cmp(v0, ">=", v1), "cmp('"+v0+"' >= '"+v1+"')")
341
- t.ok(cmp(v1, "<=", v0), "cmp('"+v1+"' <= '"+v0+"')")
342
- t.ok(cmp(v0, "!=", v1), "cmp('"+v0+"' != '"+v1+"')")
343
- })
344
- t.end()
345
- })
346
-
347
- test("\nequality tests", function (t) {
348
- ; [ ["1.2.3", "v1.2.3"]
349
- , ["1.2.3", "=1.2.3"]
350
- , ["1.2.3", "v 1.2.3"]
351
- , ["1.2.3", "= 1.2.3"]
352
- , ["1.2.3", " v1.2.3"]
353
- , ["1.2.3", " =1.2.3"]
354
- , ["1.2.3", " v 1.2.3"]
355
- , ["1.2.3", " = 1.2.3"]
356
- , ["1.2.3-0", "v1.2.3-0"]
357
- , ["1.2.3-0", "=1.2.3-0"]
358
- , ["1.2.3-0", "v 1.2.3-0"]
359
- , ["1.2.3-0", "= 1.2.3-0"]
360
- , ["1.2.3-0", " v1.2.3-0"]
361
- , ["1.2.3-0", " =1.2.3-0"]
362
- , ["1.2.3-0", " v 1.2.3-0"]
363
- , ["1.2.3-0", " = 1.2.3-0"]
364
- , ["1.2.3-01", "v1.2.3-1"]
365
- , ["1.2.3-01", "=1.2.3-1"]
366
- , ["1.2.3-01", "v 1.2.3-1"]
367
- , ["1.2.3-01", "= 1.2.3-1"]
368
- , ["1.2.3-01", " v1.2.3-1"]
369
- , ["1.2.3-01", " =1.2.3-1"]
370
- , ["1.2.3-01", " v 1.2.3-1"]
371
- , ["1.2.3-01", " = 1.2.3-1"]
372
- , ["1.2.3beta", "v1.2.3beta"]
373
- , ["1.2.3beta", "=1.2.3beta"]
374
- , ["1.2.3beta", "v 1.2.3beta"]
375
- , ["1.2.3beta", "= 1.2.3beta"]
376
- , ["1.2.3beta", " v1.2.3beta"]
377
- , ["1.2.3beta", " =1.2.3beta"]
378
- , ["1.2.3beta", " v 1.2.3beta"]
379
- , ["1.2.3beta", " = 1.2.3beta"]
380
- ].forEach(function (v) {
381
- var v0 = v[0]
382
- , v1 = v[1]
383
- t.ok(eq(v0, v1), "eq('"+v0+"', '"+v1+"')")
384
- t.ok(!neq(v0, v1), "!neq('"+v0+"', '"+v1+"')")
385
- t.ok(cmp(v0, "==", v1), "cmp("+v0+"=="+v1+")")
386
- t.ok(!cmp(v0, "!=", v1), "!cmp("+v0+"!="+v1+")")
387
- t.ok(!cmp(v0, "===", v1), "!cmp("+v0+"==="+v1+")")
388
- t.ok(cmp(v0, "!==", v1), "cmp("+v0+"!=="+v1+")")
389
- t.ok(!gt(v0, v1), "!gt('"+v0+"', '"+v1+"')")
390
- t.ok(gte(v0, v1), "gte('"+v0+"', '"+v1+"')")
391
- t.ok(!lt(v0, v1), "!lt('"+v0+"', '"+v1+"')")
392
- t.ok(lte(v0, v1), "lte('"+v0+"', '"+v1+"')")
393
- })
394
- t.end()
395
- })
396
-
397
-
398
- test("\nrange tests", function (t) {
399
- ; [ ["1.0.0 - 2.0.0", "1.2.3"]
400
- , ["1.0.0", "1.0.0"]
401
- , [">=*", "0.2.4"]
402
- , ["", "1.0.0"]
403
- , ["*", "1.2.3"]
404
- , ["*", "v1.2.3-foo"]
405
- , [">=1.0.0", "1.0.0"]
406
- , [">=1.0.0", "1.0.1"]
407
- , [">=1.0.0", "1.1.0"]
408
- , [">1.0.0", "1.0.1"]
409
- , [">1.0.0", "1.1.0"]
410
- , ["<=2.0.0", "2.0.0"]
411
- , ["<=2.0.0", "1.9999.9999"]
412
- , ["<=2.0.0", "0.2.9"]
413
- , ["<2.0.0", "1.9999.9999"]
414
- , ["<2.0.0", "0.2.9"]
415
- , [">= 1.0.0", "1.0.0"]
416
- , [">= 1.0.0", "1.0.1"]
417
- , [">= 1.0.0", "1.1.0"]
418
- , ["> 1.0.0", "1.0.1"]
419
- , ["> 1.0.0", "1.1.0"]
420
- , ["<= 2.0.0", "2.0.0"]
421
- , ["<= 2.0.0", "1.9999.9999"]
422
- , ["<= 2.0.0", "0.2.9"]
423
- , ["< 2.0.0", "1.9999.9999"]
424
- , ["<\t2.0.0", "0.2.9"]
425
- , [">=0.1.97", "v0.1.97"]
426
- , [">=0.1.97", "0.1.97"]
427
- , ["0.1.20 || 1.2.4", "1.2.4"]
428
- , [">=0.2.3 || <0.0.1", "0.0.0"]
429
- , [">=0.2.3 || <0.0.1", "0.2.3"]
430
- , [">=0.2.3 || <0.0.1", "0.2.4"]
431
- , ["||", "1.3.4"]
432
- , ["2.x.x", "2.1.3"]
433
- , ["1.2.x", "1.2.3"]
434
- , ["1.2.x || 2.x", "2.1.3"]
435
- , ["1.2.x || 2.x", "1.2.3"]
436
- , ["x", "1.2.3"]
437
- , ["2.*.*", "2.1.3"]
438
- , ["1.2.*", "1.2.3"]
439
- , ["1.2.* || 2.*", "2.1.3"]
440
- , ["1.2.* || 2.*", "1.2.3"]
441
- , ["*", "1.2.3"]
442
- , ["2", "2.1.2"]
443
- , ["2.3", "2.3.1"]
444
- , ["~2.4", "2.4.0"] // >=2.4.0 <2.5.0
445
- , ["~2.4", "2.4.5"]
446
- , ["~>3.2.1", "3.2.2"] // >=3.2.1 <3.3.0
447
- , ["~1", "1.2.3"] // >=1.0.0 <2.0.0
448
- , ["~>1", "1.2.3"]
449
- , ["~> 1", "1.2.3"]
450
- , ["~1.0", "1.0.2"] // >=1.0.0 <1.1.0
451
- , ["~ 1.0", "1.0.2"]
452
- , ["<1", "1.0.0beta"]
453
- , ["< 1", "1.0.0beta"]
454
- , [">=1", "1.0.0"]
455
- , [">= 1", "1.0.0"]
456
- , ["<1.2", "1.1.1"]
457
- , ["< 1.2", "1.1.1"]
458
- , ["1", "1.0.0beta"]
459
- ].forEach(function (v) {
460
- t.ok(satisfies(v[1], v[0]), v[0]+" satisfied by "+v[1])
461
- })
462
- t.end()
463
- })
464
-
465
- test("\nnegative range tests", function (t) {
466
- ; [ ["1.0.0 - 2.0.0", "2.2.3"]
467
- , ["1.0.0", "1.0.1"]
468
- , [">=1.0.0", "0.0.0"]
469
- , [">=1.0.0", "0.0.1"]
470
- , [">=1.0.0", "0.1.0"]
471
- , [">1.0.0", "0.0.1"]
472
- , [">1.0.0", "0.1.0"]
473
- , ["<=2.0.0", "3.0.0"]
474
- , ["<=2.0.0", "2.9999.9999"]
475
- , ["<=2.0.0", "2.2.9"]
476
- , ["<2.0.0", "2.9999.9999"]
477
- , ["<2.0.0", "2.2.9"]
478
- , [">=0.1.97", "v0.1.93"]
479
- , [">=0.1.97", "0.1.93"]
480
- , ["0.1.20 || 1.2.4", "1.2.3"]
481
- , [">=0.2.3 || <0.0.1", "0.0.3"]
482
- , [">=0.2.3 || <0.0.1", "0.2.2"]
483
- , ["2.x.x", "1.1.3"]
484
- , ["2.x.x", "3.1.3"]
485
- , ["1.2.x", "1.3.3"]
486
- , ["1.2.x || 2.x", "3.1.3"]
487
- , ["1.2.x || 2.x", "1.1.3"]
488
- , ["2.*.*", "1.1.3"]
489
- , ["2.*.*", "3.1.3"]
490
- , ["1.2.*", "1.3.3"]
491
- , ["1.2.* || 2.*", "3.1.3"]
492
- , ["1.2.* || 2.*", "1.1.3"]
493
- , ["2", "1.1.2"]
494
- , ["2.3", "2.4.1"]
495
- , ["~2.4", "2.5.0"] // >=2.4.0 <2.5.0
496
- , ["~2.4", "2.3.9"]
497
- , ["~>3.2.1", "3.3.2"] // >=3.2.1 <3.3.0
498
- , ["~>3.2.1", "3.2.0"] // >=3.2.1 <3.3.0
499
- , ["~1", "0.2.3"] // >=1.0.0 <2.0.0
500
- , ["~>1", "2.2.3"]
501
- , ["~1.0", "1.1.0"] // >=1.0.0 <1.1.0
502
- , ["<1", "1.0.0"]
503
- , [">=1.2", "1.1.1"]
504
- , ["1", "2.0.0beta"]
505
- ].forEach(function (v) {
506
- t.ok(!satisfies(v[1], v[0]), v[0]+" not satisfied by "+v[1])
507
- })
508
- t.end()
509
- })
510
-
511
- test("\nincrement versions test", function (t) {
512
- ; [ [ "1.2.3", "major", "2.0.0" ]
513
- , [ "1.2.3", "minor", "1.3.0" ]
514
- , [ "1.2.3", "patch", "1.2.4" ]
515
- , [ "1.2.3", "build", "1.2.3-1" ]
516
- , [ "1.2.3-4", "build", "1.2.3-5" ]
517
-
518
- , [ "1.2.3tag", "major", "2.0.0" ]
519
- , [ "1.2.3-tag", "major", "2.0.0" ]
520
- , [ "1.2.3tag", "build", "1.2.3-1" ]
521
- , [ "1.2.3-tag", "build", "1.2.3-1" ]
522
- , [ "1.2.3-4-tag", "build", "1.2.3-5" ]
523
- , [ "1.2.3-4tag", "build", "1.2.3-5" ]
524
-
525
- , [ "1.2.3", "fake", null ]
526
- , [ "fake", "major", null ]
527
- ].forEach(function (v) {
528
- t.equal(inc(v[0], v[1]), v[2], "inc("+v[0]+", "+v[1]+") === "+v[2])
529
- })
530
-
531
- t.end()
532
- })
533
-
534
- }
305
+ })(typeof exports === "object" ? exports : semver = {})
package/test.js ADDED
@@ -0,0 +1,405 @@
1
+ var tap = require("tap")
2
+ , test = tap.test
3
+ , semver = require("./semver.js")
4
+ , eq = semver.eq
5
+ , gt = semver.gt
6
+ , lt = semver.lt
7
+ , neq = semver.neq
8
+ , cmp = semver.cmp
9
+ , gte = semver.gte
10
+ , lte = semver.lte
11
+ , satisfies = semver.satisfies
12
+ , validRange = semver.validRange
13
+ , inc = semver.inc
14
+ , replaceStars = semver.replaceStars
15
+ , toComparators = semver.toComparators
16
+
17
+ tap.plan(8)
18
+
19
+ test("\ncomparison tests", function (t) {
20
+ ; [ ["0.0.0", "0.0.0foo"]
21
+ , ["0.0.1", "0.0.0"]
22
+ , ["1.0.0", "0.9.9"]
23
+ , ["0.10.0", "0.9.0"]
24
+ , ["0.99.0", "0.10.0"]
25
+ , ["2.0.0", "1.2.3"]
26
+ , ["v0.0.0", "0.0.0foo"]
27
+ , ["v0.0.1", "0.0.0"]
28
+ , ["v1.0.0", "0.9.9"]
29
+ , ["v0.10.0", "0.9.0"]
30
+ , ["v0.99.0", "0.10.0"]
31
+ , ["v2.0.0", "1.2.3"]
32
+ , ["0.0.0", "v0.0.0foo"]
33
+ , ["0.0.1", "v0.0.0"]
34
+ , ["1.0.0", "v0.9.9"]
35
+ , ["0.10.0", "v0.9.0"]
36
+ , ["0.99.0", "v0.10.0"]
37
+ , ["2.0.0", "v1.2.3"]
38
+ , ["1.2.3", "1.2.3-asdf"]
39
+ , ["1.2.3-4", "1.2.3"]
40
+ , ["1.2.3-4-foo", "1.2.3"]
41
+ , ["1.2.3-5", "1.2.3-5-foo"]
42
+ , ["1.2.3-5", "1.2.3-4"]
43
+ , ["1.2.3-5-foo", "1.2.3-5-Foo"]
44
+ ].forEach(function (v) {
45
+ var v0 = v[0]
46
+ , v1 = v[1]
47
+ t.ok(gt(v0, v1), "gt('"+v0+"', '"+v1+"')")
48
+ t.ok(lt(v1, v0), "lt('"+v1+"', '"+v0+"')")
49
+ t.ok(!gt(v1, v0), "!gt('"+v1+"', '"+v0+"')")
50
+ t.ok(!lt(v0, v1), "!lt('"+v0+"', '"+v1+"')")
51
+ t.ok(eq(v0, v0), "eq('"+v0+"', '"+v0+"')")
52
+ t.ok(eq(v1, v1), "eq('"+v1+"', '"+v1+"')")
53
+ t.ok(neq(v0, v1), "neq('"+v0+"', '"+v1+"')")
54
+ t.ok(cmp(v1, "==", v1), "cmp('"+v1+"' == '"+v1+"')")
55
+ t.ok(cmp(v0, ">=", v1), "cmp('"+v0+"' >= '"+v1+"')")
56
+ t.ok(cmp(v1, "<=", v0), "cmp('"+v1+"' <= '"+v0+"')")
57
+ t.ok(cmp(v0, "!=", v1), "cmp('"+v0+"' != '"+v1+"')")
58
+ })
59
+ t.end()
60
+ })
61
+
62
+ test("\nequality tests", function (t) {
63
+ ; [ ["1.2.3", "v1.2.3"]
64
+ , ["1.2.3", "=1.2.3"]
65
+ , ["1.2.3", "v 1.2.3"]
66
+ , ["1.2.3", "= 1.2.3"]
67
+ , ["1.2.3", " v1.2.3"]
68
+ , ["1.2.3", " =1.2.3"]
69
+ , ["1.2.3", " v 1.2.3"]
70
+ , ["1.2.3", " = 1.2.3"]
71
+ , ["1.2.3-0", "v1.2.3-0"]
72
+ , ["1.2.3-0", "=1.2.3-0"]
73
+ , ["1.2.3-0", "v 1.2.3-0"]
74
+ , ["1.2.3-0", "= 1.2.3-0"]
75
+ , ["1.2.3-0", " v1.2.3-0"]
76
+ , ["1.2.3-0", " =1.2.3-0"]
77
+ , ["1.2.3-0", " v 1.2.3-0"]
78
+ , ["1.2.3-0", " = 1.2.3-0"]
79
+ , ["1.2.3-01", "v1.2.3-1"]
80
+ , ["1.2.3-01", "=1.2.3-1"]
81
+ , ["1.2.3-01", "v 1.2.3-1"]
82
+ , ["1.2.3-01", "= 1.2.3-1"]
83
+ , ["1.2.3-01", " v1.2.3-1"]
84
+ , ["1.2.3-01", " =1.2.3-1"]
85
+ , ["1.2.3-01", " v 1.2.3-1"]
86
+ , ["1.2.3-01", " = 1.2.3-1"]
87
+ , ["1.2.3beta", "v1.2.3beta"]
88
+ , ["1.2.3beta", "=1.2.3beta"]
89
+ , ["1.2.3beta", "v 1.2.3beta"]
90
+ , ["1.2.3beta", "= 1.2.3beta"]
91
+ , ["1.2.3beta", " v1.2.3beta"]
92
+ , ["1.2.3beta", " =1.2.3beta"]
93
+ , ["1.2.3beta", " v 1.2.3beta"]
94
+ , ["1.2.3beta", " = 1.2.3beta"]
95
+ ].forEach(function (v) {
96
+ var v0 = v[0]
97
+ , v1 = v[1]
98
+ t.ok(eq(v0, v1), "eq('"+v0+"', '"+v1+"')")
99
+ t.ok(!neq(v0, v1), "!neq('"+v0+"', '"+v1+"')")
100
+ t.ok(cmp(v0, "==", v1), "cmp("+v0+"=="+v1+")")
101
+ t.ok(!cmp(v0, "!=", v1), "!cmp("+v0+"!="+v1+")")
102
+ t.ok(!cmp(v0, "===", v1), "!cmp("+v0+"==="+v1+")")
103
+ t.ok(cmp(v0, "!==", v1), "cmp("+v0+"!=="+v1+")")
104
+ t.ok(!gt(v0, v1), "!gt('"+v0+"', '"+v1+"')")
105
+ t.ok(gte(v0, v1), "gte('"+v0+"', '"+v1+"')")
106
+ t.ok(!lt(v0, v1), "!lt('"+v0+"', '"+v1+"')")
107
+ t.ok(lte(v0, v1), "lte('"+v0+"', '"+v1+"')")
108
+ })
109
+ t.end()
110
+ })
111
+
112
+
113
+ test("\nrange tests", function (t) {
114
+ ; [ ["1.0.0 - 2.0.0", "1.2.3"]
115
+ , ["1.0.0", "1.0.0"]
116
+ , [">=*", "0.2.4"]
117
+ , ["", "1.0.0"]
118
+ , ["*", "1.2.3"]
119
+ , ["*", "v1.2.3-foo"]
120
+ , [">=1.0.0", "1.0.0"]
121
+ , [">=1.0.0", "1.0.1"]
122
+ , [">=1.0.0", "1.1.0"]
123
+ , [">1.0.0", "1.0.1"]
124
+ , [">1.0.0", "1.1.0"]
125
+ , ["<=2.0.0", "2.0.0"]
126
+ , ["<=2.0.0", "1.9999.9999"]
127
+ , ["<=2.0.0", "0.2.9"]
128
+ , ["<2.0.0", "1.9999.9999"]
129
+ , ["<2.0.0", "0.2.9"]
130
+ , [">= 1.0.0", "1.0.0"]
131
+ , [">= 1.0.0", "1.0.1"]
132
+ , [">= 1.0.0", "1.1.0"]
133
+ , ["> 1.0.0", "1.0.1"]
134
+ , ["> 1.0.0", "1.1.0"]
135
+ , ["<= 2.0.0", "2.0.0"]
136
+ , ["<= 2.0.0", "1.9999.9999"]
137
+ , ["<= 2.0.0", "0.2.9"]
138
+ , ["< 2.0.0", "1.9999.9999"]
139
+ , ["<\t2.0.0", "0.2.9"]
140
+ , [">=0.1.97", "v0.1.97"]
141
+ , [">=0.1.97", "0.1.97"]
142
+ , ["0.1.20 || 1.2.4", "1.2.4"]
143
+ , [">=0.2.3 || <0.0.1", "0.0.0"]
144
+ , [">=0.2.3 || <0.0.1", "0.2.3"]
145
+ , [">=0.2.3 || <0.0.1", "0.2.4"]
146
+ , ["||", "1.3.4"]
147
+ , ["2.x.x", "2.1.3"]
148
+ , ["1.2.x", "1.2.3"]
149
+ , ["1.2.x || 2.x", "2.1.3"]
150
+ , ["1.2.x || 2.x", "1.2.3"]
151
+ , ["x", "1.2.3"]
152
+ , ["2.*.*", "2.1.3"]
153
+ , ["1.2.*", "1.2.3"]
154
+ , ["1.2.* || 2.*", "2.1.3"]
155
+ , ["1.2.* || 2.*", "1.2.3"]
156
+ , ["*", "1.2.3"]
157
+ , ["2", "2.1.2"]
158
+ , ["2.3", "2.3.1"]
159
+ , ["~2.4", "2.4.0"] // >=2.4.0 <2.5.0
160
+ , ["~2.4", "2.4.5"]
161
+ , ["~>3.2.1", "3.2.2"] // >=3.2.1 <3.3.0
162
+ , ["~1", "1.2.3"] // >=1.0.0 <2.0.0
163
+ , ["~>1", "1.2.3"]
164
+ , ["~> 1", "1.2.3"]
165
+ , ["~1.0", "1.0.2"] // >=1.0.0 <1.1.0
166
+ , ["~ 1.0", "1.0.2"]
167
+ , [">=1", "1.0.0"]
168
+ , [">= 1", "1.0.0"]
169
+ , ["<1.2", "1.1.1"]
170
+ , ["< 1.2", "1.1.1"]
171
+ , ["1", "1.0.0beta"]
172
+ , ["~v0.5.4-pre", "0.5.5"]
173
+ , ["~v0.5.4-pre", "0.5.4"]
174
+ , ["=0.7.x", "0.7.2"]
175
+ , [">=0.7.x", "0.7.2"]
176
+ , ["=0.7.x", "0.7.0-asdf"]
177
+ , [">=0.7.x", "0.7.0-asdf"]
178
+ , ["<=0.7.x", "0.6.2"]
179
+ ].forEach(function (v) {
180
+ t.ok(satisfies(v[1], v[0]), v[0]+" satisfied by "+v[1])
181
+ })
182
+ t.end()
183
+ })
184
+
185
+ test("\nnegative range tests", function (t) {
186
+ ; [ ["1.0.0 - 2.0.0", "2.2.3"]
187
+ , ["1.0.0", "1.0.1"]
188
+ , [">=1.0.0", "0.0.0"]
189
+ , [">=1.0.0", "0.0.1"]
190
+ , [">=1.0.0", "0.1.0"]
191
+ , [">1.0.0", "0.0.1"]
192
+ , [">1.0.0", "0.1.0"]
193
+ , ["<=2.0.0", "3.0.0"]
194
+ , ["<=2.0.0", "2.9999.9999"]
195
+ , ["<=2.0.0", "2.2.9"]
196
+ , ["<2.0.0", "2.9999.9999"]
197
+ , ["<2.0.0", "2.2.9"]
198
+ , [">=0.1.97", "v0.1.93"]
199
+ , [">=0.1.97", "0.1.93"]
200
+ , ["0.1.20 || 1.2.4", "1.2.3"]
201
+ , [">=0.2.3 || <0.0.1", "0.0.3"]
202
+ , [">=0.2.3 || <0.0.1", "0.2.2"]
203
+ , ["2.x.x", "1.1.3"]
204
+ , ["2.x.x", "3.1.3"]
205
+ , ["1.2.x", "1.3.3"]
206
+ , ["1.2.x || 2.x", "3.1.3"]
207
+ , ["1.2.x || 2.x", "1.1.3"]
208
+ , ["2.*.*", "1.1.3"]
209
+ , ["2.*.*", "3.1.3"]
210
+ , ["1.2.*", "1.3.3"]
211
+ , ["1.2.* || 2.*", "3.1.3"]
212
+ , ["1.2.* || 2.*", "1.1.3"]
213
+ , ["2", "1.1.2"]
214
+ , ["2.3", "2.4.1"]
215
+ , ["~2.4", "2.5.0"] // >=2.4.0 <2.5.0
216
+ , ["~2.4", "2.3.9"]
217
+ , ["~>3.2.1", "3.3.2"] // >=3.2.1 <3.3.0
218
+ , ["~>3.2.1", "3.2.0"] // >=3.2.1 <3.3.0
219
+ , ["~1", "0.2.3"] // >=1.0.0 <2.0.0
220
+ , ["~>1", "2.2.3"]
221
+ , ["~1.0", "1.1.0"] // >=1.0.0 <1.1.0
222
+ , ["<1", "1.0.0"]
223
+ , [">=1.2", "1.1.1"]
224
+ , ["1", "2.0.0beta"]
225
+ , ["~v0.5.4-beta", "0.5.4-alpha"]
226
+ , ["<1", "1.0.0beta"]
227
+ , ["< 1", "1.0.0beta"]
228
+ , ["=0.7.x", "0.8.2"]
229
+ , [">=0.7.x", "0.6.2"]
230
+ , ["<=0.7.x", "0.7.2"]
231
+ ].forEach(function (v) {
232
+ t.ok(!satisfies(v[1], v[0]), v[0]+" not satisfied by "+v[1])
233
+ })
234
+ t.end()
235
+ })
236
+
237
+ test("\nincrement versions test", function (t) {
238
+ ; [ [ "1.2.3", "major", "2.0.0" ]
239
+ , [ "1.2.3", "minor", "1.3.0" ]
240
+ , [ "1.2.3", "patch", "1.2.4" ]
241
+ , [ "1.2.3", "build", "1.2.3-1" ]
242
+ , [ "1.2.3-4", "build", "1.2.3-5" ]
243
+ , [ "1.2.3tag", "major", "2.0.0" ]
244
+ , [ "1.2.3-tag", "major", "2.0.0" ]
245
+ , [ "1.2.3tag", "build", "1.2.3-1" ]
246
+ , [ "1.2.3-tag", "build", "1.2.3-1" ]
247
+ , [ "1.2.3-4-tag", "build", "1.2.3-5" ]
248
+ , [ "1.2.3-4tag", "build", "1.2.3-5" ]
249
+ , [ "1.2.3", "fake", null ]
250
+ , [ "fake", "major", null ]
251
+ ].forEach(function (v) {
252
+ t.equal(inc(v[0], v[1]), v[2], "inc("+v[0]+", "+v[1]+") === "+v[2])
253
+ })
254
+
255
+ t.end()
256
+ })
257
+
258
+ test("\nreplace stars test", function (t) {
259
+ ; [ [ "", "" ]
260
+ , [ "*", "" ]
261
+ , [ "> *", "" ]
262
+ , [ "<*", "" ]
263
+ , [ " >= *", "" ]
264
+ , [ "* || 1.2.3", " || 1.2.3" ]
265
+ ].forEach(function (v) {
266
+ t.equal(replaceStars(v[0]), v[1], "replaceStars("+v[0]+") === "+v[1])
267
+ })
268
+
269
+ t.end()
270
+ })
271
+
272
+ test("\nvalid range test", function (t) {
273
+ ; [ ["1.0.0 - 2.0.0", ">=1.0.0 <=2.0.0"]
274
+ , ["1.0.0", "1.0.0"]
275
+ , [">=*", ""]
276
+ , ["", ""]
277
+ , ["*", ""]
278
+ , ["*", ""]
279
+ , [">=1.0.0", ">=1.0.0"]
280
+ , [">1.0.0", ">1.0.0"]
281
+ , ["<=2.0.0", "<=2.0.0"]
282
+ , ["1", ">=1.0.0- <2.0.0-"]
283
+ , ["<=2.0.0", "<=2.0.0"]
284
+ , ["<=2.0.0", "<=2.0.0"]
285
+ , ["<2.0.0", "<2.0.0"]
286
+ , ["<2.0.0", "<2.0.0"]
287
+ , [">= 1.0.0", ">=1.0.0"]
288
+ , [">= 1.0.0", ">=1.0.0"]
289
+ , [">= 1.0.0", ">=1.0.0"]
290
+ , ["> 1.0.0", ">1.0.0"]
291
+ , ["> 1.0.0", ">1.0.0"]
292
+ , ["<= 2.0.0", "<=2.0.0"]
293
+ , ["<= 2.0.0", "<=2.0.0"]
294
+ , ["<= 2.0.0", "<=2.0.0"]
295
+ , ["< 2.0.0", "<2.0.0"]
296
+ , ["< 2.0.0", "<2.0.0"]
297
+ , [">=0.1.97", ">=0.1.97"]
298
+ , [">=0.1.97", ">=0.1.97"]
299
+ , ["0.1.20 || 1.2.4", "0.1.20||1.2.4"]
300
+ , [">=0.2.3 || <0.0.1", ">=0.2.3||<0.0.1"]
301
+ , [">=0.2.3 || <0.0.1", ">=0.2.3||<0.0.1"]
302
+ , [">=0.2.3 || <0.0.1", ">=0.2.3||<0.0.1"]
303
+ , ["||", "||"]
304
+ , ["2.x.x", ">=2.0.0- <3.0.0-"]
305
+ , ["1.2.x", ">=1.2.0- <1.3.0-"]
306
+ , ["1.2.x || 2.x", ">=1.2.0- <1.3.0-||>=2.0.0- <3.0.0-"]
307
+ , ["1.2.x || 2.x", ">=1.2.0- <1.3.0-||>=2.0.0- <3.0.0-"]
308
+ , ["x", ""]
309
+ , ["2.*.*", null]
310
+ , ["1.2.*", null]
311
+ , ["1.2.* || 2.*", null]
312
+ , ["1.2.* || 2.*", null]
313
+ , ["*", ""]
314
+ , ["2", ">=2.0.0- <3.0.0-"]
315
+ , ["2.3", ">=2.3.0- <2.4.0-"]
316
+ , ["~2.4", ">=2.4.0- <2.5.0-"]
317
+ , ["~2.4", ">=2.4.0- <2.5.0-"]
318
+ , ["~>3.2.1", ">=3.2.1- <3.3.0-"]
319
+ , ["~1", ">=1.0.0- <2.0.0-"]
320
+ , ["~>1", ">=1.0.0- <2.0.0-"]
321
+ , ["~> 1", ">=1.0.0- <2.0.0-"]
322
+ , ["~1.0", ">=1.0.0- <1.1.0-"]
323
+ , ["~ 1.0", ">=1.0.0- <1.1.0-"]
324
+ , ["<1", "<1.0.0-"]
325
+ , ["< 1", "<1.0.0-"]
326
+ , [">=1", ">=1.0.0-"]
327
+ , [">= 1", ">=1.0.0-"]
328
+ , ["<1.2", "<1.2.0-"]
329
+ , ["< 1.2", "<1.2.0-"]
330
+ , ["1", ">=1.0.0- <2.0.0-"]
331
+ ].forEach(function (v) {
332
+ t.equal(validRange(v[0]), v[1], "validRange("+v[0]+") === "+v[1])
333
+ })
334
+
335
+ t.end()
336
+ })
337
+
338
+ test("\ncomparators test", function (t) {
339
+ ; [ ["1.0.0 - 2.0.0", [[">=1.0.0", "<=2.0.0"]] ]
340
+ , ["1.0.0", [["1.0.0"]] ]
341
+ , [">=*", [[">=0.0.0-"]] ]
342
+ , ["", [[""]]]
343
+ , ["*", [[""]] ]
344
+ , ["*", [[""]] ]
345
+ , [">=1.0.0", [[">=1.0.0"]] ]
346
+ , [">=1.0.0", [[">=1.0.0"]] ]
347
+ , [">=1.0.0", [[">=1.0.0"]] ]
348
+ , [">1.0.0", [[">1.0.0"]] ]
349
+ , [">1.0.0", [[">1.0.0"]] ]
350
+ , ["<=2.0.0", [["<=2.0.0"]] ]
351
+ , ["1", [[">=1.0.0-", "<2.0.0-"]] ]
352
+ , ["<=2.0.0", [["<=2.0.0"]] ]
353
+ , ["<=2.0.0", [["<=2.0.0"]] ]
354
+ , ["<2.0.0", [["<2.0.0"]] ]
355
+ , ["<2.0.0", [["<2.0.0"]] ]
356
+ , [">= 1.0.0", [[">=1.0.0"]] ]
357
+ , [">= 1.0.0", [[">=1.0.0"]] ]
358
+ , [">= 1.0.0", [[">=1.0.0"]] ]
359
+ , ["> 1.0.0", [[">1.0.0"]] ]
360
+ , ["> 1.0.0", [[">1.0.0"]] ]
361
+ , ["<= 2.0.0", [["<=2.0.0"]] ]
362
+ , ["<= 2.0.0", [["<=2.0.0"]] ]
363
+ , ["<= 2.0.0", [["<=2.0.0"]] ]
364
+ , ["< 2.0.0", [["<2.0.0"]] ]
365
+ , ["<\t2.0.0", [["<2.0.0"]] ]
366
+ , [">=0.1.97", [[">=0.1.97"]] ]
367
+ , [">=0.1.97", [[">=0.1.97"]] ]
368
+ , ["0.1.20 || 1.2.4", [["0.1.20"], ["1.2.4"]] ]
369
+ , [">=0.2.3 || <0.0.1", [[">=0.2.3"], ["<0.0.1"]] ]
370
+ , [">=0.2.3 || <0.0.1", [[">=0.2.3"], ["<0.0.1"]] ]
371
+ , [">=0.2.3 || <0.0.1", [[">=0.2.3"], ["<0.0.1"]] ]
372
+ , ["||", [[""], [""]] ]
373
+ , ["2.x.x", [[">=2.0.0-", "<3.0.0-"]] ]
374
+ , ["1.2.x", [[">=1.2.0-", "<1.3.0-"]] ]
375
+ , ["1.2.x || 2.x", [[">=1.2.0-", "<1.3.0-"], [">=2.0.0-", "<3.0.0-"]] ]
376
+ , ["1.2.x || 2.x", [[">=1.2.0-", "<1.3.0-"], [">=2.0.0-", "<3.0.0-"]] ]
377
+ , ["x", [[""]] ]
378
+ , ["2.*.*", [[">=2.0.0-", "<3.0.0-"]] ]
379
+ , ["1.2.*", [[">=1.2.0-", "<1.3.0-"]] ]
380
+ , ["1.2.* || 2.*", [[">=1.2.0-", "<1.3.0-"], [">=2.0.0-", "<3.0.0-"]] ]
381
+ , ["1.2.* || 2.*", [[">=1.2.0-", "<1.3.0-"], [">=2.0.0-", "<3.0.0-"]] ]
382
+ , ["*", [[""]] ]
383
+ , ["2", [[">=2.0.0-", "<3.0.0-"]] ]
384
+ , ["2.3", [[">=2.3.0-", "<2.4.0-"]] ]
385
+ , ["~2.4", [[">=2.4.0-", "<2.5.0-"]] ]
386
+ , ["~2.4", [[">=2.4.0-", "<2.5.0-"]] ]
387
+ , ["~>3.2.1", [[">=3.2.1-", "<3.3.0-"]] ]
388
+ , ["~1", [[">=1.0.0-", "<2.0.0-"]] ]
389
+ , ["~>1", [[">=1.0.0-", "<2.0.0-"]] ]
390
+ , ["~> 1", [[">=1.0.0-", "<2.0.0-"]] ]
391
+ , ["~1.0", [[">=1.0.0-", "<1.1.0-"]] ]
392
+ , ["~ 1.0", [[">=1.0.0-", "<1.1.0-"]] ]
393
+ , ["<1", [["<1.0.0-"]] ]
394
+ , ["< 1", [["<1.0.0-"]] ]
395
+ , [">=1", [[">=1.0.0-"]] ]
396
+ , [">= 1", [[">=1.0.0-"]] ]
397
+ , ["<1.2", [["<1.2.0-"]] ]
398
+ , ["< 1.2", [["<1.2.0-"]] ]
399
+ , ["1", [[">=1.0.0-", "<2.0.0-"]] ]
400
+ ].forEach(function (v) {
401
+ t.equivalent(toComparators(v[0]), v[1], "toComparators("+v[0]+") === "+JSON.stringify(v[1]))
402
+ })
403
+
404
+ t.end()
405
+ })
package/cp.js DELETED
@@ -1,9 +0,0 @@
1
-
2
- var ch = require("child_process")
3
- , cp = ch.spawn("node", ["semver.js"])
4
-
5
- cp.on("exit", function (code) {
6
- console.error("exit", code)
7
- })
8
- cp.stdout.pipe(process.stdout)
9
- cp.stderr.pipe(process.stderr)
package/no-exit.js DELETED
@@ -1,35 +0,0 @@
1
-
2
- ;(function () {
3
-
4
- var gen = +(process.argv[2] || 0);
5
- var maxGen = 5;
6
-
7
-
8
- if (gen === maxGen) {
9
- console.log("hit maxGen, exiting", maxGen);
10
- return;
11
- }
12
-
13
- var ch = require("child_process");
14
- var cp = ch.spawn("node", [__filename, gen + 1]);
15
-
16
- console.log("gen=%d", gen);
17
-
18
- var timer = setTimeout(function () {
19
- console.error(cp.stdout)
20
- throw new Error("timeout! gen="+gen);
21
- }, 10000);
22
-
23
- process.on("exit", function (code) {
24
- console.error("exiting %d with code %d", gen, code || 0);
25
- });
26
-
27
- cp.on("exit", function (code) {
28
- console.error("exit %d from gen %d", code, gen + 1);
29
- clearTimeout(timer);
30
- })
31
-
32
- cp.stdout.pipe(process.stdout);
33
- cp.stderr.pipe(process.stderr);
34
-
35
- })();
package/pipeout.js DELETED
@@ -1,22 +0,0 @@
1
- var stream = require("stream")
2
- var util = require("util")
3
-
4
- function Piper() {}
5
- util.inherits(Piper, stream.Stream)
6
- Piper.prototype.write = function (c) {
7
- console.error("data", c)
8
- this.emit("data", c)
9
- }
10
- Piper.prototype.end = function () {
11
- this.emit("end")
12
- }
13
-
14
- var pied = new Piper
15
- pied.pipe(process.stdout)
16
- pied.write("yo")
17
- setTimeout(function () {
18
- console.error("step 2", c)
19
- pied.write("ho ho")
20
- setTimeout(function () {
21
- pied.end()
22
- }) })