Skip to content

Commit d9fe1fd

Browse files
authored
prepareHeaders does not need to return headers any more (#2775)
1 parent dbcc556 commit d9fe1fd

File tree

2 files changed

+51
-5
lines changed

2 files changed

+51
-5
lines changed

packages/toolkit/src/query/fetchBaseQuery.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ export type FetchBaseQueryArgs = {
110110
BaseQueryApi,
111111
'getState' | 'extra' | 'endpoint' | 'type' | 'forced'
112112
>
113-
) => MaybePromise<Headers>
113+
) => MaybePromise<Headers | void>
114114
fetchFn?: (
115115
input: RequestInfo,
116116
init?: RequestInit | undefined
@@ -224,10 +224,15 @@ export function fetchBaseQuery({
224224
...rest,
225225
}
226226

227-
config.headers = await prepareHeaders(
228-
new Headers(stripUndefined(headers)),
229-
{ getState, extra, endpoint, forced, type }
230-
)
227+
headers = new Headers(stripUndefined(headers))
228+
config.headers =
229+
(await prepareHeaders(headers, {
230+
getState,
231+
extra,
232+
endpoint,
233+
forced,
234+
type,
235+
})) || headers
231236

232237
// Only set the content-type to json if appropriate. Will not be true for FormData, ArrayBuffer, Blob, etc.
233238
const isJsonifiable = (body: any) =>

packages/toolkit/src/query/tests/fetchBaseQuery.test.tsx

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -657,6 +657,26 @@ describe('fetchBaseQuery', () => {
657657
expect(request.headers['delete2']).toBeUndefined()
658658
})
659659

660+
test('prepareHeaders can return undefined', async () => {
661+
let request: any
662+
663+
const token = 'accessToken'
664+
665+
const _baseQuery = fetchBaseQuery({
666+
baseUrl,
667+
prepareHeaders: (headers) => {
668+
headers.set('authorization', `Bearer ${token}`)
669+
},
670+
})
671+
672+
const doRequest = async () =>
673+
_baseQuery({ url: '/echo' }, commonBaseQueryApi, {})
674+
675+
;({ data: request } = await doRequest())
676+
677+
expect(request.headers['authorization']).toBe(`Bearer ${token}`)
678+
})
679+
660680
test('prepareHeaders is able to be an async function', async () => {
661681
let request: any
662682

@@ -679,6 +699,27 @@ describe('fetchBaseQuery', () => {
679699
expect(request.headers['authorization']).toBe(`Bearer ${token}`)
680700
})
681701

702+
test('prepareHeaders is able to be an async function returning undefined', async () => {
703+
let request: any
704+
705+
const token = 'accessToken'
706+
const getAccessTokenAsync = async () => token
707+
708+
const _baseQuery = fetchBaseQuery({
709+
baseUrl,
710+
prepareHeaders: async (headers) => {
711+
headers.set('authorization', `Bearer ${await getAccessTokenAsync()}`)
712+
},
713+
})
714+
715+
const doRequest = async () =>
716+
_baseQuery({ url: '/echo' }, commonBaseQueryApi, {})
717+
718+
;({ data: request } = await doRequest())
719+
720+
expect(request.headers['authorization']).toBe(`Bearer ${token}`)
721+
})
722+
682723
test('prepareHeaders is able to select from a state', async () => {
683724
let request: any
684725

0 commit comments

Comments
 (0)