Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/npm/cli.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorisaacs <i@izs.me>2013-08-03 00:31:17 +0400
committerisaacs <i@izs.me>2013-08-03 00:31:17 +0400
commitf369647b00d5f9599046396c1721ca49bf1689ff (patch)
treef132b65028d50019661fb531b8f4bfac6e8a2884 /node_modules/semver/semver.js
parentd1f4897a3b2be2e598e363fe5403355c69472c53 (diff)
Bump all deps
Diffstat (limited to 'node_modules/semver/semver.js')
-rw-r--r--node_modules/semver/semver.js72
1 files changed, 70 insertions, 2 deletions
diff --git a/node_modules/semver/semver.js b/node_modules/semver/semver.js
index 28fa1c03b..5445fc170 100644
--- a/node_modules/semver/semver.js
+++ b/node_modules/semver/semver.js
@@ -161,14 +161,29 @@ var LONETILDE = R++;
src[LONETILDE] = '(?:~>?)';
var TILDETRIM = R++;
-src[TILDETRIM] = src[LONETILDE] + '\\s+';
-var tildeTrimReplace = '~';
+src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+';
+re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g');
+var tildeTrimReplace = '$1~';
var TILDE = R++;
src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$';
var TILDELOOSE = R++;
src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$';
+// Caret ranges.
+// Meaning is "at least and backwards compatible with"
+var LONECARET = R++;
+src[LONECARET] = '(?:\\^)';
+
+var CARETTRIM = R++;
+src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+';
+re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g');
+var caretTrimReplace = '$1^';
+
+var CARET = R++;
+src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$';
+var CARETLOOSE = R++;
+src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$';
// A simple gt/lt/eq thing, or just "" to indicate "any version"
var COMPARATORLOOSE = R++;
@@ -602,6 +617,9 @@ Range.prototype.parseRange = function(range) {
// `~ 1.2.3` => `~1.2.3`
range = range.replace(re[TILDETRIM], tildeTrimReplace);
+ // `^ 1.2.3` => `^1.2.3`
+ range = range.replace(re[CARETTRIM], caretTrimReplace);
+
// normalize spaces
range = range.split(/\s+/).join(' ');
@@ -640,6 +658,8 @@ function toComparators(range, loose) {
// turn into a set of JUST comparators.
function parseComparator(comp, loose) {
debug('comp', comp);
+ comp = replaceCarets(comp, loose);
+ debug('caret', comp);
comp = replaceTildes(comp, loose);
debug('tildes', comp);
comp = replaceXRanges(comp, loose);
@@ -694,6 +714,54 @@ function replaceTilde(comp, loose) {
});
}
+// ^ --> * (any, kinda silly)
+// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0
+// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0
+// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0
+// ^1.2.3 --> >=1.2.3 <2.0.0
+// ^1.2.0 --> >=1.2.0 <2.0.0
+function replaceCarets(comp, loose) {
+ return comp.trim().split(/\s+/).map(function(comp) {
+ return replaceCaret(comp, loose);
+ }).join(' ');
+}
+
+function replaceCaret(comp, loose) {
+ var r = loose ? re[CARETLOOSE] : re[CARET];
+ return comp.replace(r, function(_, M, m, p, pr) {
+ debug('caret', comp, _, M, m, p, pr);
+ var ret;
+
+ if (isX(M))
+ ret = '';
+ else if (isX(m))
+ ret = '>=' + M + '.0.0-0 <' + (+M + 1) + '.0.0-0';
+ else if (isX(p))
+ if (M === '0') ret = '>=' + M + '.' + m + '.0-0 <' + M + '.' + (+m + 1) + '.0-0';
+ else ret = '>=' + M + '.' + m + '.0-0 <' + (+M + 1) + '.0.0-0';
+ else if (pr) {
+ debug('replaceCaret pr', pr);
+ if (pr.charAt(0) !== '-')
+ pr = '-' + pr;
+ if (M === '0')
+ if (m === '0') ret = '=' + M + '.' + m + '.' + p + pr;
+ else ret = '>=' + M + '.' + m + '.' + p + pr +
+ ' <' + M + '.' + (+m + 1) + '.0-0';
+ else ret = '>=' + M + '.' + m + '.' + p + pr +
+ ' <' + (+M + 1) + '.0.0-0';
+ } else
+ if (M === '0')
+ if (m === '0') ret = '=' + M + '.' + m + '.' + p;
+ else ret = '>=' + M + '.' + m + '.' + p + '-0' +
+ ' <' + M + '.' + (+m + 1) + '.0-0';
+ else ret = '>=' + M + '.' + m + '.' + p + '-0' +
+ ' <' + (+M + 1) + '.0.0-0';
+
+ debug('caret return', ret);
+ return ret;
+ });
+}
+
function replaceXRanges(comp, loose) {
debug('replaceXRanges', comp, loose);
return comp.split(/\s+/).map(function(comp) {