@tanstack/query-core 5.0.0-alpha.23 → 5.0.0-alpha.26

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 (65) hide show
  1. package/build/lib/focusManager.d.ts +1 -0
  2. package/build/lib/hydration.d.ts +1 -0
  3. package/build/lib/index.d.ts +1 -0
  4. package/build/lib/infiniteQueryBehavior.d.ts +1 -0
  5. package/build/lib/infiniteQueryObserver.d.ts +1 -0
  6. package/build/lib/mutation.d.ts +1 -0
  7. package/build/lib/mutationCache.d.ts +1 -0
  8. package/build/lib/mutationObserver.d.ts +1 -0
  9. package/build/lib/notifyManager.d.ts +1 -0
  10. package/build/lib/onlineManager.d.ts +1 -0
  11. package/build/lib/queriesObserver.d.ts +1 -0
  12. package/build/lib/query.d.ts +1 -0
  13. package/build/lib/query.esm.js +1 -1
  14. package/build/lib/query.esm.js.map +1 -1
  15. package/build/lib/query.js +1 -1
  16. package/build/lib/query.js.map +1 -1
  17. package/build/lib/query.mjs +1 -1
  18. package/build/lib/query.mjs.map +1 -1
  19. package/build/lib/queryCache.d.ts +1 -1
  20. package/build/lib/queryCache.esm.js +1 -2
  21. package/build/lib/queryCache.esm.js.map +1 -1
  22. package/build/lib/queryCache.js +1 -2
  23. package/build/lib/queryCache.js.map +1 -1
  24. package/build/lib/queryCache.mjs +1 -1
  25. package/build/lib/queryCache.mjs.map +1 -1
  26. package/build/lib/queryClient.d.ts +1 -0
  27. package/build/lib/queryClient.esm.js +11 -10
  28. package/build/lib/queryClient.esm.js.map +1 -1
  29. package/build/lib/queryClient.js +11 -10
  30. package/build/lib/queryClient.js.map +1 -1
  31. package/build/lib/queryClient.mjs +10 -7
  32. package/build/lib/queryClient.mjs.map +1 -1
  33. package/build/lib/queryObserver.d.ts +1 -0
  34. package/build/lib/removable.d.ts +1 -0
  35. package/build/lib/retryer.d.ts +1 -0
  36. package/build/lib/subscribable.d.ts +1 -0
  37. package/build/lib/tests/focusManager.test.d.ts +1 -0
  38. package/build/lib/tests/hydration.test.d.ts +1 -0
  39. package/build/lib/tests/infiniteQueryBehavior.test.d.ts +1 -0
  40. package/build/lib/tests/infiniteQueryObserver.test.d.ts +1 -0
  41. package/build/lib/tests/mutationCache.test.d.ts +1 -0
  42. package/build/lib/tests/mutationObserver.test.d.ts +1 -0
  43. package/build/lib/tests/mutations.test.d.ts +1 -0
  44. package/build/lib/tests/notifyManager.test.d.ts +1 -0
  45. package/build/lib/tests/onlineManager.test.d.ts +1 -0
  46. package/build/lib/tests/queriesObserver.test.d.ts +1 -0
  47. package/build/lib/tests/query.test.d.ts +1 -0
  48. package/build/lib/tests/queryCache.test.d.ts +1 -0
  49. package/build/lib/tests/queryClient.test.d.ts +1 -0
  50. package/build/lib/tests/queryObserver.test.d.ts +1 -0
  51. package/build/lib/tests/utils.d.ts +1 -0
  52. package/build/lib/tests/utils.test.d.ts +1 -0
  53. package/build/lib/types.d.ts +1 -0
  54. package/build/lib/utils.d.ts +1 -0
  55. package/build/umd/index.development.js +12 -9
  56. package/build/umd/index.development.js.map +1 -1
  57. package/build/umd/index.production.js +1 -1
  58. package/build/umd/index.production.js.map +1 -1
  59. package/package.json +1 -1
  60. package/src/query.ts +1 -1
  61. package/src/queryCache.ts +1 -2
  62. package/src/queryClient.ts +14 -13
  63. package/src/tests/query.test.tsx +1 -1
  64. package/src/tests/queryCache.test.tsx +0 -17
  65. package/src/tests/queryClient.test.tsx +33 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/query-core",
3
- "version": "5.0.0-alpha.23",
3
+ "version": "5.0.0-alpha.26",
4
4
  "description": "The framework agnostic core that powers TanStack Query",
5
5
  "author": "tannerlinsley",
6
6
  "license": "MIT",
package/src/query.ts CHANGED
@@ -464,7 +464,7 @@ export class Query<
464
464
  `Query data cannot be undefined. Please make sure to return a value other than undefined from your query function. Affected query key: ${this.queryHash}`,
465
465
  )
466
466
  }
467
- onError(new Error('undefined') as any)
467
+ onError(new Error(`${this.queryHash} data is undefined`) as any)
468
468
  return
469
469
  }
470
470
 
package/src/queryCache.ts CHANGED
@@ -27,7 +27,6 @@ interface QueryCacheConfig {
27
27
  error: DefaultError | null,
28
28
  query: Query<unknown, unknown, unknown>,
29
29
  ) => void
30
- createStore?: () => QueryStore
31
30
  }
32
31
 
33
32
  interface NotifyEventQueryAdded extends NotifyEvent {
@@ -95,7 +94,7 @@ export class QueryCache extends Subscribable<QueryCacheListener> {
95
94
 
96
95
  constructor(public config: QueryCacheConfig = {}) {
97
96
  super()
98
- this.#queries = config.createStore?.() ?? new Map<string, Query>()
97
+ this.#queries = new Map<string, Query>()
99
98
  }
100
99
 
101
100
  build<TQueryFnData, TError, TData, TQueryKey extends QueryKey>(
@@ -247,25 +247,26 @@ export class QueryClient {
247
247
  filters: RefetchQueryFilters = {},
248
248
  options?: RefetchOptions,
249
249
  ): Promise<void> {
250
+ const fetchOptions = {
251
+ ...options,
252
+ cancelRefetch: options?.cancelRefetch ?? true,
253
+ }
250
254
  const promises = notifyManager.batch(() =>
251
255
  this.#queryCache
252
256
  .findAll(filters)
253
257
  .filter((query) => !query.isDisabled())
254
- .map((query) =>
255
- query.fetch(undefined, {
256
- ...options,
257
- cancelRefetch: options?.cancelRefetch ?? true,
258
- }),
259
- ),
258
+ .map((query) => {
259
+ let promise = query.fetch(undefined, fetchOptions)
260
+ if (!fetchOptions.throwOnError) {
261
+ promise = promise.catch(noop)
262
+ }
263
+ return query.state.fetchStatus === 'paused'
264
+ ? Promise.resolve()
265
+ : promise
266
+ }),
260
267
  )
261
268
 
262
- let promise = Promise.all(promises).then(noop)
263
-
264
- if (!options?.throwOnError) {
265
- promise = promise.catch(noop)
266
- }
267
-
268
- return promise
269
+ return Promise.all(promises).then(noop)
269
270
  }
270
271
 
271
272
  fetchQuery<
@@ -788,7 +788,7 @@ describe('query', () => {
788
788
 
789
789
  await sleep(10)
790
790
 
791
- const error = new Error('undefined')
791
+ const error = new Error(`${JSON.stringify(key)} data is undefined`)
792
792
 
793
793
  expect(observerResult).toMatchObject({
794
794
  isError: true,
@@ -329,23 +329,6 @@ describe('queryCache', () => {
329
329
  })
330
330
  })
331
331
 
332
- describe('QueryCacheConfig.createStore', () => {
333
- test('should call createStore', async () => {
334
- const createStore = vi.fn().mockImplementation(() => new Map())
335
- new QueryCache({ createStore })
336
- expect(createStore).toHaveBeenCalledWith()
337
- })
338
-
339
- test('should use created store', async () => {
340
- const store = new Map()
341
- const spy = vi.spyOn(store, 'get')
342
-
343
- new QueryCache({ createStore: () => store }).get('key')
344
-
345
- expect(spy).toHaveBeenCalledTimes(1)
346
- })
347
- })
348
-
349
332
  describe('QueryCache.add', () => {
350
333
  test('should not try to add a query already added to the cache', async () => {
351
334
  const key = queryKey()
@@ -1,7 +1,12 @@
1
1
  import { waitFor } from '@testing-library/react'
2
2
  import '@testing-library/jest-dom'
3
3
 
4
- import { sleep, queryKey, createQueryClient } from './utils'
4
+ import {
5
+ sleep,
6
+ queryKey,
7
+ createQueryClient,
8
+ mockNavigatorOnLine,
9
+ } from './utils'
5
10
  import type {
6
11
  QueryCache,
7
12
  QueryClient,
@@ -1020,6 +1025,33 @@ describe('queryClient', () => {
1020
1025
  }
1021
1026
  expect(error).toEqual('error')
1022
1027
  })
1028
+
1029
+ test('should resolve Promise immediately if query is paused', async () => {
1030
+ const key1 = queryKey()
1031
+ const queryFn1 = vi.fn<unknown[], string>().mockReturnValue('data1')
1032
+ await queryClient.fetchQuery({ queryKey: key1, queryFn: queryFn1 })
1033
+ const onlineMock = mockNavigatorOnLine(false)
1034
+
1035
+ await queryClient.refetchQueries({ queryKey: key1 })
1036
+
1037
+ // if we reach this point, the test succeeds because the Promise was resolved immediately
1038
+ expect(queryFn1).toHaveBeenCalledTimes(1)
1039
+ onlineMock.mockRestore()
1040
+ })
1041
+
1042
+ test('should refetch if query we are offline but query networkMode is always', async () => {
1043
+ const key1 = queryKey()
1044
+ queryClient.setQueryDefaults(key1, { networkMode: 'always' })
1045
+ const queryFn1 = vi.fn<unknown[], string>().mockReturnValue('data1')
1046
+ await queryClient.fetchQuery({ queryKey: key1, queryFn: queryFn1 })
1047
+ const onlineMock = mockNavigatorOnLine(false)
1048
+
1049
+ await queryClient.refetchQueries({ queryKey: key1 })
1050
+
1051
+ // initial fetch + refetch (even though we are offline)
1052
+ expect(queryFn1).toHaveBeenCalledTimes(2)
1053
+ onlineMock.mockRestore()
1054
+ })
1023
1055
  })
1024
1056
 
1025
1057
  describe('invalidateQueries', () => {