Skip to content

Commit 945bc1c

Browse files
committed
fix(winget): use semver.order for version sorting
Replace localeCompare with Bun.semver.order for semantically correct version ordering across packages, versions, and search results.
1 parent f965686 commit 945bc1c

4 files changed

Lines changed: 8 additions & 4 deletions

File tree

server/routes/api/winget/packageManifests/[id].ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { semver } from "bun";
12
import { parseYAML } from "confbox";
23
import { defineRouteMeta } from "nitro";
34
import { defineHandler, getQuery, getRouterParam } from "nitro/h3";
@@ -95,7 +96,7 @@ export default defineHandler(async (event: H3Event) => {
9596
}
9697

9798
// Build manifest for all versions (sorted descending)
98-
const sortedVersions = Array.from(versions).sort().reverse();
99+
const sortedVersions = Array.from(versions).sort((a, b) => semver.order(b, a));
99100
const manifestVersions: VersionManifest[] = [];
100101

101102
await Promise.allSettled(

server/routes/api/winget/packages.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { semver } from "bun";
12
import { defineRouteMeta } from "nitro";
23
import { defineHandler, getQuery } from "nitro/h3";
34

@@ -69,7 +70,7 @@ export default defineHandler(async (event) => {
6970
const packages: WinGetPackage[] = Array.from(packageIndex.entries())
7071
.map(([packageId, versions]) => ({
7172
PackageIdentifier: packageId,
72-
Versions: Array.from(versions).sort().reverse(),
73+
Versions: Array.from(versions).sort((a, b) => semver.order(b, a)),
7374
}))
7475
.sort((a, b) => a.PackageIdentifier.localeCompare(b.PackageIdentifier));
7576

server/routes/api/winget/packages/[id]/versions.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { semver } from "bun";
12
import { parseYAML } from "confbox";
23
import { defineRouteMeta } from "nitro";
34
import { defineHandler, getRouterParam } from "nitro/h3";
@@ -73,7 +74,7 @@ export default defineHandler(async (event) => {
7374
return createWinGetError(event, 404, `Package '${packageId}' not found`);
7475
}
7576

76-
const sortedVersions = Array.from(versions).sort().reverse();
77+
const sortedVersions = Array.from(versions).sort((a, b) => semver.order(b, a));
7778

7879
// For each version, fetch the version manifest to get DefaultLocale and Channel
7980
const manifestPromises = sortedVersions.map(async (version) => {

server/utils/winget.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { Database } from "bun:sqlite";
22

3+
import { semver } from "bun";
34
import { unzipSync } from "fflate";
45
import { type H3Event } from "nitro/h3";
56

@@ -602,7 +603,7 @@ export function searchPackages(
602603
// Build response, sort versions descending per package
603604
const results: ManifestSearchResponse[] = [];
604605
for (const [id, data] of packageMap.entries()) {
605-
data.versions.sort((a, b) => b.PackageVersion.localeCompare(a.PackageVersion));
606+
data.versions.sort((a, b) => semver.order(b.PackageVersion, a.PackageVersion));
606607
results.push({
607608
PackageIdentifier: id,
608609
PackageName: data.name,

0 commit comments

Comments
 (0)