semver 5.1.1 → 5.4.1

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/README.md CHANGED
@@ -1,53 +1,65 @@
1
1
  semver(1) -- The semantic versioner for npm
2
2
  ===========================================
3
3
 
4
+ ## Install
5
+
6
+ ```bash
7
+ npm install --save semver
8
+ ````
9
+
4
10
  ## Usage
5
11
 
6
- $ npm install semver
12
+ As a node module:
7
13
 
8
- semver.valid('1.2.3') // '1.2.3'
9
- semver.valid('a.b.c') // null
10
- semver.clean(' =v1.2.3 ') // '1.2.3'
11
- semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true
12
- semver.gt('1.2.3', '9.8.7') // false
13
- semver.lt('1.2.3', '9.8.7') // true
14
+ ```js
15
+ const semver = require('semver')
16
+
17
+ semver.valid('1.2.3') // '1.2.3'
18
+ semver.valid('a.b.c') // null
19
+ semver.clean(' =v1.2.3 ') // '1.2.3'
20
+ semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true
21
+ semver.gt('1.2.3', '9.8.7') // false
22
+ semver.lt('1.2.3', '9.8.7') // true
23
+ ```
14
24
 
15
25
  As a command-line utility:
16
26
 
17
- $ semver -h
27
+ ```
28
+ $ semver -h
18
29
 
19
- SemVer 5.1.0
30
+ SemVer 5.3.0
20
31
 
21
- A JavaScript implementation of the http://semver.org/ specification
22
- Copyright Isaac Z. Schlueter
32
+ A JavaScript implementation of the http://semver.org/ specification
33
+ Copyright Isaac Z. Schlueter
23
34
 
24
- Usage: semver [options] <version> [<version> [...]]
25
- Prints valid versions sorted by SemVer precedence
35
+ Usage: semver [options] <version> [<version> [...]]
36
+ Prints valid versions sorted by SemVer precedence
26
37
 
27
- Options:
28
- -r --range <range>
29
- Print versions that match the specified range.
38
+ Options:
39
+ -r --range <range>
40
+ Print versions that match the specified range.
30
41
 
31
- -i --increment [<level>]
32
- Increment a version by the specified level. Level can
33
- be one of: major, minor, patch, premajor, preminor,
34
- prepatch, or prerelease. Default level is 'patch'.
35
- Only one version may be specified.
42
+ -i --increment [<level>]
43
+ Increment a version by the specified level. Level can
44
+ be one of: major, minor, patch, premajor, preminor,
45
+ prepatch, or prerelease. Default level is 'patch'.
46
+ Only one version may be specified.
36
47
 
37
- --preid <identifier>
38
- Identifier to be used to prefix premajor, preminor,
39
- prepatch or prerelease version increments.
48
+ --preid <identifier>
49
+ Identifier to be used to prefix premajor, preminor,
50
+ prepatch or prerelease version increments.
40
51
 
41
- -l --loose
42
- Interpret versions and ranges loosely
52
+ -l --loose
53
+ Interpret versions and ranges loosely
43
54
 
44
- Program exits successfully if any valid version satisfies
45
- all supplied ranges, and prints all satisfying versions.
55
+ Program exits successfully if any valid version satisfies
56
+ all supplied ranges, and prints all satisfying versions.
46
57
 
47
- If no satisfying versions are found, then exits failure.
58
+ If no satisfying versions are found, then exits failure.
48
59
 
49
- Versions are printed in ascending order, so supplying
50
- multiple versions to the utility will just sort them.
60
+ Versions are printed in ascending order, so supplying
61
+ multiple versions to the utility will just sort them.
62
+ ```
51
63
 
52
64
  ## Versions
53
65
 
@@ -124,20 +136,20 @@ The method `.inc` takes an additional `identifier` string argument that
124
136
  will append the value of the string as a prerelease identifier:
125
137
 
126
138
  ```javascript
127
- > semver.inc('1.2.3', 'prerelease', 'beta')
128
- '1.2.4-beta.0'
139
+ semver.inc('1.2.3', 'prerelease', 'beta')
140
+ // '1.2.4-beta.0'
129
141
  ```
130
142
 
131
143
  command-line example:
132
144
 
133
- ```shell
145
+ ```bash
134
146
  $ semver 1.2.3 -i prerelease --preid beta
135
147
  1.2.4-beta.0
136
148
  ```
137
149
 
138
150
  Which then can be used to increment further:
139
151
 
140
- ```shell
152
+ ```bash
141
153
  $ semver 1.2.4-beta.0 -i prerelease
142
154
  1.2.4-beta.1
143
155
  ```
@@ -289,9 +301,13 @@ strings that they parse.
289
301
  same as `prepatch`. It increments the patch version, then makes a
290
302
  prerelease. If the input version is already a prerelease it simply
291
303
  increments it.
304
+ * `prerelease(v)`: Returns an array of prerelease components, or null
305
+ if none exist. Example: `prerelease('1.2.3-alpha.1') -> ['alpha', 1]`
292
306
  * `major(v)`: Return the major version number.
293
307
  * `minor(v)`: Return the minor version number.
294
308
  * `patch(v)`: Return the patch version number.
309
+ * `intersects(r1, r2, loose)`: Return true if the two supplied ranges
310
+ or comparators intersect.
295
311
 
296
312
  ### Comparison
297
313
 
@@ -315,6 +331,9 @@ strings that they parse.
315
331
  (`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`),
316
332
  or null if the versions are the same.
317
333
 
334
+ ### Comparators
335
+
336
+ * `intersects(comparator)`: Return true if the comparators intersect
318
337
 
319
338
  ### Ranges
320
339
 
@@ -323,6 +342,8 @@ strings that they parse.
323
342
  range.
324
343
  * `maxSatisfying(versions, range)`: Return the highest version in the list
325
344
  that satisfies the range, or `null` if none of them do.
345
+ * `minSatisfying(versions, range)`: Return the lowest version in the list
346
+ that satisfies the range, or `null` if none of them do.
326
347
  * `gtr(version, range)`: Return `true` if version is greater than all the
327
348
  versions possible in the range.
328
349
  * `ltr(version, range)`: Return `true` if version is less than all the
@@ -331,6 +352,7 @@ strings that they parse.
331
352
  the bounds of the range in either the high or low direction. The
332
353
  `hilo` argument must be either the string `'>'` or `'<'`. (This is
333
354
  the function called by `gtr` and `ltr`.)
355
+ * `intersects(range)`: Return true if any of the ranges comparators intersect
334
356
 
335
357
  Note that, since ranges may be non-contiguous, a version might not be
336
358
  greater than a range, less than a range, *or* satisfy a range! For
package/package.json CHANGED
@@ -1,17 +1,22 @@
1
1
  {
2
2
  "name": "semver",
3
- "version": "5.1.1",
3
+ "version": "5.4.1",
4
4
  "description": "The semantic version parser used by npm.",
5
5
  "main": "semver.js",
6
6
  "scripts": {
7
- "test": "tap test/*.js"
7
+ "test": "tap test/*.js --cov -J"
8
8
  },
9
9
  "devDependencies": {
10
- "tap": "^2.0.0"
10
+ "tap": "^10.7.0"
11
11
  },
12
12
  "license": "ISC",
13
13
  "repository": "https://github.com/npm/node-semver",
14
14
  "bin": {
15
15
  "semver": "./bin/semver"
16
- }
16
+ },
17
+ "files": [
18
+ "bin",
19
+ "range.bnf",
20
+ "semver.js"
21
+ ]
17
22
  }
package/semver.js CHANGED
@@ -314,9 +314,9 @@ function SemVer(version, loose) {
314
314
  else
315
315
  this.prerelease = m[4].split('.').map(function(id) {
316
316
  if (/^[0-9]+$/.test(id)) {
317
- var num = +id
317
+ var num = +id;
318
318
  if (num >= 0 && num < MAX_SAFE_INTEGER)
319
- return num
319
+ return num;
320
320
  }
321
321
  return id;
322
322
  });
@@ -563,7 +563,7 @@ function patch(a, loose) {
563
563
 
564
564
  exports.compare = compare;
565
565
  function compare(a, b, loose) {
566
- return new SemVer(a, loose).compare(b);
566
+ return new SemVer(a, loose).compare(new SemVer(b, loose));
567
567
  }
568
568
 
569
569
  exports.compareLoose = compareLoose;
@@ -704,11 +704,59 @@ Comparator.prototype.test = function(version) {
704
704
  return cmp(version, this.operator, this.semver, this.loose);
705
705
  };
706
706
 
707
+ Comparator.prototype.intersects = function(comp, loose) {
708
+ if (!(comp instanceof Comparator)) {
709
+ throw new TypeError('a Comparator is required');
710
+ }
711
+
712
+ var rangeTmp;
713
+
714
+ if (this.operator === '') {
715
+ rangeTmp = new Range(comp.value, loose);
716
+ return satisfies(this.value, rangeTmp, loose);
717
+ } else if (comp.operator === '') {
718
+ rangeTmp = new Range(this.value, loose);
719
+ return satisfies(comp.semver, rangeTmp, loose);
720
+ }
721
+
722
+ var sameDirectionIncreasing =
723
+ (this.operator === '>=' || this.operator === '>') &&
724
+ (comp.operator === '>=' || comp.operator === '>');
725
+ var sameDirectionDecreasing =
726
+ (this.operator === '<=' || this.operator === '<') &&
727
+ (comp.operator === '<=' || comp.operator === '<');
728
+ var sameSemVer = this.semver.version === comp.semver.version;
729
+ var differentDirectionsInclusive =
730
+ (this.operator === '>=' || this.operator === '<=') &&
731
+ (comp.operator === '>=' || comp.operator === '<=');
732
+ var oppositeDirectionsLessThan =
733
+ cmp(this.semver, '<', comp.semver, loose) &&
734
+ ((this.operator === '>=' || this.operator === '>') &&
735
+ (comp.operator === '<=' || comp.operator === '<'));
736
+ var oppositeDirectionsGreaterThan =
737
+ cmp(this.semver, '>', comp.semver, loose) &&
738
+ ((this.operator === '<=' || this.operator === '<') &&
739
+ (comp.operator === '>=' || comp.operator === '>'));
740
+
741
+ return sameDirectionIncreasing || sameDirectionDecreasing ||
742
+ (sameSemVer && differentDirectionsInclusive) ||
743
+ oppositeDirectionsLessThan || oppositeDirectionsGreaterThan;
744
+ };
745
+
707
746
 
708
747
  exports.Range = Range;
709
748
  function Range(range, loose) {
710
- if ((range instanceof Range) && range.loose === loose)
711
- return range;
749
+ if (range instanceof Range) {
750
+ if (range.loose === loose) {
751
+ return range;
752
+ } else {
753
+ return new Range(range.raw, loose);
754
+ }
755
+ }
756
+
757
+ if (range instanceof Comparator) {
758
+ return new Range(range.value, loose);
759
+ }
712
760
 
713
761
  if (!(this instanceof Range))
714
762
  return new Range(range, loose);
@@ -783,6 +831,22 @@ Range.prototype.parseRange = function(range) {
783
831
  return set;
784
832
  };
785
833
 
834
+ Range.prototype.intersects = function(range, loose) {
835
+ if (!(range instanceof Range)) {
836
+ throw new TypeError('a Range is required');
837
+ }
838
+
839
+ return this.set.some(function(thisComparators) {
840
+ return thisComparators.every(function(thisComparator) {
841
+ return range.set.some(function(rangeComparators) {
842
+ return rangeComparators.every(function(rangeComparator) {
843
+ return thisComparator.intersects(rangeComparator, loose);
844
+ });
845
+ });
846
+ });
847
+ });
848
+ };
849
+
786
850
  // Mostly just for testing and legacy API reasons
787
851
  exports.toComparators = toComparators;
788
852
  function toComparators(range, loose) {
@@ -966,11 +1030,11 @@ function replaceXRange(comp, loose) {
966
1030
  } else if (gtlt === '<=') {
967
1031
  // <=0.7.x is actually <0.8.0, since any 0.7.x should
968
1032
  // pass. Similarly, <=7.x is actually <8.0.0, etc.
969
- gtlt = '<'
1033
+ gtlt = '<';
970
1034
  if (xm)
971
- M = +M + 1
1035
+ M = +M + 1;
972
1036
  else
973
- m = +m + 1
1037
+ m = +m + 1;
974
1038
  }
975
1039
 
976
1040
  ret = gtlt + M + '.' + m + '.' + p;
@@ -1087,11 +1151,42 @@ function satisfies(version, range, loose) {
1087
1151
 
1088
1152
  exports.maxSatisfying = maxSatisfying;
1089
1153
  function maxSatisfying(versions, range, loose) {
1090
- return versions.filter(function(version) {
1091
- return satisfies(version, range, loose);
1092
- }).sort(function(a, b) {
1093
- return rcompare(a, b, loose);
1094
- })[0] || null;
1154
+ var max = null;
1155
+ var maxSV = null;
1156
+ try {
1157
+ var rangeObj = new Range(range, loose);
1158
+ } catch (er) {
1159
+ return null;
1160
+ }
1161
+ versions.forEach(function (v) {
1162
+ if (rangeObj.test(v)) { // satisfies(v, range, loose)
1163
+ if (!max || maxSV.compare(v) === -1) { // compare(max, v, true)
1164
+ max = v;
1165
+ maxSV = new SemVer(max, loose);
1166
+ }
1167
+ }
1168
+ })
1169
+ return max;
1170
+ }
1171
+
1172
+ exports.minSatisfying = minSatisfying;
1173
+ function minSatisfying(versions, range, loose) {
1174
+ var min = null;
1175
+ var minSV = null;
1176
+ try {
1177
+ var rangeObj = new Range(range, loose);
1178
+ } catch (er) {
1179
+ return null;
1180
+ }
1181
+ versions.forEach(function (v) {
1182
+ if (rangeObj.test(v)) { // satisfies(v, range, loose)
1183
+ if (!min || minSV.compare(v) === 1) { // compare(min, v, true)
1184
+ min = v;
1185
+ minSV = new SemVer(min, loose);
1186
+ }
1187
+ }
1188
+ })
1189
+ return min;
1095
1190
  }
1096
1191
 
1097
1192
  exports.validRange = validRange;
@@ -1186,3 +1281,16 @@ function outside(version, range, hilo, loose) {
1186
1281
  }
1187
1282
  return true;
1188
1283
  }
1284
+
1285
+ exports.prerelease = prerelease;
1286
+ function prerelease(version, loose) {
1287
+ var parsed = parse(version, loose);
1288
+ return (parsed && parsed.prerelease.length) ? parsed.prerelease : null;
1289
+ }
1290
+
1291
+ exports.intersects = intersects;
1292
+ function intersects(r1, r2, loose) {
1293
+ r1 = new Range(r1, loose)
1294
+ r2 = new Range(r2, loose)
1295
+ return r1.intersects(r2)
1296
+ }
package/.npmignore DELETED
@@ -1,4 +0,0 @@
1
- node_modules/
2
- coverage/
3
- .nyc_output/
4
- nyc_output/
package/.travis.yml DELETED
@@ -1,7 +0,0 @@
1
- sudo: false
2
- language: node_js
3
- node_js:
4
- - '0.10'
5
- - '0.12'
6
- - '4'
7
- - '5'
@@ -1,31 +0,0 @@
1
- var test = require('tap').test
2
- var semver = require('../')
3
-
4
- test('long version is too long', function (t) {
5
- var v = '1.2.' + new Array(256).join('1')
6
- t.throws(function () {
7
- new semver.SemVer(v)
8
- })
9
- t.equal(semver.valid(v, false), null)
10
- t.equal(semver.valid(v, true), null)
11
- t.equal(semver.inc(v, 'patch'), null)
12
- t.end()
13
- })
14
-
15
- test('big number is like too long version', function (t) {
16
- var v = '1.2.' + new Array(100).join('1')
17
- t.throws(function () {
18
- new semver.SemVer(v)
19
- })
20
- t.equal(semver.valid(v, false), null)
21
- t.equal(semver.valid(v, true), null)
22
- t.equal(semver.inc(v, 'patch'), null)
23
- t.end()
24
- })
25
-
26
- test('parsing null does not throw', function (t) {
27
- t.equal(semver.parse(null), null)
28
- t.equal(semver.parse({}), null)
29
- t.equal(semver.parse(new semver.SemVer('1.2.3')).version, '1.2.3')
30
- t.end()
31
- })
package/test/clean.js DELETED
@@ -1,29 +0,0 @@
1
- var tap = require('tap');
2
- var test = tap.test;
3
- var semver = require('../semver.js');
4
- var clean = semver.clean;
5
-
6
- test('\nclean tests', function(t) {
7
- // [range, version]
8
- // Version should be detectable despite extra characters
9
- [
10
- ['1.2.3', '1.2.3'],
11
- [' 1.2.3 ', '1.2.3'],
12
- [' 1.2.3-4 ', '1.2.3-4'],
13
- [' 1.2.3-pre ', '1.2.3-pre'],
14
- [' =v1.2.3 ', '1.2.3'],
15
- ['v1.2.3', '1.2.3'],
16
- [' v1.2.3 ', '1.2.3'],
17
- ['\t1.2.3', '1.2.3'],
18
- ['>1.2.3', null],
19
- ['~1.2.3', null],
20
- ['<=1.2.3', null],
21
- ['1.2.x', null]
22
- ].forEach(function(tuple) {
23
- var range = tuple[0];
24
- var version = tuple[1];
25
- var msg = 'clean(' + range + ') = ' + version;
26
- t.equal(clean(range), version, msg);
27
- });
28
- t.end();
29
- });
package/test/gtr.js DELETED
@@ -1,173 +0,0 @@
1
- var tap = require('tap');
2
- var test = tap.test;
3
- var semver = require('../semver.js');
4
- var gtr = semver.gtr;
5
-
6
- test('\ngtr tests', function(t) {
7
- // [range, version, loose]
8
- // Version should be greater than range
9
- [
10
- ['~1.2.2', '1.3.0'],
11
- ['~0.6.1-1', '0.7.1-1'],
12
- ['1.0.0 - 2.0.0', '2.0.1'],
13
- ['1.0.0', '1.0.1-beta1'],
14
- ['1.0.0', '2.0.0'],
15
- ['<=2.0.0', '2.1.1'],
16
- ['<=2.0.0', '3.2.9'],
17
- ['<2.0.0', '2.0.0'],
18
- ['0.1.20 || 1.2.4', '1.2.5'],
19
- ['2.x.x', '3.0.0'],
20
- ['1.2.x', '1.3.0'],
21
- ['1.2.x || 2.x', '3.0.0'],
22
- ['2.*.*', '5.0.1'],
23
- ['1.2.*', '1.3.3'],
24
- ['1.2.* || 2.*', '4.0.0'],
25
- ['2', '3.0.0'],
26
- ['2.3', '2.4.2'],
27
- ['~2.4', '2.5.0'], // >=2.4.0 <2.5.0
28
- ['~2.4', '2.5.5'],
29
- ['~>3.2.1', '3.3.0'], // >=3.2.1 <3.3.0
30
- ['~1', '2.2.3'], // >=1.0.0 <2.0.0
31
- ['~>1', '2.2.4'],
32
- ['~> 1', '3.2.3'],
33
- ['~1.0', '1.1.2'], // >=1.0.0 <1.1.0
34
- ['~ 1.0', '1.1.0'],
35
- ['<1.2', '1.2.0'],
36
- ['< 1.2', '1.2.1'],
37
- ['1', '2.0.0beta', true],
38
- ['~v0.5.4-pre', '0.6.0'],
39
- ['~v0.5.4-pre', '0.6.1-pre'],
40
- ['=0.7.x', '0.8.0'],
41
- ['=0.7.x', '0.8.0-asdf'],
42
- ['<0.7.x', '0.7.0'],
43
- ['~1.2.2', '1.3.0'],
44
- ['1.0.0 - 2.0.0', '2.2.3'],
45
- ['1.0.0', '1.0.1'],
46
- ['<=2.0.0', '3.0.0'],
47
- ['<=2.0.0', '2.9999.9999'],
48
- ['<=2.0.0', '2.2.9'],
49
- ['<2.0.0', '2.9999.9999'],
50
- ['<2.0.0', '2.2.9'],
51
- ['2.x.x', '3.1.3'],
52
- ['1.2.x', '1.3.3'],
53
- ['1.2.x || 2.x', '3.1.3'],
54
- ['2.*.*', '3.1.3'],
55
- ['1.2.*', '1.3.3'],
56
- ['1.2.* || 2.*', '3.1.3'],
57
- ['2', '3.1.2'],
58
- ['2.3', '2.4.1'],
59
- ['~2.4', '2.5.0'], // >=2.4.0 <2.5.0
60
- ['~>3.2.1', '3.3.2'], // >=3.2.1 <3.3.0
61
- ['~1', '2.2.3'], // >=1.0.0 <2.0.0
62
- ['~>1', '2.2.3'],
63
- ['~1.0', '1.1.0'], // >=1.0.0 <1.1.0
64
- ['<1', '1.0.0'],
65
- ['1', '2.0.0beta', true],
66
- ['<1', '1.0.0beta', true],
67
- ['< 1', '1.0.0beta', true],
68
- ['=0.7.x', '0.8.2'],
69
- ['<0.7.x', '0.7.2']
70
- ].forEach(function(tuple) {
71
- var range = tuple[0];
72
- var version = tuple[1];
73
- var loose = tuple[2] || false;
74
- var msg = 'gtr(' + version + ', ' + range + ', ' + loose + ')';
75
- t.ok(gtr(version, range, loose), msg);
76
- });
77
- t.end();
78
- });
79
-
80
- test('\nnegative gtr tests', function(t) {
81
- // [range, version, loose]
82
- // Version should NOT be greater than range
83
- [
84
- ['~0.6.1-1', '0.6.1-1'],
85
- ['1.0.0 - 2.0.0', '1.2.3'],
86
- ['1.0.0 - 2.0.0', '0.9.9'],
87
- ['1.0.0', '1.0.0'],
88
- ['>=*', '0.2.4'],
89
- ['', '1.0.0', true],
90
- ['*', '1.2.3'],
91
- ['*', 'v1.2.3-foo'],
92
- ['>=1.0.0', '1.0.0'],
93
- ['>=1.0.0', '1.0.1'],
94
- ['>=1.0.0', '1.1.0'],
95
- ['>1.0.0', '1.0.1'],
96
- ['>1.0.0', '1.1.0'],
97
- ['<=2.0.0', '2.0.0'],
98
- ['<=2.0.0', '1.9999.9999'],
99
- ['<=2.0.0', '0.2.9'],
100
- ['<2.0.0', '1.9999.9999'],
101
- ['<2.0.0', '0.2.9'],
102
- ['>= 1.0.0', '1.0.0'],
103
- ['>= 1.0.0', '1.0.1'],
104
- ['>= 1.0.0', '1.1.0'],
105
- ['> 1.0.0', '1.0.1'],
106
- ['> 1.0.0', '1.1.0'],
107
- ['<= 2.0.0', '2.0.0'],
108
- ['<= 2.0.0', '1.9999.9999'],
109
- ['<= 2.0.0', '0.2.9'],
110
- ['< 2.0.0', '1.9999.9999'],
111
- ['<\t2.0.0', '0.2.9'],
112
- ['>=0.1.97', 'v0.1.97'],
113
- ['>=0.1.97', '0.1.97'],
114
- ['0.1.20 || 1.2.4', '1.2.4'],
115
- ['0.1.20 || >1.2.4', '1.2.4'],
116
- ['0.1.20 || 1.2.4', '1.2.3'],
117
- ['0.1.20 || 1.2.4', '0.1.20'],
118
- ['>=0.2.3 || <0.0.1', '0.0.0'],
119
- ['>=0.2.3 || <0.0.1', '0.2.3'],
120
- ['>=0.2.3 || <0.0.1', '0.2.4'],
121
- ['||', '1.3.4'],
122
- ['2.x.x', '2.1.3'],
123
- ['1.2.x', '1.2.3'],
124
- ['1.2.x || 2.x', '2.1.3'],
125
- ['1.2.x || 2.x', '1.2.3'],
126
- ['x', '1.2.3'],
127
- ['2.*.*', '2.1.3'],
128
- ['1.2.*', '1.2.3'],
129
- ['1.2.* || 2.*', '2.1.3'],
130
- ['1.2.* || 2.*', '1.2.3'],
131
- ['1.2.* || 2.*', '1.2.3'],
132
- ['*', '1.2.3'],
133
- ['2', '2.1.2'],
134
- ['2.3', '2.3.1'],
135
- ['~2.4', '2.4.0'], // >=2.4.0 <2.5.0
136
- ['~2.4', '2.4.5'],
137
- ['~>3.2.1', '3.2.2'], // >=3.2.1 <3.3.0
138
- ['~1', '1.2.3'], // >=1.0.0 <2.0.0
139
- ['~>1', '1.2.3'],
140
- ['~> 1', '1.2.3'],
141
- ['~1.0', '1.0.2'], // >=1.0.0 <1.1.0
142
- ['~ 1.0', '1.0.2'],
143
- ['>=1', '1.0.0'],
144
- ['>= 1', '1.0.0'],
145
- ['<1.2', '1.1.1'],
146
- ['< 1.2', '1.1.1'],
147
- ['1', '1.0.0beta', true],
148
- ['~v0.5.4-pre', '0.5.5'],
149
- ['~v0.5.4-pre', '0.5.4'],
150
- ['=0.7.x', '0.7.2'],
151
- ['>=0.7.x', '0.7.2'],
152
- ['=0.7.x', '0.7.0-asdf'],
153
- ['>=0.7.x', '0.7.0-asdf'],
154
- ['<=0.7.x', '0.6.2'],
155
- ['>0.2.3 >0.2.4 <=0.2.5', '0.2.5'],
156
- ['>=0.2.3 <=0.2.4', '0.2.4'],
157
- ['1.0.0 - 2.0.0', '2.0.0'],
158
- ['^1', '0.0.0-0'],
159
- ['^3.0.0', '2.0.0'],
160
- ['^1.0.0 || ~2.0.1', '2.0.0'],
161
- ['^0.1.0 || ~3.0.1 || 5.0.0', '3.2.0'],
162
- ['^0.1.0 || ~3.0.1 || 5.0.0', '1.0.0beta', true],
163
- ['^0.1.0 || ~3.0.1 || 5.0.0', '5.0.0-0', true],
164
- ['^0.1.0 || ~3.0.1 || >4 <=5.0.0', '3.5.0']
165
- ].forEach(function(tuple) {
166
- var range = tuple[0];
167
- var version = tuple[1];
168
- var loose = tuple[2] || false;
169
- var msg = '!gtr(' + version + ', ' + range + ', ' + loose + ')';
170
- t.notOk(gtr(version, range, loose), msg);
171
- });
172
- t.end();
173
- });