feat: add "lts" version option (#97)

(cherry picked from commit a1496dd8d9)
This commit is contained in:
Sebastian
2025-05-12 18:23:36 +02:00
committed by Leo Kettmeir
parent d74ee56ed6
commit db3496c46a
6 changed files with 52 additions and 4 deletions

View File

@@ -9,12 +9,12 @@ const GIT_HASH_RE = /^[0-9a-fA-F]{40}$/;
export interface VersionRange {
range: string;
kind: "canary" | "rc" | "stable";
kind: "canary" | "rc" | "stable" | "lts";
}
export interface Version {
version: string;
kind: "canary" | "rc" | "stable";
kind: "canary" | "rc" | "stable" | "lts";
}
/** Parses the version from the user into a structure */
@@ -36,6 +36,10 @@ export function parseVersionRange(
return { range: "latest", kind: "stable" };
}
if (version === "lts") {
return { range: "latest", kind: "lts" };
}
if (GIT_HASH_RE.test(version)) {
return { range: version, kind: "canary" };
}
@@ -82,6 +86,8 @@ export function resolveVersion(
} else if (kind === "rc") {
// range is always "latest"
return resolveReleaseCandidate();
} else if (kind === "lts") {
return resolveLTS();
} else {
return resolveRelease(range);
}
@@ -120,6 +126,22 @@ async function resolveReleaseCandidate(): Promise<Version | null> {
return { version, kind: "rc" };
}
async function resolveLTS(): Promise<Version | null> {
const res = await fetchWithRetries(
"https://dl.deno.land/release-lts-latest.txt",
);
if (res.status !== 200) {
throw new Error(
"Failed to fetch LTS version info from dl.deno.land. Please try again later.",
);
}
const version = semver.clean((await res.text()).trim());
if (version === null) {
throw new Error("Failed to parse LTS version.");
}
return { version, kind: "lts" };
}
async function resolveRelease(range: string): Promise<Version | null> {
if (range === "latest") {
const res = await fetchWithRetries(