feat: no unstable versions
Node.js CI / CI (push) Failing after 7s
Security Scan and Upload / Security & DefectDojo Upload (push) Successful in 1m2s

This commit is contained in:
2026-02-03 19:07:14 -08:00
parent bc572cdf76
commit a1bb6b791c
2 changed files with 44 additions and 0 deletions
+7
View File
@@ -6,6 +6,7 @@
import { Logger } from "@nhcarrigan/logger";
import axios, { isAxiosError, type AxiosInstance } from "axios";
import semver from "semver";
import { config } from "../config.js";
import type { NpmPackageInfo } from "../types/package.types.js";
@@ -164,6 +165,12 @@ class NpmService {
const versions = Object.keys(packageInfo.versions);
const matureVersions = versions.filter((version) => {
// Skip prerelease versions (e.g., 1.0.0-rc.1, 1.0.0-alpha, 1.0.0-beta.2)
const prereleaseComponents = semver.prerelease(version);
if (prereleaseComponents !== null && prereleaseComponents.length > 0) {
return false;
}
const publishedAt = packageInfo.time[version];
if (publishedAt === undefined) {
return false;
+37
View File
@@ -429,4 +429,41 @@ describe("npmService", () => {
const resultCustom = NpmService.getLatestMatureVersion(packageInfo, 3);
expect(resultCustom).toBe("2.0.0");
});
it("should skip prerelease versions like rc, alpha, beta", () => {
expect.assertions(1);
const oldDate = getDaysAgoIso(15);
const packageInfo = {
"dist-tags": { latest: "3.0.0-rc.1" },
"name": "test-package",
"time": {
"2.0.0": oldDate,
"3.0.0-alpha": oldDate,
"3.0.0-beta.1": oldDate,
"3.0.0-rc.1": oldDate,
},
"versions": {
"2.0.0": { version: "2.0.0" },
"3.0.0-alpha": { version: "3.0.0-alpha" },
"3.0.0-beta.1": { version: "3.0.0-beta.1" },
"3.0.0-rc.1": { version: "3.0.0-rc.1" },
},
};
// Should return 2.0.0 since all 3.0.0 versions are prereleases
const result = NpmService.getLatestMatureVersion(packageInfo);
expect(result).toBe("2.0.0");
});
it("should return null when only prerelease versions exist", () => {
expect.assertions(1);
const oldDate = getDaysAgoIso(15);
const packageInfo = {
"dist-tags": { latest: "1.0.0-rc.1" },
"name": "test-package",
"time": { "1.0.0-rc.1": oldDate },
"versions": { "1.0.0-rc.1": { version: "1.0.0-rc.1" } },
};
const result = NpmService.getLatestMatureVersion(packageInfo);
expect(result).toBeNull();
});
});