semver 5.0.3 → 5.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
@@ -4,6 +4,8 @@ semver(1) -- The semantic versioner for npm
4
4
  ## Usage
5
5
 
6
6
  $ npm install semver
7
+ $ node
8
+ var semver = require('semver')
7
9
 
8
10
  semver.valid('1.2.3') // '1.2.3'
9
11
  semver.valid('a.b.c') // null
@@ -16,18 +18,35 @@ As a command-line utility:
16
18
 
17
19
  $ semver -h
18
20
 
19
- Usage: semver <version> [<version> [...]] [-r <range> | -i <inc> | --preid <identifier> | -l | -rv]
20
- Test if version(s) satisfy the supplied range(s), and sort them.
21
+ SemVer 5.1.0
21
22
 
22
- Multiple versions or ranges may be supplied, unless increment
23
- option is specified. In that case, only a single version may
24
- be used, and it is incremented by the specified level
23
+ A JavaScript implementation of the http://semver.org/ specification
24
+ Copyright Isaac Z. Schlueter
25
+
26
+ Usage: semver [options] <version> [<version> [...]]
27
+ Prints valid versions sorted by SemVer precedence
28
+
29
+ Options:
30
+ -r --range <range>
31
+ Print versions that match the specified range.
32
+
33
+ -i --increment [<level>]
34
+ Increment a version by the specified level. Level can
35
+ be one of: major, minor, patch, premajor, preminor,
36
+ prepatch, or prerelease. Default level is 'patch'.
37
+ Only one version may be specified.
38
+
39
+ --preid <identifier>
40
+ Identifier to be used to prefix premajor, preminor,
41
+ prepatch or prerelease version increments.
42
+
43
+ -l --loose
44
+ Interpret versions and ranges loosely
25
45
 
26
46
  Program exits successfully if any valid version satisfies
27
47
  all supplied ranges, and prints all satisfying versions.
28
48
 
29
- If no versions are valid, or ranges are not satisfied,
30
- then exits failure.
49
+ If no satisfying versions are found, then exits failure.
31
50
 
32
51
  Versions are printed in ascending order, so supplying
33
52
  multiple versions to the utility will just sort them.
@@ -107,7 +126,7 @@ The method `.inc` takes an additional `identifier` string argument that
107
126
  will append the value of the string as a prerelease identifier:
108
127
 
109
128
  ```javascript
110
- > semver.inc('1.2.3', 'pre', 'beta')
129
+ > semver.inc('1.2.3', 'prerelease', 'beta')
111
130
  '1.2.4-beta.0'
112
131
  ```
113
132
 
@@ -228,6 +247,30 @@ zero.
228
247
  * `^1.x` := `>=1.0.0 <2.0.0`
229
248
  * `^0.x` := `>=0.0.0 <1.0.0`
230
249
 
250
+ ### Range Grammar
251
+
252
+ Putting all this together, here is a Backus-Naur grammar for ranges,
253
+ for the benefit of parser authors:
254
+
255
+ ```bnf
256
+ range-set ::= range ( logical-or range ) *
257
+ logical-or ::= ( ' ' ) * '||' ( ' ' ) *
258
+ range ::= hyphen | simple ( ' ' simple ) * | ''
259
+ hyphen ::= partial ' - ' partial
260
+ simple ::= primitive | partial | tilde | caret
261
+ primitive ::= ( '<' | '>' | '>=' | '<=' | '=' | ) partial
262
+ partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )?
263
+ xr ::= 'x' | 'X' | '*' | nr
264
+ nr ::= '0' | ['1'-'9'] ( ['0'-'9'] ) *
265
+ tilde ::= '~' partial
266
+ caret ::= '^' partial
267
+ qualifier ::= ( '-' pre )? ( '+' build )?
268
+ pre ::= parts
269
+ build ::= parts
270
+ parts ::= part ( '.' part ) *
271
+ part ::= nr | [-0-9A-Za-z]+
272
+ ```
273
+
231
274
  ## Functions
232
275
 
233
276
  All methods and classes take a final `loose` boolean argument that, if
@@ -248,6 +291,8 @@ strings that they parse.
248
291
  same as `prepatch`. It increments the patch version, then makes a
249
292
  prerelease. If the input version is already a prerelease it simply
250
293
  increments it.
294
+ * `prerelease(v)`: Returns an array of prerelease components, or null
295
+ if none exist. Example: `prerelease('1.2.3-alpha.1') -> ['alpha', 1]`
251
296
  * `major(v)`: Return the major version number.
252
297
  * `minor(v)`: Return the minor version number.
253
298
  * `patch(v)`: Return the patch version number.
@@ -282,6 +327,8 @@ strings that they parse.
282
327
  range.
283
328
  * `maxSatisfying(versions, range)`: Return the highest version in the list
284
329
  that satisfies the range, or `null` if none of them do.
330
+ * `minSatisfying(versions, range)`: Return the lowest version in the list
331
+ that satisfies the range, or `null` if none of them do.
285
332
  * `gtr(version, range)`: Return `true` if version is greater than all the
286
333
  versions possible in the range.
287
334
  * `ltr(version, range)`: Return `true` if version is less than all the
package/package.json CHANGED
@@ -1,17 +1,22 @@
1
1
  {
2
2
  "name": "semver",
3
- "version": "5.0.3",
3
+ "version": "5.3.0",
4
4
  "description": "The semantic version parser used by npm.",
5
5
  "main": "semver.js",
6
6
  "scripts": {
7
7
  "test": "tap test/*.js"
8
8
  },
9
9
  "devDependencies": {
10
- "tap": "^1.3.4"
10
+ "tap": "^2.0.0"
11
11
  },
12
12
  "license": "ISC",
13
13
  "repository": "https://github.com/npm/node-semver",
14
14
  "bin": {
15
15
  "semver": "./bin/semver"
16
- }
16
+ },
17
+ "files": [
18
+ "bin",
19
+ "range.bnf",
20
+ "semver.js"
21
+ ]
17
22
  }
package/range.bnf ADDED
@@ -0,0 +1,16 @@
1
+ range-set ::= range ( logical-or range ) *
2
+ logical-or ::= ( ' ' ) * '||' ( ' ' ) *
3
+ range ::= hyphen | simple ( ' ' simple ) * | ''
4
+ hyphen ::= partial ' - ' partial
5
+ simple ::= primitive | partial | tilde | caret
6
+ primitive ::= ( '<' | '>' | '>=' | '<=' | '=' | ) partial
7
+ partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )?
8
+ xr ::= 'x' | 'X' | '*' | nr
9
+ nr ::= '0' | ['1'-'9'] ( ['0'-'9'] ) *
10
+ tilde ::= '~' partial
11
+ caret ::= '^' partial
12
+ qualifier ::= ( '-' pre )? ( '+' build )?
13
+ pre ::= parts
14
+ build ::= parts
15
+ parts ::= part ( '.' part ) *
16
+ part ::= nr | [-0-9A-Za-z]+
package/semver.js CHANGED
@@ -314,9 +314,9 @@ function SemVer(version, loose) {
314
314
  else
315
315
  this.prerelease = m[4].split('.').map(function(id) {
316
316
  if (/^[0-9]+$/.test(id)) {
317
- var num = +id
317
+ var num = +id;
318
318
  if (num >= 0 && num < MAX_SAFE_INTEGER)
319
- return num
319
+ return num;
320
320
  }
321
321
  return id;
322
322
  });
@@ -332,10 +332,6 @@ SemVer.prototype.format = function() {
332
332
  return this.version;
333
333
  };
334
334
 
335
- SemVer.prototype.inspect = function() {
336
- return '<SemVer "' + this + '">';
337
- };
338
-
339
335
  SemVer.prototype.toString = function() {
340
336
  return this.version;
341
337
  };
@@ -692,10 +688,6 @@ Comparator.prototype.parse = function(comp) {
692
688
  this.semver = new SemVer(m[2], this.loose);
693
689
  };
694
690
 
695
- Comparator.prototype.inspect = function() {
696
- return '<SemVer Comparator "' + this + '">';
697
- };
698
-
699
691
  Comparator.prototype.toString = function() {
700
692
  return this.value;
701
693
  };
@@ -739,10 +731,6 @@ function Range(range, loose) {
739
731
  this.format();
740
732
  }
741
733
 
742
- Range.prototype.inspect = function() {
743
- return '<SemVer Range "' + this.range + '">';
744
- };
745
-
746
734
  Range.prototype.format = function() {
747
735
  this.range = this.set.map(function(comps) {
748
736
  return comps.join(' ').trim();
@@ -848,7 +836,7 @@ function replaceTilde(comp, loose) {
848
836
  else if (isX(m))
849
837
  ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0';
850
838
  else if (isX(p))
851
- // ~1.2 == >=1.2.0- <1.3.0-
839
+ // ~1.2 == >=1.2.0 <1.3.0
852
840
  ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0';
853
841
  else if (pr) {
854
842
  debug('replaceTilde pr', pr);
@@ -978,11 +966,11 @@ function replaceXRange(comp, loose) {
978
966
  } else if (gtlt === '<=') {
979
967
  // <=0.7.x is actually <0.8.0, since any 0.7.x should
980
968
  // pass. Similarly, <=7.x is actually <8.0.0, etc.
981
- gtlt = '<'
969
+ gtlt = '<';
982
970
  if (xm)
983
- M = +M + 1
971
+ M = +M + 1;
984
972
  else
985
- m = +m + 1
973
+ m = +m + 1;
986
974
  }
987
975
 
988
976
  ret = gtlt + M + '.' + m + '.' + p;
@@ -1106,6 +1094,15 @@ function maxSatisfying(versions, range, loose) {
1106
1094
  })[0] || null;
1107
1095
  }
1108
1096
 
1097
+ exports.minSatisfying = minSatisfying;
1098
+ function minSatisfying(versions, range, loose) {
1099
+ return versions.filter(function(version) {
1100
+ return satisfies(version, range, loose);
1101
+ }).sort(function(a, b) {
1102
+ return compare(a, b, loose);
1103
+ })[0] || null;
1104
+ }
1105
+
1109
1106
  exports.validRange = validRange;
1110
1107
  function validRange(range, loose) {
1111
1108
  try {
@@ -1198,3 +1195,9 @@ function outside(version, range, hilo, loose) {
1198
1195
  }
1199
1196
  return true;
1200
1197
  }
1198
+
1199
+ exports.prerelease = prerelease;
1200
+ function prerelease(version, loose) {
1201
+ var parsed = parse(version, loose);
1202
+ return (parsed && parsed.prerelease.length) ? parsed.prerelease : null;
1203
+ }
package/.npmignore DELETED
@@ -1,4 +0,0 @@
1
- node_modules/
2
- coverage/
3
- .nyc_output/
4
- nyc_output/
package/.travis.yml DELETED
@@ -1,5 +0,0 @@
1
- language: node_js
2
- node_js:
3
- - '0.10'
4
- - '0.12'
5
- - 'iojs'
@@ -1,31 +0,0 @@
1
- var test = require('tap').test
2
- var semver = require('../')
3
-
4
- test('long version is too long', function (t) {
5
- var v = '1.2.' + new Array(256).join('1')
6
- t.throws(function () {
7
- new semver.SemVer(v)
8
- })
9
- t.equal(semver.valid(v, false), null)
10
- t.equal(semver.valid(v, true), null)
11
- t.equal(semver.inc(v, 'patch'), null)
12
- t.end()
13
- })
14
-
15
- test('big number is like too long version', function (t) {
16
- var v = '1.2.' + new Array(100).join('1')
17
- t.throws(function () {
18
- new semver.SemVer(v)
19
- })
20
- t.equal(semver.valid(v, false), null)
21
- t.equal(semver.valid(v, true), null)
22
- t.equal(semver.inc(v, 'patch'), null)
23
- t.end()
24
- })
25
-
26
- test('parsing null does not throw', function (t) {
27
- t.equal(semver.parse(null), null)
28
- t.equal(semver.parse({}), null)
29
- t.equal(semver.parse(new semver.SemVer('1.2.3')).version, '1.2.3')
30
- t.end()
31
- })
package/test/clean.js DELETED
@@ -1,29 +0,0 @@
1
- var tap = require('tap');
2
- var test = tap.test;
3
- var semver = require('../semver.js');
4
- var clean = semver.clean;
5
-
6
- test('\nclean tests', function(t) {
7
- // [range, version]
8
- // Version should be detectable despite extra characters
9
- [
10
- ['1.2.3', '1.2.3'],
11
- [' 1.2.3 ', '1.2.3'],
12
- [' 1.2.3-4 ', '1.2.3-4'],
13
- [' 1.2.3-pre ', '1.2.3-pre'],
14
- [' =v1.2.3 ', '1.2.3'],
15
- ['v1.2.3', '1.2.3'],
16
- [' v1.2.3 ', '1.2.3'],
17
- ['\t1.2.3', '1.2.3'],
18
- ['>1.2.3', null],
19
- ['~1.2.3', null],
20
- ['<=1.2.3', null],
21
- ['1.2.x', null]
22
- ].forEach(function(tuple) {
23
- var range = tuple[0];
24
- var version = tuple[1];
25
- var msg = 'clean(' + range + ') = ' + version;
26
- t.equal(clean(range), version, msg);
27
- });
28
- t.end();
29
- });
package/test/gtr.js DELETED
@@ -1,173 +0,0 @@
1
- var tap = require('tap');
2
- var test = tap.test;
3
- var semver = require('../semver.js');
4
- var gtr = semver.gtr;
5
-
6
- test('\ngtr tests', function(t) {
7
- // [range, version, loose]
8
- // Version should be greater than range
9
- [
10
- ['~1.2.2', '1.3.0'],
11
- ['~0.6.1-1', '0.7.1-1'],
12
- ['1.0.0 - 2.0.0', '2.0.1'],
13
- ['1.0.0', '1.0.1-beta1'],
14
- ['1.0.0', '2.0.0'],
15
- ['<=2.0.0', '2.1.1'],
16
- ['<=2.0.0', '3.2.9'],
17
- ['<2.0.0', '2.0.0'],
18
- ['0.1.20 || 1.2.4', '1.2.5'],
19
- ['2.x.x', '3.0.0'],
20
- ['1.2.x', '1.3.0'],
21
- ['1.2.x || 2.x', '3.0.0'],
22
- ['2.*.*', '5.0.1'],
23
- ['1.2.*', '1.3.3'],
24
- ['1.2.* || 2.*', '4.0.0'],
25
- ['2', '3.0.0'],
26
- ['2.3', '2.4.2'],
27
- ['~2.4', '2.5.0'], // >=2.4.0 <2.5.0
28
- ['~2.4', '2.5.5'],
29
- ['~>3.2.1', '3.3.0'], // >=3.2.1 <3.3.0
30
- ['~1', '2.2.3'], // >=1.0.0 <2.0.0
31
- ['~>1', '2.2.4'],
32
- ['~> 1', '3.2.3'],
33
- ['~1.0', '1.1.2'], // >=1.0.0 <1.1.0
34
- ['~ 1.0', '1.1.0'],
35
- ['<1.2', '1.2.0'],
36
- ['< 1.2', '1.2.1'],
37
- ['1', '2.0.0beta', true],
38
- ['~v0.5.4-pre', '0.6.0'],
39
- ['~v0.5.4-pre', '0.6.1-pre'],
40
- ['=0.7.x', '0.8.0'],
41
- ['=0.7.x', '0.8.0-asdf'],
42
- ['<0.7.x', '0.7.0'],
43
- ['~1.2.2', '1.3.0'],
44
- ['1.0.0 - 2.0.0', '2.2.3'],
45
- ['1.0.0', '1.0.1'],
46
- ['<=2.0.0', '3.0.0'],
47
- ['<=2.0.0', '2.9999.9999'],
48
- ['<=2.0.0', '2.2.9'],
49
- ['<2.0.0', '2.9999.9999'],
50
- ['<2.0.0', '2.2.9'],
51
- ['2.x.x', '3.1.3'],
52
- ['1.2.x', '1.3.3'],
53
- ['1.2.x || 2.x', '3.1.3'],
54
- ['2.*.*', '3.1.3'],
55
- ['1.2.*', '1.3.3'],
56
- ['1.2.* || 2.*', '3.1.3'],
57
- ['2', '3.1.2'],
58
- ['2.3', '2.4.1'],
59
- ['~2.4', '2.5.0'], // >=2.4.0 <2.5.0
60
- ['~>3.2.1', '3.3.2'], // >=3.2.1 <3.3.0
61
- ['~1', '2.2.3'], // >=1.0.0 <2.0.0
62
- ['~>1', '2.2.3'],
63
- ['~1.0', '1.1.0'], // >=1.0.0 <1.1.0
64
- ['<1', '1.0.0'],
65
- ['1', '2.0.0beta', true],
66
- ['<1', '1.0.0beta', true],
67
- ['< 1', '1.0.0beta', true],
68
- ['=0.7.x', '0.8.2'],
69
- ['<0.7.x', '0.7.2']
70
- ].forEach(function(tuple) {
71
- var range = tuple[0];
72
- var version = tuple[1];
73
- var loose = tuple[2] || false;
74
- var msg = 'gtr(' + version + ', ' + range + ', ' + loose + ')';
75
- t.ok(gtr(version, range, loose), msg);
76
- });
77
- t.end();
78
- });
79
-
80
- test('\nnegative gtr tests', function(t) {
81
- // [range, version, loose]
82
- // Version should NOT be greater than range
83
- [
84
- ['~0.6.1-1', '0.6.1-1'],
85
- ['1.0.0 - 2.0.0', '1.2.3'],
86
- ['1.0.0 - 2.0.0', '0.9.9'],
87
- ['1.0.0', '1.0.0'],
88
- ['>=*', '0.2.4'],
89
- ['', '1.0.0', true],
90
- ['*', '1.2.3'],
91
- ['*', 'v1.2.3-foo'],
92
- ['>=1.0.0', '1.0.0'],
93
- ['>=1.0.0', '1.0.1'],
94
- ['>=1.0.0', '1.1.0'],
95
- ['>1.0.0', '1.0.1'],
96
- ['>1.0.0', '1.1.0'],
97
- ['<=2.0.0', '2.0.0'],
98
- ['<=2.0.0', '1.9999.9999'],
99
- ['<=2.0.0', '0.2.9'],
100
- ['<2.0.0', '1.9999.9999'],
101
- ['<2.0.0', '0.2.9'],
102
- ['>= 1.0.0', '1.0.0'],
103
- ['>= 1.0.0', '1.0.1'],
104
- ['>= 1.0.0', '1.1.0'],
105
- ['> 1.0.0', '1.0.1'],
106
- ['> 1.0.0', '1.1.0'],
107
- ['<= 2.0.0', '2.0.0'],
108
- ['<= 2.0.0', '1.9999.9999'],
109
- ['<= 2.0.0', '0.2.9'],
110
- ['< 2.0.0', '1.9999.9999'],
111
- ['<\t2.0.0', '0.2.9'],
112
- ['>=0.1.97', 'v0.1.97'],
113
- ['>=0.1.97', '0.1.97'],
114
- ['0.1.20 || 1.2.4', '1.2.4'],
115
- ['0.1.20 || >1.2.4', '1.2.4'],
116
- ['0.1.20 || 1.2.4', '1.2.3'],
117
- ['0.1.20 || 1.2.4', '0.1.20'],
118
- ['>=0.2.3 || <0.0.1', '0.0.0'],
119
- ['>=0.2.3 || <0.0.1', '0.2.3'],
120
- ['>=0.2.3 || <0.0.1', '0.2.4'],
121
- ['||', '1.3.4'],
122
- ['2.x.x', '2.1.3'],
123
- ['1.2.x', '1.2.3'],
124
- ['1.2.x || 2.x', '2.1.3'],
125
- ['1.2.x || 2.x', '1.2.3'],
126
- ['x', '1.2.3'],
127
- ['2.*.*', '2.1.3'],
128
- ['1.2.*', '1.2.3'],
129
- ['1.2.* || 2.*', '2.1.3'],
130
- ['1.2.* || 2.*', '1.2.3'],
131
- ['1.2.* || 2.*', '1.2.3'],
132
- ['*', '1.2.3'],
133
- ['2', '2.1.2'],
134
- ['2.3', '2.3.1'],
135
- ['~2.4', '2.4.0'], // >=2.4.0 <2.5.0
136
- ['~2.4', '2.4.5'],
137
- ['~>3.2.1', '3.2.2'], // >=3.2.1 <3.3.0
138
- ['~1', '1.2.3'], // >=1.0.0 <2.0.0
139
- ['~>1', '1.2.3'],
140
- ['~> 1', '1.2.3'],
141
- ['~1.0', '1.0.2'], // >=1.0.0 <1.1.0
142
- ['~ 1.0', '1.0.2'],
143
- ['>=1', '1.0.0'],
144
- ['>= 1', '1.0.0'],
145
- ['<1.2', '1.1.1'],
146
- ['< 1.2', '1.1.1'],
147
- ['1', '1.0.0beta', true],
148
- ['~v0.5.4-pre', '0.5.5'],
149
- ['~v0.5.4-pre', '0.5.4'],
150
- ['=0.7.x', '0.7.2'],
151
- ['>=0.7.x', '0.7.2'],
152
- ['=0.7.x', '0.7.0-asdf'],
153
- ['>=0.7.x', '0.7.0-asdf'],
154
- ['<=0.7.x', '0.6.2'],
155
- ['>0.2.3 >0.2.4 <=0.2.5', '0.2.5'],
156
- ['>=0.2.3 <=0.2.4', '0.2.4'],
157
- ['1.0.0 - 2.0.0', '2.0.0'],
158
- ['^1', '0.0.0-0'],
159
- ['^3.0.0', '2.0.0'],
160
- ['^1.0.0 || ~2.0.1', '2.0.0'],
161
- ['^0.1.0 || ~3.0.1 || 5.0.0', '3.2.0'],
162
- ['^0.1.0 || ~3.0.1 || 5.0.0', '1.0.0beta', true],
163
- ['^0.1.0 || ~3.0.1 || 5.0.0', '5.0.0-0', true],
164
- ['^0.1.0 || ~3.0.1 || >4 <=5.0.0', '3.5.0']
165
- ].forEach(function(tuple) {
166
- var range = tuple[0];
167
- var version = tuple[1];
168
- var loose = tuple[2] || false;
169
- var msg = '!gtr(' + version + ', ' + range + ', ' + loose + ')';
170
- t.notOk(gtr(version, range, loose), msg);
171
- });
172
- t.end();
173
- });