@tanstack/solid-query 4.24.9 → 5.0.0-alpha.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/cjs/index.js +298 -0
- package/build/cjs/index.js.map +1 -0
- package/build/esm/index.js +283 -0
- package/build/esm/index.js.map +1 -0
- package/build/source/QueryClientProvider.jsx +21 -0
- package/build/source/__tests__/QueryClientProvider.test.jsx +120 -0
- package/build/{solid → source}/__tests__/createInfiniteQuery.test.jsx +228 -372
- package/build/{solid → source}/__tests__/createMutation.test.jsx +174 -165
- package/build/{solid → source}/__tests__/createQueries.test.jsx +86 -367
- package/build/{solid → source}/__tests__/createQuery.test.jsx +991 -943
- package/build/{solid → source}/__tests__/createQuery.types.test.jsx +35 -24
- package/build/{solid → source}/__tests__/suspense.test.jsx +177 -148
- package/build/{solid → source}/__tests__/transition.test.jsx +7 -4
- package/build/{solid → source}/__tests__/useIsFetching.test.jsx +68 -85
- package/build/{solid → source}/__tests__/useIsMutating.test.jsx +78 -93
- package/build/{solid → source}/__tests__/utils.jsx +3 -9
- package/build/source/createBaseQuery.js +147 -0
- package/build/source/createInfiniteQuery.js +6 -0
- package/build/{solid → source}/createMutation.js +7 -9
- package/build/source/createQueries.js +32 -0
- package/build/source/createQuery.js +6 -0
- package/build/{solid → source}/index.js +5 -3
- package/build/source/setBatchUpdatesFn.js +3 -0
- package/build/source/useIsFetching.js +12 -0
- package/build/source/useIsMutating.js +12 -0
- package/build/source/utils.js +7 -0
- package/build/types/QueryClientProvider.d.ts +9 -0
- package/build/{lib → types}/__tests__/utils.d.ts +3 -8
- package/build/types/createBaseQuery.d.ts +4 -0
- package/build/types/createInfiniteQuery.d.ts +3 -0
- package/build/types/createMutation.d.ts +3 -0
- package/build/{lib → types}/createQueries.d.ts +10 -8
- package/build/types/createQuery.d.ts +11 -0
- package/build/{lib → types}/index.d.ts +4 -3
- package/build/types/setBatchUpdatesFn.d.ts +1 -0
- package/build/types/types.d.ts +33 -0
- package/build/types/useIsFetching.d.ts +8 -0
- package/build/types/useIsMutating.d.ts +8 -0
- package/build/types/utils.d.ts +1 -0
- package/build/umd/index.js +2 -0
- package/build/umd/index.js.map +1 -0
- package/package.json +25 -17
- package/src/QueryClientProvider.tsx +17 -86
- package/src/__tests__/QueryClientProvider.test.tsx +37 -140
- package/src/__tests__/createInfiniteQuery.test.tsx +277 -508
- package/src/__tests__/createMutation.test.tsx +177 -225
- package/src/__tests__/createQueries.test.tsx +180 -528
- package/src/__tests__/createQuery.test.tsx +970 -1200
- package/src/__tests__/createQuery.types.test.tsx +30 -25
- package/src/__tests__/suspense.test.tsx +141 -178
- package/src/__tests__/transition.test.tsx +7 -4
- package/src/__tests__/useIsFetching.test.tsx +77 -122
- package/src/__tests__/useIsMutating.test.tsx +83 -128
- package/src/__tests__/utils.tsx +4 -11
- package/src/createBaseQuery.ts +148 -60
- package/src/createInfiniteQuery.ts +15 -94
- package/src/createMutation.ts +9 -63
- package/src/createQueries.ts +44 -55
- package/src/createQuery.ts +42 -127
- package/src/index.ts +6 -3
- package/src/setBatchUpdatesFn.ts +4 -0
- package/src/types.ts +81 -75
- package/src/useIsFetching.ts +12 -44
- package/src/useIsMutating.ts +13 -29
- package/src/utils.ts +5 -79
- package/build/lib/QueryClientProvider.d.ts +0 -24
- package/build/lib/QueryClientProvider.esm.js +0 -74
- package/build/lib/QueryClientProvider.esm.js.map +0 -1
- package/build/lib/QueryClientProvider.js +0 -80
- package/build/lib/QueryClientProvider.js.map +0 -1
- package/build/lib/QueryClientProvider.mjs +0 -74
- package/build/lib/QueryClientProvider.mjs.map +0 -1
- package/build/lib/createBaseQuery.d.ts +0 -4
- package/build/lib/createBaseQuery.esm.js +0 -93
- package/build/lib/createBaseQuery.esm.js.map +0 -1
- package/build/lib/createBaseQuery.js +0 -97
- package/build/lib/createBaseQuery.js.map +0 -1
- package/build/lib/createBaseQuery.mjs +0 -93
- package/build/lib/createBaseQuery.mjs.map +0 -1
- package/build/lib/createInfiniteQuery.d.ts +0 -5
- package/build/lib/createInfiniteQuery.esm.js +0 -20
- package/build/lib/createInfiniteQuery.esm.js.map +0 -1
- package/build/lib/createInfiniteQuery.js +0 -24
- package/build/lib/createInfiniteQuery.js.map +0 -1
- package/build/lib/createInfiniteQuery.mjs +0 -20
- package/build/lib/createInfiniteQuery.mjs.map +0 -1
- package/build/lib/createMutation.d.ts +0 -6
- package/build/lib/createMutation.esm.js +0 -45
- package/build/lib/createMutation.esm.js.map +0 -1
- package/build/lib/createMutation.js +0 -49
- package/build/lib/createMutation.js.map +0 -1
- package/build/lib/createMutation.mjs +0 -45
- package/build/lib/createMutation.mjs.map +0 -1
- package/build/lib/createQueries.esm.js +0 -54
- package/build/lib/createQueries.esm.js.map +0 -1
- package/build/lib/createQueries.js +0 -58
- package/build/lib/createQueries.js.map +0 -1
- package/build/lib/createQueries.mjs +0 -54
- package/build/lib/createQueries.mjs.map +0 -1
- package/build/lib/createQuery.d.ts +0 -23
- package/build/lib/createQuery.esm.js +0 -25
- package/build/lib/createQuery.esm.js.map +0 -1
- package/build/lib/createQuery.js +0 -29
- package/build/lib/createQuery.js.map +0 -1
- package/build/lib/createQuery.mjs +0 -25
- package/build/lib/createQuery.mjs.map +0 -1
- package/build/lib/index.esm.js +0 -9
- package/build/lib/index.esm.js.map +0 -1
- package/build/lib/index.js +0 -31
- package/build/lib/index.js.map +0 -1
- package/build/lib/index.mjs +0 -9
- package/build/lib/index.mjs.map +0 -1
- package/build/lib/types.d.ts +0 -47
- package/build/lib/useIsFetching.d.ts +0 -7
- package/build/lib/useIsFetching.esm.js +0 -29
- package/build/lib/useIsFetching.esm.js.map +0 -1
- package/build/lib/useIsFetching.js +0 -33
- package/build/lib/useIsFetching.js.map +0 -1
- package/build/lib/useIsFetching.mjs +0 -29
- package/build/lib/useIsFetching.mjs.map +0 -1
- package/build/lib/useIsMutating.d.ts +0 -8
- package/build/lib/useIsMutating.esm.js +0 -22
- package/build/lib/useIsMutating.esm.js.map +0 -1
- package/build/lib/useIsMutating.js +0 -26
- package/build/lib/useIsMutating.js.map +0 -1
- package/build/lib/useIsMutating.mjs +0 -22
- package/build/lib/useIsMutating.mjs.map +0 -1
- package/build/lib/utils.d.ts +0 -14
- package/build/lib/utils.esm.js +0 -63
- package/build/lib/utils.esm.js.map +0 -1
- package/build/lib/utils.js +0 -72
- package/build/lib/utils.js.map +0 -1
- package/build/lib/utils.mjs +0 -63
- package/build/lib/utils.mjs.map +0 -1
- package/build/solid/QueryClientProvider.jsx +0 -49
- package/build/solid/__tests__/QueryClientProvider.test.jsx +0 -185
- package/build/solid/createBaseQuery.js +0 -81
- package/build/solid/createInfiniteQuery.js +0 -16
- package/build/solid/createQueries.js +0 -39
- package/build/solid/createQuery.js +0 -16
- package/build/solid/useIsFetching.js +0 -23
- package/build/solid/useIsMutating.js +0 -16
- package/build/solid/utils.js +0 -45
- package/build/umd/index.development.js +0 -3572
- package/build/umd/index.development.js.map +0 -1
- package/build/umd/index.production.js +0 -2
- package/build/umd/index.production.js.map +0 -1
- /package/build/{solid → source}/types.js +0 -0
- /package/build/{lib → types}/__tests__/QueryClientProvider.test.d.ts +0 -0
- /package/build/{lib → types}/__tests__/createInfiniteQuery.test.d.ts +0 -0
- /package/build/{lib → types}/__tests__/createMutation.test.d.ts +0 -0
- /package/build/{lib → types}/__tests__/createQueries.test.d.ts +0 -0
- /package/build/{lib → types}/__tests__/createQuery.test.d.ts +0 -0
- /package/build/{lib → types}/__tests__/createQuery.types.test.d.ts +0 -0
- /package/build/{lib → types}/__tests__/suspense.test.d.ts +0 -0
- /package/build/{lib → types}/__tests__/transition.test.d.ts +0 -0
- /package/build/{lib → types}/__tests__/useIsFetching.test.d.ts +0 -0
- /package/build/{lib → types}/__tests__/useIsMutating.test.d.ts +0 -0
|
@@ -8,7 +8,11 @@ import {
|
|
|
8
8
|
Show,
|
|
9
9
|
Suspense,
|
|
10
10
|
} from 'solid-js'
|
|
11
|
-
import type {
|
|
11
|
+
import type {
|
|
12
|
+
CreateInfiniteQueryResult,
|
|
13
|
+
CreateQueryResult,
|
|
14
|
+
InfiniteData,
|
|
15
|
+
} from '..'
|
|
12
16
|
import {
|
|
13
17
|
createInfiniteQuery,
|
|
14
18
|
createQuery,
|
|
@@ -29,24 +33,23 @@ describe("useQuery's in Suspense mode", () => {
|
|
|
29
33
|
let renders = 0
|
|
30
34
|
|
|
31
35
|
function Page() {
|
|
32
|
-
const [stateKey, setStateKey] = createSignal(key
|
|
36
|
+
const [stateKey, setStateKey] = createSignal(key)
|
|
33
37
|
|
|
34
|
-
const state = createQuery(
|
|
35
|
-
stateKey,
|
|
36
|
-
async () => {
|
|
38
|
+
const state = createQuery(() => ({
|
|
39
|
+
queryKey: stateKey(),
|
|
40
|
+
queryFn: async () => {
|
|
37
41
|
count++
|
|
38
42
|
await sleep(10)
|
|
39
43
|
return count
|
|
40
44
|
},
|
|
41
|
-
|
|
42
|
-
)
|
|
45
|
+
}))
|
|
43
46
|
|
|
44
47
|
createRenderEffect(() => {
|
|
45
48
|
states.push({ ...state })
|
|
46
49
|
})
|
|
47
50
|
|
|
48
51
|
createRenderEffect(
|
|
49
|
-
on([() => ({ ...state }), key], () => {
|
|
52
|
+
on([() => ({ ...state }), () => key], () => {
|
|
50
53
|
renders++
|
|
51
54
|
}),
|
|
52
55
|
)
|
|
@@ -73,9 +76,6 @@ describe("useQuery's in Suspense mode", () => {
|
|
|
73
76
|
await waitFor(() => screen.getByText('data: 2'))
|
|
74
77
|
|
|
75
78
|
expect(renders).toBe(4)
|
|
76
|
-
// TODO(lukemurray): verify that this expectation is valid. this is 2 in
|
|
77
|
-
// react, but 4 in solid, because in solid suspense is triggered on read and
|
|
78
|
-
// the component needs to render in order to trigger suspense.
|
|
79
79
|
expect(states.length).toBe(4)
|
|
80
80
|
expect(states[1]).toMatchObject({ data: 1, status: 'success' })
|
|
81
81
|
expect(states[3]).toMatchObject({ data: 2, status: 'success' })
|
|
@@ -83,21 +83,20 @@ describe("useQuery's in Suspense mode", () => {
|
|
|
83
83
|
|
|
84
84
|
it('should return the correct states for a successful infinite query', async () => {
|
|
85
85
|
const key = queryKey()
|
|
86
|
-
const states: CreateInfiniteQueryResult<number
|
|
86
|
+
const states: CreateInfiniteQueryResult<InfiniteData<number>>[] = []
|
|
87
87
|
|
|
88
88
|
function Page() {
|
|
89
89
|
const [multiplier, setMultiplier] = createSignal(1)
|
|
90
|
-
const state = createInfiniteQuery(
|
|
91
|
-
|
|
92
|
-
async ({ pageParam
|
|
90
|
+
const state = createInfiniteQuery(() => ({
|
|
91
|
+
queryKey: [`${key}_${multiplier()}`],
|
|
92
|
+
queryFn: async ({ pageParam }) => {
|
|
93
93
|
await sleep(10)
|
|
94
94
|
return Number(pageParam * multiplier())
|
|
95
95
|
},
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
)
|
|
96
|
+
defaultPageParam: 1,
|
|
97
|
+
suspense: true,
|
|
98
|
+
getNextPageParam: (lastPage) => lastPage + 1,
|
|
99
|
+
}))
|
|
101
100
|
|
|
102
101
|
createRenderEffect(() => {
|
|
103
102
|
states.push({ ...state })
|
|
@@ -125,7 +124,7 @@ describe("useQuery's in Suspense mode", () => {
|
|
|
125
124
|
// occurs on read.
|
|
126
125
|
expect(states.length).toBe(2)
|
|
127
126
|
expect(states[1]).toMatchObject({
|
|
128
|
-
data: { pages: [1], pageParams: [
|
|
127
|
+
data: { pages: [1], pageParams: [1] },
|
|
129
128
|
status: 'success',
|
|
130
129
|
})
|
|
131
130
|
|
|
@@ -135,7 +134,7 @@ describe("useQuery's in Suspense mode", () => {
|
|
|
135
134
|
// TODO(lukemurray): in react this is 2 and in solid it is 4
|
|
136
135
|
expect(states.length).toBe(4)
|
|
137
136
|
expect(states[3]).toMatchObject({
|
|
138
|
-
data: { pages: [2], pageParams: [
|
|
137
|
+
data: { pages: [2], pageParams: [1] },
|
|
139
138
|
status: 'success',
|
|
140
139
|
})
|
|
141
140
|
})
|
|
@@ -150,7 +149,7 @@ describe("useQuery's in Suspense mode", () => {
|
|
|
150
149
|
})
|
|
151
150
|
|
|
152
151
|
function Page() {
|
|
153
|
-
createQuery(() => [key
|
|
152
|
+
createQuery(() => ({ queryKey: [key], queryFn, suspense: true }))
|
|
154
153
|
|
|
155
154
|
return <>rendered</>
|
|
156
155
|
}
|
|
@@ -172,14 +171,13 @@ describe("useQuery's in Suspense mode", () => {
|
|
|
172
171
|
const key = queryKey()
|
|
173
172
|
|
|
174
173
|
function Page() {
|
|
175
|
-
createQuery(
|
|
176
|
-
key,
|
|
177
|
-
() => {
|
|
174
|
+
createQuery(() => ({
|
|
175
|
+
queryKey: key,
|
|
176
|
+
queryFn: () => {
|
|
178
177
|
sleep(10)
|
|
179
178
|
return 'data'
|
|
180
179
|
},
|
|
181
|
-
|
|
182
|
-
)
|
|
180
|
+
}))
|
|
183
181
|
|
|
184
182
|
return <>rendered</>
|
|
185
183
|
}
|
|
@@ -205,17 +203,17 @@ describe("useQuery's in Suspense mode", () => {
|
|
|
205
203
|
))
|
|
206
204
|
|
|
207
205
|
expect(screen.queryByText('rendered')).toBeNull()
|
|
208
|
-
expect(queryCache.find(key
|
|
206
|
+
expect(queryCache.find({ queryKey: key })).toBeFalsy()
|
|
209
207
|
|
|
210
208
|
fireEvent.click(screen.getByLabelText('toggle'))
|
|
211
209
|
await waitFor(() => screen.getByText('rendered'))
|
|
212
210
|
|
|
213
|
-
expect(queryCache.find(key
|
|
211
|
+
expect(queryCache.find({ queryKey: key })?.getObserversCount()).toBe(1)
|
|
214
212
|
|
|
215
213
|
fireEvent.click(screen.getByLabelText('toggle'))
|
|
216
214
|
|
|
217
215
|
expect(screen.queryByText('rendered')).toBeNull()
|
|
218
|
-
expect(queryCache.find(key
|
|
216
|
+
expect(queryCache.find({ queryKey: key })?.getObserversCount()).toBe(0)
|
|
219
217
|
})
|
|
220
218
|
|
|
221
219
|
it('should call onSuccess on the first successful call', async () => {
|
|
@@ -224,18 +222,17 @@ describe("useQuery's in Suspense mode", () => {
|
|
|
224
222
|
const successFn = jest.fn()
|
|
225
223
|
|
|
226
224
|
function Page() {
|
|
227
|
-
createQuery(
|
|
228
|
-
|
|
229
|
-
async () => {
|
|
225
|
+
createQuery(() => ({
|
|
226
|
+
queryKey: [key],
|
|
227
|
+
queryFn: async () => {
|
|
230
228
|
await sleep(10)
|
|
231
|
-
return key
|
|
232
|
-
},
|
|
233
|
-
{
|
|
234
|
-
suspense: true,
|
|
235
|
-
select: () => 'selected',
|
|
236
|
-
onSuccess: successFn,
|
|
229
|
+
return key
|
|
237
230
|
},
|
|
238
|
-
|
|
231
|
+
|
|
232
|
+
suspense: true,
|
|
233
|
+
select: () => 'selected',
|
|
234
|
+
onSuccess: successFn,
|
|
235
|
+
}))
|
|
239
236
|
|
|
240
237
|
return <>rendered</>
|
|
241
238
|
}
|
|
@@ -261,33 +258,27 @@ describe("useQuery's in Suspense mode", () => {
|
|
|
261
258
|
const successFn2 = jest.fn()
|
|
262
259
|
|
|
263
260
|
function FirstComponent() {
|
|
264
|
-
createQuery(
|
|
265
|
-
key,
|
|
266
|
-
() => {
|
|
261
|
+
createQuery(() => ({
|
|
262
|
+
queryKey: key,
|
|
263
|
+
queryFn: () => {
|
|
267
264
|
sleep(10)
|
|
268
265
|
return 'data'
|
|
269
266
|
},
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
onSuccess: successFn1,
|
|
273
|
-
},
|
|
274
|
-
)
|
|
267
|
+
onSuccess: successFn1,
|
|
268
|
+
}))
|
|
275
269
|
|
|
276
270
|
return <span>first</span>
|
|
277
271
|
}
|
|
278
272
|
|
|
279
273
|
function SecondComponent() {
|
|
280
|
-
createQuery(
|
|
281
|
-
key,
|
|
282
|
-
() => {
|
|
274
|
+
createQuery(() => ({
|
|
275
|
+
queryKey: key,
|
|
276
|
+
queryFn: () => {
|
|
283
277
|
sleep(10)
|
|
284
278
|
return 'data'
|
|
285
279
|
},
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
onSuccess: successFn2,
|
|
289
|
-
},
|
|
290
|
-
)
|
|
280
|
+
onSuccess: successFn2,
|
|
281
|
+
}))
|
|
291
282
|
|
|
292
283
|
return <span>second</span>
|
|
293
284
|
}
|
|
@@ -315,22 +306,19 @@ describe("useQuery's in Suspense mode", () => {
|
|
|
315
306
|
let succeed = false
|
|
316
307
|
|
|
317
308
|
function Page() {
|
|
318
|
-
const state = createQuery(
|
|
319
|
-
key,
|
|
320
|
-
async () => {
|
|
309
|
+
const state = createQuery(() => ({
|
|
310
|
+
queryKey: key,
|
|
311
|
+
queryFn: async () => {
|
|
321
312
|
await sleep(10)
|
|
322
|
-
|
|
323
313
|
if (!succeed) {
|
|
324
314
|
throw new Error('Suspense Error Bingo')
|
|
325
315
|
} else {
|
|
326
316
|
return 'data'
|
|
327
317
|
}
|
|
328
318
|
},
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
},
|
|
333
|
-
)
|
|
319
|
+
retryDelay: 10,
|
|
320
|
+
suspense: true,
|
|
321
|
+
}))
|
|
334
322
|
|
|
335
323
|
// Suspense only triggers if used in JSX
|
|
336
324
|
return (
|
|
@@ -381,9 +369,9 @@ describe("useQuery's in Suspense mode", () => {
|
|
|
381
369
|
let succeed = false
|
|
382
370
|
|
|
383
371
|
function Page() {
|
|
384
|
-
const state = createQuery(
|
|
385
|
-
key,
|
|
386
|
-
async () => {
|
|
372
|
+
const state = createQuery(() => ({
|
|
373
|
+
queryKey: key,
|
|
374
|
+
queryFn: async () => {
|
|
387
375
|
await sleep(10)
|
|
388
376
|
if (!succeed) {
|
|
389
377
|
throw new Error('Suspense Error Bingo')
|
|
@@ -391,11 +379,9 @@ describe("useQuery's in Suspense mode", () => {
|
|
|
391
379
|
return 'data'
|
|
392
380
|
}
|
|
393
381
|
},
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
},
|
|
398
|
-
)
|
|
382
|
+
retry: false,
|
|
383
|
+
suspense: true,
|
|
384
|
+
}))
|
|
399
385
|
|
|
400
386
|
// Suspense only triggers if used in JSX
|
|
401
387
|
return (
|
|
@@ -444,19 +430,18 @@ describe("useQuery's in Suspense mode", () => {
|
|
|
444
430
|
let count = 0
|
|
445
431
|
|
|
446
432
|
function Component() {
|
|
447
|
-
const result = createQuery(
|
|
448
|
-
key,
|
|
449
|
-
async () => {
|
|
433
|
+
const result = createQuery(() => ({
|
|
434
|
+
queryKey: key,
|
|
435
|
+
queryFn: async () => {
|
|
450
436
|
await sleep(100)
|
|
451
437
|
count++
|
|
452
438
|
return count
|
|
453
439
|
},
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
)
|
|
440
|
+
|
|
441
|
+
retry: false,
|
|
442
|
+
suspense: true,
|
|
443
|
+
staleTime: 0,
|
|
444
|
+
}))
|
|
460
445
|
return (
|
|
461
446
|
<div>
|
|
462
447
|
<span>data: {result.data}</span>
|
|
@@ -504,27 +489,25 @@ describe("useQuery's in Suspense mode", () => {
|
|
|
504
489
|
const key2 = queryKey()
|
|
505
490
|
|
|
506
491
|
function Component(props: { queryKey: Array<string> }) {
|
|
507
|
-
const result = createQuery(
|
|
508
|
-
|
|
509
|
-
async () => {
|
|
492
|
+
const result = createQuery(() => ({
|
|
493
|
+
queryKey: props.queryKey,
|
|
494
|
+
queryFn: async () => {
|
|
510
495
|
await sleep(100)
|
|
511
496
|
return props.queryKey
|
|
512
497
|
},
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
},
|
|
517
|
-
)
|
|
498
|
+
retry: false,
|
|
499
|
+
suspense: true,
|
|
500
|
+
}))
|
|
518
501
|
return <div>data: {result.data}</div>
|
|
519
502
|
}
|
|
520
503
|
|
|
521
504
|
function Page() {
|
|
522
|
-
const [key, setKey] = createSignal(key1
|
|
505
|
+
const [key, setKey] = createSignal(key1)
|
|
523
506
|
return (
|
|
524
507
|
<div>
|
|
525
508
|
<button
|
|
526
509
|
onClick={() => {
|
|
527
|
-
setKey(key2
|
|
510
|
+
setKey(key2)
|
|
528
511
|
}}
|
|
529
512
|
>
|
|
530
513
|
switch
|
|
@@ -543,31 +526,25 @@ describe("useQuery's in Suspense mode", () => {
|
|
|
543
526
|
))
|
|
544
527
|
|
|
545
528
|
await waitFor(() => screen.getByText('Loading...'))
|
|
546
|
-
await waitFor(() => screen.getByText(`data: ${key1
|
|
529
|
+
await waitFor(() => screen.getByText(`data: ${key1}`))
|
|
547
530
|
fireEvent.click(screen.getByText('switch'))
|
|
548
531
|
await waitFor(() => screen.getByText('Loading...'))
|
|
549
|
-
await waitFor(() => screen.getByText(`data: ${key2
|
|
550
|
-
expect(
|
|
551
|
-
// @ts-expect-error
|
|
552
|
-
queryClient.getQueryCache().find(key2())!.observers[0].listeners.length,
|
|
553
|
-
).toBe(1)
|
|
532
|
+
await waitFor(() => screen.getByText(`data: ${key2}`))
|
|
554
533
|
})
|
|
555
534
|
|
|
556
535
|
it('should throw errors to the error boundary by default', async () => {
|
|
557
536
|
const key = queryKey()
|
|
558
537
|
|
|
559
538
|
function Page() {
|
|
560
|
-
const state = createQuery(
|
|
561
|
-
key,
|
|
562
|
-
async (): Promise<unknown> => {
|
|
539
|
+
const state = createQuery(() => ({
|
|
540
|
+
queryKey: key,
|
|
541
|
+
queryFn: async (): Promise<unknown> => {
|
|
563
542
|
await sleep(10)
|
|
564
543
|
throw new Error('Suspense Error a1x')
|
|
565
544
|
},
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
},
|
|
570
|
-
)
|
|
545
|
+
retry: false,
|
|
546
|
+
suspense: true,
|
|
547
|
+
}))
|
|
571
548
|
|
|
572
549
|
// read state.data to trigger suspense.
|
|
573
550
|
createRenderEffect(() => {
|
|
@@ -604,22 +581,19 @@ describe("useQuery's in Suspense mode", () => {
|
|
|
604
581
|
await waitFor(() => screen.getByText('error boundary'))
|
|
605
582
|
})
|
|
606
583
|
|
|
607
|
-
it('should not throw errors to the error boundary when
|
|
584
|
+
it('should not throw errors to the error boundary when throwErrors: false', async () => {
|
|
608
585
|
const key = queryKey()
|
|
609
586
|
|
|
610
587
|
function Page() {
|
|
611
|
-
const state = createQuery(
|
|
612
|
-
key,
|
|
613
|
-
async (): Promise<unknown> => {
|
|
588
|
+
const state = createQuery(() => ({
|
|
589
|
+
queryKey: key,
|
|
590
|
+
queryFn: async (): Promise<unknown> => {
|
|
614
591
|
await sleep(10)
|
|
615
592
|
throw new Error('Suspense Error a2x')
|
|
616
593
|
},
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
useErrorBoundary: false,
|
|
621
|
-
},
|
|
622
|
-
)
|
|
594
|
+
retry: false,
|
|
595
|
+
throwErrors: false,
|
|
596
|
+
}))
|
|
623
597
|
|
|
624
598
|
// read state.data to trigger suspense.
|
|
625
599
|
createRenderEffect(() => {
|
|
@@ -656,22 +630,19 @@ describe("useQuery's in Suspense mode", () => {
|
|
|
656
630
|
await waitFor(() => screen.getByText('rendered'))
|
|
657
631
|
})
|
|
658
632
|
|
|
659
|
-
it('should
|
|
633
|
+
it('should throw errors to the error boundary when a throwErrors function returns true', async () => {
|
|
660
634
|
const key = queryKey()
|
|
661
635
|
|
|
662
636
|
function Page() {
|
|
663
|
-
const state = createQuery(
|
|
664
|
-
key,
|
|
665
|
-
async (): Promise<unknown> => {
|
|
637
|
+
const state = createQuery(() => ({
|
|
638
|
+
queryKey: key,
|
|
639
|
+
queryFn: async (): Promise<unknown> => {
|
|
666
640
|
await sleep(10)
|
|
667
|
-
return Promise.reject('Remote Error')
|
|
641
|
+
return Promise.reject(new Error('Remote Error'))
|
|
668
642
|
},
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
useErrorBoundary: (err) => err !== 'Local Error',
|
|
673
|
-
},
|
|
674
|
-
)
|
|
643
|
+
retry: false,
|
|
644
|
+
throwErrors: (err) => err.message !== 'Local Error',
|
|
645
|
+
}))
|
|
675
646
|
|
|
676
647
|
// read state.data to trigger suspense.
|
|
677
648
|
createRenderEffect(() => {
|
|
@@ -708,22 +679,21 @@ describe("useQuery's in Suspense mode", () => {
|
|
|
708
679
|
await waitFor(() => screen.getByText('error boundary'))
|
|
709
680
|
})
|
|
710
681
|
|
|
711
|
-
it('should not throw errors to the error boundary when a
|
|
682
|
+
it('should not throw errors to the error boundary when a throwErrors function returns false', async () => {
|
|
712
683
|
const key = queryKey()
|
|
713
684
|
|
|
714
685
|
function Page() {
|
|
715
|
-
const state = createQuery(
|
|
716
|
-
key,
|
|
717
|
-
async (): Promise<unknown> => {
|
|
686
|
+
const state = createQuery(() => ({
|
|
687
|
+
queryKey: key,
|
|
688
|
+
queryFn: async (): Promise<unknown> => {
|
|
718
689
|
await sleep(10)
|
|
719
|
-
return Promise.reject('Local Error')
|
|
720
|
-
},
|
|
721
|
-
{
|
|
722
|
-
retry: false,
|
|
723
|
-
suspense: true,
|
|
724
|
-
useErrorBoundary: (err) => err !== 'Local Error',
|
|
690
|
+
return Promise.reject(new Error('Local Error'))
|
|
725
691
|
},
|
|
726
|
-
|
|
692
|
+
|
|
693
|
+
retry: false,
|
|
694
|
+
suspense: true,
|
|
695
|
+
throwErrors: (err) => err.message !== 'Local Error',
|
|
696
|
+
}))
|
|
727
697
|
|
|
728
698
|
// read state.data to trigger suspense.
|
|
729
699
|
createRenderEffect(() => {
|
|
@@ -771,12 +741,12 @@ describe("useQuery's in Suspense mode", () => {
|
|
|
771
741
|
|
|
772
742
|
function Page() {
|
|
773
743
|
const [enabled, setEnabled] = createSignal(false)
|
|
774
|
-
const result = createQuery(() =>
|
|
744
|
+
const result = createQuery(() => ({
|
|
745
|
+
queryKey: [key],
|
|
746
|
+
queryFn,
|
|
775
747
|
suspense: true,
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
},
|
|
779
|
-
})
|
|
748
|
+
enabled: enabled(),
|
|
749
|
+
}))
|
|
780
750
|
|
|
781
751
|
return (
|
|
782
752
|
<div>
|
|
@@ -812,10 +782,10 @@ describe("useQuery's in Suspense mode", () => {
|
|
|
812
782
|
|
|
813
783
|
function Page() {
|
|
814
784
|
const [nonce] = createSignal(0)
|
|
815
|
-
const queryKeys =
|
|
816
|
-
const result = createQuery(
|
|
817
|
-
queryKeys,
|
|
818
|
-
async () => {
|
|
785
|
+
const queryKeys = [`${key}-${succeed}`]
|
|
786
|
+
const result = createQuery(() => ({
|
|
787
|
+
queryKey: queryKeys,
|
|
788
|
+
queryFn: async () => {
|
|
819
789
|
await sleep(10)
|
|
820
790
|
if (!succeed) {
|
|
821
791
|
throw new Error('Suspense Error Bingo')
|
|
@@ -823,11 +793,9 @@ describe("useQuery's in Suspense mode", () => {
|
|
|
823
793
|
return nonce()
|
|
824
794
|
}
|
|
825
795
|
},
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
},
|
|
830
|
-
)
|
|
796
|
+
retry: false,
|
|
797
|
+
suspense: true,
|
|
798
|
+
}))
|
|
831
799
|
return (
|
|
832
800
|
<div>
|
|
833
801
|
<span>rendered</span> <span>{result.data}</span>
|
|
@@ -878,9 +846,9 @@ describe("useQuery's in Suspense mode", () => {
|
|
|
878
846
|
function Page() {
|
|
879
847
|
const [key, setKey] = createSignal(0)
|
|
880
848
|
|
|
881
|
-
const result = createQuery(
|
|
882
|
-
|
|
883
|
-
async () => {
|
|
849
|
+
const result = createQuery(() => ({
|
|
850
|
+
queryKey: [`${key()}-${succeed}`],
|
|
851
|
+
queryFn: async () => {
|
|
884
852
|
await sleep(10)
|
|
885
853
|
if (!succeed) {
|
|
886
854
|
throw new Error('Suspense Error Bingo')
|
|
@@ -888,11 +856,9 @@ describe("useQuery's in Suspense mode", () => {
|
|
|
888
856
|
return 'data'
|
|
889
857
|
}
|
|
890
858
|
},
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
},
|
|
895
|
-
)
|
|
859
|
+
retry: false,
|
|
860
|
+
suspense: true,
|
|
861
|
+
}))
|
|
896
862
|
return (
|
|
897
863
|
<div>
|
|
898
864
|
<span>rendered</span> <span>{result.data}</span>
|
|
@@ -937,20 +903,17 @@ describe("useQuery's in Suspense mode", () => {
|
|
|
937
903
|
const queryKeys = '1'
|
|
938
904
|
const [enabled, setEnabled] = createSignal(false)
|
|
939
905
|
|
|
940
|
-
const result = createQuery<string>(
|
|
941
|
-
|
|
942
|
-
async () => {
|
|
906
|
+
const result = createQuery<string>(() => ({
|
|
907
|
+
queryKey: [queryKeys],
|
|
908
|
+
queryFn: async () => {
|
|
943
909
|
await sleep(10)
|
|
944
910
|
throw new Error('Suspense Error Bingo')
|
|
945
911
|
},
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
},
|
|
952
|
-
},
|
|
953
|
-
)
|
|
912
|
+
|
|
913
|
+
retry: false,
|
|
914
|
+
suspense: true,
|
|
915
|
+
enabled: enabled(),
|
|
916
|
+
}))
|
|
954
917
|
return (
|
|
955
918
|
<div>
|
|
956
919
|
<span>rendered</span> <span>{result.data}</span>
|
|
@@ -995,7 +958,7 @@ describe("useQuery's in Suspense mode", () => {
|
|
|
995
958
|
await waitFor(() => screen.getByText('error boundary'))
|
|
996
959
|
})
|
|
997
960
|
|
|
998
|
-
it('should render the correct amount of times in Suspense mode when
|
|
961
|
+
it('should render the correct amount of times in Suspense mode when gcTime is set to 0', async () => {
|
|
999
962
|
const key = queryKey()
|
|
1000
963
|
let state: CreateQueryResult<number> | null = null
|
|
1001
964
|
|
|
@@ -1003,15 +966,15 @@ describe("useQuery's in Suspense mode", () => {
|
|
|
1003
966
|
let renders = 0
|
|
1004
967
|
|
|
1005
968
|
function Page() {
|
|
1006
|
-
state = createQuery(
|
|
1007
|
-
key,
|
|
1008
|
-
async () => {
|
|
969
|
+
state = createQuery(() => ({
|
|
970
|
+
queryKey: key,
|
|
971
|
+
queryFn: async () => {
|
|
1009
972
|
count++
|
|
1010
973
|
await sleep(10)
|
|
1011
974
|
return count
|
|
1012
975
|
},
|
|
1013
|
-
|
|
1014
|
-
)
|
|
976
|
+
gcTime: 0,
|
|
977
|
+
}))
|
|
1015
978
|
|
|
1016
979
|
createRenderEffect(
|
|
1017
980
|
on([() => ({ ...state })], () => {
|
|
@@ -12,10 +12,13 @@ describe("useQuery's in Suspense mode with transitions", () => {
|
|
|
12
12
|
const key = queryKey()
|
|
13
13
|
|
|
14
14
|
function Suspended() {
|
|
15
|
-
const state = createQuery(
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
const state = createQuery(() => ({
|
|
16
|
+
queryKey: key,
|
|
17
|
+
queryFn: async () => {
|
|
18
|
+
await sleep(10)
|
|
19
|
+
return true
|
|
20
|
+
},
|
|
21
|
+
}))
|
|
19
22
|
|
|
20
23
|
return <Show when={state.data}>Message</Show>
|
|
21
24
|
}
|