all-node-versions
Version:
List all available Node.js versions
57 lines (41 loc) • 1.28 kB
JavaScript
import{env}from"node:process";
import{handleOfflineError}from"./cache/offline.js";
import{readCachedVersions,writeCachedVersions}from"./cache/read.js";
import{fetchIndex}from"./fetch.js";
import{normalizeIndex}from"./normalize.js";
import{getOpts}from"./options.js";
const allNodeVersions=async(opts)=>{
const{fetchOpt,fetchNodeOpts}=getOpts(opts);
const versionsInfo=await getAllVersions(fetchOpt,fetchNodeOpts);
return structuredClone(versionsInfo)
};
export default allNodeVersions;
const getAllVersions=async(fetchOpt,fetchNodeOpts)=>{
if(
processCachedVersions!==undefined&&
fetchOpt!==true&&
!env.TEST_CACHE_FILENAME)
{
return processCachedVersions
}
const versionsInfo=await getVersionsInfo(fetchOpt,fetchNodeOpts);
processCachedVersions=versionsInfo;
return versionsInfo
};
let processCachedVersions;
const getVersionsInfo=async(fetchOpt,fetchNodeOpts)=>{
const cachedVersions=await readCachedVersions(fetchOpt);
return cachedVersions===undefined?
await getNewVersionsInfo(fetchNodeOpts):
cachedVersions
};
const getNewVersionsInfo=async(fetchNodeOpts)=>{
try{
const index=await fetchIndex(fetchNodeOpts);
const versionsInfo=normalizeIndex(index);
await writeCachedVersions(versionsInfo);
return versionsInfo
}catch(error){
return handleOfflineError(error)
}
};