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`));