diff --git a/packages/start-plugin-core/src/prerender.ts b/packages/start-plugin-core/src/prerender.ts index 3986873c666..46bfd618d07 100644 --- a/packages/start-plugin-core/src/prerender.ts +++ b/packages/start-plugin-core/src/prerender.ts @@ -144,6 +144,11 @@ export async function prerender({ startConfig.pages.forEach((page) => addCrawlPageTask(page)) + if (queue.isSettled()) { + logger.info('No pages matched prerender filter; skipping.') + return Array.from(prerendered) + } + await queue.start() return Array.from(prerendered) diff --git a/packages/start-plugin-core/tests/prerender-ssrf.test.ts b/packages/start-plugin-core/tests/prerender-ssrf.test.ts index 4a0551e8c31..397229f0f8a 100644 --- a/packages/start-plugin-core/tests/prerender-ssrf.test.ts +++ b/packages/start-plugin-core/tests/prerender-ssrf.test.ts @@ -65,7 +65,11 @@ function resetFetch() { function makeStartConfig(pagePath: string) { return { - prerender: { enabled: true, autoStaticPathsDiscovery: false }, + prerender: { + enabled: true, + autoStaticPathsDiscovery: false, + concurrency: 1, + }, pages: [{ path: pagePath }], router: { basepath: '' }, spa: { @@ -97,4 +101,13 @@ describe('prerender pages validation', () => { await expect(prerender({ startConfig, builder })).resolves.not.toThrow() }) + + it('resolves when prerender filter matches no pages', async () => { + resetFetch() + const startConfig = makeStartConfig('/about') + startConfig.prerender.filter = () => false + + await expect(prerender({ startConfig, builder })).resolves.not.toThrow() + expect(fetchMock).not.toHaveBeenCalled() + }) })