@tanstack/solid-query 5.0.0-beta.8 → 5.0.0-rc.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/dev.cjs +176 -80
- package/build/dev.js +178 -82
- package/build/index.cjs +176 -80
- package/build/index.d.cts +9 -5
- package/build/index.d.ts +9 -5
- package/build/index.js +178 -82
- package/package.json +7 -3
- package/src/QueryClientProvider.tsx +14 -7
- package/src/__tests__/createInfiniteQuery.test.tsx +59 -52
- package/src/__tests__/createMutation.test.tsx +22 -4
- package/src/__tests__/createQueries.test.tsx +83 -87
- package/src/__tests__/createQuery.test.tsx +115 -201
- package/src/__tests__/suspense.test.tsx +35 -5
- package/src/__tests__/transition.test.tsx +1 -2
- package/src/__tests__/useIsFetching.test.tsx +2 -2
- package/src/__tests__/useIsMutating.test.tsx +3 -3
- package/src/__tests__/utils.tsx +1 -8
- package/src/createBaseQuery.ts +95 -61
- package/src/createMutation.ts +3 -3
- package/src/createQueries.ts +156 -52
- package/src/index.ts +1 -0
- package/src/isRestoring.ts +6 -0
- package/src/utils.ts +1 -1
|
@@ -9,13 +9,7 @@ import {
|
|
|
9
9
|
QueryClientProvider,
|
|
10
10
|
createQueries,
|
|
11
11
|
} from '..'
|
|
12
|
-
import {
|
|
13
|
-
createQueryClient,
|
|
14
|
-
expectType,
|
|
15
|
-
expectTypeNotAny,
|
|
16
|
-
queryKey,
|
|
17
|
-
sleep,
|
|
18
|
-
} from './utils'
|
|
12
|
+
import { createQueryClient, expectTypeNotAny, queryKey, sleep } from './utils'
|
|
19
13
|
import type { QueryFunctionContext, QueryKey } from '@tanstack/query-core'
|
|
20
14
|
import type {
|
|
21
15
|
CreateQueryResult,
|
|
@@ -31,7 +25,7 @@ describe('useQueries', () => {
|
|
|
31
25
|
it('should return the correct states', async () => {
|
|
32
26
|
const key1 = queryKey()
|
|
33
27
|
const key2 = queryKey()
|
|
34
|
-
const results: CreateQueryResult
|
|
28
|
+
const results: Array<Array<CreateQueryResult>> = []
|
|
35
29
|
|
|
36
30
|
function Page() {
|
|
37
31
|
const result = createQueries(() => ({
|
|
@@ -54,7 +48,7 @@ describe('useQueries', () => {
|
|
|
54
48
|
}))
|
|
55
49
|
|
|
56
50
|
createRenderEffect(() => {
|
|
57
|
-
results.push([...result])
|
|
51
|
+
results.push([{ ...result[0] }, { ...result[1] }])
|
|
58
52
|
})
|
|
59
53
|
|
|
60
54
|
return (
|
|
@@ -89,31 +83,31 @@ describe('useQueries', () => {
|
|
|
89
83
|
// @ts-expect-error (Page component is not rendered)
|
|
90
84
|
// eslint-disable-next-line
|
|
91
85
|
function Page() {
|
|
92
|
-
const result1 = createQueries<
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
)
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
86
|
+
const result1 = createQueries<
|
|
87
|
+
[[number], [string], [Array<string>, boolean]]
|
|
88
|
+
>(() => ({
|
|
89
|
+
queries: [
|
|
90
|
+
{
|
|
91
|
+
queryKey: key1,
|
|
92
|
+
queryFn: () => 1,
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
queryKey: key2,
|
|
96
|
+
queryFn: () => 'string',
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
queryKey: key3,
|
|
100
|
+
queryFn: () => ['string[]'],
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
}))
|
|
104
|
+
expectTypeOf<QueryObserverResult<number, unknown>>(result1[0])
|
|
105
|
+
expectTypeOf<QueryObserverResult<string, unknown>>(result1[1])
|
|
106
|
+
expectTypeOf<QueryObserverResult<Array<string>, boolean>>(result1[2])
|
|
107
|
+
expectTypeOf<number | undefined>(result1[0].data)
|
|
108
|
+
expectTypeOf<string | undefined>(result1[1].data)
|
|
109
|
+
expectTypeOf<Array<string> | undefined>(result1[2].data)
|
|
110
|
+
expectTypeOf<boolean | null>(result1[2].error)
|
|
117
111
|
|
|
118
112
|
// TData (3rd element) takes precedence over TQueryFnData (1st element)
|
|
119
113
|
const result2 = createQueries<
|
|
@@ -124,7 +118,7 @@ describe('useQueries', () => {
|
|
|
124
118
|
queryKey: key1,
|
|
125
119
|
queryFn: () => 'string',
|
|
126
120
|
select: (a) => {
|
|
127
|
-
|
|
121
|
+
expectTypeOf<string>(a)
|
|
128
122
|
expectTypeNotAny(a)
|
|
129
123
|
return a.toLowerCase()
|
|
130
124
|
},
|
|
@@ -133,17 +127,17 @@ describe('useQueries', () => {
|
|
|
133
127
|
queryKey: key2,
|
|
134
128
|
queryFn: () => 'string',
|
|
135
129
|
select: (a) => {
|
|
136
|
-
|
|
130
|
+
expectTypeOf<string>(a)
|
|
137
131
|
expectTypeNotAny(a)
|
|
138
132
|
return parseInt(a)
|
|
139
133
|
},
|
|
140
134
|
},
|
|
141
135
|
],
|
|
142
136
|
}))
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
137
|
+
expectTypeOf<QueryObserverResult<string, unknown>>(result2[0])
|
|
138
|
+
expectTypeOf<QueryObserverResult<number, unknown>>(result2[1])
|
|
139
|
+
expectTypeOf<string | undefined>(result2[0].data)
|
|
140
|
+
expectTypeOf<number | undefined>(result2[1].data)
|
|
147
141
|
|
|
148
142
|
// types should be enforced
|
|
149
143
|
createQueries<[[string, unknown, string], [string, boolean, number]]>(
|
|
@@ -153,7 +147,7 @@ describe('useQueries', () => {
|
|
|
153
147
|
queryKey: key1,
|
|
154
148
|
queryFn: () => 'string',
|
|
155
149
|
select: (a) => {
|
|
156
|
-
|
|
150
|
+
expectTypeOf<string>(a)
|
|
157
151
|
expectTypeNotAny(a)
|
|
158
152
|
return a.toLowerCase()
|
|
159
153
|
},
|
|
@@ -165,7 +159,7 @@ describe('useQueries', () => {
|
|
|
165
159
|
queryKey: key2,
|
|
166
160
|
queryFn: () => 'string',
|
|
167
161
|
select: (a) => {
|
|
168
|
-
|
|
162
|
+
expectTypeOf<string>(a)
|
|
169
163
|
expectTypeNotAny(a)
|
|
170
164
|
return parseInt(a)
|
|
171
165
|
},
|
|
@@ -201,7 +195,7 @@ describe('useQueries', () => {
|
|
|
201
195
|
[
|
|
202
196
|
{ queryFnData: number },
|
|
203
197
|
{ queryFnData: string },
|
|
204
|
-
{ queryFnData: string
|
|
198
|
+
{ queryFnData: Array<string>; error: boolean },
|
|
205
199
|
]
|
|
206
200
|
>(() => ({
|
|
207
201
|
queries: [
|
|
@@ -219,13 +213,13 @@ describe('useQueries', () => {
|
|
|
219
213
|
},
|
|
220
214
|
],
|
|
221
215
|
}))
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
216
|
+
expectTypeOf<QueryObserverResult<number, unknown>>(result1[0])
|
|
217
|
+
expectTypeOf<QueryObserverResult<string, unknown>>(result1[1])
|
|
218
|
+
expectTypeOf<QueryObserverResult<Array<string>, boolean>>(result1[2])
|
|
219
|
+
expectTypeOf<number | undefined>(result1[0].data)
|
|
220
|
+
expectTypeOf<string | undefined>(result1[1].data)
|
|
221
|
+
expectTypeOf<Array<string> | undefined>(result1[2].data)
|
|
222
|
+
expectTypeOf<boolean | null>(result1[2].error)
|
|
229
223
|
|
|
230
224
|
// TData (data prop) takes precedence over TQueryFnData (queryFnData prop)
|
|
231
225
|
const result2 = createQueries<
|
|
@@ -239,7 +233,7 @@ describe('useQueries', () => {
|
|
|
239
233
|
queryKey: key1,
|
|
240
234
|
queryFn: () => 'string',
|
|
241
235
|
select: (a) => {
|
|
242
|
-
|
|
236
|
+
expectTypeOf<string>(a)
|
|
243
237
|
expectTypeNotAny(a)
|
|
244
238
|
return a.toLowerCase()
|
|
245
239
|
},
|
|
@@ -248,17 +242,17 @@ describe('useQueries', () => {
|
|
|
248
242
|
queryKey: key2,
|
|
249
243
|
queryFn: () => 'string',
|
|
250
244
|
select: (a) => {
|
|
251
|
-
|
|
245
|
+
expectTypeOf<string>(a)
|
|
252
246
|
expectTypeNotAny(a)
|
|
253
247
|
return parseInt(a)
|
|
254
248
|
},
|
|
255
249
|
},
|
|
256
250
|
],
|
|
257
251
|
}))
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
252
|
+
expectTypeOf<QueryObserverResult<string, unknown>>(result2[0])
|
|
253
|
+
expectTypeOf<QueryObserverResult<number, unknown>>(result2[1])
|
|
254
|
+
expectTypeOf<string | undefined>(result2[0].data)
|
|
255
|
+
expectTypeOf<number | undefined>(result2[1].data)
|
|
262
256
|
|
|
263
257
|
// can pass only TData (data prop) although TQueryFnData will be left unknown
|
|
264
258
|
const result3 = createQueries<[{ data: string }, { data: number }]>(
|
|
@@ -268,7 +262,7 @@ describe('useQueries', () => {
|
|
|
268
262
|
queryKey: key1,
|
|
269
263
|
queryFn: () => 'string',
|
|
270
264
|
select: (a) => {
|
|
271
|
-
|
|
265
|
+
expectTypeOf<unknown>(a)
|
|
272
266
|
expectTypeNotAny(a)
|
|
273
267
|
return a as string
|
|
274
268
|
},
|
|
@@ -277,7 +271,7 @@ describe('useQueries', () => {
|
|
|
277
271
|
queryKey: key2,
|
|
278
272
|
queryFn: () => 'string',
|
|
279
273
|
select: (a) => {
|
|
280
|
-
|
|
274
|
+
expectTypeOf<unknown>(a)
|
|
281
275
|
expectTypeNotAny(a)
|
|
282
276
|
return a as number
|
|
283
277
|
},
|
|
@@ -285,10 +279,10 @@ describe('useQueries', () => {
|
|
|
285
279
|
],
|
|
286
280
|
}),
|
|
287
281
|
)
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
282
|
+
expectTypeOf<QueryObserverResult<string, unknown>>(result3[0])
|
|
283
|
+
expectTypeOf<QueryObserverResult<number, unknown>>(result3[1])
|
|
284
|
+
expectTypeOf<string | undefined>(result3[0].data)
|
|
285
|
+
expectTypeOf<number | undefined>(result3[1].data)
|
|
292
286
|
|
|
293
287
|
// types should be enforced
|
|
294
288
|
createQueries<
|
|
@@ -302,7 +296,7 @@ describe('useQueries', () => {
|
|
|
302
296
|
queryKey: key1,
|
|
303
297
|
queryFn: () => 'string',
|
|
304
298
|
select: (a) => {
|
|
305
|
-
|
|
299
|
+
expectTypeOf<string>(a)
|
|
306
300
|
expectTypeNotAny(a)
|
|
307
301
|
return a.toLowerCase()
|
|
308
302
|
},
|
|
@@ -314,7 +308,7 @@ describe('useQueries', () => {
|
|
|
314
308
|
queryKey: key2,
|
|
315
309
|
queryFn: () => 'string',
|
|
316
310
|
select: (a) => {
|
|
317
|
-
|
|
311
|
+
expectTypeOf<string>(a)
|
|
318
312
|
expectTypeNotAny(a)
|
|
319
313
|
return parseInt(a)
|
|
320
314
|
},
|
|
@@ -353,8 +347,8 @@ describe('useQueries', () => {
|
|
|
353
347
|
queryFn: () => i + 10,
|
|
354
348
|
})),
|
|
355
349
|
}))
|
|
356
|
-
|
|
357
|
-
|
|
350
|
+
expectTypeOf<Array<QueryObserverResult<number, unknown>>>(result1)
|
|
351
|
+
expectTypeOf<number | undefined>(result1[0]?.data)
|
|
358
352
|
|
|
359
353
|
// Array.map preserves TData
|
|
360
354
|
const result2 = createQueries(() => ({
|
|
@@ -364,7 +358,7 @@ describe('useQueries', () => {
|
|
|
364
358
|
select: (data: number) => data.toString(),
|
|
365
359
|
})),
|
|
366
360
|
}))
|
|
367
|
-
|
|
361
|
+
expectTypeOf<Array<QueryObserverResult<string, unknown>>>(result2)
|
|
368
362
|
|
|
369
363
|
const result3 = createQueries(() => ({
|
|
370
364
|
queries: [
|
|
@@ -383,13 +377,13 @@ describe('useQueries', () => {
|
|
|
383
377
|
},
|
|
384
378
|
],
|
|
385
379
|
}))
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
380
|
+
expectTypeOf<QueryObserverResult<number, unknown>>(result3[0])
|
|
381
|
+
expectTypeOf<QueryObserverResult<string, unknown>>(result3[1])
|
|
382
|
+
expectTypeOf<QueryObserverResult<number, unknown>>(result3[2])
|
|
383
|
+
expectTypeOf<number | undefined>(result3[0].data)
|
|
384
|
+
expectTypeOf<string | undefined>(result3[1].data)
|
|
391
385
|
// select takes precedence over queryFn
|
|
392
|
-
|
|
386
|
+
expectTypeOf<number | undefined>(result3[2].data)
|
|
393
387
|
|
|
394
388
|
// initialData/placeholderData are enforced
|
|
395
389
|
createQueries(() => ({
|
|
@@ -472,9 +466,9 @@ describe('useQueries', () => {
|
|
|
472
466
|
},
|
|
473
467
|
],
|
|
474
468
|
}))
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
469
|
+
expectTypeOf<QueryObserverResult<string, unknown>>(result4[0])
|
|
470
|
+
expectTypeOf<QueryObserverResult<string, unknown>>(result4[1])
|
|
471
|
+
expectTypeOf<QueryObserverResult<number, unknown>>(result4[2])
|
|
478
472
|
|
|
479
473
|
// handles when queryFn returns a Promise
|
|
480
474
|
const result5 = createQueries(() => ({
|
|
@@ -485,7 +479,7 @@ describe('useQueries', () => {
|
|
|
485
479
|
},
|
|
486
480
|
],
|
|
487
481
|
}))
|
|
488
|
-
|
|
482
|
+
expectTypeOf<QueryObserverResult<string, unknown>>(result5[0])
|
|
489
483
|
|
|
490
484
|
// Array as const does not throw error
|
|
491
485
|
const result6 = createQueries(
|
|
@@ -503,8 +497,8 @@ describe('useQueries', () => {
|
|
|
503
497
|
],
|
|
504
498
|
} as const),
|
|
505
499
|
)
|
|
506
|
-
|
|
507
|
-
|
|
500
|
+
expectTypeOf<QueryObserverResult<string, unknown>>(result6[0])
|
|
501
|
+
expectTypeOf<QueryObserverResult<number, unknown>>(result6[1])
|
|
508
502
|
|
|
509
503
|
// field names should be enforced - array literal
|
|
510
504
|
createQueries(() => ({
|
|
@@ -582,18 +576,20 @@ describe('useQueries', () => {
|
|
|
582
576
|
TError,
|
|
583
577
|
TData,
|
|
584
578
|
TQueryKey extends QueryKey,
|
|
585
|
-
>(
|
|
579
|
+
>(
|
|
580
|
+
queries: Array<SolidQueryOptions<TQueryFnData, TError, TData, TQueryKey>>,
|
|
581
|
+
) {
|
|
586
582
|
return createQueries(() => ({
|
|
587
583
|
queries: queries.map(
|
|
588
584
|
// no need to type the mapped query
|
|
589
585
|
(query) => {
|
|
590
586
|
const { queryFn: fn, queryKey: key } = query
|
|
591
|
-
|
|
587
|
+
expectTypeOf<QueryFunction<TQueryFnData, TQueryKey> | undefined>(fn)
|
|
592
588
|
return {
|
|
593
589
|
queryKey: key,
|
|
594
590
|
queryFn: fn
|
|
595
591
|
? (ctx: QueryFunctionContext<TQueryKey>) => {
|
|
596
|
-
|
|
592
|
+
expectTypeOf<TQueryKey>(ctx.queryKey)
|
|
597
593
|
return fn.call({}, ctx)
|
|
598
594
|
}
|
|
599
595
|
: undefined,
|
|
@@ -618,8 +614,8 @@ describe('useQueries', () => {
|
|
|
618
614
|
},
|
|
619
615
|
],
|
|
620
616
|
}))
|
|
621
|
-
|
|
622
|
-
|
|
617
|
+
expectTypeOf<QueryObserverResult<number, unknown>>(result[0])
|
|
618
|
+
expectTypeOf<QueryObserverResult<string, unknown>>(result[1])
|
|
623
619
|
|
|
624
620
|
const withSelector = createQueries(() => ({
|
|
625
621
|
queries: [
|
|
@@ -635,10 +631,10 @@ describe('useQueries', () => {
|
|
|
635
631
|
},
|
|
636
632
|
],
|
|
637
633
|
}))
|
|
638
|
-
|
|
634
|
+
expectTypeOf<QueryObserverResult<[number, string], unknown>>(
|
|
639
635
|
withSelector[0],
|
|
640
636
|
)
|
|
641
|
-
|
|
637
|
+
expectTypeOf<QueryObserverResult<[string, number], unknown>>(
|
|
642
638
|
withSelector[1],
|
|
643
639
|
)
|
|
644
640
|
|
|
@@ -650,7 +646,7 @@ describe('useQueries', () => {
|
|
|
650
646
|
})),
|
|
651
647
|
)
|
|
652
648
|
|
|
653
|
-
|
|
649
|
+
expectTypeOf<Array<QueryObserverResult<number | undefined, unknown>>>(
|
|
654
650
|
withWrappedQueries,
|
|
655
651
|
)
|
|
656
652
|
}
|