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