export function jsonResponse(data: unknown, status = 200, headers?: HeadersInit): Response { return Response.json(data, { status, headers }); } export function htmlResponse(html: string, status = 200, headers?: HeadersInit): Response { const responseHeaders = new Headers(headers); if (!responseHeaders.has("Content-Type")) { responseHeaders.set("Content-Type", "text/html; charset=utf-8"); } return new Response(html, { status, headers: responseHeaders, }); } export function textResponse(content: string, status = 200, headers?: HeadersInit): Response { const responseHeaders = new Headers(headers); if (!responseHeaders.has("Content-Type")) { responseHeaders.set("Content-Type", "text/plain; charset=utf-8"); } return new Response(content, { status, headers: responseHeaders, }); } export function isHtmxRequest(request: Request): boolean { return request.headers.has("hx-request"); } export async function parseBody(request: Request): Promise> { const contentType = request.headers.get("content-type") ?? ""; if ( contentType.includes("application/x-www-form-urlencoded") || contentType.includes("multipart/form-data") ) { const form = await request.formData(); const result: Record = {}; form.forEach((value, key) => { result[key] = typeof value === "string" ? value : value.name; }); return result; } if (contentType.includes("application/json")) { return (await request.json()) as Record; } return {}; }