astro
Version:
Astro is a modern site builder with web best practices, performance, and DX front-of-mind.
41 lines (40 loc) • 1.34 kB
JavaScript
import { renderForPrerender } from "../app/prerender.js";
import { ensureAsyncRenderScope } from "../render-scope/node-scope.js";
import { StaticPaths } from "../../runtime/prerender/static-paths.js";
function createDefaultPrerenderer({
internals,
options,
prerenderOutputDir
}) {
const prerenderer = {
name: "astro:default",
async setup() {
const prerenderEntryFileName = internals.prerenderEntryFileName;
if (!prerenderEntryFileName) {
throw new Error(
`Prerender entry filename not found in build internals. This is likely a bug in Astro.`
);
}
const prerenderEntryUrl = new URL(prerenderEntryFileName, prerenderOutputDir);
const prerenderEntry = await import(prerenderEntryUrl.toString());
const app = prerenderEntry.app;
app.setInternals(internals);
app.setOptions(options);
prerenderer.app = app;
},
async getStaticPaths() {
const staticPaths = new StaticPaths(prerenderer.app);
return staticPaths.getAll();
},
async render(request, { routeData, collectMetadata }) {
if (collectMetadata) ensureAsyncRenderScope();
return renderForPrerender(prerenderer.app, request, { routeData, collectMetadata });
},
async teardown() {
}
};
return prerenderer;
}
export {
createDefaultPrerenderer
};