semver 5.4.1 → 5.7.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/CHANGELOG.md +39 -0
- package/README.md +53 -8
- package/bin/semver +97 -70
- package/package.json +10 -4
- package/range.bnf +2 -2
- package/semver.js +938 -751
package/semver.js
CHANGED
|
@@ -1,30 +1,35 @@
|
|
|
1
|
-
exports = module.exports = SemVer
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
/*
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
1
|
+
exports = module.exports = SemVer
|
|
2
|
+
|
|
3
|
+
var debug
|
|
4
|
+
/* istanbul ignore next */
|
|
5
|
+
if (typeof process === 'object' &&
|
|
6
|
+
process.env &&
|
|
7
|
+
process.env.NODE_DEBUG &&
|
|
8
|
+
/\bsemver\b/i.test(process.env.NODE_DEBUG)) {
|
|
9
|
+
debug = function () {
|
|
10
|
+
var args = Array.prototype.slice.call(arguments, 0)
|
|
11
|
+
args.unshift('SEMVER')
|
|
12
|
+
console.log.apply(console, args)
|
|
13
|
+
}
|
|
14
|
+
} else {
|
|
15
|
+
debug = function () {}
|
|
16
|
+
}
|
|
16
17
|
|
|
17
18
|
// Note: this is the semver.org version of the spec that it implements
|
|
18
19
|
// Not necessarily the package version of this code.
|
|
19
|
-
exports.SEMVER_SPEC_VERSION = '2.0.0'
|
|
20
|
+
exports.SEMVER_SPEC_VERSION = '2.0.0'
|
|
21
|
+
|
|
22
|
+
var MAX_LENGTH = 256
|
|
23
|
+
var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||
|
|
24
|
+
/* istanbul ignore next */ 9007199254740991
|
|
20
25
|
|
|
21
|
-
|
|
22
|
-
var
|
|
26
|
+
// Max safe segment length for coercion.
|
|
27
|
+
var MAX_SAFE_COMPONENT_LENGTH = 16
|
|
23
28
|
|
|
24
29
|
// The actual regexps go on exports.re
|
|
25
|
-
var re = exports.re = []
|
|
26
|
-
var src = exports.src = []
|
|
27
|
-
var R = 0
|
|
30
|
+
var re = exports.re = []
|
|
31
|
+
var src = exports.src = []
|
|
32
|
+
var R = 0
|
|
28
33
|
|
|
29
34
|
// The following Regular Expressions can be used for tokenizing,
|
|
30
35
|
// validating, and parsing SemVer version strings.
|
|
@@ -32,71 +37,67 @@ var R = 0;
|
|
|
32
37
|
// ## Numeric Identifier
|
|
33
38
|
// A single `0`, or a non-zero digit followed by zero or more digits.
|
|
34
39
|
|
|
35
|
-
var NUMERICIDENTIFIER = R
|
|
36
|
-
src[NUMERICIDENTIFIER] = '0|[1-9]\\d*'
|
|
37
|
-
var NUMERICIDENTIFIERLOOSE = R
|
|
38
|
-
src[NUMERICIDENTIFIERLOOSE] = '[0-9]+'
|
|
39
|
-
|
|
40
|
+
var NUMERICIDENTIFIER = R++
|
|
41
|
+
src[NUMERICIDENTIFIER] = '0|[1-9]\\d*'
|
|
42
|
+
var NUMERICIDENTIFIERLOOSE = R++
|
|
43
|
+
src[NUMERICIDENTIFIERLOOSE] = '[0-9]+'
|
|
40
44
|
|
|
41
45
|
// ## Non-numeric Identifier
|
|
42
46
|
// Zero or more digits, followed by a letter or hyphen, and then zero or
|
|
43
47
|
// more letters, digits, or hyphens.
|
|
44
48
|
|
|
45
|
-
var NONNUMERICIDENTIFIER = R
|
|
46
|
-
src[NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*'
|
|
47
|
-
|
|
49
|
+
var NONNUMERICIDENTIFIER = R++
|
|
50
|
+
src[NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*'
|
|
48
51
|
|
|
49
52
|
// ## Main Version
|
|
50
53
|
// Three dot-separated numeric identifiers.
|
|
51
54
|
|
|
52
|
-
var MAINVERSION = R
|
|
55
|
+
var MAINVERSION = R++
|
|
53
56
|
src[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\.' +
|
|
54
57
|
'(' + src[NUMERICIDENTIFIER] + ')\\.' +
|
|
55
|
-
'(' + src[NUMERICIDENTIFIER] + ')'
|
|
58
|
+
'(' + src[NUMERICIDENTIFIER] + ')'
|
|
56
59
|
|
|
57
|
-
var MAINVERSIONLOOSE = R
|
|
60
|
+
var MAINVERSIONLOOSE = R++
|
|
58
61
|
src[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' +
|
|
59
62
|
'(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' +
|
|
60
|
-
'(' + src[NUMERICIDENTIFIERLOOSE] + ')'
|
|
63
|
+
'(' + src[NUMERICIDENTIFIERLOOSE] + ')'
|
|
61
64
|
|
|
62
65
|
// ## Pre-release Version Identifier
|
|
63
66
|
// A numeric identifier, or a non-numeric identifier.
|
|
64
67
|
|
|
65
|
-
var PRERELEASEIDENTIFIER = R
|
|
68
|
+
var PRERELEASEIDENTIFIER = R++
|
|
66
69
|
src[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] +
|
|
67
|
-
'|' + src[NONNUMERICIDENTIFIER] + ')'
|
|
70
|
+
'|' + src[NONNUMERICIDENTIFIER] + ')'
|
|
68
71
|
|
|
69
|
-
var PRERELEASEIDENTIFIERLOOSE = R
|
|
72
|
+
var PRERELEASEIDENTIFIERLOOSE = R++
|
|
70
73
|
src[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] +
|
|
71
|
-
'|' + src[NONNUMERICIDENTIFIER] + ')'
|
|
72
|
-
|
|
74
|
+
'|' + src[NONNUMERICIDENTIFIER] + ')'
|
|
73
75
|
|
|
74
76
|
// ## Pre-release Version
|
|
75
77
|
// Hyphen, followed by one or more dot-separated pre-release version
|
|
76
78
|
// identifiers.
|
|
77
79
|
|
|
78
|
-
var PRERELEASE = R
|
|
80
|
+
var PRERELEASE = R++
|
|
79
81
|
src[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] +
|
|
80
|
-
'(?:\\.' + src[PRERELEASEIDENTIFIER] + ')*))'
|
|
82
|
+
'(?:\\.' + src[PRERELEASEIDENTIFIER] + ')*))'
|
|
81
83
|
|
|
82
|
-
var PRERELEASELOOSE = R
|
|
84
|
+
var PRERELEASELOOSE = R++
|
|
83
85
|
src[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] +
|
|
84
|
-
'(?:\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))'
|
|
86
|
+
'(?:\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))'
|
|
85
87
|
|
|
86
88
|
// ## Build Metadata Identifier
|
|
87
89
|
// Any combination of digits, letters, or hyphens.
|
|
88
90
|
|
|
89
|
-
var BUILDIDENTIFIER = R
|
|
90
|
-
src[BUILDIDENTIFIER] = '[0-9A-Za-z-]+'
|
|
91
|
+
var BUILDIDENTIFIER = R++
|
|
92
|
+
src[BUILDIDENTIFIER] = '[0-9A-Za-z-]+'
|
|
91
93
|
|
|
92
94
|
// ## Build Metadata
|
|
93
95
|
// Plus sign, followed by one or more period-separated build metadata
|
|
94
96
|
// identifiers.
|
|
95
97
|
|
|
96
|
-
var BUILD = R
|
|
98
|
+
var BUILD = R++
|
|
97
99
|
src[BUILD] = '(?:\\+(' + src[BUILDIDENTIFIER] +
|
|
98
|
-
'(?:\\.' + src[BUILDIDENTIFIER] + ')*))'
|
|
99
|
-
|
|
100
|
+
'(?:\\.' + src[BUILDIDENTIFIER] + ')*))'
|
|
100
101
|
|
|
101
102
|
// ## Full Version String
|
|
102
103
|
// A main version, followed optionally by a pre-release version and
|
|
@@ -107,774 +108,870 @@ src[BUILD] = '(?:\\+(' + src[BUILDIDENTIFIER] +
|
|
|
107
108
|
// capturing group, because it should not ever be used in version
|
|
108
109
|
// comparison.
|
|
109
110
|
|
|
110
|
-
var FULL = R
|
|
111
|
+
var FULL = R++
|
|
111
112
|
var FULLPLAIN = 'v?' + src[MAINVERSION] +
|
|
112
113
|
src[PRERELEASE] + '?' +
|
|
113
|
-
src[BUILD] + '?'
|
|
114
|
+
src[BUILD] + '?'
|
|
114
115
|
|
|
115
|
-
src[FULL] = '^' + FULLPLAIN + '$'
|
|
116
|
+
src[FULL] = '^' + FULLPLAIN + '$'
|
|
116
117
|
|
|
117
118
|
// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.
|
|
118
119
|
// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty
|
|
119
120
|
// common in the npm registry.
|
|
120
121
|
var LOOSEPLAIN = '[v=\\s]*' + src[MAINVERSIONLOOSE] +
|
|
121
122
|
src[PRERELEASELOOSE] + '?' +
|
|
122
|
-
src[BUILD] + '?'
|
|
123
|
+
src[BUILD] + '?'
|
|
123
124
|
|
|
124
|
-
var LOOSE = R
|
|
125
|
-
src[LOOSE] = '^' + LOOSEPLAIN + '$'
|
|
125
|
+
var LOOSE = R++
|
|
126
|
+
src[LOOSE] = '^' + LOOSEPLAIN + '$'
|
|
126
127
|
|
|
127
|
-
var GTLT = R
|
|
128
|
-
src[GTLT] = '((?:<|>)?=?)'
|
|
128
|
+
var GTLT = R++
|
|
129
|
+
src[GTLT] = '((?:<|>)?=?)'
|
|
129
130
|
|
|
130
131
|
// Something like "2.*" or "1.2.x".
|
|
131
132
|
// Note that "x.x" is a valid xRange identifer, meaning "any version"
|
|
132
133
|
// Only the first item is strictly required.
|
|
133
|
-
var XRANGEIDENTIFIERLOOSE = R
|
|
134
|
-
src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\*'
|
|
135
|
-
var XRANGEIDENTIFIER = R
|
|
136
|
-
src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\*'
|
|
134
|
+
var XRANGEIDENTIFIERLOOSE = R++
|
|
135
|
+
src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\*'
|
|
136
|
+
var XRANGEIDENTIFIER = R++
|
|
137
|
+
src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\*'
|
|
137
138
|
|
|
138
|
-
var XRANGEPLAIN = R
|
|
139
|
+
var XRANGEPLAIN = R++
|
|
139
140
|
src[XRANGEPLAIN] = '[v=\\s]*(' + src[XRANGEIDENTIFIER] + ')' +
|
|
140
141
|
'(?:\\.(' + src[XRANGEIDENTIFIER] + ')' +
|
|
141
142
|
'(?:\\.(' + src[XRANGEIDENTIFIER] + ')' +
|
|
142
143
|
'(?:' + src[PRERELEASE] + ')?' +
|
|
143
144
|
src[BUILD] + '?' +
|
|
144
|
-
')?)?'
|
|
145
|
+
')?)?'
|
|
145
146
|
|
|
146
|
-
var XRANGEPLAINLOOSE = R
|
|
147
|
+
var XRANGEPLAINLOOSE = R++
|
|
147
148
|
src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
|
|
148
149
|
'(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
|
|
149
150
|
'(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
|
|
150
151
|
'(?:' + src[PRERELEASELOOSE] + ')?' +
|
|
151
152
|
src[BUILD] + '?' +
|
|
152
|
-
')?)?'
|
|
153
|
-
|
|
154
|
-
var XRANGE = R
|
|
155
|
-
src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$'
|
|
156
|
-
var XRANGELOOSE = R
|
|
157
|
-
src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$'
|
|
153
|
+
')?)?'
|
|
154
|
+
|
|
155
|
+
var XRANGE = R++
|
|
156
|
+
src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$'
|
|
157
|
+
var XRANGELOOSE = R++
|
|
158
|
+
src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$'
|
|
159
|
+
|
|
160
|
+
// Coercion.
|
|
161
|
+
// Extract anything that could conceivably be a part of a valid semver
|
|
162
|
+
var COERCE = R++
|
|
163
|
+
src[COERCE] = '(?:^|[^\\d])' +
|
|
164
|
+
'(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' +
|
|
165
|
+
'(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
|
|
166
|
+
'(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
|
|
167
|
+
'(?:$|[^\\d])'
|
|
158
168
|
|
|
159
169
|
// Tilde ranges.
|
|
160
170
|
// Meaning is "reasonably at or greater than"
|
|
161
|
-
var LONETILDE = R
|
|
162
|
-
src[LONETILDE] = '(?:~>?)'
|
|
171
|
+
var LONETILDE = R++
|
|
172
|
+
src[LONETILDE] = '(?:~>?)'
|
|
163
173
|
|
|
164
|
-
var TILDETRIM = R
|
|
165
|
-
src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+'
|
|
166
|
-
re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g')
|
|
167
|
-
var tildeTrimReplace = '$1~'
|
|
174
|
+
var TILDETRIM = R++
|
|
175
|
+
src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+'
|
|
176
|
+
re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g')
|
|
177
|
+
var tildeTrimReplace = '$1~'
|
|
168
178
|
|
|
169
|
-
var TILDE = R
|
|
170
|
-
src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$'
|
|
171
|
-
var TILDELOOSE = R
|
|
172
|
-
src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$'
|
|
179
|
+
var TILDE = R++
|
|
180
|
+
src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$'
|
|
181
|
+
var TILDELOOSE = R++
|
|
182
|
+
src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$'
|
|
173
183
|
|
|
174
184
|
// Caret ranges.
|
|
175
185
|
// Meaning is "at least and backwards compatible with"
|
|
176
|
-
var LONECARET = R
|
|
177
|
-
src[LONECARET] = '(?:\\^)'
|
|
186
|
+
var LONECARET = R++
|
|
187
|
+
src[LONECARET] = '(?:\\^)'
|
|
178
188
|
|
|
179
|
-
var CARETTRIM = R
|
|
180
|
-
src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+'
|
|
181
|
-
re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g')
|
|
182
|
-
var caretTrimReplace = '$1^'
|
|
189
|
+
var CARETTRIM = R++
|
|
190
|
+
src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+'
|
|
191
|
+
re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g')
|
|
192
|
+
var caretTrimReplace = '$1^'
|
|
183
193
|
|
|
184
|
-
var CARET = R
|
|
185
|
-
src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$'
|
|
186
|
-
var CARETLOOSE = R
|
|
187
|
-
src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$'
|
|
194
|
+
var CARET = R++
|
|
195
|
+
src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$'
|
|
196
|
+
var CARETLOOSE = R++
|
|
197
|
+
src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$'
|
|
188
198
|
|
|
189
199
|
// A simple gt/lt/eq thing, or just "" to indicate "any version"
|
|
190
|
-
var COMPARATORLOOSE = R
|
|
191
|
-
src[COMPARATORLOOSE] = '^' + src[GTLT] + '\\s*(' + LOOSEPLAIN + ')$|^$'
|
|
192
|
-
var COMPARATOR = R
|
|
193
|
-
src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$'
|
|
194
|
-
|
|
200
|
+
var COMPARATORLOOSE = R++
|
|
201
|
+
src[COMPARATORLOOSE] = '^' + src[GTLT] + '\\s*(' + LOOSEPLAIN + ')$|^$'
|
|
202
|
+
var COMPARATOR = R++
|
|
203
|
+
src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$'
|
|
195
204
|
|
|
196
205
|
// An expression to strip any whitespace between the gtlt and the thing
|
|
197
206
|
// it modifies, so that `> 1.2.3` ==> `>1.2.3`
|
|
198
|
-
var COMPARATORTRIM = R
|
|
207
|
+
var COMPARATORTRIM = R++
|
|
199
208
|
src[COMPARATORTRIM] = '(\\s*)' + src[GTLT] +
|
|
200
|
-
'\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')'
|
|
209
|
+
'\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')'
|
|
201
210
|
|
|
202
211
|
// this one has to use the /g flag
|
|
203
|
-
re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g')
|
|
204
|
-
var comparatorTrimReplace = '$1$2$3'
|
|
205
|
-
|
|
212
|
+
re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g')
|
|
213
|
+
var comparatorTrimReplace = '$1$2$3'
|
|
206
214
|
|
|
207
215
|
// Something like `1.2.3 - 1.2.4`
|
|
208
216
|
// Note that these all use the loose form, because they'll be
|
|
209
217
|
// checked against either the strict or loose comparator form
|
|
210
218
|
// later.
|
|
211
|
-
var HYPHENRANGE = R
|
|
219
|
+
var HYPHENRANGE = R++
|
|
212
220
|
src[HYPHENRANGE] = '^\\s*(' + src[XRANGEPLAIN] + ')' +
|
|
213
221
|
'\\s+-\\s+' +
|
|
214
222
|
'(' + src[XRANGEPLAIN] + ')' +
|
|
215
|
-
'\\s*$'
|
|
223
|
+
'\\s*$'
|
|
216
224
|
|
|
217
|
-
var HYPHENRANGELOOSE = R
|
|
225
|
+
var HYPHENRANGELOOSE = R++
|
|
218
226
|
src[HYPHENRANGELOOSE] = '^\\s*(' + src[XRANGEPLAINLOOSE] + ')' +
|
|
219
227
|
'\\s+-\\s+' +
|
|
220
228
|
'(' + src[XRANGEPLAINLOOSE] + ')' +
|
|
221
|
-
'\\s*$'
|
|
229
|
+
'\\s*$'
|
|
222
230
|
|
|
223
231
|
// Star ranges basically just allow anything at all.
|
|
224
|
-
var STAR = R
|
|
225
|
-
src[STAR] = '(<|>)?=?\\s*\\*'
|
|
232
|
+
var STAR = R++
|
|
233
|
+
src[STAR] = '(<|>)?=?\\s*\\*'
|
|
226
234
|
|
|
227
235
|
// Compile to actual regexp objects.
|
|
228
236
|
// All are flag-free, unless they were created above with a flag.
|
|
229
237
|
for (var i = 0; i < R; i++) {
|
|
230
|
-
debug(i, src[i])
|
|
231
|
-
if (!re[i])
|
|
232
|
-
re[i] = new RegExp(src[i])
|
|
238
|
+
debug(i, src[i])
|
|
239
|
+
if (!re[i]) {
|
|
240
|
+
re[i] = new RegExp(src[i])
|
|
241
|
+
}
|
|
233
242
|
}
|
|
234
243
|
|
|
235
|
-
exports.parse = parse
|
|
236
|
-
function parse(version,
|
|
237
|
-
if (
|
|
238
|
-
|
|
244
|
+
exports.parse = parse
|
|
245
|
+
function parse (version, options) {
|
|
246
|
+
if (!options || typeof options !== 'object') {
|
|
247
|
+
options = {
|
|
248
|
+
loose: !!options,
|
|
249
|
+
includePrerelease: false
|
|
250
|
+
}
|
|
251
|
+
}
|
|
239
252
|
|
|
240
|
-
if (
|
|
241
|
-
return
|
|
253
|
+
if (version instanceof SemVer) {
|
|
254
|
+
return version
|
|
255
|
+
}
|
|
242
256
|
|
|
243
|
-
if (version
|
|
244
|
-
return null
|
|
257
|
+
if (typeof version !== 'string') {
|
|
258
|
+
return null
|
|
259
|
+
}
|
|
245
260
|
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
261
|
+
if (version.length > MAX_LENGTH) {
|
|
262
|
+
return null
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
var r = options.loose ? re[LOOSE] : re[FULL]
|
|
266
|
+
if (!r.test(version)) {
|
|
267
|
+
return null
|
|
268
|
+
}
|
|
249
269
|
|
|
250
270
|
try {
|
|
251
|
-
return new SemVer(version,
|
|
271
|
+
return new SemVer(version, options)
|
|
252
272
|
} catch (er) {
|
|
253
|
-
return null
|
|
273
|
+
return null
|
|
254
274
|
}
|
|
255
275
|
}
|
|
256
276
|
|
|
257
|
-
exports.valid = valid
|
|
258
|
-
function valid(version,
|
|
259
|
-
var v = parse(version,
|
|
260
|
-
return v ? v.version : null
|
|
277
|
+
exports.valid = valid
|
|
278
|
+
function valid (version, options) {
|
|
279
|
+
var v = parse(version, options)
|
|
280
|
+
return v ? v.version : null
|
|
261
281
|
}
|
|
262
282
|
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
return s ? s.version : null;
|
|
283
|
+
exports.clean = clean
|
|
284
|
+
function clean (version, options) {
|
|
285
|
+
var s = parse(version.trim().replace(/^[=v]+/, ''), options)
|
|
286
|
+
return s ? s.version : null
|
|
268
287
|
}
|
|
269
288
|
|
|
270
|
-
exports.SemVer = SemVer
|
|
289
|
+
exports.SemVer = SemVer
|
|
271
290
|
|
|
272
|
-
function SemVer(version,
|
|
291
|
+
function SemVer (version, options) {
|
|
292
|
+
if (!options || typeof options !== 'object') {
|
|
293
|
+
options = {
|
|
294
|
+
loose: !!options,
|
|
295
|
+
includePrerelease: false
|
|
296
|
+
}
|
|
297
|
+
}
|
|
273
298
|
if (version instanceof SemVer) {
|
|
274
|
-
if (version.loose === loose)
|
|
275
|
-
return version
|
|
276
|
-
else
|
|
277
|
-
version = version.version
|
|
299
|
+
if (version.loose === options.loose) {
|
|
300
|
+
return version
|
|
301
|
+
} else {
|
|
302
|
+
version = version.version
|
|
303
|
+
}
|
|
278
304
|
} else if (typeof version !== 'string') {
|
|
279
|
-
throw new TypeError('Invalid Version: ' + version)
|
|
305
|
+
throw new TypeError('Invalid Version: ' + version)
|
|
280
306
|
}
|
|
281
307
|
|
|
282
|
-
if (version.length > MAX_LENGTH)
|
|
308
|
+
if (version.length > MAX_LENGTH) {
|
|
283
309
|
throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters')
|
|
310
|
+
}
|
|
284
311
|
|
|
285
|
-
if (!(this instanceof SemVer))
|
|
286
|
-
return new SemVer(version,
|
|
312
|
+
if (!(this instanceof SemVer)) {
|
|
313
|
+
return new SemVer(version, options)
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
debug('SemVer', version, options)
|
|
317
|
+
this.options = options
|
|
318
|
+
this.loose = !!options.loose
|
|
287
319
|
|
|
288
|
-
|
|
289
|
-
this.loose = loose;
|
|
290
|
-
var m = version.trim().match(loose ? re[LOOSE] : re[FULL]);
|
|
320
|
+
var m = version.trim().match(options.loose ? re[LOOSE] : re[FULL])
|
|
291
321
|
|
|
292
|
-
if (!m)
|
|
293
|
-
throw new TypeError('Invalid Version: ' + version)
|
|
322
|
+
if (!m) {
|
|
323
|
+
throw new TypeError('Invalid Version: ' + version)
|
|
324
|
+
}
|
|
294
325
|
|
|
295
|
-
this.raw = version
|
|
326
|
+
this.raw = version
|
|
296
327
|
|
|
297
328
|
// these are actually numbers
|
|
298
|
-
this.major = +m[1]
|
|
299
|
-
this.minor = +m[2]
|
|
300
|
-
this.patch = +m[3]
|
|
329
|
+
this.major = +m[1]
|
|
330
|
+
this.minor = +m[2]
|
|
331
|
+
this.patch = +m[3]
|
|
301
332
|
|
|
302
|
-
if (this.major > MAX_SAFE_INTEGER || this.major < 0)
|
|
333
|
+
if (this.major > MAX_SAFE_INTEGER || this.major < 0) {
|
|
303
334
|
throw new TypeError('Invalid major version')
|
|
335
|
+
}
|
|
304
336
|
|
|
305
|
-
if (this.minor > MAX_SAFE_INTEGER || this.minor < 0)
|
|
337
|
+
if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {
|
|
306
338
|
throw new TypeError('Invalid minor version')
|
|
339
|
+
}
|
|
307
340
|
|
|
308
|
-
if (this.patch > MAX_SAFE_INTEGER || this.patch < 0)
|
|
341
|
+
if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {
|
|
309
342
|
throw new TypeError('Invalid patch version')
|
|
343
|
+
}
|
|
310
344
|
|
|
311
345
|
// numberify any prerelease numeric ids
|
|
312
|
-
if (!m[4])
|
|
313
|
-
this.prerelease = []
|
|
314
|
-
else
|
|
315
|
-
this.prerelease = m[4].split('.').map(function(id) {
|
|
346
|
+
if (!m[4]) {
|
|
347
|
+
this.prerelease = []
|
|
348
|
+
} else {
|
|
349
|
+
this.prerelease = m[4].split('.').map(function (id) {
|
|
316
350
|
if (/^[0-9]+$/.test(id)) {
|
|
317
|
-
var num = +id
|
|
318
|
-
if (num >= 0 && num < MAX_SAFE_INTEGER)
|
|
319
|
-
return num
|
|
351
|
+
var num = +id
|
|
352
|
+
if (num >= 0 && num < MAX_SAFE_INTEGER) {
|
|
353
|
+
return num
|
|
354
|
+
}
|
|
320
355
|
}
|
|
321
|
-
return id
|
|
322
|
-
})
|
|
356
|
+
return id
|
|
357
|
+
})
|
|
358
|
+
}
|
|
323
359
|
|
|
324
|
-
this.build = m[5] ? m[5].split('.') : []
|
|
325
|
-
this.format()
|
|
360
|
+
this.build = m[5] ? m[5].split('.') : []
|
|
361
|
+
this.format()
|
|
326
362
|
}
|
|
327
363
|
|
|
328
|
-
SemVer.prototype.format = function() {
|
|
329
|
-
this.version = this.major + '.' + this.minor + '.' + this.patch
|
|
330
|
-
if (this.prerelease.length)
|
|
331
|
-
this.version += '-' + this.prerelease.join('.')
|
|
332
|
-
|
|
333
|
-
|
|
364
|
+
SemVer.prototype.format = function () {
|
|
365
|
+
this.version = this.major + '.' + this.minor + '.' + this.patch
|
|
366
|
+
if (this.prerelease.length) {
|
|
367
|
+
this.version += '-' + this.prerelease.join('.')
|
|
368
|
+
}
|
|
369
|
+
return this.version
|
|
370
|
+
}
|
|
334
371
|
|
|
335
|
-
SemVer.prototype.toString = function() {
|
|
336
|
-
return this.version
|
|
337
|
-
}
|
|
372
|
+
SemVer.prototype.toString = function () {
|
|
373
|
+
return this.version
|
|
374
|
+
}
|
|
338
375
|
|
|
339
|
-
SemVer.prototype.compare = function(other) {
|
|
340
|
-
debug('SemVer.compare', this.version, this.
|
|
341
|
-
if (!(other instanceof SemVer))
|
|
342
|
-
other = new SemVer(other, this.
|
|
376
|
+
SemVer.prototype.compare = function (other) {
|
|
377
|
+
debug('SemVer.compare', this.version, this.options, other)
|
|
378
|
+
if (!(other instanceof SemVer)) {
|
|
379
|
+
other = new SemVer(other, this.options)
|
|
380
|
+
}
|
|
343
381
|
|
|
344
|
-
return this.compareMain(other) || this.comparePre(other)
|
|
345
|
-
}
|
|
382
|
+
return this.compareMain(other) || this.comparePre(other)
|
|
383
|
+
}
|
|
346
384
|
|
|
347
|
-
SemVer.prototype.compareMain = function(other) {
|
|
348
|
-
if (!(other instanceof SemVer))
|
|
349
|
-
other = new SemVer(other, this.
|
|
385
|
+
SemVer.prototype.compareMain = function (other) {
|
|
386
|
+
if (!(other instanceof SemVer)) {
|
|
387
|
+
other = new SemVer(other, this.options)
|
|
388
|
+
}
|
|
350
389
|
|
|
351
390
|
return compareIdentifiers(this.major, other.major) ||
|
|
352
391
|
compareIdentifiers(this.minor, other.minor) ||
|
|
353
|
-
compareIdentifiers(this.patch, other.patch)
|
|
354
|
-
}
|
|
392
|
+
compareIdentifiers(this.patch, other.patch)
|
|
393
|
+
}
|
|
355
394
|
|
|
356
|
-
SemVer.prototype.comparePre = function(other) {
|
|
357
|
-
if (!(other instanceof SemVer))
|
|
358
|
-
other = new SemVer(other, this.
|
|
395
|
+
SemVer.prototype.comparePre = function (other) {
|
|
396
|
+
if (!(other instanceof SemVer)) {
|
|
397
|
+
other = new SemVer(other, this.options)
|
|
398
|
+
}
|
|
359
399
|
|
|
360
400
|
// NOT having a prerelease is > having one
|
|
361
|
-
if (this.prerelease.length && !other.prerelease.length)
|
|
362
|
-
return -1
|
|
363
|
-
else if (!this.prerelease.length && other.prerelease.length)
|
|
364
|
-
return 1
|
|
365
|
-
else if (!this.prerelease.length && !other.prerelease.length)
|
|
366
|
-
return 0
|
|
367
|
-
|
|
368
|
-
|
|
401
|
+
if (this.prerelease.length && !other.prerelease.length) {
|
|
402
|
+
return -1
|
|
403
|
+
} else if (!this.prerelease.length && other.prerelease.length) {
|
|
404
|
+
return 1
|
|
405
|
+
} else if (!this.prerelease.length && !other.prerelease.length) {
|
|
406
|
+
return 0
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
var i = 0
|
|
369
410
|
do {
|
|
370
|
-
var a = this.prerelease[i]
|
|
371
|
-
var b = other.prerelease[i]
|
|
372
|
-
debug('prerelease compare', i, a, b)
|
|
373
|
-
if (a === undefined && b === undefined)
|
|
374
|
-
return 0
|
|
375
|
-
else if (b === undefined)
|
|
376
|
-
return 1
|
|
377
|
-
else if (a === undefined)
|
|
378
|
-
return -1
|
|
379
|
-
else if (a === b)
|
|
380
|
-
continue
|
|
381
|
-
else
|
|
382
|
-
return compareIdentifiers(a, b)
|
|
383
|
-
|
|
384
|
-
}
|
|
411
|
+
var a = this.prerelease[i]
|
|
412
|
+
var b = other.prerelease[i]
|
|
413
|
+
debug('prerelease compare', i, a, b)
|
|
414
|
+
if (a === undefined && b === undefined) {
|
|
415
|
+
return 0
|
|
416
|
+
} else if (b === undefined) {
|
|
417
|
+
return 1
|
|
418
|
+
} else if (a === undefined) {
|
|
419
|
+
return -1
|
|
420
|
+
} else if (a === b) {
|
|
421
|
+
continue
|
|
422
|
+
} else {
|
|
423
|
+
return compareIdentifiers(a, b)
|
|
424
|
+
}
|
|
425
|
+
} while (++i)
|
|
426
|
+
}
|
|
385
427
|
|
|
386
428
|
// preminor will bump the version up to the next minor release, and immediately
|
|
387
429
|
// down to pre-release. premajor and prepatch work the same way.
|
|
388
|
-
SemVer.prototype.inc = function(release, identifier) {
|
|
430
|
+
SemVer.prototype.inc = function (release, identifier) {
|
|
389
431
|
switch (release) {
|
|
390
432
|
case 'premajor':
|
|
391
|
-
this.prerelease.length = 0
|
|
392
|
-
this.patch = 0
|
|
393
|
-
this.minor = 0
|
|
394
|
-
this.major
|
|
395
|
-
this.inc('pre', identifier)
|
|
396
|
-
break
|
|
433
|
+
this.prerelease.length = 0
|
|
434
|
+
this.patch = 0
|
|
435
|
+
this.minor = 0
|
|
436
|
+
this.major++
|
|
437
|
+
this.inc('pre', identifier)
|
|
438
|
+
break
|
|
397
439
|
case 'preminor':
|
|
398
|
-
this.prerelease.length = 0
|
|
399
|
-
this.patch = 0
|
|
400
|
-
this.minor
|
|
401
|
-
this.inc('pre', identifier)
|
|
402
|
-
break
|
|
440
|
+
this.prerelease.length = 0
|
|
441
|
+
this.patch = 0
|
|
442
|
+
this.minor++
|
|
443
|
+
this.inc('pre', identifier)
|
|
444
|
+
break
|
|
403
445
|
case 'prepatch':
|
|
404
446
|
// If this is already a prerelease, it will bump to the next version
|
|
405
447
|
// drop any prereleases that might already exist, since they are not
|
|
406
448
|
// relevant at this point.
|
|
407
|
-
this.prerelease.length = 0
|
|
408
|
-
this.inc('patch', identifier)
|
|
409
|
-
this.inc('pre', identifier)
|
|
410
|
-
break
|
|
449
|
+
this.prerelease.length = 0
|
|
450
|
+
this.inc('patch', identifier)
|
|
451
|
+
this.inc('pre', identifier)
|
|
452
|
+
break
|
|
411
453
|
// If the input is a non-prerelease version, this acts the same as
|
|
412
454
|
// prepatch.
|
|
413
455
|
case 'prerelease':
|
|
414
|
-
if (this.prerelease.length === 0)
|
|
415
|
-
this.inc('patch', identifier)
|
|
416
|
-
|
|
417
|
-
|
|
456
|
+
if (this.prerelease.length === 0) {
|
|
457
|
+
this.inc('patch', identifier)
|
|
458
|
+
}
|
|
459
|
+
this.inc('pre', identifier)
|
|
460
|
+
break
|
|
418
461
|
|
|
419
462
|
case 'major':
|
|
420
463
|
// If this is a pre-major version, bump up to the same major version.
|
|
421
464
|
// Otherwise increment major.
|
|
422
465
|
// 1.0.0-5 bumps to 1.0.0
|
|
423
466
|
// 1.1.0 bumps to 2.0.0
|
|
424
|
-
if (this.minor !== 0 ||
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
467
|
+
if (this.minor !== 0 ||
|
|
468
|
+
this.patch !== 0 ||
|
|
469
|
+
this.prerelease.length === 0) {
|
|
470
|
+
this.major++
|
|
471
|
+
}
|
|
472
|
+
this.minor = 0
|
|
473
|
+
this.patch = 0
|
|
474
|
+
this.prerelease = []
|
|
475
|
+
break
|
|
430
476
|
case 'minor':
|
|
431
477
|
// If this is a pre-minor version, bump up to the same minor version.
|
|
432
478
|
// Otherwise increment minor.
|
|
433
479
|
// 1.2.0-5 bumps to 1.2.0
|
|
434
480
|
// 1.2.1 bumps to 1.3.0
|
|
435
|
-
if (this.patch !== 0 || this.prerelease.length === 0)
|
|
436
|
-
this.minor
|
|
437
|
-
|
|
438
|
-
this.
|
|
439
|
-
|
|
481
|
+
if (this.patch !== 0 || this.prerelease.length === 0) {
|
|
482
|
+
this.minor++
|
|
483
|
+
}
|
|
484
|
+
this.patch = 0
|
|
485
|
+
this.prerelease = []
|
|
486
|
+
break
|
|
440
487
|
case 'patch':
|
|
441
488
|
// If this is not a pre-release version, it will increment the patch.
|
|
442
489
|
// If it is a pre-release it will bump up to the same patch version.
|
|
443
490
|
// 1.2.0-5 patches to 1.2.0
|
|
444
491
|
// 1.2.0 patches to 1.2.1
|
|
445
|
-
if (this.prerelease.length === 0)
|
|
446
|
-
this.patch
|
|
447
|
-
|
|
448
|
-
|
|
492
|
+
if (this.prerelease.length === 0) {
|
|
493
|
+
this.patch++
|
|
494
|
+
}
|
|
495
|
+
this.prerelease = []
|
|
496
|
+
break
|
|
449
497
|
// This probably shouldn't be used publicly.
|
|
450
498
|
// 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction.
|
|
451
499
|
case 'pre':
|
|
452
|
-
if (this.prerelease.length === 0)
|
|
453
|
-
this.prerelease = [0]
|
|
454
|
-
else {
|
|
455
|
-
var i = this.prerelease.length
|
|
500
|
+
if (this.prerelease.length === 0) {
|
|
501
|
+
this.prerelease = [0]
|
|
502
|
+
} else {
|
|
503
|
+
var i = this.prerelease.length
|
|
456
504
|
while (--i >= 0) {
|
|
457
505
|
if (typeof this.prerelease[i] === 'number') {
|
|
458
|
-
this.prerelease[i]
|
|
459
|
-
i = -2
|
|
506
|
+
this.prerelease[i]++
|
|
507
|
+
i = -2
|
|
460
508
|
}
|
|
461
509
|
}
|
|
462
|
-
if (i === -1)
|
|
463
|
-
|
|
510
|
+
if (i === -1) {
|
|
511
|
+
// didn't increment anything
|
|
512
|
+
this.prerelease.push(0)
|
|
513
|
+
}
|
|
464
514
|
}
|
|
465
515
|
if (identifier) {
|
|
466
516
|
// 1.2.0-beta.1 bumps to 1.2.0-beta.2,
|
|
467
517
|
// 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
|
|
468
518
|
if (this.prerelease[0] === identifier) {
|
|
469
|
-
if (isNaN(this.prerelease[1]))
|
|
470
|
-
this.prerelease = [identifier, 0]
|
|
471
|
-
|
|
472
|
-
|
|
519
|
+
if (isNaN(this.prerelease[1])) {
|
|
520
|
+
this.prerelease = [identifier, 0]
|
|
521
|
+
}
|
|
522
|
+
} else {
|
|
523
|
+
this.prerelease = [identifier, 0]
|
|
524
|
+
}
|
|
473
525
|
}
|
|
474
|
-
break
|
|
526
|
+
break
|
|
475
527
|
|
|
476
528
|
default:
|
|
477
|
-
throw new Error('invalid increment argument: ' + release)
|
|
529
|
+
throw new Error('invalid increment argument: ' + release)
|
|
478
530
|
}
|
|
479
|
-
this.format()
|
|
480
|
-
this.raw = this.version
|
|
481
|
-
return this
|
|
482
|
-
}
|
|
531
|
+
this.format()
|
|
532
|
+
this.raw = this.version
|
|
533
|
+
return this
|
|
534
|
+
}
|
|
483
535
|
|
|
484
|
-
exports.inc = inc
|
|
485
|
-
function inc(version, release, loose, identifier) {
|
|
486
|
-
if (typeof(loose) === 'string') {
|
|
487
|
-
identifier = loose
|
|
488
|
-
loose = undefined
|
|
536
|
+
exports.inc = inc
|
|
537
|
+
function inc (version, release, loose, identifier) {
|
|
538
|
+
if (typeof (loose) === 'string') {
|
|
539
|
+
identifier = loose
|
|
540
|
+
loose = undefined
|
|
489
541
|
}
|
|
490
542
|
|
|
491
543
|
try {
|
|
492
|
-
return new SemVer(version, loose).inc(release, identifier).version
|
|
544
|
+
return new SemVer(version, loose).inc(release, identifier).version
|
|
493
545
|
} catch (er) {
|
|
494
|
-
return null
|
|
546
|
+
return null
|
|
495
547
|
}
|
|
496
548
|
}
|
|
497
549
|
|
|
498
|
-
exports.diff = diff
|
|
499
|
-
function diff(version1, version2) {
|
|
550
|
+
exports.diff = diff
|
|
551
|
+
function diff (version1, version2) {
|
|
500
552
|
if (eq(version1, version2)) {
|
|
501
|
-
return null
|
|
553
|
+
return null
|
|
502
554
|
} else {
|
|
503
|
-
var v1 = parse(version1)
|
|
504
|
-
var v2 = parse(version2)
|
|
555
|
+
var v1 = parse(version1)
|
|
556
|
+
var v2 = parse(version2)
|
|
557
|
+
var prefix = ''
|
|
505
558
|
if (v1.prerelease.length || v2.prerelease.length) {
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
if (v1[key] !== v2[key]) {
|
|
509
|
-
return 'pre'+key;
|
|
510
|
-
}
|
|
511
|
-
}
|
|
512
|
-
}
|
|
513
|
-
return 'prerelease';
|
|
559
|
+
prefix = 'pre'
|
|
560
|
+
var defaultResult = 'prerelease'
|
|
514
561
|
}
|
|
515
562
|
for (var key in v1) {
|
|
516
563
|
if (key === 'major' || key === 'minor' || key === 'patch') {
|
|
517
564
|
if (v1[key] !== v2[key]) {
|
|
518
|
-
return key
|
|
565
|
+
return prefix + key
|
|
519
566
|
}
|
|
520
567
|
}
|
|
521
568
|
}
|
|
569
|
+
return defaultResult // may be undefined
|
|
522
570
|
}
|
|
523
571
|
}
|
|
524
572
|
|
|
525
|
-
exports.compareIdentifiers = compareIdentifiers
|
|
573
|
+
exports.compareIdentifiers = compareIdentifiers
|
|
526
574
|
|
|
527
|
-
var numeric = /^[0-9]
|
|
528
|
-
function compareIdentifiers(a, b) {
|
|
529
|
-
var anum = numeric.test(a)
|
|
530
|
-
var bnum = numeric.test(b)
|
|
575
|
+
var numeric = /^[0-9]+$/
|
|
576
|
+
function compareIdentifiers (a, b) {
|
|
577
|
+
var anum = numeric.test(a)
|
|
578
|
+
var bnum = numeric.test(b)
|
|
531
579
|
|
|
532
580
|
if (anum && bnum) {
|
|
533
|
-
a = +a
|
|
534
|
-
b = +b
|
|
581
|
+
a = +a
|
|
582
|
+
b = +b
|
|
535
583
|
}
|
|
536
584
|
|
|
537
|
-
return
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
585
|
+
return a === b ? 0
|
|
586
|
+
: (anum && !bnum) ? -1
|
|
587
|
+
: (bnum && !anum) ? 1
|
|
588
|
+
: a < b ? -1
|
|
589
|
+
: 1
|
|
542
590
|
}
|
|
543
591
|
|
|
544
|
-
exports.rcompareIdentifiers = rcompareIdentifiers
|
|
545
|
-
function rcompareIdentifiers(a, b) {
|
|
546
|
-
return compareIdentifiers(b, a)
|
|
592
|
+
exports.rcompareIdentifiers = rcompareIdentifiers
|
|
593
|
+
function rcompareIdentifiers (a, b) {
|
|
594
|
+
return compareIdentifiers(b, a)
|
|
547
595
|
}
|
|
548
596
|
|
|
549
|
-
exports.major = major
|
|
550
|
-
function major(a, loose) {
|
|
551
|
-
return new SemVer(a, loose).major
|
|
597
|
+
exports.major = major
|
|
598
|
+
function major (a, loose) {
|
|
599
|
+
return new SemVer(a, loose).major
|
|
552
600
|
}
|
|
553
601
|
|
|
554
|
-
exports.minor = minor
|
|
555
|
-
function minor(a, loose) {
|
|
556
|
-
return new SemVer(a, loose).minor
|
|
602
|
+
exports.minor = minor
|
|
603
|
+
function minor (a, loose) {
|
|
604
|
+
return new SemVer(a, loose).minor
|
|
557
605
|
}
|
|
558
606
|
|
|
559
|
-
exports.patch = patch
|
|
560
|
-
function patch(a, loose) {
|
|
561
|
-
return new SemVer(a, loose).patch
|
|
607
|
+
exports.patch = patch
|
|
608
|
+
function patch (a, loose) {
|
|
609
|
+
return new SemVer(a, loose).patch
|
|
562
610
|
}
|
|
563
611
|
|
|
564
|
-
exports.compare = compare
|
|
565
|
-
function compare(a, b, loose) {
|
|
566
|
-
return new SemVer(a, loose).compare(new SemVer(b, loose))
|
|
612
|
+
exports.compare = compare
|
|
613
|
+
function compare (a, b, loose) {
|
|
614
|
+
return new SemVer(a, loose).compare(new SemVer(b, loose))
|
|
567
615
|
}
|
|
568
616
|
|
|
569
|
-
exports.compareLoose = compareLoose
|
|
570
|
-
function compareLoose(a, b) {
|
|
571
|
-
return compare(a, b, true)
|
|
617
|
+
exports.compareLoose = compareLoose
|
|
618
|
+
function compareLoose (a, b) {
|
|
619
|
+
return compare(a, b, true)
|
|
572
620
|
}
|
|
573
621
|
|
|
574
|
-
exports.rcompare = rcompare
|
|
575
|
-
function rcompare(a, b, loose) {
|
|
576
|
-
return compare(b, a, loose)
|
|
622
|
+
exports.rcompare = rcompare
|
|
623
|
+
function rcompare (a, b, loose) {
|
|
624
|
+
return compare(b, a, loose)
|
|
577
625
|
}
|
|
578
626
|
|
|
579
|
-
exports.sort = sort
|
|
580
|
-
function sort(list, loose) {
|
|
581
|
-
return list.sort(function(a, b) {
|
|
582
|
-
return exports.compare(a, b, loose)
|
|
583
|
-
})
|
|
627
|
+
exports.sort = sort
|
|
628
|
+
function sort (list, loose) {
|
|
629
|
+
return list.sort(function (a, b) {
|
|
630
|
+
return exports.compare(a, b, loose)
|
|
631
|
+
})
|
|
584
632
|
}
|
|
585
633
|
|
|
586
|
-
exports.rsort = rsort
|
|
587
|
-
function rsort(list, loose) {
|
|
588
|
-
return list.sort(function(a, b) {
|
|
589
|
-
return exports.rcompare(a, b, loose)
|
|
590
|
-
})
|
|
634
|
+
exports.rsort = rsort
|
|
635
|
+
function rsort (list, loose) {
|
|
636
|
+
return list.sort(function (a, b) {
|
|
637
|
+
return exports.rcompare(a, b, loose)
|
|
638
|
+
})
|
|
591
639
|
}
|
|
592
640
|
|
|
593
|
-
exports.gt = gt
|
|
594
|
-
function gt(a, b, loose) {
|
|
595
|
-
return compare(a, b, loose) > 0
|
|
641
|
+
exports.gt = gt
|
|
642
|
+
function gt (a, b, loose) {
|
|
643
|
+
return compare(a, b, loose) > 0
|
|
596
644
|
}
|
|
597
645
|
|
|
598
|
-
exports.lt = lt
|
|
599
|
-
function lt(a, b, loose) {
|
|
600
|
-
return compare(a, b, loose) < 0
|
|
646
|
+
exports.lt = lt
|
|
647
|
+
function lt (a, b, loose) {
|
|
648
|
+
return compare(a, b, loose) < 0
|
|
601
649
|
}
|
|
602
650
|
|
|
603
|
-
exports.eq = eq
|
|
604
|
-
function eq(a, b, loose) {
|
|
605
|
-
return compare(a, b, loose) === 0
|
|
651
|
+
exports.eq = eq
|
|
652
|
+
function eq (a, b, loose) {
|
|
653
|
+
return compare(a, b, loose) === 0
|
|
606
654
|
}
|
|
607
655
|
|
|
608
|
-
exports.neq = neq
|
|
609
|
-
function neq(a, b, loose) {
|
|
610
|
-
return compare(a, b, loose) !== 0
|
|
656
|
+
exports.neq = neq
|
|
657
|
+
function neq (a, b, loose) {
|
|
658
|
+
return compare(a, b, loose) !== 0
|
|
611
659
|
}
|
|
612
660
|
|
|
613
|
-
exports.gte = gte
|
|
614
|
-
function gte(a, b, loose) {
|
|
615
|
-
return compare(a, b, loose) >= 0
|
|
661
|
+
exports.gte = gte
|
|
662
|
+
function gte (a, b, loose) {
|
|
663
|
+
return compare(a, b, loose) >= 0
|
|
616
664
|
}
|
|
617
665
|
|
|
618
|
-
exports.lte = lte
|
|
619
|
-
function lte(a, b, loose) {
|
|
620
|
-
return compare(a, b, loose) <= 0
|
|
666
|
+
exports.lte = lte
|
|
667
|
+
function lte (a, b, loose) {
|
|
668
|
+
return compare(a, b, loose) <= 0
|
|
621
669
|
}
|
|
622
670
|
|
|
623
|
-
exports.cmp = cmp
|
|
624
|
-
function cmp(a, op, b, loose) {
|
|
625
|
-
var ret;
|
|
671
|
+
exports.cmp = cmp
|
|
672
|
+
function cmp (a, op, b, loose) {
|
|
626
673
|
switch (op) {
|
|
627
674
|
case '===':
|
|
628
|
-
if (typeof a === 'object')
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
675
|
+
if (typeof a === 'object')
|
|
676
|
+
a = a.version
|
|
677
|
+
if (typeof b === 'object')
|
|
678
|
+
b = b.version
|
|
679
|
+
return a === b
|
|
680
|
+
|
|
632
681
|
case '!==':
|
|
633
|
-
if (typeof a === 'object')
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
case '
|
|
640
|
-
case '
|
|
641
|
-
case '
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
682
|
+
if (typeof a === 'object')
|
|
683
|
+
a = a.version
|
|
684
|
+
if (typeof b === 'object')
|
|
685
|
+
b = b.version
|
|
686
|
+
return a !== b
|
|
687
|
+
|
|
688
|
+
case '':
|
|
689
|
+
case '=':
|
|
690
|
+
case '==':
|
|
691
|
+
return eq(a, b, loose)
|
|
692
|
+
|
|
693
|
+
case '!=':
|
|
694
|
+
return neq(a, b, loose)
|
|
695
|
+
|
|
696
|
+
case '>':
|
|
697
|
+
return gt(a, b, loose)
|
|
698
|
+
|
|
699
|
+
case '>=':
|
|
700
|
+
return gte(a, b, loose)
|
|
701
|
+
|
|
702
|
+
case '<':
|
|
703
|
+
return lt(a, b, loose)
|
|
704
|
+
|
|
705
|
+
case '<=':
|
|
706
|
+
return lte(a, b, loose)
|
|
707
|
+
|
|
708
|
+
default:
|
|
709
|
+
throw new TypeError('Invalid operator: ' + op)
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
exports.Comparator = Comparator
|
|
714
|
+
function Comparator (comp, options) {
|
|
715
|
+
if (!options || typeof options !== 'object') {
|
|
716
|
+
options = {
|
|
717
|
+
loose: !!options,
|
|
718
|
+
includePrerelease: false
|
|
719
|
+
}
|
|
720
|
+
}
|
|
721
|
+
|
|
650
722
|
if (comp instanceof Comparator) {
|
|
651
|
-
if (comp.loose === loose)
|
|
652
|
-
return comp
|
|
653
|
-
else
|
|
654
|
-
comp = comp.value
|
|
723
|
+
if (comp.loose === !!options.loose) {
|
|
724
|
+
return comp
|
|
725
|
+
} else {
|
|
726
|
+
comp = comp.value
|
|
727
|
+
}
|
|
655
728
|
}
|
|
656
729
|
|
|
657
|
-
if (!(this instanceof Comparator))
|
|
658
|
-
return new Comparator(comp,
|
|
730
|
+
if (!(this instanceof Comparator)) {
|
|
731
|
+
return new Comparator(comp, options)
|
|
732
|
+
}
|
|
659
733
|
|
|
660
|
-
debug('comparator', comp,
|
|
661
|
-
this.
|
|
662
|
-
this.
|
|
734
|
+
debug('comparator', comp, options)
|
|
735
|
+
this.options = options
|
|
736
|
+
this.loose = !!options.loose
|
|
737
|
+
this.parse(comp)
|
|
663
738
|
|
|
664
|
-
if (this.semver === ANY)
|
|
665
|
-
this.value = ''
|
|
666
|
-
else
|
|
667
|
-
this.value = this.operator + this.semver.version
|
|
739
|
+
if (this.semver === ANY) {
|
|
740
|
+
this.value = ''
|
|
741
|
+
} else {
|
|
742
|
+
this.value = this.operator + this.semver.version
|
|
743
|
+
}
|
|
668
744
|
|
|
669
|
-
debug('comp', this)
|
|
745
|
+
debug('comp', this)
|
|
670
746
|
}
|
|
671
747
|
|
|
672
|
-
var ANY = {}
|
|
673
|
-
Comparator.prototype.parse = function(comp) {
|
|
674
|
-
var r = this.loose ? re[COMPARATORLOOSE] : re[COMPARATOR]
|
|
675
|
-
var m = comp.match(r)
|
|
748
|
+
var ANY = {}
|
|
749
|
+
Comparator.prototype.parse = function (comp) {
|
|
750
|
+
var r = this.options.loose ? re[COMPARATORLOOSE] : re[COMPARATOR]
|
|
751
|
+
var m = comp.match(r)
|
|
676
752
|
|
|
677
|
-
if (!m)
|
|
678
|
-
throw new TypeError('Invalid comparator: ' + comp)
|
|
753
|
+
if (!m) {
|
|
754
|
+
throw new TypeError('Invalid comparator: ' + comp)
|
|
755
|
+
}
|
|
679
756
|
|
|
680
|
-
this.operator = m[1]
|
|
681
|
-
if (this.operator === '=')
|
|
682
|
-
this.operator = ''
|
|
757
|
+
this.operator = m[1]
|
|
758
|
+
if (this.operator === '=') {
|
|
759
|
+
this.operator = ''
|
|
760
|
+
}
|
|
683
761
|
|
|
684
762
|
// if it literally is just '>' or '' then allow anything.
|
|
685
|
-
if (!m[2])
|
|
686
|
-
this.semver = ANY
|
|
687
|
-
else
|
|
688
|
-
this.semver = new SemVer(m[2], this.loose)
|
|
689
|
-
}
|
|
763
|
+
if (!m[2]) {
|
|
764
|
+
this.semver = ANY
|
|
765
|
+
} else {
|
|
766
|
+
this.semver = new SemVer(m[2], this.options.loose)
|
|
767
|
+
}
|
|
768
|
+
}
|
|
690
769
|
|
|
691
|
-
Comparator.prototype.toString = function() {
|
|
692
|
-
return this.value
|
|
693
|
-
}
|
|
770
|
+
Comparator.prototype.toString = function () {
|
|
771
|
+
return this.value
|
|
772
|
+
}
|
|
694
773
|
|
|
695
|
-
Comparator.prototype.test = function(version) {
|
|
696
|
-
debug('Comparator.test', version, this.loose)
|
|
774
|
+
Comparator.prototype.test = function (version) {
|
|
775
|
+
debug('Comparator.test', version, this.options.loose)
|
|
697
776
|
|
|
698
|
-
if (this.semver === ANY)
|
|
699
|
-
return true
|
|
777
|
+
if (this.semver === ANY) {
|
|
778
|
+
return true
|
|
779
|
+
}
|
|
700
780
|
|
|
701
|
-
if (typeof version === 'string')
|
|
702
|
-
version = new SemVer(version, this.
|
|
781
|
+
if (typeof version === 'string') {
|
|
782
|
+
version = new SemVer(version, this.options)
|
|
783
|
+
}
|
|
703
784
|
|
|
704
|
-
return cmp(version, this.operator, this.semver, this.
|
|
705
|
-
}
|
|
785
|
+
return cmp(version, this.operator, this.semver, this.options)
|
|
786
|
+
}
|
|
706
787
|
|
|
707
|
-
Comparator.prototype.intersects = function(comp,
|
|
788
|
+
Comparator.prototype.intersects = function (comp, options) {
|
|
708
789
|
if (!(comp instanceof Comparator)) {
|
|
709
|
-
throw new TypeError('a Comparator is required')
|
|
790
|
+
throw new TypeError('a Comparator is required')
|
|
710
791
|
}
|
|
711
792
|
|
|
712
|
-
|
|
793
|
+
if (!options || typeof options !== 'object') {
|
|
794
|
+
options = {
|
|
795
|
+
loose: !!options,
|
|
796
|
+
includePrerelease: false
|
|
797
|
+
}
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
var rangeTmp
|
|
713
801
|
|
|
714
802
|
if (this.operator === '') {
|
|
715
|
-
rangeTmp = new Range(comp.value,
|
|
716
|
-
return satisfies(this.value, rangeTmp,
|
|
803
|
+
rangeTmp = new Range(comp.value, options)
|
|
804
|
+
return satisfies(this.value, rangeTmp, options)
|
|
717
805
|
} else if (comp.operator === '') {
|
|
718
|
-
rangeTmp = new Range(this.value,
|
|
719
|
-
return satisfies(comp.semver, rangeTmp,
|
|
806
|
+
rangeTmp = new Range(this.value, options)
|
|
807
|
+
return satisfies(comp.semver, rangeTmp, options)
|
|
720
808
|
}
|
|
721
809
|
|
|
722
810
|
var sameDirectionIncreasing =
|
|
723
811
|
(this.operator === '>=' || this.operator === '>') &&
|
|
724
|
-
(comp.operator === '>=' || comp.operator === '>')
|
|
812
|
+
(comp.operator === '>=' || comp.operator === '>')
|
|
725
813
|
var sameDirectionDecreasing =
|
|
726
814
|
(this.operator === '<=' || this.operator === '<') &&
|
|
727
|
-
(comp.operator === '<=' || comp.operator === '<')
|
|
728
|
-
var sameSemVer = this.semver.version === comp.semver.version
|
|
815
|
+
(comp.operator === '<=' || comp.operator === '<')
|
|
816
|
+
var sameSemVer = this.semver.version === comp.semver.version
|
|
729
817
|
var differentDirectionsInclusive =
|
|
730
818
|
(this.operator === '>=' || this.operator === '<=') &&
|
|
731
|
-
(comp.operator === '>=' || comp.operator === '<=')
|
|
819
|
+
(comp.operator === '>=' || comp.operator === '<=')
|
|
732
820
|
var oppositeDirectionsLessThan =
|
|
733
|
-
cmp(this.semver, '<', comp.semver,
|
|
821
|
+
cmp(this.semver, '<', comp.semver, options) &&
|
|
734
822
|
((this.operator === '>=' || this.operator === '>') &&
|
|
735
|
-
(comp.operator === '<=' || comp.operator === '<'))
|
|
823
|
+
(comp.operator === '<=' || comp.operator === '<'))
|
|
736
824
|
var oppositeDirectionsGreaterThan =
|
|
737
|
-
cmp(this.semver, '>', comp.semver,
|
|
825
|
+
cmp(this.semver, '>', comp.semver, options) &&
|
|
738
826
|
((this.operator === '<=' || this.operator === '<') &&
|
|
739
|
-
(comp.operator === '>=' || comp.operator === '>'))
|
|
827
|
+
(comp.operator === '>=' || comp.operator === '>'))
|
|
740
828
|
|
|
741
829
|
return sameDirectionIncreasing || sameDirectionDecreasing ||
|
|
742
830
|
(sameSemVer && differentDirectionsInclusive) ||
|
|
743
|
-
oppositeDirectionsLessThan || oppositeDirectionsGreaterThan
|
|
744
|
-
}
|
|
831
|
+
oppositeDirectionsLessThan || oppositeDirectionsGreaterThan
|
|
832
|
+
}
|
|
745
833
|
|
|
834
|
+
exports.Range = Range
|
|
835
|
+
function Range (range, options) {
|
|
836
|
+
if (!options || typeof options !== 'object') {
|
|
837
|
+
options = {
|
|
838
|
+
loose: !!options,
|
|
839
|
+
includePrerelease: false
|
|
840
|
+
}
|
|
841
|
+
}
|
|
746
842
|
|
|
747
|
-
exports.Range = Range;
|
|
748
|
-
function Range(range, loose) {
|
|
749
843
|
if (range instanceof Range) {
|
|
750
|
-
if (range.loose === loose
|
|
751
|
-
|
|
844
|
+
if (range.loose === !!options.loose &&
|
|
845
|
+
range.includePrerelease === !!options.includePrerelease) {
|
|
846
|
+
return range
|
|
752
847
|
} else {
|
|
753
|
-
return new Range(range.raw,
|
|
848
|
+
return new Range(range.raw, options)
|
|
754
849
|
}
|
|
755
850
|
}
|
|
756
851
|
|
|
757
852
|
if (range instanceof Comparator) {
|
|
758
|
-
return new Range(range.value,
|
|
853
|
+
return new Range(range.value, options)
|
|
759
854
|
}
|
|
760
855
|
|
|
761
|
-
if (!(this instanceof Range))
|
|
762
|
-
return new Range(range,
|
|
856
|
+
if (!(this instanceof Range)) {
|
|
857
|
+
return new Range(range, options)
|
|
858
|
+
}
|
|
763
859
|
|
|
764
|
-
this.
|
|
860
|
+
this.options = options
|
|
861
|
+
this.loose = !!options.loose
|
|
862
|
+
this.includePrerelease = !!options.includePrerelease
|
|
765
863
|
|
|
766
864
|
// First, split based on boolean or ||
|
|
767
|
-
this.raw = range
|
|
768
|
-
this.set = range.split(/\s*\|\|\s*/).map(function(range) {
|
|
769
|
-
return this.parseRange(range.trim())
|
|
770
|
-
}, this).filter(function(c) {
|
|
865
|
+
this.raw = range
|
|
866
|
+
this.set = range.split(/\s*\|\|\s*/).map(function (range) {
|
|
867
|
+
return this.parseRange(range.trim())
|
|
868
|
+
}, this).filter(function (c) {
|
|
771
869
|
// throw out any that are not relevant for whatever reason
|
|
772
|
-
return c.length
|
|
773
|
-
})
|
|
870
|
+
return c.length
|
|
871
|
+
})
|
|
774
872
|
|
|
775
873
|
if (!this.set.length) {
|
|
776
|
-
throw new TypeError('Invalid SemVer Range: ' + range)
|
|
874
|
+
throw new TypeError('Invalid SemVer Range: ' + range)
|
|
777
875
|
}
|
|
778
876
|
|
|
779
|
-
this.format()
|
|
877
|
+
this.format()
|
|
780
878
|
}
|
|
781
879
|
|
|
782
|
-
Range.prototype.format = function() {
|
|
783
|
-
this.range = this.set.map(function(comps) {
|
|
784
|
-
return comps.join(' ').trim()
|
|
785
|
-
}).join('||').trim()
|
|
786
|
-
return this.range
|
|
787
|
-
}
|
|
880
|
+
Range.prototype.format = function () {
|
|
881
|
+
this.range = this.set.map(function (comps) {
|
|
882
|
+
return comps.join(' ').trim()
|
|
883
|
+
}).join('||').trim()
|
|
884
|
+
return this.range
|
|
885
|
+
}
|
|
788
886
|
|
|
789
|
-
Range.prototype.toString = function() {
|
|
790
|
-
return this.range
|
|
791
|
-
}
|
|
887
|
+
Range.prototype.toString = function () {
|
|
888
|
+
return this.range
|
|
889
|
+
}
|
|
792
890
|
|
|
793
|
-
Range.prototype.parseRange = function(range) {
|
|
794
|
-
var loose = this.loose
|
|
795
|
-
range = range.trim()
|
|
796
|
-
debug('range', range, loose);
|
|
891
|
+
Range.prototype.parseRange = function (range) {
|
|
892
|
+
var loose = this.options.loose
|
|
893
|
+
range = range.trim()
|
|
797
894
|
// `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`
|
|
798
|
-
var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE]
|
|
799
|
-
range = range.replace(hr, hyphenReplace)
|
|
800
|
-
debug('hyphen replace', range)
|
|
895
|
+
var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE]
|
|
896
|
+
range = range.replace(hr, hyphenReplace)
|
|
897
|
+
debug('hyphen replace', range)
|
|
801
898
|
// `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`
|
|
802
|
-
range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace)
|
|
803
|
-
debug('comparator trim', range, re[COMPARATORTRIM])
|
|
899
|
+
range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace)
|
|
900
|
+
debug('comparator trim', range, re[COMPARATORTRIM])
|
|
804
901
|
|
|
805
902
|
// `~ 1.2.3` => `~1.2.3`
|
|
806
|
-
range = range.replace(re[TILDETRIM], tildeTrimReplace)
|
|
903
|
+
range = range.replace(re[TILDETRIM], tildeTrimReplace)
|
|
807
904
|
|
|
808
905
|
// `^ 1.2.3` => `^1.2.3`
|
|
809
|
-
range = range.replace(re[CARETTRIM], caretTrimReplace)
|
|
906
|
+
range = range.replace(re[CARETTRIM], caretTrimReplace)
|
|
810
907
|
|
|
811
908
|
// normalize spaces
|
|
812
|
-
range = range.split(/\s+/).join(' ')
|
|
909
|
+
range = range.split(/\s+/).join(' ')
|
|
813
910
|
|
|
814
911
|
// At this point, the range is completely trimmed and
|
|
815
912
|
// ready to be split into comparators.
|
|
816
913
|
|
|
817
|
-
var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR]
|
|
818
|
-
var set = range.split(' ').map(function(comp) {
|
|
819
|
-
return parseComparator(comp,
|
|
820
|
-
}).join(' ').split(/\s+/)
|
|
821
|
-
if (this.loose) {
|
|
914
|
+
var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR]
|
|
915
|
+
var set = range.split(' ').map(function (comp) {
|
|
916
|
+
return parseComparator(comp, this.options)
|
|
917
|
+
}, this).join(' ').split(/\s+/)
|
|
918
|
+
if (this.options.loose) {
|
|
822
919
|
// in loose mode, throw out any that are not valid comparators
|
|
823
|
-
set = set.filter(function(comp) {
|
|
824
|
-
return !!comp.match(compRe)
|
|
825
|
-
})
|
|
920
|
+
set = set.filter(function (comp) {
|
|
921
|
+
return !!comp.match(compRe)
|
|
922
|
+
})
|
|
826
923
|
}
|
|
827
|
-
set = set.map(function(comp) {
|
|
828
|
-
return new Comparator(comp,
|
|
829
|
-
})
|
|
924
|
+
set = set.map(function (comp) {
|
|
925
|
+
return new Comparator(comp, this.options)
|
|
926
|
+
}, this)
|
|
830
927
|
|
|
831
|
-
return set
|
|
832
|
-
}
|
|
928
|
+
return set
|
|
929
|
+
}
|
|
833
930
|
|
|
834
|
-
Range.prototype.intersects = function(range,
|
|
931
|
+
Range.prototype.intersects = function (range, options) {
|
|
835
932
|
if (!(range instanceof Range)) {
|
|
836
|
-
throw new TypeError('a Range is required')
|
|
933
|
+
throw new TypeError('a Range is required')
|
|
837
934
|
}
|
|
838
935
|
|
|
839
|
-
return this.set.some(function(thisComparators) {
|
|
840
|
-
return thisComparators.every(function(thisComparator) {
|
|
841
|
-
return range.set.some(function(rangeComparators) {
|
|
842
|
-
return rangeComparators.every(function(rangeComparator) {
|
|
843
|
-
return thisComparator.intersects(rangeComparator,
|
|
844
|
-
})
|
|
845
|
-
})
|
|
846
|
-
})
|
|
847
|
-
})
|
|
848
|
-
}
|
|
936
|
+
return this.set.some(function (thisComparators) {
|
|
937
|
+
return thisComparators.every(function (thisComparator) {
|
|
938
|
+
return range.set.some(function (rangeComparators) {
|
|
939
|
+
return rangeComparators.every(function (rangeComparator) {
|
|
940
|
+
return thisComparator.intersects(rangeComparator, options)
|
|
941
|
+
})
|
|
942
|
+
})
|
|
943
|
+
})
|
|
944
|
+
})
|
|
945
|
+
}
|
|
849
946
|
|
|
850
947
|
// Mostly just for testing and legacy API reasons
|
|
851
|
-
exports.toComparators = toComparators
|
|
852
|
-
function toComparators(range,
|
|
853
|
-
return new Range(range,
|
|
854
|
-
return comp.map(function(c) {
|
|
855
|
-
return c.value
|
|
856
|
-
}).join(' ').trim().split(' ')
|
|
857
|
-
})
|
|
948
|
+
exports.toComparators = toComparators
|
|
949
|
+
function toComparators (range, options) {
|
|
950
|
+
return new Range(range, options).set.map(function (comp) {
|
|
951
|
+
return comp.map(function (c) {
|
|
952
|
+
return c.value
|
|
953
|
+
}).join(' ').trim().split(' ')
|
|
954
|
+
})
|
|
858
955
|
}
|
|
859
956
|
|
|
860
957
|
// comprised of xranges, tildes, stars, and gtlt's at this point.
|
|
861
958
|
// already replaced the hyphen ranges
|
|
862
959
|
// turn into a set of JUST comparators.
|
|
863
|
-
function parseComparator(comp,
|
|
864
|
-
debug('comp', comp)
|
|
865
|
-
comp = replaceCarets(comp,
|
|
866
|
-
debug('caret', comp)
|
|
867
|
-
comp = replaceTildes(comp,
|
|
868
|
-
debug('tildes', comp)
|
|
869
|
-
comp = replaceXRanges(comp,
|
|
870
|
-
debug('xrange', comp)
|
|
871
|
-
comp = replaceStars(comp,
|
|
872
|
-
debug('stars', comp)
|
|
873
|
-
return comp
|
|
960
|
+
function parseComparator (comp, options) {
|
|
961
|
+
debug('comp', comp, options)
|
|
962
|
+
comp = replaceCarets(comp, options)
|
|
963
|
+
debug('caret', comp)
|
|
964
|
+
comp = replaceTildes(comp, options)
|
|
965
|
+
debug('tildes', comp)
|
|
966
|
+
comp = replaceXRanges(comp, options)
|
|
967
|
+
debug('xrange', comp)
|
|
968
|
+
comp = replaceStars(comp, options)
|
|
969
|
+
debug('stars', comp)
|
|
970
|
+
return comp
|
|
874
971
|
}
|
|
875
972
|
|
|
876
|
-
function isX(id) {
|
|
877
|
-
return !id || id.toLowerCase() === 'x' || id === '*'
|
|
973
|
+
function isX (id) {
|
|
974
|
+
return !id || id.toLowerCase() === 'x' || id === '*'
|
|
878
975
|
}
|
|
879
976
|
|
|
880
977
|
// ~, ~> --> * (any, kinda silly)
|
|
@@ -883,39 +980,38 @@ function isX(id) {
|
|
|
883
980
|
// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0
|
|
884
981
|
// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0
|
|
885
982
|
// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0
|
|
886
|
-
function replaceTildes(comp,
|
|
887
|
-
return comp.trim().split(/\s+/).map(function(comp) {
|
|
888
|
-
return replaceTilde(comp,
|
|
889
|
-
}).join(' ')
|
|
890
|
-
}
|
|
891
|
-
|
|
892
|
-
function replaceTilde(comp,
|
|
893
|
-
var r = loose ? re[TILDELOOSE] : re[TILDE]
|
|
894
|
-
return comp.replace(r, function(_, M, m, p, pr) {
|
|
895
|
-
debug('tilde', comp, _, M, m, p, pr)
|
|
896
|
-
var ret
|
|
897
|
-
|
|
898
|
-
if (isX(M))
|
|
899
|
-
ret = ''
|
|
900
|
-
else if (isX(m))
|
|
901
|
-
ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'
|
|
902
|
-
else if (isX(p))
|
|
983
|
+
function replaceTildes (comp, options) {
|
|
984
|
+
return comp.trim().split(/\s+/).map(function (comp) {
|
|
985
|
+
return replaceTilde(comp, options)
|
|
986
|
+
}).join(' ')
|
|
987
|
+
}
|
|
988
|
+
|
|
989
|
+
function replaceTilde (comp, options) {
|
|
990
|
+
var r = options.loose ? re[TILDELOOSE] : re[TILDE]
|
|
991
|
+
return comp.replace(r, function (_, M, m, p, pr) {
|
|
992
|
+
debug('tilde', comp, _, M, m, p, pr)
|
|
993
|
+
var ret
|
|
994
|
+
|
|
995
|
+
if (isX(M)) {
|
|
996
|
+
ret = ''
|
|
997
|
+
} else if (isX(m)) {
|
|
998
|
+
ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'
|
|
999
|
+
} else if (isX(p)) {
|
|
903
1000
|
// ~1.2 == >=1.2.0 <1.3.0
|
|
904
|
-
ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'
|
|
905
|
-
else if (pr) {
|
|
906
|
-
debug('replaceTilde pr', pr)
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
' <' + M + '.' + (+m + 1) + '.0';
|
|
911
|
-
} else
|
|
1001
|
+
ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'
|
|
1002
|
+
} else if (pr) {
|
|
1003
|
+
debug('replaceTilde pr', pr)
|
|
1004
|
+
ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
|
|
1005
|
+
' <' + M + '.' + (+m + 1) + '.0'
|
|
1006
|
+
} else {
|
|
912
1007
|
// ~1.2.3 == >=1.2.3 <1.3.0
|
|
913
1008
|
ret = '>=' + M + '.' + m + '.' + p +
|
|
914
|
-
' <' + M + '.' + (+m + 1) + '.0'
|
|
1009
|
+
' <' + M + '.' + (+m + 1) + '.0'
|
|
1010
|
+
}
|
|
915
1011
|
|
|
916
|
-
debug('tilde return', ret)
|
|
917
|
-
return ret
|
|
918
|
-
})
|
|
1012
|
+
debug('tilde return', ret)
|
|
1013
|
+
return ret
|
|
1014
|
+
})
|
|
919
1015
|
}
|
|
920
1016
|
|
|
921
1017
|
// ^ --> * (any, kinda silly)
|
|
@@ -924,138 +1020,144 @@ function replaceTilde(comp, loose) {
|
|
|
924
1020
|
// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0
|
|
925
1021
|
// ^1.2.3 --> >=1.2.3 <2.0.0
|
|
926
1022
|
// ^1.2.0 --> >=1.2.0 <2.0.0
|
|
927
|
-
function replaceCarets(comp,
|
|
928
|
-
return comp.trim().split(/\s+/).map(function(comp) {
|
|
929
|
-
return replaceCaret(comp,
|
|
930
|
-
}).join(' ')
|
|
931
|
-
}
|
|
932
|
-
|
|
933
|
-
function replaceCaret(comp,
|
|
934
|
-
debug('caret', comp,
|
|
935
|
-
var r = loose ? re[CARETLOOSE] : re[CARET]
|
|
936
|
-
return comp.replace(r, function(_, M, m, p, pr) {
|
|
937
|
-
debug('caret', comp, _, M, m, p, pr)
|
|
938
|
-
var ret
|
|
939
|
-
|
|
940
|
-
if (isX(M))
|
|
941
|
-
ret = ''
|
|
942
|
-
else if (isX(m))
|
|
943
|
-
ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'
|
|
944
|
-
else if (isX(p)) {
|
|
945
|
-
if (M === '0')
|
|
946
|
-
ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'
|
|
947
|
-
else
|
|
948
|
-
ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'
|
|
1023
|
+
function replaceCarets (comp, options) {
|
|
1024
|
+
return comp.trim().split(/\s+/).map(function (comp) {
|
|
1025
|
+
return replaceCaret(comp, options)
|
|
1026
|
+
}).join(' ')
|
|
1027
|
+
}
|
|
1028
|
+
|
|
1029
|
+
function replaceCaret (comp, options) {
|
|
1030
|
+
debug('caret', comp, options)
|
|
1031
|
+
var r = options.loose ? re[CARETLOOSE] : re[CARET]
|
|
1032
|
+
return comp.replace(r, function (_, M, m, p, pr) {
|
|
1033
|
+
debug('caret', comp, _, M, m, p, pr)
|
|
1034
|
+
var ret
|
|
1035
|
+
|
|
1036
|
+
if (isX(M)) {
|
|
1037
|
+
ret = ''
|
|
1038
|
+
} else if (isX(m)) {
|
|
1039
|
+
ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'
|
|
1040
|
+
} else if (isX(p)) {
|
|
1041
|
+
if (M === '0') {
|
|
1042
|
+
ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'
|
|
1043
|
+
} else {
|
|
1044
|
+
ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'
|
|
1045
|
+
}
|
|
949
1046
|
} else if (pr) {
|
|
950
|
-
debug('replaceCaret pr', pr)
|
|
951
|
-
if (pr.charAt(0) !== '-')
|
|
952
|
-
pr = '-' + pr;
|
|
1047
|
+
debug('replaceCaret pr', pr)
|
|
953
1048
|
if (M === '0') {
|
|
954
|
-
if (m === '0')
|
|
955
|
-
ret = '>=' + M + '.' + m + '.' + p + pr +
|
|
956
|
-
' <' + M + '.' + m + '.' + (+p + 1)
|
|
957
|
-
else
|
|
958
|
-
ret = '>=' + M + '.' + m + '.' + p + pr +
|
|
959
|
-
' <' + M + '.' + (+m + 1) + '.0'
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
1049
|
+
if (m === '0') {
|
|
1050
|
+
ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
|
|
1051
|
+
' <' + M + '.' + m + '.' + (+p + 1)
|
|
1052
|
+
} else {
|
|
1053
|
+
ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
|
|
1054
|
+
' <' + M + '.' + (+m + 1) + '.0'
|
|
1055
|
+
}
|
|
1056
|
+
} else {
|
|
1057
|
+
ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
|
|
1058
|
+
' <' + (+M + 1) + '.0.0'
|
|
1059
|
+
}
|
|
963
1060
|
} else {
|
|
964
|
-
debug('no pr')
|
|
1061
|
+
debug('no pr')
|
|
965
1062
|
if (M === '0') {
|
|
966
|
-
if (m === '0')
|
|
1063
|
+
if (m === '0') {
|
|
967
1064
|
ret = '>=' + M + '.' + m + '.' + p +
|
|
968
|
-
' <' + M + '.' + m + '.' + (+p + 1)
|
|
969
|
-
else
|
|
1065
|
+
' <' + M + '.' + m + '.' + (+p + 1)
|
|
1066
|
+
} else {
|
|
970
1067
|
ret = '>=' + M + '.' + m + '.' + p +
|
|
971
|
-
' <' + M + '.' + (+m + 1) + '.0'
|
|
972
|
-
|
|
1068
|
+
' <' + M + '.' + (+m + 1) + '.0'
|
|
1069
|
+
}
|
|
1070
|
+
} else {
|
|
973
1071
|
ret = '>=' + M + '.' + m + '.' + p +
|
|
974
|
-
' <' + (+M + 1) + '.0.0'
|
|
1072
|
+
' <' + (+M + 1) + '.0.0'
|
|
1073
|
+
}
|
|
975
1074
|
}
|
|
976
1075
|
|
|
977
|
-
debug('caret return', ret)
|
|
978
|
-
return ret
|
|
979
|
-
})
|
|
1076
|
+
debug('caret return', ret)
|
|
1077
|
+
return ret
|
|
1078
|
+
})
|
|
980
1079
|
}
|
|
981
1080
|
|
|
982
|
-
function replaceXRanges(comp,
|
|
983
|
-
debug('replaceXRanges', comp,
|
|
984
|
-
return comp.split(/\s+/).map(function(comp) {
|
|
985
|
-
return replaceXRange(comp,
|
|
986
|
-
}).join(' ')
|
|
1081
|
+
function replaceXRanges (comp, options) {
|
|
1082
|
+
debug('replaceXRanges', comp, options)
|
|
1083
|
+
return comp.split(/\s+/).map(function (comp) {
|
|
1084
|
+
return replaceXRange(comp, options)
|
|
1085
|
+
}).join(' ')
|
|
987
1086
|
}
|
|
988
1087
|
|
|
989
|
-
function replaceXRange(comp,
|
|
990
|
-
comp = comp.trim()
|
|
991
|
-
var r = loose ? re[XRANGELOOSE] : re[XRANGE]
|
|
992
|
-
return comp.replace(r, function(ret, gtlt, M, m, p, pr) {
|
|
993
|
-
debug('xRange', comp, ret, gtlt, M, m, p, pr)
|
|
994
|
-
var xM = isX(M)
|
|
995
|
-
var xm = xM || isX(m)
|
|
996
|
-
var xp = xm || isX(p)
|
|
997
|
-
var anyX = xp
|
|
998
|
-
|
|
999
|
-
if (gtlt === '=' && anyX)
|
|
1000
|
-
gtlt = ''
|
|
1088
|
+
function replaceXRange (comp, options) {
|
|
1089
|
+
comp = comp.trim()
|
|
1090
|
+
var r = options.loose ? re[XRANGELOOSE] : re[XRANGE]
|
|
1091
|
+
return comp.replace(r, function (ret, gtlt, M, m, p, pr) {
|
|
1092
|
+
debug('xRange', comp, ret, gtlt, M, m, p, pr)
|
|
1093
|
+
var xM = isX(M)
|
|
1094
|
+
var xm = xM || isX(m)
|
|
1095
|
+
var xp = xm || isX(p)
|
|
1096
|
+
var anyX = xp
|
|
1097
|
+
|
|
1098
|
+
if (gtlt === '=' && anyX) {
|
|
1099
|
+
gtlt = ''
|
|
1100
|
+
}
|
|
1001
1101
|
|
|
1002
1102
|
if (xM) {
|
|
1003
1103
|
if (gtlt === '>' || gtlt === '<') {
|
|
1004
1104
|
// nothing is allowed
|
|
1005
|
-
ret = '<0.0.0'
|
|
1105
|
+
ret = '<0.0.0'
|
|
1006
1106
|
} else {
|
|
1007
1107
|
// nothing is forbidden
|
|
1008
|
-
ret = '*'
|
|
1108
|
+
ret = '*'
|
|
1009
1109
|
}
|
|
1010
1110
|
} else if (gtlt && anyX) {
|
|
1111
|
+
// we know patch is an x, because we have any x at all.
|
|
1011
1112
|
// replace X with 0
|
|
1012
|
-
if (xm)
|
|
1013
|
-
m = 0
|
|
1014
|
-
|
|
1015
|
-
|
|
1113
|
+
if (xm) {
|
|
1114
|
+
m = 0
|
|
1115
|
+
}
|
|
1116
|
+
p = 0
|
|
1016
1117
|
|
|
1017
1118
|
if (gtlt === '>') {
|
|
1018
1119
|
// >1 => >=2.0.0
|
|
1019
1120
|
// >1.2 => >=1.3.0
|
|
1020
1121
|
// >1.2.3 => >= 1.2.4
|
|
1021
|
-
gtlt = '>='
|
|
1122
|
+
gtlt = '>='
|
|
1022
1123
|
if (xm) {
|
|
1023
|
-
M = +M + 1
|
|
1024
|
-
m = 0
|
|
1025
|
-
p = 0
|
|
1026
|
-
} else
|
|
1027
|
-
m = +m + 1
|
|
1028
|
-
p = 0
|
|
1124
|
+
M = +M + 1
|
|
1125
|
+
m = 0
|
|
1126
|
+
p = 0
|
|
1127
|
+
} else {
|
|
1128
|
+
m = +m + 1
|
|
1129
|
+
p = 0
|
|
1029
1130
|
}
|
|
1030
1131
|
} else if (gtlt === '<=') {
|
|
1031
1132
|
// <=0.7.x is actually <0.8.0, since any 0.7.x should
|
|
1032
1133
|
// pass. Similarly, <=7.x is actually <8.0.0, etc.
|
|
1033
|
-
gtlt = '<'
|
|
1034
|
-
if (xm)
|
|
1035
|
-
M = +M + 1
|
|
1036
|
-
else
|
|
1037
|
-
m = +m + 1
|
|
1134
|
+
gtlt = '<'
|
|
1135
|
+
if (xm) {
|
|
1136
|
+
M = +M + 1
|
|
1137
|
+
} else {
|
|
1138
|
+
m = +m + 1
|
|
1139
|
+
}
|
|
1038
1140
|
}
|
|
1039
1141
|
|
|
1040
|
-
ret = gtlt + M + '.' + m + '.' + p
|
|
1142
|
+
ret = gtlt + M + '.' + m + '.' + p
|
|
1041
1143
|
} else if (xm) {
|
|
1042
|
-
ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'
|
|
1144
|
+
ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'
|
|
1043
1145
|
} else if (xp) {
|
|
1044
|
-
ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'
|
|
1146
|
+
ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'
|
|
1045
1147
|
}
|
|
1046
1148
|
|
|
1047
|
-
debug('xRange return', ret)
|
|
1149
|
+
debug('xRange return', ret)
|
|
1048
1150
|
|
|
1049
|
-
return ret
|
|
1050
|
-
})
|
|
1151
|
+
return ret
|
|
1152
|
+
})
|
|
1051
1153
|
}
|
|
1052
1154
|
|
|
1053
1155
|
// Because * is AND-ed with everything else in the comparator,
|
|
1054
1156
|
// and '' means "any version", just remove the *s entirely.
|
|
1055
|
-
function replaceStars(comp,
|
|
1056
|
-
debug('replaceStars', comp,
|
|
1157
|
+
function replaceStars (comp, options) {
|
|
1158
|
+
debug('replaceStars', comp, options)
|
|
1057
1159
|
// Looseness is ignored here. star is always as loose as it gets!
|
|
1058
|
-
return comp.trim().replace(re[STAR], '')
|
|
1160
|
+
return comp.trim().replace(re[STAR], '')
|
|
1059
1161
|
}
|
|
1060
1162
|
|
|
1061
1163
|
// This function is passed to string.replace(re[HYPHENRANGE])
|
|
@@ -1063,234 +1165,319 @@ function replaceStars(comp, loose) {
|
|
|
1063
1165
|
// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
|
|
1064
1166
|
// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do
|
|
1065
1167
|
// 1.2 - 3.4 => >=1.2.0 <3.5.0
|
|
1066
|
-
function hyphenReplace($0,
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
if (isX(tM))
|
|
1080
|
-
to = '';
|
|
1081
|
-
else if (isX(tm))
|
|
1082
|
-
to = '<' + (+tM + 1) + '.0.0';
|
|
1083
|
-
else if (isX(tp))
|
|
1084
|
-
to = '<' + tM + '.' + (+tm + 1) + '.0';
|
|
1085
|
-
else if (tpr)
|
|
1086
|
-
to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr;
|
|
1087
|
-
else
|
|
1088
|
-
to = '<=' + to;
|
|
1089
|
-
|
|
1090
|
-
return (from + ' ' + to).trim();
|
|
1091
|
-
}
|
|
1168
|
+
function hyphenReplace ($0,
|
|
1169
|
+
from, fM, fm, fp, fpr, fb,
|
|
1170
|
+
to, tM, tm, tp, tpr, tb) {
|
|
1171
|
+
if (isX(fM)) {
|
|
1172
|
+
from = ''
|
|
1173
|
+
} else if (isX(fm)) {
|
|
1174
|
+
from = '>=' + fM + '.0.0'
|
|
1175
|
+
} else if (isX(fp)) {
|
|
1176
|
+
from = '>=' + fM + '.' + fm + '.0'
|
|
1177
|
+
} else {
|
|
1178
|
+
from = '>=' + from
|
|
1179
|
+
}
|
|
1092
1180
|
|
|
1181
|
+
if (isX(tM)) {
|
|
1182
|
+
to = ''
|
|
1183
|
+
} else if (isX(tm)) {
|
|
1184
|
+
to = '<' + (+tM + 1) + '.0.0'
|
|
1185
|
+
} else if (isX(tp)) {
|
|
1186
|
+
to = '<' + tM + '.' + (+tm + 1) + '.0'
|
|
1187
|
+
} else if (tpr) {
|
|
1188
|
+
to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr
|
|
1189
|
+
} else {
|
|
1190
|
+
to = '<=' + to
|
|
1191
|
+
}
|
|
1192
|
+
|
|
1193
|
+
return (from + ' ' + to).trim()
|
|
1194
|
+
}
|
|
1093
1195
|
|
|
1094
1196
|
// if ANY of the sets match ALL of its comparators, then pass
|
|
1095
|
-
Range.prototype.test = function(version) {
|
|
1096
|
-
if (!version)
|
|
1097
|
-
return false
|
|
1197
|
+
Range.prototype.test = function (version) {
|
|
1198
|
+
if (!version) {
|
|
1199
|
+
return false
|
|
1200
|
+
}
|
|
1098
1201
|
|
|
1099
|
-
if (typeof version === 'string')
|
|
1100
|
-
version = new SemVer(version, this.
|
|
1202
|
+
if (typeof version === 'string') {
|
|
1203
|
+
version = new SemVer(version, this.options)
|
|
1204
|
+
}
|
|
1101
1205
|
|
|
1102
1206
|
for (var i = 0; i < this.set.length; i++) {
|
|
1103
|
-
if (testSet(this.set[i], version))
|
|
1104
|
-
return true
|
|
1207
|
+
if (testSet(this.set[i], version, this.options)) {
|
|
1208
|
+
return true
|
|
1209
|
+
}
|
|
1105
1210
|
}
|
|
1106
|
-
return false
|
|
1107
|
-
}
|
|
1211
|
+
return false
|
|
1212
|
+
}
|
|
1108
1213
|
|
|
1109
|
-
function testSet(set, version) {
|
|
1214
|
+
function testSet (set, version, options) {
|
|
1110
1215
|
for (var i = 0; i < set.length; i++) {
|
|
1111
|
-
if (!set[i].test(version))
|
|
1112
|
-
return false
|
|
1216
|
+
if (!set[i].test(version)) {
|
|
1217
|
+
return false
|
|
1218
|
+
}
|
|
1113
1219
|
}
|
|
1114
1220
|
|
|
1115
|
-
if (version.prerelease.length) {
|
|
1221
|
+
if (version.prerelease.length && !options.includePrerelease) {
|
|
1116
1222
|
// Find the set of versions that are allowed to have prereleases
|
|
1117
1223
|
// For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0
|
|
1118
1224
|
// That should allow `1.2.3-pr.2` to pass.
|
|
1119
1225
|
// However, `1.2.4-alpha.notready` should NOT be allowed,
|
|
1120
1226
|
// even though it's within the range set by the comparators.
|
|
1121
|
-
for (
|
|
1122
|
-
debug(set[i].semver)
|
|
1123
|
-
if (set[i].semver === ANY)
|
|
1124
|
-
continue
|
|
1227
|
+
for (i = 0; i < set.length; i++) {
|
|
1228
|
+
debug(set[i].semver)
|
|
1229
|
+
if (set[i].semver === ANY) {
|
|
1230
|
+
continue
|
|
1231
|
+
}
|
|
1125
1232
|
|
|
1126
1233
|
if (set[i].semver.prerelease.length > 0) {
|
|
1127
|
-
var allowed = set[i].semver
|
|
1234
|
+
var allowed = set[i].semver
|
|
1128
1235
|
if (allowed.major === version.major &&
|
|
1129
1236
|
allowed.minor === version.minor &&
|
|
1130
|
-
allowed.patch === version.patch)
|
|
1131
|
-
return true
|
|
1237
|
+
allowed.patch === version.patch) {
|
|
1238
|
+
return true
|
|
1239
|
+
}
|
|
1132
1240
|
}
|
|
1133
1241
|
}
|
|
1134
1242
|
|
|
1135
1243
|
// Version has a -pre, but it's not one of the ones we like.
|
|
1136
|
-
return false
|
|
1244
|
+
return false
|
|
1137
1245
|
}
|
|
1138
1246
|
|
|
1139
|
-
return true
|
|
1247
|
+
return true
|
|
1140
1248
|
}
|
|
1141
1249
|
|
|
1142
|
-
exports.satisfies = satisfies
|
|
1143
|
-
function satisfies(version, range,
|
|
1250
|
+
exports.satisfies = satisfies
|
|
1251
|
+
function satisfies (version, range, options) {
|
|
1144
1252
|
try {
|
|
1145
|
-
range = new Range(range,
|
|
1253
|
+
range = new Range(range, options)
|
|
1146
1254
|
} catch (er) {
|
|
1147
|
-
return false
|
|
1255
|
+
return false
|
|
1148
1256
|
}
|
|
1149
|
-
return range.test(version)
|
|
1257
|
+
return range.test(version)
|
|
1150
1258
|
}
|
|
1151
1259
|
|
|
1152
|
-
exports.maxSatisfying = maxSatisfying
|
|
1153
|
-
function maxSatisfying(versions, range,
|
|
1154
|
-
var max = null
|
|
1155
|
-
var maxSV = null
|
|
1260
|
+
exports.maxSatisfying = maxSatisfying
|
|
1261
|
+
function maxSatisfying (versions, range, options) {
|
|
1262
|
+
var max = null
|
|
1263
|
+
var maxSV = null
|
|
1156
1264
|
try {
|
|
1157
|
-
var rangeObj = new Range(range,
|
|
1265
|
+
var rangeObj = new Range(range, options)
|
|
1158
1266
|
} catch (er) {
|
|
1159
|
-
return null
|
|
1267
|
+
return null
|
|
1160
1268
|
}
|
|
1161
1269
|
versions.forEach(function (v) {
|
|
1162
|
-
if (rangeObj.test(v)) {
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1270
|
+
if (rangeObj.test(v)) {
|
|
1271
|
+
// satisfies(v, range, options)
|
|
1272
|
+
if (!max || maxSV.compare(v) === -1) {
|
|
1273
|
+
// compare(max, v, true)
|
|
1274
|
+
max = v
|
|
1275
|
+
maxSV = new SemVer(max, options)
|
|
1166
1276
|
}
|
|
1167
1277
|
}
|
|
1168
1278
|
})
|
|
1169
|
-
return max
|
|
1279
|
+
return max
|
|
1170
1280
|
}
|
|
1171
1281
|
|
|
1172
|
-
exports.minSatisfying = minSatisfying
|
|
1173
|
-
function minSatisfying(versions, range,
|
|
1174
|
-
var min = null
|
|
1175
|
-
var minSV = null
|
|
1282
|
+
exports.minSatisfying = minSatisfying
|
|
1283
|
+
function minSatisfying (versions, range, options) {
|
|
1284
|
+
var min = null
|
|
1285
|
+
var minSV = null
|
|
1176
1286
|
try {
|
|
1177
|
-
var rangeObj = new Range(range,
|
|
1287
|
+
var rangeObj = new Range(range, options)
|
|
1178
1288
|
} catch (er) {
|
|
1179
|
-
return null
|
|
1289
|
+
return null
|
|
1180
1290
|
}
|
|
1181
1291
|
versions.forEach(function (v) {
|
|
1182
|
-
if (rangeObj.test(v)) {
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1292
|
+
if (rangeObj.test(v)) {
|
|
1293
|
+
// satisfies(v, range, options)
|
|
1294
|
+
if (!min || minSV.compare(v) === 1) {
|
|
1295
|
+
// compare(min, v, true)
|
|
1296
|
+
min = v
|
|
1297
|
+
minSV = new SemVer(min, options)
|
|
1186
1298
|
}
|
|
1187
1299
|
}
|
|
1188
1300
|
})
|
|
1189
|
-
return min
|
|
1301
|
+
return min
|
|
1302
|
+
}
|
|
1303
|
+
|
|
1304
|
+
exports.minVersion = minVersion
|
|
1305
|
+
function minVersion (range, loose) {
|
|
1306
|
+
range = new Range(range, loose)
|
|
1307
|
+
|
|
1308
|
+
var minver = new SemVer('0.0.0')
|
|
1309
|
+
if (range.test(minver)) {
|
|
1310
|
+
return minver
|
|
1311
|
+
}
|
|
1312
|
+
|
|
1313
|
+
minver = new SemVer('0.0.0-0')
|
|
1314
|
+
if (range.test(minver)) {
|
|
1315
|
+
return minver
|
|
1316
|
+
}
|
|
1317
|
+
|
|
1318
|
+
minver = null
|
|
1319
|
+
for (var i = 0; i < range.set.length; ++i) {
|
|
1320
|
+
var comparators = range.set[i]
|
|
1321
|
+
|
|
1322
|
+
comparators.forEach(function (comparator) {
|
|
1323
|
+
// Clone to avoid manipulating the comparator's semver object.
|
|
1324
|
+
var compver = new SemVer(comparator.semver.version)
|
|
1325
|
+
switch (comparator.operator) {
|
|
1326
|
+
case '>':
|
|
1327
|
+
if (compver.prerelease.length === 0) {
|
|
1328
|
+
compver.patch++
|
|
1329
|
+
} else {
|
|
1330
|
+
compver.prerelease.push(0)
|
|
1331
|
+
}
|
|
1332
|
+
compver.raw = compver.format()
|
|
1333
|
+
/* fallthrough */
|
|
1334
|
+
case '':
|
|
1335
|
+
case '>=':
|
|
1336
|
+
if (!minver || gt(minver, compver)) {
|
|
1337
|
+
minver = compver
|
|
1338
|
+
}
|
|
1339
|
+
break
|
|
1340
|
+
case '<':
|
|
1341
|
+
case '<=':
|
|
1342
|
+
/* Ignore maximum versions */
|
|
1343
|
+
break
|
|
1344
|
+
/* istanbul ignore next */
|
|
1345
|
+
default:
|
|
1346
|
+
throw new Error('Unexpected operation: ' + comparator.operator)
|
|
1347
|
+
}
|
|
1348
|
+
})
|
|
1349
|
+
}
|
|
1350
|
+
|
|
1351
|
+
if (minver && range.test(minver)) {
|
|
1352
|
+
return minver
|
|
1353
|
+
}
|
|
1354
|
+
|
|
1355
|
+
return null
|
|
1190
1356
|
}
|
|
1191
1357
|
|
|
1192
|
-
exports.validRange = validRange
|
|
1193
|
-
function validRange(range,
|
|
1358
|
+
exports.validRange = validRange
|
|
1359
|
+
function validRange (range, options) {
|
|
1194
1360
|
try {
|
|
1195
1361
|
// Return '*' instead of '' so that truthiness works.
|
|
1196
1362
|
// This will throw if it's invalid anyway
|
|
1197
|
-
return new Range(range,
|
|
1363
|
+
return new Range(range, options).range || '*'
|
|
1198
1364
|
} catch (er) {
|
|
1199
|
-
return null
|
|
1365
|
+
return null
|
|
1200
1366
|
}
|
|
1201
1367
|
}
|
|
1202
1368
|
|
|
1203
1369
|
// Determine if version is less than all the versions possible in the range
|
|
1204
|
-
exports.ltr = ltr
|
|
1205
|
-
function ltr(version, range,
|
|
1206
|
-
return outside(version, range, '<',
|
|
1370
|
+
exports.ltr = ltr
|
|
1371
|
+
function ltr (version, range, options) {
|
|
1372
|
+
return outside(version, range, '<', options)
|
|
1207
1373
|
}
|
|
1208
1374
|
|
|
1209
1375
|
// Determine if version is greater than all the versions possible in the range.
|
|
1210
|
-
exports.gtr = gtr
|
|
1211
|
-
function gtr(version, range,
|
|
1212
|
-
return outside(version, range, '>',
|
|
1376
|
+
exports.gtr = gtr
|
|
1377
|
+
function gtr (version, range, options) {
|
|
1378
|
+
return outside(version, range, '>', options)
|
|
1213
1379
|
}
|
|
1214
1380
|
|
|
1215
|
-
exports.outside = outside
|
|
1216
|
-
function outside(version, range, hilo,
|
|
1217
|
-
version = new SemVer(version,
|
|
1218
|
-
range = new Range(range,
|
|
1381
|
+
exports.outside = outside
|
|
1382
|
+
function outside (version, range, hilo, options) {
|
|
1383
|
+
version = new SemVer(version, options)
|
|
1384
|
+
range = new Range(range, options)
|
|
1219
1385
|
|
|
1220
|
-
var gtfn, ltefn, ltfn, comp, ecomp
|
|
1386
|
+
var gtfn, ltefn, ltfn, comp, ecomp
|
|
1221
1387
|
switch (hilo) {
|
|
1222
1388
|
case '>':
|
|
1223
|
-
gtfn = gt
|
|
1224
|
-
ltefn = lte
|
|
1225
|
-
ltfn = lt
|
|
1226
|
-
comp = '>'
|
|
1227
|
-
ecomp = '>='
|
|
1228
|
-
break
|
|
1389
|
+
gtfn = gt
|
|
1390
|
+
ltefn = lte
|
|
1391
|
+
ltfn = lt
|
|
1392
|
+
comp = '>'
|
|
1393
|
+
ecomp = '>='
|
|
1394
|
+
break
|
|
1229
1395
|
case '<':
|
|
1230
|
-
gtfn = lt
|
|
1231
|
-
ltefn = gte
|
|
1232
|
-
ltfn = gt
|
|
1233
|
-
comp = '<'
|
|
1234
|
-
ecomp = '<='
|
|
1235
|
-
break
|
|
1396
|
+
gtfn = lt
|
|
1397
|
+
ltefn = gte
|
|
1398
|
+
ltfn = gt
|
|
1399
|
+
comp = '<'
|
|
1400
|
+
ecomp = '<='
|
|
1401
|
+
break
|
|
1236
1402
|
default:
|
|
1237
|
-
throw new TypeError('Must provide a hilo val of "<" or ">"')
|
|
1403
|
+
throw new TypeError('Must provide a hilo val of "<" or ">"')
|
|
1238
1404
|
}
|
|
1239
1405
|
|
|
1240
1406
|
// If it satisifes the range it is not outside
|
|
1241
|
-
if (satisfies(version, range,
|
|
1242
|
-
return false
|
|
1407
|
+
if (satisfies(version, range, options)) {
|
|
1408
|
+
return false
|
|
1243
1409
|
}
|
|
1244
1410
|
|
|
1245
1411
|
// From now on, variable terms are as if we're in "gtr" mode.
|
|
1246
1412
|
// but note that everything is flipped for the "ltr" function.
|
|
1247
1413
|
|
|
1248
1414
|
for (var i = 0; i < range.set.length; ++i) {
|
|
1249
|
-
var comparators = range.set[i]
|
|
1415
|
+
var comparators = range.set[i]
|
|
1250
1416
|
|
|
1251
|
-
var high = null
|
|
1252
|
-
var low = null
|
|
1417
|
+
var high = null
|
|
1418
|
+
var low = null
|
|
1253
1419
|
|
|
1254
|
-
comparators.forEach(function(comparator) {
|
|
1420
|
+
comparators.forEach(function (comparator) {
|
|
1255
1421
|
if (comparator.semver === ANY) {
|
|
1256
1422
|
comparator = new Comparator('>=0.0.0')
|
|
1257
1423
|
}
|
|
1258
|
-
high = high || comparator
|
|
1259
|
-
low = low || comparator
|
|
1260
|
-
if (gtfn(comparator.semver, high.semver,
|
|
1261
|
-
high = comparator
|
|
1262
|
-
} else if (ltfn(comparator.semver, low.semver,
|
|
1263
|
-
low = comparator
|
|
1424
|
+
high = high || comparator
|
|
1425
|
+
low = low || comparator
|
|
1426
|
+
if (gtfn(comparator.semver, high.semver, options)) {
|
|
1427
|
+
high = comparator
|
|
1428
|
+
} else if (ltfn(comparator.semver, low.semver, options)) {
|
|
1429
|
+
low = comparator
|
|
1264
1430
|
}
|
|
1265
|
-
})
|
|
1431
|
+
})
|
|
1266
1432
|
|
|
1267
1433
|
// If the edge version comparator has a operator then our version
|
|
1268
1434
|
// isn't outside it
|
|
1269
1435
|
if (high.operator === comp || high.operator === ecomp) {
|
|
1270
|
-
return false
|
|
1436
|
+
return false
|
|
1271
1437
|
}
|
|
1272
1438
|
|
|
1273
1439
|
// If the lowest version comparator has an operator and our version
|
|
1274
1440
|
// is less than it then it isn't higher than the range
|
|
1275
1441
|
if ((!low.operator || low.operator === comp) &&
|
|
1276
1442
|
ltefn(version, low.semver)) {
|
|
1277
|
-
return false
|
|
1443
|
+
return false
|
|
1278
1444
|
} else if (low.operator === ecomp && ltfn(version, low.semver)) {
|
|
1279
|
-
return false
|
|
1445
|
+
return false
|
|
1280
1446
|
}
|
|
1281
1447
|
}
|
|
1282
|
-
return true
|
|
1448
|
+
return true
|
|
1283
1449
|
}
|
|
1284
1450
|
|
|
1285
|
-
exports.prerelease = prerelease
|
|
1286
|
-
function prerelease(version,
|
|
1287
|
-
var parsed = parse(version,
|
|
1288
|
-
return (parsed && parsed.prerelease.length) ? parsed.prerelease : null
|
|
1451
|
+
exports.prerelease = prerelease
|
|
1452
|
+
function prerelease (version, options) {
|
|
1453
|
+
var parsed = parse(version, options)
|
|
1454
|
+
return (parsed && parsed.prerelease.length) ? parsed.prerelease : null
|
|
1289
1455
|
}
|
|
1290
1456
|
|
|
1291
|
-
exports.intersects = intersects
|
|
1292
|
-
function intersects(r1, r2,
|
|
1293
|
-
r1 = new Range(r1,
|
|
1294
|
-
r2 = new Range(r2,
|
|
1457
|
+
exports.intersects = intersects
|
|
1458
|
+
function intersects (r1, r2, options) {
|
|
1459
|
+
r1 = new Range(r1, options)
|
|
1460
|
+
r2 = new Range(r2, options)
|
|
1295
1461
|
return r1.intersects(r2)
|
|
1296
1462
|
}
|
|
1463
|
+
|
|
1464
|
+
exports.coerce = coerce
|
|
1465
|
+
function coerce (version) {
|
|
1466
|
+
if (version instanceof SemVer) {
|
|
1467
|
+
return version
|
|
1468
|
+
}
|
|
1469
|
+
|
|
1470
|
+
if (typeof version !== 'string') {
|
|
1471
|
+
return null
|
|
1472
|
+
}
|
|
1473
|
+
|
|
1474
|
+
var match = version.match(re[COERCE])
|
|
1475
|
+
|
|
1476
|
+
if (match == null) {
|
|
1477
|
+
return null
|
|
1478
|
+
}
|
|
1479
|
+
|
|
1480
|
+
return parse(match[1] +
|
|
1481
|
+
'.' + (match[2] || '0') +
|
|
1482
|
+
'.' + (match[3] || '0'))
|
|
1483
|
+
}
|