import { eventHandler } from "h3"; import { useNitroApp } from "./app.mjs"; export function defineRenderHandler(handler) { return eventHandler(async (event) => { if (event.req.url.endsWith("/favicon.ico")) { event.res.setHeader("Content-Type", "image/x-icon"); event.res.end("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); return; } const response = await handler(event); if (!response) { if (!event.res.writableEnded) { event.res.statusCode = event.res.statusCode === 200 ? 500 : event.res.statusCode; event.res.end("No response returned from render handler: " + event.req.url); } return; } const nitroApp = useNitroApp(); await nitroApp.hooks.callHook("render:response", response, { event }); if (!event.res.headersSent && response.headers) { for (const header in response.headers) { event.res.setHeader(header, response.headers[header]); } if (response.statusCode) { event.res.statusCode = response.statusCode; } if (response.statusMessage) { event.res.statusMessage = response.statusMessage; } } return typeof response.body === "string" ? response.body : JSON.stringify(response.body); }); }