@@ -39,6 +39,7 @@ export async function handleRequest({
3939 let returnValue : RscPayload [ 'returnValue' ] | undefined
4040 let formState : ReactFormState | undefined
4141 let temporaryReferences : unknown | undefined
42+ let statusCode = 200
4243 if ( isAction ) {
4344 // x-rsc-action header exists when action is called via `ReactClient.setServerCallback`.
4445 const actionId = request . headers . get ( 'x-rsc-action' )
@@ -55,15 +56,20 @@ export async function handleRequest({
5556 returnValue = { ok : true , data }
5657 } catch ( e ) {
5758 returnValue = { ok : false , data : e }
59+ statusCode = 500
5860 }
5961 } else {
6062 // otherwise server function is called via `<form action={...}>`
6163 // before hydration (e.g. when javascript is disabled).
6264 // aka progressive enhancement.
6365 const formData = await request . formData ( )
6466 const decodedAction = await decodeAction ( formData )
65- const result = await decodedAction ( )
66- formState = await decodeFormState ( result , formData )
67+ try {
68+ const result = await decodedAction ( )
69+ formState = await decodeFormState ( result , formData )
70+ } catch ( e ) {
71+ statusCode = 500
72+ }
6773 }
6874 }
6975
@@ -82,7 +88,7 @@ export async function handleRequest({
8288
8389 if ( isRscRequest ) {
8490 return new Response ( rscStream , {
85- status : returnValue ?. ok === false ? 500 : undefined ,
91+ status : statusCode ,
8692 headers : {
8793 'content-type' : 'text/x-component;charset=utf-8' ,
8894 vary : 'accept' ,
@@ -106,6 +112,7 @@ export async function handleRequest({
106112
107113 // respond html
108114 return new Response ( htmlStream , {
115+ status : statusCode ,
109116 headers : {
110117 'content-type' : 'text/html;charset=utf-8' ,
111118 vary : 'accept' ,
0 commit comments