From b3504eb64242a6504ae8bbf89596572156c145b2 Mon Sep 17 00:00:00 2001 From: Tee Ming Date: Thu, 9 Nov 2023 20:10:45 +0800 Subject: [PATCH] check if prerendering when ssr is turned off before responding (#10988) fixes #10983 This PR adds a check to see if we're prerendering and SSR is turned off to avoid responding with CSR only too early. With this check in place, the should_prerender check can now be reached and generate the __data.json file. --- .changeset/eight-moons-kick.md | 5 +++++ packages/kit/src/runtime/server/page/index.js | 2 +- .../routes/shadowed-get/ssr-off/+page.server.js | 7 +++++++ .../src/routes/shadowed-get/ssr-off/+page.svelte | 6 ++++++ .../test/prerendering/basics/test/tests.spec.js | 15 +++++++++++++++ 5 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 .changeset/eight-moons-kick.md create mode 100644 packages/kit/test/prerendering/basics/src/routes/shadowed-get/ssr-off/+page.server.js create mode 100644 packages/kit/test/prerendering/basics/src/routes/shadowed-get/ssr-off/+page.svelte diff --git a/.changeset/eight-moons-kick.md b/.changeset/eight-moons-kick.md new file mode 100644 index 000000000000..560517572200 --- /dev/null +++ b/.changeset/eight-moons-kick.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +fix: generate `__data.json` for prerendered pages when SSR is turned off diff --git a/packages/kit/src/runtime/server/page/index.js b/packages/kit/src/runtime/server/page/index.js index 6ba98410d50f..f99391b1365f 100644 --- a/packages/kit/src/runtime/server/page/index.js +++ b/packages/kit/src/runtime/server/page/index.js @@ -99,7 +99,7 @@ export async function render_page(event, page, options, manifest, state, resolve /** @type {import('./types').Fetched[]} */ const fetched = []; - if (get_option(nodes, 'ssr') === false) { + if (get_option(nodes, 'ssr') === false && !state.prerendering) { return await render_response({ branch: [], fetched, diff --git a/packages/kit/test/prerendering/basics/src/routes/shadowed-get/ssr-off/+page.server.js b/packages/kit/test/prerendering/basics/src/routes/shadowed-get/ssr-off/+page.server.js new file mode 100644 index 000000000000..ac41ba4b7e77 --- /dev/null +++ b/packages/kit/test/prerendering/basics/src/routes/shadowed-get/ssr-off/+page.server.js @@ -0,0 +1,7 @@ +export const ssr = false; + +export function load() { + return { + answer: 42 + }; +} diff --git a/packages/kit/test/prerendering/basics/src/routes/shadowed-get/ssr-off/+page.svelte b/packages/kit/test/prerendering/basics/src/routes/shadowed-get/ssr-off/+page.svelte new file mode 100644 index 000000000000..a475b1237f27 --- /dev/null +++ b/packages/kit/test/prerendering/basics/src/routes/shadowed-get/ssr-off/+page.svelte @@ -0,0 +1,6 @@ + + +

The answer is {data.answer}

diff --git a/packages/kit/test/prerendering/basics/test/tests.spec.js b/packages/kit/test/prerendering/basics/test/tests.spec.js index 993f4f022dfd..3a830c97e96e 100644 --- a/packages/kit/test/prerendering/basics/test/tests.spec.js +++ b/packages/kit/test/prerendering/basics/test/tests.spec.js @@ -114,6 +114,21 @@ test('generates __data.json file for shadow endpoints', () => { }); }); +test('generates __data.json file for shadow endpoints with ssr turned off', () => { + const data = JSON.parse(read('shadowed-get/ssr-off/__data.json')); + expect(data).toEqual({ + type: 'data', + nodes: [ + null, + { + type: 'data', + data: [{ answer: 1 }, 42], + uses: {} + } + ] + }); +}); + test('does not prerender page with shadow endpoint with non-load handler', () => { assert.isFalse(fs.existsSync(`${build}/shadowed-post.html`)); assert.isFalse(fs.existsSync(`${build}/shadowed-post/__data.json`));