astro
Version:
Astro is a modern site builder with web best practices, performance, and DX front-of-mind.
33 lines (32 loc) • 1.13 kB
JavaScript
import { runHookRouteSetup } from "../../integrations/hooks.js";
import { getPrerenderDefault } from "../../prerender/utils.js";
const PRERENDER_REGEX = /^\s*export\s+const\s+prerender\s*=\s*(true|false);?/m;
/**
* Parses the `export const prerender = true|false` declaration from a route's
* source content. Returns `true`, `false`, or `undefined` if not present.
*/
export function parsePrerenderExport(content) {
const match = PRERENDER_REGEX.exec(content);
if (!match) return undefined;
return match[1] === "true";
}
export async function getRoutePrerenderOption(content, route, settings, logger) {
// Check if the route is pre-rendered or not
const match = PRERENDER_REGEX.exec(content);
if (match) {
route.prerender = match[1] === "true";
if (route.redirectRoute) {
route.redirectRoute.prerender = match[1] === "true";
}
}
await runHookRouteSetup({
route,
settings,
logger
});
// If not explicitly set, default to the global setting
if (typeof route.prerender === undefined) {
route.prerender = getPrerenderDefault(settings.config);
}
if (!route.prerender) settings.buildOutput = "server";
}