refactor: use planetscale instead of custom api

This commit is contained in:
iCrawl
2023-11-07 15:08:03 +01:00
parent 344a3f9344
commit 009c0a3bae
10 changed files with 131 additions and 69 deletions

View File

@@ -15,11 +15,12 @@ export async function fetchVersions(packageName: string): Promise<string[]> {
return ['main'];
}
const response = await fetch(`https://docs.discordjs.dev/api/info?package=${packageName}`, {
next: { revalidate: 3_600 },
});
const { rows } = await sql.execute('select version from documentation where name = ? order by version desc', [
packageName,
]);
return response.json();
// @ts-expect-error: https://github.com/planetscale/database-js/issues/71
return rows[0].data;
}
export async function fetchModelJSON(packageName: string, version: string): Promise<unknown> {

View File

@@ -68,6 +68,8 @@ export default async function PackageLayout({ children, params }: PropsWithChild
return (member as ApiFunction).overloadIndex === 1;
});
const versions = await fetchVersions(params.package);
return (
<Providers>
<Banner className="mb-6" />
@@ -75,7 +77,7 @@ export default async function PackageLayout({ children, params }: PropsWithChild
<Header />
<div className="relative top-2.5 mx-auto max-w-7xl gap-6 lg:max-w-full lg:flex">
<div className="lg:sticky lg:top-23 lg:h-[calc(100vh_-_145px)]">
<Nav members={members.map((member) => serializeIntoSidebarItemData(member))} />
<Nav members={members.map((member) => serializeIntoSidebarItemData(member))} versions={versions} />
</div>
<div className="mx-auto max-w-5xl min-w-xs w-full pb-10">

View File

@@ -3,6 +3,7 @@ import { VscArrowRight } from '@react-icons/all-files/vsc/VscArrowRight';
import { VscVersions } from '@react-icons/all-files/vsc/VscVersions';
import Link from 'next/link';
import { notFound } from 'next/navigation';
import { fetchVersions } from '~/app/docAPI';
import { buttonVariants } from '~/styles/Button';
import { PACKAGES } from '~/util/constants';
@@ -11,18 +12,13 @@ async function getData(pkg: string) {
notFound();
}
if (process.env.NEXT_PUBLIC_LOCAL_DEV || process.env.NEXT_PUBLIC_VERCEL_ENV === 'preview') {
return ['main'];
}
const res = await fetch(`https://docs.discordjs.dev/api/info?package=${pkg}`, { next: { revalidate: 3_600 } });
const data: string[] = await res.json();
const data = await fetchVersions(pkg);
if (!data.length) {
throw new Error('Failed to fetch data');
}
return data.reverse();
return data;
}
export default async function Page({ params }: { params: { package: string } }) {