@tanstack/query-core 4.24.10 → 5.0.0-alpha.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 (183) hide show
  1. package/build/lib/focusManager.d.ts +1 -3
  2. package/build/lib/focusManager.esm.js +19 -36
  3. package/build/lib/focusManager.esm.js.map +1 -1
  4. package/build/lib/focusManager.js +19 -38
  5. package/build/lib/focusManager.js.map +1 -1
  6. package/build/lib/focusManager.mjs +19 -36
  7. package/build/lib/focusManager.mjs.map +1 -1
  8. package/build/lib/hydration.esm.js +21 -23
  9. package/build/lib/hydration.esm.js.map +1 -1
  10. package/build/lib/hydration.js +21 -25
  11. package/build/lib/hydration.js.map +1 -1
  12. package/build/lib/hydration.mjs +21 -23
  13. package/build/lib/hydration.mjs.map +1 -1
  14. package/build/lib/index.d.ts +1 -2
  15. package/build/lib/index.esm.js +1 -1
  16. package/build/lib/index.js +2 -8
  17. package/build/lib/index.js.map +1 -1
  18. package/build/lib/index.mjs +1 -1
  19. package/build/lib/infiniteQueryBehavior.d.ts +3 -7
  20. package/build/lib/infiniteQueryBehavior.esm.js +52 -75
  21. package/build/lib/infiniteQueryBehavior.esm.js.map +1 -1
  22. package/build/lib/infiniteQueryBehavior.js +50 -77
  23. package/build/lib/infiniteQueryBehavior.js.map +1 -1
  24. package/build/lib/infiniteQueryBehavior.mjs +52 -75
  25. package/build/lib/infiniteQueryBehavior.mjs.map +1 -1
  26. package/build/lib/infiniteQueryObserver.d.ts +4 -4
  27. package/build/lib/infiniteQueryObserver.esm.js +18 -26
  28. package/build/lib/infiniteQueryObserver.esm.js.map +1 -1
  29. package/build/lib/infiniteQueryObserver.js +18 -28
  30. package/build/lib/infiniteQueryObserver.js.map +1 -1
  31. package/build/lib/infiniteQueryObserver.mjs +18 -26
  32. package/build/lib/infiniteQueryObserver.mjs.map +1 -1
  33. package/build/lib/mutation.d.ts +11 -22
  34. package/build/lib/mutation.esm.js +73 -105
  35. package/build/lib/mutation.esm.js.map +1 -1
  36. package/build/lib/mutation.js +73 -107
  37. package/build/lib/mutation.js.map +1 -1
  38. package/build/lib/mutation.mjs +73 -105
  39. package/build/lib/mutation.mjs.map +1 -1
  40. package/build/lib/mutationCache.d.ts +4 -6
  41. package/build/lib/mutationCache.esm.js +23 -32
  42. package/build/lib/mutationCache.esm.js.map +1 -1
  43. package/build/lib/mutationCache.js +23 -34
  44. package/build/lib/mutationCache.js.map +1 -1
  45. package/build/lib/mutationCache.mjs +23 -32
  46. package/build/lib/mutationCache.mjs.map +1 -1
  47. package/build/lib/mutationObserver.d.ts +4 -9
  48. package/build/lib/mutationObserver.esm.js +43 -72
  49. package/build/lib/mutationObserver.esm.js.map +1 -1
  50. package/build/lib/mutationObserver.js +43 -74
  51. package/build/lib/mutationObserver.js.map +1 -1
  52. package/build/lib/mutationObserver.mjs +43 -72
  53. package/build/lib/mutationObserver.mjs.map +1 -1
  54. package/build/lib/notifyManager.esm.js +7 -17
  55. package/build/lib/notifyManager.esm.js.map +1 -1
  56. package/build/lib/notifyManager.js +7 -19
  57. package/build/lib/notifyManager.js.map +1 -1
  58. package/build/lib/notifyManager.mjs +7 -17
  59. package/build/lib/notifyManager.mjs.map +1 -1
  60. package/build/lib/onlineManager.d.ts +1 -3
  61. package/build/lib/onlineManager.esm.js +16 -30
  62. package/build/lib/onlineManager.esm.js.map +1 -1
  63. package/build/lib/onlineManager.js +16 -32
  64. package/build/lib/onlineManager.js.map +1 -1
  65. package/build/lib/onlineManager.mjs +16 -30
  66. package/build/lib/onlineManager.mjs.map +1 -1
  67. package/build/lib/queriesObserver.d.ts +3 -10
  68. package/build/lib/queriesObserver.esm.js +47 -71
  69. package/build/lib/queriesObserver.esm.js.map +1 -1
  70. package/build/lib/queriesObserver.js +49 -75
  71. package/build/lib/queriesObserver.js.map +1 -1
  72. package/build/lib/queriesObserver.mjs +47 -71
  73. package/build/lib/queriesObserver.mjs.map +1 -1
  74. package/build/lib/query.d.ts +14 -21
  75. package/build/lib/query.esm.js +140 -194
  76. package/build/lib/query.esm.js.map +1 -1
  77. package/build/lib/query.js +139 -195
  78. package/build/lib/query.js.map +1 -1
  79. package/build/lib/query.mjs +140 -194
  80. package/build/lib/query.mjs.map +1 -1
  81. package/build/lib/queryCache.d.ts +12 -7
  82. package/build/lib/queryCache.esm.js +21 -45
  83. package/build/lib/queryCache.esm.js.map +1 -1
  84. package/build/lib/queryCache.js +20 -46
  85. package/build/lib/queryCache.js.map +1 -1
  86. package/build/lib/queryCache.mjs +21 -45
  87. package/build/lib/queryCache.mjs.map +1 -1
  88. package/build/lib/queryClient.d.ts +18 -46
  89. package/build/lib/queryClient.esm.js +137 -216
  90. package/build/lib/queryClient.esm.js.map +1 -1
  91. package/build/lib/queryClient.js +136 -217
  92. package/build/lib/queryClient.js.map +1 -1
  93. package/build/lib/queryClient.mjs +137 -216
  94. package/build/lib/queryClient.mjs.map +1 -1
  95. package/build/lib/queryObserver.d.ts +4 -29
  96. package/build/lib/queryObserver.esm.js +176 -258
  97. package/build/lib/queryObserver.esm.js.map +1 -1
  98. package/build/lib/queryObserver.js +176 -260
  99. package/build/lib/queryObserver.js.map +1 -1
  100. package/build/lib/queryObserver.mjs +176 -258
  101. package/build/lib/queryObserver.mjs.map +1 -1
  102. package/build/lib/removable.d.ts +3 -3
  103. package/build/lib/removable.esm.js +10 -14
  104. package/build/lib/removable.esm.js.map +1 -1
  105. package/build/lib/removable.js +10 -16
  106. package/build/lib/removable.js.map +1 -1
  107. package/build/lib/removable.mjs +10 -14
  108. package/build/lib/removable.mjs.map +1 -1
  109. package/build/lib/retryer.d.ts +5 -5
  110. package/build/lib/retryer.esm.js +27 -44
  111. package/build/lib/retryer.esm.js.map +1 -1
  112. package/build/lib/retryer.js +27 -46
  113. package/build/lib/retryer.js.map +1 -1
  114. package/build/lib/retryer.mjs +27 -44
  115. package/build/lib/retryer.mjs.map +1 -1
  116. package/build/lib/subscribable.esm.js +4 -7
  117. package/build/lib/subscribable.esm.js.map +1 -1
  118. package/build/lib/subscribable.js +4 -9
  119. package/build/lib/subscribable.js.map +1 -1
  120. package/build/lib/subscribable.mjs +4 -7
  121. package/build/lib/subscribable.mjs.map +1 -1
  122. package/build/lib/tests/utils.d.ts +3 -12
  123. package/build/lib/types.d.ts +111 -99
  124. package/build/lib/utils.d.ts +8 -18
  125. package/build/lib/utils.esm.js +39 -132
  126. package/build/lib/utils.esm.js.map +1 -1
  127. package/build/lib/utils.js +42 -144
  128. package/build/lib/utils.js.map +1 -1
  129. package/build/lib/utils.mjs +39 -132
  130. package/build/lib/utils.mjs.map +1 -1
  131. package/build/umd/index.development.js +868 -1398
  132. package/build/umd/index.development.js.map +1 -1
  133. package/build/umd/index.production.js +1 -1
  134. package/build/umd/index.production.js.map +1 -1
  135. package/package.json +1 -1
  136. package/src/focusManager.ts +17 -24
  137. package/src/index.ts +1 -11
  138. package/src/infiniteQueryBehavior.ts +54 -94
  139. package/src/infiniteQueryObserver.ts +10 -12
  140. package/src/mutation.ts +68 -92
  141. package/src/mutationCache.ts +27 -27
  142. package/src/mutationObserver.ts +60 -97
  143. package/src/onlineManager.ts +14 -14
  144. package/src/queriesObserver.ts +50 -54
  145. package/src/query.ts +106 -110
  146. package/src/queryCache.ts +42 -41
  147. package/src/queryClient.ts +155 -434
  148. package/src/queryObserver.ts +155 -192
  149. package/src/removable.ts +13 -13
  150. package/src/retryer.ts +5 -5
  151. package/src/tests/focusManager.test.tsx +25 -25
  152. package/src/tests/hydration.test.tsx +167 -81
  153. package/src/tests/infiniteQueryBehavior.test.tsx +209 -17
  154. package/src/tests/infiniteQueryObserver.test.tsx +6 -2
  155. package/src/tests/mutationCache.test.tsx +127 -127
  156. package/src/tests/mutationObserver.test.tsx +1 -31
  157. package/src/tests/mutations.test.tsx +62 -43
  158. package/src/tests/onlineManager.test.tsx +12 -4
  159. package/src/tests/queriesObserver.test.tsx +41 -77
  160. package/src/tests/query.test.tsx +175 -243
  161. package/src/tests/queryCache.test.tsx +170 -93
  162. package/src/tests/queryClient.test.tsx +229 -378
  163. package/src/tests/queryObserver.test.tsx +23 -147
  164. package/src/tests/utils.test.tsx +84 -29
  165. package/src/tests/utils.ts +9 -18
  166. package/src/types.ts +187 -140
  167. package/src/utils.ts +31 -124
  168. package/build/lib/logger.d.ts +0 -8
  169. package/build/lib/logger.esm.js +0 -4
  170. package/build/lib/logger.esm.js.map +0 -1
  171. package/build/lib/logger.js +0 -8
  172. package/build/lib/logger.js.map +0 -1
  173. package/build/lib/logger.mjs +0 -4
  174. package/build/lib/logger.mjs.map +0 -1
  175. package/build/lib/logger.native.d.ts +0 -6
  176. package/build/lib/logger.native.esm.js +0 -12
  177. package/build/lib/logger.native.esm.js.map +0 -1
  178. package/build/lib/logger.native.js +0 -16
  179. package/build/lib/logger.native.js.map +0 -1
  180. package/build/lib/logger.native.mjs +0 -12
  181. package/build/lib/logger.native.mjs.map +0 -1
  182. package/src/logger.native.ts +0 -11
  183. package/src/logger.ts +0 -9
@@ -1,7 +1,6 @@
1
1
  import { sleep, queryKey, createQueryClient } from './utils'
2
- import type { QueryClient } from '..'
2
+ import { QueryClient } from '..'
3
3
  import { QueryCache, QueryObserver } from '..'
4
- import type { Query } from '.././query'
5
4
  import { waitFor } from '@testing-library/react'
6
5
 
7
6
  describe('queryCache', () => {
@@ -23,7 +22,7 @@ describe('queryCache', () => {
23
22
  const subscriber = jest.fn()
24
23
  const unsubscribe = queryCache.subscribe(subscriber)
25
24
  queryClient.setQueryData(key, 'foo')
26
- const query = queryCache.find(key)
25
+ const query = queryCache.find({ queryKey: key })
27
26
  await sleep(1)
28
27
  expect(subscriber).toHaveBeenCalledWith({ query, type: 'added' })
29
28
  unsubscribe()
@@ -33,7 +32,7 @@ describe('queryCache', () => {
33
32
  const key = queryKey()
34
33
  const callback = jest.fn()
35
34
  queryCache.subscribe(callback)
36
- queryClient.prefetchQuery(key, () => 'data')
35
+ queryClient.prefetchQuery({ queryKey: key, queryFn: () => 'data' })
37
36
  await sleep(100)
38
37
  expect(callback).toHaveBeenCalled()
39
38
  })
@@ -76,8 +75,8 @@ describe('queryCache', () => {
76
75
  const key = queryKey()
77
76
  const callback = jest.fn()
78
77
  queryCache.subscribe(callback)
79
- queryClient.prefetchQuery(key, () => 'data')
80
- const query = queryCache.find(key)
78
+ queryClient.prefetchQuery({ queryKey: key, queryFn: () => 'data' })
79
+ const query = queryCache.find({ queryKey: key })
81
80
  await sleep(100)
82
81
  expect(callback).toHaveBeenCalledWith({ query, type: 'added' })
83
82
  })
@@ -86,26 +85,68 @@ describe('queryCache', () => {
86
85
  const key = queryKey()
87
86
  const callback = jest.fn()
88
87
  queryCache.subscribe(callback)
89
- queryClient.prefetchQuery(key, () => 'data', {
88
+ queryClient.prefetchQuery({
89
+ queryKey: key,
90
+ queryFn: () => 'data',
90
91
  initialData: 'initial',
91
92
  })
92
93
  await sleep(100)
93
94
  expect(callback).toHaveBeenCalled()
94
95
  })
96
+
97
+ test('should be able to limit cache size', async () => {
98
+ const testCache = new QueryCache()
99
+
100
+ const unsubscribe = testCache.subscribe((event) => {
101
+ if (event.type === 'added') {
102
+ if (testCache.getAll().length > 2) {
103
+ testCache
104
+ .findAll({
105
+ type: 'inactive',
106
+ predicate: (q) => q !== event.query,
107
+ })
108
+ .forEach((query) => {
109
+ testCache.remove(query)
110
+ })
111
+ }
112
+ }
113
+ })
114
+
115
+ const testClient = new QueryClient({ queryCache: testCache })
116
+
117
+ await testClient.prefetchQuery({
118
+ queryKey: ['key1'],
119
+ queryFn: () => 'data1',
120
+ })
121
+ expect(testCache.findAll().length).toBe(1)
122
+ await testClient.prefetchQuery({
123
+ queryKey: ['key2'],
124
+ queryFn: () => 'data2',
125
+ })
126
+ expect(testCache.findAll().length).toBe(2)
127
+ await testClient.prefetchQuery({
128
+ queryKey: ['key3'],
129
+ queryFn: () => 'data3',
130
+ })
131
+ expect(testCache.findAll().length).toBe(1)
132
+ expect(testCache.findAll()[0]!.state.data).toBe('data3')
133
+
134
+ unsubscribe()
135
+ })
95
136
  })
96
137
 
97
138
  describe('find', () => {
98
139
  test('find should filter correctly', async () => {
99
140
  const key = queryKey()
100
- await queryClient.prefetchQuery(key, () => 'data1')
101
- const query = queryCache.find(key)!
141
+ await queryClient.prefetchQuery({ queryKey: key, queryFn: () => 'data1' })
142
+ const query = queryCache.find({ queryKey: key })!
102
143
  expect(query).toBeDefined()
103
144
  })
104
145
 
105
146
  test('find should filter correctly with exact set to false', async () => {
106
147
  const key = queryKey()
107
- await queryClient.prefetchQuery(key, () => 'data1')
108
- const query = queryCache.find(key, { exact: false })!
148
+ await queryClient.prefetchQuery({ queryKey: key, queryFn: () => 'data1' })
149
+ const query = queryCache.find({ queryKey: key, exact: false })!
109
150
  expect(query).toBeDefined()
110
151
  })
111
152
  })
@@ -115,65 +156,96 @@ describe('queryCache', () => {
115
156
  const key1 = queryKey()
116
157
  const key2 = queryKey()
117
158
  const keyFetching = queryKey()
118
- await queryClient.prefetchQuery(key1, () => 'data1')
119
- await queryClient.prefetchQuery(key2, () => 'data2')
120
- await queryClient.prefetchQuery([{ a: 'a', b: 'b' }], () => 'data3')
121
- await queryClient.prefetchQuery(['posts', 1], () => 'data4')
122
- queryClient.invalidateQueries(key2)
123
- const query1 = queryCache.find(key1)!
124
- const query2 = queryCache.find(key2)!
125
- const query3 = queryCache.find([{ a: 'a', b: 'b' }])!
126
- const query4 = queryCache.find(['posts', 1])!
127
-
128
- expect(queryCache.findAll(key1)).toEqual([query1])
159
+ await queryClient.prefetchQuery({
160
+ queryKey: key1,
161
+ queryFn: () => 'data1',
162
+ })
163
+ await queryClient.prefetchQuery({
164
+ queryKey: key2,
165
+ queryFn: () => 'data2',
166
+ })
167
+ await queryClient.prefetchQuery({
168
+ queryKey: [{ a: 'a', b: 'b' }],
169
+ queryFn: () => 'data3',
170
+ })
171
+ await queryClient.prefetchQuery({
172
+ queryKey: ['posts', 1],
173
+ queryFn: () => 'data4',
174
+ })
175
+ queryClient.invalidateQueries({ queryKey: key2 })
176
+ const query1 = queryCache.find({ queryKey: key1 })!
177
+ const query2 = queryCache.find({ queryKey: key2 })!
178
+ const query3 = queryCache.find({ queryKey: [{ a: 'a', b: 'b' }] })!
179
+ const query4 = queryCache.find({ queryKey: ['posts', 1] })!
180
+
181
+ expect(queryCache.findAll({ queryKey: key1 })).toEqual([query1])
129
182
  // wrapping in an extra array doesn't yield the same results anymore since v4 because keys need to be an array
130
- expect(queryCache.findAll([key1])).toEqual([])
183
+ expect(queryCache.findAll({ queryKey: [key1] })).toEqual([])
131
184
  expect(queryCache.findAll()).toEqual([query1, query2, query3, query4])
132
185
  expect(queryCache.findAll({})).toEqual([query1, query2, query3, query4])
133
- expect(queryCache.findAll(key1, { type: 'inactive' })).toEqual([query1])
134
- expect(queryCache.findAll(key1, { type: 'active' })).toEqual([])
135
- expect(queryCache.findAll(key1, { stale: true })).toEqual([])
136
- expect(queryCache.findAll(key1, { stale: false })).toEqual([query1])
186
+ expect(queryCache.findAll({ queryKey: key1, type: 'inactive' })).toEqual([
187
+ query1,
188
+ ])
189
+ expect(queryCache.findAll({ queryKey: key1, type: 'active' })).toEqual([])
190
+ expect(queryCache.findAll({ queryKey: key1, stale: true })).toEqual([])
191
+ expect(queryCache.findAll({ queryKey: key1, stale: false })).toEqual([
192
+ query1,
193
+ ])
137
194
  expect(
138
- queryCache.findAll(key1, { stale: false, type: 'active' }),
195
+ queryCache.findAll({ queryKey: key1, stale: false, type: 'active' }),
139
196
  ).toEqual([])
140
197
  expect(
141
- queryCache.findAll(key1, { stale: false, type: 'inactive' }),
198
+ queryCache.findAll({ queryKey: key1, stale: false, type: 'inactive' }),
142
199
  ).toEqual([query1])
143
200
  expect(
144
- queryCache.findAll(key1, {
201
+ queryCache.findAll({
202
+ queryKey: key1,
145
203
  stale: false,
146
204
  type: 'inactive',
147
205
  exact: true,
148
206
  }),
149
207
  ).toEqual([query1])
150
208
 
151
- expect(queryCache.findAll(key2)).toEqual([query2])
152
- expect(queryCache.findAll(key2, { stale: undefined })).toEqual([query2])
153
- expect(queryCache.findAll(key2, { stale: true })).toEqual([query2])
154
- expect(queryCache.findAll(key2, { stale: false })).toEqual([])
155
- expect(queryCache.findAll([{ b: 'b' }])).toEqual([query3])
156
- expect(queryCache.findAll([{ a: 'a' }], { exact: false })).toEqual([
157
- query3,
209
+ expect(queryCache.findAll({ queryKey: key2 })).toEqual([query2])
210
+ expect(queryCache.findAll({ queryKey: key2, stale: undefined })).toEqual([
211
+ query2,
158
212
  ])
159
- expect(queryCache.findAll([{ a: 'a' }], { exact: true })).toEqual([])
160
- expect(queryCache.findAll([{ a: 'a', b: 'b' }], { exact: true })).toEqual(
161
- [query3],
162
- )
163
- expect(queryCache.findAll([{ a: 'a', b: 'b' }])).toEqual([query3])
164
- expect(queryCache.findAll([{ a: 'a', b: 'b', c: 'c' }])).toEqual([])
165
- expect(queryCache.findAll([{ a: 'a' }], { stale: false })).toEqual([
166
- query3,
213
+ expect(queryCache.findAll({ queryKey: key2, stale: true })).toEqual([
214
+ query2,
167
215
  ])
168
- expect(queryCache.findAll([{ a: 'a' }], { stale: true })).toEqual([])
169
- expect(queryCache.findAll([{ a: 'a' }], { type: 'active' })).toEqual([])
170
- expect(queryCache.findAll([{ a: 'a' }], { type: 'inactive' })).toEqual([
216
+ expect(queryCache.findAll({ queryKey: key2, stale: false })).toEqual([])
217
+ expect(queryCache.findAll({ queryKey: [{ b: 'b' }] })).toEqual([query3])
218
+ expect(
219
+ queryCache.findAll({ queryKey: [{ a: 'a' }], exact: false }),
220
+ ).toEqual([query3])
221
+ expect(
222
+ queryCache.findAll({ queryKey: [{ a: 'a' }], exact: true }),
223
+ ).toEqual([])
224
+ expect(
225
+ queryCache.findAll({ queryKey: [{ a: 'a', b: 'b' }], exact: true }),
226
+ ).toEqual([query3])
227
+ expect(queryCache.findAll({ queryKey: [{ a: 'a', b: 'b' }] })).toEqual([
171
228
  query3,
172
229
  ])
230
+ expect(
231
+ queryCache.findAll({ queryKey: [{ a: 'a', b: 'b', c: 'c' }] }),
232
+ ).toEqual([])
233
+ expect(
234
+ queryCache.findAll({ queryKey: [{ a: 'a' }], stale: false }),
235
+ ).toEqual([query3])
236
+ expect(
237
+ queryCache.findAll({ queryKey: [{ a: 'a' }], stale: true }),
238
+ ).toEqual([])
239
+ expect(
240
+ queryCache.findAll({ queryKey: [{ a: 'a' }], type: 'active' }),
241
+ ).toEqual([])
242
+ expect(
243
+ queryCache.findAll({ queryKey: [{ a: 'a' }], type: 'inactive' }),
244
+ ).toEqual([query3])
173
245
  expect(
174
246
  queryCache.findAll({ predicate: (query) => query === query3 }),
175
247
  ).toEqual([query3])
176
- expect(queryCache.findAll(['posts'])).toEqual([query4])
248
+ expect(queryCache.findAll({ queryKey: ['posts'] })).toEqual([query4])
177
249
 
178
250
  expect(queryCache.findAll({ fetchStatus: 'idle' })).toEqual([
179
251
  query1,
@@ -181,16 +253,19 @@ describe('queryCache', () => {
181
253
  query3,
182
254
  query4,
183
255
  ])
184
- expect(queryCache.findAll(key2, { fetchStatus: undefined })).toEqual([
185
- query2,
186
- ])
187
-
188
- const promise = queryClient.prefetchQuery(keyFetching, async () => {
189
- await sleep(20)
190
- return 'dataFetching'
256
+ expect(
257
+ queryCache.findAll({ queryKey: key2, fetchStatus: undefined }),
258
+ ).toEqual([query2])
259
+
260
+ const promise = queryClient.prefetchQuery({
261
+ queryKey: keyFetching,
262
+ queryFn: async () => {
263
+ await sleep(20)
264
+ return 'dataFetching'
265
+ },
191
266
  })
192
267
  expect(queryCache.findAll({ fetchStatus: 'fetching' })).toEqual([
193
- queryCache.find(keyFetching),
268
+ queryCache.find({ queryKey: keyFetching }),
194
269
  ])
195
270
  await promise
196
271
  expect(queryCache.findAll({ fetchStatus: 'fetching' })).toEqual([])
@@ -199,8 +274,14 @@ describe('queryCache', () => {
199
274
  test('should return all the queries when no filters are defined', async () => {
200
275
  const key1 = queryKey()
201
276
  const key2 = queryKey()
202
- await queryClient.prefetchQuery(key1, () => 'data1')
203
- await queryClient.prefetchQuery(key2, () => 'data2')
277
+ await queryClient.prefetchQuery({
278
+ queryKey: key1,
279
+ queryFn: () => 'data1',
280
+ })
281
+ await queryClient.prefetchQuery({
282
+ queryKey: key2,
283
+ queryFn: () => 'data2',
284
+ })
204
285
  expect(queryCache.findAll().length).toBe(2)
205
286
  })
206
287
  })
@@ -211,10 +292,11 @@ describe('queryCache', () => {
211
292
  const onError = jest.fn()
212
293
  const testCache = new QueryCache({ onError })
213
294
  const testClient = createQueryClient({ queryCache: testCache })
214
- await testClient.prefetchQuery(key, () =>
215
- Promise.reject<unknown>('error'),
216
- )
217
- const query = testCache.find(key)
295
+ await testClient.prefetchQuery({
296
+ queryKey: key,
297
+ queryFn: () => Promise.reject<unknown>('error'),
298
+ })
299
+ const query = testCache.find({ queryKey: key })
218
300
  expect(onError).toHaveBeenCalledWith('error', query)
219
301
  })
220
302
  })
@@ -225,48 +307,43 @@ describe('queryCache', () => {
225
307
  const onSuccess = jest.fn()
226
308
  const testCache = new QueryCache({ onSuccess })
227
309
  const testClient = createQueryClient({ queryCache: testCache })
228
- await testClient.prefetchQuery(key, () => Promise.resolve({ data: 5 }))
229
- const query = testCache.find(key)
310
+ await testClient.prefetchQuery({
311
+ queryKey: key,
312
+ queryFn: () => Promise.resolve({ data: 5 }),
313
+ })
314
+ const query = testCache.find({ queryKey: key })
230
315
  expect(onSuccess).toHaveBeenCalledWith({ data: 5 }, query)
231
316
  })
232
317
  })
233
318
 
234
- describe('QueryCache.add', () => {
235
- test('should not try to add a query already added to the cache', async () => {
236
- const key = queryKey()
237
- const hash = `["${key}"]`
238
-
239
- await queryClient.prefetchQuery(key, () => 'data1')
319
+ describe('QueryCacheConfig.createStore', () => {
320
+ test('should call createStore', async () => {
321
+ const createStore = jest.fn().mockImplementation(() => new Map())
322
+ new QueryCache({ createStore })
323
+ expect(createStore).toHaveBeenCalledWith()
324
+ })
240
325
 
241
- // Directly add the query from the cache
242
- // to simulate a race condition
243
- const query = queryCache['queriesMap'][hash] as Query
244
- const queryClone = Object.assign({}, query)
326
+ test('should use created store', async () => {
327
+ const store = new Map()
328
+ const spy = jest.spyOn(store, 'get')
245
329
 
246
- // No error should be thrown when trying to add the query
247
- queryCache.add(queryClone)
248
- expect(queryCache['queries'].length).toEqual(1)
330
+ new QueryCache({ createStore: () => store }).get('key')
249
331
 
250
- // Clean-up to avoid an error when queryClient.clear()
251
- delete queryCache['queriesMap'][hash]
332
+ expect(spy).toHaveBeenCalledTimes(1)
252
333
  })
334
+ })
253
335
 
254
- describe('QueryCache.remove', () => {
255
- test('should not try to remove a query already removed from the cache', async () => {
256
- const key = queryKey()
257
- const hash = `["${key}"]`
336
+ describe('QueryCache.add', () => {
337
+ test('should not try to add a query already added to the cache', async () => {
338
+ const key = queryKey()
258
339
 
259
- await queryClient.prefetchQuery(key, () => 'data1')
340
+ await queryClient.prefetchQuery({ queryKey: key, queryFn: () => 'data1' })
260
341
 
261
- // Directly remove the query from the cache
262
- // to simulate a race condition
263
- const query = queryCache['queriesMap'][hash] as Query
264
- const queryClone = Object.assign({}, query)
265
- delete queryCache['queriesMap'][hash]
342
+ const query = queryCache.findAll()[0]!
343
+ const queryClone = Object.assign({}, query)
266
344
 
267
- // No error should be thrown when trying to remove the query
268
- expect(() => queryCache.remove(queryClone)).not.toThrow()
269
- })
345
+ queryCache.add(queryClone)
346
+ expect(queryCache.getAll().length).toEqual(1)
270
347
  })
271
348
  })
272
349
  })