Skip to content

Commit

Permalink
check if prerendering when ssr is turned off before responding (#10988)
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
eltigerchino committed Nov 9, 2023
1 parent 7f4199c commit b3504eb
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 1 deletion.
5 changes: 5 additions & 0 deletions .changeset/eight-moons-kick.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@sveltejs/kit': patch
---

fix: generate `__data.json` for prerendered pages when SSR is turned off
2 changes: 1 addition & 1 deletion packages/kit/src/runtime/server/page/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
export const ssr = false;

export function load() {
return {
answer: 42
};
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<script>
/** @type {import('./$types').PageData} */
export let data;
</script>

<h1>The answer is {data.answer}</h1>
15 changes: 15 additions & 0 deletions packages/kit/test/prerendering/basics/test/tests.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -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`));
Expand Down

0 comments on commit b3504eb

Please sign in to comment.