@tanstack/query-core 5.0.0-beta.6 → 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 (171) hide show
  1. package/build/legacy/hydration.cjs.map +1 -1
  2. package/build/legacy/hydration.d.cts +3 -3
  3. package/build/legacy/hydration.d.ts +3 -3
  4. package/build/legacy/hydration.js.map +1 -1
  5. package/build/legacy/index.cjs +3 -0
  6. package/build/legacy/index.cjs.map +1 -1
  7. package/build/legacy/index.d.cts +1 -1
  8. package/build/legacy/index.d.ts +1 -1
  9. package/build/legacy/index.js +2 -0
  10. package/build/legacy/index.js.map +1 -1
  11. package/build/legacy/infiniteQueryBehavior.cjs +23 -6
  12. package/build/legacy/infiniteQueryBehavior.cjs.map +1 -1
  13. package/build/legacy/infiniteQueryBehavior.d.cts +2 -2
  14. package/build/legacy/infiniteQueryBehavior.d.ts +2 -2
  15. package/build/legacy/infiniteQueryBehavior.js +23 -6
  16. package/build/legacy/infiniteQueryBehavior.js.map +1 -1
  17. package/build/legacy/infiniteQueryObserver.cjs.map +1 -1
  18. package/build/legacy/infiniteQueryObserver.d.cts +3 -3
  19. package/build/legacy/infiniteQueryObserver.d.ts +3 -3
  20. package/build/legacy/infiniteQueryObserver.js.map +1 -1
  21. package/build/legacy/mutation.cjs.map +1 -1
  22. package/build/legacy/mutation.d.cts +1 -1
  23. package/build/legacy/mutation.d.ts +1 -1
  24. package/build/legacy/mutation.js.map +1 -1
  25. package/build/legacy/mutationCache.cjs.map +1 -1
  26. package/build/legacy/mutationCache.d.cts +1 -1
  27. package/build/legacy/mutationCache.d.ts +1 -1
  28. package/build/legacy/mutationCache.js.map +1 -1
  29. package/build/legacy/mutationObserver.d.cts +1 -1
  30. package/build/legacy/mutationObserver.d.ts +1 -1
  31. package/build/legacy/notifyManager.cjs.map +1 -1
  32. package/build/legacy/notifyManager.d.cts +1 -1
  33. package/build/legacy/notifyManager.d.ts +1 -1
  34. package/build/legacy/notifyManager.js.map +1 -1
  35. package/build/legacy/queriesObserver.cjs +6 -8
  36. package/build/legacy/queriesObserver.cjs.map +1 -1
  37. package/build/legacy/queriesObserver.d.cts +11 -11
  38. package/build/legacy/queriesObserver.d.ts +11 -11
  39. package/build/legacy/queriesObserver.js +6 -8
  40. package/build/legacy/queriesObserver.js.map +1 -1
  41. package/build/legacy/query.cjs +10 -2
  42. package/build/legacy/query.cjs.map +1 -1
  43. package/build/legacy/query.d.cts +1 -1
  44. package/build/legacy/query.d.ts +1 -1
  45. package/build/legacy/query.js +10 -2
  46. package/build/legacy/query.js.map +1 -1
  47. package/build/legacy/queryCache.cjs.map +1 -1
  48. package/build/legacy/queryCache.d.cts +1 -1
  49. package/build/legacy/queryCache.d.ts +1 -1
  50. package/build/legacy/queryCache.js.map +1 -1
  51. package/build/legacy/{queryClient-9264ae39.d.ts → queryClient-230e991e.d.ts} +28 -25
  52. package/build/legacy/{queryClient-7060338a.d.ts → queryClient-64e47985.d.ts} +28 -25
  53. package/build/legacy/queryClient.cjs +4 -3
  54. package/build/legacy/queryClient.cjs.map +1 -1
  55. package/build/legacy/queryClient.d.cts +1 -1
  56. package/build/legacy/queryClient.d.ts +1 -1
  57. package/build/legacy/queryClient.js +4 -3
  58. package/build/legacy/queryClient.js.map +1 -1
  59. package/build/legacy/queryObserver.cjs +1 -1
  60. package/build/legacy/queryObserver.cjs.map +1 -1
  61. package/build/legacy/queryObserver.d.cts +1 -1
  62. package/build/legacy/queryObserver.d.ts +1 -1
  63. package/build/legacy/queryObserver.js +1 -1
  64. package/build/legacy/queryObserver.js.map +1 -1
  65. package/build/legacy/retryer.d.cts +1 -1
  66. package/build/legacy/retryer.d.ts +1 -1
  67. package/build/legacy/types.cjs.map +1 -1
  68. package/build/legacy/types.d.cts +1 -1
  69. package/build/legacy/types.d.ts +1 -1
  70. package/build/legacy/utils.cjs.map +1 -1
  71. package/build/legacy/utils.d.cts +1 -1
  72. package/build/legacy/utils.d.ts +1 -1
  73. package/build/legacy/utils.js.map +1 -1
  74. package/build/modern/hydration.cjs.map +1 -1
  75. package/build/modern/hydration.d.cts +3 -3
  76. package/build/modern/hydration.d.ts +3 -3
  77. package/build/modern/hydration.js.map +1 -1
  78. package/build/modern/index.cjs +3 -0
  79. package/build/modern/index.cjs.map +1 -1
  80. package/build/modern/index.d.cts +1 -1
  81. package/build/modern/index.d.ts +1 -1
  82. package/build/modern/index.js +2 -0
  83. package/build/modern/index.js.map +1 -1
  84. package/build/modern/infiniteQueryBehavior.cjs +21 -6
  85. package/build/modern/infiniteQueryBehavior.cjs.map +1 -1
  86. package/build/modern/infiniteQueryBehavior.d.cts +2 -2
  87. package/build/modern/infiniteQueryBehavior.d.ts +2 -2
  88. package/build/modern/infiniteQueryBehavior.js +21 -6
  89. package/build/modern/infiniteQueryBehavior.js.map +1 -1
  90. package/build/modern/infiniteQueryObserver.cjs.map +1 -1
  91. package/build/modern/infiniteQueryObserver.d.cts +3 -3
  92. package/build/modern/infiniteQueryObserver.d.ts +3 -3
  93. package/build/modern/infiniteQueryObserver.js.map +1 -1
  94. package/build/modern/mutation.cjs.map +1 -1
  95. package/build/modern/mutation.d.cts +1 -1
  96. package/build/modern/mutation.d.ts +1 -1
  97. package/build/modern/mutation.js.map +1 -1
  98. package/build/modern/mutationCache.cjs.map +1 -1
  99. package/build/modern/mutationCache.d.cts +1 -1
  100. package/build/modern/mutationCache.d.ts +1 -1
  101. package/build/modern/mutationCache.js.map +1 -1
  102. package/build/modern/mutationObserver.d.cts +1 -1
  103. package/build/modern/mutationObserver.d.ts +1 -1
  104. package/build/modern/notifyManager.cjs.map +1 -1
  105. package/build/modern/notifyManager.d.cts +1 -1
  106. package/build/modern/notifyManager.d.ts +1 -1
  107. package/build/modern/notifyManager.js.map +1 -1
  108. package/build/modern/queriesObserver.cjs +6 -8
  109. package/build/modern/queriesObserver.cjs.map +1 -1
  110. package/build/modern/queriesObserver.d.cts +11 -11
  111. package/build/modern/queriesObserver.d.ts +11 -11
  112. package/build/modern/queriesObserver.js +6 -8
  113. package/build/modern/queriesObserver.js.map +1 -1
  114. package/build/modern/query.cjs +10 -2
  115. package/build/modern/query.cjs.map +1 -1
  116. package/build/modern/query.d.cts +1 -1
  117. package/build/modern/query.d.ts +1 -1
  118. package/build/modern/query.js +10 -2
  119. package/build/modern/query.js.map +1 -1
  120. package/build/modern/queryCache.cjs.map +1 -1
  121. package/build/modern/queryCache.d.cts +1 -1
  122. package/build/modern/queryCache.d.ts +1 -1
  123. package/build/modern/queryCache.js.map +1 -1
  124. package/build/modern/{queryClient-9264ae39.d.ts → queryClient-230e991e.d.ts} +28 -25
  125. package/build/modern/{queryClient-7060338a.d.ts → queryClient-64e47985.d.ts} +28 -25
  126. package/build/modern/queryClient.cjs +4 -3
  127. package/build/modern/queryClient.cjs.map +1 -1
  128. package/build/modern/queryClient.d.cts +1 -1
  129. package/build/modern/queryClient.d.ts +1 -1
  130. package/build/modern/queryClient.js +4 -3
  131. package/build/modern/queryClient.js.map +1 -1
  132. package/build/modern/queryObserver.cjs +1 -1
  133. package/build/modern/queryObserver.cjs.map +1 -1
  134. package/build/modern/queryObserver.d.cts +1 -1
  135. package/build/modern/queryObserver.d.ts +1 -1
  136. package/build/modern/queryObserver.js +1 -1
  137. package/build/modern/queryObserver.js.map +1 -1
  138. package/build/modern/retryer.d.cts +1 -1
  139. package/build/modern/retryer.d.ts +1 -1
  140. package/build/modern/types.cjs.map +1 -1
  141. package/build/modern/types.d.cts +1 -1
  142. package/build/modern/types.d.ts +1 -1
  143. package/build/modern/utils.cjs.map +1 -1
  144. package/build/modern/utils.d.cts +1 -1
  145. package/build/modern/utils.d.ts +1 -1
  146. package/build/modern/utils.js.map +1 -1
  147. package/package.json +6 -2
  148. package/src/hydration.ts +2 -2
  149. package/src/index.ts +2 -1
  150. package/src/infiniteQueryBehavior.ts +23 -8
  151. package/src/infiniteQueryObserver.ts +7 -2
  152. package/src/mutation.ts +1 -1
  153. package/src/mutationCache.ts +3 -3
  154. package/src/notifyManager.ts +3 -3
  155. package/src/queriesObserver.ts +24 -25
  156. package/src/query.ts +12 -2
  157. package/src/queryCache.ts +2 -2
  158. package/src/queryClient.ts +17 -7
  159. package/src/queryObserver.ts +1 -1
  160. package/src/tests/hydration.test.tsx +2 -2
  161. package/src/tests/infiniteQueryBehavior.test.tsx +4 -4
  162. package/src/tests/infiniteQueryObserver.test.tsx +36 -7
  163. package/src/tests/mutations.test.tsx +2 -2
  164. package/src/tests/queriesObserver.test.tsx +4 -4
  165. package/src/tests/query.test.tsx +55 -3
  166. package/src/tests/queryClient.test.tsx +77 -38
  167. package/src/tests/queryObserver.test.tsx +22 -22
  168. package/src/tests/utils.test.tsx +2 -2
  169. package/src/tests/utils.ts +0 -5
  170. package/src/types.ts +41 -20
  171. package/src/utils.ts +2 -2
@@ -325,7 +325,7 @@ describe('query', () => {
325
325
  test('should not continue if explicitly cancelled', async () => {
326
326
  const key = queryKey()
327
327
 
328
- const queryFn = vi.fn<unknown[], unknown>()
328
+ const queryFn = vi.fn<Array<unknown>, unknown>()
329
329
 
330
330
  queryFn.mockImplementation(async () => {
331
331
  await sleep(10)
@@ -357,7 +357,7 @@ describe('query', () => {
357
357
  test('should not error if reset while pending', async () => {
358
358
  const key = queryKey()
359
359
 
360
- const queryFn = vi.fn<unknown[], unknown>()
360
+ const queryFn = vi.fn<Array<unknown>, unknown>()
361
361
 
362
362
  queryFn.mockImplementation(async () => {
363
363
  await sleep(10)
@@ -384,7 +384,7 @@ describe('query', () => {
384
384
  test('should be able to refetch a cancelled query', async () => {
385
385
  const key = queryKey()
386
386
 
387
- const queryFn = vi.fn<unknown[], unknown>()
387
+ const queryFn = vi.fn<Array<unknown>, unknown>()
388
388
 
389
389
  queryFn.mockImplementation(async () => {
390
390
  await sleep(50)
@@ -864,4 +864,56 @@ describe('query', () => {
864
864
 
865
865
  unsubscribe()
866
866
  })
867
+
868
+ test('should always revert to idle state (#5958)', async () => {
869
+ let mockedData = [1]
870
+
871
+ const key = queryKey()
872
+
873
+ const queryFn = vi
874
+ .fn<
875
+ [QueryFunctionContext<ReturnType<typeof queryKey>>],
876
+ Promise<unknown>
877
+ >()
878
+ .mockImplementation(({ signal }) => {
879
+ return new Promise((resolve, reject) => {
880
+ const abortListener = () => {
881
+ clearTimeout(timerId)
882
+ reject(signal.reason)
883
+ }
884
+ signal.addEventListener('abort', abortListener)
885
+
886
+ const timerId = setTimeout(() => {
887
+ signal.removeEventListener('abort', abortListener)
888
+ resolve(mockedData.join(' - '))
889
+ }, 50)
890
+ })
891
+ })
892
+
893
+ const observer = new QueryObserver(queryClient, {
894
+ queryKey: key,
895
+ queryFn,
896
+ })
897
+ const unsubscribe = observer.subscribe(() => undefined)
898
+ await sleep(60) // let it resolve
899
+
900
+ mockedData = [1, 2] // update "server" state in the background
901
+
902
+ queryClient.invalidateQueries({ queryKey: key })
903
+ await sleep(1)
904
+ queryClient.invalidateQueries({ queryKey: key })
905
+ await sleep(1)
906
+ unsubscribe() // unsubscribe to simulate unmount
907
+
908
+ // set up a new observer to simulate a mount of new component
909
+ const newObserver = new QueryObserver(queryClient, {
910
+ queryKey: key,
911
+ queryFn,
912
+ })
913
+
914
+ const spy = vi.fn()
915
+ newObserver.subscribe(({ data }) => spy(data))
916
+ await sleep(60) // let it resolve
917
+ expect(spy).toHaveBeenCalledWith('1 - 2')
918
+ })
867
919
  })
@@ -150,6 +150,45 @@ describe('queryClient', () => {
150
150
  })
151
151
  })
152
152
 
153
+ describe('defaultQueryOptions', () => {
154
+ test('should default networkMode when persister is present', async () => {
155
+ expect(
156
+ createQueryClient({
157
+ defaultOptions: {
158
+ queries: {
159
+ persister: 'ignore' as any,
160
+ },
161
+ },
162
+ }).defaultQueryOptions({ queryKey: queryKey() }).networkMode,
163
+ ).toBe('offlineFirst')
164
+ })
165
+
166
+ test('should not default networkMode without persister', async () => {
167
+ expect(
168
+ createQueryClient({
169
+ defaultOptions: {
170
+ queries: {
171
+ staleTime: 1000,
172
+ },
173
+ },
174
+ }).defaultQueryOptions({ queryKey: queryKey() }).networkMode,
175
+ ).toBe(undefined)
176
+ })
177
+
178
+ test('should not default networkMode when already present', async () => {
179
+ expect(
180
+ createQueryClient({
181
+ defaultOptions: {
182
+ queries: {
183
+ persister: 'ignore' as any,
184
+ networkMode: 'always',
185
+ },
186
+ },
187
+ }).defaultQueryOptions({ queryKey: queryKey() }).networkMode,
188
+ ).toBe('always')
189
+ })
190
+ })
191
+
153
192
  describe('setQueryData', () => {
154
193
  test('should not crash if query could not be found', () => {
155
194
  const key = queryKey()
@@ -584,7 +623,7 @@ describe('queryClient', () => {
584
623
  StrictData,
585
624
  StrictQueryKey,
586
625
  number
587
- >({ queryKey: key, queryFn: fetchFn, defaultPageParam: 0 }),
626
+ >({ queryKey: key, queryFn: fetchFn, initialPageParam: 0 }),
588
627
  ).resolves.toEqual(data)
589
628
  })
590
629
 
@@ -592,7 +631,7 @@ describe('queryClient', () => {
592
631
  const key = queryKey()
593
632
  const result = await queryClient.fetchInfiniteQuery({
594
633
  queryKey: key,
595
- defaultPageParam: 10,
634
+ initialPageParam: 10,
596
635
  queryFn: ({ pageParam }) => Number(pageParam),
597
636
  })
598
637
  const result2 = queryClient.getQueryData(key)
@@ -622,7 +661,7 @@ describe('queryClient', () => {
622
661
  StrictData,
623
662
  StrictQueryKey,
624
663
  number
625
- >({ queryKey: key, queryFn: fetchFn, defaultPageParam: 0 })
664
+ >({ queryKey: key, queryFn: fetchFn, initialPageParam: 0 })
626
665
 
627
666
  const result = queryClient.getQueryData(key)
628
667
 
@@ -638,7 +677,7 @@ describe('queryClient', () => {
638
677
  await queryClient.prefetchInfiniteQuery({
639
678
  queryKey: key,
640
679
  queryFn: ({ pageParam }) => Number(pageParam),
641
- defaultPageParam: 10,
680
+ initialPageParam: 10,
642
681
  })
643
682
 
644
683
  const result = queryClient.getQueryData(key)
@@ -657,7 +696,7 @@ describe('queryClient', () => {
657
696
  queryFn: ({ pageParam }) => String(pageParam),
658
697
  getNextPageParam: (_lastPage, _pages, lastPageParam) =>
659
698
  lastPageParam + 5,
660
- defaultPageParam: 10,
699
+ initialPageParam: 10,
661
700
  pages: 3,
662
701
  })
663
702
 
@@ -677,7 +716,7 @@ describe('queryClient', () => {
677
716
  queryFn: ({ pageParam }) => String(pageParam),
678
717
  getNextPageParam: (_lastPage, _pages, lastPageParam) =>
679
718
  lastPageParam >= 20 ? undefined : lastPageParam + 5,
680
- defaultPageParam: 10,
719
+ initialPageParam: 10,
681
720
  pages: 5,
682
721
  })
683
722
 
@@ -851,7 +890,7 @@ describe('queryClient', () => {
851
890
  describe('refetchQueries', () => {
852
891
  test('should not refetch if all observers are disabled', async () => {
853
892
  const key = queryKey()
854
- const queryFn = vi.fn<unknown[], string>().mockReturnValue('data')
893
+ const queryFn = vi.fn<Array<unknown>, string>().mockReturnValue('data')
855
894
  await queryClient.fetchQuery({ queryKey: key, queryFn })
856
895
  const observer1 = new QueryObserver(queryClient, {
857
896
  queryKey: key,
@@ -865,7 +904,7 @@ describe('queryClient', () => {
865
904
  })
866
905
  test('should refetch if at least one observer is enabled', async () => {
867
906
  const key = queryKey()
868
- const queryFn = vi.fn<unknown[], string>().mockReturnValue('data')
907
+ const queryFn = vi.fn<Array<unknown>, string>().mockReturnValue('data')
869
908
  await queryClient.fetchQuery({ queryKey: key, queryFn })
870
909
  const observer1 = new QueryObserver(queryClient, {
871
910
  queryKey: key,
@@ -887,8 +926,8 @@ describe('queryClient', () => {
887
926
  test('should refetch all queries when no arguments are given', async () => {
888
927
  const key1 = queryKey()
889
928
  const key2 = queryKey()
890
- const queryFn1 = vi.fn<unknown[], string>().mockReturnValue('data1')
891
- const queryFn2 = vi.fn<unknown[], string>().mockReturnValue('data2')
929
+ const queryFn1 = vi.fn<Array<unknown>, string>().mockReturnValue('data1')
930
+ const queryFn2 = vi.fn<Array<unknown>, string>().mockReturnValue('data2')
892
931
  await queryClient.fetchQuery({ queryKey: key1, queryFn: queryFn1 })
893
932
  await queryClient.fetchQuery({ queryKey: key2, queryFn: queryFn2 })
894
933
  const observer1 = new QueryObserver(queryClient, {
@@ -913,8 +952,8 @@ describe('queryClient', () => {
913
952
  test('should be able to refetch all fresh queries', async () => {
914
953
  const key1 = queryKey()
915
954
  const key2 = queryKey()
916
- const queryFn1 = vi.fn<unknown[], string>().mockReturnValue('data1')
917
- const queryFn2 = vi.fn<unknown[], string>().mockReturnValue('data2')
955
+ const queryFn1 = vi.fn<Array<unknown>, string>().mockReturnValue('data1')
956
+ const queryFn2 = vi.fn<Array<unknown>, string>().mockReturnValue('data2')
918
957
  await queryClient.fetchQuery({ queryKey: key1, queryFn: queryFn1 })
919
958
  await queryClient.fetchQuery({ queryKey: key2, queryFn: queryFn2 })
920
959
  const observer = new QueryObserver(queryClient, {
@@ -932,8 +971,8 @@ describe('queryClient', () => {
932
971
  test('should be able to refetch all stale queries', async () => {
933
972
  const key1 = queryKey()
934
973
  const key2 = queryKey()
935
- const queryFn1 = vi.fn<unknown[], string>().mockReturnValue('data1')
936
- const queryFn2 = vi.fn<unknown[], string>().mockReturnValue('data2')
974
+ const queryFn1 = vi.fn<Array<unknown>, string>().mockReturnValue('data1')
975
+ const queryFn2 = vi.fn<Array<unknown>, string>().mockReturnValue('data2')
937
976
  await queryClient.fetchQuery({ queryKey: key1, queryFn: queryFn1 })
938
977
  await queryClient.fetchQuery({ queryKey: key2, queryFn: queryFn2 })
939
978
  const observer = new QueryObserver(queryClient, {
@@ -952,8 +991,8 @@ describe('queryClient', () => {
952
991
  test('should be able to refetch all stale and active queries', async () => {
953
992
  const key1 = queryKey()
954
993
  const key2 = queryKey()
955
- const queryFn1 = vi.fn<unknown[], string>().mockReturnValue('data1')
956
- const queryFn2 = vi.fn<unknown[], string>().mockReturnValue('data2')
994
+ const queryFn1 = vi.fn<Array<unknown>, string>().mockReturnValue('data1')
995
+ const queryFn2 = vi.fn<Array<unknown>, string>().mockReturnValue('data2')
957
996
  await queryClient.fetchQuery({ queryKey: key1, queryFn: queryFn1 })
958
997
  await queryClient.fetchQuery({ queryKey: key2, queryFn: queryFn2 })
959
998
  queryClient.invalidateQueries({ queryKey: key1 })
@@ -974,8 +1013,8 @@ describe('queryClient', () => {
974
1013
  test('should be able to refetch all active and inactive queries', async () => {
975
1014
  const key1 = queryKey()
976
1015
  const key2 = queryKey()
977
- const queryFn1 = vi.fn<unknown[], string>().mockReturnValue('data1')
978
- const queryFn2 = vi.fn<unknown[], string>().mockReturnValue('data2')
1016
+ const queryFn1 = vi.fn<Array<unknown>, string>().mockReturnValue('data1')
1017
+ const queryFn2 = vi.fn<Array<unknown>, string>().mockReturnValue('data2')
979
1018
  await queryClient.fetchQuery({ queryKey: key1, queryFn: queryFn1 })
980
1019
  await queryClient.fetchQuery({ queryKey: key2, queryFn: queryFn2 })
981
1020
  const observer = new QueryObserver(queryClient, {
@@ -993,8 +1032,8 @@ describe('queryClient', () => {
993
1032
  test('should be able to refetch all active and inactive queries', async () => {
994
1033
  const key1 = queryKey()
995
1034
  const key2 = queryKey()
996
- const queryFn1 = vi.fn<unknown[], string>().mockReturnValue('data1')
997
- const queryFn2 = vi.fn<unknown[], string>().mockReturnValue('data2')
1035
+ const queryFn1 = vi.fn<Array<unknown>, string>().mockReturnValue('data1')
1036
+ const queryFn2 = vi.fn<Array<unknown>, string>().mockReturnValue('data2')
998
1037
  await queryClient.fetchQuery({ queryKey: key1, queryFn: queryFn1 })
999
1038
  await queryClient.fetchQuery({ queryKey: key2, queryFn: queryFn2 })
1000
1039
  const observer = new QueryObserver(queryClient, {
@@ -1012,8 +1051,8 @@ describe('queryClient', () => {
1012
1051
  test('should be able to refetch only active queries', async () => {
1013
1052
  const key1 = queryKey()
1014
1053
  const key2 = queryKey()
1015
- const queryFn1 = vi.fn<unknown[], string>().mockReturnValue('data1')
1016
- const queryFn2 = vi.fn<unknown[], string>().mockReturnValue('data2')
1054
+ const queryFn1 = vi.fn<Array<unknown>, string>().mockReturnValue('data1')
1055
+ const queryFn2 = vi.fn<Array<unknown>, string>().mockReturnValue('data2')
1017
1056
  await queryClient.fetchQuery({ queryKey: key1, queryFn: queryFn1 })
1018
1057
  await queryClient.fetchQuery({ queryKey: key2, queryFn: queryFn2 })
1019
1058
  const observer = new QueryObserver(queryClient, {
@@ -1031,8 +1070,8 @@ describe('queryClient', () => {
1031
1070
  test('should be able to refetch only inactive queries', async () => {
1032
1071
  const key1 = queryKey()
1033
1072
  const key2 = queryKey()
1034
- const queryFn1 = vi.fn<unknown[], string>().mockReturnValue('data1')
1035
- const queryFn2 = vi.fn<unknown[], string>().mockReturnValue('data2')
1073
+ const queryFn1 = vi.fn<Array<unknown>, string>().mockReturnValue('data1')
1074
+ const queryFn2 = vi.fn<Array<unknown>, string>().mockReturnValue('data2')
1036
1075
  await queryClient.fetchQuery({ queryKey: key1, queryFn: queryFn1 })
1037
1076
  await queryClient.fetchQuery({ queryKey: key2, queryFn: queryFn2 })
1038
1077
  const observer = new QueryObserver(queryClient, {
@@ -1071,7 +1110,7 @@ describe('queryClient', () => {
1071
1110
 
1072
1111
  test('should resolve Promise immediately if query is paused', async () => {
1073
1112
  const key1 = queryKey()
1074
- const queryFn1 = vi.fn<unknown[], string>().mockReturnValue('data1')
1113
+ const queryFn1 = vi.fn<Array<unknown>, string>().mockReturnValue('data1')
1075
1114
  await queryClient.fetchQuery({ queryKey: key1, queryFn: queryFn1 })
1076
1115
  const onlineMock = mockOnlineManagerIsOnline(false)
1077
1116
 
@@ -1085,7 +1124,7 @@ describe('queryClient', () => {
1085
1124
  test('should refetch if query we are offline but query networkMode is always', async () => {
1086
1125
  const key1 = queryKey()
1087
1126
  queryClient.setQueryDefaults(key1, { networkMode: 'always' })
1088
- const queryFn1 = vi.fn<unknown[], string>().mockReturnValue('data1')
1127
+ const queryFn1 = vi.fn<Array<unknown>, string>().mockReturnValue('data1')
1089
1128
  await queryClient.fetchQuery({ queryKey: key1, queryFn: queryFn1 })
1090
1129
  const onlineMock = mockOnlineManagerIsOnline(false)
1091
1130
 
@@ -1101,8 +1140,8 @@ describe('queryClient', () => {
1101
1140
  test('should refetch active queries by default', async () => {
1102
1141
  const key1 = queryKey()
1103
1142
  const key2 = queryKey()
1104
- const queryFn1 = vi.fn<unknown[], string>().mockReturnValue('data1')
1105
- const queryFn2 = vi.fn<unknown[], string>().mockReturnValue('data2')
1143
+ const queryFn1 = vi.fn<Array<unknown>, string>().mockReturnValue('data1')
1144
+ const queryFn2 = vi.fn<Array<unknown>, string>().mockReturnValue('data2')
1106
1145
  await queryClient.fetchQuery({ queryKey: key1, queryFn: queryFn1 })
1107
1146
  await queryClient.fetchQuery({ queryKey: key2, queryFn: queryFn2 })
1108
1147
  const observer = new QueryObserver(queryClient, {
@@ -1120,8 +1159,8 @@ describe('queryClient', () => {
1120
1159
  test('should not refetch inactive queries by default', async () => {
1121
1160
  const key1 = queryKey()
1122
1161
  const key2 = queryKey()
1123
- const queryFn1 = vi.fn<unknown[], string>().mockReturnValue('data1')
1124
- const queryFn2 = vi.fn<unknown[], string>().mockReturnValue('data2')
1162
+ const queryFn1 = vi.fn<Array<unknown>, string>().mockReturnValue('data1')
1163
+ const queryFn2 = vi.fn<Array<unknown>, string>().mockReturnValue('data2')
1125
1164
  await queryClient.fetchQuery({ queryKey: key1, queryFn: queryFn1 })
1126
1165
  await queryClient.fetchQuery({ queryKey: key2, queryFn: queryFn2 })
1127
1166
  const observer = new QueryObserver(queryClient, {
@@ -1139,8 +1178,8 @@ describe('queryClient', () => {
1139
1178
  test('should not refetch active queries when "refetch" is "none"', async () => {
1140
1179
  const key1 = queryKey()
1141
1180
  const key2 = queryKey()
1142
- const queryFn1 = vi.fn<unknown[], string>().mockReturnValue('data1')
1143
- const queryFn2 = vi.fn<unknown[], string>().mockReturnValue('data2')
1181
+ const queryFn1 = vi.fn<Array<unknown>, string>().mockReturnValue('data1')
1182
+ const queryFn2 = vi.fn<Array<unknown>, string>().mockReturnValue('data2')
1144
1183
  await queryClient.fetchQuery({ queryKey: key1, queryFn: queryFn1 })
1145
1184
  await queryClient.fetchQuery({ queryKey: key2, queryFn: queryFn2 })
1146
1185
  const observer = new QueryObserver(queryClient, {
@@ -1161,8 +1200,8 @@ describe('queryClient', () => {
1161
1200
  test('should refetch inactive queries when "refetch" is "inactive"', async () => {
1162
1201
  const key1 = queryKey()
1163
1202
  const key2 = queryKey()
1164
- const queryFn1 = vi.fn<unknown[], string>().mockReturnValue('data1')
1165
- const queryFn2 = vi.fn<unknown[], string>().mockReturnValue('data2')
1203
+ const queryFn1 = vi.fn<Array<unknown>, string>().mockReturnValue('data1')
1204
+ const queryFn2 = vi.fn<Array<unknown>, string>().mockReturnValue('data2')
1166
1205
  await queryClient.fetchQuery({ queryKey: key1, queryFn: queryFn1 })
1167
1206
  await queryClient.fetchQuery({ queryKey: key2, queryFn: queryFn2 })
1168
1207
  const observer = new QueryObserver(queryClient, {
@@ -1185,8 +1224,8 @@ describe('queryClient', () => {
1185
1224
  test('should refetch active and inactive queries when "refetch" is "all"', async () => {
1186
1225
  const key1 = queryKey()
1187
1226
  const key2 = queryKey()
1188
- const queryFn1 = vi.fn<unknown[], string>().mockReturnValue('data1')
1189
- const queryFn2 = vi.fn<unknown[], string>().mockReturnValue('data2')
1227
+ const queryFn1 = vi.fn<Array<unknown>, string>().mockReturnValue('data1')
1228
+ const queryFn2 = vi.fn<Array<unknown>, string>().mockReturnValue('data2')
1190
1229
  await queryClient.fetchQuery({ queryKey: key1, queryFn: queryFn1 })
1191
1230
  await queryClient.fetchQuery({ queryKey: key2, queryFn: queryFn2 })
1192
1231
  const observer = new QueryObserver(queryClient, {
@@ -1307,8 +1346,8 @@ describe('queryClient', () => {
1307
1346
  test('should refetch all active queries', async () => {
1308
1347
  const key1 = queryKey()
1309
1348
  const key2 = queryKey()
1310
- const queryFn1 = vi.fn<unknown[], string>().mockReturnValue('data1')
1311
- const queryFn2 = vi.fn<unknown[], string>().mockReturnValue('data2')
1349
+ const queryFn1 = vi.fn<Array<unknown>, string>().mockReturnValue('data1')
1350
+ const queryFn2 = vi.fn<Array<unknown>, string>().mockReturnValue('data2')
1312
1351
  const observer1 = new QueryObserver(queryClient, {
1313
1352
  queryKey: key1,
1314
1353
  queryFn: queryFn1,
@@ -1,6 +1,6 @@
1
1
  import { vi } from 'vitest'
2
2
  import { QueryObserver, focusManager } from '..'
3
- import { createQueryClient, expectType, queryKey, sleep } from './utils'
3
+ import { createQueryClient, queryKey, sleep } from './utils'
4
4
  import type { QueryClient, QueryObserverResult } from '..'
5
5
 
6
6
  describe('queryObserver', () => {
@@ -17,7 +17,7 @@ describe('queryObserver', () => {
17
17
 
18
18
  test('should trigger a fetch when subscribed', async () => {
19
19
  const key = queryKey()
20
- const queryFn = vi.fn<unknown[], string>().mockReturnValue('data')
20
+ const queryFn = vi.fn<Array<unknown>, string>().mockReturnValue('data')
21
21
  const observer = new QueryObserver(queryClient, { queryKey: key, queryFn })
22
22
  const unsubscribe = observer.subscribe(() => undefined)
23
23
  await sleep(1)
@@ -28,7 +28,7 @@ describe('queryObserver', () => {
28
28
  test('should notify when switching query', async () => {
29
29
  const key1 = queryKey()
30
30
  const key2 = queryKey()
31
- const results: QueryObserverResult[] = []
31
+ const results: Array<QueryObserverResult> = []
32
32
  const observer = new QueryObserver(queryClient, {
33
33
  queryKey: key1,
34
34
  queryFn: () => 1,
@@ -56,7 +56,7 @@ describe('queryObserver', () => {
56
56
  })
57
57
  let observerResult
58
58
  const unsubscribe = observer.subscribe((result) => {
59
- expectType<QueryObserverResult<{ myCount: number }>>(result)
59
+ expectTypeOf<QueryObserverResult<{ myCount: number }>>(result)
60
60
  observerResult = result
61
61
  })
62
62
  await sleep(1)
@@ -72,7 +72,7 @@ describe('queryObserver', () => {
72
72
  select: (data) => ({ myCount: data.count }),
73
73
  })
74
74
  const observerResult = await observer.refetch()
75
- expectType<{ myCount: number } | undefined>(observerResult.data)
75
+ expectTypeOf<{ myCount: number } | undefined>(observerResult.data)
76
76
  expect(observerResult.data).toMatchObject({ myCount: 1 })
77
77
  })
78
78
 
@@ -113,7 +113,7 @@ describe('queryObserver', () => {
113
113
  test('should run the selector again if the selector changed', async () => {
114
114
  const key = queryKey()
115
115
  let count = 0
116
- const results: QueryObserverResult[] = []
116
+ const results: Array<QueryObserverResult> = []
117
117
  const queryFn = () => ({ count: 1 })
118
118
  const select1 = (data: ReturnType<typeof queryFn>) => {
119
119
  count++
@@ -172,7 +172,7 @@ describe('queryObserver', () => {
172
172
  test('should not run the selector again if the data and selector did not change', async () => {
173
173
  const key = queryKey()
174
174
  let count = 0
175
- const results: QueryObserverResult[] = []
175
+ const results: Array<QueryObserverResult> = []
176
176
  const queryFn = () => ({ count: 1 })
177
177
  const select = (data: ReturnType<typeof queryFn>) => {
178
178
  count++
@@ -239,7 +239,7 @@ describe('queryObserver', () => {
239
239
 
240
240
  test('should always run the selector again if selector throws an error and selector is not referentially stable', async () => {
241
241
  const key = queryKey()
242
- const results: QueryObserverResult[] = []
242
+ const results: Array<QueryObserverResult> = []
243
243
  const queryFn = async () => {
244
244
  await sleep(10)
245
245
  return { count: 1 }
@@ -281,7 +281,7 @@ describe('queryObserver', () => {
281
281
 
282
282
  test('should return stale data if selector throws an error', async () => {
283
283
  const key = queryKey()
284
- const results: QueryObserverResult[] = []
284
+ const results: Array<QueryObserverResult> = []
285
285
  let shouldError = false
286
286
  const error = new Error('select error')
287
287
  const observer = new QueryObserver(queryClient, {
@@ -349,7 +349,7 @@ describe('queryObserver', () => {
349
349
 
350
350
  test('should not trigger a fetch when subscribed and disabled', async () => {
351
351
  const key = queryKey()
352
- const queryFn = vi.fn<unknown[], string>().mockReturnValue('data')
352
+ const queryFn = vi.fn<Array<unknown>, string>().mockReturnValue('data')
353
353
  const observer = new QueryObserver(queryClient, {
354
354
  queryKey: key,
355
355
  queryFn,
@@ -363,7 +363,7 @@ describe('queryObserver', () => {
363
363
 
364
364
  test('should not trigger a fetch when not subscribed', async () => {
365
365
  const key = queryKey()
366
- const queryFn = vi.fn<unknown[], string>().mockReturnValue('data')
366
+ const queryFn = vi.fn<Array<unknown>, string>().mockReturnValue('data')
367
367
  new QueryObserver(queryClient, { queryKey: key, queryFn })
368
368
  await sleep(1)
369
369
  expect(queryFn).toHaveBeenCalledTimes(0)
@@ -371,7 +371,7 @@ describe('queryObserver', () => {
371
371
 
372
372
  test('should be able to watch a query without defining a query function', async () => {
373
373
  const key = queryKey()
374
- const queryFn = vi.fn<unknown[], string>().mockReturnValue('data')
374
+ const queryFn = vi.fn<Array<unknown>, string>().mockReturnValue('data')
375
375
  const callback = vi.fn()
376
376
  const observer = new QueryObserver(queryClient, {
377
377
  queryKey: key,
@@ -386,12 +386,12 @@ describe('queryObserver', () => {
386
386
 
387
387
  test('should accept unresolved query config in update function', async () => {
388
388
  const key = queryKey()
389
- const queryFn = vi.fn<unknown[], string>().mockReturnValue('data')
389
+ const queryFn = vi.fn<Array<unknown>, string>().mockReturnValue('data')
390
390
  const observer = new QueryObserver(queryClient, {
391
391
  queryKey: key,
392
392
  enabled: false,
393
393
  })
394
- const results: QueryObserverResult<unknown>[] = []
394
+ const results: Array<QueryObserverResult<unknown>> = []
395
395
  const unsubscribe = observer.subscribe((x) => {
396
396
  results.push(x)
397
397
  })
@@ -408,13 +408,13 @@ describe('queryObserver', () => {
408
408
 
409
409
  test('should be able to handle multiple subscribers', async () => {
410
410
  const key = queryKey()
411
- const queryFn = vi.fn<unknown[], string>().mockReturnValue('data')
411
+ const queryFn = vi.fn<Array<unknown>, string>().mockReturnValue('data')
412
412
  const observer = new QueryObserver<string>(queryClient, {
413
413
  queryKey: key,
414
414
  enabled: false,
415
415
  })
416
- const results1: QueryObserverResult<string>[] = []
417
- const results2: QueryObserverResult<string>[] = []
416
+ const results1: Array<QueryObserverResult<string>> = []
417
+ const results2: Array<QueryObserverResult<string>> = []
418
418
  const unsubscribe1 = observer.subscribe((x) => {
419
419
  results1.push(x)
420
420
  })
@@ -490,7 +490,7 @@ describe('queryObserver', () => {
490
490
  data: 'placeholder',
491
491
  })
492
492
 
493
- const results: QueryObserverResult<unknown>[] = []
493
+ const results: Array<QueryObserverResult<unknown>> = []
494
494
 
495
495
  const unsubscribe = observer.subscribe((x) => {
496
496
  results.push(x)
@@ -568,7 +568,7 @@ describe('queryObserver', () => {
568
568
 
569
569
  test('should not refetch in background if refetchIntervalInBackground is false', async () => {
570
570
  const key = queryKey()
571
- const queryFn = vi.fn<unknown[], string>().mockReturnValue('data')
571
+ const queryFn = vi.fn<Array<unknown>, string>().mockReturnValue('data')
572
572
 
573
573
  focusManager.setFocused(false)
574
574
  const observer = new QueryObserver(queryClient, {
@@ -692,8 +692,8 @@ describe('queryObserver', () => {
692
692
  })
693
693
 
694
694
  test('should pass the correct previous queryKey (from prevQuery) to placeholderData function params with select', async () => {
695
- const results: QueryObserverResult[] = []
696
- const keys: Array<readonly unknown[] | null> = []
695
+ const results: Array<QueryObserverResult> = []
696
+ const keys: Array<ReadonlyArray<unknown> | null> = []
697
697
 
698
698
  const key1 = queryKey()
699
699
  const key2 = queryKey()
@@ -758,7 +758,7 @@ describe('queryObserver', () => {
758
758
  })
759
759
 
760
760
  test('should pass the correct previous data to placeholderData function params when select function is used in conjunction', async () => {
761
- const results: QueryObserverResult[] = []
761
+ const results: Array<QueryObserverResult> = []
762
762
 
763
763
  const key1 = queryKey()
764
764
  const key2 = queryKey()
@@ -173,8 +173,8 @@ describe('core/utils', () => {
173
173
  })
174
174
 
175
175
  it('should return the previous value when the next value is an equal empty array', () => {
176
- const prev: any[] = []
177
- const next: any[] = []
176
+ const prev: Array<any> = []
177
+ const next: Array<any> = []
178
178
  expect(replaceEqualDeep(prev, next)).toBe(prev)
179
179
  })
180
180
 
@@ -41,11 +41,6 @@ export function setActTimeout(fn: () => void, ms?: number) {
41
41
  }, ms)
42
42
  }
43
43
 
44
- /**
45
- * Assert the parameter is of a specific type.
46
- */
47
- export const expectType = <T>(_: T): void => undefined
48
-
49
44
  export const executeMutation = <TVariables>(
50
45
  queryClient: QueryClient,
51
46
  options: MutationOptions<any, any, TVariables, any>,