@tanstack/react-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.
Files changed (130) hide show
  1. package/build/codemods/coverage/base.css +224 -0
  2. package/build/codemods/coverage/block-navigation.js +87 -0
  3. package/build/codemods/coverage/clover.xml +6 -0
  4. package/build/codemods/coverage/coverage-final.json +1 -0
  5. package/build/codemods/coverage/favicon.png +0 -0
  6. package/build/codemods/coverage/index.html +101 -0
  7. package/build/codemods/coverage/prettify.css +1 -0
  8. package/build/codemods/coverage/prettify.js +2 -0
  9. package/build/codemods/coverage/sort-arrow-sprite.png +0 -0
  10. package/build/codemods/coverage/sorter.js +196 -0
  11. package/build/legacy/HydrationBoundary.cjs +37 -2
  12. package/build/legacy/HydrationBoundary.cjs.map +1 -1
  13. package/build/legacy/HydrationBoundary.d.cts +3 -1
  14. package/build/legacy/HydrationBoundary.d.ts +3 -1
  15. package/build/legacy/HydrationBoundary.js +37 -2
  16. package/build/legacy/HydrationBoundary.js.map +1 -1
  17. package/build/legacy/index.cjs +3 -0
  18. package/build/legacy/index.cjs.map +1 -1
  19. package/build/legacy/index.d.cts +1 -0
  20. package/build/legacy/index.d.ts +1 -0
  21. package/build/legacy/index.js +2 -0
  22. package/build/legacy/index.js.map +1 -1
  23. package/build/legacy/infiniteQueryOptions.cjs.map +1 -1
  24. package/build/legacy/infiniteQueryOptions.d.cts +1 -1
  25. package/build/legacy/infiniteQueryOptions.d.ts +1 -1
  26. package/build/legacy/infiniteQueryOptions.js.map +1 -1
  27. package/build/legacy/queryOptions.cjs.map +1 -1
  28. package/build/legacy/queryOptions.d.cts +7 -3
  29. package/build/legacy/queryOptions.d.ts +7 -3
  30. package/build/legacy/queryOptions.js.map +1 -1
  31. package/build/legacy/suspense.cjs +3 -0
  32. package/build/legacy/suspense.cjs.map +1 -1
  33. package/build/legacy/suspense.d.cts +3 -2
  34. package/build/legacy/suspense.d.ts +3 -2
  35. package/build/legacy/suspense.js +2 -0
  36. package/build/legacy/suspense.js.map +1 -1
  37. package/build/legacy/types.cjs.map +1 -1
  38. package/build/legacy/types.d.cts +4 -4
  39. package/build/legacy/types.d.ts +4 -4
  40. package/build/legacy/useQueries.cjs.map +1 -1
  41. package/build/legacy/useQueries.d.cts +4 -4
  42. package/build/legacy/useQueries.d.ts +4 -4
  43. package/build/legacy/useQueries.js.map +1 -1
  44. package/build/legacy/useSuspenseQueries.cjs +47 -0
  45. package/build/legacy/useSuspenseQueries.cjs.map +1 -0
  46. package/build/legacy/useSuspenseQueries.d.cts +66 -0
  47. package/build/legacy/useSuspenseQueries.d.ts +66 -0
  48. package/build/legacy/useSuspenseQueries.js +23 -0
  49. package/build/legacy/useSuspenseQueries.js.map +1 -0
  50. package/build/legacy/useSuspenseQuery.cjs +2 -1
  51. package/build/legacy/useSuspenseQuery.cjs.map +1 -1
  52. package/build/legacy/useSuspenseQuery.js +2 -1
  53. package/build/legacy/useSuspenseQuery.js.map +1 -1
  54. package/build/legacy/utils.cjs.map +1 -1
  55. package/build/legacy/utils.d.cts +1 -1
  56. package/build/legacy/utils.d.ts +1 -1
  57. package/build/legacy/utils.js.map +1 -1
  58. package/build/modern/HydrationBoundary.cjs +37 -2
  59. package/build/modern/HydrationBoundary.cjs.map +1 -1
  60. package/build/modern/HydrationBoundary.d.cts +3 -1
  61. package/build/modern/HydrationBoundary.d.ts +3 -1
  62. package/build/modern/HydrationBoundary.js +37 -2
  63. package/build/modern/HydrationBoundary.js.map +1 -1
  64. package/build/modern/index.cjs +3 -0
  65. package/build/modern/index.cjs.map +1 -1
  66. package/build/modern/index.d.cts +1 -0
  67. package/build/modern/index.d.ts +1 -0
  68. package/build/modern/index.js +2 -0
  69. package/build/modern/index.js.map +1 -1
  70. package/build/modern/infiniteQueryOptions.cjs.map +1 -1
  71. package/build/modern/infiniteQueryOptions.d.cts +1 -1
  72. package/build/modern/infiniteQueryOptions.d.ts +1 -1
  73. package/build/modern/infiniteQueryOptions.js.map +1 -1
  74. package/build/modern/queryOptions.cjs.map +1 -1
  75. package/build/modern/queryOptions.d.cts +7 -3
  76. package/build/modern/queryOptions.d.ts +7 -3
  77. package/build/modern/queryOptions.js.map +1 -1
  78. package/build/modern/suspense.cjs +3 -0
  79. package/build/modern/suspense.cjs.map +1 -1
  80. package/build/modern/suspense.d.cts +3 -2
  81. package/build/modern/suspense.d.ts +3 -2
  82. package/build/modern/suspense.js +2 -0
  83. package/build/modern/suspense.js.map +1 -1
  84. package/build/modern/types.cjs.map +1 -1
  85. package/build/modern/types.d.cts +4 -4
  86. package/build/modern/types.d.ts +4 -4
  87. package/build/modern/useQueries.cjs.map +1 -1
  88. package/build/modern/useQueries.d.cts +4 -4
  89. package/build/modern/useQueries.d.ts +4 -4
  90. package/build/modern/useQueries.js.map +1 -1
  91. package/build/modern/useSuspenseQueries.cjs +47 -0
  92. package/build/modern/useSuspenseQueries.cjs.map +1 -0
  93. package/build/modern/useSuspenseQueries.d.cts +66 -0
  94. package/build/modern/useSuspenseQueries.d.ts +66 -0
  95. package/build/modern/useSuspenseQueries.js +23 -0
  96. package/build/modern/useSuspenseQueries.js.map +1 -0
  97. package/build/modern/useSuspenseQuery.cjs +2 -1
  98. package/build/modern/useSuspenseQuery.cjs.map +1 -1
  99. package/build/modern/useSuspenseQuery.js +2 -1
  100. package/build/modern/useSuspenseQuery.js.map +1 -1
  101. package/build/modern/utils.cjs.map +1 -1
  102. package/build/modern/utils.d.cts +1 -1
  103. package/build/modern/utils.d.ts +1 -1
  104. package/build/modern/utils.js.map +1 -1
  105. package/package.json +7 -3
  106. package/src/HydrationBoundary.tsx +78 -8
  107. package/src/__tests__/HydrationBoundary.test.tsx +111 -7
  108. package/src/__tests__/QueryResetErrorBoundary.test.tsx +10 -6
  109. package/src/__tests__/fine-grained-persister.test.tsx +163 -0
  110. package/src/__tests__/queryOptions.types.test.tsx +31 -0
  111. package/src/__tests__/ssr.test.tsx +2 -2
  112. package/src/__tests__/suspense.test.tsx +94 -386
  113. package/src/__tests__/useInfiniteQuery.test.tsx +44 -44
  114. package/src/__tests__/useInfiniteQuery.type.test.tsx +24 -13
  115. package/src/__tests__/useIsFetching.test.tsx +2 -2
  116. package/src/__tests__/useMutation.test.tsx +4 -4
  117. package/src/__tests__/useMutationState.test.tsx +4 -4
  118. package/src/__tests__/useQueries.test.tsx +65 -64
  119. package/src/__tests__/useQuery.test.tsx +142 -141
  120. package/src/__tests__/useQuery.types.test.tsx +34 -0
  121. package/src/__tests__/utils.tsx +0 -7
  122. package/src/index.ts +5 -0
  123. package/src/infiniteQueryOptions.ts +3 -1
  124. package/src/queryOptions.ts +11 -3
  125. package/src/suspense.ts +12 -0
  126. package/src/types.ts +18 -12
  127. package/src/useQueries.ts +34 -28
  128. package/src/useSuspenseQueries.ts +164 -0
  129. package/src/useSuspenseQuery.ts +2 -1
  130. package/src/utils.ts +1 -1
@@ -6,7 +6,6 @@ import { vi } from 'vitest'
6
6
  import { QueryCache, useQueries } from '..'
7
7
  import {
8
8
  createQueryClient,
9
- expectType,
10
9
  expectTypeNotAny,
11
10
  queryKey,
12
11
  renderWithClient,
@@ -28,7 +27,7 @@ describe('useQueries', () => {
28
27
  it('should return the correct states', async () => {
29
28
  const key1 = queryKey()
30
29
  const key2 = queryKey()
31
- const results: UseQueryResult[][] = []
30
+ const results: Array<Array<UseQueryResult>> = []
32
31
 
33
32
  function Page() {
34
33
  const result = useQueries({
@@ -73,7 +72,7 @@ describe('useQueries', () => {
73
72
 
74
73
  it('should track results', async () => {
75
74
  const key1 = queryKey()
76
- const results: UseQueryResult[][] = []
75
+ const results: Array<Array<UseQueryResult>> = []
77
76
  let count = 0
78
77
 
79
78
  function Page() {
@@ -125,7 +124,9 @@ describe('useQueries', () => {
125
124
  // @ts-expect-error (Page component is not rendered)
126
125
  // eslint-disable-next-line
127
126
  function Page() {
128
- const result1 = useQueries<[[number], [string], [string[], boolean]]>({
127
+ const result1 = useQueries<
128
+ [[number], [string], [Array<string>, boolean]]
129
+ >({
129
130
  queries: [
130
131
  {
131
132
  queryKey: key1,
@@ -141,13 +142,13 @@ describe('useQueries', () => {
141
142
  },
142
143
  ],
143
144
  })
144
- expectType<QueryObserverResult<number, unknown>>(result1[0])
145
- expectType<QueryObserverResult<string, unknown>>(result1[1])
146
- expectType<QueryObserverResult<string[], boolean>>(result1[2])
147
- expectType<number | undefined>(result1[0].data)
148
- expectType<string | undefined>(result1[1].data)
149
- expectType<string[] | undefined>(result1[2].data)
150
- expectType<boolean | null>(result1[2].error)
145
+ expectTypeOf<QueryObserverResult<number, unknown>>(result1[0])
146
+ expectTypeOf<QueryObserverResult<string, unknown>>(result1[1])
147
+ expectTypeOf<QueryObserverResult<Array<string>, boolean>>(result1[2])
148
+ expectTypeOf<number | undefined>(result1[0].data)
149
+ expectTypeOf<string | undefined>(result1[1].data)
150
+ expectTypeOf<Array<string> | undefined>(result1[2].data)
151
+ expectTypeOf<boolean | null>(result1[2].error)
151
152
 
152
153
  // TData (3rd element) takes precedence over TQueryFnData (1st element)
153
154
  const result2 = useQueries<
@@ -158,7 +159,7 @@ describe('useQueries', () => {
158
159
  queryKey: key1,
159
160
  queryFn: () => 'string',
160
161
  select: (a) => {
161
- expectType<string>(a)
162
+ expectTypeOf<string>(a)
162
163
  expectTypeNotAny(a)
163
164
  return a.toLowerCase()
164
165
  },
@@ -167,17 +168,17 @@ describe('useQueries', () => {
167
168
  queryKey: key2,
168
169
  queryFn: () => 'string',
169
170
  select: (a) => {
170
- expectType<string>(a)
171
+ expectTypeOf<string>(a)
171
172
  expectTypeNotAny(a)
172
173
  return parseInt(a)
173
174
  },
174
175
  },
175
176
  ],
176
177
  })
177
- expectType<QueryObserverResult<string, unknown>>(result2[0])
178
- expectType<QueryObserverResult<number, unknown>>(result2[1])
179
- expectType<string | undefined>(result2[0].data)
180
- expectType<number | undefined>(result2[1].data)
178
+ expectTypeOf<QueryObserverResult<string, unknown>>(result2[0])
179
+ expectTypeOf<QueryObserverResult<number, unknown>>(result2[1])
180
+ expectTypeOf<string | undefined>(result2[0].data)
181
+ expectTypeOf<number | undefined>(result2[1].data)
181
182
 
182
183
  // types should be enforced
183
184
  useQueries<[[string, unknown, string], [string, boolean, number]]>({
@@ -186,7 +187,7 @@ describe('useQueries', () => {
186
187
  queryKey: key1,
187
188
  queryFn: () => 'string',
188
189
  select: (a) => {
189
- expectType<string>(a)
190
+ expectTypeOf<string>(a)
190
191
  expectTypeNotAny(a)
191
192
  return a.toLowerCase()
192
193
  },
@@ -198,7 +199,7 @@ describe('useQueries', () => {
198
199
  queryKey: key2,
199
200
  queryFn: () => 'string',
200
201
  select: (a) => {
201
- expectType<string>(a)
202
+ expectTypeOf<string>(a)
202
203
  expectTypeNotAny(a)
203
204
  return parseInt(a)
204
205
  },
@@ -235,7 +236,7 @@ describe('useQueries', () => {
235
236
  [
236
237
  { queryFnData: number },
237
238
  { queryFnData: string },
238
- { queryFnData: string[]; error: boolean },
239
+ { queryFnData: Array<string>; error: boolean },
239
240
  ]
240
241
  >({
241
242
  queries: [
@@ -253,13 +254,13 @@ describe('useQueries', () => {
253
254
  },
254
255
  ],
255
256
  })
256
- expectType<QueryObserverResult<number, unknown>>(result1[0])
257
- expectType<QueryObserverResult<string, unknown>>(result1[1])
258
- expectType<QueryObserverResult<string[], boolean>>(result1[2])
259
- expectType<number | undefined>(result1[0].data)
260
- expectType<string | undefined>(result1[1].data)
261
- expectType<string[] | undefined>(result1[2].data)
262
- expectType<boolean | null>(result1[2].error)
257
+ expectTypeOf<QueryObserverResult<number, unknown>>(result1[0])
258
+ expectTypeOf<QueryObserverResult<string, unknown>>(result1[1])
259
+ expectTypeOf<QueryObserverResult<Array<string>, boolean>>(result1[2])
260
+ expectTypeOf<number | undefined>(result1[0].data)
261
+ expectTypeOf<string | undefined>(result1[1].data)
262
+ expectTypeOf<Array<string> | undefined>(result1[2].data)
263
+ expectTypeOf<boolean | null>(result1[2].error)
263
264
 
264
265
  // TData (data prop) takes precedence over TQueryFnData (queryFnData prop)
265
266
  const result2 = useQueries<
@@ -273,7 +274,7 @@ describe('useQueries', () => {
273
274
  queryKey: key1,
274
275
  queryFn: () => 'string',
275
276
  select: (a) => {
276
- expectType<string>(a)
277
+ expectTypeOf<string>(a)
277
278
  expectTypeNotAny(a)
278
279
  return a.toLowerCase()
279
280
  },
@@ -282,17 +283,17 @@ describe('useQueries', () => {
282
283
  queryKey: key2,
283
284
  queryFn: () => 'string',
284
285
  select: (a) => {
285
- expectType<string>(a)
286
+ expectTypeOf<string>(a)
286
287
  expectTypeNotAny(a)
287
288
  return parseInt(a)
288
289
  },
289
290
  },
290
291
  ],
291
292
  })
292
- expectType<QueryObserverResult<string, unknown>>(result2[0])
293
- expectType<QueryObserverResult<number, unknown>>(result2[1])
294
- expectType<string | undefined>(result2[0].data)
295
- expectType<number | undefined>(result2[1].data)
293
+ expectTypeOf<QueryObserverResult<string, unknown>>(result2[0])
294
+ expectTypeOf<QueryObserverResult<number, unknown>>(result2[1])
295
+ expectTypeOf<string | undefined>(result2[0].data)
296
+ expectTypeOf<number | undefined>(result2[1].data)
296
297
 
297
298
  // can pass only TData (data prop) although TQueryFnData will be left unknown
298
299
  const result3 = useQueries<[{ data: string }, { data: number }]>({
@@ -301,7 +302,7 @@ describe('useQueries', () => {
301
302
  queryKey: key1,
302
303
  queryFn: () => 'string',
303
304
  select: (a) => {
304
- expectType<unknown>(a)
305
+ expectTypeOf<unknown>(a)
305
306
  expectTypeNotAny(a)
306
307
  return a as string
307
308
  },
@@ -310,17 +311,17 @@ describe('useQueries', () => {
310
311
  queryKey: key2,
311
312
  queryFn: () => 'string',
312
313
  select: (a) => {
313
- expectType<unknown>(a)
314
+ expectTypeOf<unknown>(a)
314
315
  expectTypeNotAny(a)
315
316
  return a as number
316
317
  },
317
318
  },
318
319
  ],
319
320
  })
320
- expectType<QueryObserverResult<string, unknown>>(result3[0])
321
- expectType<QueryObserverResult<number, unknown>>(result3[1])
322
- expectType<string | undefined>(result3[0].data)
323
- expectType<number | undefined>(result3[1].data)
321
+ expectTypeOf<QueryObserverResult<string, unknown>>(result3[0])
322
+ expectTypeOf<QueryObserverResult<number, unknown>>(result3[1])
323
+ expectTypeOf<string | undefined>(result3[0].data)
324
+ expectTypeOf<number | undefined>(result3[1].data)
324
325
 
325
326
  // types should be enforced
326
327
  useQueries<
@@ -334,7 +335,7 @@ describe('useQueries', () => {
334
335
  queryKey: key1,
335
336
  queryFn: () => 'string',
336
337
  select: (a) => {
337
- expectType<string>(a)
338
+ expectTypeOf<string>(a)
338
339
  expectTypeNotAny(a)
339
340
  return a.toLowerCase()
340
341
  },
@@ -346,7 +347,7 @@ describe('useQueries', () => {
346
347
  queryKey: key2,
347
348
  queryFn: () => 'string',
348
349
  select: (a) => {
349
- expectType<string>(a)
350
+ expectTypeOf<string>(a)
350
351
  expectTypeNotAny(a)
351
352
  return parseInt(a)
352
353
  },
@@ -387,8 +388,8 @@ describe('useQueries', () => {
387
388
  queryFn: () => i + 10,
388
389
  })),
389
390
  })
390
- expectType<QueryObserverResult<number, unknown>[]>(result1)
391
- expectType<number | undefined>(result1[0]?.data)
391
+ expectTypeOf<Array<QueryObserverResult<number, unknown>>>(result1)
392
+ expectTypeOf<number | undefined>(result1[0]?.data)
392
393
 
393
394
  // Array.map preserves TData
394
395
  const result2 = useQueries({
@@ -398,7 +399,7 @@ describe('useQueries', () => {
398
399
  select: (data: number) => data.toString(),
399
400
  })),
400
401
  })
401
- expectType<QueryObserverResult<string, unknown>[]>(result2)
402
+ expectTypeOf<Array<QueryObserverResult<string, unknown>>>(result2)
402
403
 
403
404
  const result3 = useQueries({
404
405
  queries: [
@@ -417,13 +418,13 @@ describe('useQueries', () => {
417
418
  },
418
419
  ],
419
420
  })
420
- expectType<QueryObserverResult<number, unknown>>(result3[0])
421
- expectType<QueryObserverResult<string, unknown>>(result3[1])
422
- expectType<QueryObserverResult<number, unknown>>(result3[2])
423
- expectType<number | undefined>(result3[0].data)
424
- expectType<string | undefined>(result3[1].data)
421
+ expectTypeOf<QueryObserverResult<number, unknown>>(result3[0])
422
+ expectTypeOf<QueryObserverResult<string, unknown>>(result3[1])
423
+ expectTypeOf<QueryObserverResult<number, unknown>>(result3[2])
424
+ expectTypeOf<number | undefined>(result3[0].data)
425
+ expectTypeOf<string | undefined>(result3[1].data)
425
426
  // select takes precedence over queryFn
426
- expectType<number | undefined>(result3[2].data)
427
+ expectTypeOf<number | undefined>(result3[2].data)
427
428
 
428
429
  // initialData/placeholderData are enforced
429
430
  useQueries({
@@ -505,9 +506,9 @@ describe('useQueries', () => {
505
506
  },
506
507
  ],
507
508
  })
508
- expectType<QueryObserverResult<string, unknown>>(result4[0])
509
- expectType<QueryObserverResult<string, unknown>>(result4[1])
510
- expectType<QueryObserverResult<number, unknown>>(result4[2])
509
+ expectTypeOf<QueryObserverResult<string, unknown>>(result4[0])
510
+ expectTypeOf<QueryObserverResult<string, unknown>>(result4[1])
511
+ expectTypeOf<QueryObserverResult<number, unknown>>(result4[2])
511
512
 
512
513
  // handles when queryFn returns a Promise
513
514
  const result5 = useQueries({
@@ -518,7 +519,7 @@ describe('useQueries', () => {
518
519
  },
519
520
  ],
520
521
  })
521
- expectType<QueryObserverResult<string, unknown>>(result5[0])
522
+ expectTypeOf<QueryObserverResult<string, unknown>>(result5[0])
522
523
 
523
524
  // Array as const does not throw error
524
525
  const result6 = useQueries({
@@ -533,8 +534,8 @@ describe('useQueries', () => {
533
534
  },
534
535
  ],
535
536
  } as const)
536
- expectType<QueryObserverResult<string, unknown>>(result6[0])
537
- expectType<QueryObserverResult<number, unknown>>(result6[1])
537
+ expectTypeOf<QueryObserverResult<string, unknown>>(result6[0])
538
+ expectTypeOf<QueryObserverResult<number, unknown>>(result6[1])
538
539
 
539
540
  // field names should be enforced - array literal
540
541
  useQueries({
@@ -616,18 +617,18 @@ describe('useQueries', () => {
616
617
  TError,
617
618
  TData,
618
619
  TQueryKey extends QueryKey,
619
- >(queries: UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>[]) {
620
+ >(queries: Array<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>>) {
620
621
  return useQueries({
621
622
  queries: queries.map(
622
623
  // no need to type the mapped query
623
624
  (query) => {
624
625
  const { queryFn: fn, queryKey: key } = query
625
- expectType<QueryFunction<TQueryFnData, TQueryKey> | undefined>(fn)
626
+ expectTypeOf<QueryFunction<TQueryFnData, TQueryKey> | undefined>(fn)
626
627
  return {
627
628
  queryKey: key,
628
629
  queryFn: fn
629
630
  ? (ctx: QueryFunctionContext<TQueryKey>) => {
630
- expectType<TQueryKey>(ctx.queryKey)
631
+ expectTypeOf<TQueryKey>(ctx.queryKey)
631
632
  return fn.call({}, ctx)
632
633
  }
633
634
  : undefined,
@@ -652,8 +653,8 @@ describe('useQueries', () => {
652
653
  },
653
654
  ],
654
655
  })
655
- expectType<QueryObserverResult<number, unknown>>(result[0])
656
- expectType<QueryObserverResult<string, unknown>>(result[1])
656
+ expectTypeOf<QueryObserverResult<number, unknown>>(result[0])
657
+ expectTypeOf<QueryObserverResult<string, unknown>>(result[1])
657
658
 
658
659
  const withSelector = useQueries({
659
660
  queries: [
@@ -669,10 +670,10 @@ describe('useQueries', () => {
669
670
  },
670
671
  ],
671
672
  })
672
- expectType<QueryObserverResult<[number, string], unknown>>(
673
+ expectTypeOf<QueryObserverResult<[number, string], unknown>>(
673
674
  withSelector[0],
674
675
  )
675
- expectType<QueryObserverResult<[string, number], unknown>>(
676
+ expectTypeOf<QueryObserverResult<[string, number], unknown>>(
676
677
  withSelector[1],
677
678
  )
678
679
 
@@ -684,7 +685,7 @@ describe('useQueries', () => {
684
685
  })),
685
686
  )
686
687
 
687
- expectType<QueryObserverResult<number | undefined, unknown>[]>(
688
+ expectTypeOf<Array<QueryObserverResult<number | undefined, unknown>>>(
688
689
  withWrappedQueries,
689
690
  )
690
691
  }