astro-ghostcms/.pnpm-store/v3/files/6e/32699c78b33d3b57366206221b6...

66 lines
2.1 KiB
Plaintext
Raw Permalink Normal View History

2024-02-14 14:10:47 +00:00
import { renderPage as runtimeRenderPage } from "../../runtime/server/index.js";
import { attachCookiesToResponse } from "../cookies/index.js";
import { CantRenderPage } from "../errors/errors-data.js";
import { AstroError } from "../errors/index.js";
import { routeIsFallback } from "../redirects/helpers.js";
import { redirectRouteGenerate, redirectRouteStatus, routeIsRedirect } from "../redirects/index.js";
import { createResult } from "./result.js";
async function renderPage({ mod, renderContext, env, cookies }) {
if (routeIsRedirect(renderContext.route)) {
return new Response(null, {
status: redirectRouteStatus(renderContext.route, renderContext.request.method),
headers: {
location: redirectRouteGenerate(renderContext.route, renderContext.params)
}
});
} else if (routeIsFallback(renderContext.route)) {
return new Response(null, {
status: 404
});
} else if (!mod) {
throw new AstroError(CantRenderPage);
}
const Component = mod.default;
if (!Component)
throw new Error(`Expected an exported Astro component but received typeof ${typeof Component}`);
const result = createResult({
adapterName: env.adapterName,
links: renderContext.links,
styles: renderContext.styles,
logger: env.logger,
params: renderContext.params,
pathname: renderContext.pathname,
componentMetadata: renderContext.componentMetadata,
resolve: env.resolve,
renderers: env.renderers,
clientDirectives: env.clientDirectives,
compressHTML: env.compressHTML,
request: renderContext.request,
partial: !!mod.partial,
site: env.site,
scripts: renderContext.scripts,
ssr: env.ssr,
status: renderContext.status ?? 200,
cookies,
locals: renderContext.locals ?? {},
locales: renderContext.locales,
defaultLocale: renderContext.defaultLocale,
routingStrategy: renderContext.routing
});
const response = await runtimeRenderPage(
result,
Component,
renderContext.props,
{},
env.streaming,
renderContext.route
);
if (result.cookies) {
attachCookiesToResponse(response, result.cookies);
}
return response;
}
export {
renderPage
};