1- // import Cloudflare from 'cloudflare';
1+ import type Cloudflare from 'cloudflare' ;
22import { ENV } from './env' ;
33
4- // const client = new Cloudflare({
5- // apiToken: process.env.CF_D1_DOCS_API_KEY,
6- // });
7-
84export 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