@@ -28,14 +28,15 @@ export function createServerResponseAdapter(
2828 let controller : ReadableStreamController < Uint8Array > | undefined ;
2929 let shouldClose = false ;
3030 let wroteHead = false ;
31+ let statusCode = 200 ;
32+ let headers : Record < string , string > | undefined ;
3133
32- const writeHead = (
33- statusCode : number ,
34- headers ?: Record < string , string >
35- ) => {
36- if ( typeof headers === 'string' ) {
34+ const writeHead = ( code : number , headersArg ?: Record < string , string > ) => {
35+ if ( typeof headersArg === 'string' ) {
3736 throw new Error ( 'Status message of writeHead not supported' ) ;
3837 }
38+ statusCode = code ;
39+ headers = headersArg ;
3940 wroteHead = true ;
4041 writeHeadResolver ( {
4142 statusCode,
@@ -57,7 +58,7 @@ export function createServerResponseAdapter(
5758 throw new Error ( 'Buffer not supported' ) ;
5859 }
5960 if ( ! wroteHead ) {
60- writeHead ( 200 ) ;
61+ writeHead ( statusCode , headers ) ;
6162 }
6263 if ( ! controller ) {
6364 bufferedData . push ( new TextEncoder ( ) . encode ( chunk as string ) ) ;
@@ -92,6 +93,21 @@ export function createServerResponseAdapter(
9293 eventEmitter . on ( event , listener ) ;
9394 return fakeServerResponse ;
9495 } ,
96+ get statusCode ( ) {
97+ return statusCode ;
98+ } ,
99+ set statusCode ( code : number ) {
100+ statusCode = code ;
101+
102+ // If the status code is set after writeHead, we need to call
103+ // writeHead again to update the status code.
104+ if ( wroteHead ) {
105+ writeHeadResolver ( {
106+ statusCode,
107+ headers,
108+ } ) ;
109+ }
110+ } ,
95111 } ;
96112
97113 signal . addEventListener ( 'abort' , ( ) => {
0 commit comments