Named form actions do not work with Vercel ISR.
Describe the bug
A named form action returns a 500 Internal Error when served from Vercel with ISR.
Reproduction
Steps:
- Clone repo: https://github.com/Leftium/kit-demos/tree/isr-actions
- Deploy to Vercel
- Load
/(root path): https://kit-demos-git-isr-actions-leftium.vercel.app/ - Click "Submit" button
Expected:
- "undefined" turns to "true" (the property
form.successfrom return value of form action.)
Actual:
- 500 Internal Error
- Vercel log may show error message like "cannot find default form action."
Logs
No response
System Info
System:
OS: Windows 11 10.0.22621
CPU: (8) x64 Intel(R) Core(TM) i5-8250U CPU @ 1.60GHz
Memory: 8.99 GB / 23.86 GB
Binaries:
Node: 18.18.2 - V:\scoop\apps\nodejs-lts\current\node.EXE
npm: 9.8.1 - V:\scoop\apps\nodejs-lts\current\npm.CMD
pnpm: 8.11.0 - V:\pnpm-home\pnpm.CMD
Browsers:
Edge: Chromium (120.0.2210.61)
Internet Explorer: 11.0.22621.1
npmPackages:
@sveltejs/adapter-auto: ^2.0.0 => 2.1.1
@sveltejs/kit: ^1.20.4 => 1.30.3
svelte: ^4.0.5 => 4.2.8
vite: ^4.4.2 => 4.5.1
Severity
serious, but I can work around it
Additional Information
- The error does not happen if the
defaultaction is used: https://kit-demos-git-isr-actions-leftium.vercel.app/with-isr-default-action - The error does not happen if ISR is not used: https://kit-demos-git-isr-actions-leftium.vercel.app/without-isr
So the work-arounds are to not use named form actions or not use ISR.
I have the same issue, but with ISR and Speed-Insights (also from Vercel) producing the same error message.
Discussion: https://github.com/orgs/vercel/discussions/4460
Can confirm that disabling both Vercel features fixes these issues and my named action works as expected.
I believe I am hitting this same issue seeing as a form that previously worked on hitting "save" now says "404 Not Found" upon hitting "save" after enabling ISR in a root-level +layout.server.js that affected that route.
I mean this kind of makes sense though, and I think the ISR docs just need to specifically point out that when you enable ISR for any given route(s), those routes are going to be processed as though prerender is set to true (else ISR would not really do anything for that route). I have added a note or two along these lines in PR #12030
I am assuming my assumptions here are correct about ISR turning a route essentially into a prerendered route and thus causing server-side functions to no longer fire, although I am not 100% certain I am correct in my way of explaining it.
After seeing https://github.com/sveltejs/kit/issues/661#issuecomment-1812038166 I am wondering if my initial interpretation above is accurate.