@tanstack/vue-query 5.0.0-beta.9 → 5.0.0-rc.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/legacy/devtools/devtools.cjs.map +1 -1
- package/build/legacy/devtools/devtools.js.map +1 -1
- package/build/legacy/index.d.cts +2 -2
- package/build/legacy/index.d.ts +2 -2
- package/build/legacy/mutationCache.cjs.map +1 -1
- package/build/legacy/mutationCache.d.cts +1 -1
- package/build/legacy/mutationCache.d.ts +1 -1
- package/build/legacy/mutationCache.js.map +1 -1
- package/build/legacy/queryCache.cjs.map +1 -1
- package/build/legacy/queryCache.d.cts +1 -1
- package/build/legacy/queryCache.d.ts +1 -1
- package/build/legacy/queryCache.js.map +1 -1
- package/build/legacy/queryClient.cjs +3 -4
- package/build/legacy/queryClient.cjs.map +1 -1
- package/build/legacy/queryClient.d.cts +4 -4
- package/build/legacy/queryClient.d.ts +4 -4
- package/build/legacy/queryClient.js +3 -4
- package/build/legacy/queryClient.js.map +1 -1
- package/build/legacy/types.cjs.map +1 -1
- package/build/legacy/types.d.cts +8 -2
- package/build/legacy/types.d.ts +8 -2
- package/build/legacy/useBaseQuery.cjs +62 -32
- package/build/legacy/useBaseQuery.cjs.map +1 -1
- package/build/legacy/useBaseQuery.d.cts +1 -1
- package/build/legacy/useBaseQuery.d.ts +1 -1
- package/build/legacy/useBaseQuery.js +64 -33
- package/build/legacy/useBaseQuery.js.map +1 -1
- package/build/legacy/useInfiniteQuery.cjs +1 -6
- package/build/legacy/useInfiniteQuery.cjs.map +1 -1
- package/build/legacy/useInfiniteQuery.d.cts +1 -1
- package/build/legacy/useInfiniteQuery.d.ts +1 -1
- package/build/legacy/useInfiniteQuery.js +1 -6
- package/build/legacy/useInfiniteQuery.js.map +1 -1
- package/build/legacy/useIsFetching.cjs +13 -13
- package/build/legacy/useIsFetching.cjs.map +1 -1
- package/build/legacy/useIsFetching.js +14 -14
- package/build/legacy/useIsFetching.js.map +1 -1
- package/build/legacy/useMutation.cjs +18 -7
- package/build/legacy/useMutation.cjs.map +1 -1
- package/build/legacy/useMutation.js +20 -8
- package/build/legacy/useMutation.js.map +1 -1
- package/build/legacy/useMutationState.cjs +10 -7
- package/build/legacy/useMutationState.cjs.map +1 -1
- package/build/legacy/useMutationState.js +18 -8
- package/build/legacy/useMutationState.js.map +1 -1
- package/build/legacy/useQueries.cjs +12 -2
- package/build/legacy/useQueries.cjs.map +1 -1
- package/build/legacy/useQueries.d.cts +7 -5
- package/build/legacy/useQueries.d.ts +7 -5
- package/build/legacy/useQueries.js +20 -3
- package/build/legacy/useQueries.js.map +1 -1
- package/build/legacy/{useQuery-846c66db.d.ts → useQuery-62b5e5ac.d.ts} +9 -7
- package/build/legacy/{useQuery-ebff9211.d.ts → useQuery-f89ce9b1.d.ts} +9 -7
- package/build/legacy/useQuery.cjs +1 -4
- package/build/legacy/useQuery.cjs.map +1 -1
- package/build/legacy/useQuery.d.cts +1 -1
- package/build/legacy/useQuery.d.ts +1 -1
- package/build/legacy/useQuery.js +1 -4
- package/build/legacy/useQuery.js.map +1 -1
- package/build/legacy/useQueryClient.cjs +4 -4
- package/build/legacy/useQueryClient.cjs.map +1 -1
- package/build/legacy/useQueryClient.js +5 -5
- package/build/legacy/useQueryClient.js.map +1 -1
- package/build/legacy/utils.cjs +8 -0
- package/build/legacy/utils.cjs.map +1 -1
- package/build/legacy/utils.d.cts +2 -1
- package/build/legacy/utils.d.ts +2 -1
- package/build/legacy/utils.js +7 -0
- package/build/legacy/utils.js.map +1 -1
- package/build/legacy/vueQueryPlugin.cjs +2 -0
- package/build/legacy/vueQueryPlugin.cjs.map +1 -1
- package/build/legacy/vueQueryPlugin.d.cts +3 -2
- package/build/legacy/vueQueryPlugin.d.ts +3 -2
- package/build/legacy/vueQueryPlugin.js +2 -0
- package/build/legacy/vueQueryPlugin.js.map +1 -1
- package/build/modern/devtools/devtools.cjs.map +1 -1
- package/build/modern/devtools/devtools.js.map +1 -1
- package/build/modern/index.d.cts +2 -2
- package/build/modern/index.d.ts +2 -2
- package/build/modern/mutationCache.cjs.map +1 -1
- package/build/modern/mutationCache.d.cts +1 -1
- package/build/modern/mutationCache.d.ts +1 -1
- package/build/modern/mutationCache.js.map +1 -1
- package/build/modern/queryCache.cjs.map +1 -1
- package/build/modern/queryCache.d.cts +1 -1
- package/build/modern/queryCache.d.ts +1 -1
- package/build/modern/queryCache.js.map +1 -1
- package/build/modern/queryClient.cjs +3 -4
- package/build/modern/queryClient.cjs.map +1 -1
- package/build/modern/queryClient.d.cts +4 -4
- package/build/modern/queryClient.d.ts +4 -4
- package/build/modern/queryClient.js +3 -4
- package/build/modern/queryClient.js.map +1 -1
- package/build/modern/types.cjs.map +1 -1
- package/build/modern/types.d.cts +8 -2
- package/build/modern/types.d.ts +8 -2
- package/build/modern/useBaseQuery.cjs +62 -32
- package/build/modern/useBaseQuery.cjs.map +1 -1
- package/build/modern/useBaseQuery.d.cts +1 -1
- package/build/modern/useBaseQuery.d.ts +1 -1
- package/build/modern/useBaseQuery.js +64 -33
- package/build/modern/useBaseQuery.js.map +1 -1
- package/build/modern/useInfiniteQuery.cjs +1 -6
- package/build/modern/useInfiniteQuery.cjs.map +1 -1
- package/build/modern/useInfiniteQuery.d.cts +1 -1
- package/build/modern/useInfiniteQuery.d.ts +1 -1
- package/build/modern/useInfiniteQuery.js +1 -6
- package/build/modern/useInfiniteQuery.js.map +1 -1
- package/build/modern/useIsFetching.cjs +13 -13
- package/build/modern/useIsFetching.cjs.map +1 -1
- package/build/modern/useIsFetching.js +14 -14
- package/build/modern/useIsFetching.js.map +1 -1
- package/build/modern/useMutation.cjs +18 -7
- package/build/modern/useMutation.cjs.map +1 -1
- package/build/modern/useMutation.js +20 -8
- package/build/modern/useMutation.js.map +1 -1
- package/build/modern/useMutationState.cjs +10 -7
- package/build/modern/useMutationState.cjs.map +1 -1
- package/build/modern/useMutationState.js +18 -8
- package/build/modern/useMutationState.js.map +1 -1
- package/build/modern/useQueries.cjs +12 -2
- package/build/modern/useQueries.cjs.map +1 -1
- package/build/modern/useQueries.d.cts +7 -5
- package/build/modern/useQueries.d.ts +7 -5
- package/build/modern/useQueries.js +20 -3
- package/build/modern/useQueries.js.map +1 -1
- package/build/modern/{useQuery-846c66db.d.ts → useQuery-62b5e5ac.d.ts} +9 -7
- package/build/modern/{useQuery-ebff9211.d.ts → useQuery-f89ce9b1.d.ts} +9 -7
- package/build/modern/useQuery.cjs +1 -4
- package/build/modern/useQuery.cjs.map +1 -1
- package/build/modern/useQuery.d.cts +1 -1
- package/build/modern/useQuery.d.ts +1 -1
- package/build/modern/useQuery.js +1 -4
- package/build/modern/useQuery.js.map +1 -1
- package/build/modern/useQueryClient.cjs +4 -3
- package/build/modern/useQueryClient.cjs.map +1 -1
- package/build/modern/useQueryClient.js +5 -4
- package/build/modern/useQueryClient.js.map +1 -1
- package/build/modern/utils.cjs +8 -0
- package/build/modern/utils.cjs.map +1 -1
- package/build/modern/utils.d.cts +2 -1
- package/build/modern/utils.d.ts +2 -1
- package/build/modern/utils.js +7 -0
- package/build/modern/utils.js.map +1 -1
- package/build/modern/vueQueryPlugin.cjs +1 -0
- package/build/modern/vueQueryPlugin.cjs.map +1 -1
- package/build/modern/vueQueryPlugin.d.cts +3 -2
- package/build/modern/vueQueryPlugin.d.ts +3 -2
- package/build/modern/vueQueryPlugin.js +1 -0
- package/build/modern/vueQueryPlugin.js.map +1 -1
- package/package.json +6 -6
- package/src/__mocks__/useBaseQuery.ts +1 -1
- package/src/__tests__/queryClient.test.ts +4 -4
- package/src/__tests__/useInfiniteQuery.test.ts +1 -1
- package/src/__tests__/useInfiniteQuery.types.test.tsx +5 -5
- package/src/__tests__/useMutation.test.ts +23 -3
- package/src/__tests__/useQueries.test.ts +23 -0
- package/src/__tests__/useQuery.test.ts +76 -1
- package/src/__tests__/useQueryClient.test.ts +4 -4
- package/src/__tests__/utils.test.ts +1 -1
- package/src/devtools/devtools.ts +2 -2
- package/src/mutationCache.ts +1 -1
- package/src/queryCache.ts +1 -1
- package/src/queryClient.ts +17 -10
- package/src/types.ts +25 -1
- package/src/useBaseQuery.ts +90 -37
- package/src/useInfiniteQuery.ts +19 -9
- package/src/useIsFetching.ts +16 -14
- package/src/useMutation.ts +25 -8
- package/src/useMutationState.ts +20 -9
- package/src/useQueries.ts +55 -28
- package/src/useQuery.ts +22 -9
- package/src/useQueryClient.ts +6 -5
- package/src/utils.ts +12 -0
- package/src/vueQueryPlugin.ts +3 -2
package/src/devtools/devtools.ts
CHANGED
|
@@ -146,7 +146,7 @@ export function setupDevtools(app: any, queryClient: QueryClient) {
|
|
|
146
146
|
api.sendInspectorTree(pluginId)
|
|
147
147
|
api.sendInspectorState(pluginId)
|
|
148
148
|
|
|
149
|
-
const queryEvents: QueryCacheNotifyEvent['type']
|
|
149
|
+
const queryEvents: Array<QueryCacheNotifyEvent['type']> = [
|
|
150
150
|
'added',
|
|
151
151
|
'removed',
|
|
152
152
|
'updated',
|
|
@@ -189,7 +189,7 @@ export function setupDevtools(app: any, queryClient: QueryClient) {
|
|
|
189
189
|
(a, b) => sortFns[settings.sortFn]!(a, b) * settings.baseSort,
|
|
190
190
|
)
|
|
191
191
|
|
|
192
|
-
const nodes: CustomInspectorNode
|
|
192
|
+
const nodes: Array<CustomInspectorNode> = sorted.map((query) => {
|
|
193
193
|
const stateLabel = getQueryStateLabel(query)
|
|
194
194
|
|
|
195
195
|
return {
|
package/src/mutationCache.ts
CHANGED
|
@@ -19,7 +19,7 @@ export class MutationCache extends MC {
|
|
|
19
19
|
return super.find(cloneDeepUnref(filters))
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
findAll(filters: MaybeRefDeep<MutationFilters> = {}): Mutation
|
|
22
|
+
findAll(filters: MaybeRefDeep<MutationFilters> = {}): Array<Mutation> {
|
|
23
23
|
return super.findAll(cloneDeepUnref(filters))
|
|
24
24
|
}
|
|
25
25
|
}
|
package/src/queryCache.ts
CHANGED
|
@@ -15,7 +15,7 @@ export class QueryCache extends QC {
|
|
|
15
15
|
return super.find(cloneDeepUnref(filters))
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
findAll(filters: MaybeRefDeep<QueryFilters> = {}): Query
|
|
18
|
+
findAll(filters: MaybeRefDeep<QueryFilters> = {}): Array<Query> {
|
|
19
19
|
return super.findAll(cloneDeepUnref(filters))
|
|
20
20
|
}
|
|
21
21
|
}
|
package/src/queryClient.ts
CHANGED
|
@@ -29,12 +29,11 @@ import type {
|
|
|
29
29
|
} from '@tanstack/query-core'
|
|
30
30
|
|
|
31
31
|
export class QueryClient extends QC {
|
|
32
|
-
constructor(config:
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
mutationCache: unreffedConfig.mutationCache || new MutationCache(),
|
|
32
|
+
constructor(config: QueryClientConfig = {}) {
|
|
33
|
+
const vueQueryConfig = {
|
|
34
|
+
defaultOptions: config.defaultOptions,
|
|
35
|
+
queryCache: config.queryCache || new QueryCache(),
|
|
36
|
+
mutationCache: config.mutationCache || new MutationCache(),
|
|
38
37
|
}
|
|
39
38
|
super(vueQueryConfig)
|
|
40
39
|
}
|
|
@@ -57,7 +56,7 @@ export class QueryClient extends QC {
|
|
|
57
56
|
|
|
58
57
|
getQueriesData<TData = unknown>(
|
|
59
58
|
filters: MaybeRefDeep<QueryFilters>,
|
|
60
|
-
): [QueryKey, TData | undefined]
|
|
59
|
+
): Array<[QueryKey, TData | undefined]> {
|
|
61
60
|
return super.getQueriesData(cloneDeepUnref(filters))
|
|
62
61
|
}
|
|
63
62
|
|
|
@@ -77,7 +76,7 @@ export class QueryClient extends QC {
|
|
|
77
76
|
filters: MaybeRefDeep<QueryFilters>,
|
|
78
77
|
updater: Updater<TData | undefined, TData | undefined>,
|
|
79
78
|
options: MaybeRefDeep<SetDataOptions> = {},
|
|
80
|
-
): [QueryKey, TData | undefined]
|
|
79
|
+
): Array<[QueryKey, TData | undefined]> {
|
|
81
80
|
return super.setQueriesData(
|
|
82
81
|
cloneDeepUnref(filters),
|
|
83
82
|
updater,
|
|
@@ -134,17 +133,25 @@ export class QueryClient extends QC {
|
|
|
134
133
|
TError = DefaultError,
|
|
135
134
|
TData = TQueryFnData,
|
|
136
135
|
TQueryKey extends QueryKey = QueryKey,
|
|
136
|
+
TPageParam = never,
|
|
137
137
|
>(
|
|
138
|
-
options: FetchQueryOptions<
|
|
138
|
+
options: FetchQueryOptions<
|
|
139
|
+
TQueryFnData,
|
|
140
|
+
TError,
|
|
141
|
+
TData,
|
|
142
|
+
TQueryKey,
|
|
143
|
+
TPageParam
|
|
144
|
+
>,
|
|
139
145
|
): Promise<TData>
|
|
140
146
|
fetchQuery<
|
|
141
147
|
TQueryFnData,
|
|
142
148
|
TError = DefaultError,
|
|
143
149
|
TData = TQueryFnData,
|
|
144
150
|
TQueryKey extends QueryKey = QueryKey,
|
|
151
|
+
TPageParam = never,
|
|
145
152
|
>(
|
|
146
153
|
options: MaybeRefDeep<
|
|
147
|
-
FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>
|
|
154
|
+
FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>
|
|
148
155
|
>,
|
|
149
156
|
): Promise<TData> {
|
|
150
157
|
return super.fetchQuery(cloneDeepUnref(options))
|
package/src/types.ts
CHANGED
|
@@ -1,7 +1,21 @@
|
|
|
1
|
-
import type { Ref } from 'vue-demi'
|
|
1
|
+
import type { Ref, UnwrapRef } from 'vue-demi'
|
|
2
|
+
|
|
3
|
+
type Primitive = string | number | boolean | bigint | symbol | undefined | null
|
|
4
|
+
type UnwrapLeaf =
|
|
5
|
+
| Primitive
|
|
6
|
+
| Function
|
|
7
|
+
| Date
|
|
8
|
+
| Error
|
|
9
|
+
| RegExp
|
|
10
|
+
| Map<any, any>
|
|
11
|
+
| WeakMap<any, any>
|
|
12
|
+
| Set<any>
|
|
13
|
+
| WeakSet<any>
|
|
2
14
|
|
|
3
15
|
export type MaybeRef<T> = Ref<T> | T
|
|
4
16
|
|
|
17
|
+
export type MaybeRefOrGetter<T> = MaybeRef<T> | (() => T)
|
|
18
|
+
|
|
5
19
|
export type MaybeRefDeep<T> = MaybeRef<
|
|
6
20
|
T extends Function
|
|
7
21
|
? T
|
|
@@ -12,6 +26,16 @@ export type MaybeRefDeep<T> = MaybeRef<
|
|
|
12
26
|
: T
|
|
13
27
|
>
|
|
14
28
|
|
|
29
|
+
export type DeepUnwrapRef<T> = T extends UnwrapLeaf
|
|
30
|
+
? T
|
|
31
|
+
: T extends Ref<infer U>
|
|
32
|
+
? DeepUnwrapRef<U>
|
|
33
|
+
: T extends {}
|
|
34
|
+
? {
|
|
35
|
+
[Property in keyof T]: DeepUnwrapRef<T[Property]>
|
|
36
|
+
}
|
|
37
|
+
: UnwrapRef<T>
|
|
38
|
+
|
|
15
39
|
export type DistributiveOmit<T, K extends keyof any> = T extends any
|
|
16
40
|
? Omit<T, K>
|
|
17
41
|
: never
|
package/src/useBaseQuery.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
computed,
|
|
3
|
+
getCurrentScope,
|
|
3
4
|
onScopeDispose,
|
|
4
5
|
reactive,
|
|
5
6
|
readonly,
|
|
@@ -7,8 +8,8 @@ import {
|
|
|
7
8
|
watch,
|
|
8
9
|
} from 'vue-demi'
|
|
9
10
|
import { useQueryClient } from './useQueryClient'
|
|
10
|
-
import { cloneDeepUnref, updateState } from './utils'
|
|
11
|
-
import type {
|
|
11
|
+
import { cloneDeepUnref, shouldThrowError, updateState } from './utils'
|
|
12
|
+
import type { ToRef } from 'vue-demi'
|
|
12
13
|
import type {
|
|
13
14
|
DefaultedQueryObserverOptions,
|
|
14
15
|
QueryKey,
|
|
@@ -16,14 +17,22 @@ import type {
|
|
|
16
17
|
QueryObserverResult,
|
|
17
18
|
} from '@tanstack/query-core'
|
|
18
19
|
import type { QueryClient } from './queryClient'
|
|
19
|
-
import type { UseQueryOptions } from './useQuery'
|
|
20
|
+
import type { UseQueryOptions, UseQueryReturnType } from './useQuery'
|
|
20
21
|
import type { UseInfiniteQueryOptions } from './useInfiniteQuery'
|
|
21
22
|
|
|
22
23
|
export type UseBaseQueryReturnType<
|
|
23
24
|
TData,
|
|
24
25
|
TError,
|
|
25
26
|
Result = QueryObserverResult<TData, TError>,
|
|
26
|
-
> =
|
|
27
|
+
> = {
|
|
28
|
+
[K in keyof Result]: K extends
|
|
29
|
+
| 'fetchNextPage'
|
|
30
|
+
| 'fetchPreviousPage'
|
|
31
|
+
| 'refetch'
|
|
32
|
+
| 'remove'
|
|
33
|
+
? Result[K]
|
|
34
|
+
: ToRef<Readonly<Result>[K]>
|
|
35
|
+
} & {
|
|
27
36
|
suspense: () => Promise<Result>
|
|
28
37
|
}
|
|
29
38
|
|
|
@@ -64,16 +73,30 @@ export function useBaseQuery<
|
|
|
64
73
|
>,
|
|
65
74
|
queryClient?: QueryClient,
|
|
66
75
|
): UseBaseQueryReturnType<TData, TError> {
|
|
76
|
+
if (process.env.NODE_ENV === 'development') {
|
|
77
|
+
if (!getCurrentScope()) {
|
|
78
|
+
console.warn(
|
|
79
|
+
'vue-query composables like "useQuery()" should only be used inside a "setup()" function or a running effect scope. They might otherwise lead to memory leaks.',
|
|
80
|
+
)
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
67
84
|
const client = queryClient || useQueryClient()
|
|
68
85
|
|
|
69
86
|
const defaultedOptions = computed(() => {
|
|
87
|
+
const clonedOptions = cloneDeepUnref(options as any)
|
|
88
|
+
|
|
89
|
+
if (typeof clonedOptions.enabled === 'function') {
|
|
90
|
+
clonedOptions.enabled = clonedOptions.enabled()
|
|
91
|
+
}
|
|
92
|
+
|
|
70
93
|
const defaulted: DefaultedQueryObserverOptions<
|
|
71
94
|
TQueryFnData,
|
|
72
95
|
TError,
|
|
73
96
|
TData,
|
|
74
97
|
TQueryData,
|
|
75
98
|
TQueryKey
|
|
76
|
-
> = client.defaultQueryOptions(
|
|
99
|
+
> = client.defaultQueryOptions(clonedOptions)
|
|
77
100
|
|
|
78
101
|
defaulted._optimisticResults = client.isRestoring.value
|
|
79
102
|
? 'isRestoring'
|
|
@@ -103,49 +126,79 @@ export function useBaseQuery<
|
|
|
103
126
|
{ immediate: true },
|
|
104
127
|
)
|
|
105
128
|
|
|
106
|
-
|
|
107
|
-
defaultedOptions
|
|
108
|
-
()
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
{ deep: true },
|
|
113
|
-
)
|
|
129
|
+
const updater = () => {
|
|
130
|
+
observer.setOptions(defaultedOptions.value)
|
|
131
|
+
updateState(state, observer.getCurrentResult())
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
watch(defaultedOptions, updater)
|
|
114
135
|
|
|
115
136
|
onScopeDispose(() => {
|
|
116
137
|
unsubscribe()
|
|
117
138
|
})
|
|
118
139
|
|
|
140
|
+
// fix #5910
|
|
141
|
+
const refetch = (...args: Parameters<(typeof state)['refetch']>) => {
|
|
142
|
+
updater()
|
|
143
|
+
return state.refetch(...args)
|
|
144
|
+
}
|
|
145
|
+
|
|
119
146
|
const suspense = () => {
|
|
120
|
-
return new Promise<QueryObserverResult<TData, TError>>(
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
147
|
+
return new Promise<QueryObserverResult<TData, TError>>(
|
|
148
|
+
(resolve, reject) => {
|
|
149
|
+
let stopWatch = () => {
|
|
150
|
+
//noop
|
|
151
|
+
}
|
|
152
|
+
const run = () => {
|
|
153
|
+
if (defaultedOptions.value.enabled !== false) {
|
|
154
|
+
const optimisticResult = observer.getOptimisticResult(
|
|
155
|
+
defaultedOptions.value,
|
|
156
|
+
)
|
|
157
|
+
if (optimisticResult.isStale) {
|
|
158
|
+
stopWatch()
|
|
159
|
+
observer
|
|
160
|
+
.fetchOptimistic(defaultedOptions.value)
|
|
161
|
+
.then(resolve, reject)
|
|
162
|
+
} else {
|
|
163
|
+
stopWatch()
|
|
164
|
+
resolve(optimisticResult)
|
|
165
|
+
}
|
|
135
166
|
}
|
|
136
167
|
}
|
|
137
|
-
}
|
|
138
168
|
|
|
139
|
-
|
|
169
|
+
run()
|
|
140
170
|
|
|
141
|
-
|
|
142
|
-
|
|
171
|
+
stopWatch = watch(defaultedOptions, run)
|
|
172
|
+
},
|
|
173
|
+
)
|
|
143
174
|
}
|
|
144
175
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
176
|
+
// Handle error boundary
|
|
177
|
+
watch(
|
|
178
|
+
() => state.error,
|
|
179
|
+
(error) => {
|
|
180
|
+
if (
|
|
181
|
+
state.isError &&
|
|
182
|
+
!state.isFetching &&
|
|
183
|
+
shouldThrowError(defaultedOptions.value.throwOnError, [
|
|
184
|
+
error as TError,
|
|
185
|
+
observer.getCurrentQuery(),
|
|
186
|
+
])
|
|
187
|
+
) {
|
|
188
|
+
throw error
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
)
|
|
192
|
+
|
|
193
|
+
const object: any = toRefs(readonly(state))
|
|
194
|
+
for (const key in state) {
|
|
195
|
+
if (typeof state[key as keyof typeof state] === 'function') {
|
|
196
|
+
object[key] = state[key as keyof typeof state]
|
|
197
|
+
}
|
|
150
198
|
}
|
|
199
|
+
|
|
200
|
+
object.suspense = suspense
|
|
201
|
+
object.refetch = refetch
|
|
202
|
+
|
|
203
|
+
return object as UseQueryReturnType<TData, TError>
|
|
151
204
|
}
|
package/src/useInfiniteQuery.ts
CHANGED
|
@@ -12,9 +12,13 @@ import type {
|
|
|
12
12
|
|
|
13
13
|
import type { UseBaseQueryReturnType } from './useBaseQuery'
|
|
14
14
|
|
|
15
|
-
import type {
|
|
15
|
+
import type {
|
|
16
|
+
DeepUnwrapRef,
|
|
17
|
+
DistributiveOmit,
|
|
18
|
+
MaybeRefDeep,
|
|
19
|
+
MaybeRefOrGetter,
|
|
20
|
+
} from './types'
|
|
16
21
|
import type { QueryClient } from './queryClient'
|
|
17
|
-
import type { UnwrapRef } from 'vue-demi'
|
|
18
22
|
|
|
19
23
|
export type UseInfiniteQueryOptions<
|
|
20
24
|
TQueryFnData = unknown,
|
|
@@ -37,9 +41,19 @@ export type UseInfiniteQueryOptions<
|
|
|
37
41
|
TError,
|
|
38
42
|
TData,
|
|
39
43
|
TQueryData,
|
|
40
|
-
|
|
44
|
+
DeepUnwrapRef<TQueryKey>,
|
|
41
45
|
TPageParam
|
|
42
46
|
>[Property]
|
|
47
|
+
: Property extends 'enabled'
|
|
48
|
+
? MaybeRefOrGetter<
|
|
49
|
+
InfiniteQueryObserverOptions<
|
|
50
|
+
TQueryFnData,
|
|
51
|
+
TError,
|
|
52
|
+
TData,
|
|
53
|
+
TQueryData,
|
|
54
|
+
TQueryKey
|
|
55
|
+
>[Property]
|
|
56
|
+
>
|
|
43
57
|
: MaybeRefDeep<
|
|
44
58
|
WithRequired<
|
|
45
59
|
InfiniteQueryObserverOptions<
|
|
@@ -96,10 +110,6 @@ export function useInfiniteQuery<
|
|
|
96
110
|
options,
|
|
97
111
|
queryClient,
|
|
98
112
|
) as InfiniteQueryReturnType<TData, TError>
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
fetchNextPage: result.fetchNextPage.value,
|
|
102
|
-
fetchPreviousPage: result.fetchPreviousPage.value,
|
|
103
|
-
refetch: result.refetch.value,
|
|
104
|
-
}
|
|
113
|
+
|
|
114
|
+
return result
|
|
105
115
|
}
|
package/src/useIsFetching.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getCurrentScope, onScopeDispose, ref, watchEffect } from 'vue-demi'
|
|
2
2
|
import { useQueryClient } from './useQueryClient'
|
|
3
|
-
import { cloneDeepUnref } from './utils'
|
|
4
3
|
import type { Ref } from 'vue-demi'
|
|
5
4
|
import type { QueryFilters as QF } from '@tanstack/query-core'
|
|
6
5
|
import type { MaybeRefDeep } from './types'
|
|
@@ -12,22 +11,25 @@ export function useIsFetching(
|
|
|
12
11
|
fetchingFilters: MaybeRefDeep<QF> = {},
|
|
13
12
|
queryClient?: QueryClient,
|
|
14
13
|
): Ref<number> {
|
|
15
|
-
|
|
14
|
+
if (process.env.NODE_ENV === 'development') {
|
|
15
|
+
if (!getCurrentScope()) {
|
|
16
|
+
console.warn(
|
|
17
|
+
'vue-query composables like "useQuery()" should only be used inside a "setup()" function or a running effect scope. They might otherwise lead to memory leaks.',
|
|
18
|
+
)
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
16
22
|
const client = queryClient || useQueryClient()
|
|
17
23
|
|
|
18
|
-
const isFetching = ref(
|
|
24
|
+
const isFetching = ref()
|
|
19
25
|
|
|
20
|
-
const
|
|
21
|
-
isFetching.value = client.isFetching(
|
|
22
|
-
}
|
|
26
|
+
const listener = () => {
|
|
27
|
+
isFetching.value = client.isFetching(fetchingFilters)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const unsubscribe = client.getQueryCache().subscribe(listener)
|
|
23
31
|
|
|
24
|
-
|
|
25
|
-
filters,
|
|
26
|
-
() => {
|
|
27
|
-
isFetching.value = client.isFetching(filters)
|
|
28
|
-
},
|
|
29
|
-
{ deep: true },
|
|
30
|
-
)
|
|
32
|
+
watchEffect(listener)
|
|
31
33
|
|
|
32
34
|
onScopeDispose(() => {
|
|
33
35
|
unsubscribe()
|
package/src/useMutation.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
computed,
|
|
3
|
+
getCurrentScope,
|
|
3
4
|
onScopeDispose,
|
|
4
5
|
reactive,
|
|
5
6
|
readonly,
|
|
@@ -7,7 +8,7 @@ import {
|
|
|
7
8
|
watch,
|
|
8
9
|
} from 'vue-demi'
|
|
9
10
|
import { MutationObserver } from '@tanstack/query-core'
|
|
10
|
-
import { cloneDeepUnref, updateState } from './utils'
|
|
11
|
+
import { cloneDeepUnref, shouldThrowError, updateState } from './utils'
|
|
11
12
|
import { useQueryClient } from './useQueryClient'
|
|
12
13
|
import type { ToRefs } from 'vue-demi'
|
|
13
14
|
import type {
|
|
@@ -64,6 +65,14 @@ export function useMutation<
|
|
|
64
65
|
>,
|
|
65
66
|
queryClient?: QueryClient,
|
|
66
67
|
): UseMutationReturnType<TData, TError, TVariables, TContext> {
|
|
68
|
+
if (process.env.NODE_ENV === 'development') {
|
|
69
|
+
if (!getCurrentScope()) {
|
|
70
|
+
console.warn(
|
|
71
|
+
'vue-query composables like "useQuery()" should only be used inside a "setup()" function or a running effect scope. They might otherwise lead to memory leaks.',
|
|
72
|
+
)
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
67
76
|
const client = queryClient || useQueryClient()
|
|
68
77
|
const options = computed(() => {
|
|
69
78
|
return client.defaultMutationOptions(cloneDeepUnref(mutationOptions))
|
|
@@ -84,13 +93,9 @@ export function useMutation<
|
|
|
84
93
|
})
|
|
85
94
|
}
|
|
86
95
|
|
|
87
|
-
watch(
|
|
88
|
-
options
|
|
89
|
-
|
|
90
|
-
observer.setOptions(options.value)
|
|
91
|
-
},
|
|
92
|
-
{ deep: true },
|
|
93
|
-
)
|
|
96
|
+
watch(options, () => {
|
|
97
|
+
observer.setOptions(options.value)
|
|
98
|
+
})
|
|
94
99
|
|
|
95
100
|
onScopeDispose(() => {
|
|
96
101
|
unsubscribe()
|
|
@@ -100,6 +105,18 @@ export function useMutation<
|
|
|
100
105
|
Readonly<MutationResult<TData, TError, TVariables, TContext>>
|
|
101
106
|
>
|
|
102
107
|
|
|
108
|
+
watch(
|
|
109
|
+
() => state.error,
|
|
110
|
+
(error) => {
|
|
111
|
+
if (
|
|
112
|
+
error &&
|
|
113
|
+
shouldThrowError(options.value.throwOnError, [error as TError])
|
|
114
|
+
) {
|
|
115
|
+
throw error
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
)
|
|
119
|
+
|
|
103
120
|
return {
|
|
104
121
|
...resultRefs,
|
|
105
122
|
mutate,
|
package/src/useMutationState.ts
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
computed,
|
|
3
|
+
getCurrentScope,
|
|
4
|
+
onScopeDispose,
|
|
5
|
+
readonly,
|
|
6
|
+
ref,
|
|
7
|
+
watch,
|
|
8
|
+
} from 'vue-demi'
|
|
2
9
|
import { useQueryClient } from './useQueryClient'
|
|
3
10
|
import { cloneDeepUnref } from './utils'
|
|
4
11
|
import type { DeepReadonly, Ref } from 'vue-demi'
|
|
@@ -18,6 +25,14 @@ export function useIsMutating(
|
|
|
18
25
|
filters: MutationFilters = {},
|
|
19
26
|
queryClient?: QueryClient,
|
|
20
27
|
): Ref<number> {
|
|
28
|
+
if (process.env.NODE_ENV === 'development') {
|
|
29
|
+
if (!getCurrentScope()) {
|
|
30
|
+
console.warn(
|
|
31
|
+
'vue-query composables like "useQuery()" should only be used inside a "setup()" function or a running effect scope. They might otherwise lead to memory leaks.',
|
|
32
|
+
)
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
21
36
|
const client = queryClient || useQueryClient()
|
|
22
37
|
const unreffedFilters = computed(() => ({
|
|
23
38
|
...cloneDeepUnref(filters),
|
|
@@ -59,19 +74,15 @@ export function useMutationState<TResult = MutationState>(
|
|
|
59
74
|
): DeepReadonly<Ref<Array<TResult>>> {
|
|
60
75
|
const filters = computed(() => cloneDeepUnref(options.filters))
|
|
61
76
|
const mutationCache = (queryClient || useQueryClient()).getMutationCache()
|
|
62
|
-
const state = ref(getResult(mutationCache, options)) as Ref<TResult
|
|
77
|
+
const state = ref(getResult(mutationCache, options)) as Ref<Array<TResult>>
|
|
63
78
|
const unsubscribe = mutationCache.subscribe(() => {
|
|
64
79
|
const result = getResult(mutationCache, options)
|
|
65
80
|
state.value = result
|
|
66
81
|
})
|
|
67
82
|
|
|
68
|
-
watch(
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
state.value = getResult(mutationCache, options)
|
|
72
|
-
},
|
|
73
|
-
{ deep: true },
|
|
74
|
-
)
|
|
83
|
+
watch(filters, () => {
|
|
84
|
+
state.value = getResult(mutationCache, options)
|
|
85
|
+
})
|
|
75
86
|
|
|
76
87
|
onScopeDispose(() => {
|
|
77
88
|
unsubscribe()
|