fork of hey-api/openapi-ts because I need some additional things
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request #1470 from hey-api/fix/axios-merge-headers

fix: handle special Axios keywords when merging headers

authored by

Lubos and committed by
GitHub
670e5373 680e55fe

+107 -4
+5
.changeset/old-seals-visit.md
··· 1 + --- 2 + '@hey-api/client-axios': patch 3 + --- 4 + 5 + fix: handle special Axios keywords when merging headers
+30 -1
packages/client-axios/src/__tests__/utils.test.ts
··· 1 1 import { describe, expect, it, vi } from 'vitest'; 2 2 3 - import { getAuthToken, setAuthParams } from '../utils'; 3 + import { 4 + axiosHeadersKeywords, 5 + getAuthToken, 6 + mergeHeaders, 7 + setAuthParams, 8 + } from '../utils'; 4 9 5 10 describe('getAuthToken', () => { 6 11 it('returns access token', async () => { ··· 68 73 ); 69 74 expect(token).toBeUndefined(); 70 75 }); 76 + }); 77 + 78 + describe('mergeHeaders', () => { 79 + it.each(axiosHeadersKeywords)( 80 + 'handles "%s" Axios special keyword', 81 + (keyword) => { 82 + const headers = mergeHeaders( 83 + { 84 + foo: 'foo', 85 + }, 86 + { 87 + [keyword]: { 88 + foo: 'foo', 89 + }, 90 + }, 91 + ); 92 + expect(headers).toEqual({ 93 + foo: 'foo', 94 + [keyword]: { 95 + foo: 'foo', 96 + }, 97 + }); 98 + }, 99 + ); 71 100 }); 72 101 73 102 describe('setAuthParams', () => {
+24 -1
packages/client-axios/src/utils.ts
··· 423 423 return config; 424 424 }; 425 425 426 + /** 427 + * Special Axios headers keywords allowing to set headers by request method. 428 + */ 429 + export const axiosHeadersKeywords = [ 430 + 'common', 431 + 'delete', 432 + 'get', 433 + 'head', 434 + 'patch', 435 + 'post', 436 + 'put', 437 + ] as const; 438 + 426 439 export const mergeHeaders = ( 427 440 ...headers: Array<Required<Config>['headers'] | undefined> 428 441 ): Record<any, unknown> => { ··· 435 448 const iterator = Object.entries(header); 436 449 437 450 for (const [key, value] of iterator) { 438 - if (value === null) { 451 + if ( 452 + axiosHeadersKeywords.includes( 453 + key as (typeof axiosHeadersKeywords)[number], 454 + ) && 455 + typeof value === 'object' 456 + ) { 457 + mergedHeaders[key] = { 458 + ...(mergedHeaders[key] as Record<any, unknown>), 459 + ...value, 460 + }; 461 + } else if (value === null) { 439 462 delete mergedHeaders[key]; 440 463 } else if (Array.isArray(value)) { 441 464 for (const v of value) {
+24 -1
packages/openapi-ts/test/__snapshots__/test/generated/v3-hey-api-client-axios-bundle/client/utils.ts.snap
··· 423 423 return config; 424 424 }; 425 425 426 + /** 427 + * Special Axios headers keywords allowing to set headers by request method. 428 + */ 429 + export const axiosHeadersKeywords = [ 430 + 'common', 431 + 'delete', 432 + 'get', 433 + 'head', 434 + 'patch', 435 + 'post', 436 + 'put', 437 + ] as const; 438 + 426 439 export const mergeHeaders = ( 427 440 ...headers: Array<Required<Config>['headers'] | undefined> 428 441 ): Record<any, unknown> => { ··· 435 448 const iterator = Object.entries(header); 436 449 437 450 for (const [key, value] of iterator) { 438 - if (value === null) { 451 + if ( 452 + axiosHeadersKeywords.includes( 453 + key as (typeof axiosHeadersKeywords)[number], 454 + ) && 455 + typeof value === 'object' 456 + ) { 457 + mergedHeaders[key] = { 458 + ...(mergedHeaders[key] as Record<any, unknown>), 459 + ...value, 460 + }; 461 + } else if (value === null) { 439 462 delete mergedHeaders[key]; 440 463 } else if (Array.isArray(value)) { 441 464 for (const v of value) {
+24 -1
packages/openapi-ts/test/__snapshots__/test/generated/v3-hey-api-client-axios-bundle_transform/client/utils.ts.snap
··· 423 423 return config; 424 424 }; 425 425 426 + /** 427 + * Special Axios headers keywords allowing to set headers by request method. 428 + */ 429 + export const axiosHeadersKeywords = [ 430 + 'common', 431 + 'delete', 432 + 'get', 433 + 'head', 434 + 'patch', 435 + 'post', 436 + 'put', 437 + ] as const; 438 + 426 439 export const mergeHeaders = ( 427 440 ...headers: Array<Required<Config>['headers'] | undefined> 428 441 ): Record<any, unknown> => { ··· 435 448 const iterator = Object.entries(header); 436 449 437 450 for (const [key, value] of iterator) { 438 - if (value === null) { 451 + if ( 452 + axiosHeadersKeywords.includes( 453 + key as (typeof axiosHeadersKeywords)[number], 454 + ) && 455 + typeof value === 'object' 456 + ) { 457 + mergedHeaders[key] = { 458 + ...(mergedHeaders[key] as Record<any, unknown>), 459 + ...value, 460 + }; 461 + } else if (value === null) { 439 462 delete mergedHeaders[key]; 440 463 } else if (Array.isArray(value)) { 441 464 for (const v of value) {