@@ -3,7 +3,7 @@ import { HTTPError } from "./error.ts";
33import { isJSONSerializable } from "./utils/internal/object.ts" ;
44
55import type { H3Config } from "./types/h3.ts" ;
6- import type { H3Event } from "./event.ts" ;
6+ import { kEventRes , kEventResHeaders , type H3Event } from "./event.ts" ;
77
88export const kNotFound : symbol = /* @__PURE__ */ Symbol . for ( "h3.notFound" ) ;
99export const kHandled : symbol = /* @__PURE__ */ Symbol . for ( "h3.handled" ) ;
@@ -74,34 +74,39 @@ function prepareResponse(
7474 }
7575
7676 // Only set if event.res.headers is accessed
77- const eventHeaders = ( event . res as { _headers ?: Headers } ) . _headers ;
77+ const preparedRes :
78+ | undefined
79+ | { status ?: number ; statusText ?: string ; [ kEventResHeaders ] ?: Headers } = (
80+ event as any
81+ ) [ kEventRes ] ;
82+ const preparedHeaders = preparedRes ?. [ kEventResHeaders ] ;
7883
7984 if ( ! ( val instanceof Response ) ) {
8085 const res = prepareResponseBody ( val , event , config ) ;
81- const status = event . res . status ;
86+ const status = preparedRes ? .status ;
8287 return new FastResponse (
8388 nullBody ( event . req . method , status ) ? null : res . body ,
8489 {
8590 status,
86- statusText : event . res . statusText ,
91+ statusText : preparedRes ? .statusText ,
8792 headers :
88- res . headers && eventHeaders
89- ? mergeHeaders ( res . headers , eventHeaders )
90- : res . headers || eventHeaders ,
93+ res . headers && preparedHeaders
94+ ? mergeHeaders ( res . headers , preparedHeaders )
95+ : res . headers || preparedHeaders ,
9196 } ,
9297 ) ;
9398 }
9499
95100 // Note: Only check _headers. res.status/statusText are not used as we use them from the response
96- if ( ! eventHeaders ) {
101+ if ( ! preparedHeaders ) {
97102 return val ; // Fast path: no headers to merge
98103 }
99104 return new FastResponse (
100105 nullBody ( event . req . method , val . status ) ? null : val . body ,
101106 {
102107 status : val . status ,
103108 statusText : val . statusText ,
104- headers : mergeHeaders ( eventHeaders , val . headers ) ,
109+ headers : mergeHeaders ( preparedHeaders , val . headers ) ,
105110 } ,
106111 ) as Response ;
107112}
0 commit comments