@@ -54,30 +54,48 @@ export function nodeHeaderToWebHeader(
54
54
/**
55
55
* Convert a fetch API Headers object to a Node.js headers object.
56
56
*
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.
59
60
*/
60
61
export function webHeaderToNodeHeaders (
61
62
headersInit : HeadersInit ,
62
- defaultNodeHeaders ?: http . OutgoingHttpHeaders ,
63
+ defaultNodeHeaders ?: http . OutgoingHttpHeaders | readonly string [ ] ,
63
64
) : http . OutgoingHttpHeaders ;
64
65
export function webHeaderToNodeHeaders (
65
66
headersInit : HeadersInit | undefined ,
66
67
) : http . OutgoingHttpHeaders | undefined ;
67
68
export function webHeaderToNodeHeaders (
68
69
headersInit : HeadersInit | undefined ,
69
- defaultNodeHeaders ?: http . OutgoingHttpHeaders ,
70
+ defaultNodeHeaders ?: http . OutgoingHttpHeaders | readonly string [ ] ,
70
71
) : http . OutgoingHttpHeaders | undefined {
71
72
if ( headersInit === undefined && defaultNodeHeaders === undefined ) {
72
73
return undefined ;
73
74
}
74
75
const o = Object . create ( null ) as http . OutgoingHttpHeaders ;
75
76
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
+ }
81
99
}
82
100
}
83
101
}
0 commit comments