UNPKG

@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
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()}}); } }); } };