generated from nhcarrigan/template
feat: no unstable versions
This commit is contained in:
@@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
import { Logger } from "@nhcarrigan/logger";
|
import { Logger } from "@nhcarrigan/logger";
|
||||||
import axios, { isAxiosError, type AxiosInstance } from "axios";
|
import axios, { isAxiosError, type AxiosInstance } from "axios";
|
||||||
|
import semver from "semver";
|
||||||
import { config } from "../config.js";
|
import { config } from "../config.js";
|
||||||
import type { NpmPackageInfo } from "../types/package.types.js";
|
import type { NpmPackageInfo } from "../types/package.types.js";
|
||||||
|
|
||||||
@@ -164,6 +165,12 @@ class NpmService {
|
|||||||
|
|
||||||
const versions = Object.keys(packageInfo.versions);
|
const versions = Object.keys(packageInfo.versions);
|
||||||
const matureVersions = versions.filter((version) => {
|
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];
|
const publishedAt = packageInfo.time[version];
|
||||||
if (publishedAt === undefined) {
|
if (publishedAt === undefined) {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -429,4 +429,41 @@ describe("npmService", () => {
|
|||||||
const resultCustom = NpmService.getLatestMatureVersion(packageInfo, 3);
|
const resultCustom = NpmService.getLatestMatureVersion(packageInfo, 3);
|
||||||
expect(resultCustom).toBe("2.0.0");
|
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();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user