astro-ghostcms/.pnpm-store/v3/files/d2/c3a0376a35a196df393d0952ca1...

71 lines
2.5 KiB
Plaintext
Raw Normal View History

2024-02-14 14:10:47 +00:00
import path from "node:path";
import { getPrerenderMetadata } from "../../../prerender/metadata.js";
import { extendManualChunks } from "./util.js";
function vitePluginPrerender(opts, internals) {
return {
name: "astro:rollup-plugin-prerender",
outputOptions(outputOptions) {
extendManualChunks(outputOptions, {
after(id, meta) {
if (id.includes("astro/dist/runtime")) {
return "astro";
}
const pageInfo = internals.pagesByViteID.get(id);
let hasSharedModules = false;
if (pageInfo) {
if (getPrerenderMetadata(meta.getModuleInfo(id))) {
const infoMeta = meta.getModuleInfo(id);
for (const moduleId of infoMeta.importedIds) {
const moduleMeta = meta.getModuleInfo(moduleId);
if (
// a shared modules should be inside the `src/` folder, at least
moduleMeta.id.startsWith(opts.settings.config.srcDir.pathname) && // and has at least two importers: the current page and something else
moduleMeta.importers.length > 1
) {
for (const importer of moduleMeta.importedIds) {
if (importer !== id) {
const importerModuleMeta = meta.getModuleInfo(importer);
if (importerModuleMeta) {
if (importerModuleMeta.id.includes("/pages")) {
if (getPrerenderMetadata(importerModuleMeta) === false) {
hasSharedModules = true;
break;
}
} else if (importerModuleMeta.id.includes("/middleware")) {
hasSharedModules = true;
break;
}
}
}
}
}
}
opts.allPages;
pageInfo.hasSharedModules = hasSharedModules;
pageInfo.route.prerender = true;
return "prerender";
}
pageInfo.route.prerender = false;
return `pages/${path.basename(pageInfo.component)}`;
}
}
});
}
};
}
function pluginPrerender(opts, internals) {
return {
targets: ["server"],
hooks: {
"build:before": () => {
return {
vitePlugin: vitePluginPrerender(opts, internals)
};
}
}
};
}
export {
pluginPrerender
};