@@ -54,30 +54,48 @@ export function nodeHeaderToWebHeader(
5454/**
5555 * Convert a fetch API Headers object to a Node.js headers object.
5656 *
57- * Optionally accepts default Node.js headers. If provided, fetch API headers
58- * are appended to the defaults. The original defaults headers are not modified.
57+ * Optionally accepts default Node.js headers as a dict or an array.
58+ * If provided, fetch API headers are appended to the defaults.
59+ * The original defaults headers are not modified.
5960 */
6061export function webHeaderToNodeHeaders (
6162 headersInit : HeadersInit ,
62- defaultNodeHeaders ?: http . OutgoingHttpHeaders ,
63+ defaultNodeHeaders ?: http . OutgoingHttpHeaders | readonly string [ ] ,
6364) : http . OutgoingHttpHeaders ;
6465export function webHeaderToNodeHeaders (
6566 headersInit : HeadersInit | undefined ,
6667) : http . OutgoingHttpHeaders | undefined ;
6768export function webHeaderToNodeHeaders (
6869 headersInit : HeadersInit | undefined ,
69- defaultNodeHeaders ?: http . OutgoingHttpHeaders ,
70+ defaultNodeHeaders ?: http . OutgoingHttpHeaders | readonly string [ ] ,
7071) : http . OutgoingHttpHeaders | undefined {
7172 if ( headersInit === undefined && defaultNodeHeaders === undefined ) {
7273 return undefined ;
7374 }
7475 const o = Object . create ( null ) as http . OutgoingHttpHeaders ;
7576 if ( defaultNodeHeaders !== undefined ) {
76- for ( const [ key , value ] of Object . entries ( defaultNodeHeaders ) ) {
77- if ( Array . isArray ( value ) ) {
78- o [ key ] = value . concat ( ) ;
79- } else if ( value !== undefined ) {
80- o [ key ] = value ;
77+ if ( Array . isArray ( defaultNodeHeaders ) ) {
78+ // headers may be an Array where the keys and values are in the same list.
79+ // It is _not_ a list of tuples. So, the even-numbered offsets are key values,
80+ // and the odd-numbered offsets are the associated values.
81+ for ( let i = 0 ; i + 1 < defaultNodeHeaders . length ; i += 2 ) {
82+ const key = defaultNodeHeaders [ i ] ;
83+ const value = defaultNodeHeaders [ i + 1 ] ;
84+ if ( Array . isArray ( o [ key ] ) ) {
85+ o [ key ] . push ( value ) ;
86+ } else if ( typeof o [ key ] == "string" ) {
87+ o [ key ] = [ o [ key ] , value ] ;
88+ } else {
89+ o [ key ] = value ;
90+ }
91+ }
92+ } else {
93+ for ( const [ key , value ] of Object . entries ( defaultNodeHeaders ) ) {
94+ if ( Array . isArray ( value ) ) {
95+ o [ key ] = value . concat ( ) ;
96+ } else if ( value !== undefined ) {
97+ o [ key ] = value ;
98+ }
8199 }
82100 }
83101 }
0 commit comments