Skip to content

Commit

Permalink
chore: tweak presets
Browse files Browse the repository at this point in the history
  • Loading branch information
hi-ogawa committed Jul 1, 2024
1 parent d9e2f13 commit a5ec6a3
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 19 deletions.
7 changes: 6 additions & 1 deletion packages/react-server/examples/prerender/vite.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,12 @@ export default defineConfig({
plugins: [
react(),
vitePluginReactServer({
prerender: (_manifest, presets) => presets.default(),
prerender: async (_manifest, presets) => {
return [
...(await presets.static()),
...(await presets.generateStaticParams()),
];
},
}),
vitePluginLogger(),
vitePluginSsrMiddleware({
Expand Down
44 changes: 26 additions & 18 deletions packages/react-server/src/features/prerender/plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,7 @@ type MaybePromise<T> = Promise<T> | T;

export type PrerenderFn = (
manifest: RouteModuleManifest,
presets: {
default: () => Promise<string[]>;
},
presets: ReturnType<typeof createPrerenderPresets>,
) => MaybePromise<string[]>;

export function prerenderPlugin({
Expand All @@ -37,9 +35,8 @@ export function prerenderPlugin({
path.resolve("dist/server/__entry_ssr.js")
);
const { router } = await entry.importReactServer();
const routes = await prerender(router.manifest, {
default: () => prerenderPresetDefault(router.manifest),
});
const presets = createPrerenderPresets(router.manifest);
const routes = await prerender(router.manifest, presets);
const entries = Array<{
route: string;
html: string;
Expand Down Expand Up @@ -93,22 +90,33 @@ export function prerenderPlugin({
];
}

async function prerenderPresetDefault(manifest: RouteModuleManifest) {
const result: string[] = [];
for (const entry of manifest.entries) {
const page = entry.module?.page;
if (page) {
if (entry.dynamic) {
if (page.generateStaticParams) {
function createPrerenderPresets(manifest: RouteModuleManifest) {
const entries = manifest.entries;

return {
static: async () => {
const result: string[] = [];
for (const entry of entries) {
const page = entry.module?.page;
if (page && !entry.dynamic) {
result.push(entry.pathname);
}
}
return result;
},

generateStaticParams: async () => {
const result: string[] = [];
for (const entry of entries) {
const page = entry.module?.page;
if (page && entry.dynamic && page.generateStaticParams) {
const generated = await page.generateStaticParams();
for (const params of generated) {
result.push(entry.format(params));
}
}
} else {
result.push(entry.pathname);
}
}
}
return result;
return result;
},
};
}

0 comments on commit a5ec6a3

Please sign in to comment.