diff --git a/src/versions.ts b/src/versions.ts index 9360e3d..380b0e9 100644 --- a/src/versions.ts +++ b/src/versions.ts @@ -16,7 +16,9 @@ export const getLatestVersion = async (): Promise => { /** * Fetches the list of Biome versions from the npm registry. */ -export const getAllVersions = async (): Promise => { +export const getAllVersions = async ( + includePrereleases = true, +): Promise => { try { const response = await request( "https://registry.npmjs.org/@biomejs/biome", @@ -31,10 +33,18 @@ export const getAllVersions = async (): Promise => { const body = (await response.body.json()) as any; const unsortedVersions = Object.keys(body.versions).map((version) => { - return semver.coerce(version); + return semver.coerce(version, { includePrerelease: true }); }); - return rsort(unsortedVersions as SemVer[]).map( + const filteredVersions = unsortedVersions.filter((version) => { + if (!includePrereleases) { + return version?.prerelease.length === 0; + } + + return true; + }); + + return rsort(filteredVersions as SemVer[]).map( (version) => version.version, ); } catch { diff --git a/test/suites/detector.test.ts b/test/suites/detector.test.ts index b88f1ba..ec464a3 100644 --- a/test/suites/detector.test.ts +++ b/test/suites/detector.test.ts @@ -6,6 +6,7 @@ import { detectFromPackageJson, detectFromPnpmLockfile, detectFromYarnLockfile, + getAllVersions, } from "../../src"; const mocks = { diff --git a/test/suites/versions.test.ts b/test/suites/versions.test.ts new file mode 100644 index 0000000..a00ba06 --- /dev/null +++ b/test/suites/versions.test.ts @@ -0,0 +1,16 @@ +import { describe, expect, it } from "bun:test"; +import { getAllVersions } from "../../src"; + +describe("versions", () => { + it("does not return pre-release versions when specified", async () => { + const versions = await getAllVersions(false); + + expect(versions).not.toContain("1.8.4-nightly.a579bf7"); + }); + + it("returns pre-release versions when specified", async () => { + const versions = await getAllVersions(true); + + expect(versions).toContain("1.8.4-nightly.a579bf7"); + }); +});