Skip to content

Commit 150da8a

Browse files
fix(vue-query): ensure the queryFn parameter has the correct type (#5935)
Co-authored-by: Damian Osipiuk <[email protected]>
1 parent 96b844e commit 150da8a

File tree

4 files changed

+28
-15
lines changed

4 files changed

+28
-15
lines changed

packages/vue-query/src/types.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import type {
88
import type { Ref, UnwrapRef } from 'vue-demi'
99
import type { QueryClient } from './queryClient'
1010

11-
export type MaybeRef<T> = Ref<T> | T
11+
type Primitive = string | number | boolean | bigint | symbol | undefined | null
1212

1313
export type MaybeRefDeep<T> = MaybeRef<
1414
T extends Function
@@ -20,6 +20,18 @@ export type MaybeRefDeep<T> = MaybeRef<
2020
: T
2121
>
2222

23+
export type MaybeRef<T> = Ref<T> | T
24+
25+
export type DeepUnwrapRef<T> = T extends Primitive
26+
? T
27+
: T extends Ref<infer U>
28+
? DeepUnwrapRef<U>
29+
: T extends {}
30+
? {
31+
[Property in keyof T]: DeepUnwrapRef<T[Property]>
32+
}
33+
: UnwrapRef<T>
34+
2335
export type WithQueryClientKey<T> = T & {
2436
queryClientKey?: string
2537
queryClient?: QueryClient
@@ -46,7 +58,7 @@ export type VueQueryObserverOptions<
4658
TError,
4759
TData,
4860
TQueryData,
49-
UnwrapRef<TQueryKey>
61+
DeepUnwrapRef<TQueryKey>
5062
>[Property]
5163
: MaybeRef<
5264
QueryObserverOptions<
@@ -80,7 +92,7 @@ export type VueInfiniteQueryObserverOptions<
8092
TError,
8193
TData,
8294
TQueryData,
83-
UnwrapRef<TQueryKey>
95+
DeepUnwrapRef<TQueryKey>
8496
>[Property]
8597
: MaybeRef<
8698
InfiniteQueryObserverOptions<

packages/vue-query/src/useBaseQuery.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@ import {
1515
shouldThrowError,
1616
updateState,
1717
} from './utils'
18-
import type { ToRefs, UnwrapRef } from 'vue-demi'
18+
import type { ToRefs } from 'vue-demi'
1919
import type {
2020
QueryFunction,
2121
QueryKey,
2222
QueryObserver,
2323
QueryObserverOptions,
2424
QueryObserverResult,
2525
} from '@tanstack/query-core'
26-
import type { MaybeRef, WithQueryClientKey } from './types'
26+
import type { DeepUnwrapRef, MaybeRef, WithQueryClientKey } from './types'
2727
import type { UseQueryOptions } from './useQuery'
2828
import type { UseInfiniteQueryOptions } from './useInfiniteQuery'
2929

@@ -55,7 +55,7 @@ export function useBaseQuery<
5555
| TQueryKey
5656
| UseQueryOptionsGeneric<TQueryFnData, TError, TData, TQueryKey>,
5757
arg2:
58-
| QueryFunction<TQueryFnData, UnwrapRef<TQueryKey>>
58+
| QueryFunction<TQueryFnData, DeepUnwrapRef<TQueryKey>>
5959
| UseQueryOptionsGeneric<TQueryFnData, TError, TData, TQueryKey> = {},
6060
arg3: UseQueryOptionsGeneric<TQueryFnData, TError, TData, TQueryKey> = {},
6161
): UseQueryReturnType<TData, TError> {
@@ -179,7 +179,7 @@ export function parseQueryArgs<
179179
| MaybeRef<TQueryKey>
180180
| MaybeRef<UseQueryOptionsGeneric<TQueryFnData, TError, TData, TQueryKey>>,
181181
arg2:
182-
| MaybeRef<QueryFunction<TQueryFnData, UnwrapRef<TQueryKey>>>
182+
| MaybeRef<QueryFunction<TQueryFnData, DeepUnwrapRef<TQueryKey>>>
183183
| MaybeRef<
184184
UseQueryOptionsGeneric<TQueryFnData, TError, TData, TQueryKey>
185185
> = {},

packages/vue-query/src/useInfiniteQuery.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { InfiniteQueryObserver } from '@tanstack/query-core'
22
import { useBaseQuery } from './useBaseQuery'
3-
import type { UnwrapRef } from 'vue-demi'
43
import type {
54
InfiniteQueryObserverResult,
65
QueryFunction,
@@ -11,6 +10,7 @@ import type {
1110
import type { UseQueryReturnType } from './useBaseQuery'
1211

1312
import type {
13+
DeepUnwrapRef,
1414
DistributiveOmit,
1515
VueInfiniteQueryObserverOptions,
1616
WithQueryClientKey,
@@ -78,7 +78,7 @@ export function useInfiniteQuery<
7878
TQueryKey extends QueryKey = QueryKey,
7979
>(
8080
queryKey: TQueryKey,
81-
queryFn: QueryFunction<TQueryFnData, UnwrapRef<TQueryKey>>,
81+
queryFn: QueryFunction<TQueryFnData, DeepUnwrapRef<TQueryKey>>,
8282
options?: Omit<
8383
UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
8484
'queryKey' | 'queryFn'
@@ -95,7 +95,7 @@ export function useInfiniteQuery<
9595
| TQueryKey
9696
| UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
9797
arg2?:
98-
| QueryFunction<TQueryFnData, UnwrapRef<TQueryKey>>
98+
| QueryFunction<TQueryFnData, DeepUnwrapRef<TQueryKey>>
9999
| UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
100100
arg3?: UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
101101
): UseInfiniteQueryReturnType<TData, TError> {

packages/vue-query/src/useQuery.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { QueryObserver } from '@tanstack/query-core'
22
import { useBaseQuery } from './useBaseQuery'
3-
import type { ToRefs, UnwrapRef } from 'vue-demi'
3+
import type { ToRefs } from 'vue-demi'
44
import type {
55
DefinedQueryObserverResult,
66
QueryFunction,
@@ -9,6 +9,7 @@ import type {
99
} from '@tanstack/query-core'
1010
import type { UseQueryReturnType as UQRT } from './useBaseQuery'
1111
import type {
12+
DeepUnwrapRef,
1213
DistributiveOmit,
1314
VueQueryObserverOptions,
1415
WithQueryClientKey,
@@ -119,7 +120,7 @@ export function useQuery<
119120
TQueryKey extends QueryKey = QueryKey,
120121
>(
121122
queryKey: TQueryKey,
122-
queryFn: QueryFunction<TQueryFnData, UnwrapRef<TQueryKey>>,
123+
queryFn: QueryFunction<TQueryFnData, DeepUnwrapRef<TQueryKey>>,
123124
options?: Omit<
124125
UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
125126
'queryKey' | 'queryFn' | 'initialData'
@@ -133,7 +134,7 @@ export function useQuery<
133134
TQueryKey extends QueryKey = QueryKey,
134135
>(
135136
queryKey: TQueryKey,
136-
queryFn: QueryFunction<TQueryFnData, UnwrapRef<TQueryKey>>,
137+
queryFn: QueryFunction<TQueryFnData, DeepUnwrapRef<TQueryKey>>,
137138
options?: Omit<
138139
UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
139140
'queryKey' | 'queryFn' | 'initialData'
@@ -147,7 +148,7 @@ export function useQuery<
147148
TQueryKey extends QueryKey = QueryKey,
148149
>(
149150
queryKey: TQueryKey,
150-
queryFn: QueryFunction<TQueryFnData, UnwrapRef<TQueryKey>>,
151+
queryFn: QueryFunction<TQueryFnData, DeepUnwrapRef<TQueryKey>>,
151152
options?: Omit<
152153
UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
153154
'queryKey' | 'queryFn'
@@ -162,7 +163,7 @@ export function useQuery<
162163
>(
163164
arg1: TQueryKey | UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
164165
arg2?:
165-
| QueryFunction<TQueryFnData, UnwrapRef<TQueryKey>>
166+
| QueryFunction<TQueryFnData, DeepUnwrapRef<TQueryKey>>
166167
| UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
167168
arg3?: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
168169
):

0 commit comments

Comments
 (0)