all-node-versions
Version:
List all available Node.js versions
54 lines (35 loc) • 1.12 kB
JavaScript
import semver from"semver";
import{groupBy}from"./group.js";
export const normalizeIndex=(index)=>{
const indexItems=index.map(normalizeVersion);
const versions=getAllVersions(indexItems);
const majors=getMajors(indexItems);
return{versions,majors}
};
const normalizeVersion=({version,lts,npm})=>{
const versionA=version.slice(1);
const major=semver.major(versionA);
return{version:versionA,major,lts,npm}
};
const getAllVersions=(indexItems)=>indexItems.map(getVersionField);
const getVersionField=({version,npm})=>({node:version,npm});
const getMajors=(indexItems)=>{
const groups=groupBy(indexItems,"major");
return Object.values(groups).map(getMajorInfo).sort(compareMajor)
};
const getMajorInfo=(versions)=>{
const[{major,version:latest}]=versions;
const lts=getLts(versions);
return{major,latest,...lts}
};
const getLts=(versions)=>{
const ltsVersion=versions.find(getLtsField);
if(ltsVersion===undefined){
return{}
}
const lts=ltsVersion.lts.toLowerCase();
return{lts}
};
const getLtsField=({lts})=>typeof lts==="string";
const compareMajor=({major:majorA},{major:majorB})=>
majorA<majorB?1:-1;