From 50972713a30e4725e53d082fc2f53afd8e4c59e2 Mon Sep 17 00:00:00 2001 From: Arunavo Ray Date: Tue, 17 Jun 2025 15:11:05 +0530 Subject: [PATCH] refactor: improve version comparison logic in health API --- src/pages/api/health.ts | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/pages/api/health.ts b/src/pages/api/health.ts index f94404c..82c7fc6 100644 --- a/src/pages/api/health.ts +++ b/src/pages/api/health.ts @@ -58,7 +58,7 @@ export const GET: APIRoute = async () => { latestVersion: latestVersion, updateAvailable: latestVersion !== "unknown" && currentVersion !== "unknown" && - latestVersion !== currentVersion, + compareVersions(currentVersion, latestVersion) < 0, database: dbStatus, recovery: recoveryStatus, system: systemInfo, @@ -174,6 +174,28 @@ function formatBytes(bytes: number): string { return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]; } +/** + * Compare semantic versions + * Returns: + * -1 if v1 < v2 + * 0 if v1 = v2 + * 1 if v1 > v2 + */ +function compareVersions(v1: string, v2: string): number { + const parts1 = v1.split('.').map(Number); + const parts2 = v2.split('.').map(Number); + + for (let i = 0; i < Math.max(parts1.length, parts2.length); i++) { + const part1 = parts1[i] || 0; + const part2 = parts2[i] || 0; + + if (part1 < part2) return -1; + if (part1 > part2) return 1; + } + + return 0; +} + /** * Check for the latest version from GitHub releases */