paco
Version:
Node package development/distribution utility kit
94 lines (68 loc) • 2.98 kB
JavaScript
;
var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; })();
function _toArray(arr) { return Array.isArray(arr) ? arr : Array.from(arr); }
var exec = require('child_process').exec;
var colors = require('colors');
var Q = require('q');
var connectivity = require('./connectivity');
function parseVersion(ver) {
var _ver$split = ver.split('-');
var _ver$split2 = _toArray(_ver$split);
var numbers = _ver$split2[0];
var suffixes = _ver$split2.slice(1);
var _numbers$split$map = numbers.split('.').map(function (num) {
return parseInt(num);
});
var _numbers$split$map2 = _slicedToArray(_numbers$split$map, 3);
var major = _numbers$split$map2[0];
var minor = _numbers$split$map2[1];
var patch = _numbers$split$map2[2];
return { major: major, minor: minor, patch: patch };
}
function getVersionDiff(v1, v2) {
var ver1 = parseVersion(v1);
var ver2 = parseVersion(v2);
return {
major: ver2.major - ver1.major,
minor: ver2.minor - ver1.minor,
patch: ver2.patch - ver1.patch
};
}
function getLatestVersion() {
return Q.promise(function (resolve, reject) {
exec('npm view paco version', { encoding: 'utf-8' }, function (err, stdout) {
if (err) {
return reject(err);
}
resolve(stdout.trim());
});
});
}
function isOldVersion(v1, v2) {
var diff = getVersionDiff(v1, v2);
return diff.major > 0 || diff.minor >= 2;
}
function logOutdatedInfo(version, latest) {
var dot = '· '.red;
console.log(dot + '\n' + dot + 'Your version paco is becoming outdated:'.red + '\n' + dot + '\n' + dot + ' Your version: ' + version.yellow + '\n' + dot + ' Latest version: ' + latest.yellow + '\n' + dot + '\n' + dot + 'Run ' + '`npm i -g paco`'.bold + ' to update.\n' + dot + '\n');
}
module.exports.checkOutdatedVersion = function () {
return connectivity.hasInternetConnection().then(function (connected) {
if (!connected) {
return false;
}
var version = require('../../package.json').version;
return Q.any([getLatestVersion(), Q.delay(1000)]).then(function (latest) {
if (!latest) {
return false;
}
var isOutdated = isOldVersion(version, latest);
if (isOutdated) {
logOutdatedInfo(version, latest);
}
return true;
});
}).catch(function (err) {
return console.error(err);
});
};