node-version-alias
Version:
Resolve Node.js version aliases like 'latest', 'lts' or 'erbium'
60 lines (35 loc) • 1.06 kB
JavaScript
import allNodeVersions from"all-node-versions";
export const getLtsAlias=async(alias,allNodeOpts)=>{
const ltsMajors=await getLtsMajors(allNodeOpts);
const major=getLtsMajor(alias,ltsMajors);
if(major===undefined){
return
}
return major.latest
};
export const getLtsMajors=async(allNodeOpts)=>{
const{majors}=await allNodeVersions(allNodeOpts);
return majors.filter(isLts)
};
const isLts=({lts})=>lts!==undefined;
const getLtsMajor=(alias,ltsMajors)=>{
if(LATEST_LTS.has(alias)){
return ltsMajors[0]
}
const major=getNumberedLts(alias,ltsMajors);
if(major!==undefined){
return major
}
return getNamedLts(alias,ltsMajors)
};
const LATEST_LTS=new Set(["lts","lts/*"]);
const getNumberedLts=(alias,ltsMajors)=>{
const result=NUMBER_LTS_REGEXP.exec(alias);
return result===null||result[1]==="0"?undefined:ltsMajors[result[1]]
};
const NUMBER_LTS_REGEXP=/^lts\/-(\d+)$/u;
const getNamedLts=(alias,ltsMajors)=>{
const name=alias.replace(LTS_PREFIX,"").toLowerCase();
return ltsMajors.find(({lts})=>lts===name)
};
const LTS_PREFIX="lts/";