@@ -114,7 +114,7 @@ function appendHeader (headers, name, value) {
114114 // forbidden response-header name, return.
115115
116116 // 7. Append (name, value) to headers’s header list.
117- return headers [ kHeadersList ] . append ( name , value )
117+ return headers [ kHeadersList ] . append ( name , value , false )
118118
119119 // 8. If headers’s guard is "request-no-cors", then remove
120120 // privileged no-CORS request headers from headers
@@ -138,20 +138,14 @@ class HeadersList {
138138 /**
139139 * @see https://fetch.spec.whatwg.org/#header-list-contains
140140 * @param {string } name
141+ * @param {boolean } isLowerCase
141142 */
142- contains ( name ) {
143+ contains ( name , isLowerCase ) {
143144 // A header list list contains a header name name if list
144145 // contains a header whose name is a byte-case-insensitive
145146 // match for name.
146147
147- return this [ kHeadersMap ] . has ( name . toLowerCase ( ) )
148- }
149-
150- /**
151- * @param {string } name
152- */
153- lowerCaseContains ( name ) {
154- return this [ kHeadersMap ] . has ( name )
148+ return this [ kHeadersMap ] . has ( isLowerCase ? name : name . toLowerCase ( ) )
155149 }
156150
157151 clear ( ) {
@@ -164,13 +158,14 @@ class HeadersList {
164158 * @see https://fetch.spec.whatwg.org/#concept-header-list-append
165159 * @param {string } name
166160 * @param {string } value
161+ * @param {boolean } isLowerCase
167162 */
168- append ( name , value ) {
163+ append ( name , value , isLowerCase ) {
169164 this [ kHeadersSortedMap ] = null
170165
171166 // 1. If list contains name, then set name to the first such
172167 // header’s name.
173- const lowercaseName = name . toLowerCase ( )
168+ const lowercaseName = isLowerCase ? name : name . toLowerCase ( )
174169 const exists = this [ kHeadersMap ] . get ( lowercaseName )
175170
176171 // 2. Append (name, value) to list.
@@ -189,41 +184,15 @@ class HeadersList {
189184 }
190185 }
191186
192- /**
193- * @param {string } name
194- * @param {string } value
195- */
196- lowerCaseAppend ( name , value ) {
197- this [ kHeadersSortedMap ] = null
198-
199- // 1. If list contains name, then set name to the first such
200- // header’s name.
201- const exists = this [ kHeadersMap ] . get ( name )
202-
203- // 2. Append (name, value) to list.
204- if ( exists ) {
205- const delimiter = name === 'cookie' ? '; ' : ', '
206- this [ kHeadersMap ] . set ( name , {
207- name : exists . name ,
208- value : `${ exists . value } ${ delimiter } ${ value } `
209- } )
210- } else {
211- this [ kHeadersMap ] . set ( name , { name, value } )
212- }
213-
214- if ( name === 'set-cookie' ) {
215- ( this . cookies ??= [ ] ) . push ( value )
216- }
217- }
218-
219187 /**
220188 * @see https://fetch.spec.whatwg.org/#concept-header-list-set
221189 * @param {string } name
222190 * @param {string } value
191+ * @param {boolean } isLowerCase
223192 */
224- set ( name , value ) {
193+ set ( name , value , isLowerCase ) {
225194 this [ kHeadersSortedMap ] = null
226- const lowercaseName = name . toLowerCase ( )
195+ const lowercaseName = isLowerCase ? name : name . toLowerCase ( )
227196
228197 if ( lowercaseName === 'set-cookie' ) {
229198 this . cookies = [ value ]
@@ -236,35 +205,14 @@ class HeadersList {
236205 this [ kHeadersMap ] . set ( lowercaseName , { name, value } )
237206 }
238207
239- /**
240- * @param {string } name
241- * @param {string } value
242- */
243- lowerCaseSet ( name , value ) {
244- if ( name === 'set-cookie' ) {
245- this . cookies = [ value ]
246- }
247-
248- // 1. If list contains name, then set the value of
249- // the first such header to value and remove the
250- // others.
251- // 2. Otherwise, append header (name, value) to list.
252- this [ kHeadersMap ] . set ( name , { name, value } )
253- }
254-
255208 /**
256209 * @see https://fetch.spec.whatwg.org/#concept-header-list-delete
257210 * @param {string } name
211+ * @param {boolean } isLowerCase
258212 */
259- delete ( name ) {
260- return this . lowerCaseDelete ( name . toLowerCase ( ) )
261- }
262-
263- /**
264- * @param {string } name
265- */
266- lowerCaseDelete ( name ) {
213+ delete ( name , isLowerCase ) {
267214 this [ kHeadersSortedMap ] = null
215+ if ( ! isLowerCase ) name = name . toLowerCase ( )
268216
269217 if ( name === 'set-cookie' ) {
270218 this . cookies = null
@@ -276,24 +224,15 @@ class HeadersList {
276224 /**
277225 * @see https://fetch.spec.whatwg.org/#concept-header-list-get
278226 * @param {string } name
227+ * @param {boolean } isLowerCase
279228 * @returns {string | null }
280229 */
281- get ( name ) {
282- const value = this [ kHeadersMap ] . get ( name . toLowerCase ( ) )
283-
230+ get ( name , isLowerCase ) {
284231 // 1. If list does not contain name, then return null.
285232 // 2. Return the values of all headers in list whose name
286233 // is a byte-case-insensitive match for name,
287234 // separated from each other by 0x2C 0x20, in order.
288- return value === undefined ? null : value . value
289- }
290-
291- /**
292- * @param {string } name
293- * @returns {string | null }
294- */
295- lowerCaseGet ( name ) {
296- return this [ kHeadersMap ] . get ( name ) ?. value ?? null
235+ return this [ kHeadersMap ] . get ( isLowerCase ? name : name . toLowerCase ( ) ) ?. value ?? null
297236 }
298237
299238 * [ Symbol . iterator ] ( ) {
@@ -383,14 +322,14 @@ class Headers {
383322
384323 // 6. If this’s header list does not contain name, then
385324 // return.
386- if ( ! this [ kHeadersList ] . contains ( name ) ) {
325+ if ( ! this [ kHeadersList ] . contains ( name , false ) ) {
387326 return
388327 }
389328
390329 // 7. Delete name from this’s header list.
391330 // 8. If this’s guard is "request-no-cors", then remove
392331 // privileged no-CORS request headers from this.
393- this [ kHeadersList ] . delete ( name )
332+ this [ kHeadersList ] . delete ( name , false )
394333 }
395334
396335 // https://fetch.spec.whatwg.org/#dom-headers-get
@@ -412,7 +351,7 @@ class Headers {
412351
413352 // 2. Return the result of getting name from this’s header
414353 // list.
415- return this [ kHeadersList ] . get ( name )
354+ return this [ kHeadersList ] . get ( name , false )
416355 }
417356
418357 // https://fetch.spec.whatwg.org/#dom-headers-has
@@ -434,7 +373,7 @@ class Headers {
434373
435374 // 2. Return true if this’s header list contains name;
436375 // otherwise false.
437- return this [ kHeadersList ] . contains ( name )
376+ return this [ kHeadersList ] . contains ( name , false )
438377 }
439378
440379 // https://fetch.spec.whatwg.org/#dom-headers-set
@@ -483,7 +422,7 @@ class Headers {
483422 // 7. Set (name, value) in this’s header list.
484423 // 8. If this’s guard is "request-no-cors", then remove
485424 // privileged no-CORS request headers from this
486- this [ kHeadersList ] . set ( name , value )
425+ this [ kHeadersList ] . set ( name , value , false )
487426 }
488427
489428 // https://fetch.spec.whatwg.org/#dom-headers-getsetcookie
0 commit comments