@tanstack/vue-query 5.96.2 → 5.98.0

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.
Files changed (86) hide show
  1. package/build/legacy/_tsup-dts-rollup.d.cts +58 -7
  2. package/build/legacy/_tsup-dts-rollup.d.ts +58 -7
  3. package/build/legacy/index.cjs +6 -0
  4. package/build/legacy/index.cjs.map +1 -1
  5. package/build/legacy/index.d.cts +5 -1
  6. package/build/legacy/index.d.ts +5 -1
  7. package/build/legacy/index.js +4 -0
  8. package/build/legacy/index.js.map +1 -1
  9. package/build/legacy/queryClient.cjs +6 -2
  10. package/build/legacy/queryClient.cjs.map +1 -1
  11. package/build/legacy/queryClient.js +6 -2
  12. package/build/legacy/queryClient.js.map +1 -1
  13. package/build/legacy/queryOptions.cjs.map +1 -1
  14. package/build/legacy/queryOptions.d.cts +3 -0
  15. package/build/legacy/queryOptions.d.ts +3 -0
  16. package/build/legacy/queryOptions.js.map +1 -1
  17. package/build/legacy/types.cjs.map +1 -1
  18. package/build/legacy/types.d.cts +1 -0
  19. package/build/legacy/types.d.ts +1 -0
  20. package/build/legacy/usePrefetchInfiniteQuery.cjs +55 -0
  21. package/build/legacy/usePrefetchInfiniteQuery.cjs.map +1 -0
  22. package/build/legacy/usePrefetchInfiniteQuery.d.cts +2 -0
  23. package/build/legacy/usePrefetchInfiniteQuery.d.ts +2 -0
  24. package/build/legacy/usePrefetchInfiniteQuery.js +30 -0
  25. package/build/legacy/usePrefetchInfiniteQuery.js.map +1 -0
  26. package/build/legacy/usePrefetchQuery.cjs +53 -0
  27. package/build/legacy/usePrefetchQuery.cjs.map +1 -0
  28. package/build/legacy/usePrefetchQuery.d.cts +2 -0
  29. package/build/legacy/usePrefetchQuery.d.ts +2 -0
  30. package/build/legacy/usePrefetchQuery.js +28 -0
  31. package/build/legacy/usePrefetchQuery.js.map +1 -0
  32. package/build/legacy/useQuery.d.cts +2 -2
  33. package/build/legacy/useQuery.d.ts +2 -2
  34. package/build/legacy/utils.cjs +5 -0
  35. package/build/legacy/utils.cjs.map +1 -1
  36. package/build/legacy/utils.d.cts +1 -0
  37. package/build/legacy/utils.d.ts +1 -0
  38. package/build/legacy/utils.js +4 -0
  39. package/build/legacy/utils.js.map +1 -1
  40. package/build/modern/_tsup-dts-rollup.d.cts +58 -7
  41. package/build/modern/_tsup-dts-rollup.d.ts +58 -7
  42. package/build/modern/index.cjs +6 -0
  43. package/build/modern/index.cjs.map +1 -1
  44. package/build/modern/index.d.cts +5 -1
  45. package/build/modern/index.d.ts +5 -1
  46. package/build/modern/index.js +4 -0
  47. package/build/modern/index.js.map +1 -1
  48. package/build/modern/queryClient.cjs +6 -2
  49. package/build/modern/queryClient.cjs.map +1 -1
  50. package/build/modern/queryClient.js +6 -2
  51. package/build/modern/queryClient.js.map +1 -1
  52. package/build/modern/queryOptions.cjs.map +1 -1
  53. package/build/modern/queryOptions.d.cts +3 -0
  54. package/build/modern/queryOptions.d.ts +3 -0
  55. package/build/modern/queryOptions.js.map +1 -1
  56. package/build/modern/types.cjs.map +1 -1
  57. package/build/modern/types.d.cts +1 -0
  58. package/build/modern/types.d.ts +1 -0
  59. package/build/modern/usePrefetchInfiniteQuery.cjs +55 -0
  60. package/build/modern/usePrefetchInfiniteQuery.cjs.map +1 -0
  61. package/build/modern/usePrefetchInfiniteQuery.d.cts +2 -0
  62. package/build/modern/usePrefetchInfiniteQuery.d.ts +2 -0
  63. package/build/modern/usePrefetchInfiniteQuery.js +30 -0
  64. package/build/modern/usePrefetchInfiniteQuery.js.map +1 -0
  65. package/build/modern/usePrefetchQuery.cjs +53 -0
  66. package/build/modern/usePrefetchQuery.cjs.map +1 -0
  67. package/build/modern/usePrefetchQuery.d.cts +2 -0
  68. package/build/modern/usePrefetchQuery.d.ts +2 -0
  69. package/build/modern/usePrefetchQuery.js +28 -0
  70. package/build/modern/usePrefetchQuery.js.map +1 -0
  71. package/build/modern/useQuery.d.cts +2 -2
  72. package/build/modern/useQuery.d.ts +2 -2
  73. package/build/modern/utils.cjs +5 -0
  74. package/build/modern/utils.cjs.map +1 -1
  75. package/build/modern/utils.d.cts +1 -0
  76. package/build/modern/utils.d.ts +1 -0
  77. package/build/modern/utils.js +4 -0
  78. package/build/modern/utils.js.map +1 -1
  79. package/package.json +2 -2
  80. package/src/index.ts +5 -0
  81. package/src/queryClient.ts +24 -8
  82. package/src/queryOptions.ts +93 -4
  83. package/src/types.ts +2 -0
  84. package/src/usePrefetchInfiniteQuery.ts +113 -0
  85. package/src/usePrefetchQuery.ts +69 -0
  86. package/src/utils.ts +4 -0
@@ -1,8 +1,60 @@
1
- import type { DataTag, DefaultError, QueryKey } from '@tanstack/query-core'
1
+ import type { DeepUnwrapRef, ShallowOption } from './types'
2
2
  import type {
3
- DefinedInitialQueryOptions,
4
- UndefinedInitialQueryOptions,
5
- } from './useQuery'
3
+ DataTag,
4
+ DefaultError,
5
+ Enabled,
6
+ InitialDataFunction,
7
+ NonUndefinedGuard,
8
+ QueryKey,
9
+ QueryObserverOptions,
10
+ } from '@tanstack/query-core'
11
+
12
+ export type QueryOptions<
13
+ TQueryFnData = unknown,
14
+ TError = DefaultError,
15
+ TData = TQueryFnData,
16
+ TQueryData = TQueryFnData,
17
+ TQueryKey extends QueryKey = QueryKey,
18
+ > = {
19
+ [Property in keyof QueryObserverOptions<
20
+ TQueryFnData,
21
+ TError,
22
+ TData,
23
+ TQueryData,
24
+ TQueryKey
25
+ >]: Property extends 'enabled'
26
+ ? () => Enabled<TQueryFnData, TError, TQueryData, DeepUnwrapRef<TQueryKey>>
27
+ : QueryObserverOptions<
28
+ TQueryFnData,
29
+ TError,
30
+ TData,
31
+ TQueryData,
32
+ DeepUnwrapRef<TQueryKey>
33
+ >[Property]
34
+ } & ShallowOption
35
+
36
+ export type UndefinedInitialQueryOptions<
37
+ TQueryFnData = unknown,
38
+ TError = DefaultError,
39
+ TData = TQueryFnData,
40
+ TQueryKey extends QueryKey = QueryKey,
41
+ > = QueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey> & {
42
+ initialData?:
43
+ | undefined
44
+ | InitialDataFunction<NonUndefinedGuard<TQueryFnData>>
45
+ | NonUndefinedGuard<TQueryFnData>
46
+ }
47
+
48
+ export type DefinedInitialQueryOptions<
49
+ TQueryFnData = unknown,
50
+ TError = DefaultError,
51
+ TData = TQueryFnData,
52
+ TQueryKey extends QueryKey = QueryKey,
53
+ > = QueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey> & {
54
+ initialData:
55
+ | NonUndefinedGuard<TQueryFnData>
56
+ | (() => NonUndefinedGuard<TQueryFnData>)
57
+ }
6
58
 
7
59
  export function queryOptions<
8
60
  TQueryFnData = unknown,
@@ -15,6 +67,22 @@ export function queryOptions<
15
67
  queryKey: DataTag<TQueryKey, TQueryFnData, TError>
16
68
  }
17
69
 
70
+ export function queryOptions<
71
+ TQueryFnData = unknown,
72
+ TError = DefaultError,
73
+ TData = TQueryFnData,
74
+ TQueryKey extends QueryKey = QueryKey,
75
+ >(
76
+ options: () => DefinedInitialQueryOptions<
77
+ TQueryFnData,
78
+ TError,
79
+ TData,
80
+ TQueryKey
81
+ >,
82
+ ): () => DefinedInitialQueryOptions<TQueryFnData, TError, TData, TQueryKey> & {
83
+ queryKey: DataTag<TQueryKey, TQueryFnData, TError>
84
+ }
85
+
18
86
  export function queryOptions<
19
87
  TQueryFnData = unknown,
20
88
  TError = DefaultError,
@@ -26,6 +94,27 @@ export function queryOptions<
26
94
  queryKey: DataTag<TQueryKey, TQueryFnData, TError>
27
95
  }
28
96
 
97
+ export function queryOptions<
98
+ TQueryFnData = unknown,
99
+ TError = DefaultError,
100
+ TData = TQueryFnData,
101
+ TQueryKey extends QueryKey = QueryKey,
102
+ >(
103
+ options: () => UndefinedInitialQueryOptions<
104
+ TQueryFnData,
105
+ TError,
106
+ TData,
107
+ TQueryKey
108
+ >,
109
+ ): () => UndefinedInitialQueryOptions<
110
+ TQueryFnData,
111
+ TError,
112
+ TData,
113
+ TQueryKey
114
+ > & {
115
+ queryKey: DataTag<TQueryKey, TQueryFnData, TError>
116
+ }
117
+
29
118
  export function queryOptions(options: unknown) {
30
119
  return options
31
120
  }
package/src/types.ts CHANGED
@@ -22,6 +22,8 @@ type UnwrapLeaf =
22
22
  | Set<any>
23
23
  | WeakSet<any>
24
24
 
25
+ export type MaybeGetter<T> = T | (() => T)
26
+
25
27
  export type MaybeRef<T> = Ref<T> | ComputedRef<T> | T
26
28
 
27
29
  export type MaybeRefOrGetter<T> = MaybeRef<T> | (() => T)
@@ -0,0 +1,113 @@
1
+ import { getCurrentScope, unref, watchEffect } from 'vue-demi'
2
+ import { useQueryClient } from './useQueryClient'
3
+ import { cloneDeepUnref } from './utils'
4
+ import type {
5
+ DefaultError,
6
+ FetchInfiniteQueryOptions,
7
+ FetchQueryOptions,
8
+ GetNextPageParamFunction,
9
+ InfiniteData,
10
+ InitialPageParam,
11
+ OmitKeyof,
12
+ QueryKey,
13
+ SkipToken,
14
+ } from '@tanstack/query-core'
15
+ import type { QueryClient } from './queryClient'
16
+ import type { MaybeRefDeep, MaybeRefOrGetter } from './types'
17
+
18
+ type PrefetchInfinitePages<TQueryFnData, TPageParam> =
19
+ | {
20
+ pages?: never
21
+ getNextPageParam?: GetNextPageParamFunction<TPageParam, TQueryFnData>
22
+ }
23
+ | {
24
+ pages: number
25
+ getNextPageParam: GetNextPageParamFunction<TPageParam, TQueryFnData>
26
+ }
27
+
28
+ export type UsePrefetchInfiniteQueryOptions<
29
+ TQueryFnData,
30
+ TError,
31
+ TData,
32
+ TQueryKey extends QueryKey,
33
+ TPageParam,
34
+ > = OmitKeyof<
35
+ FetchQueryOptions<
36
+ TQueryFnData,
37
+ TError,
38
+ InfiniteData<TData, TPageParam>,
39
+ TQueryKey,
40
+ TPageParam
41
+ >,
42
+ 'queryFn' | 'initialPageParam'
43
+ > &
44
+ InitialPageParam<TPageParam> & {
45
+ queryFn?: Exclude<
46
+ FetchQueryOptions<
47
+ TQueryFnData,
48
+ TError,
49
+ InfiniteData<TData, TPageParam>,
50
+ TQueryKey,
51
+ TPageParam
52
+ >['queryFn'],
53
+ SkipToken
54
+ >
55
+ } & PrefetchInfinitePages<TQueryFnData, TPageParam>
56
+
57
+ function isGetter<T>(value: MaybeRefOrGetter<T>): value is () => T {
58
+ return typeof value === 'function'
59
+ }
60
+
61
+ export function usePrefetchInfiniteQuery<
62
+ TQueryFnData = unknown,
63
+ TError = DefaultError,
64
+ TData = TQueryFnData,
65
+ TQueryKey extends QueryKey = QueryKey,
66
+ TPageParam = unknown,
67
+ >(
68
+ options: MaybeRefOrGetter<
69
+ MaybeRefDeep<
70
+ UsePrefetchInfiniteQueryOptions<
71
+ TQueryFnData,
72
+ TError,
73
+ TData,
74
+ TQueryKey,
75
+ TPageParam
76
+ >
77
+ >
78
+ >,
79
+ queryClient?: QueryClient,
80
+ ): void {
81
+ if (process.env.NODE_ENV === 'development') {
82
+ if (!getCurrentScope()) {
83
+ console.warn(
84
+ 'vue-query composable like "useQuery()" should only be used inside a "setup()" function or a running effect scope. They might otherwise lead to memory leaks.',
85
+ )
86
+ }
87
+ }
88
+
89
+ const client = queryClient || useQueryClient()
90
+
91
+ watchEffect(() => {
92
+ const resolvedOptions = isGetter(options) ? options() : unref(options)
93
+ const clonedOptions: UsePrefetchInfiniteQueryOptions<
94
+ TQueryFnData,
95
+ TError,
96
+ TData,
97
+ TQueryKey,
98
+ TPageParam
99
+ > = cloneDeepUnref(resolvedOptions)
100
+
101
+ if (!client.getQueryState(clonedOptions.queryKey)) {
102
+ void client.prefetchInfiniteQuery(
103
+ clonedOptions as FetchInfiniteQueryOptions<
104
+ TQueryFnData,
105
+ TError,
106
+ TData,
107
+ TQueryKey,
108
+ TPageParam
109
+ >,
110
+ )
111
+ }
112
+ })
113
+ }
@@ -0,0 +1,69 @@
1
+ import { getCurrentScope, unref, watchEffect } from 'vue-demi'
2
+ import { useQueryClient } from './useQueryClient'
3
+ import { cloneDeepUnref } from './utils'
4
+ import type {
5
+ DefaultError,
6
+ FetchQueryOptions,
7
+ OmitKeyof,
8
+ QueryKey,
9
+ SkipToken,
10
+ } from '@tanstack/query-core'
11
+ import type { QueryClient } from './queryClient'
12
+ import type { MaybeRefDeep, MaybeRefOrGetter } from './types'
13
+
14
+ export type UsePrefetchQueryOptions<
15
+ TQueryFnData,
16
+ TError,
17
+ TData,
18
+ TQueryKey extends QueryKey,
19
+ > = OmitKeyof<
20
+ FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
21
+ 'queryFn'
22
+ > & {
23
+ queryFn?: Exclude<
24
+ FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>['queryFn'],
25
+ SkipToken
26
+ >
27
+ }
28
+
29
+ function isGetter<T>(value: MaybeRefOrGetter<T>): value is () => T {
30
+ return typeof value === 'function'
31
+ }
32
+
33
+ export function usePrefetchQuery<
34
+ TQueryFnData = unknown,
35
+ TError = DefaultError,
36
+ TData = TQueryFnData,
37
+ TQueryKey extends QueryKey = QueryKey,
38
+ >(
39
+ options: MaybeRefOrGetter<
40
+ MaybeRefDeep<
41
+ UsePrefetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>
42
+ >
43
+ >,
44
+ queryClient?: QueryClient,
45
+ ): void {
46
+ if (process.env.NODE_ENV === 'development') {
47
+ if (!getCurrentScope()) {
48
+ console.warn(
49
+ 'vue-query composable like "useQuery()" should only be used inside a "setup()" function or a running effect scope. They might otherwise lead to memory leaks.',
50
+ )
51
+ }
52
+ }
53
+
54
+ const client = queryClient || useQueryClient()
55
+
56
+ watchEffect(() => {
57
+ const resolvedOptions = isGetter(options) ? options() : unref(options)
58
+ const clonedOptions: UsePrefetchQueryOptions<
59
+ TQueryFnData,
60
+ TError,
61
+ TData,
62
+ TQueryKey
63
+ > = cloneDeepUnref(resolvedOptions)
64
+
65
+ if (!client.getQueryState(clonedOptions.queryKey)) {
66
+ void client.prefetchQuery(clonedOptions)
67
+ }
68
+ })
69
+ }
package/src/utils.ts CHANGED
@@ -109,3 +109,7 @@ function isPlainObject(value: unknown): value is Object {
109
109
  function isFunction(value: unknown): value is Function {
110
110
  return typeof value === 'function'
111
111
  }
112
+
113
+ export function toValueDeep<T>(source: (() => T) | MaybeRefDeep<T>): T {
114
+ return isFunction(source) ? source() : cloneDeepUnref(source)
115
+ }