You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
4.1 KiB
136 lines
4.1 KiB
// Generated by CoffeeScript 1.4.0
|
|
(function() {
|
|
var balUtilCompare, balUtilPaths;
|
|
|
|
balUtilCompare = null;
|
|
|
|
balUtilPaths = require(__dirname + '/paths');
|
|
|
|
balUtilCompare = {
|
|
versionCompare: function(v1, operator, v2) {
|
|
var compare, i, numVersion, prepVersion, result, vm, x, _i;
|
|
i = x = compare = 0;
|
|
vm = {
|
|
'dev': -6,
|
|
'alpha': -5,
|
|
'a': -5,
|
|
'beta': -4,
|
|
'b': -4,
|
|
'RC': -3,
|
|
'rc': -3,
|
|
'#': -2,
|
|
'p': -1,
|
|
'pl': -1
|
|
};
|
|
prepVersion = function(v) {
|
|
v = ('' + v).replace(/[_\-+]/g, '.');
|
|
v = v.replace(/([^.\d]+)/g, '.$1.').replace(/\.{2,}/g, '.');
|
|
if (!v.length) {
|
|
return [-8];
|
|
} else {
|
|
return v.split('.');
|
|
}
|
|
};
|
|
numVersion = function(v) {
|
|
if (!v) {
|
|
return 0;
|
|
} else {
|
|
if (isNaN(v)) {
|
|
return vm[v] || -7;
|
|
} else {
|
|
return parseInt(v, 10);
|
|
}
|
|
}
|
|
};
|
|
v1 = prepVersion(v1);
|
|
v2 = prepVersion(v2);
|
|
x = Math.max(v1.length, v2.length);
|
|
for (i = _i = 0; 0 <= x ? _i <= x : _i >= x; i = 0 <= x ? ++_i : --_i) {
|
|
if (v1[i] === v2[i]) {
|
|
continue;
|
|
}
|
|
v1[i] = numVersion(v1[i]);
|
|
v2[i] = numVersion(v2[i]);
|
|
if (v1[i] < v2[i]) {
|
|
compare = -1;
|
|
break;
|
|
} else if (v1[i] > v2[i]) {
|
|
compare = 1;
|
|
break;
|
|
}
|
|
}
|
|
if (!operator) {
|
|
return compare;
|
|
}
|
|
result = (function() {
|
|
switch (operator) {
|
|
case '>':
|
|
case 'gt':
|
|
return compare > 0;
|
|
case '>=':
|
|
case 'ge':
|
|
return compare >= 0;
|
|
case '<=':
|
|
case 'le':
|
|
return compare <= 0;
|
|
case '==':
|
|
case '=':
|
|
case 'eq':
|
|
case 'is':
|
|
return compare === 0;
|
|
case '<>':
|
|
case '!=':
|
|
case 'ne':
|
|
case 'isnt':
|
|
return compare !== 0;
|
|
case '':
|
|
case '<':
|
|
case 'lt':
|
|
return compare < 0;
|
|
default:
|
|
return null;
|
|
}
|
|
})();
|
|
return result;
|
|
},
|
|
packageCompare: function(_arg) {
|
|
var details, errorCallback, local, newVersionCallback, oldVersionCallback, remote, runCompare, sameVersionCallback;
|
|
local = _arg.local, remote = _arg.remote, newVersionCallback = _arg.newVersionCallback, sameVersionCallback = _arg.sameVersionCallback, oldVersionCallback = _arg.oldVersionCallback, errorCallback = _arg.errorCallback;
|
|
details = {};
|
|
runCompare = function() {
|
|
if (balUtilCompare.versionCompare(details.local.version, '<', details.remote.version)) {
|
|
return typeof newVersionCallback === "function" ? newVersionCallback(details) : void 0;
|
|
} else if (balUtilCompare.versionCompare(details.local.version, '==', details.remote.version)) {
|
|
return typeof sameVersionCallback === "function" ? sameVersionCallback(details) : void 0;
|
|
} else if (balUtilCompare.versionCompare(details.local.version, '>', details.remote.version)) {
|
|
return typeof oldVersionCallback === "function" ? oldVersionCallback(details) : void 0;
|
|
}
|
|
};
|
|
balUtilPaths.readPath(local, function(err, data) {
|
|
if (err) {
|
|
return typeof errorCallback === "function" ? errorCallback(err, data) : void 0;
|
|
}
|
|
try {
|
|
details.local = JSON.parse(data.toString());
|
|
} catch (err) {
|
|
return typeof errorCallback === "function" ? errorCallback(err, data) : void 0;
|
|
}
|
|
return balUtilPaths.readPath(remote, function(err, data) {
|
|
if (err) {
|
|
return typeof errorCallback === "function" ? errorCallback(err, data) : void 0;
|
|
}
|
|
try {
|
|
details.remote = JSON.parse(data.toString());
|
|
} catch (err) {
|
|
return typeof errorCallback === "function" ? errorCallback(err, data) : void 0;
|
|
}
|
|
return runCompare();
|
|
});
|
|
});
|
|
return this;
|
|
}
|
|
};
|
|
|
|
module.exports = balUtilCompare;
|
|
|
|
}).call(this);
|