import index from "./index.html"; import { createApi } from "./api"; import { getDefaultDrawingStore } from "./db"; export function createServer() { const drawingStore = getDefaultDrawingStore(); const api = createApi(drawingStore); return { port: Number(process.env.PORT ?? "3000"), hostname: process.env.HOST ?? "0.0.0.0", routes: { "/": (request: Request) => { const drawing = drawingStore.ensureInitialDrawing(); return Response.redirect(new URL(`/d/${drawing.id}`, request.url), 302); }, "/d/:id": index, "/api/health": { GET: () => api.health(), }, "/api/drawings": { GET: () => api.listDrawings(), POST: () => api.createDrawing(), }, "/api/drawings/:id": { GET: (request: Request & { params: Record }) => api.getDrawing(request), PUT: (request: Request & { params: Record }) => api.updateDrawing(request), DELETE: (request: Request & { params: Record }) => api.deleteDrawing(request), }, }, fetch() { return Response.json({ ok: false, error: "Not found" }, { status: 404 }); }, } satisfies Parameters[0]; } if (import.meta.main) { const server = Bun.serve(createServer()); console.log(`Listening on http://${server.hostname}:${server.port}`); }