semver 2.0.10 → 2.2.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/Makefile +1 -1
- package/README.md +32 -1
- package/bin/semver +6 -1
- package/package.json +1 -1
- package/semver.browser.js +160 -5
- package/semver.browser.js.gz +0 -0
- package/semver.js +161 -6
- package/semver.min.js +1 -0
- package/semver.min.js.gz +0 -0
- package/test/gtr.js +173 -0
- package/test/index.js +29 -5
- package/test/ltr.js +174 -0
package/Makefile
CHANGED
package/README.md
CHANGED
|
@@ -60,9 +60,21 @@ The following range styles are supported:
|
|
|
60
60
|
using tilde operators, prerelease versions are supported as well,
|
|
61
61
|
but a prerelease of the next significant digit will NOT be
|
|
62
62
|
satisfactory, so `1.3.0-beta` will not satisfy `~1.2.3`.
|
|
63
|
+
* `^1.2.3` := `>=1.2.3-0 <2.0.0-0` "Compatible with 1.2.3". When
|
|
64
|
+
using caret operators, anything from the specified version (including
|
|
65
|
+
prerelease) will be supported up to, but not including, the next
|
|
66
|
+
major version (or its prereleases). `1.5.1` will satisfy `^1.2.3`,
|
|
67
|
+
while `1.2.2` and `2.0.0-beta` will not.
|
|
68
|
+
* `^0.1.3` := `>=0.1.3-0 <0.2.0-0` "Compatible with 0.1.3". 0.x.x versions are
|
|
69
|
+
special: the first non-zero component indicates potentially breaking changes,
|
|
70
|
+
meaning the caret operator matches any version with the same first non-zero
|
|
71
|
+
component starting at the specified version.
|
|
72
|
+
* `^0.0.2` := `=0.0.2` "Only the version 0.0.2 is considered compatible"
|
|
63
73
|
* `~1.2` := `>=1.2.0-0 <1.3.0-0` "Any version starting with 1.2"
|
|
74
|
+
* `^1.2` := `>=1.2.0-0 <2.0.0-0` "Any version compatible with 1.2"
|
|
64
75
|
* `1.2.x` := `>=1.2.0-0 <1.3.0-0` "Any version starting with 1.2"
|
|
65
76
|
* `~1` := `>=1.0.0-0 <2.0.0-0` "Any version starting with 1"
|
|
77
|
+
* `^1` := `>=1.0.0-0 <2.0.0-0` "Any version compatible with 1"
|
|
66
78
|
* `1.x` := `>=1.0.0-0 <2.0.0-0` "Any version starting with 1"
|
|
67
79
|
|
|
68
80
|
|
|
@@ -80,7 +92,7 @@ strings that they parse.
|
|
|
80
92
|
|
|
81
93
|
* valid(v): Return the parsed version, or null if it's not valid.
|
|
82
94
|
* inc(v, release): Return the version incremented by the release type
|
|
83
|
-
(major, minor, patch, or
|
|
95
|
+
(major, minor, patch, or prerelease), or null if it's not valid.
|
|
84
96
|
|
|
85
97
|
### Comparison
|
|
86
98
|
|
|
@@ -109,3 +121,22 @@ strings that they parse.
|
|
|
109
121
|
range.
|
|
110
122
|
* maxSatisfying(versions, range): Return the highest version in the list
|
|
111
123
|
that satisfies the range, or null if none of them do.
|
|
124
|
+
* gtr(version, range): Return true if version is greater than all the
|
|
125
|
+
versions possible in the range.
|
|
126
|
+
* ltr(version, range): Return true if version is less than all the
|
|
127
|
+
versions possible in the range.
|
|
128
|
+
* outside(version, range, hilo): Return true if the version is outside
|
|
129
|
+
the bounds of the range in either the high or low direction. The
|
|
130
|
+
`hilo` argument must be either the string `'>'` or `'<'`. (This is
|
|
131
|
+
the function called by `gtr` and `ltr`.)
|
|
132
|
+
|
|
133
|
+
Note that, since ranges may be non-contiguous, a version might not be
|
|
134
|
+
greater than a range, less than a range, *or* satisfy a range! For
|
|
135
|
+
example, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9`
|
|
136
|
+
until `2.0.0`, so the version `1.2.10` would not be greater than the
|
|
137
|
+
range (because 2.0.1 satisfies, which is higher), nor less than the
|
|
138
|
+
range (since 1.2.8 satisfies, which is lower), and it also does not
|
|
139
|
+
satisfy the range.
|
|
140
|
+
|
|
141
|
+
If you want to know if a version satisfies or does not satisfy a
|
|
142
|
+
range, use the `satisfies(version, range)` function.
|
package/bin/semver
CHANGED
|
@@ -13,6 +13,7 @@ var argv = process.argv.slice(2)
|
|
|
13
13
|
, version = require("../package.json").version
|
|
14
14
|
, loose = false
|
|
15
15
|
, semver = require("../semver")
|
|
16
|
+
, reverse = false
|
|
16
17
|
|
|
17
18
|
main()
|
|
18
19
|
|
|
@@ -26,6 +27,9 @@ function main () {
|
|
|
26
27
|
argv.unshift(a.slice(i + 1))
|
|
27
28
|
}
|
|
28
29
|
switch (a) {
|
|
30
|
+
case "-rv": case "-rev": case "--rev": case "--reverse":
|
|
31
|
+
reverse = true
|
|
32
|
+
break
|
|
29
33
|
case "-l": case "--loose":
|
|
30
34
|
loose = true
|
|
31
35
|
break
|
|
@@ -77,8 +81,9 @@ function failInc () {
|
|
|
77
81
|
function fail () { process.exit(1) }
|
|
78
82
|
|
|
79
83
|
function success () {
|
|
84
|
+
var compare = reverse ? "rcompare" : "compare"
|
|
80
85
|
versions.sort(function (a, b) {
|
|
81
|
-
return semver
|
|
86
|
+
return semver[compare](a, b, loose)
|
|
82
87
|
}).map(function (v) {
|
|
83
88
|
return semver.clean(v, loose)
|
|
84
89
|
}).map(function (v) {
|
package/package.json
CHANGED
package/semver.browser.js
CHANGED
|
@@ -151,14 +151,29 @@ var LONETILDE = R++;
|
|
|
151
151
|
src[LONETILDE] = '(?:~>?)';
|
|
152
152
|
|
|
153
153
|
var TILDETRIM = R++;
|
|
154
|
-
src[TILDETRIM] = src[LONETILDE] + '
|
|
155
|
-
|
|
154
|
+
src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+';
|
|
155
|
+
re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g');
|
|
156
|
+
var tildeTrimReplace = '$1~';
|
|
156
157
|
|
|
157
158
|
var TILDE = R++;
|
|
158
159
|
src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$';
|
|
159
160
|
var TILDELOOSE = R++;
|
|
160
161
|
src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$';
|
|
161
162
|
|
|
163
|
+
// Caret ranges.
|
|
164
|
+
// Meaning is "at least and backwards compatible with"
|
|
165
|
+
var LONECARET = R++;
|
|
166
|
+
src[LONECARET] = '(?:\\^)';
|
|
167
|
+
|
|
168
|
+
var CARETTRIM = R++;
|
|
169
|
+
src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+';
|
|
170
|
+
re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g');
|
|
171
|
+
var caretTrimReplace = '$1^';
|
|
172
|
+
|
|
173
|
+
var CARET = R++;
|
|
174
|
+
src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$';
|
|
175
|
+
var CARETLOOSE = R++;
|
|
176
|
+
src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$';
|
|
162
177
|
|
|
163
178
|
// A simple gt/lt/eq thing, or just "" to indicate "any version"
|
|
164
179
|
var COMPARATORLOOSE = R++;
|
|
@@ -170,13 +185,12 @@ src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$';
|
|
|
170
185
|
// An expression to strip any whitespace between the gtlt and the thing
|
|
171
186
|
// it modifies, so that `> 1.2.3` ==> `>1.2.3`
|
|
172
187
|
var COMPARATORTRIM = R++;
|
|
173
|
-
src[COMPARATORTRIM] = src[GTLT] +
|
|
188
|
+
src[COMPARATORTRIM] = '(\\s*)' + src[GTLT] +
|
|
174
189
|
'\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')';
|
|
175
190
|
|
|
176
191
|
// this one has to use the /g flag
|
|
177
192
|
re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g');
|
|
178
|
-
|
|
179
|
-
var comparatorTrimReplace = '$1$2 ';
|
|
193
|
+
var comparatorTrimReplace = '$1$2$3';
|
|
180
194
|
|
|
181
195
|
|
|
182
196
|
// Something like `1.2.3 - 1.2.4`
|
|
@@ -593,6 +607,9 @@ Range.prototype.parseRange = function(range) {
|
|
|
593
607
|
// `~ 1.2.3` => `~1.2.3`
|
|
594
608
|
range = range.replace(re[TILDETRIM], tildeTrimReplace);
|
|
595
609
|
|
|
610
|
+
// `^ 1.2.3` => `^1.2.3`
|
|
611
|
+
range = range.replace(re[CARETTRIM], caretTrimReplace);
|
|
612
|
+
|
|
596
613
|
// normalize spaces
|
|
597
614
|
range = range.split(/\s+/).join(' ');
|
|
598
615
|
|
|
@@ -630,6 +647,8 @@ function toComparators(range, loose) {
|
|
|
630
647
|
// already replaced the hyphen ranges
|
|
631
648
|
// turn into a set of JUST comparators.
|
|
632
649
|
function parseComparator(comp, loose) {
|
|
650
|
+
;
|
|
651
|
+
comp = replaceCarets(comp, loose);
|
|
633
652
|
;
|
|
634
653
|
comp = replaceTildes(comp, loose);
|
|
635
654
|
;
|
|
@@ -685,6 +704,63 @@ function replaceTilde(comp, loose) {
|
|
|
685
704
|
});
|
|
686
705
|
}
|
|
687
706
|
|
|
707
|
+
// ^ --> * (any, kinda silly)
|
|
708
|
+
// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0
|
|
709
|
+
// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0
|
|
710
|
+
// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0
|
|
711
|
+
// ^1.2.3 --> >=1.2.3 <2.0.0
|
|
712
|
+
// ^1.2.0 --> >=1.2.0 <2.0.0
|
|
713
|
+
function replaceCarets(comp, loose) {
|
|
714
|
+
return comp.trim().split(/\s+/).map(function(comp) {
|
|
715
|
+
return replaceCaret(comp, loose);
|
|
716
|
+
}).join(' ');
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
function replaceCaret(comp, loose) {
|
|
720
|
+
var r = loose ? re[CARETLOOSE] : re[CARET];
|
|
721
|
+
return comp.replace(r, function(_, M, m, p, pr) {
|
|
722
|
+
;
|
|
723
|
+
var ret;
|
|
724
|
+
|
|
725
|
+
if (isX(M))
|
|
726
|
+
ret = '';
|
|
727
|
+
else if (isX(m))
|
|
728
|
+
ret = '>=' + M + '.0.0-0 <' + (+M + 1) + '.0.0-0';
|
|
729
|
+
else if (isX(p)) {
|
|
730
|
+
if (M === '0')
|
|
731
|
+
ret = '>=' + M + '.' + m + '.0-0 <' + M + '.' + (+m + 1) + '.0-0';
|
|
732
|
+
else
|
|
733
|
+
ret = '>=' + M + '.' + m + '.0-0 <' + (+M + 1) + '.0.0-0';
|
|
734
|
+
} else if (pr) {
|
|
735
|
+
;
|
|
736
|
+
if (pr.charAt(0) !== '-')
|
|
737
|
+
pr = '-' + pr;
|
|
738
|
+
if (M === '0') {
|
|
739
|
+
if (m === '0')
|
|
740
|
+
ret = '=' + M + '.' + m + '.' + p + pr;
|
|
741
|
+
else
|
|
742
|
+
ret = '>=' + M + '.' + m + '.' + p + pr +
|
|
743
|
+
' <' + M + '.' + (+m + 1) + '.0-0';
|
|
744
|
+
} else
|
|
745
|
+
ret = '>=' + M + '.' + m + '.' + p + pr +
|
|
746
|
+
' <' + (+M + 1) + '.0.0-0';
|
|
747
|
+
} else {
|
|
748
|
+
if (M === '0') {
|
|
749
|
+
if (m === '0')
|
|
750
|
+
ret = '=' + M + '.' + m + '.' + p;
|
|
751
|
+
else
|
|
752
|
+
ret = '>=' + M + '.' + m + '.' + p + '-0' +
|
|
753
|
+
' <' + M + '.' + (+m + 1) + '.0-0';
|
|
754
|
+
} else
|
|
755
|
+
ret = '>=' + M + '.' + m + '.' + p + '-0' +
|
|
756
|
+
' <' + (+M + 1) + '.0.0-0';
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
;
|
|
760
|
+
return ret;
|
|
761
|
+
});
|
|
762
|
+
}
|
|
763
|
+
|
|
688
764
|
function replaceXRanges(comp, loose) {
|
|
689
765
|
;
|
|
690
766
|
return comp.split(/\s+/).map(function(comp) {
|
|
@@ -841,6 +917,85 @@ function validRange(range, loose) {
|
|
|
841
917
|
}
|
|
842
918
|
}
|
|
843
919
|
|
|
920
|
+
// Determine if version is less than all the versions possible in the range
|
|
921
|
+
exports.ltr = ltr;
|
|
922
|
+
function ltr(version, range, loose) {
|
|
923
|
+
return outside(version, range, '<', loose);
|
|
924
|
+
}
|
|
925
|
+
|
|
926
|
+
// Determine if version is greater than all the versions possible in the range.
|
|
927
|
+
exports.gtr = gtr;
|
|
928
|
+
function gtr(version, range, loose) {
|
|
929
|
+
return outside(version, range, '>', loose);
|
|
930
|
+
}
|
|
931
|
+
|
|
932
|
+
exports.outside = outside;
|
|
933
|
+
function outside(version, range, hilo, loose) {
|
|
934
|
+
version = new SemVer(version, loose);
|
|
935
|
+
range = new Range(range, loose);
|
|
936
|
+
|
|
937
|
+
var gtfn, ltefn, ltfn, comp, ecomp;
|
|
938
|
+
switch (hilo) {
|
|
939
|
+
case '>':
|
|
940
|
+
gtfn = gt;
|
|
941
|
+
ltefn = lte;
|
|
942
|
+
ltfn = lt;
|
|
943
|
+
comp = '>';
|
|
944
|
+
ecomp = '>=';
|
|
945
|
+
break;
|
|
946
|
+
case '<':
|
|
947
|
+
gtfn = lt;
|
|
948
|
+
ltefn = gte;
|
|
949
|
+
ltfn = gt;
|
|
950
|
+
comp = '<';
|
|
951
|
+
ecomp = '<=';
|
|
952
|
+
break;
|
|
953
|
+
default:
|
|
954
|
+
throw new TypeError('Must provide a hilo val of "<" or ">"');
|
|
955
|
+
}
|
|
956
|
+
|
|
957
|
+
// If it satisifes the range it is not outside
|
|
958
|
+
if (satisfies(version, range, loose)) {
|
|
959
|
+
return false;
|
|
960
|
+
}
|
|
961
|
+
|
|
962
|
+
// From now on, variable terms are as if we're in "gtr" mode.
|
|
963
|
+
// but note that everything is flipped for the "ltr" function.
|
|
964
|
+
|
|
965
|
+
for (var i = 0; i < range.set.length; ++i) {
|
|
966
|
+
var comparators = range.set[i];
|
|
967
|
+
|
|
968
|
+
var high = null;
|
|
969
|
+
var low = null;
|
|
970
|
+
|
|
971
|
+
comparators.forEach(function(comparator) {
|
|
972
|
+
high = high || comparator;
|
|
973
|
+
low = low || comparator;
|
|
974
|
+
if (gtfn(comparator.semver, high.semver, loose)) {
|
|
975
|
+
high = comparator;
|
|
976
|
+
} else if (ltfn(comparator.semver, low.semver, loose)) {
|
|
977
|
+
low = comparator;
|
|
978
|
+
}
|
|
979
|
+
});
|
|
980
|
+
|
|
981
|
+
// If the edge version comparator has a operator then our version
|
|
982
|
+
// isn't outside it
|
|
983
|
+
if (high.operator === comp || high.operator === ecomp) {
|
|
984
|
+
return false;
|
|
985
|
+
}
|
|
986
|
+
|
|
987
|
+
// If the lowest version comparator has an operator and our version
|
|
988
|
+
// is less than it then it isn't higher than the range
|
|
989
|
+
if ((!low.operator || low.operator === comp) &&
|
|
990
|
+
ltefn(version, low.semver)) {
|
|
991
|
+
return false;
|
|
992
|
+
} else if (low.operator === ecomp && ltfn(version, low.semver)) {
|
|
993
|
+
return false;
|
|
994
|
+
}
|
|
995
|
+
}
|
|
996
|
+
return true;
|
|
997
|
+
}
|
|
998
|
+
|
|
844
999
|
// Use the define() function if we're in AMD land
|
|
845
1000
|
if (typeof define === 'function' && define.amd)
|
|
846
1001
|
define(exports);
|
package/semver.browser.js.gz
CHANGED
|
Binary file
|
package/semver.js
CHANGED
|
@@ -161,14 +161,29 @@ var LONETILDE = R++;
|
|
|
161
161
|
src[LONETILDE] = '(?:~>?)';
|
|
162
162
|
|
|
163
163
|
var TILDETRIM = R++;
|
|
164
|
-
src[TILDETRIM] = src[LONETILDE] + '
|
|
165
|
-
|
|
164
|
+
src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+';
|
|
165
|
+
re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g');
|
|
166
|
+
var tildeTrimReplace = '$1~';
|
|
166
167
|
|
|
167
168
|
var TILDE = R++;
|
|
168
169
|
src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$';
|
|
169
170
|
var TILDELOOSE = R++;
|
|
170
171
|
src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$';
|
|
171
172
|
|
|
173
|
+
// Caret ranges.
|
|
174
|
+
// Meaning is "at least and backwards compatible with"
|
|
175
|
+
var LONECARET = R++;
|
|
176
|
+
src[LONECARET] = '(?:\\^)';
|
|
177
|
+
|
|
178
|
+
var CARETTRIM = R++;
|
|
179
|
+
src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+';
|
|
180
|
+
re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g');
|
|
181
|
+
var caretTrimReplace = '$1^';
|
|
182
|
+
|
|
183
|
+
var CARET = R++;
|
|
184
|
+
src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$';
|
|
185
|
+
var CARETLOOSE = R++;
|
|
186
|
+
src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$';
|
|
172
187
|
|
|
173
188
|
// A simple gt/lt/eq thing, or just "" to indicate "any version"
|
|
174
189
|
var COMPARATORLOOSE = R++;
|
|
@@ -180,13 +195,12 @@ src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$';
|
|
|
180
195
|
// An expression to strip any whitespace between the gtlt and the thing
|
|
181
196
|
// it modifies, so that `> 1.2.3` ==> `>1.2.3`
|
|
182
197
|
var COMPARATORTRIM = R++;
|
|
183
|
-
src[COMPARATORTRIM] = src[GTLT] +
|
|
198
|
+
src[COMPARATORTRIM] = '(\\s*)' + src[GTLT] +
|
|
184
199
|
'\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')';
|
|
185
200
|
|
|
186
201
|
// this one has to use the /g flag
|
|
187
202
|
re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g');
|
|
188
|
-
|
|
189
|
-
var comparatorTrimReplace = '$1$2 ';
|
|
203
|
+
var comparatorTrimReplace = '$1$2$3';
|
|
190
204
|
|
|
191
205
|
|
|
192
206
|
// Something like `1.2.3 - 1.2.4`
|
|
@@ -598,11 +612,14 @@ Range.prototype.parseRange = function(range) {
|
|
|
598
612
|
debug('hyphen replace', range);
|
|
599
613
|
// `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`
|
|
600
614
|
range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace);
|
|
601
|
-
debug('comparator trim', range);
|
|
615
|
+
debug('comparator trim', range, re[COMPARATORTRIM]);
|
|
602
616
|
|
|
603
617
|
// `~ 1.2.3` => `~1.2.3`
|
|
604
618
|
range = range.replace(re[TILDETRIM], tildeTrimReplace);
|
|
605
619
|
|
|
620
|
+
// `^ 1.2.3` => `^1.2.3`
|
|
621
|
+
range = range.replace(re[CARETTRIM], caretTrimReplace);
|
|
622
|
+
|
|
606
623
|
// normalize spaces
|
|
607
624
|
range = range.split(/\s+/).join(' ');
|
|
608
625
|
|
|
@@ -641,6 +658,8 @@ function toComparators(range, loose) {
|
|
|
641
658
|
// turn into a set of JUST comparators.
|
|
642
659
|
function parseComparator(comp, loose) {
|
|
643
660
|
debug('comp', comp);
|
|
661
|
+
comp = replaceCarets(comp, loose);
|
|
662
|
+
debug('caret', comp);
|
|
644
663
|
comp = replaceTildes(comp, loose);
|
|
645
664
|
debug('tildes', comp);
|
|
646
665
|
comp = replaceXRanges(comp, loose);
|
|
@@ -695,6 +714,63 @@ function replaceTilde(comp, loose) {
|
|
|
695
714
|
});
|
|
696
715
|
}
|
|
697
716
|
|
|
717
|
+
// ^ --> * (any, kinda silly)
|
|
718
|
+
// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0
|
|
719
|
+
// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0
|
|
720
|
+
// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0
|
|
721
|
+
// ^1.2.3 --> >=1.2.3 <2.0.0
|
|
722
|
+
// ^1.2.0 --> >=1.2.0 <2.0.0
|
|
723
|
+
function replaceCarets(comp, loose) {
|
|
724
|
+
return comp.trim().split(/\s+/).map(function(comp) {
|
|
725
|
+
return replaceCaret(comp, loose);
|
|
726
|
+
}).join(' ');
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
function replaceCaret(comp, loose) {
|
|
730
|
+
var r = loose ? re[CARETLOOSE] : re[CARET];
|
|
731
|
+
return comp.replace(r, function(_, M, m, p, pr) {
|
|
732
|
+
debug('caret', comp, _, M, m, p, pr);
|
|
733
|
+
var ret;
|
|
734
|
+
|
|
735
|
+
if (isX(M))
|
|
736
|
+
ret = '';
|
|
737
|
+
else if (isX(m))
|
|
738
|
+
ret = '>=' + M + '.0.0-0 <' + (+M + 1) + '.0.0-0';
|
|
739
|
+
else if (isX(p)) {
|
|
740
|
+
if (M === '0')
|
|
741
|
+
ret = '>=' + M + '.' + m + '.0-0 <' + M + '.' + (+m + 1) + '.0-0';
|
|
742
|
+
else
|
|
743
|
+
ret = '>=' + M + '.' + m + '.0-0 <' + (+M + 1) + '.0.0-0';
|
|
744
|
+
} else if (pr) {
|
|
745
|
+
debug('replaceCaret pr', pr);
|
|
746
|
+
if (pr.charAt(0) !== '-')
|
|
747
|
+
pr = '-' + pr;
|
|
748
|
+
if (M === '0') {
|
|
749
|
+
if (m === '0')
|
|
750
|
+
ret = '=' + M + '.' + m + '.' + p + pr;
|
|
751
|
+
else
|
|
752
|
+
ret = '>=' + M + '.' + m + '.' + p + pr +
|
|
753
|
+
' <' + M + '.' + (+m + 1) + '.0-0';
|
|
754
|
+
} else
|
|
755
|
+
ret = '>=' + M + '.' + m + '.' + p + pr +
|
|
756
|
+
' <' + (+M + 1) + '.0.0-0';
|
|
757
|
+
} else {
|
|
758
|
+
if (M === '0') {
|
|
759
|
+
if (m === '0')
|
|
760
|
+
ret = '=' + M + '.' + m + '.' + p;
|
|
761
|
+
else
|
|
762
|
+
ret = '>=' + M + '.' + m + '.' + p + '-0' +
|
|
763
|
+
' <' + M + '.' + (+m + 1) + '.0-0';
|
|
764
|
+
} else
|
|
765
|
+
ret = '>=' + M + '.' + m + '.' + p + '-0' +
|
|
766
|
+
' <' + (+M + 1) + '.0.0-0';
|
|
767
|
+
}
|
|
768
|
+
|
|
769
|
+
debug('caret return', ret);
|
|
770
|
+
return ret;
|
|
771
|
+
});
|
|
772
|
+
}
|
|
773
|
+
|
|
698
774
|
function replaceXRanges(comp, loose) {
|
|
699
775
|
debug('replaceXRanges', comp, loose);
|
|
700
776
|
return comp.split(/\s+/).map(function(comp) {
|
|
@@ -851,6 +927,85 @@ function validRange(range, loose) {
|
|
|
851
927
|
}
|
|
852
928
|
}
|
|
853
929
|
|
|
930
|
+
// Determine if version is less than all the versions possible in the range
|
|
931
|
+
exports.ltr = ltr;
|
|
932
|
+
function ltr(version, range, loose) {
|
|
933
|
+
return outside(version, range, '<', loose);
|
|
934
|
+
}
|
|
935
|
+
|
|
936
|
+
// Determine if version is greater than all the versions possible in the range.
|
|
937
|
+
exports.gtr = gtr;
|
|
938
|
+
function gtr(version, range, loose) {
|
|
939
|
+
return outside(version, range, '>', loose);
|
|
940
|
+
}
|
|
941
|
+
|
|
942
|
+
exports.outside = outside;
|
|
943
|
+
function outside(version, range, hilo, loose) {
|
|
944
|
+
version = new SemVer(version, loose);
|
|
945
|
+
range = new Range(range, loose);
|
|
946
|
+
|
|
947
|
+
var gtfn, ltefn, ltfn, comp, ecomp;
|
|
948
|
+
switch (hilo) {
|
|
949
|
+
case '>':
|
|
950
|
+
gtfn = gt;
|
|
951
|
+
ltefn = lte;
|
|
952
|
+
ltfn = lt;
|
|
953
|
+
comp = '>';
|
|
954
|
+
ecomp = '>=';
|
|
955
|
+
break;
|
|
956
|
+
case '<':
|
|
957
|
+
gtfn = lt;
|
|
958
|
+
ltefn = gte;
|
|
959
|
+
ltfn = gt;
|
|
960
|
+
comp = '<';
|
|
961
|
+
ecomp = '<=';
|
|
962
|
+
break;
|
|
963
|
+
default:
|
|
964
|
+
throw new TypeError('Must provide a hilo val of "<" or ">"');
|
|
965
|
+
}
|
|
966
|
+
|
|
967
|
+
// If it satisifes the range it is not outside
|
|
968
|
+
if (satisfies(version, range, loose)) {
|
|
969
|
+
return false;
|
|
970
|
+
}
|
|
971
|
+
|
|
972
|
+
// From now on, variable terms are as if we're in "gtr" mode.
|
|
973
|
+
// but note that everything is flipped for the "ltr" function.
|
|
974
|
+
|
|
975
|
+
for (var i = 0; i < range.set.length; ++i) {
|
|
976
|
+
var comparators = range.set[i];
|
|
977
|
+
|
|
978
|
+
var high = null;
|
|
979
|
+
var low = null;
|
|
980
|
+
|
|
981
|
+
comparators.forEach(function(comparator) {
|
|
982
|
+
high = high || comparator;
|
|
983
|
+
low = low || comparator;
|
|
984
|
+
if (gtfn(comparator.semver, high.semver, loose)) {
|
|
985
|
+
high = comparator;
|
|
986
|
+
} else if (ltfn(comparator.semver, low.semver, loose)) {
|
|
987
|
+
low = comparator;
|
|
988
|
+
}
|
|
989
|
+
});
|
|
990
|
+
|
|
991
|
+
// If the edge version comparator has a operator then our version
|
|
992
|
+
// isn't outside it
|
|
993
|
+
if (high.operator === comp || high.operator === ecomp) {
|
|
994
|
+
return false;
|
|
995
|
+
}
|
|
996
|
+
|
|
997
|
+
// If the lowest version comparator has an operator and our version
|
|
998
|
+
// is less than it then it isn't higher than the range
|
|
999
|
+
if ((!low.operator || low.operator === comp) &&
|
|
1000
|
+
ltefn(version, low.semver)) {
|
|
1001
|
+
return false;
|
|
1002
|
+
} else if (low.operator === ecomp && ltfn(version, low.semver)) {
|
|
1003
|
+
return false;
|
|
1004
|
+
}
|
|
1005
|
+
}
|
|
1006
|
+
return true;
|
|
1007
|
+
}
|
|
1008
|
+
|
|
854
1009
|
// Use the define() function if we're in AMD land
|
|
855
1010
|
if (typeof define === 'function' && define.amd)
|
|
856
1011
|
define(exports);
|
package/semver.min.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(function(e){if(typeof module==="object"&&module.exports===e)e=module.exports=H;e.SEMVER_SPEC_VERSION="2.0.0";var r=e.re=[];var t=e.src=[];var n=0;var i=n++;t[i]="0|[1-9]\\d*";var s=n++;t[s]="[0-9]+";var o=n++;t[o]="\\d*[a-zA-Z-][a-zA-Z0-9-]*";var a=n++;t[a]="("+t[i]+")\\."+"("+t[i]+")\\."+"("+t[i]+")";var f=n++;t[f]="("+t[s]+")\\."+"("+t[s]+")\\."+"("+t[s]+")";var u=n++;t[u]="(?:"+t[i]+"|"+t[o]+")";var l=n++;t[l]="(?:"+t[s]+"|"+t[o]+")";var c=n++;t[c]="(?:-("+t[u]+"(?:\\."+t[u]+")*))";var p=n++;t[p]="(?:-?("+t[l]+"(?:\\."+t[l]+")*))";var h=n++;t[h]="[0-9A-Za-z-]+";var v=n++;t[v]="(?:\\+("+t[h]+"(?:\\."+t[h]+")*))";var m=n++;var g="v?"+t[a]+t[c]+"?"+t[v]+"?";t[m]="^"+g+"$";var w="[v=\\s]*"+t[f]+t[p]+"?"+t[v]+"?";var d=n++;t[d]="^"+w+"$";var y=n++;t[y]="((?:<|>)?=?)";var $=n++;t[$]=t[s]+"|x|X|\\*";var j=n++;t[j]=t[i]+"|x|X|\\*";var b=n++;t[b]="[v=\\s]*("+t[j]+")"+"(?:\\.("+t[j]+")"+"(?:\\.("+t[j]+")"+"(?:("+t[c]+")"+")?)?)?";var E=n++;t[E]="[v=\\s]*("+t[$]+")"+"(?:\\.("+t[$]+")"+"(?:\\.("+t[$]+")"+"(?:("+t[p]+")"+")?)?)?";var k=n++;t[k]="^"+t[y]+"\\s*"+t[b]+"$";var x=n++;t[x]="^"+t[y]+"\\s*"+t[E]+"$";var R=n++;t[R]="(?:~>?)";var S=n++;t[S]="(\\s*)"+t[R]+"\\s+";r[S]=new RegExp(t[S],"g");var V="$1~";var I=n++;t[I]="^"+t[R]+t[b]+"$";var A=n++;t[A]="^"+t[R]+t[E]+"$";var C=n++;t[C]="(?:\\^)";var T=n++;t[T]="(\\s*)"+t[C]+"\\s+";r[T]=new RegExp(t[T],"g");var M="$1^";var z=n++;t[z]="^"+t[C]+t[b]+"$";var P=n++;t[P]="^"+t[C]+t[E]+"$";var Z=n++;t[Z]="^"+t[y]+"\\s*("+w+")$|^$";var q=n++;t[q]="^"+t[y]+"\\s*("+g+")$|^$";var L=n++;t[L]="(\\s*)"+t[y]+"\\s*("+w+"|"+t[b]+")";r[L]=new RegExp(t[L],"g");var X="$1$2$3";var _=n++;t[_]="^\\s*("+t[b]+")"+"\\s+-\\s+"+"("+t[b]+")"+"\\s*$";var N=n++;t[N]="^\\s*("+t[E]+")"+"\\s+-\\s+"+"("+t[E]+")"+"\\s*$";var O=n++;t[O]="(<|>)?=?\\s*\\*";for(var B=0;B<n;B++){if(!r[B])r[B]=new RegExp(t[B])}e.parse=D;function D(e,t){var n=t?r[d]:r[m];return n.test(e)?new H(e,t):null}e.valid=F;function F(e,r){var t=D(e,r);return t?t.version:null}e.clean=G;function G(e,r){var t=D(e,r);return t?t.version:null}e.SemVer=H;function H(e,t){if(e instanceof H){if(e.loose===t)return e;else e=e.version}if(!(this instanceof H))return new H(e,t);this.loose=t;var n=e.trim().match(t?r[d]:r[m]);if(!n)throw new TypeError("Invalid Version: "+e);this.raw=e;this.major=+n[1];this.minor=+n[2];this.patch=+n[3];if(!n[4])this.prerelease=[];else this.prerelease=n[4].split(".").map(function(e){return/^[0-9]+$/.test(e)?+e:e});this.build=n[5]?n[5].split("."):[];this.format()}H.prototype.format=function(){this.version=this.major+"."+this.minor+"."+this.patch;if(this.prerelease.length)this.version+="-"+this.prerelease.join(".");return this.version};H.prototype.inspect=function(){return'<SemVer "'+this+'">'};H.prototype.toString=function(){return this.version};H.prototype.compare=function(e){if(!(e instanceof H))e=new H(e,this.loose);return this.compareMain(e)||this.comparePre(e)};H.prototype.compareMain=function(e){if(!(e instanceof H))e=new H(e,this.loose);return Q(this.major,e.major)||Q(this.minor,e.minor)||Q(this.patch,e.patch)};H.prototype.comparePre=function(e){if(!(e instanceof H))e=new H(e,this.loose);if(this.prerelease.length&&!e.prerelease.length)return-1;else if(!this.prerelease.length&&e.prerelease.length)return 1;else if(!this.prerelease.lenth&&!e.prerelease.length)return 0;var r=0;do{var t=this.prerelease[r];var n=e.prerelease[r];if(t===undefined&&n===undefined)return 0;else if(n===undefined)return 1;else if(t===undefined)return-1;else if(t===n)continue;else return Q(t,n)}while(++r)};H.prototype.inc=function(e){switch(e){case"major":this.major++;this.minor=-1;case"minor":this.minor++;this.patch=-1;case"patch":this.patch++;this.prerelease=[];break;case"prerelease":if(this.prerelease.length===0)this.prerelease=[0];else{var r=this.prerelease.length;while(--r>=0){if(typeof this.prerelease[r]==="number"){this.prerelease[r]++;r=-2}}if(r===-1)this.prerelease.push(0)}break;default:throw new Error("invalid increment argument: "+e)}this.format();return this};e.inc=J;function J(e,r,t){try{return new H(e,t).inc(r).version}catch(n){return null}}e.compareIdentifiers=Q;var K=/^[0-9]+$/;function Q(e,r){var t=K.test(e);var n=K.test(r);if(t&&n){e=+e;r=+r}return t&&!n?-1:n&&!t?1:e<r?-1:e>r?1:0}e.rcompareIdentifiers=U;function U(e,r){return Q(r,e)}e.compare=W;function W(e,r,t){return new H(e,t).compare(r)}e.compareLoose=Y;function Y(e,r){return W(e,r,true)}e.rcompare=er;function er(e,r,t){return W(r,e,t)}e.sort=rr;function rr(r,t){return r.sort(function(r,n){return e.compare(r,n,t)})}e.rsort=tr;function tr(r,t){return r.sort(function(r,n){return e.rcompare(r,n,t)})}e.gt=nr;function nr(e,r,t){return W(e,r,t)>0}e.lt=ir;function ir(e,r,t){return W(e,r,t)<0}e.eq=sr;function sr(e,r,t){return W(e,r,t)===0}e.neq=or;function or(e,r,t){return W(e,r,t)!==0}e.gte=ar;function ar(e,r,t){return W(e,r,t)>=0}e.lte=fr;function fr(e,r,t){return W(e,r,t)<=0}e.cmp=ur;function ur(e,r,t,n){var i;switch(r){case"===":i=e===t;break;case"!==":i=e!==t;break;case"":case"=":case"==":i=sr(e,t,n);break;case"!=":i=or(e,t,n);break;case">":i=nr(e,t,n);break;case">=":i=ar(e,t,n);break;case"<":i=ir(e,t,n);break;case"<=":i=fr(e,t,n);break;default:throw new TypeError("Invalid operator: "+r)}return i}e.Comparator=lr;function lr(e,r){if(e instanceof lr){if(e.loose===r)return e;else e=e.value}if(!(this instanceof lr))return new lr(e,r);this.loose=r;this.parse(e);if(this.semver===cr)this.value="";else this.value=this.operator+this.semver.version}var cr={};lr.prototype.parse=function(e){var t=this.loose?r[Z]:r[q];var n=e.match(t);if(!n)throw new TypeError("Invalid comparator: "+e);this.operator=n[1];if(!n[2])this.semver=cr;else{this.semver=new H(n[2],this.loose);if(this.operator==="<"&&!this.semver.prerelease.length){this.semver.prerelease=["0"];this.semver.format()}}};lr.prototype.inspect=function(){return'<SemVer Comparator "'+this+'">'};lr.prototype.toString=function(){return this.value};lr.prototype.test=function(e){return this.semver===cr?true:ur(e,this.operator,this.semver,this.loose)};e.Range=pr;function pr(e,r){if(e instanceof pr&&e.loose===r)return e;if(!(this instanceof pr))return new pr(e,r);this.loose=r;this.raw=e;this.set=e.split(/\s*\|\|\s*/).map(function(e){return this.parseRange(e.trim())},this).filter(function(e){return e.length});if(!this.set.length){throw new TypeError("Invalid SemVer Range: "+e)}this.format()}pr.prototype.inspect=function(){return'<SemVer Range "'+this.range+'">'};pr.prototype.format=function(){this.range=this.set.map(function(e){return e.join(" ").trim()}).join("||").trim();return this.range};pr.prototype.toString=function(){return this.range};pr.prototype.parseRange=function(e){var t=this.loose;e=e.trim();var n=t?r[N]:r[_];e=e.replace(n,Er);e=e.replace(r[L],X);e=e.replace(r[S],V);e=e.replace(r[T],M);e=e.split(/\s+/).join(" ");var i=t?r[Z]:r[q];var s=e.split(" ").map(function(e){return vr(e,t)}).join(" ").split(/\s+/);if(this.loose){s=s.filter(function(e){return!!e.match(i)})}s=s.map(function(e){return new lr(e,t)});return s};e.toComparators=hr;function hr(e,r){return new pr(e,r).set.map(function(e){return e.map(function(e){return e.value}).join(" ").trim().split(" ")})}function vr(e,r){e=dr(e,r);e=gr(e,r);e=$r(e,r);e=br(e,r);return e}function mr(e){return!e||e.toLowerCase()==="x"||e==="*"}function gr(e,r){return e.trim().split(/\s+/).map(function(e){return wr(e,r)}).join(" ")}function wr(e,t){var n=t?r[A]:r[I];return e.replace(n,function(e,r,t,n,i){var s;if(mr(r))s="";else if(mr(t))s=">="+r+".0.0-0 <"+(+r+1)+".0.0-0";else if(mr(n))s=">="+r+"."+t+".0-0 <"+r+"."+(+t+1)+".0-0";else if(i){if(i.charAt(0)!=="-")i="-"+i;s=">="+r+"."+t+"."+n+i+" <"+r+"."+(+t+1)+".0-0"}else s=">="+r+"."+t+"."+n+"-0"+" <"+r+"."+(+t+1)+".0-0";return s})}function dr(e,r){return e.trim().split(/\s+/).map(function(e){return yr(e,r)}).join(" ")}function yr(e,t){var n=t?r[P]:r[z];return e.replace(n,function(e,r,t,n,i){var s;if(mr(r))s="";else if(mr(t))s=">="+r+".0.0-0 <"+(+r+1)+".0.0-0";else if(mr(n)){if(r==="0")s=">="+r+"."+t+".0-0 <"+r+"."+(+t+1)+".0-0";else s=">="+r+"."+t+".0-0 <"+(+r+1)+".0.0-0"}else if(i){if(i.charAt(0)!=="-")i="-"+i;if(r==="0"){if(t==="0")s="="+r+"."+t+"."+n+i;else s=">="+r+"."+t+"."+n+i+" <"+r+"."+(+t+1)+".0-0"}else s=">="+r+"."+t+"."+n+i+" <"+(+r+1)+".0.0-0"}else{if(r==="0"){if(t==="0")s="="+r+"."+t+"."+n;else s=">="+r+"."+t+"."+n+"-0"+" <"+r+"."+(+t+1)+".0-0"}else s=">="+r+"."+t+"."+n+"-0"+" <"+(+r+1)+".0.0-0"}return s})}function $r(e,r){return e.split(/\s+/).map(function(e){return jr(e,r)}).join(" ")}function jr(e,t){e=e.trim();var n=t?r[x]:r[k];return e.replace(n,function(e,r,t,n,i,s){var o=mr(t);var a=o||mr(n);var f=a||mr(i);var u=f;if(r==="="&&u)r="";if(r&&u){if(o)t=0;if(a)n=0;if(f)i=0;if(r===">"){r=">=";if(o){}else if(a){t=+t+1;n=0;i=0}else if(f){n=+n+1;i=0}}e=r+t+"."+n+"."+i+"-0"}else if(o){e="*"}else if(a){e=">="+t+".0.0-0 <"+(+t+1)+".0.0-0"}else if(f){e=">="+t+"."+n+".0-0 <"+t+"."+(+n+1)+".0-0"}return e})}function br(e,t){return e.trim().replace(r[O],"")}function Er(e,r,t,n,i,s,o,a,f,u,l,c,p){if(mr(t))r="";else if(mr(n))r=">="+t+".0.0-0";else if(mr(i))r=">="+t+"."+n+".0-0";else r=">="+r;if(mr(f))a="";else if(mr(u))a="<"+(+f+1)+".0.0-0";else if(mr(l))a="<"+f+"."+(+u+1)+".0-0";else if(c)a="<="+f+"."+u+"."+l+"-"+c;else a="<="+a;return(r+" "+a).trim()}pr.prototype.test=function(e){if(!e)return false;for(var r=0;r<this.set.length;r++){if(kr(this.set[r],e))return true}return false};function kr(e,r){for(var t=0;t<e.length;t++){if(!e[t].test(r))return false}return true}e.satisfies=xr;function xr(e,r,t){try{r=new pr(r,t)}catch(n){return false}return r.test(e)}e.maxSatisfying=Rr;function Rr(e,r,t){return e.filter(function(e){return xr(e,r,t)}).sort(function(e,r){return er(e,r,t)})[0]||null}e.validRange=Sr;function Sr(e,r){try{return new pr(e,r).range||"*"}catch(t){return null}}e.ltr=Vr;function Vr(e,r,t){return Ar(e,r,"<",t)}e.gtr=Ir;function Ir(e,r,t){return Ar(e,r,">",t)}e.outside=Ar;function Ar(e,r,t,n){e=new H(e,n);r=new pr(r,n);var i,s,o,a,f;switch(t){case">":i=nr;s=fr;o=ir;a=">";f=">=";break;case"<":i=ir;s=ar;o=nr;a="<";f="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(xr(e,r,n)){return false}for(var u=0;u<r.set.length;++u){var l=r.set[u];var c=null;var p=null;l.forEach(function(e){c=c||e;p=p||e;if(i(e.semver,c.semver,n)){c=e}else if(o(e.semver,p.semver,n)){p=e}});if(c.operator===a||c.operator===f){return false}if((!p.operator||p.operator===a)&&s(e,p.semver)){return false}else if(p.operator===f&&o(e,p.semver)){return false}}return true}if(typeof define==="function"&&define.amd)define(e)})(typeof exports==="object"?exports:typeof define==="function"&&define.amd?{}:semver={});
|
package/semver.min.js.gz
CHANGED
|
Binary file
|
package/test/gtr.js
ADDED
|
@@ -0,0 +1,173 @@
|
|
|
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
|
+
});
|
package/test/index.js
CHANGED
|
@@ -207,7 +207,15 @@ test('\nrange tests', function(t) {
|
|
|
207
207
|
['>=1.2.1 >=1.2.3', '1.2.3'],
|
|
208
208
|
['<=1.2.3', '1.2.3-beta'],
|
|
209
209
|
['>1.2', '1.3.0-beta'],
|
|
210
|
-
['>=1.2', '1.2.8']
|
|
210
|
+
['>=1.2', '1.2.8'],
|
|
211
|
+
['^1.2.3', '1.8.1'],
|
|
212
|
+
['^1.2.3', '1.2.3-beta'],
|
|
213
|
+
['^0.1.2', '0.1.2'],
|
|
214
|
+
['^0.1', '0.1.2'],
|
|
215
|
+
['^1.2', '1.4.2'],
|
|
216
|
+
['^1.2 ^1', '1.4.2'],
|
|
217
|
+
['^1.2', '1.2.0-pre'],
|
|
218
|
+
['^1.2.3', '1.2.3-pre']
|
|
211
219
|
].forEach(function(v) {
|
|
212
220
|
var range = v[0];
|
|
213
221
|
var ver = v[1];
|
|
@@ -268,8 +276,13 @@ test('\nnegative range tests', function(t) {
|
|
|
268
276
|
['<1.2.3', '1.2.3-beta'],
|
|
269
277
|
['=1.2.3', '1.2.3-beta'],
|
|
270
278
|
['>1.2', '1.2.8'],
|
|
279
|
+
['^1.2.3', '2.0.0-alpha'],
|
|
280
|
+
['^1.2.3', '1.2.2'],
|
|
281
|
+
['^1.2', '1.1.9'],
|
|
271
282
|
// invalid ranges never satisfied!
|
|
272
|
-
['blerg', '1.2.3']
|
|
283
|
+
['blerg', '1.2.3'],
|
|
284
|
+
['git+https://user:password0123@github.com/foo', '123.0.0', true],
|
|
285
|
+
['^1.2.3', '2.0.0-pre']
|
|
273
286
|
].forEach(function(v) {
|
|
274
287
|
var range = v[0];
|
|
275
288
|
var ver = v[1];
|
|
@@ -373,6 +386,16 @@ test('\nvalid range test', function(t) {
|
|
|
373
386
|
['~> 1', '>=1.0.0-0 <2.0.0-0'],
|
|
374
387
|
['~1.0', '>=1.0.0-0 <1.1.0-0'],
|
|
375
388
|
['~ 1.0', '>=1.0.0-0 <1.1.0-0'],
|
|
389
|
+
['^0', '>=0.0.0-0 <1.0.0-0'],
|
|
390
|
+
['^ 1', '>=1.0.0-0 <2.0.0-0'],
|
|
391
|
+
['^0.1', '>=0.1.0-0 <0.2.0-0'],
|
|
392
|
+
['^1.0', '>=1.0.0-0 <2.0.0-0'],
|
|
393
|
+
['^1.2', '>=1.2.0-0 <2.0.0-0'],
|
|
394
|
+
['^0.0.1', '=0.0.1'],
|
|
395
|
+
['^0.0.1-beta', '=0.0.1-beta'],
|
|
396
|
+
['^0.1.2', '>=0.1.2-0 <0.2.0-0'],
|
|
397
|
+
['^1.2.3', '>=1.2.3-0 <2.0.0-0'],
|
|
398
|
+
['^1.2.3-beta.4', '>=1.2.3-beta.4 <2.0.0-0'],
|
|
376
399
|
['<1', '<1.0.0-0'],
|
|
377
400
|
['< 1', '<1.0.0-0'],
|
|
378
401
|
['>=1', '>=1.0.0-0'],
|
|
@@ -383,7 +406,8 @@ test('\nvalid range test', function(t) {
|
|
|
383
406
|
['>01.02.03', '>1.2.3', true],
|
|
384
407
|
['>01.02.03', null],
|
|
385
408
|
['~1.2.3beta', '>=1.2.3-beta <1.3.0-0', true],
|
|
386
|
-
['~1.2.3beta', null]
|
|
409
|
+
['~1.2.3beta', null],
|
|
410
|
+
['^ 1.2 ^ 1', '>=1.2.0-0 <2.0.0-0 >=1.0.0-0 <2.0.0-0']
|
|
387
411
|
].forEach(function(v) {
|
|
388
412
|
var pre = v[0];
|
|
389
413
|
var wanted = v[1];
|
|
@@ -518,7 +542,7 @@ test('\nstrict vs loose ranges', function(t) {
|
|
|
518
542
|
test('\nmax satisfying', function(t) {
|
|
519
543
|
[[['1.2.3', '1.2.4'], '1.2', '1.2.4'],
|
|
520
544
|
[['1.2.4', '1.2.3'], '1.2', '1.2.4'],
|
|
521
|
-
[['1.2.3','1.2.4','1.2.5','1.2.6'], '~1.2.3', '1.2.6'],
|
|
545
|
+
[['1.2.3', '1.2.4', '1.2.5', '1.2.6'], '~1.2.3', '1.2.6'],
|
|
522
546
|
[['1.1.0', '1.2.0', '1.2.1', '1.3.0', '2.0.0b1', '2.0.0b2', '2.0.0b3', '2.0.0', '2.1.0'], '~2.0.0', '2.0.0', true]
|
|
523
547
|
].forEach(function(v) {
|
|
524
548
|
var versions = v[0];
|
|
@@ -529,4 +553,4 @@ test('\nmax satisfying', function(t) {
|
|
|
529
553
|
t.equal(actual, expect);
|
|
530
554
|
});
|
|
531
555
|
t.end();
|
|
532
|
-
});
|
|
556
|
+
});
|
package/test/ltr.js
ADDED
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
var tap = require('tap');
|
|
2
|
+
var test = tap.test;
|
|
3
|
+
var semver = require('../semver.js');
|
|
4
|
+
var ltr = semver.ltr;
|
|
5
|
+
|
|
6
|
+
test('\nltr tests', function(t) {
|
|
7
|
+
// [range, version, loose]
|
|
8
|
+
// Version should be less than range
|
|
9
|
+
[
|
|
10
|
+
['~1.2.2', '1.2.1'],
|
|
11
|
+
['~0.6.1-1', '0.6.1-0'],
|
|
12
|
+
['1.0.0 - 2.0.0', '0.0.1'],
|
|
13
|
+
['1.0.0-beta.2', '1.0.0-beta.1'],
|
|
14
|
+
['1.0.0', '0.0.0'],
|
|
15
|
+
['>=2.0.0', '1.1.1'],
|
|
16
|
+
['>=2.0.0', '1.2.9'],
|
|
17
|
+
['>2.0.0', '2.0.0'],
|
|
18
|
+
['0.1.20 || 1.2.4', '0.1.5'],
|
|
19
|
+
['2.x.x', '1.0.0'],
|
|
20
|
+
['1.2.x', '1.1.0'],
|
|
21
|
+
['1.2.x || 2.x', '1.0.0'],
|
|
22
|
+
['2.*.*', '1.0.1'],
|
|
23
|
+
['1.2.*', '1.1.3'],
|
|
24
|
+
['1.2.* || 2.*', '1.1.9999'],
|
|
25
|
+
['2', '1.0.0'],
|
|
26
|
+
['2.3', '2.2.2'],
|
|
27
|
+
['~2.4', '2.3.0'], // >=2.4.0 <2.5.0
|
|
28
|
+
['~2.4', '2.3.5'],
|
|
29
|
+
['~>3.2.1', '3.2.0'], // >=3.2.1 <3.3.0
|
|
30
|
+
['~1', '0.2.3'], // >=1.0.0 <2.0.0
|
|
31
|
+
['~>1', '0.2.4'],
|
|
32
|
+
['~> 1', '0.2.3'],
|
|
33
|
+
['~1.0', '0.1.2'], // >=1.0.0 <1.1.0
|
|
34
|
+
['~ 1.0', '0.1.0'],
|
|
35
|
+
['>1.2', '1.2.0'],
|
|
36
|
+
['> 1.2', '1.2.1'],
|
|
37
|
+
['1', '0.0.0beta', true],
|
|
38
|
+
['~v0.5.4-pre', '0.5.4-alpha'],
|
|
39
|
+
['~v0.5.4-pre', '0.5.4-alpha'],
|
|
40
|
+
['=0.7.x', '0.6.0'],
|
|
41
|
+
['=0.7.x', '0.6.0-asdf'],
|
|
42
|
+
['>=0.7.x', '0.6.0'],
|
|
43
|
+
['~1.2.2', '1.2.1'],
|
|
44
|
+
['1.0.0 - 2.0.0', '0.2.3'],
|
|
45
|
+
['1.0.0', '0.0.1'],
|
|
46
|
+
['>=2.0.0', '1.0.0'],
|
|
47
|
+
['>=2.0.0', '1.9999.9999'],
|
|
48
|
+
['>=2.0.0', '1.2.9'],
|
|
49
|
+
['>2.0.0', '2.0.0'],
|
|
50
|
+
['>2.0.0', '1.2.9'],
|
|
51
|
+
['2.x.x', '1.1.3'],
|
|
52
|
+
['1.2.x', '1.1.3'],
|
|
53
|
+
['1.2.x || 2.x', '1.1.3'],
|
|
54
|
+
['2.*.*', '1.1.3'],
|
|
55
|
+
['1.2.*', '1.1.3'],
|
|
56
|
+
['1.2.* || 2.*', '1.1.3'],
|
|
57
|
+
['2', '1.9999.9999'],
|
|
58
|
+
['2.3', '2.2.1'],
|
|
59
|
+
['~2.4', '2.3.0'], // >=2.4.0 <2.5.0
|
|
60
|
+
['~>3.2.1', '2.3.2'], // >=3.2.1 <3.3.0
|
|
61
|
+
['~1', '0.2.3'], // >=1.0.0 <2.0.0
|
|
62
|
+
['~>1', '0.2.3'],
|
|
63
|
+
['~1.0', '0.0.0'], // >=1.0.0 <1.1.0
|
|
64
|
+
['>1', '1.0.0'],
|
|
65
|
+
['2', '1.0.0beta', true],
|
|
66
|
+
['>1', '1.0.0beta', true],
|
|
67
|
+
['> 1', '1.0.0beta', true],
|
|
68
|
+
['=0.7.x', '0.6.2'],
|
|
69
|
+
['>=0.7.x', '0.6.2']
|
|
70
|
+
].forEach(function(tuple) {
|
|
71
|
+
var range = tuple[0];
|
|
72
|
+
var version = tuple[1];
|
|
73
|
+
var loose = tuple[2] || false;
|
|
74
|
+
var msg = 'ltr(' + version + ', ' + range + ', ' + loose + ')';
|
|
75
|
+
t.ok(ltr(version, range, loose), msg);
|
|
76
|
+
});
|
|
77
|
+
t.end();
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
test('\nnegative ltr tests', function(t) {
|
|
81
|
+
// [range, version, loose]
|
|
82
|
+
// Version should NOT be greater than range
|
|
83
|
+
[
|
|
84
|
+
['~ 1.0', '1.1.0'],
|
|
85
|
+
['~0.6.1-1', '0.6.1-1'],
|
|
86
|
+
['1.0.0 - 2.0.0', '1.2.3'],
|
|
87
|
+
['1.0.0 - 2.0.0', '2.9.9'],
|
|
88
|
+
['1.0.0', '1.0.0'],
|
|
89
|
+
['>=*', '0.2.4'],
|
|
90
|
+
['', '1.0.0', true],
|
|
91
|
+
['*', '1.2.3'],
|
|
92
|
+
['*', 'v1.2.3-foo'],
|
|
93
|
+
['>=1.0.0', '1.0.0'],
|
|
94
|
+
['>=1.0.0', '1.0.1'],
|
|
95
|
+
['>=1.0.0', '1.1.0'],
|
|
96
|
+
['>1.0.0', '1.0.1'],
|
|
97
|
+
['>1.0.0', '1.1.0'],
|
|
98
|
+
['<=2.0.0', '2.0.0'],
|
|
99
|
+
['<=2.0.0', '1.9999.9999'],
|
|
100
|
+
['<=2.0.0', '0.2.9'],
|
|
101
|
+
['<2.0.0', '1.9999.9999'],
|
|
102
|
+
['<2.0.0', '0.2.9'],
|
|
103
|
+
['>= 1.0.0', '1.0.0'],
|
|
104
|
+
['>= 1.0.0', '1.0.1'],
|
|
105
|
+
['>= 1.0.0', '1.1.0'],
|
|
106
|
+
['> 1.0.0', '1.0.1'],
|
|
107
|
+
['> 1.0.0', '1.1.0'],
|
|
108
|
+
['<= 2.0.0', '2.0.0'],
|
|
109
|
+
['<= 2.0.0', '1.9999.9999'],
|
|
110
|
+
['<= 2.0.0', '0.2.9'],
|
|
111
|
+
['< 2.0.0', '1.9999.9999'],
|
|
112
|
+
['<\t2.0.0', '0.2.9'],
|
|
113
|
+
['>=0.1.97', 'v0.1.97'],
|
|
114
|
+
['>=0.1.97', '0.1.97'],
|
|
115
|
+
['0.1.20 || 1.2.4', '1.2.4'],
|
|
116
|
+
['0.1.20 || >1.2.4', '1.2.4'],
|
|
117
|
+
['0.1.20 || 1.2.4', '1.2.3'],
|
|
118
|
+
['0.1.20 || 1.2.4', '0.1.20'],
|
|
119
|
+
['>=0.2.3 || <0.0.1', '0.0.0'],
|
|
120
|
+
['>=0.2.3 || <0.0.1', '0.2.3'],
|
|
121
|
+
['>=0.2.3 || <0.0.1', '0.2.4'],
|
|
122
|
+
['||', '1.3.4'],
|
|
123
|
+
['2.x.x', '2.1.3'],
|
|
124
|
+
['1.2.x', '1.2.3'],
|
|
125
|
+
['1.2.x || 2.x', '2.1.3'],
|
|
126
|
+
['1.2.x || 2.x', '1.2.3'],
|
|
127
|
+
['x', '1.2.3'],
|
|
128
|
+
['2.*.*', '2.1.3'],
|
|
129
|
+
['1.2.*', '1.2.3'],
|
|
130
|
+
['1.2.* || 2.*', '2.1.3'],
|
|
131
|
+
['1.2.* || 2.*', '1.2.3'],
|
|
132
|
+
['1.2.* || 2.*', '1.2.3'],
|
|
133
|
+
['*', '1.2.3'],
|
|
134
|
+
['2', '2.1.2'],
|
|
135
|
+
['2.3', '2.3.1'],
|
|
136
|
+
['~2.4', '2.4.0'], // >=2.4.0 <2.5.0
|
|
137
|
+
['~2.4', '2.4.5'],
|
|
138
|
+
['~>3.2.1', '3.2.2'], // >=3.2.1 <3.3.0
|
|
139
|
+
['~1', '1.2.3'], // >=1.0.0 <2.0.0
|
|
140
|
+
['~>1', '1.2.3'],
|
|
141
|
+
['~> 1', '1.2.3'],
|
|
142
|
+
['~1.0', '1.0.2'], // >=1.0.0 <1.1.0
|
|
143
|
+
['~ 1.0', '1.0.2'],
|
|
144
|
+
['>=1', '1.0.0'],
|
|
145
|
+
['>= 1', '1.0.0'],
|
|
146
|
+
['<1.2', '1.1.1'],
|
|
147
|
+
['< 1.2', '1.1.1'],
|
|
148
|
+
['1', '1.0.0beta', true],
|
|
149
|
+
['~v0.5.4-pre', '0.5.5'],
|
|
150
|
+
['~v0.5.4-pre', '0.5.4'],
|
|
151
|
+
['=0.7.x', '0.7.2'],
|
|
152
|
+
['>=0.7.x', '0.7.2'],
|
|
153
|
+
['=0.7.x', '0.7.0-asdf'],
|
|
154
|
+
['>=0.7.x', '0.7.0-asdf'],
|
|
155
|
+
['<=0.7.x', '0.6.2'],
|
|
156
|
+
['>0.2.3 >0.2.4 <=0.2.5', '0.2.5'],
|
|
157
|
+
['>=0.2.3 <=0.2.4', '0.2.4'],
|
|
158
|
+
['1.0.0 - 2.0.0', '2.0.0'],
|
|
159
|
+
['^1', '1.0.0-0'],
|
|
160
|
+
['^3.0.0', '4.0.0'],
|
|
161
|
+
['^1.0.0 || ~2.0.1', '2.0.0'],
|
|
162
|
+
['^0.1.0 || ~3.0.1 || 5.0.0', '3.2.0'],
|
|
163
|
+
['^0.1.0 || ~3.0.1 || 5.0.0', '1.0.0beta', true],
|
|
164
|
+
['^0.1.0 || ~3.0.1 || 5.0.0', '5.0.0-0', true],
|
|
165
|
+
['^0.1.0 || ~3.0.1 || >4 <=5.0.0', '3.5.0']
|
|
166
|
+
].forEach(function(tuple) {
|
|
167
|
+
var range = tuple[0];
|
|
168
|
+
var version = tuple[1];
|
|
169
|
+
var loose = tuple[2] || false;
|
|
170
|
+
var msg = '!ltr(' + version + ', ' + range + ', ' + loose + ')';
|
|
171
|
+
t.notOk(ltr(version, range, loose), msg);
|
|
172
|
+
});
|
|
173
|
+
t.end();
|
|
174
|
+
});
|