summaryrefslogtreecommitdiff
path: root/deps/npm/node_modules/semver/semver.browser.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/npm/node_modules/semver/semver.browser.js')
-rw-r--r--deps/npm/node_modules/semver/semver.browser.js191
1 files changed, 125 insertions, 66 deletions
diff --git a/deps/npm/node_modules/semver/semver.browser.js b/deps/npm/node_modules/semver/semver.browser.js
index 0f414c3d8d..afb68ac0c4 100644
--- a/deps/npm/node_modules/semver/semver.browser.js
+++ b/deps/npm/node_modules/semver/semver.browser.js
@@ -128,18 +128,18 @@ var XRANGEPLAIN = R++;
src[XRANGEPLAIN] = '[v=\\s]*(' + src[XRANGEIDENTIFIER] + ')' +
'(?:\\.(' + src[XRANGEIDENTIFIER] + ')' +
'(?:\\.(' + src[XRANGEIDENTIFIER] + ')' +
- '(?:(' + src[PRERELEASE] + ')' +
- ')?)?)?';
+ '(?:' + src[PRERELEASE] + ')?' +
+ src[BUILD] + '?' +
+ ')?)?';
var XRANGEPLAINLOOSE = R++;
src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
'(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
'(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
- '(?:(' + src[PRERELEASELOOSE] + ')' +
- ')?)?)?';
+ '(?:' + src[PRERELEASELOOSE] + ')?' +
+ src[BUILD] + '?' +
+ ')?)?';
-// >=2.x, for example, means >=2.0.0-0
-// <1.x would be the same as "<1.0.0-0", though.
var XRANGE = R++;
src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$';
var XRANGELOOSE = R++;
@@ -236,7 +236,7 @@ function valid(version, loose) {
exports.clean = clean;
function clean(version, loose) {
- var s = parse(version, loose);
+ var s = parse(version.trim().replace(/^[=v]+/, ''), loose);
return s ? s.version : null;
}
@@ -348,14 +348,23 @@ SemVer.prototype.comparePre = function(other) {
SemVer.prototype.inc = function(release) {
switch (release) {
case 'premajor':
- this.inc('major');
+ this.prerelease.length = 0;
+ this.patch = 0;
+ this.minor = 0;
+ this.major++;
this.inc('pre');
break;
case 'preminor':
- this.inc('minor');
+ this.prerelease.length = 0;
+ this.patch = 0;
+ this.minor++;
this.inc('pre');
break;
case 'prepatch':
+ // If this is already a prerelease, it will bump to the next version
+ // drop any prereleases that might already exist, since they are not
+ // relevant at this point.
+ this.prerelease.length = 0;
this.inc('patch');
this.inc('pre');
break;
@@ -366,11 +375,25 @@ SemVer.prototype.inc = function(release) {
this.inc('patch');
this.inc('pre');
break;
+
case 'major':
- this.major++;
- this.minor = -1;
+ // If this is a pre-major version, bump up to the same major version.
+ // Otherwise increment major.
+ // 1.0.0-5 bumps to 1.0.0
+ // 1.1.0 bumps to 2.0.0
+ if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0)
+ this.major++;
+ this.minor = 0;
+ this.patch = 0;
+ this.prerelease = [];
+ break;
case 'minor':
- this.minor++;
+ // If this is a pre-minor version, bump up to the same minor version.
+ // Otherwise increment minor.
+ // 1.2.0-5 bumps to 1.2.0
+ // 1.2.1 bumps to 1.3.0
+ if (this.patch !== 0 || this.prerelease.length === 0)
+ this.minor++;
this.patch = 0;
this.prerelease = [];
break;
@@ -383,8 +406,8 @@ SemVer.prototype.inc = function(release) {
this.patch++;
this.prerelease = [];
break;
- // This probably shouldn't be used publically.
- // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction.
+ // This probably shouldn't be used publicly.
+ // 1.0.0 "pre" would become 1.0.0 which is the wrong direction.
case 'pre':
if (this.prerelease.length === 0)
this.prerelease = [0];
@@ -504,8 +527,16 @@ exports.cmp = cmp;
function cmp(a, op, b, loose) {
var ret;
switch (op) {
- case '===': ret = a === b; break;
- case '!==': ret = a !== b; break;
+ case '===':
+ if (typeof a === 'object') a = a.version;
+ if (typeof b === 'object') b = b.version;
+ ret = a === b;
+ break;
+ case '!==':
+ if (typeof a === 'object') a = a.version;
+ if (typeof b === 'object') b = b.version;
+ ret = a !== b;
+ break;
case '': case '=': case '==': ret = eq(a, b, loose); break;
case '!=': ret = neq(a, b, loose); break;
case '>': ret = gt(a, b, loose); break;
@@ -537,6 +568,8 @@ function Comparator(comp, loose) {
this.value = '';
else
this.value = this.operator + this.semver.version;
+
+ ;
}
var ANY = {};
@@ -548,24 +581,14 @@ Comparator.prototype.parse = function(comp) {
throw new TypeError('Invalid comparator: ' + comp);
this.operator = m[1];
+ if (this.operator === '=')
+ this.operator = '';
+
// if it literally is just '>' or '' then allow anything.
if (!m[2])
this.semver = ANY;
- else {
+ else
this.semver = new SemVer(m[2], this.loose);
-
- // <1.2.3-rc DOES allow 1.2.3-beta (has prerelease)
- // >=1.2.3 DOES NOT allow 1.2.3-beta
- // <=1.2.3 DOES allow 1.2.3-beta
- // However, <1.2.3 does NOT allow 1.2.3-beta,
- // even though `1.2.3-beta < 1.2.3`
- // The assumption is that the 1.2.3 version has something you
- // *don't* want, so we push the prerelease down to the minimum.
- if (this.operator === '<' && !this.semver.prerelease.length) {
- this.semver.prerelease = ['0'];
- this.semver.format();
- }
- }
};
Comparator.prototype.inspect = function() {
@@ -578,8 +601,14 @@ Comparator.prototype.toString = function() {
Comparator.prototype.test = function(version) {
;
- return (this.semver === ANY) ? true :
- cmp(version, this.operator, this.semver, this.loose);
+
+ if (this.semver === ANY)
+ return true;
+
+ if (typeof version === 'string')
+ version = new SemVer(version, this.loose);
+
+ return cmp(version, this.operator, this.semver, this.loose);
};
@@ -716,20 +745,20 @@ function replaceTilde(comp, loose) {
if (isX(M))
ret = '';
else if (isX(m))
- ret = '>=' + M + '.0.0-0 <' + (+M + 1) + '.0.0-0';
+ ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0';
else if (isX(p))
// ~1.2 == >=1.2.0- <1.3.0-
- ret = '>=' + M + '.' + m + '.0-0 <' + M + '.' + (+m + 1) + '.0-0';
+ ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0';
else if (pr) {
;
if (pr.charAt(0) !== '-')
pr = '-' + pr;
ret = '>=' + M + '.' + m + '.' + p + pr +
- ' <' + M + '.' + (+m + 1) + '.0-0';
+ ' <' + M + '.' + (+m + 1) + '.0';
} else
- // ~1.2.3 == >=1.2.3-0 <1.3.0-0
- ret = '>=' + M + '.' + m + '.' + p + '-0' +
- ' <' + M + '.' + (+m + 1) + '.0-0';
+ // ~1.2.3 == >=1.2.3 <1.3.0
+ ret = '>=' + M + '.' + m + '.' + p +
+ ' <' + M + '.' + (+m + 1) + '.0';
;
return ret;
@@ -749,6 +778,7 @@ function replaceCarets(comp, loose) {
}
function replaceCaret(comp, loose) {
+ ;
var r = loose ? re[CARETLOOSE] : re[CARET];
return comp.replace(r, function(_, M, m, p, pr) {
;
@@ -757,35 +787,38 @@ function replaceCaret(comp, loose) {
if (isX(M))
ret = '';
else if (isX(m))
- ret = '>=' + M + '.0.0-0 <' + (+M + 1) + '.0.0-0';
+ ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0';
else if (isX(p)) {
if (M === '0')
- ret = '>=' + M + '.' + m + '.0-0 <' + M + '.' + (+m + 1) + '.0-0';
+ ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0';
else
- ret = '>=' + M + '.' + m + '.0-0 <' + (+M + 1) + '.0.0-0';
+ ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0';
} else if (pr) {
;
if (pr.charAt(0) !== '-')
pr = '-' + pr;
if (M === '0') {
if (m === '0')
- ret = '=' + M + '.' + m + '.' + p + pr;
+ ret = '>=' + M + '.' + m + '.' + p + pr +
+ ' <' + M + '.' + m + '.' + (+p + 1);
else
ret = '>=' + M + '.' + m + '.' + p + pr +
- ' <' + M + '.' + (+m + 1) + '.0-0';
+ ' <' + M + '.' + (+m + 1) + '.0';
} else
ret = '>=' + M + '.' + m + '.' + p + pr +
- ' <' + (+M + 1) + '.0.0-0';
+ ' <' + (+M + 1) + '.0.0';
} else {
+ ;
if (M === '0') {
if (m === '0')
- ret = '=' + M + '.' + m + '.' + p;
+ ret = '>=' + M + '.' + m + '.' + p +
+ ' <' + M + '.' + m + '.' + (+p + 1);
else
- ret = '>=' + M + '.' + m + '.' + p + '-0' +
- ' <' + M + '.' + (+m + 1) + '.0-0';
+ ret = '>=' + M + '.' + m + '.' + p +
+ ' <' + M + '.' + (+m + 1) + '.0';
} else
- ret = '>=' + M + '.' + m + '.' + p + '-0' +
- ' <' + (+M + 1) + '.0.0-0';
+ ret = '>=' + M + '.' + m + '.' + p +
+ ' <' + (+M + 1) + '.0.0';
}
;
@@ -814,7 +847,7 @@ function replaceXRange(comp, loose) {
gtlt = '';
if (gtlt && anyX) {
- // replace X with 0, and then append the -0 min-prerelease
+ // replace X with 0
if (xM)
M = 0;
if (xm)
@@ -823,9 +856,9 @@ function replaceXRange(comp, loose) {
p = 0;
if (gtlt === '>') {
- // >1 => >=2.0.0-0
- // >1.2 => >=1.3.0-0
- // >1.2.3 => >= 1.2.4-0
+ // >1 => >=2.0.0
+ // >1.2 => >=1.3.0
+ // >1.2.3 => >= 1.2.4
gtlt = '>=';
if (xM) {
// no change
@@ -840,17 +873,14 @@ function replaceXRange(comp, loose) {
}
- ret = gtlt + M + '.' + m + '.' + p + '-0';
+ ret = gtlt + M + '.' + m + '.' + p;
} else if (xM) {
// allow any
ret = '*';
} else if (xm) {
- // append '-0' onto the version, otherwise
- // '1.x.x' matches '2.0.0-beta', since the tag
- // *lowers* the version value
- ret = '>=' + M + '.0.0-0 <' + (+M + 1) + '.0.0-0';
+ ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0';
} else if (xp) {
- ret = '>=' + M + '.' + m + '.0-0 <' + M + '.' + (+m + 1) + '.0-0';
+ ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0';
}
;
@@ -869,9 +899,9 @@ function replaceStars(comp, loose) {
// This function is passed to string.replace(re[HYPHENRANGE])
// M, m, patch, prerelease, build
-// 1.2 - 3.4.5 => >=1.2.0-0 <=3.4.5
-// 1.2.3 - 3.4 => >=1.2.0-0 <3.5.0-0 Any 3.4.x will do
-// 1.2 - 3.4 => >=1.2.0-0 <3.5.0-0
+// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
+// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do
+// 1.2 - 3.4 => >=1.2.0 <3.5.0
function hyphenReplace($0,
from, fM, fm, fp, fpr, fb,
to, tM, tm, tp, tpr, tb) {
@@ -879,18 +909,18 @@ function hyphenReplace($0,
if (isX(fM))
from = '';
else if (isX(fm))
- from = '>=' + fM + '.0.0-0';
+ from = '>=' + fM + '.0.0';
else if (isX(fp))
- from = '>=' + fM + '.' + fm + '.0-0';
+ from = '>=' + fM + '.' + fm + '.0';
else
from = '>=' + from;
if (isX(tM))
to = '';
else if (isX(tm))
- to = '<' + (+tM + 1) + '.0.0-0';
+ to = '<' + (+tM + 1) + '.0.0';
else if (isX(tp))
- to = '<' + tM + '.' + (+tm + 1) + '.0-0';
+ to = '<' + tM + '.' + (+tm + 1) + '.0';
else if (tpr)
to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr;
else
@@ -904,6 +934,10 @@ function hyphenReplace($0,
Range.prototype.test = function(version) {
if (!version)
return false;
+
+ if (typeof version === 'string')
+ version = new SemVer(version, this.loose);
+
for (var i = 0; i < this.set.length; i++) {
if (testSet(this.set[i], version))
return true;
@@ -916,6 +950,31 @@ function testSet(set, version) {
if (!set[i].test(version))
return false;
}
+
+ if (version.prerelease.length) {
+ // Find the set of versions that are allowed to have prereleases
+ // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0
+ // That should allow `1.2.3-pr.2` to pass.
+ // However, `1.2.4-alpha.notready` should NOT be allowed,
+ // even though it's within the range set by the comparators.
+ for (var i = 0; i < set.length; i++) {
+ ;
+ if (set[i].semver === ANY)
+ return true;
+
+ if (set[i].semver.prerelease.length > 0) {
+ var allowed = set[i].semver;
+ if (allowed.major === version.major &&
+ allowed.minor === version.minor &&
+ allowed.patch === version.patch)
+ return true;
+ }
+ }
+
+ // Version has a -pre, but it's not one of the ones we like.
+ return false;
+ }
+
return true;
}