/* eslint-disable @typescript-eslint/no-throw-literal */ import type { GetStaticPaths, GetStaticProps } from 'next/types'; import type { DocClass } from '~/DocModel/DocClass'; import type { DocEnum } from '~/DocModel/DocEnum'; import type { DocFunction } from '~/DocModel/DocFunction'; import type { DocInterface } from '~/DocModel/DocInterface'; import type { DocTypeAlias } from '~/DocModel/DocTypeAlias'; import type { DocVariable } from '~/DocModel/DocVariable'; import type { ItemListProps } from '~/components/ItemSidebar'; import { Class } from '~/components/model/Class'; import { Enum } from '~/components/model/Enum'; import { Function } from '~/components/model/Function'; import { Interface } from '~/components/model/Interface'; import { TypeAlias } from '~/components/model/TypeAlias'; import { Variable } from '~/components/model/Variable'; import { findMember } from '~/model.server'; import { createApiModel } from '~/util/api-model.server'; import { findPackage, getMembers } from '~/util/parse.server'; export const getStaticPaths: GetStaticPaths = async () => { const packages = ['builders', 'collection', 'proxy', 'rest', 'voice']; const pkgs = ( await Promise.all( packages.map(async (packageName) => { if (packageName === 'rest') { return { params: { slug: ['main', 'packages', packageName] } }; } try { const res = await fetch(`https://docs.discordjs.dev/docs/${packageName}/main.api.json`); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment const data = await res.json(); const model = createApiModel(data); const pkg = findPackage(model, packageName); return [ { params: { slug: ['main', 'packages', packageName] } }, ...getMembers(pkg!).map((member) => ({ params: { slug: ['main', 'packages', packageName, member.name] } })), ]; } catch { return { params: { slug: ['', '', '', ''] } }; } }), ) ).flat(); return { paths: pkgs, fallback: true, }; }; export const getStaticProps: GetStaticProps = async ({ params }) => { const [branchName = 'main', , packageName = 'builders', memberName] = params!.slug as string[]; try { const res = await fetch(`https://docs.discordjs.dev/docs/${packageName}/${branchName}.api.json`); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment const data = await res.json(); const model = createApiModel(data); const pkg = findPackage(model, packageName); return { props: { packageName, data: { members: pkg ? getMembers(pkg) : [], member: memberName ? findMember(model, packageName, memberName)?.toJSON() ?? null : null, }, }, }; } catch { return { props: { error: 'FetchError', }, }; } }; const member = (props: any) => { // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access switch (props.kind) { case 'Class': return } />; case 'Function': return } />; case 'Interface': return } />; case 'TypeAlias': return } />; case 'Variable': return } />; case 'Enum': return } />; default: return
Cannot render that item type
; } }; export default function Slug( props: Partial } }>, ) { return props.error ? (
{props.error}
) : props.data?.member ? ( member(props.data.member) ) : null; }