@tangelo/tangelo-configuration-toolkit
Version:
Tangelo Configuration Toolkit is a command-line toolkit which offers support for developing a Tangelo configuration.
42 lines (34 loc) • 1.73 kB
JavaScript
const {compare} = require('compare-versions');
const exec = require('util').promisify(require('child_process').exec);
const packages = {TCT: _package};
const doUpdateCheck = (pkg) => (
exec(`npm view -g ${packages[pkg].name} version`)
.then(r => {
const versionAvailable = r.stdout.match(/([\d/.]+)/)[1];
if (!packages[pkg].version) _warn(`${pkg} is not installed! Run ` + `npm i -g ${packages[pkg].name}`.white);
else if (compare(packages[pkg].version, versionAvailable, '<')) {
_appdata._update({[`updateCheck${pkg}`]: {executed: new Date(), versionAvailable}});
return versionAvailable;
}
else _appdata._update({[`updateCheck${pkg}`]: {executed: new Date()}});
return;
})
.catch(() => _warn(`Failed checking latest version of ${pkg}.`))
);
let checkUpdatesDone = false;
module.exports = function packageUpdateCheck () {
if (!checkUpdatesDone) { // check if updatecheck has ran before because async calls below trigger beforeExit again
checkUpdatesDone = true;
['TCT'].forEach(pkg => {
const updateMsg = (va) => `| Update ${pkg} to ${va} | ` + `npm i -g ${packages[pkg].name}`.white;
const {versionAvailable} = _appdata[`updateCheck${pkg}`] || {};
if (new Date() - new Date(_appdata[`updateCheck${pkg}`]?.executed || 0) > 1000*3600*24*1) { // check every day
doUpdateCheck(pkg).then(r => r && _warn(updateMsg(r)));
}
else if (versionAvailable) {
if (compare(packages[pkg].version, versionAvailable, '<')) _warn(updateMsg(versionAvailable));
else _appdata._update({[`updateCheck${pkg}`]: {executed: new Date()}});
}
});
}
};