diff --git a/packages/website-ue/src/pages/api/index.astro b/packages/website-ue/src/pages/api/index.astro new file mode 100644 index 000000000..b8e5f2585 --- /dev/null +++ b/packages/website-ue/src/pages/api/index.astro @@ -0,0 +1,54 @@ +--- +import { + createProgram, + displayPartsToString, + forEachChild, + isFunctionDeclaration, +} from "typescript"; + +const root = `/src/pages/api`; +const globbed = import.meta.glob("/src/pages/api/**/*.ts", { + eager: true, + query: "?raw", +}); +const paths: { + path: string; + documentation: string; +}[] = []; + +for (const fullPath in globbed) { + const relativePath = `.${fullPath}`; + const path = fullPath.slice(root.length + 1, -3); + const program = createProgram([relativePath], {}); + const source = program.getSourceFile(relativePath); + if (!source) throw new Error(`Could not find source for ${fullPath}`); + + const checker = program.getTypeChecker(); + + const getter = forEachChild(source, (node) => { + if (!isFunctionDeclaration(node) || node.name?.text !== "GET") return; + return checker.getSymbolAtLocation(node.name); + }); + + const documentationComment = getter?.getDocumentationComment(checker); + if (!documentationComment) continue; + + const documentation = displayPartsToString(documentationComment); + if (documentation.length === 0) continue; + + paths.push({ path, documentation }); +} + +paths.sort((a, b) => a.path.localeCompare(b.path)); +--- + +

api

+ +{ + paths.map(({ path, documentation }) => ( + <> +

{path}

+

{documentation}

+ + )) +} diff --git a/packages/website-ue/src/pages/api/tanks/[id].pb.ts b/packages/website-ue/src/pages/api/tanks/[id].pb.ts index 1cc6ce655..9897df41e 100644 --- a/packages/website-ue/src/pages/api/tanks/[id].pb.ts +++ b/packages/website-ue/src/pages/api/tanks/[id].pb.ts @@ -8,6 +8,9 @@ export const getStaticPaths = (async () => { return tanks.map(({ id }) => ({ params: { id } })); }) satisfies GetStaticPaths; +/** + * Even Noah can't save these animals. + */ export async function GET({ params }: APIContext) { const tank = await api.tank(params.id); return new Response(TankCatalogComponent.encode(tank).finish()); diff --git a/packages/website-ue/src/pages/api/tanks/characteristics.json.ts b/packages/website-ue/src/pages/api/tanks/characteristics.json.ts index 363550766..d8d06b0ed 100644 --- a/packages/website-ue/src/pages/api/tanks/characteristics.json.ts +++ b/packages/website-ue/src/pages/api/tanks/characteristics.json.ts @@ -1,5 +1,8 @@ import { characteristicsOrder } from "../../../core/tankopedia/characteristicsOrder"; +/** + * The naked man fears no pickpocket. + */ export function GET() { return Response.json(characteristicsOrder); } diff --git a/packages/website-ue/src/pages/index.astro b/packages/website-ue/src/pages/index.astro index 0cf5a6d97..973fb7946 100644 --- a/packages/website-ue/src/pages/index.astro +++ b/packages/website-ue/src/pages/index.astro @@ -1 +1,9 @@ -go to /tanks +--- +import packageJson from "../../../../package.json"; +--- + +

blitzkit {packageJson.version}

+ +

/tanks

+ +

/api

diff --git a/packages/website-ue/src/pages/tanks/index.astro b/packages/website-ue/src/pages/tanks/index.astro index 8aa6eb2e4..28ee54063 100644 --- a/packages/website-ue/src/pages/tanks/index.astro +++ b/packages/website-ue/src/pages/tanks/index.astro @@ -4,16 +4,14 @@ import { api } from "../../core/api/dynamic"; const tanksList = await api.tanks(); --- -

Tanks

+

tanks

- +{ + tanksList.tanks.map(({ id, slug }) => ( +

+ + {slug} ({id}) + +

+ )) +}