Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: type issue when void or undefined is returned from query function #3541

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/core/queryClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -536,7 +536,7 @@ export class QueryClient {

setQueryDefaults(
queryKey: QueryKey,
options: QueryObserverOptions<any, any, any, any>
options: QueryObserverOptions<unknown, any, any, any>
): void {
const result = this.queryDefaults.find(
x => hashQueryKey(queryKey) === hashQueryKey(x.queryKey)
Expand Down
4 changes: 2 additions & 2 deletions src/core/tests/hydration.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ describe('dehydration and rehydration', () => {
key: [{ nestedKey: 1 }],
})

const fetchDataAfterHydration = jest.fn()
const fetchDataAfterHydration = jest.fn<unknown, unknown[]>()
await hydrationClient.prefetchQuery(['string'], fetchDataAfterHydration, {
staleTime: 1000,
})
Expand Down Expand Up @@ -143,7 +143,7 @@ describe('dehydration and rehydration', () => {
hydrationCache.find(['string', { key: ['string'], key2: 0 }])?.state.data
).toBe('string')

const fetchDataAfterHydration = jest.fn()
const fetchDataAfterHydration = jest.fn<unknown, unknown[]>()
await hydrationClient.prefetchQuery(
['string', { key: ['string'], key2: 0 }],
fetchDataAfterHydration,
Expand Down
31 changes: 19 additions & 12 deletions src/core/tests/query.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ describe('query', () => {

const promise = queryClient.fetchQuery(
key,
async () => {
async (): Promise<unknown> => {
count++
throw new Error(`error${count}`)
},
Expand Down Expand Up @@ -282,7 +282,7 @@ describe('query', () => {
const key = queryKey()

const queryFn = jest.fn<
Promise<void>,
Promise<unknown>,
[QueryFunctionContext<ReturnType<typeof queryKey>>]
>()
const onAbort = jest.fn()
Expand Down Expand Up @@ -339,7 +339,7 @@ describe('query', () => {
test('should not continue if explicitly cancelled', async () => {
const key = queryKey()

const queryFn = jest.fn()
const queryFn = jest.fn<unknown, unknown[]>()

queryFn.mockImplementation(async () => {
await sleep(10)
Expand Down Expand Up @@ -369,7 +369,7 @@ describe('query', () => {
test('should not error if reset while loading', async () => {
const key = queryKey()

const queryFn = jest.fn()
const queryFn = jest.fn<unknown, unknown[]>()

queryFn.mockImplementation(async () => {
await sleep(10)
Expand Down Expand Up @@ -399,7 +399,7 @@ describe('query', () => {
test('should be able to refetch a cancelled query', async () => {
const key = queryKey()

const queryFn = jest.fn()
const queryFn = jest.fn<unknown, unknown[]>()

queryFn.mockImplementation(async () => {
await sleep(50)
Expand Down Expand Up @@ -432,9 +432,12 @@ describe('query', () => {
test('cancelling a rejected query should not have any effect', async () => {
const key = queryKey()

await queryClient.prefetchQuery(key, async () => {
throw new Error('error')
})
await queryClient.prefetchQuery(
key,
async (): Promise<unknown> => {
throw new Error('error')
}
)
const query = queryCache.find(key)!
query.cancel()
await sleep(10)
Expand All @@ -450,16 +453,20 @@ describe('query', () => {
const query = queryCache.find(key)!
expect(query.state.status).toBe('success')

await queryClient.prefetchQuery(key, () => Promise.reject('reject'), {
retry: false,
})
await queryClient.prefetchQuery(
key,
() => Promise.reject<string>('reject'),
{
retry: false,
}
)
expect(query.state.status).toBe('error')

queryClient.prefetchQuery(
key,
async () => {
await sleep(10)
return Promise.reject('reject')
return Promise.reject<unknown>('reject')
},
{ retry: false }
)
Expand Down
4 changes: 3 additions & 1 deletion src/core/tests/queryCache.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,9 @@ describe('queryCache', () => {
const onError = jest.fn()
const testCache = new QueryCache({ onError })
const testClient = createQueryClient({ queryCache: testCache })
await testClient.prefetchQuery(key, () => Promise.reject('error'))
await testClient.prefetchQuery(key, () =>
Promise.reject<unknown>('error')
)
const query = testCache.find(key)
expect(onError).toHaveBeenCalledWith('error', query)
})
Expand Down
77 changes: 40 additions & 37 deletions src/core/tests/queryClient.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -530,9 +530,12 @@ describe('queryClient', () => {
const key = queryKey()

await expect(
queryClient.fetchQuery(key, async () => {
throw new Error('error')
})
queryClient.fetchQuery(
key,
async (): Promise<unknown> => {
throw new Error('error')
}
)
).rejects.toEqual(new Error('error'))
})

Expand Down Expand Up @@ -725,7 +728,7 @@ describe('queryClient', () => {

const result = await queryClient.prefetchQuery(
key,
async () => {
async (): Promise<unknown> => {
throw new Error('error')
},
{
Expand Down Expand Up @@ -783,7 +786,7 @@ describe('queryClient', () => {
})
try {
await queryClient.fetchQuery(key2, async () => {
return Promise.reject('err')
return Promise.reject<unknown>('err')
})
} catch {}
queryClient.fetchQuery(key1, async () => {
Expand All @@ -793,7 +796,7 @@ describe('queryClient', () => {
try {
queryClient.fetchQuery(key2, async () => {
await sleep(1000)
return Promise.reject('err2')
return Promise.reject<unknown>('err2')
})
} catch {}
queryClient.fetchQuery(key3, async () => {
Expand Down Expand Up @@ -842,7 +845,7 @@ describe('queryClient', () => {
describe('refetchQueries', () => {
test('should not refetch if all observers are disabled', async () => {
const key = queryKey()
const queryFn = jest.fn().mockReturnValue('data')
const queryFn = jest.fn<string, unknown[]>().mockReturnValue('data')
await queryClient.fetchQuery(key, queryFn)
const observer1 = new QueryObserver(queryClient, {
queryKey: key,
Expand All @@ -856,7 +859,7 @@ describe('queryClient', () => {
})
test('should refetch if at least one observer is enabled', async () => {
const key = queryKey()
const queryFn = jest.fn().mockReturnValue('data')
const queryFn = jest.fn<string, unknown[]>().mockReturnValue('data')
await queryClient.fetchQuery(key, queryFn)
const observer1 = new QueryObserver(queryClient, {
queryKey: key,
Expand All @@ -878,8 +881,8 @@ describe('queryClient', () => {
test('should refetch all queries when no arguments are given', async () => {
const key1 = queryKey()
const key2 = queryKey()
const queryFn1 = jest.fn().mockReturnValue('data1')
const queryFn2 = jest.fn().mockReturnValue('data2')
const queryFn1 = jest.fn<string, unknown[]>().mockReturnValue('data1')
const queryFn2 = jest.fn<string, unknown[]>().mockReturnValue('data2')
await queryClient.fetchQuery(key1, queryFn1)
await queryClient.fetchQuery(key2, queryFn2)
const observer1 = new QueryObserver(queryClient, {
Expand All @@ -904,8 +907,8 @@ describe('queryClient', () => {
test('should be able to refetch all fresh queries', async () => {
const key1 = queryKey()
const key2 = queryKey()
const queryFn1 = jest.fn().mockReturnValue('data1')
const queryFn2 = jest.fn().mockReturnValue('data2')
const queryFn1 = jest.fn<string, unknown[]>().mockReturnValue('data1')
const queryFn2 = jest.fn<string, unknown[]>().mockReturnValue('data2')
await queryClient.fetchQuery(key1, queryFn1)
await queryClient.fetchQuery(key2, queryFn2)
const observer = new QueryObserver(queryClient, {
Expand All @@ -923,8 +926,8 @@ describe('queryClient', () => {
test('should be able to refetch all stale queries', async () => {
const key1 = queryKey()
const key2 = queryKey()
const queryFn1 = jest.fn().mockReturnValue('data1')
const queryFn2 = jest.fn().mockReturnValue('data2')
const queryFn1 = jest.fn<string, unknown[]>().mockReturnValue('data1')
const queryFn2 = jest.fn<string, unknown[]>().mockReturnValue('data2')
await queryClient.fetchQuery(key1, queryFn1)
await queryClient.fetchQuery(key2, queryFn2)
const observer = new QueryObserver(queryClient, {
Expand All @@ -943,8 +946,8 @@ describe('queryClient', () => {
test('should be able to refetch all stale and active queries', async () => {
const key1 = queryKey()
const key2 = queryKey()
const queryFn1 = jest.fn().mockReturnValue('data1')
const queryFn2 = jest.fn().mockReturnValue('data2')
const queryFn1 = jest.fn<string, unknown[]>().mockReturnValue('data1')
const queryFn2 = jest.fn<string, unknown[]>().mockReturnValue('data2')
await queryClient.fetchQuery(key1, queryFn1)
await queryClient.fetchQuery(key2, queryFn2)
queryClient.invalidateQueries(key1)
Expand All @@ -965,8 +968,8 @@ describe('queryClient', () => {
test('should be able to refetch all active and inactive queries', async () => {
const key1 = queryKey()
const key2 = queryKey()
const queryFn1 = jest.fn().mockReturnValue('data1')
const queryFn2 = jest.fn().mockReturnValue('data2')
const queryFn1 = jest.fn<string, unknown[]>().mockReturnValue('data1')
const queryFn2 = jest.fn<string, unknown[]>().mockReturnValue('data2')
await queryClient.fetchQuery(key1, queryFn1)
await queryClient.fetchQuery(key2, queryFn2)
const observer = new QueryObserver(queryClient, {
Expand All @@ -984,8 +987,8 @@ describe('queryClient', () => {
test('should be able to refetch all active and inactive queries', async () => {
const key1 = queryKey()
const key2 = queryKey()
const queryFn1 = jest.fn().mockReturnValue('data1')
const queryFn2 = jest.fn().mockReturnValue('data2')
const queryFn1 = jest.fn<string, unknown[]>().mockReturnValue('data1')
const queryFn2 = jest.fn<string, unknown[]>().mockReturnValue('data2')
await queryClient.fetchQuery(key1, queryFn1)
await queryClient.fetchQuery(key2, queryFn2)
const observer = new QueryObserver(queryClient, {
Expand All @@ -1003,8 +1006,8 @@ describe('queryClient', () => {
test('should be able to refetch only active queries', async () => {
const key1 = queryKey()
const key2 = queryKey()
const queryFn1 = jest.fn().mockReturnValue('data1')
const queryFn2 = jest.fn().mockReturnValue('data2')
const queryFn1 = jest.fn<string, unknown[]>().mockReturnValue('data1')
const queryFn2 = jest.fn<string, unknown[]>().mockReturnValue('data2')
await queryClient.fetchQuery(key1, queryFn1)
await queryClient.fetchQuery(key2, queryFn2)
const observer = new QueryObserver(queryClient, {
Expand All @@ -1022,8 +1025,8 @@ describe('queryClient', () => {
test('should be able to refetch only inactive queries', async () => {
const key1 = queryKey()
const key2 = queryKey()
const queryFn1 = jest.fn().mockReturnValue('data1')
const queryFn2 = jest.fn().mockReturnValue('data2')
const queryFn1 = jest.fn<string, unknown[]>().mockReturnValue('data1')
const queryFn2 = jest.fn<string, unknown[]>().mockReturnValue('data2')
await queryClient.fetchQuery(key1, queryFn1)
await queryClient.fetchQuery(key2, queryFn2)
const observer = new QueryObserver(queryClient, {
Expand All @@ -1040,7 +1043,7 @@ describe('queryClient', () => {

test('should throw an error if throwOnError option is set to true', async () => {
const key1 = queryKey()
const queryFnError = () => Promise.reject('error')
const queryFnError = () => Promise.reject<unknown>('error')
try {
await queryClient.fetchQuery({
queryKey: key1,
Expand All @@ -1065,8 +1068,8 @@ describe('queryClient', () => {
test('should refetch active queries by default', async () => {
const key1 = queryKey()
const key2 = queryKey()
const queryFn1 = jest.fn().mockReturnValue('data1')
const queryFn2 = jest.fn().mockReturnValue('data2')
const queryFn1 = jest.fn<string, unknown[]>().mockReturnValue('data1')
const queryFn2 = jest.fn<string, unknown[]>().mockReturnValue('data2')
await queryClient.fetchQuery(key1, queryFn1)
await queryClient.fetchQuery(key2, queryFn2)
const observer = new QueryObserver(queryClient, {
Expand All @@ -1084,8 +1087,8 @@ describe('queryClient', () => {
test('should not refetch inactive queries by default', async () => {
const key1 = queryKey()
const key2 = queryKey()
const queryFn1 = jest.fn().mockReturnValue('data1')
const queryFn2 = jest.fn().mockReturnValue('data2')
const queryFn1 = jest.fn<string, unknown[]>().mockReturnValue('data1')
const queryFn2 = jest.fn<string, unknown[]>().mockReturnValue('data2')
await queryClient.fetchQuery(key1, queryFn1)
await queryClient.fetchQuery(key2, queryFn2)
const observer = new QueryObserver(queryClient, {
Expand All @@ -1103,8 +1106,8 @@ describe('queryClient', () => {
test('should not refetch active queries when "refetch" is "none"', async () => {
const key1 = queryKey()
const key2 = queryKey()
const queryFn1 = jest.fn().mockReturnValue('data1')
const queryFn2 = jest.fn().mockReturnValue('data2')
const queryFn1 = jest.fn<string, unknown[]>().mockReturnValue('data1')
const queryFn2 = jest.fn<string, unknown[]>().mockReturnValue('data2')
await queryClient.fetchQuery(key1, queryFn1)
await queryClient.fetchQuery(key2, queryFn2)
const observer = new QueryObserver(queryClient, {
Expand All @@ -1124,8 +1127,8 @@ describe('queryClient', () => {
test('should refetch inactive queries when "refetch" is "inactive"', async () => {
const key1 = queryKey()
const key2 = queryKey()
const queryFn1 = jest.fn().mockReturnValue('data1')
const queryFn2 = jest.fn().mockReturnValue('data2')
const queryFn1 = jest.fn<string, unknown[]>().mockReturnValue('data1')
const queryFn2 = jest.fn<string, unknown[]>().mockReturnValue('data2')
await queryClient.fetchQuery(key1, queryFn1)
await queryClient.fetchQuery(key2, queryFn2)
const observer = new QueryObserver(queryClient, {
Expand All @@ -1147,8 +1150,8 @@ describe('queryClient', () => {
test('should refetch active and inactive queries when "refetch" is "all"', async () => {
const key1 = queryKey()
const key2 = queryKey()
const queryFn1 = jest.fn().mockReturnValue('data1')
const queryFn2 = jest.fn().mockReturnValue('data2')
const queryFn1 = jest.fn<string, unknown[]>().mockReturnValue('data1')
const queryFn2 = jest.fn<string, unknown[]>().mockReturnValue('data2')
await queryClient.fetchQuery(key1, queryFn1)
await queryClient.fetchQuery(key2, queryFn2)
const observer = new QueryObserver(queryClient, {
Expand Down Expand Up @@ -1275,8 +1278,8 @@ describe('queryClient', () => {
test('should refetch all active queries', async () => {
const key1 = queryKey()
const key2 = queryKey()
const queryFn1 = jest.fn().mockReturnValue('data1')
const queryFn2 = jest.fn().mockReturnValue('data2')
const queryFn1 = jest.fn<string, unknown[]>().mockReturnValue('data1')
const queryFn2 = jest.fn<string, unknown[]>().mockReturnValue('data2')
const observer1 = new QueryObserver(queryClient, {
queryKey: key1,
queryFn: queryFn1,
Expand Down
Loading