UNPKG

@pagopa/dx-cli

Version:

A CLI useful to manage DX tools.

34 lines (33 loc) 1.15 kB
import * as assert from "node:assert/strict"; import semverParse from "semver/functions/parse.js"; import { z } from "zod/v4"; const nodeReleaseSchema = z.object({ lts: z.union([z.string(), z.boolean()]).nullable(), version: z.string(), }); export async function getLatestByCodename(codename) { const releases = await nodeReleases(); for (const release of releases) { if (release.lts === codename) { // throws if the version is invalid return semverParse(release.version, {}, true); } } throw new Error(`No LTS release found for codename: ${codename}`); } async function nodeReleases() { try { const response = await fetch("https://nodejs.org/dist/index.json"); assert.ok(response.ok, `Failed to fetch Node.js releases: ${response.statusText}`); const json = await response.json(); return z.array(nodeReleaseSchema).parse(json); } catch (err) { if (err instanceof z.ZodError) { throw new Error("Invalid data format for Node.js releases", { cause: err, }); } throw err; } }