dce-dev-wizard
Version:
Wizard for managing development apps at Harvard DCE.
48 lines (44 loc) • 1.58 kB
text/typescript
// Import shared types
import NodeVersionArray from '../types/NodeVersionArray';
/**
* Get the current LTS Node version from the Node.js website.
* @author Gabe Abrams
* @returns major version of Node.js (e.g. 22) or null if not found
*/
const getCurrentEvenLTSNodeVersion = async (): Promise<number | null> => {
// Get node versions
let nodeVersions: NodeVersionArray = [];
let retries = 3;
while (retries > 0) {
try {
const nodeVersionsResponse = await fetch('https://nodejs.org/download/release/index.json');
nodeVersions = await nodeVersionsResponse.json();
break;
} catch (error) {
retries -= 1;
if (retries === 0) {
throw error;
}
}
}
if (nodeVersions.length === 0) {
throw new Error('Unable to fetch Node.js versions from the Node.js website.');
}
let currentEvenMajorLTSVersion: number | null = null;
nodeVersions.forEach((version) => {
const versionParts = version.version.split('.');
const majorVersion = Number.parseInt(versionParts[0].replace('v', ''), 10);
const isEven = (majorVersion % 2 === 0);
const isLTS = (version.lts !== false);
if (isLTS && isEven) {
// Check if this is the first even major LTS version
// or if it's greater than the current one
if (!currentEvenMajorLTSVersion || majorVersion > currentEvenMajorLTSVersion) {
// Update the current even major LTS version
currentEvenMajorLTSVersion = majorVersion;
}
}
});
return currentEvenMajorLTSVersion;
};
export default getCurrentEvenLTSNodeVersion;