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 CHANGED
@@ -6,7 +6,7 @@ files = semver.browser.js \
6
6
  all: $(files)
7
7
 
8
8
  clean:
9
- rm $(files)
9
+ rm -f $(files)
10
10
 
11
11
  semver.browser.js: head.js semver.js foot.js
12
12
  ( cat head.js; \
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 build), or null if it's not valid.
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.compare(a, b, loose)
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "semver",
3
- "version": "2.0.10",
3
+ "version": "2.2.1",
4
4
  "description": "The semantic version parser used by npm.",
5
5
  "main": "semver.js",
6
6
  "browser": "semver.browser.js",
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] + '\s+';
155
- var tildeTrimReplace = '$1';
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);
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] + '\s+';
165
- var tildeTrimReplace = '$1';
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
+ });