79 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
 | |
| Object.defineProperty(exports, "__esModule", { value: true });
 | |
| exports.isEmptyHeaders = exports.buildHeaders = void 0;
 | |
| const values_1 = require("./utils/values.js");
 | |
| 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 ((0, values_1.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 = (0, values_1.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];
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 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 };
 | |
| };
 | |
| exports.buildHeaders = buildHeaders;
 | |
| const isEmptyHeaders = (headers) => {
 | |
|     for (const _ of iterateHeaders(headers))
 | |
|         return false;
 | |
|     return true;
 | |
| };
 | |
| exports.isEmptyHeaders = isEmptyHeaders;
 | |
| //# sourceMappingURL=headers.js.map
 |