From aeaf164064ddffcff18132fa85f58f2a94ffaa80 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Tue, 14 Nov 2023 17:31:15 +0800 Subject: [PATCH] fix: check ssr option when doing final response render (#11032) fixes #11031 #10988 introduced a regression where the response during prerendering would always have SSR enabled. This PR fixes this by setting it according to the SSR page option. --- .changeset/great-dryers-grin.md | 5 +++++ packages/kit/src/runtime/server/page/index.js | 2 +- .../basics/src/routes/prerendering/no-ssr/+page.js | 2 ++ .../basics/src/routes/prerendering/no-ssr/+page.svelte | 2 ++ packages/kit/test/apps/basics/test/test.js | 10 ++++++++++ 5 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 .changeset/great-dryers-grin.md create mode 100644 packages/kit/test/apps/basics/src/routes/prerendering/no-ssr/+page.js create mode 100644 packages/kit/test/apps/basics/src/routes/prerendering/no-ssr/+page.svelte diff --git a/.changeset/great-dryers-grin.md b/.changeset/great-dryers-grin.md new file mode 100644 index 000000000000..eb9e68cb2684 --- /dev/null +++ b/.changeset/great-dryers-grin.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +fix: correctly prerender pages that use browser globals and have SSR turned off diff --git a/packages/kit/src/runtime/server/page/index.js b/packages/kit/src/runtime/server/page/index.js index dbc3b29905f5..c1a01e4614d3 100644 --- a/packages/kit/src/runtime/server/page/index.js +++ b/packages/kit/src/runtime/server/page/index.js @@ -291,7 +291,7 @@ export async function render_page(event, page, options, manifest, state, resolve resolve_opts, page_config: { csr: get_option(nodes, 'csr') ?? true, - ssr: true + ssr: get_option(nodes, 'ssr') ?? true }, status, error: null, diff --git a/packages/kit/test/apps/basics/src/routes/prerendering/no-ssr/+page.js b/packages/kit/test/apps/basics/src/routes/prerendering/no-ssr/+page.js new file mode 100644 index 000000000000..ceccaaf67a21 --- /dev/null +++ b/packages/kit/test/apps/basics/src/routes/prerendering/no-ssr/+page.js @@ -0,0 +1,2 @@ +export const prerender = true; +export const ssr = false; diff --git a/packages/kit/test/apps/basics/src/routes/prerendering/no-ssr/+page.svelte b/packages/kit/test/apps/basics/src/routes/prerendering/no-ssr/+page.svelte new file mode 100644 index 000000000000..b496840b0c9b --- /dev/null +++ b/packages/kit/test/apps/basics/src/routes/prerendering/no-ssr/+page.svelte @@ -0,0 +1,2 @@ +

Hello world!

+

{window.location.origin}

diff --git a/packages/kit/test/apps/basics/test/test.js b/packages/kit/test/apps/basics/test/test.js index 1fd9e0a67d46..d4b56ba50c92 100644 --- a/packages/kit/test/apps/basics/test/test.js +++ b/packages/kit/test/apps/basics/test/test.js @@ -622,6 +622,16 @@ test.describe('Page options', () => { await page.goto('/transform-page-chunk'); expect(await page.getAttribute('meta[name="transform-page"]', 'content')).toBe('Worked!'); }); + + test('prerenders page that uses browser globals with ssr=false', async ({ + page, + javaScriptEnabled + }) => { + test.skip(process.env.DEV, 'skip when in dev mode'); + test.skip(!javaScriptEnabled, 'skip when JavaScript is disabled'); + await page.goto('/prerendering/no-ssr'); + await expect(page.getByText('Hello world!')).toBeVisible(); + }); }); test.describe('$app/environment', () => {