Leo Lamprecht
8 years ago
3 changed files with 12 additions and 101 deletions
@ -1,97 +0,0 @@ |
|||||
// Packages
|
|
||||
const ms = require('ms') |
|
||||
const fetch = require('node-fetch') |
|
||||
const chalk = require('chalk') |
|
||||
const compare = require('semver-compare') |
|
||||
|
|
||||
// Ours
|
|
||||
const pkg = require('../package') |
|
||||
|
|
||||
const isTTY = process.stdout.isTTY |
|
||||
|
|
||||
// if we're not in a tty the update checker
|
|
||||
// will always return a resolved promise
|
|
||||
const resolvedPromise = new Promise(resolve => resolve()) |
|
||||
|
|
||||
/** |
|
||||
* Configures auto updates. |
|
||||
* Sets up a `exit` listener to report them. |
|
||||
*/ |
|
||||
|
|
||||
function checkUpdate(opts = {}) { |
|
||||
if (!isTTY) { |
|
||||
// don't attempt to check for updates
|
|
||||
// if the user is piping or redirecting
|
|
||||
return resolvedPromise |
|
||||
} |
|
||||
|
|
||||
let updateData |
|
||||
|
|
||||
const update = check(opts).then(data => { |
|
||||
updateData = data |
|
||||
|
|
||||
// forces the `exit` event upon Ctrl + C
|
|
||||
process.on('SIGINT', () => { |
|
||||
// clean up output after ^C
|
|
||||
process.stdout.write('\n') |
|
||||
process.exit(1) |
|
||||
}) |
|
||||
}, err => console.error(err.stack)) |
|
||||
|
|
||||
process.on('exit', () => { |
|
||||
if (updateData) { |
|
||||
const {current, latest, at} = updateData |
|
||||
const ago = ms(Date.now() - at) |
|
||||
console.log(`> ${chalk.white.bgRed('UPDATE NEEDED')} ` + |
|
||||
`Current: ${current} – ` + |
|
||||
`Latest ${chalk.bold(latest)} (released ${ago} ago)`) |
|
||||
console.log('> Run `npm install -g now` to update') |
|
||||
} |
|
||||
}) |
|
||||
|
|
||||
return update |
|
||||
} |
|
||||
|
|
||||
function check({debug = false}) { |
|
||||
return new Promise(resolve => { |
|
||||
if (debug) { |
|
||||
console.log('> [debug] Checking for updates.') |
|
||||
} |
|
||||
|
|
||||
fetch('https://registry.npmjs.org/now').then(res => { |
|
||||
if (res.status !== 200) { |
|
||||
if (debug) { |
|
||||
console.log(`> [debug] Update check error. NPM ${res.status}.`) |
|
||||
} |
|
||||
|
|
||||
resolve(false) |
|
||||
return |
|
||||
} |
|
||||
|
|
||||
res.json().then(data => { |
|
||||
const {latest} = data['dist-tags'] |
|
||||
const current = pkg.version |
|
||||
|
|
||||
if (compare(latest, pkg.version) === 1) { |
|
||||
if (debug) { |
|
||||
console.log(`> [debug] Needs update. Current ${current}, latest ${latest}`) |
|
||||
} |
|
||||
|
|
||||
resolve({ |
|
||||
latest, |
|
||||
current, |
|
||||
at: new Date(data.time[latest]) |
|
||||
}) |
|
||||
} else { |
|
||||
if (debug) { |
|
||||
console.log(`> [debug] Up to date (${pkg.version}).`) |
|
||||
} |
|
||||
|
|
||||
resolve(false) |
|
||||
} |
|
||||
}, () => resolve(false)) |
|
||||
}, () => resolve(false)) |
|
||||
}) |
|
||||
} |
|
||||
|
|
||||
module.exports = checkUpdate |
|
Loading…
Reference in new issue