@tanstack/react-query 4.0.5
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/cjs/query-core/build/esm/index.js +3110 -0
- package/build/cjs/query-core/build/esm/index.js.map +1 -0
- package/build/cjs/react-query/src/Hydrate.js +66 -0
- package/build/cjs/react-query/src/Hydrate.js.map +1 -0
- package/build/cjs/react-query/src/QueryClientProvider.js +96 -0
- package/build/cjs/react-query/src/QueryClientProvider.js.map +1 -0
- package/build/cjs/react-query/src/QueryErrorResetBoundary.js +67 -0
- package/build/cjs/react-query/src/QueryErrorResetBoundary.js.map +1 -0
- package/build/cjs/react-query/src/index.js +64 -0
- package/build/cjs/react-query/src/index.js.map +1 -0
- package/build/cjs/react-query/src/isRestoring.js +43 -0
- package/build/cjs/react-query/src/isRestoring.js.map +1 -0
- package/build/cjs/react-query/src/useBaseQuery.js +117 -0
- package/build/cjs/react-query/src/useBaseQuery.js.map +1 -0
- package/build/cjs/react-query/src/useInfiniteQuery.js +24 -0
- package/build/cjs/react-query/src/useInfiniteQuery.js.map +1 -0
- package/build/cjs/react-query/src/useIsFetching.js +50 -0
- package/build/cjs/react-query/src/useIsFetching.js.map +1 -0
- package/build/cjs/react-query/src/useIsMutating.js +50 -0
- package/build/cjs/react-query/src/useIsMutating.js.map +1 -0
- package/build/cjs/react-query/src/useMutation.js +68 -0
- package/build/cjs/react-query/src/useMutation.js.map +1 -0
- package/build/cjs/react-query/src/useQueries.js +71 -0
- package/build/cjs/react-query/src/useQueries.js.map +1 -0
- package/build/cjs/react-query/src/useQuery.js +24 -0
- package/build/cjs/react-query/src/useQuery.js.map +1 -0
- package/build/cjs/react-query/src/utils.js +25 -0
- package/build/cjs/react-query/src/utils.js.map +1 -0
- package/build/esm/index.js +3368 -0
- package/build/esm/index.js.map +1 -0
- package/build/stats-html.html +2689 -0
- package/build/stats.json +666 -0
- package/build/types/packages/query-core/src/focusManager.d.ts +16 -0
- package/build/types/packages/query-core/src/hydration.d.ts +34 -0
- package/build/types/packages/query-core/src/index.d.ts +20 -0
- package/build/types/packages/query-core/src/infiniteQueryBehavior.d.ts +15 -0
- package/build/types/packages/query-core/src/infiniteQueryObserver.d.ts +18 -0
- package/build/types/packages/query-core/src/logger.d.ts +8 -0
- package/build/types/packages/query-core/src/mutation.d.ts +70 -0
- package/build/types/packages/query-core/src/mutationCache.d.ts +52 -0
- package/build/types/packages/query-core/src/mutationObserver.d.ts +23 -0
- package/build/types/packages/query-core/src/notifyManager.d.ts +18 -0
- package/build/types/packages/query-core/src/onlineManager.d.ts +16 -0
- package/build/types/packages/query-core/src/queriesObserver.d.ts +23 -0
- package/build/types/packages/query-core/src/query.d.ts +119 -0
- package/build/types/packages/query-core/src/queryCache.d.ts +59 -0
- package/build/types/packages/query-core/src/queryClient.d.ts +65 -0
- package/build/types/packages/query-core/src/queryObserver.d.ts +61 -0
- package/build/types/packages/query-core/src/removable.d.ts +9 -0
- package/build/types/packages/query-core/src/retryer.d.ts +33 -0
- package/build/types/packages/query-core/src/subscribable.d.ts +10 -0
- package/build/types/packages/query-core/src/types.d.ts +417 -0
- package/build/types/packages/query-core/src/utils.d.ts +99 -0
- package/build/types/packages/react-query/src/Hydrate.d.ts +10 -0
- package/build/types/packages/react-query/src/QueryClientProvider.d.ts +24 -0
- package/build/types/packages/react-query/src/QueryErrorResetBoundary.d.ts +12 -0
- package/build/types/packages/react-query/src/__tests__/Hydrate.test.d.ts +1 -0
- package/build/types/packages/react-query/src/__tests__/QueryClientProvider.test.d.ts +1 -0
- package/build/types/packages/react-query/src/__tests__/QueryResetErrorBoundary.test.d.ts +6 -0
- package/build/types/packages/react-query/src/__tests__/ssr-hydration.test.d.ts +1 -0
- package/build/types/packages/react-query/src/__tests__/ssr.test.d.ts +4 -0
- package/build/types/packages/react-query/src/__tests__/suspense.test.d.ts +1 -0
- package/build/types/packages/react-query/src/__tests__/useInfiniteQuery.test.d.ts +1 -0
- package/build/types/packages/react-query/src/__tests__/useIsFetching.test.d.ts +1 -0
- package/build/types/packages/react-query/src/__tests__/useIsMutating.test.d.ts +1 -0
- package/build/types/packages/react-query/src/__tests__/useMutation.test.d.ts +1 -0
- package/build/types/packages/react-query/src/__tests__/useQueries.test.d.ts +1 -0
- package/build/types/packages/react-query/src/__tests__/useQuery.test.d.ts +1 -0
- package/build/types/packages/react-query/src/__tests__/useQuery.types.test.d.ts +2 -0
- package/build/types/packages/react-query/src/__tests__/utils.d.ts +8 -0
- package/build/types/packages/react-query/src/index.d.ts +17 -0
- package/build/types/packages/react-query/src/isRestoring.d.ts +3 -0
- package/build/types/packages/react-query/src/reactBatchedUpdates.d.ts +2 -0
- package/build/types/packages/react-query/src/reactBatchedUpdates.native.d.ts +2 -0
- package/build/types/packages/react-query/src/setBatchUpdatesFn.d.ts +1 -0
- package/build/types/packages/react-query/src/types.d.ts +35 -0
- package/build/types/packages/react-query/src/useBaseQuery.d.ts +3 -0
- package/build/types/packages/react-query/src/useInfiniteQuery.d.ts +5 -0
- package/build/types/packages/react-query/src/useIsFetching.d.ts +7 -0
- package/build/types/packages/react-query/src/useIsMutating.d.ts +7 -0
- package/build/types/packages/react-query/src/useMutation.d.ts +6 -0
- package/build/types/packages/react-query/src/useQueries.d.ts +49 -0
- package/build/types/packages/react-query/src/useQuery.d.ts +20 -0
- package/build/types/packages/react-query/src/utils.d.ts +1 -0
- package/build/types/tests/utils.d.ts +24 -0
- package/build/umd/index.development.js +3429 -0
- package/build/umd/index.development.js.map +1 -0
- package/build/umd/index.production.js +22 -0
- package/build/umd/index.production.js.map +1 -0
- package/codemods/v4/key-transformation.js +138 -0
- package/codemods/v4/replace-import-specifier.js +25 -0
- package/codemods/v4/utils/index.js +166 -0
- package/codemods/v4/utils/replacers/key-replacer.js +160 -0
- package/codemods/v4/utils/transformers/query-cache-transformer.js +115 -0
- package/codemods/v4/utils/transformers/query-client-transformer.js +49 -0
- package/codemods/v4/utils/transformers/use-query-like-transformer.js +32 -0
- package/codemods/v4/utils/unprocessable-key-error.js +8 -0
- package/package.json +63 -0
- package/src/Hydrate.tsx +36 -0
- package/src/QueryClientProvider.tsx +90 -0
- package/src/QueryErrorResetBoundary.tsx +52 -0
- package/src/__tests__/Hydrate.test.tsx +247 -0
- package/src/__tests__/QueryClientProvider.test.tsx +275 -0
- package/src/__tests__/QueryResetErrorBoundary.test.tsx +630 -0
- package/src/__tests__/ssr-hydration.test.tsx +274 -0
- package/src/__tests__/ssr.test.tsx +151 -0
- package/src/__tests__/suspense.test.tsx +1015 -0
- package/src/__tests__/useInfiniteQuery.test.tsx +1773 -0
- package/src/__tests__/useIsFetching.test.tsx +274 -0
- package/src/__tests__/useIsMutating.test.tsx +260 -0
- package/src/__tests__/useMutation.test.tsx +1099 -0
- package/src/__tests__/useQueries.test.tsx +1107 -0
- package/src/__tests__/useQuery.test.tsx +5746 -0
- package/src/__tests__/useQuery.types.test.tsx +157 -0
- package/src/__tests__/utils.tsx +45 -0
- package/src/index.ts +29 -0
- package/src/isRestoring.tsx +6 -0
- package/src/reactBatchedUpdates.native.ts +4 -0
- package/src/reactBatchedUpdates.ts +2 -0
- package/src/setBatchUpdatesFn.ts +4 -0
- package/src/types.ts +122 -0
- package/src/useBaseQuery.ts +140 -0
- package/src/useInfiniteQuery.ts +101 -0
- package/src/useIsFetching.ts +39 -0
- package/src/useIsMutating.ts +43 -0
- package/src/useMutation.ts +126 -0
- package/src/useQueries.ts +192 -0
- package/src/useQuery.ts +104 -0
- package/src/utils.ts +11 -0
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
import * as React from 'react'
|
|
2
|
+
import { render, waitFor } from '@testing-library/react'
|
|
3
|
+
import { renderToString } from 'react-dom/server'
|
|
4
|
+
|
|
5
|
+
import { sleep, queryKey, createQueryClient } from '../../../../tests/utils'
|
|
6
|
+
import {
|
|
7
|
+
QueryClient,
|
|
8
|
+
QueryClientProvider,
|
|
9
|
+
QueryCache,
|
|
10
|
+
useQuery,
|
|
11
|
+
useQueryClient,
|
|
12
|
+
} from '..'
|
|
13
|
+
|
|
14
|
+
describe('QueryClientProvider', () => {
|
|
15
|
+
test('sets a specific cache for all queries to use', async () => {
|
|
16
|
+
const key = queryKey()
|
|
17
|
+
|
|
18
|
+
const queryCache = new QueryCache()
|
|
19
|
+
const queryClient = createQueryClient({ queryCache })
|
|
20
|
+
|
|
21
|
+
function Page() {
|
|
22
|
+
const { data } = useQuery(key, async () => {
|
|
23
|
+
await sleep(10)
|
|
24
|
+
return 'test'
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
return (
|
|
28
|
+
<div>
|
|
29
|
+
<h1>{data}</h1>
|
|
30
|
+
</div>
|
|
31
|
+
)
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const rendered = render(
|
|
35
|
+
<QueryClientProvider client={queryClient}>
|
|
36
|
+
<Page />
|
|
37
|
+
</QueryClientProvider>,
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
await waitFor(() => rendered.getByText('test'))
|
|
41
|
+
|
|
42
|
+
expect(queryCache.find(key)).toBeDefined()
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
test('allows multiple caches to be partitioned', async () => {
|
|
46
|
+
const key1 = queryKey()
|
|
47
|
+
const key2 = queryKey()
|
|
48
|
+
|
|
49
|
+
const queryCache1 = new QueryCache()
|
|
50
|
+
const queryCache2 = new QueryCache()
|
|
51
|
+
|
|
52
|
+
const queryClient1 = createQueryClient({ queryCache: queryCache1 })
|
|
53
|
+
const queryClient2 = createQueryClient({ queryCache: queryCache2 })
|
|
54
|
+
|
|
55
|
+
function Page1() {
|
|
56
|
+
const { data } = useQuery(key1, async () => {
|
|
57
|
+
await sleep(10)
|
|
58
|
+
return 'test1'
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
return (
|
|
62
|
+
<div>
|
|
63
|
+
<h1>{data}</h1>
|
|
64
|
+
</div>
|
|
65
|
+
)
|
|
66
|
+
}
|
|
67
|
+
function Page2() {
|
|
68
|
+
const { data } = useQuery(key2, async () => {
|
|
69
|
+
await sleep(10)
|
|
70
|
+
return 'test2'
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
return (
|
|
74
|
+
<div>
|
|
75
|
+
<h1>{data}</h1>
|
|
76
|
+
</div>
|
|
77
|
+
)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const rendered = render(
|
|
81
|
+
<>
|
|
82
|
+
<QueryClientProvider client={queryClient1}>
|
|
83
|
+
<Page1 />
|
|
84
|
+
</QueryClientProvider>
|
|
85
|
+
<QueryClientProvider client={queryClient2}>
|
|
86
|
+
<Page2 />
|
|
87
|
+
</QueryClientProvider>
|
|
88
|
+
</>,
|
|
89
|
+
)
|
|
90
|
+
|
|
91
|
+
await waitFor(() => rendered.getByText('test1'))
|
|
92
|
+
await waitFor(() => rendered.getByText('test2'))
|
|
93
|
+
|
|
94
|
+
expect(queryCache1.find(key1)).toBeDefined()
|
|
95
|
+
expect(queryCache1.find(key2)).not.toBeDefined()
|
|
96
|
+
expect(queryCache2.find(key1)).not.toBeDefined()
|
|
97
|
+
expect(queryCache2.find(key2)).toBeDefined()
|
|
98
|
+
})
|
|
99
|
+
|
|
100
|
+
test("uses defaultOptions for queries when they don't provide their own config", async () => {
|
|
101
|
+
const key = queryKey()
|
|
102
|
+
|
|
103
|
+
const queryCache = new QueryCache()
|
|
104
|
+
const queryClient = createQueryClient({
|
|
105
|
+
queryCache,
|
|
106
|
+
defaultOptions: {
|
|
107
|
+
queries: {
|
|
108
|
+
cacheTime: Infinity,
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
})
|
|
112
|
+
|
|
113
|
+
function Page() {
|
|
114
|
+
const { data } = useQuery(key, async () => {
|
|
115
|
+
await sleep(10)
|
|
116
|
+
return 'test'
|
|
117
|
+
})
|
|
118
|
+
|
|
119
|
+
return (
|
|
120
|
+
<div>
|
|
121
|
+
<h1>{data}</h1>
|
|
122
|
+
</div>
|
|
123
|
+
)
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
const rendered = render(
|
|
127
|
+
<QueryClientProvider client={queryClient}>
|
|
128
|
+
<Page />
|
|
129
|
+
</QueryClientProvider>,
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
await waitFor(() => rendered.getByText('test'))
|
|
133
|
+
|
|
134
|
+
expect(queryCache.find(key)).toBeDefined()
|
|
135
|
+
expect(queryCache.find(key)?.options.cacheTime).toBe(Infinity)
|
|
136
|
+
})
|
|
137
|
+
|
|
138
|
+
describe('with custom context', () => {
|
|
139
|
+
it('uses the correct context', async () => {
|
|
140
|
+
const key = queryKey()
|
|
141
|
+
|
|
142
|
+
const contextOuter = React.createContext<QueryClient | undefined>(
|
|
143
|
+
undefined,
|
|
144
|
+
)
|
|
145
|
+
const contextInner = React.createContext<QueryClient | undefined>(
|
|
146
|
+
undefined,
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
const queryCacheOuter = new QueryCache()
|
|
150
|
+
const queryClientOuter = new QueryClient({ queryCache: queryCacheOuter })
|
|
151
|
+
|
|
152
|
+
const queryCacheInner = new QueryCache()
|
|
153
|
+
const queryClientInner = new QueryClient({ queryCache: queryCacheInner })
|
|
154
|
+
|
|
155
|
+
const queryCacheInnerInner = new QueryCache()
|
|
156
|
+
const queryClientInnerInner = new QueryClient({
|
|
157
|
+
queryCache: queryCacheInnerInner,
|
|
158
|
+
})
|
|
159
|
+
|
|
160
|
+
function Page() {
|
|
161
|
+
const { data: testOuter } = useQuery(key, async () => 'testOuter', {
|
|
162
|
+
context: contextOuter,
|
|
163
|
+
})
|
|
164
|
+
const { data: testInner } = useQuery(key, async () => 'testInner', {
|
|
165
|
+
context: contextInner,
|
|
166
|
+
})
|
|
167
|
+
const { data: testInnerInner } = useQuery(
|
|
168
|
+
key,
|
|
169
|
+
async () => 'testInnerInner',
|
|
170
|
+
)
|
|
171
|
+
|
|
172
|
+
return (
|
|
173
|
+
<div>
|
|
174
|
+
<h1>
|
|
175
|
+
{testOuter} {testInner} {testInnerInner}
|
|
176
|
+
</h1>
|
|
177
|
+
</div>
|
|
178
|
+
)
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// contextSharing should be ignored when passing a custom context.
|
|
182
|
+
const contextSharing = true
|
|
183
|
+
|
|
184
|
+
const rendered = render(
|
|
185
|
+
<QueryClientProvider client={queryClientOuter} context={contextOuter}>
|
|
186
|
+
<QueryClientProvider client={queryClientInner} context={contextInner}>
|
|
187
|
+
<QueryClientProvider
|
|
188
|
+
client={queryClientInnerInner}
|
|
189
|
+
contextSharing={contextSharing}
|
|
190
|
+
>
|
|
191
|
+
<Page />
|
|
192
|
+
</QueryClientProvider>
|
|
193
|
+
</QueryClientProvider>
|
|
194
|
+
</QueryClientProvider>,
|
|
195
|
+
)
|
|
196
|
+
|
|
197
|
+
await waitFor(() =>
|
|
198
|
+
rendered.getByText('testOuter testInner testInnerInner'),
|
|
199
|
+
)
|
|
200
|
+
})
|
|
201
|
+
})
|
|
202
|
+
|
|
203
|
+
describe('useQueryClient', () => {
|
|
204
|
+
test('should throw an error if no query client has been set', () => {
|
|
205
|
+
const consoleMock = jest
|
|
206
|
+
.spyOn(console, 'error')
|
|
207
|
+
.mockImplementation(() => undefined)
|
|
208
|
+
|
|
209
|
+
function Page() {
|
|
210
|
+
useQueryClient()
|
|
211
|
+
return null
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
expect(() => render(<Page />)).toThrow(
|
|
215
|
+
'No QueryClient set, use QueryClientProvider to set one',
|
|
216
|
+
)
|
|
217
|
+
|
|
218
|
+
consoleMock.mockRestore()
|
|
219
|
+
})
|
|
220
|
+
|
|
221
|
+
test('should use window to get the context when contextSharing is true', () => {
|
|
222
|
+
const queryCache = new QueryCache()
|
|
223
|
+
const queryClient = createQueryClient({ queryCache })
|
|
224
|
+
|
|
225
|
+
let queryClientFromHook: QueryClient | undefined
|
|
226
|
+
let queryClientFromWindow: QueryClient | undefined
|
|
227
|
+
|
|
228
|
+
function Page() {
|
|
229
|
+
queryClientFromHook = useQueryClient()
|
|
230
|
+
queryClientFromWindow = React.useContext(
|
|
231
|
+
window.ReactQueryClientContext as React.Context<
|
|
232
|
+
QueryClient | undefined
|
|
233
|
+
>,
|
|
234
|
+
)
|
|
235
|
+
return null
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
render(
|
|
239
|
+
<QueryClientProvider client={queryClient} contextSharing={true}>
|
|
240
|
+
<Page />
|
|
241
|
+
</QueryClientProvider>,
|
|
242
|
+
)
|
|
243
|
+
|
|
244
|
+
expect(queryClientFromHook).toEqual(queryClient)
|
|
245
|
+
expect(queryClientFromWindow).toEqual(queryClient)
|
|
246
|
+
})
|
|
247
|
+
|
|
248
|
+
test('should not use window to get the context when contextSharing is true and window does not exist', () => {
|
|
249
|
+
const queryCache = new QueryCache()
|
|
250
|
+
const queryClient = createQueryClient({ queryCache })
|
|
251
|
+
|
|
252
|
+
// Mock a non web browser environment
|
|
253
|
+
const windowSpy = jest
|
|
254
|
+
.spyOn(window, 'window', 'get')
|
|
255
|
+
.mockImplementation(undefined)
|
|
256
|
+
|
|
257
|
+
let queryClientFromHook: QueryClient | undefined
|
|
258
|
+
|
|
259
|
+
function Page() {
|
|
260
|
+
queryClientFromHook = useQueryClient()
|
|
261
|
+
return null
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
renderToString(
|
|
265
|
+
<QueryClientProvider client={queryClient} contextSharing={true}>
|
|
266
|
+
<Page />
|
|
267
|
+
</QueryClientProvider>,
|
|
268
|
+
)
|
|
269
|
+
|
|
270
|
+
expect(queryClientFromHook).toEqual(queryClient)
|
|
271
|
+
|
|
272
|
+
windowSpy.mockRestore()
|
|
273
|
+
})
|
|
274
|
+
})
|
|
275
|
+
})
|