ls-engines
Version:
Determine if your dependency graph's stated "engines" criteria is met.
24 lines (20 loc) • 601 B
JavaScript
;
const Semver = require('semver');
function isString(x) {
return typeof x === 'string';
}
module.exports = function getLatestMajors(versions, validRange = new Semver.Range('*')) {
const versionsByMajor = versions.reduce((map, v) => {
const major = Semver.major(v);
const key = major === 0 ? `${major}.${Semver.minor(v)}` : String(major);
if (!map[key]) {
map[key] = [];
}
map[key].push(v);
return map;
}, {});
return Object.values(versionsByMajor)
.map((vs) => Semver.maxSatisfying(vs, validRange))
.filter(isString)
.sort((a, b) => -Semver.compare(a, b));
};