semver 5.4.1 → 5.5.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 +22 -0
- package/bin/semver +12 -2
- package/package.json +1 -1
- package/range.bnf +2 -2
- package/semver.js +28 -0
package/README.md
CHANGED
|
@@ -20,6 +20,8 @@ semver.clean(' =v1.2.3 ') // '1.2.3'
|
|
|
20
20
|
semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true
|
|
21
21
|
semver.gt('1.2.3', '9.8.7') // false
|
|
22
22
|
semver.lt('1.2.3', '9.8.7') // true
|
|
23
|
+
semver.valid(semver.coerce('v2')) // '2.0.0'
|
|
24
|
+
semver.valid(semver.coerce('42.6.7.9.3-alpha')) // '42.6.7'
|
|
23
25
|
```
|
|
24
26
|
|
|
25
27
|
As a command-line utility:
|
|
@@ -52,6 +54,10 @@ Options:
|
|
|
52
54
|
-l --loose
|
|
53
55
|
Interpret versions and ranges loosely
|
|
54
56
|
|
|
57
|
+
-c --coerce
|
|
58
|
+
Coerce a string into SemVer if possible
|
|
59
|
+
(does not imply --loose)
|
|
60
|
+
|
|
55
61
|
Program exits successfully if any valid version satisfies
|
|
56
62
|
all supplied ranges, and prints all satisfying versions.
|
|
57
63
|
|
|
@@ -364,3 +370,19 @@ satisfy the range.
|
|
|
364
370
|
|
|
365
371
|
If you want to know if a version satisfies or does not satisfy a
|
|
366
372
|
range, use the `satisfies(version, range)` function.
|
|
373
|
+
|
|
374
|
+
### Coercion
|
|
375
|
+
|
|
376
|
+
* `coerce(version)`: Coerces a string to semver if possible
|
|
377
|
+
|
|
378
|
+
This aims to provide a very forgiving translation of a non-semver
|
|
379
|
+
string to semver. It looks for the first digit in a string, and
|
|
380
|
+
consumes all remaining characters which satisfy at least a partial semver
|
|
381
|
+
(e.g., `1`, `1.2`, `1.2.3`) up to the max permitted length (256 characters).
|
|
382
|
+
Longer versions are simply truncated (`4.6.3.9.2-alpha2` becomes `4.6.3`).
|
|
383
|
+
All surrounding text is simply ignored (`v3.4 replaces v3.3.1` becomes `3.4.0`).
|
|
384
|
+
Only text which lacks digits will fail coercion (`version one` is not valid).
|
|
385
|
+
The maximum length for any semver component considered for coercion is 16 characters;
|
|
386
|
+
longer components will be ignored (`10000000000000000.4.7.4` becomes `4.7.4`).
|
|
387
|
+
The maximum value for any semver component is `Integer.MAX_SAFE_INTEGER || (2**53 - 1)`;
|
|
388
|
+
higher value components are invalid (`9999999999999999.4.7.4` is likely invalid).
|
package/bin/semver
CHANGED
|
@@ -12,6 +12,7 @@ var argv = process.argv.slice(2)
|
|
|
12
12
|
, inc = null
|
|
13
13
|
, version = require("../package.json").version
|
|
14
14
|
, loose = false
|
|
15
|
+
, coerce = false
|
|
15
16
|
, identifier = undefined
|
|
16
17
|
, semver = require("../semver")
|
|
17
18
|
, reverse = false
|
|
@@ -54,6 +55,9 @@ function main () {
|
|
|
54
55
|
case "-r": case "--range":
|
|
55
56
|
range.push(argv.shift())
|
|
56
57
|
break
|
|
58
|
+
case "-c": case "--coerce":
|
|
59
|
+
coerce = true
|
|
60
|
+
break
|
|
57
61
|
case "-h": case "--help": case "-?":
|
|
58
62
|
return help()
|
|
59
63
|
default:
|
|
@@ -62,8 +66,10 @@ function main () {
|
|
|
62
66
|
}
|
|
63
67
|
}
|
|
64
68
|
|
|
65
|
-
versions = versions.
|
|
66
|
-
return semver.
|
|
69
|
+
versions = versions.map(function (v) {
|
|
70
|
+
return coerce ? (semver.coerce(v) || {version: v}).version : v
|
|
71
|
+
}).filter(function (v) {
|
|
72
|
+
return semver.valid(v)
|
|
67
73
|
})
|
|
68
74
|
if (!versions.length) return fail()
|
|
69
75
|
if (inc && (versions.length !== 1 || range.length))
|
|
@@ -122,6 +128,10 @@ function help () {
|
|
|
122
128
|
,"-l --loose"
|
|
123
129
|
," Interpret versions and ranges loosely"
|
|
124
130
|
,""
|
|
131
|
+
,"-c --coerce"
|
|
132
|
+
," Coerce a string into SemVer if possible"
|
|
133
|
+
," (does not imply --loose)"
|
|
134
|
+
,""
|
|
125
135
|
,"Program exits successfully if any valid version satisfies"
|
|
126
136
|
,"all supplied ranges, and prints all satisfying versions."
|
|
127
137
|
,""
|
package/package.json
CHANGED
package/range.bnf
CHANGED
|
@@ -3,10 +3,10 @@ logical-or ::= ( ' ' ) * '||' ( ' ' ) *
|
|
|
3
3
|
range ::= hyphen | simple ( ' ' simple ) * | ''
|
|
4
4
|
hyphen ::= partial ' - ' partial
|
|
5
5
|
simple ::= primitive | partial | tilde | caret
|
|
6
|
-
primitive ::= ( '<' | '>' | '>=' | '<=' | '='
|
|
6
|
+
primitive ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial
|
|
7
7
|
partial ::= xr ( '.' xr ( '.' xr qualifier ? )? )?
|
|
8
8
|
xr ::= 'x' | 'X' | '*' | nr
|
|
9
|
-
nr ::= '0' | [
|
|
9
|
+
nr ::= '0' | [1-9] ( [0-9] ) *
|
|
10
10
|
tilde ::= '~' partial
|
|
11
11
|
caret ::= '^' partial
|
|
12
12
|
qualifier ::= ( '-' pre )? ( '+' build )?
|
package/semver.js
CHANGED
|
@@ -21,6 +21,9 @@ exports.SEMVER_SPEC_VERSION = '2.0.0';
|
|
|
21
21
|
var MAX_LENGTH = 256;
|
|
22
22
|
var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;
|
|
23
23
|
|
|
24
|
+
// Max safe segment length for coercion.
|
|
25
|
+
var MAX_SAFE_COMPONENT_LENGTH = 16;
|
|
26
|
+
|
|
24
27
|
// The actual regexps go on exports.re
|
|
25
28
|
var re = exports.re = [];
|
|
26
29
|
var src = exports.src = [];
|
|
@@ -156,6 +159,15 @@ src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$';
|
|
|
156
159
|
var XRANGELOOSE = R++;
|
|
157
160
|
src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$';
|
|
158
161
|
|
|
162
|
+
// Coercion.
|
|
163
|
+
// Extract anything that could conceivably be a part of a valid semver
|
|
164
|
+
var COERCE = R++;
|
|
165
|
+
src[COERCE] = '(?:^|[^\\d])' +
|
|
166
|
+
'(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' +
|
|
167
|
+
'(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
|
|
168
|
+
'(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
|
|
169
|
+
'(?:$|[^\\d])';
|
|
170
|
+
|
|
159
171
|
// Tilde ranges.
|
|
160
172
|
// Meaning is "reasonably at or greater than"
|
|
161
173
|
var LONETILDE = R++;
|
|
@@ -1294,3 +1306,19 @@ function intersects(r1, r2, loose) {
|
|
|
1294
1306
|
r2 = new Range(r2, loose)
|
|
1295
1307
|
return r1.intersects(r2)
|
|
1296
1308
|
}
|
|
1309
|
+
|
|
1310
|
+
exports.coerce = coerce;
|
|
1311
|
+
function coerce(version) {
|
|
1312
|
+
if (version instanceof SemVer)
|
|
1313
|
+
return version;
|
|
1314
|
+
|
|
1315
|
+
if (typeof version !== 'string')
|
|
1316
|
+
return null;
|
|
1317
|
+
|
|
1318
|
+
var match = version.match(re[COERCE]);
|
|
1319
|
+
|
|
1320
|
+
if (match == null)
|
|
1321
|
+
return null;
|
|
1322
|
+
|
|
1323
|
+
return parse((match[1] || '0') + '.' + (match[2] || '0') + '.' + (match[3] || '0'));
|
|
1324
|
+
}
|