UNPKG

nodejs-versions

Version:

Provides information about all NodeJs version and releases.

110 lines (85 loc) 2.78 kB
const { compareVersions } = require('compare-versions') const moment = require('moment') const cache = require('./utils/cache') const constants = require('./constants') const path = require('path') class VersionController { async formatData (version, date) { const data = await this.getAllVersionsInfo() if (!data) return {} const response = { release: [], latest: null, lts: [] } for (let i = 0; i < data.length; i++) { const current = data[i] const currentRelease = { version: current.version, date: current.date } if ((version && compareVersions(current.version, version) === 1) || (date && moment(currentRelease.date).isAfter(date))) { response.release.push(currentRelease) if (current.lts) { response.lts.push(currentRelease) } } } response.latest = response.release[0] response.latestLTS = response.lts[0] return response } async getAllVersionsInfo () { const filePath = process.env.NODE_ENV === 'test' ? path.join(__dirname, '../test/', `${constants.samplesDir}data.json`) : path.join(__dirname, '../', `${constants.cacheDir}allVersions.json`) const url = constants.urlReleases try { await cache.retrieveData(url, filePath) return process.env.NODEJS_VERSION_CACHE === 'file' ? require(filePath) : cache.inMemory[filePath] } catch (e) { console.error(e) return null } } async getAllVersions () { const data = await this.getAllVersionsInfo() const response = { release: [], latest: null, lts: [] } if (!data) return response for (let i = 0; i < data.length; i++) { const current = data[i] const currentRelease = { version: current.version, date: current.date } response.release.push(currentRelease) if (current.lts) { response.lts.push(currentRelease) } } response.latest = response.release[0] response.latestLTS = response.lts[0] return response } async getVersionsSinceDate (dateParam) { if (!dateParam) return console.warn('No date provided !') if (!moment(new Date(dateParam)).isValid()) return console.warn('Bad format date !') const date = moment(dateParam) return this.formatData(null, date) } async getVersionsSinceVersion (versionParam) { const version = versionParam ? versionParam.replace('v', '') : process.version return this.formatData(version) } async getLatest () { const res = await this.getAllVersions() return res.latest.version } async getLatestLTS () { const res = await this.getAllVersions() return res.latestLTS.version } } module.exports = new VersionController()