@tanstack/query-core 5.17.10 → 5.17.15

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 (80) hide show
  1. package/build/legacy/hydration.d.cts +1 -1
  2. package/build/legacy/hydration.d.ts +1 -1
  3. package/build/legacy/index.d.cts +1 -1
  4. package/build/legacy/index.d.ts +1 -1
  5. package/build/legacy/infiniteQueryBehavior.d.cts +1 -1
  6. package/build/legacy/infiniteQueryBehavior.d.ts +1 -1
  7. package/build/legacy/infiniteQueryObserver.d.cts +1 -1
  8. package/build/legacy/infiniteQueryObserver.d.ts +1 -1
  9. package/build/legacy/mutation.d.cts +1 -1
  10. package/build/legacy/mutation.d.ts +1 -1
  11. package/build/legacy/mutationCache.d.cts +1 -1
  12. package/build/legacy/mutationCache.d.ts +1 -1
  13. package/build/legacy/mutationObserver.d.cts +1 -1
  14. package/build/legacy/mutationObserver.d.ts +1 -1
  15. package/build/legacy/queriesObserver.d.cts +1 -1
  16. package/build/legacy/queriesObserver.d.ts +1 -1
  17. package/build/legacy/query.d.cts +1 -1
  18. package/build/legacy/query.d.ts +1 -1
  19. package/build/legacy/queryCache.d.cts +1 -1
  20. package/build/legacy/queryCache.d.ts +1 -1
  21. package/build/legacy/{queryClient-bm-z2rsD.d.ts → queryClient-4ddEge6Q.d.ts} +31 -3
  22. package/build/legacy/{queryClient-Em4fxERQ.d.cts → queryClient-4iFPaIys.d.cts} +31 -3
  23. package/build/legacy/queryClient.d.cts +1 -1
  24. package/build/legacy/queryClient.d.ts +1 -1
  25. package/build/legacy/queryObserver.d.cts +1 -1
  26. package/build/legacy/queryObserver.d.ts +1 -1
  27. package/build/legacy/retryer.d.cts +1 -1
  28. package/build/legacy/retryer.d.ts +1 -1
  29. package/build/legacy/types.cjs.map +1 -1
  30. package/build/legacy/types.d.cts +1 -1
  31. package/build/legacy/types.d.ts +1 -1
  32. package/build/legacy/utils.cjs +9 -3
  33. package/build/legacy/utils.cjs.map +1 -1
  34. package/build/legacy/utils.d.cts +1 -1
  35. package/build/legacy/utils.d.ts +1 -1
  36. package/build/legacy/utils.js +9 -3
  37. package/build/legacy/utils.js.map +1 -1
  38. package/build/modern/hydration.d.cts +1 -1
  39. package/build/modern/hydration.d.ts +1 -1
  40. package/build/modern/index.d.cts +1 -1
  41. package/build/modern/index.d.ts +1 -1
  42. package/build/modern/infiniteQueryBehavior.d.cts +1 -1
  43. package/build/modern/infiniteQueryBehavior.d.ts +1 -1
  44. package/build/modern/infiniteQueryObserver.d.cts +1 -1
  45. package/build/modern/infiniteQueryObserver.d.ts +1 -1
  46. package/build/modern/mutation.d.cts +1 -1
  47. package/build/modern/mutation.d.ts +1 -1
  48. package/build/modern/mutationCache.d.cts +1 -1
  49. package/build/modern/mutationCache.d.ts +1 -1
  50. package/build/modern/mutationObserver.d.cts +1 -1
  51. package/build/modern/mutationObserver.d.ts +1 -1
  52. package/build/modern/queriesObserver.d.cts +1 -1
  53. package/build/modern/queriesObserver.d.ts +1 -1
  54. package/build/modern/query.d.cts +1 -1
  55. package/build/modern/query.d.ts +1 -1
  56. package/build/modern/queryCache.d.cts +1 -1
  57. package/build/modern/queryCache.d.ts +1 -1
  58. package/build/modern/{queryClient-bm-z2rsD.d.ts → queryClient-4ddEge6Q.d.ts} +31 -3
  59. package/build/modern/{queryClient-Em4fxERQ.d.cts → queryClient-4iFPaIys.d.cts} +31 -3
  60. package/build/modern/queryClient.d.cts +1 -1
  61. package/build/modern/queryClient.d.ts +1 -1
  62. package/build/modern/queryObserver.d.cts +1 -1
  63. package/build/modern/queryObserver.d.ts +1 -1
  64. package/build/modern/retryer.d.cts +1 -1
  65. package/build/modern/retryer.d.ts +1 -1
  66. package/build/modern/types.cjs.map +1 -1
  67. package/build/modern/types.d.cts +1 -1
  68. package/build/modern/types.d.ts +1 -1
  69. package/build/modern/utils.cjs +9 -3
  70. package/build/modern/utils.cjs.map +1 -1
  71. package/build/modern/utils.d.cts +1 -1
  72. package/build/modern/utils.d.ts +1 -1
  73. package/build/modern/utils.js +9 -3
  74. package/build/modern/utils.js.map +1 -1
  75. package/package.json +1 -1
  76. package/src/tests/infiniteQueryObserver.test.tsx +51 -2
  77. package/src/tests/queryObserver.test.tsx +38 -0
  78. package/src/tests/utils.test.tsx +18 -0
  79. package/src/types.ts +39 -1
  80. package/src/utils.ts +14 -3
@@ -894,4 +894,42 @@ describe('queryObserver', () => {
894
894
 
895
895
  unsubscribe()
896
896
  })
897
+
898
+ test('should be inferred as a correct result type', async () => {
899
+ const key = queryKey()
900
+ const data = { value: 'data' }
901
+ const observer = new QueryObserver(queryClient, {
902
+ queryKey: key,
903
+ queryFn: () => Promise.resolve(data),
904
+ })
905
+
906
+ const result = observer.getCurrentResult()
907
+
908
+ result.isPending &&
909
+ expectTypeOf<undefined>(result.data) &&
910
+ expectTypeOf<null>(result.error) &&
911
+ expectTypeOf<boolean>(result.isLoading) &&
912
+ expectTypeOf<'pending'>(result.status)
913
+
914
+ result.isLoading &&
915
+ expectTypeOf<undefined>(result.data) &&
916
+ expectTypeOf<null>(result.error) &&
917
+ expectTypeOf<true>(result.isPending) &&
918
+ expectTypeOf<'pending'>(result.status)
919
+
920
+ result.isLoadingError &&
921
+ expectTypeOf<undefined>(result.data) &&
922
+ expectTypeOf<Error>(result.error) &&
923
+ expectTypeOf<'error'>(result.status)
924
+
925
+ result.isRefetchError &&
926
+ expectTypeOf<{ value: string }>(result.data) &&
927
+ expectTypeOf<Error>(result.error) &&
928
+ expectTypeOf<'error'>(result.status)
929
+
930
+ result.isSuccess &&
931
+ expectTypeOf<{ value: string }>(result.data) &&
932
+ expectTypeOf<null>(result.error) &&
933
+ expectTypeOf<'success'>(result.status)
934
+ })
897
935
  })
@@ -332,6 +332,24 @@ describe('core/utils', () => {
332
332
  const result = replaceEqualDeep(obj1, obj2)
333
333
  expect(result).toStrictEqual(obj2)
334
334
  })
335
+
336
+ it('should be able to share values that contain undefined', () => {
337
+ const current = [
338
+ {
339
+ data: undefined,
340
+ foo: true,
341
+ },
342
+ ]
343
+
344
+ const next = replaceEqualDeep(current, [
345
+ {
346
+ data: undefined,
347
+ foo: true,
348
+ },
349
+ ])
350
+
351
+ expect(current).toBe(next)
352
+ })
335
353
  })
336
354
 
337
355
  describe('matchMutation', () => {
package/src/types.ts CHANGED
@@ -488,6 +488,20 @@ export interface QueryObserverBaseResult<
488
488
  fetchStatus: FetchStatus
489
489
  }
490
490
 
491
+ export interface QueryObserverPendingResult<
492
+ TData = unknown,
493
+ TError = DefaultError,
494
+ > extends QueryObserverBaseResult<TData, TError> {
495
+ data: undefined
496
+ error: null
497
+ isError: false
498
+ isPending: true
499
+ isLoadingError: false
500
+ isRefetchError: false
501
+ isSuccess: false
502
+ status: 'pending'
503
+ }
504
+
491
505
  export interface QueryObserverLoadingResult<
492
506
  TData = unknown,
493
507
  TError = DefaultError,
@@ -496,6 +510,7 @@ export interface QueryObserverLoadingResult<
496
510
  error: null
497
511
  isError: false
498
512
  isPending: true
513
+ isLoading: true
499
514
  isLoadingError: false
500
515
  isRefetchError: false
501
516
  isSuccess: false
@@ -510,6 +525,7 @@ export interface QueryObserverLoadingErrorResult<
510
525
  error: TError
511
526
  isError: true
512
527
  isPending: false
528
+ isLoading: false
513
529
  isLoadingError: true
514
530
  isRefetchError: false
515
531
  isSuccess: false
@@ -524,6 +540,7 @@ export interface QueryObserverRefetchErrorResult<
524
540
  error: TError
525
541
  isError: true
526
542
  isPending: false
543
+ isLoading: false
527
544
  isLoadingError: false
528
545
  isRefetchError: true
529
546
  isSuccess: false
@@ -538,6 +555,7 @@ export interface QueryObserverSuccessResult<
538
555
  error: null
539
556
  isError: false
540
557
  isPending: false
558
+ isLoading: false
541
559
  isLoadingError: false
542
560
  isRefetchError: false
543
561
  isSuccess: true
@@ -555,6 +573,7 @@ export type QueryObserverResult<TData = unknown, TError = DefaultError> =
555
573
  | DefinedQueryObserverResult<TData, TError>
556
574
  | QueryObserverLoadingErrorResult<TData, TError>
557
575
  | QueryObserverLoadingResult<TData, TError>
576
+ | QueryObserverPendingResult<TData, TError>
558
577
 
559
578
  export interface InfiniteQueryObserverBaseResult<
560
579
  TData = unknown,
@@ -572,6 +591,20 @@ export interface InfiniteQueryObserverBaseResult<
572
591
  isFetchingPreviousPage: boolean
573
592
  }
574
593
 
594
+ export interface InfiniteQueryObserverPendingResult<
595
+ TData = unknown,
596
+ TError = DefaultError,
597
+ > extends InfiniteQueryObserverBaseResult<TData, TError> {
598
+ data: undefined
599
+ error: null
600
+ isError: false
601
+ isPending: true
602
+ isLoadingError: false
603
+ isRefetchError: false
604
+ isSuccess: false
605
+ status: 'pending'
606
+ }
607
+
575
608
  export interface InfiniteQueryObserverLoadingResult<
576
609
  TData = unknown,
577
610
  TError = DefaultError,
@@ -580,6 +613,7 @@ export interface InfiniteQueryObserverLoadingResult<
580
613
  error: null
581
614
  isError: false
582
615
  isPending: true
616
+ isLoading: true
583
617
  isLoadingError: false
584
618
  isRefetchError: false
585
619
  isSuccess: false
@@ -594,6 +628,7 @@ export interface InfiniteQueryObserverLoadingErrorResult<
594
628
  error: TError
595
629
  isError: true
596
630
  isPending: false
631
+ isLoading: false
597
632
  isLoadingError: true
598
633
  isRefetchError: false
599
634
  isSuccess: false
@@ -608,6 +643,7 @@ export interface InfiniteQueryObserverRefetchErrorResult<
608
643
  error: TError
609
644
  isError: true
610
645
  isPending: false
646
+ isLoading: false
611
647
  isLoadingError: false
612
648
  isRefetchError: true
613
649
  isSuccess: false
@@ -622,6 +658,7 @@ export interface InfiniteQueryObserverSuccessResult<
622
658
  error: null
623
659
  isError: false
624
660
  isPending: false
661
+ isLoading: false
625
662
  isLoadingError: false
626
663
  isRefetchError: false
627
664
  isSuccess: true
@@ -639,9 +676,10 @@ export type InfiniteQueryObserverResult<
639
676
  TData = unknown,
640
677
  TError = DefaultError,
641
678
  > =
679
+ | DefinedInfiniteQueryObserverResult<TData, TError>
642
680
  | InfiniteQueryObserverLoadingErrorResult<TData, TError>
643
681
  | InfiniteQueryObserverLoadingResult<TData, TError>
644
- | DefinedInfiniteQueryObserverResult<TData, TError>
682
+ | InfiniteQueryObserverPendingResult<TData, TError>
645
683
 
646
684
  export type MutationKey = ReadonlyArray<unknown>
647
685
 
package/src/utils.ts CHANGED
@@ -224,7 +224,8 @@ export function replaceEqualDeep(a: any, b: any): any {
224
224
  const array = isPlainArray(a) && isPlainArray(b)
225
225
 
226
226
  if (array || (isPlainObject(a) && isPlainObject(b))) {
227
- const aSize = array ? a.length : Object.keys(a).length
227
+ const aItems = array ? a : Object.keys(a)
228
+ const aSize = aItems.length
228
229
  const bItems = array ? b : Object.keys(b)
229
230
  const bSize = bItems.length
230
231
  const copy: any = array ? [] : {}
@@ -233,9 +234,19 @@ export function replaceEqualDeep(a: any, b: any): any {
233
234
 
234
235
  for (let i = 0; i < bSize; i++) {
235
236
  const key = array ? i : bItems[i]
236
- copy[key] = replaceEqualDeep(a[key], b[key])
237
- if (copy[key] === a[key] && a[key] !== undefined) {
237
+ if (
238
+ !array &&
239
+ a[key] === undefined &&
240
+ b[key] === undefined &&
241
+ aItems.includes(key)
242
+ ) {
243
+ copy[key] = undefined
238
244
  equalItems++
245
+ } else {
246
+ copy[key] = replaceEqualDeep(a[key], b[key])
247
+ if (copy[key] === a[key] && a[key] !== undefined) {
248
+ equalItems++
249
+ }
239
250
  }
240
251
  }
241
252