@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.
- package/build/legacy/hydration.cjs.map +1 -1
- package/build/legacy/hydration.d.cts +3 -3
- package/build/legacy/hydration.d.ts +3 -3
- package/build/legacy/hydration.js.map +1 -1
- package/build/legacy/index.cjs +3 -0
- package/build/legacy/index.cjs.map +1 -1
- package/build/legacy/index.d.cts +1 -1
- package/build/legacy/index.d.ts +1 -1
- package/build/legacy/index.js +2 -0
- package/build/legacy/index.js.map +1 -1
- package/build/legacy/infiniteQueryBehavior.cjs +23 -6
- package/build/legacy/infiniteQueryBehavior.cjs.map +1 -1
- package/build/legacy/infiniteQueryBehavior.d.cts +2 -2
- package/build/legacy/infiniteQueryBehavior.d.ts +2 -2
- package/build/legacy/infiniteQueryBehavior.js +23 -6
- package/build/legacy/infiniteQueryBehavior.js.map +1 -1
- package/build/legacy/infiniteQueryObserver.cjs.map +1 -1
- package/build/legacy/infiniteQueryObserver.d.cts +3 -3
- package/build/legacy/infiniteQueryObserver.d.ts +3 -3
- package/build/legacy/infiniteQueryObserver.js.map +1 -1
- package/build/legacy/mutation.cjs.map +1 -1
- package/build/legacy/mutation.d.cts +1 -1
- package/build/legacy/mutation.d.ts +1 -1
- package/build/legacy/mutation.js.map +1 -1
- package/build/legacy/mutationCache.cjs.map +1 -1
- package/build/legacy/mutationCache.d.cts +1 -1
- package/build/legacy/mutationCache.d.ts +1 -1
- package/build/legacy/mutationCache.js.map +1 -1
- package/build/legacy/mutationObserver.d.cts +1 -1
- package/build/legacy/mutationObserver.d.ts +1 -1
- package/build/legacy/notifyManager.cjs.map +1 -1
- package/build/legacy/notifyManager.d.cts +1 -1
- package/build/legacy/notifyManager.d.ts +1 -1
- package/build/legacy/notifyManager.js.map +1 -1
- package/build/legacy/queriesObserver.cjs +6 -8
- package/build/legacy/queriesObserver.cjs.map +1 -1
- package/build/legacy/queriesObserver.d.cts +11 -11
- package/build/legacy/queriesObserver.d.ts +11 -11
- package/build/legacy/queriesObserver.js +6 -8
- package/build/legacy/queriesObserver.js.map +1 -1
- package/build/legacy/query.cjs +10 -2
- package/build/legacy/query.cjs.map +1 -1
- package/build/legacy/query.d.cts +1 -1
- package/build/legacy/query.d.ts +1 -1
- package/build/legacy/query.js +10 -2
- package/build/legacy/query.js.map +1 -1
- package/build/legacy/queryCache.cjs.map +1 -1
- package/build/legacy/queryCache.d.cts +1 -1
- package/build/legacy/queryCache.d.ts +1 -1
- package/build/legacy/queryCache.js.map +1 -1
- package/build/legacy/{queryClient-9264ae39.d.ts → queryClient-230e991e.d.ts} +28 -25
- package/build/legacy/{queryClient-7060338a.d.ts → queryClient-64e47985.d.ts} +28 -25
- package/build/legacy/queryClient.cjs +4 -3
- package/build/legacy/queryClient.cjs.map +1 -1
- package/build/legacy/queryClient.d.cts +1 -1
- package/build/legacy/queryClient.d.ts +1 -1
- package/build/legacy/queryClient.js +4 -3
- package/build/legacy/queryClient.js.map +1 -1
- package/build/legacy/queryObserver.cjs +1 -1
- package/build/legacy/queryObserver.cjs.map +1 -1
- package/build/legacy/queryObserver.d.cts +1 -1
- package/build/legacy/queryObserver.d.ts +1 -1
- package/build/legacy/queryObserver.js +1 -1
- package/build/legacy/queryObserver.js.map +1 -1
- package/build/legacy/retryer.d.cts +1 -1
- package/build/legacy/retryer.d.ts +1 -1
- package/build/legacy/types.cjs.map +1 -1
- package/build/legacy/types.d.cts +1 -1
- package/build/legacy/types.d.ts +1 -1
- package/build/legacy/utils.cjs.map +1 -1
- package/build/legacy/utils.d.cts +1 -1
- package/build/legacy/utils.d.ts +1 -1
- package/build/legacy/utils.js.map +1 -1
- package/build/modern/hydration.cjs.map +1 -1
- package/build/modern/hydration.d.cts +3 -3
- package/build/modern/hydration.d.ts +3 -3
- package/build/modern/hydration.js.map +1 -1
- package/build/modern/index.cjs +3 -0
- package/build/modern/index.cjs.map +1 -1
- package/build/modern/index.d.cts +1 -1
- package/build/modern/index.d.ts +1 -1
- package/build/modern/index.js +2 -0
- package/build/modern/index.js.map +1 -1
- package/build/modern/infiniteQueryBehavior.cjs +21 -6
- package/build/modern/infiniteQueryBehavior.cjs.map +1 -1
- package/build/modern/infiniteQueryBehavior.d.cts +2 -2
- package/build/modern/infiniteQueryBehavior.d.ts +2 -2
- package/build/modern/infiniteQueryBehavior.js +21 -6
- package/build/modern/infiniteQueryBehavior.js.map +1 -1
- package/build/modern/infiniteQueryObserver.cjs.map +1 -1
- package/build/modern/infiniteQueryObserver.d.cts +3 -3
- package/build/modern/infiniteQueryObserver.d.ts +3 -3
- package/build/modern/infiniteQueryObserver.js.map +1 -1
- package/build/modern/mutation.cjs.map +1 -1
- package/build/modern/mutation.d.cts +1 -1
- package/build/modern/mutation.d.ts +1 -1
- package/build/modern/mutation.js.map +1 -1
- package/build/modern/mutationCache.cjs.map +1 -1
- package/build/modern/mutationCache.d.cts +1 -1
- package/build/modern/mutationCache.d.ts +1 -1
- package/build/modern/mutationCache.js.map +1 -1
- package/build/modern/mutationObserver.d.cts +1 -1
- package/build/modern/mutationObserver.d.ts +1 -1
- package/build/modern/notifyManager.cjs.map +1 -1
- package/build/modern/notifyManager.d.cts +1 -1
- package/build/modern/notifyManager.d.ts +1 -1
- package/build/modern/notifyManager.js.map +1 -1
- package/build/modern/queriesObserver.cjs +6 -8
- package/build/modern/queriesObserver.cjs.map +1 -1
- package/build/modern/queriesObserver.d.cts +11 -11
- package/build/modern/queriesObserver.d.ts +11 -11
- package/build/modern/queriesObserver.js +6 -8
- package/build/modern/queriesObserver.js.map +1 -1
- package/build/modern/query.cjs +10 -2
- package/build/modern/query.cjs.map +1 -1
- package/build/modern/query.d.cts +1 -1
- package/build/modern/query.d.ts +1 -1
- package/build/modern/query.js +10 -2
- package/build/modern/query.js.map +1 -1
- package/build/modern/queryCache.cjs.map +1 -1
- package/build/modern/queryCache.d.cts +1 -1
- package/build/modern/queryCache.d.ts +1 -1
- package/build/modern/queryCache.js.map +1 -1
- package/build/modern/{queryClient-9264ae39.d.ts → queryClient-230e991e.d.ts} +28 -25
- package/build/modern/{queryClient-7060338a.d.ts → queryClient-64e47985.d.ts} +28 -25
- package/build/modern/queryClient.cjs +4 -3
- package/build/modern/queryClient.cjs.map +1 -1
- package/build/modern/queryClient.d.cts +1 -1
- package/build/modern/queryClient.d.ts +1 -1
- package/build/modern/queryClient.js +4 -3
- package/build/modern/queryClient.js.map +1 -1
- package/build/modern/queryObserver.cjs +1 -1
- package/build/modern/queryObserver.cjs.map +1 -1
- package/build/modern/queryObserver.d.cts +1 -1
- package/build/modern/queryObserver.d.ts +1 -1
- package/build/modern/queryObserver.js +1 -1
- package/build/modern/queryObserver.js.map +1 -1
- package/build/modern/retryer.d.cts +1 -1
- package/build/modern/retryer.d.ts +1 -1
- package/build/modern/types.cjs.map +1 -1
- package/build/modern/types.d.cts +1 -1
- package/build/modern/types.d.ts +1 -1
- package/build/modern/utils.cjs.map +1 -1
- package/build/modern/utils.d.cts +1 -1
- package/build/modern/utils.d.ts +1 -1
- package/build/modern/utils.js.map +1 -1
- package/package.json +6 -2
- package/src/hydration.ts +2 -2
- package/src/index.ts +2 -1
- package/src/infiniteQueryBehavior.ts +23 -8
- package/src/infiniteQueryObserver.ts +7 -2
- package/src/mutation.ts +1 -1
- package/src/mutationCache.ts +3 -3
- package/src/notifyManager.ts +3 -3
- package/src/queriesObserver.ts +24 -25
- package/src/query.ts +12 -2
- package/src/queryCache.ts +2 -2
- package/src/queryClient.ts +17 -7
- package/src/queryObserver.ts +1 -1
- package/src/tests/hydration.test.tsx +2 -2
- package/src/tests/infiniteQueryBehavior.test.tsx +4 -4
- package/src/tests/infiniteQueryObserver.test.tsx +36 -7
- package/src/tests/mutations.test.tsx +2 -2
- package/src/tests/queriesObserver.test.tsx +4 -4
- package/src/tests/query.test.tsx +55 -3
- package/src/tests/queryClient.test.tsx +77 -38
- package/src/tests/queryObserver.test.tsx +22 -22
- package/src/tests/utils.test.tsx +2 -2
- package/src/tests/utils.ts +0 -5
- package/src/types.ts +41 -20
- package/src/utils.ts +2 -2
package/src/tests/query.test.tsx
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
891
|
-
const queryFn2 = vi.fn<unknown
|
|
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
|
|
917
|
-
const queryFn2 = vi.fn<unknown
|
|
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
|
|
936
|
-
const queryFn2 = vi.fn<unknown
|
|
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
|
|
956
|
-
const queryFn2 = vi.fn<unknown
|
|
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
|
|
978
|
-
const queryFn2 = vi.fn<unknown
|
|
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
|
|
997
|
-
const queryFn2 = vi.fn<unknown
|
|
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
|
|
1016
|
-
const queryFn2 = vi.fn<unknown
|
|
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
|
|
1035
|
-
const queryFn2 = vi.fn<unknown
|
|
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
|
|
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
|
|
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
|
|
1105
|
-
const queryFn2 = vi.fn<unknown
|
|
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
|
|
1124
|
-
const queryFn2 = vi.fn<unknown
|
|
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
|
|
1143
|
-
const queryFn2 = vi.fn<unknown
|
|
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
|
|
1165
|
-
const queryFn2 = vi.fn<unknown
|
|
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
|
|
1189
|
-
const queryFn2 = vi.fn<unknown
|
|
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
|
|
1311
|
-
const queryFn2 = vi.fn<unknown
|
|
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,
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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<
|
|
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()
|
package/src/tests/utils.test.tsx
CHANGED
|
@@ -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
|
|
package/src/tests/utils.ts
CHANGED
|
@@ -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>,
|