66 lines
2.1 KiB
Plaintext
66 lines
2.1 KiB
Plaintext
|
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
|
||
|
};
|