fix: Sort package versions (#11284)

* fix: sort package versions

* refactor: remove spaces

---------

Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
This commit is contained in:
Jiralite
2025-11-20 21:17:28 +00:00
committed by GitHub
parent 5dea94602e
commit 5130d6f56c
2 changed files with 60 additions and 20 deletions

View File

@@ -18,13 +18,32 @@ export async function fetchLatestVersion(packageName: string): Promise<string> {
}
try {
const { result } = await client.d1.database.query(process.env.CF_D1_DOCS_ID!, {
const data = await client.d1.database.query(process.env.CF_D1_DOCS_ID!, {
account_id: process.env.CF_ACCOUNT_ID!,
sql: `select version from documentation where name = ? and version != 'main' order by version desc limit 1;`,
sql: `WITH parsed AS (
SELECT
version,
CAST(substr(version, 1, instr(version, '.') - 1) AS INTEGER) AS major,
substr(version, instr(version, '.') + 1) AS rest
FROM documentation
WHERE name = ? AND version != 'main'
),
parsed2 AS (
SELECT
version,
major,
CAST(substr(rest, 1, instr(rest, '.') - 1) AS INTEGER) AS minor,
CAST(substr(rest, instr(rest, '.') + 1) AS INTEGER) AS patch
FROM parsed
)
SELECT version
FROM parsed2
ORDER BY major DESC, minor DESC, patch DESC
LIMIT 1;`,
params: [packageName],
});
return `${(result[0]?.results as { version: string }[] | undefined)?.[0]?.version ?? 'main'}${hasEntryPoints ? ['', ...DEFAULT_ENTRY_POINT].join('/') : ''}`;
return `${((data.result[0]?.results ?? []) as { version: string }[])[0]?.version ?? 'main'}${hasEntryPoints ? ['', ...DEFAULT_ENTRY_POINT].join('/') : ''}`;
} catch {
return '';
}

View File

@@ -1,24 +1,12 @@
// import Cloudflare from 'cloudflare';
import type Cloudflare from 'cloudflare';
import { ENV } from './env';
// const client = new Cloudflare({
// apiToken: process.env.CF_D1_DOCS_API_KEY,
// });
export async function fetchVersions(packageName: string) {
if (ENV.IS_LOCAL_DEV) {
return [{ version: 'main' }];
}
try {
// const { result } = await client.d1.database.query(process.env.CF_D1_DOCS_ID!, {
// account_id: process.env.CF_ACCOUNT_ID!,
// sql: `select version from documentation where name = ? order by version desc;`,
// params: [packageName],
// });
// return (result[0]?.results as { version: string }[] | undefined) ?? [];
const response = await fetch(
`https://api.cloudflare.com/client/v4/accounts/${process.env.CF_ACCOUNT_ID}/d1/database/${process.env.CF_D1_DOCS_ID}/query`,
{
@@ -28,15 +16,48 @@ export async function fetchVersions(packageName: string) {
},
method: 'POST',
body: JSON.stringify({
sql: `select version from documentation where name = ? order by version desc;`,
sql: `WITH parsed AS (
SELECT
version,
CASE
WHEN version = 'main' THEN NULL
ELSE CAST(substr(version, 1, instr(version, '.') - 1) AS INTEGER)
END AS major,
CASE
WHEN version = 'main' THEN NULL
ELSE substr(version, instr(version, '.') + 1)
END AS rest
FROM documentation
WHERE name = ?
),
parsed2 AS (
SELECT
version,
major,
CASE
WHEN version = 'main' THEN NULL
ELSE CAST(substr(rest, 1, instr(rest, '.') - 1) AS INTEGER)
END AS minor,
CASE
WHEN version = 'main' THEN NULL
ELSE CAST(substr(rest, instr(rest, '.') + 1) AS INTEGER)
END AS patch
FROM parsed
)
SELECT version
FROM parsed2
ORDER BY
CASE WHEN version = 'main' THEN 0 ELSE 1 END,
major DESC,
minor DESC,
patch DESC;`,
params: [packageName],
}),
},
);
const data = await response.json();
return data.result[0]?.results;
const data = (await response.json()) as Cloudflare.D1Resource.Database.QueryResultsSinglePage;
return (data.result[0]?.results ?? []) as { version: string }[];
} catch {
return [];
}