semver 7.4.0 → 7.5.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/README.md +11 -0
- package/bin/semver.js +8 -0
- package/classes/semver.js +20 -8
- package/functions/diff.js +48 -33
- package/functions/parse.js +5 -12
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -239,6 +239,7 @@ $ semver 1.2.4-beta.0 -i prerelease
|
|
|
239
239
|
|
|
240
240
|
The method `.inc` takes an optional parameter 'identifierBase' string
|
|
241
241
|
that will let you let your prerelease number as zero-based or one-based.
|
|
242
|
+
Set to `false` to omit the prerelease number altogether.
|
|
242
243
|
If you do not specify this parameter, it will default to zero-based.
|
|
243
244
|
|
|
244
245
|
```javascript
|
|
@@ -246,6 +247,11 @@ semver.inc('1.2.3', 'prerelease', 'beta', '1')
|
|
|
246
247
|
// '1.2.4-beta.1'
|
|
247
248
|
```
|
|
248
249
|
|
|
250
|
+
```javascript
|
|
251
|
+
semver.inc('1.2.3', 'prerelease', 'beta', false)
|
|
252
|
+
// '1.2.4-beta'
|
|
253
|
+
```
|
|
254
|
+
|
|
249
255
|
command-line example:
|
|
250
256
|
|
|
251
257
|
```bash
|
|
@@ -253,6 +259,11 @@ $ semver 1.2.3 -i prerelease --preid beta -n 1
|
|
|
253
259
|
1.2.4-beta.1
|
|
254
260
|
```
|
|
255
261
|
|
|
262
|
+
```bash
|
|
263
|
+
$ semver 1.2.3 -i prerelease --preid beta -n false
|
|
264
|
+
1.2.4-beta
|
|
265
|
+
```
|
|
266
|
+
|
|
256
267
|
### Advanced Range Syntax
|
|
257
268
|
|
|
258
269
|
Advanced range syntax desugars to primitive comparators in
|
package/bin/semver.js
CHANGED
|
@@ -76,6 +76,9 @@ const main = () => {
|
|
|
76
76
|
break
|
|
77
77
|
case '-n':
|
|
78
78
|
identifierBase = argv.shift()
|
|
79
|
+
if (identifierBase === 'false') {
|
|
80
|
+
identifierBase = false
|
|
81
|
+
}
|
|
79
82
|
break
|
|
80
83
|
case '-c': case '--coerce':
|
|
81
84
|
coerce = true
|
|
@@ -178,6 +181,11 @@ Options:
|
|
|
178
181
|
--ltr
|
|
179
182
|
Coerce version strings left to right (default)
|
|
180
183
|
|
|
184
|
+
-n <base>
|
|
185
|
+
Base number to be used for the prerelease identifier.
|
|
186
|
+
Can be either 0 or 1, or false to omit the number altogether.
|
|
187
|
+
Defaults to 0.
|
|
188
|
+
|
|
181
189
|
Program exits successfully if any valid version satisfies
|
|
182
190
|
all supplied ranges, and prints all satisfying versions.
|
|
183
191
|
|
package/classes/semver.js
CHANGED
|
@@ -16,7 +16,7 @@ class SemVer {
|
|
|
16
16
|
version = version.version
|
|
17
17
|
}
|
|
18
18
|
} else if (typeof version !== 'string') {
|
|
19
|
-
throw new TypeError(`Invalid
|
|
19
|
+
throw new TypeError(`Invalid version. Must be a string. Got type "${typeof version}".`)
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
if (version.length > MAX_LENGTH) {
|
|
@@ -246,9 +246,15 @@ class SemVer {
|
|
|
246
246
|
break
|
|
247
247
|
// This probably shouldn't be used publicly.
|
|
248
248
|
// 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.
|
|
249
|
-
case 'pre':
|
|
249
|
+
case 'pre': {
|
|
250
|
+
const base = Number(identifierBase) ? 1 : 0
|
|
251
|
+
|
|
252
|
+
if (!identifier && identifierBase === false) {
|
|
253
|
+
throw new Error('invalid increment argument: identifier is empty')
|
|
254
|
+
}
|
|
255
|
+
|
|
250
256
|
if (this.prerelease.length === 0) {
|
|
251
|
-
this.prerelease = [
|
|
257
|
+
this.prerelease = [base]
|
|
252
258
|
} else {
|
|
253
259
|
let i = this.prerelease.length
|
|
254
260
|
while (--i >= 0) {
|
|
@@ -259,23 +265,29 @@ class SemVer {
|
|
|
259
265
|
}
|
|
260
266
|
if (i === -1) {
|
|
261
267
|
// didn't increment anything
|
|
262
|
-
this.prerelease.
|
|
268
|
+
if (identifier === this.prerelease.join('.') && identifierBase === false) {
|
|
269
|
+
throw new Error('invalid increment argument: identifier already exists')
|
|
270
|
+
}
|
|
271
|
+
this.prerelease.push(base)
|
|
263
272
|
}
|
|
264
273
|
}
|
|
265
274
|
if (identifier) {
|
|
266
|
-
const base = Number(identifierBase) ? 1 : 0
|
|
267
275
|
// 1.2.0-beta.1 bumps to 1.2.0-beta.2,
|
|
268
276
|
// 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
|
|
277
|
+
let prerelease = [identifier, base]
|
|
278
|
+
if (identifierBase === false) {
|
|
279
|
+
prerelease = [identifier]
|
|
280
|
+
}
|
|
269
281
|
if (compareIdentifiers(this.prerelease[0], identifier) === 0) {
|
|
270
282
|
if (isNaN(this.prerelease[1])) {
|
|
271
|
-
this.prerelease =
|
|
283
|
+
this.prerelease = prerelease
|
|
272
284
|
}
|
|
273
285
|
} else {
|
|
274
|
-
this.prerelease =
|
|
286
|
+
this.prerelease = prerelease
|
|
275
287
|
}
|
|
276
288
|
}
|
|
277
289
|
break
|
|
278
|
-
|
|
290
|
+
}
|
|
279
291
|
default:
|
|
280
292
|
throw new Error(`invalid increment argument: ${release}`)
|
|
281
293
|
}
|
package/functions/diff.js
CHANGED
|
@@ -1,39 +1,54 @@
|
|
|
1
|
-
const parse = require('./parse')
|
|
2
|
-
const eq = require('./eq')
|
|
1
|
+
const parse = require('./parse.js')
|
|
3
2
|
|
|
4
3
|
const diff = (version1, version2) => {
|
|
5
|
-
const v1 = parse(version1)
|
|
6
|
-
const v2 = parse(version2)
|
|
7
|
-
|
|
4
|
+
const v1 = parse(version1, null, true)
|
|
5
|
+
const v2 = parse(version2, null, true)
|
|
6
|
+
const comparison = v1.compare(v2)
|
|
7
|
+
|
|
8
|
+
if (comparison === 0) {
|
|
8
9
|
return null
|
|
9
|
-
} else {
|
|
10
|
-
const hasPre = v1.prerelease.length || v2.prerelease.length
|
|
11
|
-
const prefix = hasPre ? 'pre' : ''
|
|
12
|
-
const defaultResult = hasPre ? 'prerelease' : ''
|
|
13
|
-
|
|
14
|
-
if (v1.major !== v2.major) {
|
|
15
|
-
return prefix + 'major'
|
|
16
|
-
}
|
|
17
|
-
if (v1.minor !== v2.minor) {
|
|
18
|
-
return prefix + 'minor'
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
if (v1.patch !== v2.patch) {
|
|
22
|
-
return prefix + 'patch'
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
if (!v1.prerelease.length || !v2.prerelease.length) {
|
|
26
|
-
if (v1.patch) {
|
|
27
|
-
return 'patch'
|
|
28
|
-
}
|
|
29
|
-
if (v1.minor) {
|
|
30
|
-
return 'minor'
|
|
31
|
-
}
|
|
32
|
-
if (v1.major) {
|
|
33
|
-
return 'major'
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
return defaultResult // may be undefined
|
|
37
10
|
}
|
|
11
|
+
|
|
12
|
+
const v1Higher = comparison > 0
|
|
13
|
+
const highVersion = v1Higher ? v1 : v2
|
|
14
|
+
const lowVersion = v1Higher ? v2 : v1
|
|
15
|
+
const highHasPre = !!highVersion.prerelease.length
|
|
16
|
+
|
|
17
|
+
// add the `pre` prefix if we are going to a prerelease version
|
|
18
|
+
const prefix = highHasPre ? 'pre' : ''
|
|
19
|
+
|
|
20
|
+
if (v1.major !== v2.major) {
|
|
21
|
+
return prefix + 'major'
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (v1.minor !== v2.minor) {
|
|
25
|
+
return prefix + 'minor'
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (v1.patch !== v2.patch) {
|
|
29
|
+
return prefix + 'patch'
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// at this point we know stable versions match but overall versions are not equal,
|
|
33
|
+
// so either they are both prereleases, or the lower version is a prerelease
|
|
34
|
+
|
|
35
|
+
if (highHasPre) {
|
|
36
|
+
// high and low are preleases
|
|
37
|
+
return 'prerelease'
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (lowVersion.patch) {
|
|
41
|
+
// anything higher than a patch bump would result in the wrong version
|
|
42
|
+
return 'patch'
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (lowVersion.minor) {
|
|
46
|
+
// anything higher than a minor bump would result in the wrong version
|
|
47
|
+
return 'minor'
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// bumping major/minor/patch all have same result
|
|
51
|
+
return 'major'
|
|
38
52
|
}
|
|
53
|
+
|
|
39
54
|
module.exports = diff
|
package/functions/parse.js
CHANGED
|
@@ -1,22 +1,15 @@
|
|
|
1
|
-
const { MAX_LENGTH } = require('../internal/constants')
|
|
2
1
|
const SemVer = require('../classes/semver')
|
|
3
|
-
const parse = (version, options) => {
|
|
2
|
+
const parse = (version, options, throwErrors = false) => {
|
|
4
3
|
if (version instanceof SemVer) {
|
|
5
4
|
return version
|
|
6
5
|
}
|
|
7
|
-
|
|
8
|
-
if (typeof version !== 'string') {
|
|
9
|
-
return null
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
if (version.length > MAX_LENGTH) {
|
|
13
|
-
return null
|
|
14
|
-
}
|
|
15
|
-
|
|
16
6
|
try {
|
|
17
7
|
return new SemVer(version, options)
|
|
18
8
|
} catch (er) {
|
|
19
|
-
|
|
9
|
+
if (!throwErrors) {
|
|
10
|
+
return null
|
|
11
|
+
}
|
|
12
|
+
throw er
|
|
20
13
|
}
|
|
21
14
|
}
|
|
22
15
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "semver",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.5.1",
|
|
4
4
|
"description": "The semantic version parser used by npm.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
},
|
|
15
15
|
"devDependencies": {
|
|
16
16
|
"@npmcli/eslint-config": "^4.0.0",
|
|
17
|
-
"@npmcli/template-oss": "4.
|
|
17
|
+
"@npmcli/template-oss": "4.14.1",
|
|
18
18
|
"tap": "^16.0.0"
|
|
19
19
|
},
|
|
20
20
|
"license": "ISC",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"author": "GitHub Inc.",
|
|
54
54
|
"templateOSS": {
|
|
55
55
|
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
|
|
56
|
-
"version": "4.
|
|
56
|
+
"version": "4.14.1",
|
|
57
57
|
"engines": ">=10",
|
|
58
58
|
"ciVersions": [
|
|
59
59
|
"10.0.0",
|