74 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			74 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
 | ||
|  | import { isReadonlyArray } from "./utils/values.mjs"; | ||
|  | const brand_privateNullableHeaders = /* @__PURE__ */ Symbol('brand.privateNullableHeaders'); | ||
|  | function* iterateHeaders(headers) { | ||
|  |     if (!headers) | ||
|  |         return; | ||
|  |     if (brand_privateNullableHeaders in headers) { | ||
|  |         const { values, nulls } = headers; | ||
|  |         yield* values.entries(); | ||
|  |         for (const name of nulls) { | ||
|  |             yield [name, null]; | ||
|  |         } | ||
|  |         return; | ||
|  |     } | ||
|  |     let shouldClear = false; | ||
|  |     let iter; | ||
|  |     if (headers instanceof Headers) { | ||
|  |         iter = headers.entries(); | ||
|  |     } | ||
|  |     else if (isReadonlyArray(headers)) { | ||
|  |         iter = headers; | ||
|  |     } | ||
|  |     else { | ||
|  |         shouldClear = true; | ||
|  |         iter = Object.entries(headers ?? {}); | ||
|  |     } | ||
|  |     for (let row of iter) { | ||
|  |         const name = row[0]; | ||
|  |         if (typeof name !== 'string') | ||
|  |             throw new TypeError('expected header name to be a string'); | ||
|  |         const values = isReadonlyArray(row[1]) ? row[1] : [row[1]]; | ||
|  |         let didClear = false; | ||
|  |         for (const value of values) { | ||
|  |             if (value === undefined) | ||
|  |                 continue; | ||
|  |             // Objects keys always overwrite older headers, they never append.
 | ||
|  |             // Yield a null to clear the header before adding the new values.
 | ||
|  |             if (shouldClear && !didClear) { | ||
|  |                 didClear = true; | ||
|  |                 yield [name, null]; | ||
|  |             } | ||
|  |             yield [name, value]; | ||
|  |         } | ||
|  |     } | ||
|  | } | ||
|  | export const buildHeaders = (newHeaders) => { | ||
|  |     const targetHeaders = new Headers(); | ||
|  |     const nullHeaders = new Set(); | ||
|  |     for (const headers of newHeaders) { | ||
|  |         const seenHeaders = new Set(); | ||
|  |         for (const [name, value] of iterateHeaders(headers)) { | ||
|  |             const lowerName = name.toLowerCase(); | ||
|  |             if (!seenHeaders.has(lowerName)) { | ||
|  |                 targetHeaders.delete(name); | ||
|  |                 seenHeaders.add(lowerName); | ||
|  |             } | ||
|  |             if (value === null) { | ||
|  |                 targetHeaders.delete(name); | ||
|  |                 nullHeaders.add(lowerName); | ||
|  |             } | ||
|  |             else { | ||
|  |                 targetHeaders.append(name, value); | ||
|  |                 nullHeaders.delete(lowerName); | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  |     return { [brand_privateNullableHeaders]: true, values: targetHeaders, nulls: nullHeaders }; | ||
|  | }; | ||
|  | export const isEmptyHeaders = (headers) => { | ||
|  |     for (const _ of iterateHeaders(headers)) | ||
|  |         return false; | ||
|  |     return true; | ||
|  | }; | ||
|  | //# sourceMappingURL=headers.mjs.map
 |