nodengine
Version:
Node.js versions switcher based on engines at `package.json`.
47 lines (36 loc) • 1.34 kB
JavaScript
const pkg = require('../package.json')
const FIVE_DAYS_IN_MS = 1000 * 60 * 60 * 24 * 5
const Configstore = require('configstore')
const configName = 'update-notifier-' + pkg.name
const config = new Configstore(configName, { nodeVersions: [] })
const fetchCheckInterval = process.env.NODENGINE_INTERVAL || FIVE_DAYS_IN_MS
const { waterfall } = require('async')
const fetch = require('./fetch')
const has = array => array.length > 0
function loadConfig (cb) {
const tasks = [
function checkCache (next) {
const nodeVersions = config.get('nodeVersions')
const lastFetchCheck = config.get('lastFetchCheck')
const hasVersions = has(nodeVersions)
const now = Date.now()
const isCacheValid = now - lastFetchCheck < fetchCheckInterval
const falback = () => next(null, nodeVersions)
if (hasVersions && isCacheValid) return falback()
fetch((err, newNodeVersions) => {
if (err) {
// no internet!
if (err.code === 'ENOTFOUND') return falback()
return next(err)
}
if (has(newNodeVersions)) return falback()
config.set('nodeVersions', newNodeVersions)
config.set('lastFetchCheck', now)
return next(null, newNodeVersions)
})
}
]
return waterfall(tasks, cb)
}
module.exports = loadConfig