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