From 653c3353a8e105dcc5ff48d42db1dba843b2a4c8 Mon Sep 17 00:00:00 2001 From: Aenri Lovehart Date: Mon, 30 Mar 2026 11:22:54 -0400 Subject: [PATCH 1/6] Fixes #15620 --- packages/kit/src/core/postbuild/analyse.js | 7 +++-- packages/kit/src/core/postbuild/prerender.js | 31 +++++++++++++------ .../basics/src/routes/linked-api/+page.svelte | 5 +++ .../my-awesome-endpoint.json/+server.js | 7 +++++ .../+page.svelte | 1 + .../prerender-with-server-endpoint/+server.js | 5 +++ .../prerendering/basics/test/tests.spec.js | 10 ++++++ 7 files changed, 53 insertions(+), 13 deletions(-) create mode 100644 packages/kit/test/prerendering/basics/src/routes/linked-api/+page.svelte create mode 100644 packages/kit/test/prerendering/basics/src/routes/linked-api/my-awesome-endpoint.json/+server.js create mode 100644 packages/kit/test/prerendering/basics/src/routes/prerender-with-server-endpoint/+page.svelte create mode 100644 packages/kit/test/prerendering/basics/src/routes/prerender-with-server-endpoint/+server.js diff --git a/packages/kit/src/core/postbuild/analyse.js b/packages/kit/src/core/postbuild/analyse.js index 2b967e555f2b..75678b91187c 100644 --- a/packages/kit/src/core/postbuild/analyse.js +++ b/packages/kit/src/core/postbuild/analyse.js @@ -124,7 +124,6 @@ async function analyse({ const route_config = page?.config ?? endpoint?.config ?? {}; const prerender = page?.prerender ?? endpoint?.prerender; - if (prerender !== true) { for (const feature of list_features( route, @@ -144,10 +143,12 @@ async function analyse({ config: route_config, methods: Array.from(new Set([...page_methods, ...api_methods])), page: { - methods: page_methods + methods: page_methods, + prerender: page?.prerender }, api: { - methods: api_methods + methods: api_methods, + prerender: endpoint?.prerender }, prerender, entries: diff --git a/packages/kit/src/core/postbuild/prerender.js b/packages/kit/src/core/postbuild/prerender.js index 806952e39268..5baaa4b58f46 100644 --- a/packages/kit/src/core/postbuild/prerender.js +++ b/packages/kit/src/core/postbuild/prerender.js @@ -213,15 +213,17 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env }) { * @param {string} decoded * @param {string} [encoded] * @param {string} [generated_from_id] + * @param {boolean} [expect_html] */ - function enqueue(referrer, decoded, encoded, generated_from_id) { - if (seen.has(decoded)) return; - seen.add(decoded); + function enqueue(referrer, decoded, encoded, generated_from_id, expect_html) { + const key = expect_html ? decoded + '\x00page' : decoded + if (seen.has(key)) return; + seen.add(key); const file = decoded.slice(config.paths.base.length + 1); if (files.has(file)) return; - return q.add(() => visit(decoded, encoded || encodeURI(decoded), referrer, generated_from_id)); + return q.add(() => visit(decoded, encoded || encodeURI(decoded), referrer, generated_from_id, expect_html)); } /** @@ -229,17 +231,20 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env }) { * @param {string} encoded * @param {string?} referrer * @param {string} [generated_from_id] + * @param {boolean} [expect_html] */ - async function visit(decoded, encoded, referrer, generated_from_id) { + async function visit(decoded, encoded, referrer, generated_from_id, expect_html) { if (!decoded.startsWith(config.paths.base)) { handle_http_error({ status: 404, path: decoded, referrer, referenceType: 'linked' }); return; } + + const requestHeaders = expect_html ? { Accept: 'text/html' } : {}; /** @type {Map} */ const dependencies = new Map(); - const response = await server.respond(new Request(config.prerender.origin + encoded), { + const response = await server.respond(new Request(config.prerender.origin + encoded, { headers: requestHeaders }), { getClientAddress() { throw new Error('Cannot read clientAddress during prerendering'); }, @@ -260,7 +265,7 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env }) { // stuff in `static` return readFileSync(join(config.files.assets, file)); }, - emulator + emulator, }); const encoded_id = response.headers.get('x-sveltekit-routeid'); @@ -355,7 +360,7 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env }) { /** @type {Set} */ (expected_hashlinks.get(key)).add(decoded); } - void enqueue(decoded, decode_uri(pathname), pathname); + void enqueue(decoded, decode_uri(pathname), pathname, undefined, true); } } } @@ -534,7 +539,10 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env }) { if (processed_id.includes('[')) continue; const path = `/${get_route_segments(processed_id).join('/')}`; - void enqueue(null, config.paths.base + path); + + const route_data = metadata.routes.get(id); + if (route_data?.page.prerender === true) void enqueue(null, config.paths.base + path, undefined, undefined, true) + if (route_data?.api.prerender === true) void enqueue(null, config.paths.base + path, undefined, undefined, false) } } } else { @@ -543,8 +551,11 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env }) { } for (const { id, entries } of route_level_entries) { + const route_data = metadata.routes.get(id); + for (const entry of entries) { - void enqueue(null, config.paths.base + entry, undefined, id); + if (route_data?.page.prerender === true) void enqueue(null, config.paths.base + entry, undefined, id, true); + if (route_data?.api.prerender === true) void enqueue(null, config.paths.base + entry, undefined, id, false); } } diff --git a/packages/kit/test/prerendering/basics/src/routes/linked-api/+page.svelte b/packages/kit/test/prerendering/basics/src/routes/linked-api/+page.svelte new file mode 100644 index 000000000000..c454a66f70de --- /dev/null +++ b/packages/kit/test/prerendering/basics/src/routes/linked-api/+page.svelte @@ -0,0 +1,5 @@ + + +My Awesome Endpoint \ No newline at end of file diff --git a/packages/kit/test/prerendering/basics/src/routes/linked-api/my-awesome-endpoint.json/+server.js b/packages/kit/test/prerendering/basics/src/routes/linked-api/my-awesome-endpoint.json/+server.js new file mode 100644 index 000000000000..424e696be1bf --- /dev/null +++ b/packages/kit/test/prerendering/basics/src/routes/linked-api/my-awesome-endpoint.json/+server.js @@ -0,0 +1,7 @@ +export const prerender = true; + +export function GET() { + return new Response(JSON.stringify({ ok: true }), { + headers: { 'content-type': 'application/json' } + }); +} \ No newline at end of file diff --git a/packages/kit/test/prerendering/basics/src/routes/prerender-with-server-endpoint/+page.svelte b/packages/kit/test/prerendering/basics/src/routes/prerender-with-server-endpoint/+page.svelte new file mode 100644 index 000000000000..20dd3d8af17f --- /dev/null +++ b/packages/kit/test/prerendering/basics/src/routes/prerender-with-server-endpoint/+page.svelte @@ -0,0 +1 @@ +

prerendered page with server endpoint

\ No newline at end of file diff --git a/packages/kit/test/prerendering/basics/src/routes/prerender-with-server-endpoint/+server.js b/packages/kit/test/prerendering/basics/src/routes/prerender-with-server-endpoint/+server.js new file mode 100644 index 000000000000..64b7237d1d66 --- /dev/null +++ b/packages/kit/test/prerendering/basics/src/routes/prerender-with-server-endpoint/+server.js @@ -0,0 +1,5 @@ +export function GET() { + return new Response(JSON.stringify({ ok: true }), { + headers: { 'content-type': 'application/json' } + }); +} \ No newline at end of file diff --git a/packages/kit/test/prerendering/basics/test/tests.spec.js b/packages/kit/test/prerendering/basics/test/tests.spec.js index e3972a1d369d..7696b38b34b9 100644 --- a/packages/kit/test/prerendering/basics/test/tests.spec.js +++ b/packages/kit/test/prerendering/basics/test/tests.spec.js @@ -158,6 +158,16 @@ test('does not prerender page with shadow endpoint with non-load handler', () => assert.isFalse(fs.existsSync(`${build}/shadowed-post/__data.json`)); }); +test('prerenders page that coexists with a GET server endpoint', () => { + assert.isTrue(fs.existsSync(`${build}/prerender-with-server-endpoint.html`)); +}); + +test('prerendering a page with a linked GET server endpoint processes properly', () => { + assert.isTrue(fs.existsSync(`${build}/linked-api.html`)); + assert.isTrue(fs.existsSync(`${build}/linked-api/my-awesome-endpoint.json`)); + assert.isFalse(fs.existsSync(`${build}/linked-api/my-awesome-endpoint.html`)); +}); + test('decodes paths when writing files', () => { let content = read('encoding/path with spaces.html'); expect(content).toMatch('

path with spaces

'); From d3aeceae68f5c388864ec8c2154019b351be6409 Mon Sep 17 00:00:00 2001 From: Aenri Lovehart Date: Mon, 30 Mar 2026 11:36:21 -0400 Subject: [PATCH 2/6] Ran pnpm lint --- packages/kit/src/core/postbuild/prerender.js | 71 +++++++++++-------- .../basics/src/routes/linked-api/+page.svelte | 2 +- .../my-awesome-endpoint.json/+server.js | 8 +-- .../+page.svelte | 2 +- .../prerender-with-server-endpoint/+server.js | 8 +-- .../prerendering/basics/test/tests.spec.js | 6 +- 6 files changed, 53 insertions(+), 44 deletions(-) diff --git a/packages/kit/src/core/postbuild/prerender.js b/packages/kit/src/core/postbuild/prerender.js index 5baaa4b58f46..b321a3de3fdb 100644 --- a/packages/kit/src/core/postbuild/prerender.js +++ b/packages/kit/src/core/postbuild/prerender.js @@ -216,14 +216,16 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env }) { * @param {boolean} [expect_html] */ function enqueue(referrer, decoded, encoded, generated_from_id, expect_html) { - const key = expect_html ? decoded + '\x00page' : decoded + const key = expect_html ? decoded + '\x00page' : decoded; if (seen.has(key)) return; seen.add(key); const file = decoded.slice(config.paths.base.length + 1); if (files.has(file)) return; - return q.add(() => visit(decoded, encoded || encodeURI(decoded), referrer, generated_from_id, expect_html)); + return q.add(() => + visit(decoded, encoded || encodeURI(decoded), referrer, generated_from_id, expect_html) + ); } /** @@ -238,35 +240,38 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env }) { handle_http_error({ status: 404, path: decoded, referrer, referenceType: 'linked' }); return; } - + const requestHeaders = expect_html ? { Accept: 'text/html' } : {}; /** @type {Map} */ const dependencies = new Map(); - const response = await server.respond(new Request(config.prerender.origin + encoded, { headers: requestHeaders }), { - getClientAddress() { - throw new Error('Cannot read clientAddress during prerendering'); - }, - prerendering: { - dependencies, - remote_responses - }, - read: (file) => { - // stuff we just wrote - const filepath = saved.get(file); - if (filepath) return readFileSync(filepath); - - // Static assets emitted during build - if (file.startsWith(config.appDir)) { - return readFileSync(`${out}/server/${file}`); - } + const response = await server.respond( + new Request(config.prerender.origin + encoded, { headers: requestHeaders }), + { + getClientAddress() { + throw new Error('Cannot read clientAddress during prerendering'); + }, + prerendering: { + dependencies, + remote_responses + }, + read: (file) => { + // stuff we just wrote + const filepath = saved.get(file); + if (filepath) return readFileSync(filepath); + + // Static assets emitted during build + if (file.startsWith(config.appDir)) { + return readFileSync(`${out}/server/${file}`); + } - // stuff in `static` - return readFileSync(join(config.files.assets, file)); - }, - emulator, - }); + // stuff in `static` + return readFileSync(join(config.files.assets, file)); + }, + emulator + } + ); const encoded_id = response.headers.get('x-sveltekit-routeid'); const decoded_id = encoded_id && decode_uri(encoded_id); @@ -539,10 +544,12 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env }) { if (processed_id.includes('[')) continue; const path = `/${get_route_segments(processed_id).join('/')}`; - - const route_data = metadata.routes.get(id); - if (route_data?.page.prerender === true) void enqueue(null, config.paths.base + path, undefined, undefined, true) - if (route_data?.api.prerender === true) void enqueue(null, config.paths.base + path, undefined, undefined, false) + + const route_data = metadata.routes.get(id); + if (route_data?.page.prerender === true) + void enqueue(null, config.paths.base + path, undefined, undefined, true); + if (route_data?.api.prerender === true) + void enqueue(null, config.paths.base + path, undefined, undefined, false); } } } else { @@ -554,8 +561,10 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env }) { const route_data = metadata.routes.get(id); for (const entry of entries) { - if (route_data?.page.prerender === true) void enqueue(null, config.paths.base + entry, undefined, id, true); - if (route_data?.api.prerender === true) void enqueue(null, config.paths.base + entry, undefined, id, false); + if (route_data?.page.prerender === true) + void enqueue(null, config.paths.base + entry, undefined, id, true); + if (route_data?.api.prerender === true) + void enqueue(null, config.paths.base + entry, undefined, id, false); } } diff --git a/packages/kit/test/prerendering/basics/src/routes/linked-api/+page.svelte b/packages/kit/test/prerendering/basics/src/routes/linked-api/+page.svelte index c454a66f70de..bde0a5406dea 100644 --- a/packages/kit/test/prerendering/basics/src/routes/linked-api/+page.svelte +++ b/packages/kit/test/prerendering/basics/src/routes/linked-api/+page.svelte @@ -2,4 +2,4 @@ import { resolve } from '$app/paths'; -My Awesome Endpoint \ No newline at end of file +My Awesome Endpoint diff --git a/packages/kit/test/prerendering/basics/src/routes/linked-api/my-awesome-endpoint.json/+server.js b/packages/kit/test/prerendering/basics/src/routes/linked-api/my-awesome-endpoint.json/+server.js index 424e696be1bf..f01a402dd8ed 100644 --- a/packages/kit/test/prerendering/basics/src/routes/linked-api/my-awesome-endpoint.json/+server.js +++ b/packages/kit/test/prerendering/basics/src/routes/linked-api/my-awesome-endpoint.json/+server.js @@ -1,7 +1,7 @@ export const prerender = true; export function GET() { - return new Response(JSON.stringify({ ok: true }), { - headers: { 'content-type': 'application/json' } - }); -} \ No newline at end of file + return new Response(JSON.stringify({ ok: true }), { + headers: { 'content-type': 'application/json' } + }); +} diff --git a/packages/kit/test/prerendering/basics/src/routes/prerender-with-server-endpoint/+page.svelte b/packages/kit/test/prerendering/basics/src/routes/prerender-with-server-endpoint/+page.svelte index 20dd3d8af17f..8c966b6e13b0 100644 --- a/packages/kit/test/prerendering/basics/src/routes/prerender-with-server-endpoint/+page.svelte +++ b/packages/kit/test/prerendering/basics/src/routes/prerender-with-server-endpoint/+page.svelte @@ -1 +1 @@ -

prerendered page with server endpoint

\ No newline at end of file +

prerendered page with server endpoint

diff --git a/packages/kit/test/prerendering/basics/src/routes/prerender-with-server-endpoint/+server.js b/packages/kit/test/prerendering/basics/src/routes/prerender-with-server-endpoint/+server.js index 64b7237d1d66..7956019cce17 100644 --- a/packages/kit/test/prerendering/basics/src/routes/prerender-with-server-endpoint/+server.js +++ b/packages/kit/test/prerendering/basics/src/routes/prerender-with-server-endpoint/+server.js @@ -1,5 +1,5 @@ export function GET() { - return new Response(JSON.stringify({ ok: true }), { - headers: { 'content-type': 'application/json' } - }); -} \ No newline at end of file + return new Response(JSON.stringify({ ok: true }), { + headers: { 'content-type': 'application/json' } + }); +} diff --git a/packages/kit/test/prerendering/basics/test/tests.spec.js b/packages/kit/test/prerendering/basics/test/tests.spec.js index 7696b38b34b9..e3a82b23928d 100644 --- a/packages/kit/test/prerendering/basics/test/tests.spec.js +++ b/packages/kit/test/prerendering/basics/test/tests.spec.js @@ -159,13 +159,13 @@ test('does not prerender page with shadow endpoint with non-load handler', () => }); test('prerenders page that coexists with a GET server endpoint', () => { - assert.isTrue(fs.existsSync(`${build}/prerender-with-server-endpoint.html`)); + assert.isTrue(fs.existsSync(`${build}/prerender-with-server-endpoint.html`)); }); test('prerendering a page with a linked GET server endpoint processes properly', () => { assert.isTrue(fs.existsSync(`${build}/linked-api.html`)); - assert.isTrue(fs.existsSync(`${build}/linked-api/my-awesome-endpoint.json`)); - assert.isFalse(fs.existsSync(`${build}/linked-api/my-awesome-endpoint.html`)); + assert.isTrue(fs.existsSync(`${build}/linked-api/my-awesome-endpoint.json`)); + assert.isFalse(fs.existsSync(`${build}/linked-api/my-awesome-endpoint.html`)); }); test('decodes paths when writing files', () => { From 9a624c3d029b21ed9c088e882774e5e7c447066c Mon Sep 17 00:00:00 2001 From: Aenri Lovehart Date: Sat, 4 Apr 2026 21:15:14 -0400 Subject: [PATCH 3/6] made changeset, added add'l check to prerender.js, and edited test names to conform --- .changeset/brown-eggs-march.md | 5 +++++ packages/kit/src/core/postbuild/prerender.js | 10 +++++----- .../+page.svelte | 0 .../+server.js | 0 .../basics/src/routes/get-and-post/+page.svelte | 1 + .../basics/src/routes/get-and-post/+server.ts | 2 ++ .../kit/test/prerendering/basics/test/tests.spec.js | 8 ++++++-- 7 files changed, 19 insertions(+), 7 deletions(-) create mode 100644 .changeset/brown-eggs-march.md rename packages/kit/test/prerendering/basics/src/routes/{prerender-with-server-endpoint => duplicate-get}/+page.svelte (100%) rename packages/kit/test/prerendering/basics/src/routes/{prerender-with-server-endpoint => duplicate-get}/+server.js (100%) create mode 100644 packages/kit/test/prerendering/basics/src/routes/get-and-post/+page.svelte create mode 100644 packages/kit/test/prerendering/basics/src/routes/get-and-post/+server.ts diff --git a/.changeset/brown-eggs-march.md b/.changeset/brown-eggs-march.md new file mode 100644 index 000000000000..79f946e8e712 --- /dev/null +++ b/.changeset/brown-eggs-march.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Fixed prerendering pipeline bug found in sveltejs/kit#15620 and sveltejs/kit#10735 diff --git a/packages/kit/src/core/postbuild/prerender.js b/packages/kit/src/core/postbuild/prerender.js index b321a3de3fdb..f934cbca641f 100644 --- a/packages/kit/src/core/postbuild/prerender.js +++ b/packages/kit/src/core/postbuild/prerender.js @@ -241,7 +241,7 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env }) { return; } - const requestHeaders = expect_html ? { Accept: 'text/html' } : {}; + const requestHeaders = expect_html ? { Accept: 'text/html' } : undefined; /** @type {Map} */ const dependencies = new Map(); @@ -546,9 +546,9 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env }) { const path = `/${get_route_segments(processed_id).join('/')}`; const route_data = metadata.routes.get(id); - if (route_data?.page.prerender === true) + if (route_data?.page.prerender === true && route_data?.page.methods.includes('GET')) void enqueue(null, config.paths.base + path, undefined, undefined, true); - if (route_data?.api.prerender === true) + if (route_data?.api.prerender === true && route_data?.api.methods.includes('GET') || route_data?.api.methods.includes('*')) void enqueue(null, config.paths.base + path, undefined, undefined, false); } } @@ -561,9 +561,9 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env }) { const route_data = metadata.routes.get(id); for (const entry of entries) { - if (route_data?.page.prerender === true) + if (route_data?.page.prerender === true && route_data?.page.methods.includes('GET')) void enqueue(null, config.paths.base + entry, undefined, id, true); - if (route_data?.api.prerender === true) + if (route_data?.api.prerender === true && route_data?.api.methods.includes('GET') || route_data?.api.methods.includes('*')) void enqueue(null, config.paths.base + entry, undefined, id, false); } } diff --git a/packages/kit/test/prerendering/basics/src/routes/prerender-with-server-endpoint/+page.svelte b/packages/kit/test/prerendering/basics/src/routes/duplicate-get/+page.svelte similarity index 100% rename from packages/kit/test/prerendering/basics/src/routes/prerender-with-server-endpoint/+page.svelte rename to packages/kit/test/prerendering/basics/src/routes/duplicate-get/+page.svelte diff --git a/packages/kit/test/prerendering/basics/src/routes/prerender-with-server-endpoint/+server.js b/packages/kit/test/prerendering/basics/src/routes/duplicate-get/+server.js similarity index 100% rename from packages/kit/test/prerendering/basics/src/routes/prerender-with-server-endpoint/+server.js rename to packages/kit/test/prerendering/basics/src/routes/duplicate-get/+server.js diff --git a/packages/kit/test/prerendering/basics/src/routes/get-and-post/+page.svelte b/packages/kit/test/prerendering/basics/src/routes/get-and-post/+page.svelte new file mode 100644 index 000000000000..6b51d324868e --- /dev/null +++ b/packages/kit/test/prerendering/basics/src/routes/get-and-post/+page.svelte @@ -0,0 +1 @@ +Hello World... \ No newline at end of file diff --git a/packages/kit/test/prerendering/basics/src/routes/get-and-post/+server.ts b/packages/kit/test/prerendering/basics/src/routes/get-and-post/+server.ts new file mode 100644 index 000000000000..b4c132caabef --- /dev/null +++ b/packages/kit/test/prerendering/basics/src/routes/get-and-post/+server.ts @@ -0,0 +1,2 @@ + +export async function POST() { return new Response('OK', { status: 200 }) } diff --git a/packages/kit/test/prerendering/basics/test/tests.spec.js b/packages/kit/test/prerendering/basics/test/tests.spec.js index e3a82b23928d..95a648650698 100644 --- a/packages/kit/test/prerendering/basics/test/tests.spec.js +++ b/packages/kit/test/prerendering/basics/test/tests.spec.js @@ -158,8 +158,12 @@ test('does not prerender page with shadow endpoint with non-load handler', () => assert.isFalse(fs.existsSync(`${build}/shadowed-post/__data.json`)); }); -test('prerenders page that coexists with a GET server endpoint', () => { - assert.isTrue(fs.existsSync(`${build}/prerender-with-server-endpoint.html`)); +test('prerendering a page that coexists with a GET server endpoint', () => { + assert.isTrue(fs.existsSync(`${build}/duplicate-get.html`)); +}); + +test('prerendering a page that coexists with a POST server endpoint', () => { + assert.isTrue(fs.existsSync(`${build}/get-and-post.html`)); }); test('prerendering a page with a linked GET server endpoint processes properly', () => { From e4dabbb8892a84d7e93bb14f5fd790e47f2c0da8 Mon Sep 17 00:00:00 2001 From: Aenri Lovehart Date: Sat, 4 Apr 2026 21:23:36 -0400 Subject: [PATCH 4/6] fixed typecheck fail with new field to ServerMetadataRoute.[api,page] --- packages/kit/src/types/internal.d.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/kit/src/types/internal.d.ts b/packages/kit/src/types/internal.d.ts index e10b4b15862f..b07d1e9de16e 100644 --- a/packages/kit/src/types/internal.d.ts +++ b/packages/kit/src/types/internal.d.ts @@ -362,9 +362,11 @@ export interface ServerMetadataRoute { config: any; api: { methods: Array; + prerender?: boolean | 'auto'; }; page: { methods: Array<'GET' | 'POST'>; + prerender?: boolean | 'auto'; }; methods: Array; prerender: PrerenderOption | undefined; From 1e6d5c121c33ee9810fefc4671e9b6e202f15976 Mon Sep 17 00:00:00 2001 From: Aenri Lovehart Date: Sat, 4 Apr 2026 21:28:30 -0400 Subject: [PATCH 5/6] should pass pnpm lint now, forgot to fix that --- packages/kit/src/core/postbuild/prerender.js | 10 ++++++++-- .../basics/src/routes/get-and-post/+page.svelte | 2 +- .../basics/src/routes/get-and-post/+server.ts | 5 +++-- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/kit/src/core/postbuild/prerender.js b/packages/kit/src/core/postbuild/prerender.js index f934cbca641f..11abb8888ea1 100644 --- a/packages/kit/src/core/postbuild/prerender.js +++ b/packages/kit/src/core/postbuild/prerender.js @@ -548,7 +548,10 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env }) { const route_data = metadata.routes.get(id); if (route_data?.page.prerender === true && route_data?.page.methods.includes('GET')) void enqueue(null, config.paths.base + path, undefined, undefined, true); - if (route_data?.api.prerender === true && route_data?.api.methods.includes('GET') || route_data?.api.methods.includes('*')) + if ( + (route_data?.api.prerender === true && route_data?.api.methods.includes('GET')) || + route_data?.api.methods.includes('*') + ) void enqueue(null, config.paths.base + path, undefined, undefined, false); } } @@ -563,7 +566,10 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env }) { for (const entry of entries) { if (route_data?.page.prerender === true && route_data?.page.methods.includes('GET')) void enqueue(null, config.paths.base + entry, undefined, id, true); - if (route_data?.api.prerender === true && route_data?.api.methods.includes('GET') || route_data?.api.methods.includes('*')) + if ( + route_data?.api.prerender === true && + (route_data?.api.methods.includes('GET') || route_data?.api.methods.includes('*')) + ) void enqueue(null, config.paths.base + entry, undefined, id, false); } } diff --git a/packages/kit/test/prerendering/basics/src/routes/get-and-post/+page.svelte b/packages/kit/test/prerendering/basics/src/routes/get-and-post/+page.svelte index 6b51d324868e..7f4c64a81129 100644 --- a/packages/kit/test/prerendering/basics/src/routes/get-and-post/+page.svelte +++ b/packages/kit/test/prerendering/basics/src/routes/get-and-post/+page.svelte @@ -1 +1 @@ -Hello World... \ No newline at end of file +Hello World... diff --git a/packages/kit/test/prerendering/basics/src/routes/get-and-post/+server.ts b/packages/kit/test/prerendering/basics/src/routes/get-and-post/+server.ts index b4c132caabef..0ac0f6ca06d8 100644 --- a/packages/kit/test/prerendering/basics/src/routes/get-and-post/+server.ts +++ b/packages/kit/test/prerendering/basics/src/routes/get-and-post/+server.ts @@ -1,2 +1,3 @@ - -export async function POST() { return new Response('OK', { status: 200 }) } +export async function POST() { + return new Response('OK', { status: 200 }); +} From b2775fb9d70b66c75c101966da3ed7108caf6562 Mon Sep 17 00:00:00 2001 From: Aenri Lovehart Date: Sat, 4 Apr 2026 22:33:43 -0400 Subject: [PATCH 6/6] fixed regression featuring me accidentally ===ing a value that only needed to be truthy --- packages/kit/src/core/postbuild/prerender.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/kit/src/core/postbuild/prerender.js b/packages/kit/src/core/postbuild/prerender.js index 11abb8888ea1..f0bdf74f4c78 100644 --- a/packages/kit/src/core/postbuild/prerender.js +++ b/packages/kit/src/core/postbuild/prerender.js @@ -546,11 +546,11 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env }) { const path = `/${get_route_segments(processed_id).join('/')}`; const route_data = metadata.routes.get(id); - if (route_data?.page.prerender === true && route_data?.page.methods.includes('GET')) + if (route_data?.page.prerender && route_data?.page.methods.includes('GET')) void enqueue(null, config.paths.base + path, undefined, undefined, true); if ( - (route_data?.api.prerender === true && route_data?.api.methods.includes('GET')) || - route_data?.api.methods.includes('*') + route_data?.api.prerender && + (route_data?.api.methods.includes('GET') || route_data?.api.methods.includes('*')) ) void enqueue(null, config.paths.base + path, undefined, undefined, false); } @@ -564,10 +564,10 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env }) { const route_data = metadata.routes.get(id); for (const entry of entries) { - if (route_data?.page.prerender === true && route_data?.page.methods.includes('GET')) + if (route_data?.page.prerender && route_data?.page.methods.includes('GET')) void enqueue(null, config.paths.base + entry, undefined, id, true); if ( - route_data?.api.prerender === true && + route_data?.api.prerender && (route_data?.api.methods.includes('GET') || route_data?.api.methods.includes('*')) ) void enqueue(null, config.paths.base + entry, undefined, id, false);