@tanstack/solid-query 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 (158) hide show
  1. package/build/cjs/index.js +298 -0
  2. package/build/cjs/index.js.map +1 -0
  3. package/build/esm/index.js +283 -0
  4. package/build/esm/index.js.map +1 -0
  5. package/build/source/QueryClientProvider.jsx +21 -0
  6. package/build/source/__tests__/QueryClientProvider.test.jsx +120 -0
  7. package/build/{solid → source}/__tests__/createInfiniteQuery.test.jsx +228 -372
  8. package/build/{solid → source}/__tests__/createMutation.test.jsx +174 -165
  9. package/build/{solid → source}/__tests__/createQueries.test.jsx +86 -367
  10. package/build/{solid → source}/__tests__/createQuery.test.jsx +991 -943
  11. package/build/{solid → source}/__tests__/createQuery.types.test.jsx +35 -24
  12. package/build/{solid → source}/__tests__/suspense.test.jsx +177 -148
  13. package/build/{solid → source}/__tests__/transition.test.jsx +7 -4
  14. package/build/{solid → source}/__tests__/useIsFetching.test.jsx +68 -85
  15. package/build/{solid → source}/__tests__/useIsMutating.test.jsx +78 -93
  16. package/build/{solid → source}/__tests__/utils.jsx +3 -9
  17. package/build/source/createBaseQuery.js +147 -0
  18. package/build/source/createInfiniteQuery.js +6 -0
  19. package/build/{solid → source}/createMutation.js +7 -9
  20. package/build/source/createQueries.js +32 -0
  21. package/build/source/createQuery.js +6 -0
  22. package/build/{solid → source}/index.js +5 -3
  23. package/build/source/setBatchUpdatesFn.js +3 -0
  24. package/build/source/useIsFetching.js +12 -0
  25. package/build/source/useIsMutating.js +12 -0
  26. package/build/source/utils.js +7 -0
  27. package/build/types/QueryClientProvider.d.ts +9 -0
  28. package/build/{lib → types}/__tests__/utils.d.ts +3 -8
  29. package/build/types/createBaseQuery.d.ts +4 -0
  30. package/build/types/createInfiniteQuery.d.ts +3 -0
  31. package/build/types/createMutation.d.ts +3 -0
  32. package/build/{lib → types}/createQueries.d.ts +10 -8
  33. package/build/types/createQuery.d.ts +11 -0
  34. package/build/{lib → types}/index.d.ts +4 -3
  35. package/build/types/setBatchUpdatesFn.d.ts +1 -0
  36. package/build/types/types.d.ts +33 -0
  37. package/build/types/useIsFetching.d.ts +8 -0
  38. package/build/types/useIsMutating.d.ts +8 -0
  39. package/build/types/utils.d.ts +1 -0
  40. package/build/umd/index.js +2 -0
  41. package/build/umd/index.js.map +1 -0
  42. package/package.json +25 -17
  43. package/src/QueryClientProvider.tsx +17 -86
  44. package/src/__tests__/QueryClientProvider.test.tsx +37 -140
  45. package/src/__tests__/createInfiniteQuery.test.tsx +277 -508
  46. package/src/__tests__/createMutation.test.tsx +177 -225
  47. package/src/__tests__/createQueries.test.tsx +180 -528
  48. package/src/__tests__/createQuery.test.tsx +970 -1200
  49. package/src/__tests__/createQuery.types.test.tsx +30 -25
  50. package/src/__tests__/suspense.test.tsx +141 -178
  51. package/src/__tests__/transition.test.tsx +7 -4
  52. package/src/__tests__/useIsFetching.test.tsx +77 -122
  53. package/src/__tests__/useIsMutating.test.tsx +83 -128
  54. package/src/__tests__/utils.tsx +4 -11
  55. package/src/createBaseQuery.ts +148 -60
  56. package/src/createInfiniteQuery.ts +15 -94
  57. package/src/createMutation.ts +9 -63
  58. package/src/createQueries.ts +44 -55
  59. package/src/createQuery.ts +42 -127
  60. package/src/index.ts +6 -3
  61. package/src/setBatchUpdatesFn.ts +4 -0
  62. package/src/types.ts +81 -75
  63. package/src/useIsFetching.ts +12 -44
  64. package/src/useIsMutating.ts +13 -29
  65. package/src/utils.ts +5 -79
  66. package/build/lib/QueryClientProvider.d.ts +0 -24
  67. package/build/lib/QueryClientProvider.esm.js +0 -74
  68. package/build/lib/QueryClientProvider.esm.js.map +0 -1
  69. package/build/lib/QueryClientProvider.js +0 -80
  70. package/build/lib/QueryClientProvider.js.map +0 -1
  71. package/build/lib/QueryClientProvider.mjs +0 -74
  72. package/build/lib/QueryClientProvider.mjs.map +0 -1
  73. package/build/lib/createBaseQuery.d.ts +0 -4
  74. package/build/lib/createBaseQuery.esm.js +0 -93
  75. package/build/lib/createBaseQuery.esm.js.map +0 -1
  76. package/build/lib/createBaseQuery.js +0 -97
  77. package/build/lib/createBaseQuery.js.map +0 -1
  78. package/build/lib/createBaseQuery.mjs +0 -93
  79. package/build/lib/createBaseQuery.mjs.map +0 -1
  80. package/build/lib/createInfiniteQuery.d.ts +0 -5
  81. package/build/lib/createInfiniteQuery.esm.js +0 -20
  82. package/build/lib/createInfiniteQuery.esm.js.map +0 -1
  83. package/build/lib/createInfiniteQuery.js +0 -24
  84. package/build/lib/createInfiniteQuery.js.map +0 -1
  85. package/build/lib/createInfiniteQuery.mjs +0 -20
  86. package/build/lib/createInfiniteQuery.mjs.map +0 -1
  87. package/build/lib/createMutation.d.ts +0 -6
  88. package/build/lib/createMutation.esm.js +0 -45
  89. package/build/lib/createMutation.esm.js.map +0 -1
  90. package/build/lib/createMutation.js +0 -49
  91. package/build/lib/createMutation.js.map +0 -1
  92. package/build/lib/createMutation.mjs +0 -45
  93. package/build/lib/createMutation.mjs.map +0 -1
  94. package/build/lib/createQueries.esm.js +0 -54
  95. package/build/lib/createQueries.esm.js.map +0 -1
  96. package/build/lib/createQueries.js +0 -58
  97. package/build/lib/createQueries.js.map +0 -1
  98. package/build/lib/createQueries.mjs +0 -54
  99. package/build/lib/createQueries.mjs.map +0 -1
  100. package/build/lib/createQuery.d.ts +0 -23
  101. package/build/lib/createQuery.esm.js +0 -25
  102. package/build/lib/createQuery.esm.js.map +0 -1
  103. package/build/lib/createQuery.js +0 -29
  104. package/build/lib/createQuery.js.map +0 -1
  105. package/build/lib/createQuery.mjs +0 -25
  106. package/build/lib/createQuery.mjs.map +0 -1
  107. package/build/lib/index.esm.js +0 -9
  108. package/build/lib/index.esm.js.map +0 -1
  109. package/build/lib/index.js +0 -31
  110. package/build/lib/index.js.map +0 -1
  111. package/build/lib/index.mjs +0 -9
  112. package/build/lib/index.mjs.map +0 -1
  113. package/build/lib/types.d.ts +0 -47
  114. package/build/lib/useIsFetching.d.ts +0 -7
  115. package/build/lib/useIsFetching.esm.js +0 -29
  116. package/build/lib/useIsFetching.esm.js.map +0 -1
  117. package/build/lib/useIsFetching.js +0 -33
  118. package/build/lib/useIsFetching.js.map +0 -1
  119. package/build/lib/useIsFetching.mjs +0 -29
  120. package/build/lib/useIsFetching.mjs.map +0 -1
  121. package/build/lib/useIsMutating.d.ts +0 -8
  122. package/build/lib/useIsMutating.esm.js +0 -22
  123. package/build/lib/useIsMutating.esm.js.map +0 -1
  124. package/build/lib/useIsMutating.js +0 -26
  125. package/build/lib/useIsMutating.js.map +0 -1
  126. package/build/lib/useIsMutating.mjs +0 -22
  127. package/build/lib/useIsMutating.mjs.map +0 -1
  128. package/build/lib/utils.d.ts +0 -14
  129. package/build/lib/utils.esm.js +0 -63
  130. package/build/lib/utils.esm.js.map +0 -1
  131. package/build/lib/utils.js +0 -72
  132. package/build/lib/utils.js.map +0 -1
  133. package/build/lib/utils.mjs +0 -63
  134. package/build/lib/utils.mjs.map +0 -1
  135. package/build/solid/QueryClientProvider.jsx +0 -49
  136. package/build/solid/__tests__/QueryClientProvider.test.jsx +0 -185
  137. package/build/solid/createBaseQuery.js +0 -81
  138. package/build/solid/createInfiniteQuery.js +0 -16
  139. package/build/solid/createQueries.js +0 -39
  140. package/build/solid/createQuery.js +0 -16
  141. package/build/solid/useIsFetching.js +0 -23
  142. package/build/solid/useIsMutating.js +0 -16
  143. package/build/solid/utils.js +0 -45
  144. package/build/umd/index.development.js +0 -3577
  145. package/build/umd/index.development.js.map +0 -1
  146. package/build/umd/index.production.js +0 -2
  147. package/build/umd/index.production.js.map +0 -1
  148. /package/build/{solid → source}/types.js +0 -0
  149. /package/build/{lib → types}/__tests__/QueryClientProvider.test.d.ts +0 -0
  150. /package/build/{lib → types}/__tests__/createInfiniteQuery.test.d.ts +0 -0
  151. /package/build/{lib → types}/__tests__/createMutation.test.d.ts +0 -0
  152. /package/build/{lib → types}/__tests__/createQueries.test.d.ts +0 -0
  153. /package/build/{lib → types}/__tests__/createQuery.test.d.ts +0 -0
  154. /package/build/{lib → types}/__tests__/createQuery.types.test.d.ts +0 -0
  155. /package/build/{lib → types}/__tests__/suspense.test.d.ts +0 -0
  156. /package/build/{lib → types}/__tests__/transition.test.d.ts +0 -0
  157. /package/build/{lib → types}/__tests__/useIsFetching.test.d.ts +0 -0
  158. /package/build/{lib → types}/__tests__/useIsMutating.test.d.ts +0 -0
@@ -11,16 +11,19 @@ describe("useQuery's in Suspense mode", () => {
11
11
  let count = 0;
12
12
  let renders = 0;
13
13
  function Page() {
14
- const [stateKey, setStateKey] = createSignal(key());
15
- const state = createQuery(stateKey, async () => {
16
- count++;
17
- await sleep(10);
18
- return count;
19
- }, { suspense: true });
14
+ const [stateKey, setStateKey] = createSignal(key);
15
+ const state = createQuery(() => ({
16
+ queryKey: stateKey(),
17
+ queryFn: async () => {
18
+ count++;
19
+ await sleep(10);
20
+ return count;
21
+ },
22
+ }));
20
23
  createRenderEffect(() => {
21
24
  states.push({ ...state });
22
25
  });
23
- createRenderEffect(on([() => ({ ...state }), key], () => {
26
+ createRenderEffect(on([() => ({ ...state }), () => key], () => {
24
27
  renders++;
25
28
  }));
26
29
  return (<div>
@@ -37,9 +40,6 @@ describe("useQuery's in Suspense mode", () => {
37
40
  fireEvent.click(screen.getByLabelText('toggle'));
38
41
  await waitFor(() => screen.getByText('data: 2'));
39
42
  expect(renders).toBe(4);
40
- // TODO(lukemurray): verify that this expectation is valid. this is 2 in
41
- // react, but 4 in solid, because in solid suspense is triggered on read and
42
- // the component needs to render in order to trigger suspense.
43
43
  expect(states.length).toBe(4);
44
44
  expect(states[1]).toMatchObject({ data: 1, status: 'success' });
45
45
  expect(states[3]).toMatchObject({ data: 2, status: 'success' });
@@ -49,13 +49,16 @@ describe("useQuery's in Suspense mode", () => {
49
49
  const states = [];
50
50
  function Page() {
51
51
  const [multiplier, setMultiplier] = createSignal(1);
52
- const state = createInfiniteQuery(() => [`${key()}_${multiplier()}`], async ({ pageParam = 1 }) => {
53
- await sleep(10);
54
- return Number(pageParam * multiplier());
55
- }, {
52
+ const state = createInfiniteQuery(() => ({
53
+ queryKey: [`${key}_${multiplier()}`],
54
+ queryFn: async ({ pageParam }) => {
55
+ await sleep(10);
56
+ return Number(pageParam * multiplier());
57
+ },
58
+ defaultPageParam: 1,
56
59
  suspense: true,
57
60
  getNextPageParam: (lastPage) => lastPage + 1,
58
- });
61
+ }));
59
62
  createRenderEffect(() => {
60
63
  states.push({ ...state });
61
64
  });
@@ -74,7 +77,7 @@ describe("useQuery's in Suspense mode", () => {
74
77
  // occurs on read.
75
78
  expect(states.length).toBe(2);
76
79
  expect(states[1]).toMatchObject({
77
- data: { pages: [1], pageParams: [undefined] },
80
+ data: { pages: [1], pageParams: [1] },
78
81
  status: 'success',
79
82
  });
80
83
  fireEvent.click(screen.getByText('next'));
@@ -82,7 +85,7 @@ describe("useQuery's in Suspense mode", () => {
82
85
  // TODO(lukemurray): in react this is 2 and in solid it is 4
83
86
  expect(states.length).toBe(4);
84
87
  expect(states[3]).toMatchObject({
85
- data: { pages: [2], pageParams: [undefined] },
88
+ data: { pages: [2], pageParams: [1] },
86
89
  status: 'success',
87
90
  });
88
91
  });
@@ -94,7 +97,7 @@ describe("useQuery's in Suspense mode", () => {
94
97
  return 'data';
95
98
  });
96
99
  function Page() {
97
- createQuery(() => [key()], queryFn, { suspense: true });
100
+ createQuery(() => ({ queryKey: [key], queryFn, suspense: true }));
98
101
  return <>rendered</>;
99
102
  }
100
103
  render(() => (<QueryClientProvider client={queryClient}>
@@ -108,10 +111,13 @@ describe("useQuery's in Suspense mode", () => {
108
111
  it('should remove query instance when component unmounted', async () => {
109
112
  const key = queryKey();
110
113
  function Page() {
111
- createQuery(key, () => {
112
- sleep(10);
113
- return 'data';
114
- }, { suspense: true });
114
+ createQuery(() => ({
115
+ queryKey: key,
116
+ queryFn: () => {
117
+ sleep(10);
118
+ return 'data';
119
+ },
120
+ }));
115
121
  return <>rendered</>;
116
122
  }
117
123
  function App() {
@@ -125,26 +131,28 @@ describe("useQuery's in Suspense mode", () => {
125
131
  <App />
126
132
  </QueryClientProvider>));
127
133
  expect(screen.queryByText('rendered')).toBeNull();
128
- expect(queryCache.find(key())).toBeFalsy();
134
+ expect(queryCache.find({ queryKey: key })).toBeFalsy();
129
135
  fireEvent.click(screen.getByLabelText('toggle'));
130
136
  await waitFor(() => screen.getByText('rendered'));
131
- expect(queryCache.find(key())?.getObserversCount()).toBe(1);
137
+ expect(queryCache.find({ queryKey: key })?.getObserversCount()).toBe(1);
132
138
  fireEvent.click(screen.getByLabelText('toggle'));
133
139
  expect(screen.queryByText('rendered')).toBeNull();
134
- expect(queryCache.find(key())?.getObserversCount()).toBe(0);
140
+ expect(queryCache.find({ queryKey: key })?.getObserversCount()).toBe(0);
135
141
  });
136
142
  it('should call onSuccess on the first successful call', async () => {
137
143
  const key = queryKey();
138
144
  const successFn = jest.fn();
139
145
  function Page() {
140
- createQuery(() => [key()], async () => {
141
- await sleep(10);
142
- return key();
143
- }, {
146
+ createQuery(() => ({
147
+ queryKey: [key],
148
+ queryFn: async () => {
149
+ await sleep(10);
150
+ return key;
151
+ },
144
152
  suspense: true,
145
153
  select: () => 'selected',
146
154
  onSuccess: successFn,
147
- });
155
+ }));
148
156
  return <>rendered</>;
149
157
  }
150
158
  render(() => (<QueryClientProvider client={queryClient}>
@@ -161,23 +169,25 @@ describe("useQuery's in Suspense mode", () => {
161
169
  const successFn1 = jest.fn();
162
170
  const successFn2 = jest.fn();
163
171
  function FirstComponent() {
164
- createQuery(key, () => {
165
- sleep(10);
166
- return 'data';
167
- }, {
168
- suspense: true,
172
+ createQuery(() => ({
173
+ queryKey: key,
174
+ queryFn: () => {
175
+ sleep(10);
176
+ return 'data';
177
+ },
169
178
  onSuccess: successFn1,
170
- });
179
+ }));
171
180
  return <span>first</span>;
172
181
  }
173
182
  function SecondComponent() {
174
- createQuery(key, () => {
175
- sleep(10);
176
- return 'data';
177
- }, {
178
- suspense: true,
183
+ createQuery(() => ({
184
+ queryKey: key,
185
+ queryFn: () => {
186
+ sleep(10);
187
+ return 'data';
188
+ },
179
189
  onSuccess: successFn2,
180
- });
190
+ }));
181
191
  return <span>second</span>;
182
192
  }
183
193
  render(() => (<QueryClientProvider client={queryClient}>
@@ -196,18 +206,20 @@ describe("useQuery's in Suspense mode", () => {
196
206
  const key = queryKey();
197
207
  let succeed = false;
198
208
  function Page() {
199
- const state = createQuery(key, async () => {
200
- await sleep(10);
201
- if (!succeed) {
202
- throw new Error('Suspense Error Bingo');
203
- }
204
- else {
205
- return 'data';
206
- }
207
- }, {
209
+ const state = createQuery(() => ({
210
+ queryKey: key,
211
+ queryFn: async () => {
212
+ await sleep(10);
213
+ if (!succeed) {
214
+ throw new Error('Suspense Error Bingo');
215
+ }
216
+ else {
217
+ return 'data';
218
+ }
219
+ },
208
220
  retryDelay: 10,
209
221
  suspense: true,
210
- });
222
+ }));
211
223
  // Suspense only triggers if used in JSX
212
224
  return (<Show when={state.data}>
213
225
  <div>rendered</div>
@@ -238,18 +250,20 @@ describe("useQuery's in Suspense mode", () => {
238
250
  const key = queryKey();
239
251
  let succeed = false;
240
252
  function Page() {
241
- const state = createQuery(key, async () => {
242
- await sleep(10);
243
- if (!succeed) {
244
- throw new Error('Suspense Error Bingo');
245
- }
246
- else {
247
- return 'data';
248
- }
249
- }, {
253
+ const state = createQuery(() => ({
254
+ queryKey: key,
255
+ queryFn: async () => {
256
+ await sleep(10);
257
+ if (!succeed) {
258
+ throw new Error('Suspense Error Bingo');
259
+ }
260
+ else {
261
+ return 'data';
262
+ }
263
+ },
250
264
  retry: false,
251
265
  suspense: true,
252
- });
266
+ }));
253
267
  // Suspense only triggers if used in JSX
254
268
  return (<Show when={state.data}>
255
269
  <div>rendered</div>
@@ -283,15 +297,17 @@ describe("useQuery's in Suspense mode", () => {
283
297
  const key = queryKey();
284
298
  let count = 0;
285
299
  function Component() {
286
- const result = createQuery(key, async () => {
287
- await sleep(100);
288
- count++;
289
- return count;
290
- }, {
300
+ const result = createQuery(() => ({
301
+ queryKey: key,
302
+ queryFn: async () => {
303
+ await sleep(100);
304
+ count++;
305
+ return count;
306
+ },
291
307
  retry: false,
292
308
  suspense: true,
293
309
  staleTime: 0,
294
- });
310
+ }));
295
311
  return (<div>
296
312
  <span>data: {result.data}</span>
297
313
  <span>fetching: {result.isFetching ? 'true' : 'false'}</span>
@@ -326,20 +342,22 @@ describe("useQuery's in Suspense mode", () => {
326
342
  const key1 = queryKey();
327
343
  const key2 = queryKey();
328
344
  function Component(props) {
329
- const result = createQuery(() => props.queryKey, async () => {
330
- await sleep(100);
331
- return props.queryKey;
332
- }, {
345
+ const result = createQuery(() => ({
346
+ queryKey: props.queryKey,
347
+ queryFn: async () => {
348
+ await sleep(100);
349
+ return props.queryKey;
350
+ },
333
351
  retry: false,
334
352
  suspense: true,
335
- });
353
+ }));
336
354
  return <div>data: {result.data}</div>;
337
355
  }
338
356
  function Page() {
339
- const [key, setKey] = createSignal(key1());
357
+ const [key, setKey] = createSignal(key1);
340
358
  return (<div>
341
359
  <button onClick={() => {
342
- setKey(key2());
360
+ setKey(key2);
343
361
  }}>
344
362
  switch
345
363
  </button>
@@ -352,24 +370,23 @@ describe("useQuery's in Suspense mode", () => {
352
370
  <Page />
353
371
  </QueryClientProvider>));
354
372
  await waitFor(() => screen.getByText('Loading...'));
355
- await waitFor(() => screen.getByText(`data: ${key1()}`));
373
+ await waitFor(() => screen.getByText(`data: ${key1}`));
356
374
  fireEvent.click(screen.getByText('switch'));
357
375
  await waitFor(() => screen.getByText('Loading...'));
358
- await waitFor(() => screen.getByText(`data: ${key2()}`));
359
- expect(
360
- // @ts-expect-error
361
- queryClient.getQueryCache().find(key2()).observers[0].listeners.length).toBe(1);
376
+ await waitFor(() => screen.getByText(`data: ${key2}`));
362
377
  });
363
378
  it('should throw errors to the error boundary by default', async () => {
364
379
  const key = queryKey();
365
380
  function Page() {
366
- const state = createQuery(key, async () => {
367
- await sleep(10);
368
- throw new Error('Suspense Error a1x');
369
- }, {
381
+ const state = createQuery(() => ({
382
+ queryKey: key,
383
+ queryFn: async () => {
384
+ await sleep(10);
385
+ throw new Error('Suspense Error a1x');
386
+ },
370
387
  retry: false,
371
388
  suspense: true,
372
- });
389
+ }));
373
390
  // read state.data to trigger suspense.
374
391
  createRenderEffect(() => {
375
392
  // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- trigger suspense
@@ -392,17 +409,18 @@ describe("useQuery's in Suspense mode", () => {
392
409
  await waitFor(() => screen.getByText('Loading...'));
393
410
  await waitFor(() => screen.getByText('error boundary'));
394
411
  });
395
- it('should not throw errors to the error boundary when useErrorBoundary: false', async () => {
412
+ it('should not throw errors to the error boundary when throwErrors: false', async () => {
396
413
  const key = queryKey();
397
414
  function Page() {
398
- const state = createQuery(key, async () => {
399
- await sleep(10);
400
- throw new Error('Suspense Error a2x');
401
- }, {
415
+ const state = createQuery(() => ({
416
+ queryKey: key,
417
+ queryFn: async () => {
418
+ await sleep(10);
419
+ throw new Error('Suspense Error a2x');
420
+ },
402
421
  retry: false,
403
- suspense: true,
404
- useErrorBoundary: false,
405
- });
422
+ throwErrors: false,
423
+ }));
406
424
  // read state.data to trigger suspense.
407
425
  createRenderEffect(() => {
408
426
  // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- trigger suspense
@@ -425,17 +443,18 @@ describe("useQuery's in Suspense mode", () => {
425
443
  await waitFor(() => screen.getByText('Loading...'));
426
444
  await waitFor(() => screen.getByText('rendered'));
427
445
  });
428
- it('should not throw errors to the error boundary when a useErrorBoundary function returns true', async () => {
446
+ it('should throw errors to the error boundary when a throwErrors function returns true', async () => {
429
447
  const key = queryKey();
430
448
  function Page() {
431
- const state = createQuery(key, async () => {
432
- await sleep(10);
433
- return Promise.reject('Remote Error');
434
- }, {
449
+ const state = createQuery(() => ({
450
+ queryKey: key,
451
+ queryFn: async () => {
452
+ await sleep(10);
453
+ return Promise.reject(new Error('Remote Error'));
454
+ },
435
455
  retry: false,
436
- suspense: true,
437
- useErrorBoundary: (err) => err !== 'Local Error',
438
- });
456
+ throwErrors: (err) => err.message !== 'Local Error',
457
+ }));
439
458
  // read state.data to trigger suspense.
440
459
  createRenderEffect(() => {
441
460
  // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- trigger suspense
@@ -458,17 +477,19 @@ describe("useQuery's in Suspense mode", () => {
458
477
  await waitFor(() => screen.getByText('Loading...'));
459
478
  await waitFor(() => screen.getByText('error boundary'));
460
479
  });
461
- it('should not throw errors to the error boundary when a useErrorBoundary function returns false', async () => {
480
+ it('should not throw errors to the error boundary when a throwErrors function returns false', async () => {
462
481
  const key = queryKey();
463
482
  function Page() {
464
- const state = createQuery(key, async () => {
465
- await sleep(10);
466
- return Promise.reject('Local Error');
467
- }, {
483
+ const state = createQuery(() => ({
484
+ queryKey: key,
485
+ queryFn: async () => {
486
+ await sleep(10);
487
+ return Promise.reject(new Error('Local Error'));
488
+ },
468
489
  retry: false,
469
490
  suspense: true,
470
- useErrorBoundary: (err) => err !== 'Local Error',
471
- });
491
+ throwErrors: (err) => err.message !== 'Local Error',
492
+ }));
472
493
  // read state.data to trigger suspense.
473
494
  createRenderEffect(() => {
474
495
  // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- trigger suspense
@@ -500,12 +521,12 @@ describe("useQuery's in Suspense mode", () => {
500
521
  });
501
522
  function Page() {
502
523
  const [enabled, setEnabled] = createSignal(false);
503
- const result = createQuery(() => [key()], queryFn, {
524
+ const result = createQuery(() => ({
525
+ queryKey: [key],
526
+ queryFn,
504
527
  suspense: true,
505
- get enabled() {
506
- return enabled();
507
- },
508
- });
528
+ enabled: enabled(),
529
+ }));
509
530
  return (<div>
510
531
  <button onClick={() => setEnabled(true)}>fire</button>
511
532
  <h1>{result.data}</h1>
@@ -529,19 +550,21 @@ describe("useQuery's in Suspense mode", () => {
529
550
  let succeed = true;
530
551
  function Page() {
531
552
  const [nonce] = createSignal(0);
532
- const queryKeys = () => [`${key()}-${succeed}`];
533
- const result = createQuery(queryKeys, async () => {
534
- await sleep(10);
535
- if (!succeed) {
536
- throw new Error('Suspense Error Bingo');
537
- }
538
- else {
539
- return nonce();
540
- }
541
- }, {
553
+ const queryKeys = [`${key}-${succeed}`];
554
+ const result = createQuery(() => ({
555
+ queryKey: queryKeys,
556
+ queryFn: async () => {
557
+ await sleep(10);
558
+ if (!succeed) {
559
+ throw new Error('Suspense Error Bingo');
560
+ }
561
+ else {
562
+ return nonce();
563
+ }
564
+ },
542
565
  retry: false,
543
566
  suspense: true,
544
- });
567
+ }));
545
568
  return (<div>
546
569
  <span>rendered</span> <span>{result.data}</span>
547
570
  <button aria-label="fail" onClick={async () => {
@@ -576,18 +599,20 @@ describe("useQuery's in Suspense mode", () => {
576
599
  let succeed = true;
577
600
  function Page() {
578
601
  const [key, setKey] = createSignal(0);
579
- const result = createQuery(() => [`${key()}-${succeed}`], async () => {
580
- await sleep(10);
581
- if (!succeed) {
582
- throw new Error('Suspense Error Bingo');
583
- }
584
- else {
585
- return 'data';
586
- }
587
- }, {
602
+ const result = createQuery(() => ({
603
+ queryKey: [`${key()}-${succeed}`],
604
+ queryFn: async () => {
605
+ await sleep(10);
606
+ if (!succeed) {
607
+ throw new Error('Suspense Error Bingo');
608
+ }
609
+ else {
610
+ return 'data';
611
+ }
612
+ },
588
613
  retry: false,
589
614
  suspense: true,
590
- });
615
+ }));
591
616
  return (<div>
592
617
  <span>rendered</span> <span>{result.data}</span>
593
618
  <button aria-label="fail" onClick={() => setKey((k) => k + 1)}>
@@ -620,16 +645,16 @@ describe("useQuery's in Suspense mode", () => {
620
645
  function Page() {
621
646
  const queryKeys = '1';
622
647
  const [enabled, setEnabled] = createSignal(false);
623
- const result = createQuery(() => [queryKeys], async () => {
624
- await sleep(10);
625
- throw new Error('Suspense Error Bingo');
626
- }, {
648
+ const result = createQuery(() => ({
649
+ queryKey: [queryKeys],
650
+ queryFn: async () => {
651
+ await sleep(10);
652
+ throw new Error('Suspense Error Bingo');
653
+ },
627
654
  retry: false,
628
655
  suspense: true,
629
- get enabled() {
630
- return enabled();
631
- },
632
- });
656
+ enabled: enabled(),
657
+ }));
633
658
  return (<div>
634
659
  <span>rendered</span> <span>{result.data}</span>
635
660
  <button aria-label="fail" onClick={() => {
@@ -658,17 +683,21 @@ describe("useQuery's in Suspense mode", () => {
658
683
  // render error boundary fallback (error boundary)
659
684
  await waitFor(() => screen.getByText('error boundary'));
660
685
  });
661
- it('should render the correct amount of times in Suspense mode when cacheTime is set to 0', async () => {
686
+ it('should render the correct amount of times in Suspense mode when gcTime is set to 0', async () => {
662
687
  const key = queryKey();
663
688
  let state = null;
664
689
  let count = 0;
665
690
  let renders = 0;
666
691
  function Page() {
667
- state = createQuery(key, async () => {
668
- count++;
669
- await sleep(10);
670
- return count;
671
- }, { suspense: true, cacheTime: 0 });
692
+ state = createQuery(() => ({
693
+ queryKey: key,
694
+ queryFn: async () => {
695
+ count++;
696
+ await sleep(10);
697
+ return count;
698
+ },
699
+ gcTime: 0,
700
+ }));
672
701
  createRenderEffect(on([() => ({ ...state })], () => {
673
702
  renders++;
674
703
  }));
@@ -8,10 +8,13 @@ describe("useQuery's in Suspense mode with transitions", () => {
8
8
  it('should render the content when the transition is done', async () => {
9
9
  const key = queryKey();
10
10
  function Suspended() {
11
- const state = createQuery(key, async () => {
12
- await sleep(10);
13
- return true;
14
- });
11
+ const state = createQuery(() => ({
12
+ queryKey: key,
13
+ queryFn: async () => {
14
+ await sleep(10);
15
+ return true;
16
+ },
17
+ }));
15
18
  return <Show when={state.data}>Message</Show>;
16
19
  }
17
20
  function Page() {