import { eventHandler, getResponseStatus, send, setResponseHeader, setResponseHeaders, setResponseStatus } from "h3"; import { useNitroApp } from "./app.mjs"; import { useRuntimeConfig } from "./config.mjs"; export function defineRenderHandler(render) { const runtimeConfig = useRuntimeConfig(); return eventHandler(async (event) => { const nitroApp = useNitroApp(); const ctx = { event, render, response: void 0 }; await nitroApp.hooks.callHook("render:before", ctx); if (!ctx.response) { if (event.path === `${runtimeConfig.app.baseURL}favicon.ico`) { setResponseHeader(event, "Content-Type", "image/x-icon"); return send( event, "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" ); } ctx.response = await ctx.render(event); if (!ctx.response) { const _currentStatus = getResponseStatus(event); setResponseStatus(event, _currentStatus === 200 ? 500 : _currentStatus); return send( event, "No response returned from render handler: " + event.path ); } } await nitroApp.hooks.callHook("render:response", ctx.response, ctx); if (ctx.response.headers) { setResponseHeaders(event, ctx.response.headers); } if (ctx.response.statusCode || ctx.response.statusMessage) { setResponseStatus( event, ctx.response.statusCode, ctx.response.statusMessage ); } return ctx.response.body; }); }