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
 |