From 5a1a0c59f1688df3e990c8d1654a6c69adf879b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Mon, 12 Jan 2026 13:12:11 -0600 Subject: [PATCH] feat: profile and backgroud apis --- .../src/pages/[...locale]/api/index.astro | 57 +++++++++++-------- .../src/pages/api/avatars/[id].json.ts | 15 +++++ .../src/pages/api/avatars/[id].webp.ts | 13 +---- .../src/pages/api/avatars/all.json.ts | 6 ++ .../src/pages/api/avatars/list.json.ts | 7 +++ .../src/pages/api/backgrounds/[id].json.ts | 15 +++++ .../src/pages/api/backgrounds/[id].webp.ts | 10 +--- .../src/pages/api/backgrounds/all.json.ts | 6 ++ .../src/pages/api/backgrounds/list.json.ts | 7 +++ 9 files changed, 92 insertions(+), 44 deletions(-) create mode 100644 packages/website-ue/src/pages/api/avatars/[id].json.ts create mode 100644 packages/website-ue/src/pages/api/avatars/all.json.ts create mode 100644 packages/website-ue/src/pages/api/avatars/list.json.ts create mode 100644 packages/website-ue/src/pages/api/backgrounds/[id].json.ts create mode 100644 packages/website-ue/src/pages/api/backgrounds/all.json.ts create mode 100644 packages/website-ue/src/pages/api/backgrounds/list.json.ts diff --git a/packages/website-ue/src/pages/[...locale]/api/index.astro b/packages/website-ue/src/pages/[...locale]/api/index.astro index 7fa8523f4..f263df023 100644 --- a/packages/website-ue/src/pages/[...locale]/api/index.astro +++ b/packages/website-ue/src/pages/[...locale]/api/index.astro @@ -1,45 +1,52 @@ --- import "@radix-ui/colors/amber-dark.css"; -import { - createProgram, - displayPartsToString, - forEachChild, - isFunctionDeclaration, -} from "typescript"; import BaseLayout from "../../../layouts/BaseLayout.astro"; export { getStaticPaths } from "../index.astro"; const root = `/src/pages/api`; -const globbed = import.meta.glob("/src/pages/api/**/*.ts", { +const globbed = import.meta.glob("/src/pages/api/**/*", { eager: true, query: "?raw", + import: "default", }); 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 }); +// } + for (const fullPath in globbed) { - const relativePath = `.${fullPath}`; + if (!fullPath.endsWith(".ts")) continue; + + const mdPath = fullPath.replace(".ts", ".md"); + const documentation = globbed[mdPath] as string; + + if (!documentation) continue; + 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 }); } diff --git a/packages/website-ue/src/pages/api/avatars/[id].json.ts b/packages/website-ue/src/pages/api/avatars/[id].json.ts new file mode 100644 index 000000000..679e47a5e --- /dev/null +++ b/packages/website-ue/src/pages/api/avatars/[id].json.ts @@ -0,0 +1,15 @@ +import type { APIContext, GetStaticPaths } from "astro"; +import { api } from "../../../core/api/dynamic"; + +export const getStaticPaths = (async () => { + const { avatars } = await api.avatars(); + + return avatars.map((avatar) => ({ + params: { id: avatar.name }, + })); +}) satisfies GetStaticPaths; + +export async function GET({ params }: APIContext) { + const avatar = await api.avatar(params.id); + return Response.json(avatar); +} diff --git a/packages/website-ue/src/pages/api/avatars/[id].webp.ts b/packages/website-ue/src/pages/api/avatars/[id].webp.ts index 708f4b730..3b521a3db 100644 --- a/packages/website-ue/src/pages/api/avatars/[id].webp.ts +++ b/packages/website-ue/src/pages/api/avatars/[id].webp.ts @@ -1,18 +1,9 @@ -import type { APIContext, GetStaticPaths } from "astro"; +import type { APIContext } from "astro"; import { api } from "../../../core/api/dynamic"; import { imageProxy } from "../../../core/api/imageProxy"; -export const getStaticPaths = (async () => { - const { avatars } = await api.avatars(); +export { getStaticPaths } from "./[id].json"; - return avatars.map((avatar) => ({ - params: { id: avatar.name }, - })); -}) satisfies GetStaticPaths; - -/** - * One day I will write documentation for this - */ export async function GET({ params }: APIContext) { const avatar = await api.avatar(params.id); return await imageProxy(avatar.profile_avatar!.avatar); diff --git a/packages/website-ue/src/pages/api/avatars/all.json.ts b/packages/website-ue/src/pages/api/avatars/all.json.ts new file mode 100644 index 000000000..d112c5a09 --- /dev/null +++ b/packages/website-ue/src/pages/api/avatars/all.json.ts @@ -0,0 +1,6 @@ +import { api } from "../../../core/api/dynamic"; + +export async function GET() { + const { avatars } = await api.avatars(); + return Response.json(avatars); +} diff --git a/packages/website-ue/src/pages/api/avatars/list.json.ts b/packages/website-ue/src/pages/api/avatars/list.json.ts new file mode 100644 index 000000000..34e650ea7 --- /dev/null +++ b/packages/website-ue/src/pages/api/avatars/list.json.ts @@ -0,0 +1,7 @@ +import { api } from "../../../core/api/dynamic"; + +export async function GET() { + const { avatars } = await api.avatars(); + const list = avatars.map((avatar) => avatar.name); + return Response.json(list); +} diff --git a/packages/website-ue/src/pages/api/backgrounds/[id].json.ts b/packages/website-ue/src/pages/api/backgrounds/[id].json.ts new file mode 100644 index 000000000..73c6cefb1 --- /dev/null +++ b/packages/website-ue/src/pages/api/backgrounds/[id].json.ts @@ -0,0 +1,15 @@ +import type { APIContext, GetStaticPaths } from "astro"; +import { api } from "../../../core/api/dynamic"; + +export const getStaticPaths = (async () => { + const { backgrounds } = await api.backgrounds(); + + return backgrounds.map((background) => ({ + params: { id: background.name }, + })); +}) satisfies GetStaticPaths; + +export async function GET({ params }: APIContext) { + const background = await api.background(params.id); + return Response.json(background); +} diff --git a/packages/website-ue/src/pages/api/backgrounds/[id].webp.ts b/packages/website-ue/src/pages/api/backgrounds/[id].webp.ts index 05f95d55f..02de949f6 100644 --- a/packages/website-ue/src/pages/api/backgrounds/[id].webp.ts +++ b/packages/website-ue/src/pages/api/backgrounds/[id].webp.ts @@ -1,14 +1,8 @@ -import type { APIContext, GetStaticPaths } from "astro"; +import type { APIContext } from "astro"; import { api } from "../../../core/api/dynamic"; import { imageProxy } from "../../../core/api/imageProxy"; -export const getStaticPaths = (async () => { - const { backgrounds } = await api.backgrounds(); - - return backgrounds.map((background) => ({ - params: { id: background.name }, - })); -}) satisfies GetStaticPaths; +export { getStaticPaths } from "./[id].json"; /** * One day I will write documentation for this diff --git a/packages/website-ue/src/pages/api/backgrounds/all.json.ts b/packages/website-ue/src/pages/api/backgrounds/all.json.ts new file mode 100644 index 000000000..30e9cf3f1 --- /dev/null +++ b/packages/website-ue/src/pages/api/backgrounds/all.json.ts @@ -0,0 +1,6 @@ +import { api } from "../../../core/api/dynamic"; + +export async function GET() { + const { backgrounds } = await api.backgrounds(); + return Response.json(backgrounds); +} diff --git a/packages/website-ue/src/pages/api/backgrounds/list.json.ts b/packages/website-ue/src/pages/api/backgrounds/list.json.ts new file mode 100644 index 000000000..d12d7de4c --- /dev/null +++ b/packages/website-ue/src/pages/api/backgrounds/list.json.ts @@ -0,0 +1,7 @@ +import { api } from "../../../core/api/dynamic"; + +export async function GET() { + const { backgrounds } = await api.backgrounds(); + const list = backgrounds.map((background) => background.name); + return Response.json(list); +}