semver 2.2.1 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -34,7 +34,7 @@ As a command-line utility:
34
34
 
35
35
  ## Versions
36
36
 
37
- A "version" is described by the v2.0.0 specification found at
37
+ A "version" is described by the `v2.0.0` specification found at
38
38
  <http://semver.org/>.
39
39
 
40
40
  A leading `"="` or `"v"` character is stripped off and ignored.
@@ -43,9 +43,10 @@ A leading `"="` or `"v"` character is stripped off and ignored.
43
43
 
44
44
  The following range styles are supported:
45
45
 
46
- * `1.2.3` A specific version. When nothing else will do. Note that
47
- build metadata is still ignored, so `1.2.3+build2012` will satisfy
48
- this range.
46
+ * `1.2.3` A specific version. When nothing else will do. Must be a full
47
+ version number, with major, minor, and patch versions specified.
48
+ Note that build metadata is still ignored, so `1.2.3+build2012` will
49
+ satisfy this range.
49
50
  * `>1.2.3` Greater than a specific version.
50
51
  * `<1.2.3` Less than a specific version. If there is no prerelease
51
52
  tag on the version range, then no prerelease version will be allowed
@@ -56,26 +57,33 @@ The following range styles are supported:
56
57
  * `<=1.2.3` Less than or equal to. In this case, prerelease versions
57
58
  ARE allowed, so `1.2.3-beta` would satisfy.
58
59
  * `1.2.3 - 2.3.4` := `>=1.2.3 <=2.3.4`
59
- * `~1.2.3` := `>=1.2.3-0 <1.3.0-0` "Reasonably close to 1.2.3". When
60
+ * `~1.2.3` := `>=1.2.3-0 <1.3.0-0` "Reasonably close to `1.2.3`". When
60
61
  using tilde operators, prerelease versions are supported as well,
61
62
  but a prerelease of the next significant digit will NOT be
62
63
  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
+ * `^1.2.3` := `>=1.2.3-0 <2.0.0-0` "Compatible with `1.2.3`". When
64
65
  using caret operators, anything from the specified version (including
65
66
  prerelease) will be supported up to, but not including, the next
66
67
  major version (or its prereleases). `1.5.1` will satisfy `^1.2.3`,
67
68
  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
+ * `^0.1.3` := `>=0.1.3-0 <0.2.0-0` "Compatible with `0.1.3`". `0.x.x` versions are
69
70
  special: the first non-zero component indicates potentially breaking changes,
70
71
  meaning the caret operator matches any version with the same first non-zero
71
72
  component starting at the specified version.
72
- * `^0.0.2` := `=0.0.2` "Only the version 0.0.2 is considered compatible"
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"
75
- * `1.2.x` := `>=1.2.0-0 <1.3.0-0` "Any version starting with 1.2"
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"
78
- * `1.x` := `>=1.0.0-0 <2.0.0-0` "Any version starting with 1"
73
+ * `^0.0.2` := `=0.0.2` "Only the version `0.0.2` is considered compatible"
74
+ * `~1.2` := `>=1.2.0-0 <1.3.0-0` "Any version starting with `1.2`"
75
+ * `^1.2` := `>=1.2.0-0 <2.0.0-0` "Any version compatible with `1.2`"
76
+ * `1.2.x` := `>=1.2.0-0 <1.3.0-0` "Any version starting with `1.2`"
77
+ * `1.2.*` Same as `1.2.x`.
78
+ * `1.2` Same as `1.2.x`.
79
+ * `~1` := `>=1.0.0-0 <2.0.0-0` "Any version starting with `1`"
80
+ * `^1` := `>=1.0.0-0 <2.0.0-0` "Any version compatible with `1`"
81
+ * `1.x` := `>=1.0.0-0 <2.0.0-0` "Any version starting with `1`"
82
+ * `1.*` Same as `1.x`.
83
+ * `1` Same as `1.x`.
84
+ * `*` Any version whatsoever.
85
+ * `x` Same as `*`.
86
+ * `""` (just an empty string) Same as `*`.
79
87
 
80
88
 
81
89
  Ranges can be joined with either a space (which implies "and") or a
@@ -90,42 +98,50 @@ The resulting output will always be 100% strict, of course.
90
98
  Strict-mode Comparators and Ranges will be strict about the SemVer
91
99
  strings that they parse.
92
100
 
93
- * valid(v): Return the parsed version, or null if it's not valid.
94
- * inc(v, release): Return the version incremented by the release type
95
- (major, minor, patch, or prerelease), or null if it's not valid.
101
+ * `valid(v)`: Return the parsed version, or null if it's not valid.
102
+ * `inc(v, release)`: Return the version incremented by the release
103
+ type (`major`, `premajor`, `minor`, `preminor`, `patch`,
104
+ `prepatch`, or `prerelease`), or null if it's not valid
105
+ * `premajor` in one call will bump the version up to the next major
106
+ version and down to a prerelease of that major version.
107
+ `preminor`, and `prepatch` work the same way.
108
+ * If called from a non-prerelease version, the `prerelease` will work the
109
+ same as `prepatch`. It increments the patch version, then makes a
110
+ prerelease. If the input version is already a prerelease it simply
111
+ increments it.
96
112
 
97
113
  ### Comparison
98
114
 
99
- * gt(v1, v2): `v1 > v2`
100
- * gte(v1, v2): `v1 >= v2`
101
- * lt(v1, v2): `v1 < v2`
102
- * lte(v1, v2): `v1 <= v2`
103
- * eq(v1, v2): `v1 == v2` This is true if they're logically equivalent,
115
+ * `gt(v1, v2)`: `v1 > v2`
116
+ * `gte(v1, v2)`: `v1 >= v2`
117
+ * `lt(v1, v2)`: `v1 < v2`
118
+ * `lte(v1, v2)`: `v1 <= v2`
119
+ * `eq(v1, v2)`: `v1 == v2` This is true if they're logically equivalent,
104
120
  even if they're not the exact same string. You already know how to
105
121
  compare strings.
106
- * neq(v1, v2): `v1 != v2` The opposite of eq.
107
- * cmp(v1, comparator, v2): Pass in a comparison string, and it'll call
122
+ * `neq(v1, v2)`: `v1 != v2` The opposite of `eq`.
123
+ * `cmp(v1, comparator, v2)`: Pass in a comparison string, and it'll call
108
124
  the corresponding function above. `"==="` and `"!=="` do simple
109
125
  string comparison, but are included for completeness. Throws if an
110
126
  invalid comparison string is provided.
111
- * compare(v1, v2): Return 0 if v1 == v2, or 1 if v1 is greater, or -1 if
112
- v2 is greater. Sorts in ascending order if passed to Array.sort().
113
- * rcompare(v1, v2): The reverse of compare. Sorts an array of versions
114
- in descending order when passed to Array.sort().
127
+ * `compare(v1, v2)`: Return `0` if `v1 == v2`, or `1` if `v1` is greater, or `-1` if
128
+ `v2` is greater. Sorts in ascending order if passed to `Array.sort()`.
129
+ * `rcompare(v1, v2)`: The reverse of compare. Sorts an array of versions
130
+ in descending order when passed to `Array.sort()`.
115
131
 
116
132
 
117
133
  ### Ranges
118
134
 
119
- * validRange(range): Return the valid range or null if it's not valid
120
- * satisfies(version, range): Return true if the version satisfies the
135
+ * `validRange(range)`: Return the valid range or null if it's not valid
136
+ * `satisfies(version, range)`: Return true if the version satisfies the
121
137
  range.
122
- * maxSatisfying(versions, range): Return the highest version in the list
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
138
+ * `maxSatisfying(versions, range)`: Return the highest version in the list
139
+ that satisfies the range, or `null` if none of them do.
140
+ * `gtr(version, range)`: Return `true` if version is greater than all the
125
141
  versions possible in the range.
126
- * ltr(version, range): Return true if version is less than all the
142
+ * `ltr(version, range)`: Return `true` if version is less than all the
127
143
  versions possible in the range.
128
- * outside(version, range, hilo): Return true if the version is outside
144
+ * `outside(version, range, hilo)`: Return true if the version is outside
129
145
  the bounds of the range in either the high or low direction. The
130
146
  `hilo` argument must be either the string `'>'` or `'<'`. (This is
131
147
  the function called by `gtr` and `ltr`.)
@@ -134,8 +150,8 @@ Note that, since ranges may be non-contiguous, a version might not be
134
150
  greater than a range, less than a range, *or* satisfy a range! For
135
151
  example, the range `1.2 <1.2.9 || >2.0.0` would have a hole from `1.2.9`
136
152
  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
153
+ range (because `2.0.1` satisfies, which is higher), nor less than the
154
+ range (since `1.2.8` satisfies, which is lower), and it also does not
139
155
  satisfy the range.
140
156
 
141
157
  If you want to know if a version satisfies or does not satisfy a
package/bin/semver CHANGED
@@ -39,6 +39,7 @@ function main () {
39
39
  case "-i": case "--inc": case "--increment":
40
40
  switch (argv[0]) {
41
41
  case "major": case "minor": case "patch": case "prerelease":
42
+ case "premajor": case "preminor": case "prepatch":
42
43
  inc = argv.shift()
43
44
  break
44
45
  default:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "semver",
3
- "version": "2.2.1",
3
+ "version": "2.3.0",
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
@@ -248,6 +248,8 @@ function SemVer(version, loose) {
248
248
  return version;
249
249
  else
250
250
  version = version.version;
251
+ } else if (typeof version !== 'string') {
252
+ throw new TypeError('Invalid Version: ' + version);
251
253
  }
252
254
 
253
255
  if (!(this instanceof SemVer))
@@ -320,7 +322,7 @@ SemVer.prototype.comparePre = function(other) {
320
322
  return -1;
321
323
  else if (!this.prerelease.length && other.prerelease.length)
322
324
  return 1;
323
- else if (!this.prerelease.lenth && !other.prerelease.length)
325
+ else if (!this.prerelease.length && !other.prerelease.length)
324
326
  return 0;
325
327
 
326
328
  var i = 0;
@@ -341,19 +343,49 @@ SemVer.prototype.comparePre = function(other) {
341
343
  } while (++i);
342
344
  };
343
345
 
346
+ // preminor will bump the version up to the next minor release, and immediately
347
+ // down to pre-release. premajor and prepatch work the same way.
344
348
  SemVer.prototype.inc = function(release) {
345
349
  switch (release) {
350
+ case 'premajor':
351
+ this.inc('major');
352
+ this.inc('pre');
353
+ break;
354
+ case 'preminor':
355
+ this.inc('minor');
356
+ this.inc('pre');
357
+ break;
358
+ case 'prepatch':
359
+ this.inc('patch');
360
+ this.inc('pre');
361
+ break;
362
+ // If the input is a non-prerelease version, this acts the same as
363
+ // prepatch.
364
+ case 'prerelease':
365
+ if (this.prerelease.length === 0)
366
+ this.inc('patch');
367
+ this.inc('pre');
368
+ break;
346
369
  case 'major':
347
370
  this.major++;
348
371
  this.minor = -1;
349
372
  case 'minor':
350
373
  this.minor++;
351
- this.patch = -1;
374
+ this.patch = 0;
375
+ this.prerelease = [];
376
+ break;
352
377
  case 'patch':
353
- this.patch++;
378
+ // If this is not a pre-release version, it will increment the patch.
379
+ // If it is a pre-release it will bump up to the same patch version.
380
+ // 1.2.0-5 patches to 1.2.0
381
+ // 1.2.0 patches to 1.2.1
382
+ if (this.prerelease.length === 0)
383
+ this.patch++;
354
384
  this.prerelease = [];
355
385
  break;
356
- case 'prerelease':
386
+ // This probably shouldn't be used publically.
387
+ // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction.
388
+ case 'pre':
357
389
  if (this.prerelease.length === 0)
358
390
  this.prerelease = [0];
359
391
  else {
Binary file
package/semver.js CHANGED
@@ -258,6 +258,8 @@ function SemVer(version, loose) {
258
258
  return version;
259
259
  else
260
260
  version = version.version;
261
+ } else if (typeof version !== 'string') {
262
+ throw new TypeError('Invalid Version: ' + version);
261
263
  }
262
264
 
263
265
  if (!(this instanceof SemVer))
@@ -330,7 +332,7 @@ SemVer.prototype.comparePre = function(other) {
330
332
  return -1;
331
333
  else if (!this.prerelease.length && other.prerelease.length)
332
334
  return 1;
333
- else if (!this.prerelease.lenth && !other.prerelease.length)
335
+ else if (!this.prerelease.length && !other.prerelease.length)
334
336
  return 0;
335
337
 
336
338
  var i = 0;
@@ -351,19 +353,49 @@ SemVer.prototype.comparePre = function(other) {
351
353
  } while (++i);
352
354
  };
353
355
 
356
+ // preminor will bump the version up to the next minor release, and immediately
357
+ // down to pre-release. premajor and prepatch work the same way.
354
358
  SemVer.prototype.inc = function(release) {
355
359
  switch (release) {
360
+ case 'premajor':
361
+ this.inc('major');
362
+ this.inc('pre');
363
+ break;
364
+ case 'preminor':
365
+ this.inc('minor');
366
+ this.inc('pre');
367
+ break;
368
+ case 'prepatch':
369
+ this.inc('patch');
370
+ this.inc('pre');
371
+ break;
372
+ // If the input is a non-prerelease version, this acts the same as
373
+ // prepatch.
374
+ case 'prerelease':
375
+ if (this.prerelease.length === 0)
376
+ this.inc('patch');
377
+ this.inc('pre');
378
+ break;
356
379
  case 'major':
357
380
  this.major++;
358
381
  this.minor = -1;
359
382
  case 'minor':
360
383
  this.minor++;
361
- this.patch = -1;
384
+ this.patch = 0;
385
+ this.prerelease = [];
386
+ break;
362
387
  case 'patch':
363
- this.patch++;
388
+ // If this is not a pre-release version, it will increment the patch.
389
+ // If it is a pre-release it will bump up to the same patch version.
390
+ // 1.2.0-5 patches to 1.2.0
391
+ // 1.2.0 patches to 1.2.1
392
+ if (this.prerelease.length === 0)
393
+ this.patch++;
364
394
  this.prerelease = [];
365
395
  break;
366
- case 'prerelease':
396
+ // This probably shouldn't be used publically.
397
+ // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction.
398
+ case 'pre':
367
399
  if (this.prerelease.length === 0)
368
400
  this.prerelease = [0];
369
401
  else {
package/semver.min.js CHANGED
@@ -1 +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={});
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 a=n++;t[a]="\\d*[a-zA-Z-][a-zA-Z0-9-]*";var o=n++;t[o]="("+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[a]+")";var c=n++;t[c]="(?:"+t[s]+"|"+t[a]+")";var l=n++;t[l]="(?:-("+t[u]+"(?:\\."+t[u]+")*))";var p=n++;t[p]="(?:-?("+t[c]+"(?:\\."+t[c]+")*))";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[o]+t[l]+"?"+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 b=n++;t[b]=t[s]+"|x|X|\\*";var $=n++;t[$]=t[i]+"|x|X|\\*";var j=n++;t[j]="[v=\\s]*("+t[$]+")"+"(?:\\.("+t[$]+")"+"(?:\\.("+t[$]+")"+"(?:("+t[l]+")"+")?)?)?";var k=n++;t[k]="[v=\\s]*("+t[b]+")"+"(?:\\.("+t[b]+")"+"(?:\\.("+t[b]+")"+"(?:("+t[p]+")"+")?)?)?";var E=n++;t[E]="^"+t[y]+"\\s*"+t[j]+"$";var x=n++;t[x]="^"+t[y]+"\\s*"+t[k]+"$";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[j]+"$";var T=n++;t[T]="^"+t[R]+t[k]+"$";var A=n++;t[A]="(?:\\^)";var C=n++;t[C]="(\\s*)"+t[A]+"\\s+";r[C]=new RegExp(t[C],"g");var M="$1^";var z=n++;t[z]="^"+t[A]+t[j]+"$";var P=n++;t[P]="^"+t[A]+t[k]+"$";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[j]+")";r[L]=new RegExp(t[L],"g");var X="$1$2$3";var _=n++;t[_]="^\\s*("+t[j]+")"+"\\s+-\\s+"+"("+t[j]+")"+"\\s*$";var N=n++;t[N]="^\\s*("+t[k]+")"+"\\s+-\\s+"+"("+t[k]+")"+"\\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}else if(typeof e!=="string"){throw new TypeError("Invalid Version: "+e)}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.length&&!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"premajor":this.inc("major");this.inc("pre");break;case"preminor":this.inc("minor");this.inc("pre");break;case"prepatch":this.inc("patch");this.inc("pre");break;case"prerelease":if(this.prerelease.length===0)this.inc("patch");this.inc("pre");break;case"major":this.major++;this.minor=-1;case"minor":this.minor++;this.patch=0;this.prerelease=[];break;case"patch":if(this.prerelease.length===0)this.patch++;this.prerelease=[];break;case"pre":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=ar;function ar(e,r,t){return W(e,r,t)!==0}e.gte=or;function or(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=ar(e,t,n);break;case">":i=nr(e,t,n);break;case">=":i=or(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=cr;function cr(e,r){if(e instanceof cr){if(e.loose===r)return e;else e=e.value}if(!(this instanceof cr))return new cr(e,r);this.loose=r;this.parse(e);if(this.semver===lr)this.value="";else this.value=this.operator+this.semver.version}var lr={};cr.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=lr;else{this.semver=new H(n[2],this.loose);if(this.operator==="<"&&!this.semver.prerelease.length){this.semver.prerelease=["0"];this.semver.format()}}};cr.prototype.inspect=function(){return'<SemVer Comparator "'+this+'">'};cr.prototype.toString=function(){return this.value};cr.prototype.test=function(e){return this.semver===lr?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,kr);e=e.replace(r[L],X);e=e.replace(r[S],V);e=e.replace(r[C],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 cr(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=br(e,r);e=jr(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[T]: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 br(e,r){return e.split(/\s+/).map(function(e){return $r(e,r)}).join(" ")}function $r(e,t){e=e.trim();var n=t?r[x]:r[E];return e.replace(n,function(e,r,t,n,i,s){var a=mr(t);var o=a||mr(n);var f=o||mr(i);var u=f;if(r==="="&&u)r="";if(r&&u){if(a)t=0;if(o)n=0;if(f)i=0;if(r===">"){r=">=";if(a){}else if(o){t=+t+1;n=0;i=0}else if(f){n=+n+1;i=0}}e=r+t+"."+n+"."+i+"-0"}else if(a){e="*"}else if(o){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 jr(e,t){return e.trim().replace(r[O],"")}function kr(e,r,t,n,i,s,a,o,f,u,c,l,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))o="";else if(mr(u))o="<"+(+f+1)+".0.0-0";else if(mr(c))o="<"+f+"."+(+u+1)+".0-0";else if(l)o="<="+f+"."+u+"."+c+"-"+l;else o="<="+o;return(r+" "+o).trim()}pr.prototype.test=function(e){if(!e)return false;for(var r=0;r<this.set.length;r++){if(Er(this.set[r],e))return true}return false};function Er(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 Tr(e,r,"<",t)}e.gtr=Ir;function Ir(e,r,t){return Tr(e,r,">",t)}e.outside=Tr;function Tr(e,r,t,n){e=new H(e,n);r=new pr(r,n);var i,s,a,o,f;switch(t){case">":i=nr;s=fr;a=ir;o=">";f=">=";break;case"<":i=ir;s=or;a=nr;o="<";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 c=r.set[u];var l=null;var p=null;c.forEach(function(e){l=l||e;p=p||e;if(i(e.semver,l.semver,n)){l=e}else if(a(e.semver,p.semver,n)){p=e}});if(l.operator===o||l.operator===f){return false}if((!p.operator||p.operator===o)&&s(e,p.semver)){return false}else if(p.operator===f&&a(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/index.js CHANGED
@@ -302,8 +302,15 @@ test('\nincrement versions test', function(t) {
302
302
  ['1.2.3tag', 'major', '2.0.0', true],
303
303
  ['1.2.3-tag', 'major', '2.0.0'],
304
304
  ['1.2.3', 'fake', null],
305
+ ['1.2.0-0', 'patch', '1.2.0'],
305
306
  ['fake', 'major', null],
306
- ['1.2.3', 'prerelease', '1.2.3-0'],
307
+ ['1.2.3-4', 'major', '2.0.0'],
308
+ ['1.2.3-4', 'minor', '1.3.0'],
309
+ ['1.2.3-4', 'patch', '1.2.3'],
310
+ ['1.2.3-alpha.0.beta', 'major', '2.0.0'],
311
+ ['1.2.3-alpha.0.beta', 'minor', '1.3.0'],
312
+ ['1.2.3-alpha.0.beta', 'patch', '1.2.3'],
313
+ ['1.2.4', 'prerelease', '1.2.5-0'],
307
314
  ['1.2.3-0', 'prerelease', '1.2.3-1'],
308
315
  ['1.2.3-alpha.0', 'prerelease', '1.2.3-alpha.1'],
309
316
  ['1.2.3-alpha.1', 'prerelease', '1.2.3-alpha.2'],
@@ -319,7 +326,13 @@ test('\nincrement versions test', function(t) {
319
326
  ['1.2.3-alpha.10.beta.2', 'prerelease', '1.2.3-alpha.10.beta.3'],
320
327
  ['1.2.3-alpha.9.beta', 'prerelease', '1.2.3-alpha.10.beta'],
321
328
  ['1.2.3-alpha.10.beta', 'prerelease', '1.2.3-alpha.11.beta'],
322
- ['1.2.3-alpha.11.beta', 'prerelease', '1.2.3-alpha.12.beta']
329
+ ['1.2.3-alpha.11.beta', 'prerelease', '1.2.3-alpha.12.beta'],
330
+ ['1.2.0', 'preminor', '1.3.0-0'],
331
+ ['1.2.0', 'premajor', '2.0.0-0'],
332
+ ['1.2.0', 'preminor', '1.3.0-0'],
333
+ ['1.2.0', 'premajor', '2.0.0-0']
334
+
335
+
323
336
  ].forEach(function(v) {
324
337
  var pre = v[0];
325
338
  var what = v[1];
@@ -500,6 +513,21 @@ test('\ncomparators test', function(t) {
500
513
  t.end();
501
514
  });
502
515
 
516
+ test('\ninvalid version numbers', function(t) {
517
+ ['1.2.3.4',
518
+ 'NOT VALID',
519
+ 1.2,
520
+ null,
521
+ 'Infinity.NaN.Infinity'
522
+ ].forEach(function(v) {
523
+ t.throws(function() {
524
+ new SemVer(v);
525
+ }, {name:'TypeError', message:'Invalid Version: ' + v});
526
+ });
527
+
528
+ t.end();
529
+ });
530
+
503
531
  test('\nstrict vs loose version numbers', function(t) {
504
532
  [['=1.2.3', '1.2.3'],
505
533
  ['01.02.03', '1.2.3'],