@tanstack/query-core 4.15.0 → 4.18.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.
- package/build/lib/queryClient.d.ts +4 -1
- package/build/lib/queryClient.esm.js +7 -1
- package/build/lib/queryClient.esm.js.map +1 -1
- package/build/lib/queryClient.js +6 -0
- package/build/lib/queryClient.js.map +1 -1
- package/build/lib/queryClient.mjs +7 -1
- package/build/lib/queryClient.mjs.map +1 -1
- package/build/lib/types.d.ts +1 -2
- package/build/umd/index.development.js +6 -0
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +1 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +1 -1
- package/src/queryClient.ts +62 -0
- package/src/tests/queryClient.test.tsx +22 -0
- package/src/types.ts +2 -1
package/package.json
CHANGED
package/src/queryClient.ts
CHANGED
|
@@ -28,6 +28,7 @@ import type {
|
|
|
28
28
|
ResetOptions,
|
|
29
29
|
ResetQueryFilters,
|
|
30
30
|
SetDataOptions,
|
|
31
|
+
WithRequired,
|
|
31
32
|
} from './types'
|
|
32
33
|
import type { QueryState } from './query'
|
|
33
34
|
import { QueryCache } from './queryCache'
|
|
@@ -118,6 +119,67 @@ export class QueryClient {
|
|
|
118
119
|
return this.queryCache.find<TQueryFnData>(queryKey, filters)?.state.data
|
|
119
120
|
}
|
|
120
121
|
|
|
122
|
+
ensureQueryData<
|
|
123
|
+
TQueryFnData = unknown,
|
|
124
|
+
TError = unknown,
|
|
125
|
+
TData = TQueryFnData,
|
|
126
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
127
|
+
>(
|
|
128
|
+
options: WithRequired<
|
|
129
|
+
FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
|
|
130
|
+
'queryKey'
|
|
131
|
+
>,
|
|
132
|
+
): Promise<TData>
|
|
133
|
+
ensureQueryData<
|
|
134
|
+
TQueryFnData = unknown,
|
|
135
|
+
TError = unknown,
|
|
136
|
+
TData = TQueryFnData,
|
|
137
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
138
|
+
>(
|
|
139
|
+
queryKey: TQueryKey,
|
|
140
|
+
options?: Omit<
|
|
141
|
+
FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
|
|
142
|
+
'queryKey'
|
|
143
|
+
>,
|
|
144
|
+
): Promise<TData>
|
|
145
|
+
ensureQueryData<
|
|
146
|
+
TQueryFnData = unknown,
|
|
147
|
+
TError = unknown,
|
|
148
|
+
TData = TQueryFnData,
|
|
149
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
150
|
+
>(
|
|
151
|
+
queryKey: TQueryKey,
|
|
152
|
+
queryFn: QueryFunction<TQueryFnData, TQueryKey>,
|
|
153
|
+
options?: Omit<
|
|
154
|
+
FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
|
|
155
|
+
'queryKey' | 'queryFn'
|
|
156
|
+
>,
|
|
157
|
+
): Promise<TData>
|
|
158
|
+
ensureQueryData<
|
|
159
|
+
TQueryFnData,
|
|
160
|
+
TError,
|
|
161
|
+
TData = TQueryFnData,
|
|
162
|
+
TQueryKey extends QueryKey = QueryKey,
|
|
163
|
+
>(
|
|
164
|
+
arg1:
|
|
165
|
+
| TQueryKey
|
|
166
|
+
| WithRequired<
|
|
167
|
+
FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
|
|
168
|
+
'queryKey'
|
|
169
|
+
>,
|
|
170
|
+
arg2?:
|
|
171
|
+
| QueryFunction<TQueryFnData, TQueryKey>
|
|
172
|
+
| FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
|
|
173
|
+
arg3?: FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
|
|
174
|
+
): Promise<TData> {
|
|
175
|
+
const parsedOptions = parseQueryArgs(arg1, arg2, arg3)
|
|
176
|
+
const cachedData = this.getQueryData<TData>(parsedOptions.queryKey!)
|
|
177
|
+
|
|
178
|
+
return cachedData
|
|
179
|
+
? Promise.resolve(cachedData)
|
|
180
|
+
: this.fetchQuery(parsedOptions)
|
|
181
|
+
}
|
|
182
|
+
|
|
121
183
|
getQueriesData<TQueryFnData = unknown>(
|
|
122
184
|
queryKey: QueryKey,
|
|
123
185
|
): [QueryKey, TQueryFnData | undefined][]
|
|
@@ -470,6 +470,28 @@ describe('queryClient', () => {
|
|
|
470
470
|
})
|
|
471
471
|
})
|
|
472
472
|
|
|
473
|
+
describe('ensureQueryData', () => {
|
|
474
|
+
test('should return the cached query data if the query is found', async () => {
|
|
475
|
+
const key = queryKey()
|
|
476
|
+
const queryFn = () => Promise.resolve('data')
|
|
477
|
+
|
|
478
|
+
queryClient.setQueryData([key, 'id'], 'bar')
|
|
479
|
+
|
|
480
|
+
await expect(
|
|
481
|
+
queryClient.ensureQueryData({ queryKey: [key, 'id'], queryFn }),
|
|
482
|
+
).resolves.toEqual('bar')
|
|
483
|
+
})
|
|
484
|
+
|
|
485
|
+
test('should call fetchQuery and return its results if the query is not found', async () => {
|
|
486
|
+
const key = queryKey()
|
|
487
|
+
const queryFn = () => Promise.resolve('data')
|
|
488
|
+
|
|
489
|
+
await expect(
|
|
490
|
+
queryClient.ensureQueryData({ queryKey: [key], queryFn }),
|
|
491
|
+
).resolves.toEqual('data')
|
|
492
|
+
})
|
|
493
|
+
})
|
|
494
|
+
|
|
473
495
|
describe('getQueriesData', () => {
|
|
474
496
|
test('should return the query data for all matched queries', () => {
|
|
475
497
|
const key1 = queryKey()
|
package/src/types.ts
CHANGED
|
@@ -250,7 +250,8 @@ export interface QueryObserverOptions<
|
|
|
250
250
|
_optimisticResults?: 'optimistic' | 'isRestoring'
|
|
251
251
|
}
|
|
252
252
|
|
|
253
|
-
type WithRequired<T, K extends keyof T> = Omit<T, K> &
|
|
253
|
+
export type WithRequired<T, K extends keyof T> = Omit<T, K> &
|
|
254
|
+
Required<Pick<T, K>>
|
|
254
255
|
export type DefaultedQueryObserverOptions<
|
|
255
256
|
TQueryFnData = unknown,
|
|
256
257
|
TError = unknown,
|