@@ -103,20 +103,23 @@ export function isRouteMethod(method?: string) {
103103
104104export function mergeHeaders (
105105 ...sources : ( HeadersInit | Record < string , string | undefined > | undefined ) [ ]
106- ) : Headers {
107- const merged = new Headers ( ) ;
106+ ) : Record < string , string > {
107+ const merged : Record < string , string > = { } ;
108108 for ( const source of sources ) {
109109 if ( ! source ) {
110110 continue ;
111111 }
112- // Object.entries/spread on a Headers instance yields nothing, dropping it.
112+ // Headers has no enumerable keys (Object.entries/spread drops it); the
113+ // result stays a plain object so plugins can spread `options.headers`.
113114 if ( source instanceof Headers ) {
114- source . forEach ( ( value , key ) => merged . set ( key , value ) ) ;
115+ source . forEach ( ( value , key ) => {
116+ merged [ key ] = value ;
117+ } ) ;
115118 } else {
116119 const entries = Array . isArray ( source ) ? source : Object . entries ( source ) ;
117120 for ( const [ key , value ] of entries ) {
118121 if ( value !== null && value !== undefined ) {
119- merged . set ( key , value ) ;
122+ merged [ key ] = value ;
120123 }
121124 }
122125 }
@@ -125,7 +128,7 @@ export function mergeHeaders(
125128}
126129
127130export async function getHeaders ( opts ?: BetterFetchOption ) {
128- const headers = mergeHeaders ( opts ?. headers , await getAuthHeader ( opts ) ) ;
131+ const headers = new Headers ( mergeHeaders ( opts ?. headers , await getAuthHeader ( opts ) ) ) ;
129132
130133 if ( ! headers . has ( "content-type" ) ) {
131134 const contentType = detectContentType ( opts ?. body ) ;
0 commit comments