Skip to content

Commit 5130d6f

Browse files
fix: Sort package versions (#11284)
* fix: sort package versions * refactor: remove spaces --------- Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
1 parent 5dea946 commit 5130d6f

File tree

2 files changed

+60
-20
lines changed

2 files changed

+60
-20
lines changed

apps/website/src/util/fetchLatestVersion.ts

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,32 @@ export async function fetchLatestVersion(packageName: string): Promise<string> {
1818
}
1919

2020
try {
21-
const { result } = await client.d1.database.query(process.env.CF_D1_DOCS_ID!, {
21+
const data = await client.d1.database.query(process.env.CF_D1_DOCS_ID!, {
2222
account_id: process.env.CF_ACCOUNT_ID!,
23-
sql: `select version from documentation where name = ? and version != 'main' order by version desc limit 1;`,
23+
sql: `WITH parsed AS (
24+
SELECT
25+
version,
26+
CAST(substr(version, 1, instr(version, '.') - 1) AS INTEGER) AS major,
27+
substr(version, instr(version, '.') + 1) AS rest
28+
FROM documentation
29+
WHERE name = ? AND version != 'main'
30+
),
31+
parsed2 AS (
32+
SELECT
33+
version,
34+
major,
35+
CAST(substr(rest, 1, instr(rest, '.') - 1) AS INTEGER) AS minor,
36+
CAST(substr(rest, instr(rest, '.') + 1) AS INTEGER) AS patch
37+
FROM parsed
38+
)
39+
SELECT version
40+
FROM parsed2
41+
ORDER BY major DESC, minor DESC, patch DESC
42+
LIMIT 1;`,
2443
params: [packageName],
2544
});
2645

27-
return `${(result[0]?.results as { version: string }[] | undefined)?.[0]?.version ?? 'main'}${hasEntryPoints ? ['', ...DEFAULT_ENTRY_POINT].join('/') : ''}`;
46+
return `${((data.result[0]?.results ?? []) as { version: string }[])[0]?.version ?? 'main'}${hasEntryPoints ? ['', ...DEFAULT_ENTRY_POINT].join('/') : ''}`;
2847
} catch {
2948
return '';
3049
}

apps/website/src/util/fetchVersions.ts

Lines changed: 38 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,12 @@
1-
// import Cloudflare from 'cloudflare';
1+
import type Cloudflare from 'cloudflare';
22
import { ENV } from './env';
33

4-
// const client = new Cloudflare({
5-
// apiToken: process.env.CF_D1_DOCS_API_KEY,
6-
// });
7-
84
export async function fetchVersions(packageName: string) {
95
if (ENV.IS_LOCAL_DEV) {
106
return [{ version: 'main' }];
117
}
128

139
try {
14-
// const { result } = await client.d1.database.query(process.env.CF_D1_DOCS_ID!, {
15-
// account_id: process.env.CF_ACCOUNT_ID!,
16-
// sql: `select version from documentation where name = ? order by version desc;`,
17-
// params: [packageName],
18-
// });
19-
20-
// return (result[0]?.results as { version: string }[] | undefined) ?? [];
21-
2210
const response = await fetch(
2311
`https://api.cloudflare.com/client/v4/accounts/${process.env.CF_ACCOUNT_ID}/d1/database/${process.env.CF_D1_DOCS_ID}/query`,
2412
{
@@ -28,15 +16,48 @@ export async function fetchVersions(packageName: string) {
2816
},
2917
method: 'POST',
3018
body: JSON.stringify({
31-
sql: `select version from documentation where name = ? order by version desc;`,
19+
sql: `WITH parsed AS (
20+
SELECT
21+
version,
22+
CASE
23+
WHEN version = 'main' THEN NULL
24+
ELSE CAST(substr(version, 1, instr(version, '.') - 1) AS INTEGER)
25+
END AS major,
26+
CASE
27+
WHEN version = 'main' THEN NULL
28+
ELSE substr(version, instr(version, '.') + 1)
29+
END AS rest
30+
FROM documentation
31+
WHERE name = ?
32+
),
33+
parsed2 AS (
34+
SELECT
35+
version,
36+
major,
37+
CASE
38+
WHEN version = 'main' THEN NULL
39+
ELSE CAST(substr(rest, 1, instr(rest, '.') - 1) AS INTEGER)
40+
END AS minor,
41+
CASE
42+
WHEN version = 'main' THEN NULL
43+
ELSE CAST(substr(rest, instr(rest, '.') + 1) AS INTEGER)
44+
END AS patch
45+
FROM parsed
46+
)
47+
SELECT version
48+
FROM parsed2
49+
ORDER BY
50+
CASE WHEN version = 'main' THEN 0 ELSE 1 END,
51+
major DESC,
52+
minor DESC,
53+
patch DESC;`,
3254
params: [packageName],
3355
}),
3456
},
3557
);
3658

37-
const data = await response.json();
38-
39-
return data.result[0]?.results;
59+
const data = (await response.json()) as Cloudflare.D1Resource.Database.QueryResultsSinglePage;
60+
return (data.result[0]?.results ?? []) as { version: string }[];
4061
} catch {
4162
return [];
4263
}

0 commit comments

Comments
 (0)