@tanstack/react-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 (199) hide show
  1. package/build/lib/HydrationBoundary.d.ts +9 -0
  2. package/build/lib/{Hydrate.esm.js → HydrationBoundary.esm.js} +14 -17
  3. package/build/lib/HydrationBoundary.esm.js.map +1 -0
  4. package/build/lib/{Hydrate.js → HydrationBoundary.js} +17 -24
  5. package/build/lib/HydrationBoundary.js.map +1 -0
  6. package/build/lib/{Hydrate.mjs → HydrationBoundary.mjs} +14 -17
  7. package/build/lib/HydrationBoundary.mjs.map +1 -0
  8. package/build/lib/QueryClientProvider.d.ts +4 -19
  9. package/build/lib/QueryClientProvider.esm.js +11 -46
  10. package/build/lib/QueryClientProvider.esm.js.map +1 -1
  11. package/build/lib/QueryClientProvider.js +14 -52
  12. package/build/lib/QueryClientProvider.js.map +1 -1
  13. package/build/lib/QueryClientProvider.mjs +11 -46
  14. package/build/lib/QueryClientProvider.mjs.map +1 -1
  15. package/build/lib/QueryErrorResetBoundary.esm.js +7 -2
  16. package/build/lib/QueryErrorResetBoundary.esm.js.map +1 -1
  17. package/build/lib/QueryErrorResetBoundary.js +10 -8
  18. package/build/lib/QueryErrorResetBoundary.js.map +1 -1
  19. package/build/lib/QueryErrorResetBoundary.mjs +7 -2
  20. package/build/lib/QueryErrorResetBoundary.mjs.map +1 -1
  21. package/build/lib/__tests__/useQuery.types.test.d.ts +1 -2
  22. package/build/lib/__tests__/utils.d.ts +7 -10
  23. package/build/lib/errorBoundaryUtils.d.ts +3 -3
  24. package/build/lib/errorBoundaryUtils.esm.js +3 -3
  25. package/build/lib/errorBoundaryUtils.esm.js.map +1 -1
  26. package/build/lib/errorBoundaryUtils.js +6 -9
  27. package/build/lib/errorBoundaryUtils.js.map +1 -1
  28. package/build/lib/errorBoundaryUtils.mjs +3 -3
  29. package/build/lib/errorBoundaryUtils.mjs.map +1 -1
  30. package/build/lib/index.d.ts +4 -5
  31. package/build/lib/index.esm.js +3 -4
  32. package/build/lib/index.esm.js.map +1 -1
  33. package/build/lib/index.js +6 -9
  34. package/build/lib/index.js.map +1 -1
  35. package/build/lib/index.mjs +3 -4
  36. package/build/lib/index.mjs.map +1 -1
  37. package/build/lib/isRestoring.esm.js.map +1 -1
  38. package/build/lib/isRestoring.js +3 -6
  39. package/build/lib/isRestoring.js.map +1 -1
  40. package/build/lib/isRestoring.mjs.map +1 -1
  41. package/build/lib/suspense.esm.js +5 -5
  42. package/build/lib/suspense.esm.js.map +1 -1
  43. package/build/lib/suspense.js +5 -7
  44. package/build/lib/suspense.js.map +1 -1
  45. package/build/lib/suspense.mjs +5 -5
  46. package/build/lib/suspense.mjs.map +1 -1
  47. package/build/lib/types.d.ts +14 -22
  48. package/build/lib/useBaseQuery.d.ts +2 -2
  49. package/build/lib/useBaseQuery.esm.js +15 -18
  50. package/build/lib/useBaseQuery.esm.js.map +1 -1
  51. package/build/lib/useBaseQuery.js +18 -24
  52. package/build/lib/useBaseQuery.js.map +1 -1
  53. package/build/lib/useBaseQuery.mjs +15 -18
  54. package/build/lib/useBaseQuery.mjs.map +1 -1
  55. package/build/lib/useInfiniteQuery.d.ts +2 -4
  56. package/build/lib/useInfiniteQuery.esm.js +4 -4
  57. package/build/lib/useInfiniteQuery.esm.js.map +1 -1
  58. package/build/lib/useInfiniteQuery.js +3 -5
  59. package/build/lib/useInfiniteQuery.js.map +1 -1
  60. package/build/lib/useInfiniteQuery.mjs +4 -4
  61. package/build/lib/useInfiniteQuery.mjs.map +1 -1
  62. package/build/lib/useIsFetching.d.ts +2 -7
  63. package/build/lib/useIsFetching.esm.js +5 -9
  64. package/build/lib/useIsFetching.esm.js.map +1 -1
  65. package/build/lib/useIsFetching.js +7 -14
  66. package/build/lib/useIsFetching.js.map +1 -1
  67. package/build/lib/useIsFetching.mjs +5 -9
  68. package/build/lib/useIsFetching.mjs.map +1 -1
  69. package/build/lib/useMutation.d.ts +2 -5
  70. package/build/lib/useMutation.esm.js +12 -14
  71. package/build/lib/useMutation.esm.js.map +1 -1
  72. package/build/lib/useMutation.js +14 -19
  73. package/build/lib/useMutation.js.map +1 -1
  74. package/build/lib/useMutation.mjs +12 -14
  75. package/build/lib/useMutation.mjs.map +1 -1
  76. package/build/lib/useMutationState.d.ts +8 -0
  77. package/build/lib/useMutationState.esm.js +37 -0
  78. package/build/lib/useMutationState.esm.js.map +1 -0
  79. package/build/lib/useMutationState.js +59 -0
  80. package/build/lib/useMutationState.js.map +1 -0
  81. package/build/lib/useMutationState.mjs +37 -0
  82. package/build/lib/useMutationState.mjs.map +1 -0
  83. package/build/lib/useQueries.d.ts +9 -7
  84. package/build/lib/useQueries.esm.js +16 -27
  85. package/build/lib/useQueries.esm.js.map +1 -1
  86. package/build/lib/useQueries.js +19 -33
  87. package/build/lib/useQueries.js.map +1 -1
  88. package/build/lib/useQueries.mjs +16 -27
  89. package/build/lib/useQueries.mjs.map +1 -1
  90. package/build/lib/useQuery.d.ts +9 -21
  91. package/build/lib/useQuery.esm.js +5 -4
  92. package/build/lib/useQuery.esm.js.map +1 -1
  93. package/build/lib/useQuery.js +4 -5
  94. package/build/lib/useQuery.js.map +1 -1
  95. package/build/lib/useQuery.mjs +5 -4
  96. package/build/lib/useQuery.mjs.map +1 -1
  97. package/build/lib/utils.d.ts +1 -1
  98. package/build/lib/utils.esm.js +5 -6
  99. package/build/lib/utils.esm.js.map +1 -1
  100. package/build/lib/utils.js +5 -8
  101. package/build/lib/utils.js.map +1 -1
  102. package/build/lib/utils.mjs +5 -6
  103. package/build/lib/utils.mjs.map +1 -1
  104. package/build/umd/index.development.js +1003 -1827
  105. package/build/umd/index.development.js.map +1 -1
  106. package/build/umd/index.production.js +1 -1
  107. package/build/umd/index.production.js.map +1 -1
  108. package/package.json +6 -18
  109. package/src/{Hydrate.tsx → HydrationBoundary.tsx} +17 -18
  110. package/src/QueryClientProvider.tsx +11 -65
  111. package/src/__tests__/{Hydrate.test.tsx → HydrationBoundary.test.tsx} +89 -77
  112. package/src/__tests__/QueryClientProvider.test.tsx +33 -147
  113. package/src/__tests__/QueryResetErrorBoundary.test.tsx +118 -85
  114. package/src/__tests__/ssr-hydration.test.tsx +27 -33
  115. package/src/__tests__/ssr.test.tsx +23 -9
  116. package/src/__tests__/suspense.test.tsx +194 -171
  117. package/src/__tests__/useInfiniteQuery.test.tsx +249 -494
  118. package/src/__tests__/useInfiniteQuery.type.test.tsx +131 -0
  119. package/src/__tests__/useIsFetching.test.tsx +65 -108
  120. package/src/__tests__/useMutation.test.tsx +200 -268
  121. package/src/__tests__/useMutationState.test.tsx +284 -0
  122. package/src/__tests__/useQueries.test.tsx +43 -347
  123. package/src/__tests__/useQuery.test.tsx +890 -686
  124. package/src/__tests__/useQuery.types.test.tsx +23 -24
  125. package/src/__tests__/utils.tsx +14 -23
  126. package/src/errorBoundaryUtils.ts +5 -10
  127. package/src/index.ts +4 -7
  128. package/src/types.ts +33 -38
  129. package/src/useBaseQuery.ts +7 -7
  130. package/src/useInfiniteQuery.ts +12 -77
  131. package/src/useIsFetching.ts +8 -20
  132. package/src/useMutation.ts +8 -66
  133. package/src/useMutationState.ts +81 -0
  134. package/src/useQueries.ts +29 -21
  135. package/src/useQuery.ts +27 -104
  136. package/src/utils.ts +5 -5
  137. package/build/lib/Hydrate.d.ts +0 -10
  138. package/build/lib/Hydrate.esm.js.map +0 -1
  139. package/build/lib/Hydrate.js.map +0 -1
  140. package/build/lib/Hydrate.mjs.map +0 -1
  141. package/build/lib/reactBatchedUpdates.d.ts +0 -2
  142. package/build/lib/reactBatchedUpdates.esm.js +0 -6
  143. package/build/lib/reactBatchedUpdates.esm.js.map +0 -1
  144. package/build/lib/reactBatchedUpdates.js +0 -30
  145. package/build/lib/reactBatchedUpdates.js.map +0 -1
  146. package/build/lib/reactBatchedUpdates.mjs +0 -6
  147. package/build/lib/reactBatchedUpdates.mjs.map +0 -1
  148. package/build/lib/reactBatchedUpdates.native.d.ts +0 -2
  149. package/build/lib/reactBatchedUpdates.native.esm.js +0 -2
  150. package/build/lib/reactBatchedUpdates.native.esm.js.map +0 -1
  151. package/build/lib/reactBatchedUpdates.native.js +0 -13
  152. package/build/lib/reactBatchedUpdates.native.js.map +0 -1
  153. package/build/lib/reactBatchedUpdates.native.mjs +0 -2
  154. package/build/lib/reactBatchedUpdates.native.mjs.map +0 -1
  155. package/build/lib/setBatchUpdatesFn.esm.js +0 -5
  156. package/build/lib/setBatchUpdatesFn.esm.js.map +0 -1
  157. package/build/lib/setBatchUpdatesFn.js +0 -7
  158. package/build/lib/setBatchUpdatesFn.js.map +0 -1
  159. package/build/lib/setBatchUpdatesFn.mjs +0 -5
  160. package/build/lib/setBatchUpdatesFn.mjs.map +0 -1
  161. package/build/lib/useIsMutating.d.ts +0 -7
  162. package/build/lib/useIsMutating.esm.js +0 -16
  163. package/build/lib/useIsMutating.esm.js.map +0 -1
  164. package/build/lib/useIsMutating.js +0 -40
  165. package/build/lib/useIsMutating.js.map +0 -1
  166. package/build/lib/useIsMutating.mjs +0 -16
  167. package/build/lib/useIsMutating.mjs.map +0 -1
  168. package/build/lib/useSyncExternalStore.d.ts +0 -2
  169. package/build/lib/useSyncExternalStore.esm.js +0 -7
  170. package/build/lib/useSyncExternalStore.esm.js.map +0 -1
  171. package/build/lib/useSyncExternalStore.js +0 -11
  172. package/build/lib/useSyncExternalStore.js.map +0 -1
  173. package/build/lib/useSyncExternalStore.mjs +0 -7
  174. package/build/lib/useSyncExternalStore.mjs.map +0 -1
  175. package/build/lib/useSyncExternalStore.native.d.ts +0 -2
  176. package/build/lib/useSyncExternalStore.native.esm.js +0 -2
  177. package/build/lib/useSyncExternalStore.native.esm.js.map +0 -1
  178. package/build/lib/useSyncExternalStore.native.js +0 -13
  179. package/build/lib/useSyncExternalStore.native.js.map +0 -1
  180. package/build/lib/useSyncExternalStore.native.mjs +0 -2
  181. package/build/lib/useSyncExternalStore.native.mjs.map +0 -1
  182. package/codemods/v4/key-transformation.js +0 -138
  183. package/codemods/v4/replace-import-specifier.js +0 -25
  184. package/codemods/v4/utils/index.js +0 -166
  185. package/codemods/v4/utils/replacers/key-replacer.js +0 -160
  186. package/codemods/v4/utils/transformers/query-cache-transformer.js +0 -115
  187. package/codemods/v4/utils/transformers/query-client-transformer.js +0 -49
  188. package/codemods/v4/utils/transformers/use-query-like-transformer.js +0 -32
  189. package/codemods/v4/utils/unprocessable-key-error.js +0 -8
  190. package/src/__tests__/useIsMutating.test.tsx +0 -259
  191. package/src/reactBatchedUpdates.native.ts +0 -4
  192. package/src/reactBatchedUpdates.ts +0 -2
  193. package/src/setBatchUpdatesFn.ts +0 -4
  194. package/src/useIsMutating.ts +0 -39
  195. package/src/useSyncExternalStore.native.ts +0 -5
  196. package/src/useSyncExternalStore.ts +0 -4
  197. /package/build/lib/__tests__/{Hydrate.test.d.ts → HydrationBoundary.test.d.ts} +0 -0
  198. /package/build/lib/__tests__/{useIsMutating.test.d.ts → useInfiniteQuery.type.test.d.ts} +0 -0
  199. /package/build/lib/{setBatchUpdatesFn.d.ts → __tests__/useMutationState.test.d.ts} +0 -0
@@ -1,20 +1,13 @@
1
1
  import { useQuery } from '../useQuery'
2
-
3
- export type Equal<X, Y> = (<T>() => T extends X ? 1 : 2) extends <
4
- T,
5
- >() => T extends Y ? 1 : 2
6
- ? true
7
- : false
8
-
9
- export type Expect<T extends true> = T
10
-
11
- const doNotExecute = (_func: () => void) => true
2
+ import type { Expect, Equal } from './utils'
3
+ import { doNotExecute } from './utils'
12
4
 
13
5
  describe('initialData', () => {
14
6
  describe('Config object overload', () => {
15
7
  it('TData should always be defined when initialData is provided as an object', () => {
16
8
  doNotExecute(() => {
17
9
  const { data } = useQuery({
10
+ queryKey: ['key'],
18
11
  queryFn: () => {
19
12
  return {
20
13
  wow: true,
@@ -33,6 +26,7 @@ describe('initialData', () => {
33
26
  it('TData should always be defined when initialData is provided as a function which ALWAYS returns the data', () => {
34
27
  doNotExecute(() => {
35
28
  const { data } = useQuery({
29
+ queryKey: ['key'],
36
30
  queryFn: () => {
37
31
  return {
38
32
  wow: true,
@@ -51,6 +45,7 @@ describe('initialData', () => {
51
45
  it('TData should have undefined in the union when initialData is NOT provided', () => {
52
46
  doNotExecute(() => {
53
47
  const { data } = useQuery({
48
+ queryKey: ['key'],
54
49
  queryFn: () => {
55
50
  return {
56
51
  wow: true,
@@ -67,6 +62,7 @@ describe('initialData', () => {
67
62
  it('TData should have undefined in the union when initialData is provided as a function which can return undefined', () => {
68
63
  doNotExecute(() => {
69
64
  const { data } = useQuery({
65
+ queryKey: ['key'],
70
66
  queryFn: () => {
71
67
  return {
72
68
  wow: true,
@@ -85,7 +81,8 @@ describe('initialData', () => {
85
81
  describe('Query key overload', () => {
86
82
  it('TData should always be defined when initialData is provided', () => {
87
83
  doNotExecute(() => {
88
- const { data } = useQuery(['key'], {
84
+ const { data } = useQuery({
85
+ queryKey: ['key'],
89
86
  queryFn: () => {
90
87
  return {
91
88
  wow: true,
@@ -103,7 +100,8 @@ describe('initialData', () => {
103
100
 
104
101
  it('TData should have undefined in the union when initialData is NOT provided', () => {
105
102
  doNotExecute(() => {
106
- const { data } = useQuery(['key'], {
103
+ const { data } = useQuery({
104
+ queryKey: ['key'],
107
105
  queryFn: () => {
108
106
  return {
109
107
  wow: true,
@@ -121,19 +119,17 @@ describe('initialData', () => {
121
119
  describe('Query key and func', () => {
122
120
  it('TData should always be defined when initialData is provided', () => {
123
121
  doNotExecute(() => {
124
- const { data } = useQuery(
125
- ['key'],
126
- () => {
122
+ const { data } = useQuery({
123
+ queryKey: ['key'],
124
+ queryFn: () => {
127
125
  return {
128
126
  wow: true,
129
127
  }
130
128
  },
131
- {
132
- initialData: {
133
- wow: true,
134
- },
129
+ initialData: {
130
+ wow: true,
135
131
  },
136
- )
132
+ })
137
133
 
138
134
  const result: Expect<Equal<{ wow: boolean }, typeof data>> = true
139
135
  return result
@@ -142,10 +138,13 @@ describe('initialData', () => {
142
138
 
143
139
  it('TData should have undefined in the union when initialData is NOT provided', () => {
144
140
  doNotExecute(() => {
145
- const { data } = useQuery(['key'], () => {
146
- return {
147
- wow: true,
148
- }
141
+ const { data } = useQuery({
142
+ queryKey: ['key'],
143
+ queryFn: () => {
144
+ return {
145
+ wow: true,
146
+ }
147
+ },
149
148
  })
150
149
 
151
150
  const result: Expect<Equal<{ wow: boolean } | undefined, typeof data>> =
@@ -1,26 +1,21 @@
1
1
  import * as React from 'react'
2
2
  import { act, render } from '@testing-library/react'
3
- import type { ContextOptions, QueryClientConfig, MutationOptions } from '..'
3
+ import type { QueryClientConfig } from '..'
4
4
  import { QueryClient, QueryClientProvider } from '..'
5
5
  import * as utils from '@tanstack/query-core'
6
6
 
7
7
  export function renderWithClient(
8
8
  client: QueryClient,
9
9
  ui: React.ReactElement,
10
- options: ContextOptions = {},
11
10
  ): ReturnType<typeof render> {
12
11
  const { rerender, ...result } = render(
13
- <QueryClientProvider client={client} context={options.context}>
14
- {ui}
15
- </QueryClientProvider>,
12
+ <QueryClientProvider client={client}>{ui}</QueryClientProvider>,
16
13
  )
17
14
  return {
18
15
  ...result,
19
16
  rerender: (rerenderUi: React.ReactElement) =>
20
17
  rerender(
21
- <QueryClientProvider client={client} context={options.context}>
22
- {rerenderUi}
23
- </QueryClientProvider>,
18
+ <QueryClientProvider client={client}>{rerenderUi}</QueryClientProvider>,
24
19
  ),
25
20
  } as any
26
21
  }
@@ -46,8 +41,7 @@ export const Blink = ({
46
41
  }
47
42
 
48
43
  export function createQueryClient(config?: QueryClientConfig): QueryClient {
49
- jest.spyOn(console, 'error').mockImplementation(() => undefined)
50
- return new QueryClient({ logger: mockLogger, ...config })
44
+ return new QueryClient(config)
51
45
  }
52
46
 
53
47
  export function mockVisibilityState(value: DocumentVisibilityState) {
@@ -58,12 +52,6 @@ export function mockNavigatorOnLine(value: boolean) {
58
52
  return jest.spyOn(navigator, 'onLine', 'get').mockReturnValue(value)
59
53
  }
60
54
 
61
- export const mockLogger = {
62
- log: jest.fn(),
63
- warn: jest.fn(),
64
- error: jest.fn(),
65
- }
66
-
67
55
  let queryKeyCount = 0
68
56
  export function queryKey(): Array<string> {
69
57
  queryKeyCount++
@@ -91,6 +79,14 @@ export function expectType<T>(_: T): void {
91
79
  return undefined
92
80
  }
93
81
 
82
+ export type Equal<X, Y> = (<T>() => T extends X ? 1 : 2) extends <
83
+ T,
84
+ >() => T extends Y ? 1 : 2
85
+ ? true
86
+ : false
87
+
88
+ export type Expect<T extends true> = T
89
+
94
90
  /**
95
91
  * Assert the parameter is not typed as `any`
96
92
  */
@@ -98,13 +94,6 @@ export function expectTypeNotAny<T>(_: 0 extends 1 & T ? never : T): void {
98
94
  return undefined
99
95
  }
100
96
 
101
- export function executeMutation(
102
- queryClient: QueryClient,
103
- options: MutationOptions<any, any, any, any>,
104
- ): Promise<unknown> {
105
- return queryClient.getMutationCache().build(queryClient, options).execute()
106
- }
107
-
108
97
  // This monkey-patches the isServer-value from utils,
109
98
  // so that we can pretend to be in a server environment
110
99
  export function setIsServer(isServer: boolean) {
@@ -119,3 +108,5 @@ export function setIsServer(isServer: boolean) {
119
108
  })
120
109
  }
121
110
  }
111
+
112
+ export const doNotExecute = (_func: () => void) => true
@@ -3,7 +3,7 @@ import type {
3
3
  Query,
4
4
  QueryKey,
5
5
  QueryObserverResult,
6
- UseErrorBoundary,
6
+ ThrowErrors,
7
7
  } from '@tanstack/query-core'
8
8
  import type { QueryErrorResetBoundaryValue } from './QueryErrorResetBoundary'
9
9
  import * as React from 'react'
@@ -25,7 +25,7 @@ export const ensurePreventErrorBoundaryRetry = <
25
25
  >,
26
26
  errorResetBoundary: QueryErrorResetBoundaryValue,
27
27
  ) => {
28
- if (options.suspense || options.useErrorBoundary) {
28
+ if (options.suspense || options.throwErrors) {
29
29
  // Prevent retrying failed query if the error boundary has not been reset yet
30
30
  if (!errorResetBoundary.isReset()) {
31
31
  options.retryOnMount = false
@@ -50,23 +50,18 @@ export const getHasError = <
50
50
  >({
51
51
  result,
52
52
  errorResetBoundary,
53
- useErrorBoundary,
53
+ throwErrors,
54
54
  query,
55
55
  }: {
56
56
  result: QueryObserverResult<TData, TError>
57
57
  errorResetBoundary: QueryErrorResetBoundaryValue
58
- useErrorBoundary: UseErrorBoundary<
59
- TQueryFnData,
60
- TError,
61
- TQueryData,
62
- TQueryKey
63
- >
58
+ throwErrors: ThrowErrors<TQueryFnData, TError, TQueryData, TQueryKey>
64
59
  query: Query<TQueryFnData, TError, TQueryData, TQueryKey>
65
60
  }) => {
66
61
  return (
67
62
  result.isError &&
68
63
  !errorResetBoundary.isReset() &&
69
64
  !result.isFetching &&
70
- shouldThrowError(useErrorBoundary, [result.error, query])
65
+ shouldThrowError(throwErrors, [result.error, query])
71
66
  )
72
67
  }
package/src/index.ts CHANGED
@@ -1,8 +1,5 @@
1
1
  /* istanbul ignore file */
2
2
 
3
- // Side effects
4
- import './setBatchUpdatesFn'
5
-
6
3
  // Re-export core
7
4
  export * from '@tanstack/query-core'
8
5
 
@@ -12,20 +9,20 @@ export { useQueries } from './useQueries'
12
9
  export type { QueriesResults, QueriesOptions } from './useQueries'
13
10
  export { useQuery } from './useQuery'
14
11
  export {
15
- defaultContext,
12
+ QueryClientContext,
16
13
  QueryClientProvider,
17
14
  useQueryClient,
18
15
  } from './QueryClientProvider'
19
16
  export type { QueryClientProviderProps } from './QueryClientProvider'
20
17
  export type { QueryErrorResetBoundaryProps } from './QueryErrorResetBoundary'
21
- export { useHydrate, Hydrate } from './Hydrate'
22
- export type { HydrateProps } from './Hydrate'
18
+ export { HydrationBoundary } from './HydrationBoundary'
19
+ export type { HydrationBoundaryProps } from './HydrationBoundary'
23
20
  export {
24
21
  QueryErrorResetBoundary,
25
22
  useQueryErrorResetBoundary,
26
23
  } from './QueryErrorResetBoundary'
27
24
  export { useIsFetching } from './useIsFetching'
28
- export { useIsMutating } from './useIsMutating'
25
+ export { useIsMutating, useMutationState } from './useMutationState'
29
26
  export { useMutation } from './useMutation'
30
27
  export { useInfiniteQuery } from './useInfiniteQuery'
31
28
  export { useIsRestoring, IsRestoringProvider } from './isRestoring'
package/src/types.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  /* istanbul ignore file */
2
2
 
3
- import type * as React from 'react'
4
3
  import type {
5
4
  InfiniteQueryObserverOptions,
6
5
  InfiniteQueryObserverResult,
@@ -11,92 +10,88 @@ import type {
11
10
  MutationObserverOptions,
12
11
  MutateFunction,
13
12
  DefinedQueryObserverResult,
13
+ WithRequired,
14
+ RegisteredError,
14
15
  } from '@tanstack/query-core'
15
- import type { QueryClient } from '@tanstack/query-core'
16
-
17
- export interface ContextOptions {
18
- /**
19
- * Use this to pass your React Query context. Otherwise, `defaultContext` will be used.
20
- */
21
- context?: React.Context<QueryClient | undefined>
22
- }
23
16
 
24
17
  export interface UseBaseQueryOptions<
25
18
  TQueryFnData = unknown,
26
- TError = unknown,
19
+ TError = RegisteredError,
27
20
  TData = TQueryFnData,
28
21
  TQueryData = TQueryFnData,
29
22
  TQueryKey extends QueryKey = QueryKey,
30
- > extends ContextOptions,
31
- QueryObserverOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey> {}
23
+ > extends WithRequired<
24
+ QueryObserverOptions<TQueryFnData, TError, TData, TQueryData, TQueryKey>,
25
+ 'queryKey'
26
+ > {}
32
27
 
33
28
  export interface UseQueryOptions<
34
29
  TQueryFnData = unknown,
35
- TError = unknown,
30
+ TError = RegisteredError,
36
31
  TData = TQueryFnData,
37
32
  TQueryKey extends QueryKey = QueryKey,
38
- > extends UseBaseQueryOptions<
39
- TQueryFnData,
40
- TError,
41
- TData,
42
- TQueryFnData,
43
- TQueryKey
33
+ > extends WithRequired<
34
+ UseBaseQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>,
35
+ 'queryKey'
44
36
  > {}
45
37
 
46
38
  export interface UseInfiniteQueryOptions<
47
39
  TQueryFnData = unknown,
48
- TError = unknown,
40
+ TError = RegisteredError,
49
41
  TData = TQueryFnData,
50
42
  TQueryData = TQueryFnData,
51
43
  TQueryKey extends QueryKey = QueryKey,
52
- > extends ContextOptions,
44
+ TPageParam = unknown,
45
+ > extends WithRequired<
53
46
  InfiniteQueryObserverOptions<
54
47
  TQueryFnData,
55
48
  TError,
56
49
  TData,
57
50
  TQueryData,
58
- TQueryKey
59
- > {}
51
+ TQueryKey,
52
+ TPageParam
53
+ >,
54
+ 'queryKey'
55
+ > {}
60
56
 
61
57
  export type UseBaseQueryResult<
62
58
  TData = unknown,
63
- TError = unknown,
59
+ TError = RegisteredError,
64
60
  > = QueryObserverResult<TData, TError>
65
61
 
66
62
  export type UseQueryResult<
67
63
  TData = unknown,
68
- TError = unknown,
64
+ TError = RegisteredError,
69
65
  > = UseBaseQueryResult<TData, TError>
70
66
 
71
67
  export type DefinedUseBaseQueryResult<
72
68
  TData = unknown,
73
- TError = unknown,
69
+ TError = RegisteredError,
74
70
  > = DefinedQueryObserverResult<TData, TError>
75
71
 
76
72
  export type DefinedUseQueryResult<
77
73
  TData = unknown,
78
- TError = unknown,
74
+ TError = RegisteredError,
79
75
  > = DefinedUseBaseQueryResult<TData, TError>
80
76
 
81
77
  export type UseInfiniteQueryResult<
82
78
  TData = unknown,
83
- TError = unknown,
79
+ TError = RegisteredError,
84
80
  > = InfiniteQueryObserverResult<TData, TError>
85
81
 
86
82
  export interface UseMutationOptions<
87
83
  TData = unknown,
88
- TError = unknown,
84
+ TError = RegisteredError,
89
85
  TVariables = void,
90
86
  TContext = unknown,
91
- > extends ContextOptions,
92
- Omit<
93
- MutationObserverOptions<TData, TError, TVariables, TContext>,
94
- '_defaulted' | 'variables'
95
- > {}
87
+ > extends Omit<
88
+ MutationObserverOptions<TData, TError, TVariables, TContext>,
89
+ '_defaulted' | 'variables'
90
+ > {}
96
91
 
97
92
  export type UseMutateFunction<
98
93
  TData = unknown,
99
- TError = unknown,
94
+ TError = RegisteredError,
100
95
  TVariables = void,
101
96
  TContext = unknown,
102
97
  > = (
@@ -105,14 +100,14 @@ export type UseMutateFunction<
105
100
 
106
101
  export type UseMutateAsyncFunction<
107
102
  TData = unknown,
108
- TError = unknown,
103
+ TError = RegisteredError,
109
104
  TVariables = void,
110
105
  TContext = unknown,
111
106
  > = MutateFunction<TData, TError, TVariables, TContext>
112
107
 
113
108
  export type UseBaseMutationResult<
114
109
  TData = unknown,
115
- TError = unknown,
110
+ TError = RegisteredError,
116
111
  TVariables = unknown,
117
112
  TContext = unknown,
118
113
  > = Override<
@@ -122,7 +117,7 @@ export type UseBaseMutationResult<
122
117
 
123
118
  export type UseMutationResult<
124
119
  TData = unknown,
125
- TError = unknown,
120
+ TError = RegisteredError,
126
121
  TVariables = unknown,
127
122
  TContext = unknown,
128
123
  > = UseBaseMutationResult<TData, TError, TVariables, TContext>
@@ -1,7 +1,6 @@
1
1
  import * as React from 'react'
2
- import { useSyncExternalStore } from './useSyncExternalStore'
3
2
 
4
- import type { QueryKey, QueryObserver } from '@tanstack/query-core'
3
+ import type { QueryClient, QueryKey, QueryObserver } from '@tanstack/query-core'
5
4
  import { notifyManager } from '@tanstack/query-core'
6
5
  import { useQueryErrorResetBoundary } from './QueryErrorResetBoundary'
7
6
  import { useQueryClient } from './QueryClientProvider'
@@ -29,11 +28,12 @@ export function useBaseQuery<
29
28
  TQueryKey
30
29
  >,
31
30
  Observer: typeof QueryObserver,
31
+ queryClient?: QueryClient,
32
32
  ) {
33
- const queryClient = useQueryClient({ context: options.context })
33
+ const client = useQueryClient(queryClient)
34
34
  const isRestoring = useIsRestoring()
35
35
  const errorResetBoundary = useQueryErrorResetBoundary()
36
- const defaultedOptions = queryClient.defaultQueryOptions(options)
36
+ const defaultedOptions = client.defaultQueryOptions(options)
37
37
 
38
38
  // Make sure results are optimistically set in fetching state before subscribing or updating options
39
39
  defaultedOptions._optimisticResults = isRestoring
@@ -67,14 +67,14 @@ export function useBaseQuery<
67
67
  const [observer] = React.useState(
68
68
  () =>
69
69
  new Observer<TQueryFnData, TError, TData, TQueryData, TQueryKey>(
70
- queryClient,
70
+ client,
71
71
  defaultedOptions,
72
72
  ),
73
73
  )
74
74
 
75
75
  const result = observer.getOptimisticResult(defaultedOptions)
76
76
 
77
- useSyncExternalStore(
77
+ React.useSyncExternalStore(
78
78
  React.useCallback(
79
79
  (onStoreChange) =>
80
80
  isRestoring
@@ -102,7 +102,7 @@ export function useBaseQuery<
102
102
  getHasError({
103
103
  result,
104
104
  errorResetBoundary,
105
- useErrorBoundary: defaultedOptions.useErrorBoundary,
105
+ throwErrors: defaultedOptions.throwErrors,
106
106
  query: observer.getCurrentQuery(),
107
107
  })
108
108
  ) {
@@ -1,100 +1,35 @@
1
1
  import type {
2
2
  QueryObserver,
3
- QueryFunction,
4
3
  QueryKey,
4
+ QueryClient,
5
+ RegisteredError,
6
+ InfiniteData,
5
7
  } from '@tanstack/query-core'
6
- import { InfiniteQueryObserver, parseQueryArgs } from '@tanstack/query-core'
8
+ import { InfiniteQueryObserver } from '@tanstack/query-core'
7
9
  import type { UseInfiniteQueryOptions, UseInfiniteQueryResult } from './types'
8
10
  import { useBaseQuery } from './useBaseQuery'
9
11
 
10
12
  // HOOK
11
-
12
- export function useInfiniteQuery<
13
- TQueryFnData = unknown,
14
- TError = unknown,
15
- TData = TQueryFnData,
16
- TQueryKey extends QueryKey = QueryKey,
17
- >(
18
- options: UseInfiniteQueryOptions<
19
- TQueryFnData,
20
- TError,
21
- TData,
22
- TQueryFnData,
23
- TQueryKey
24
- >,
25
- ): UseInfiniteQueryResult<TData, TError>
26
- export function useInfiniteQuery<
27
- TQueryFnData = unknown,
28
- TError = unknown,
29
- TData = TQueryFnData,
30
- TQueryKey extends QueryKey = QueryKey,
31
- >(
32
- queryKey: TQueryKey,
33
- options?: Omit<
34
- UseInfiniteQueryOptions<
35
- TQueryFnData,
36
- TError,
37
- TData,
38
- TQueryFnData,
39
- TQueryKey
40
- >,
41
- 'queryKey'
42
- >,
43
- ): UseInfiniteQueryResult<TData, TError>
44
- export function useInfiniteQuery<
45
- TQueryFnData = unknown,
46
- TError = unknown,
47
- TData = TQueryFnData,
48
- TQueryKey extends QueryKey = QueryKey,
49
- >(
50
- queryKey: TQueryKey,
51
- queryFn: QueryFunction<TQueryFnData, TQueryKey>,
52
- options?: Omit<
53
- UseInfiniteQueryOptions<
54
- TQueryFnData,
55
- TError,
56
- TData,
57
- TQueryFnData,
58
- TQueryKey
59
- >,
60
- 'queryKey' | 'queryFn'
61
- >,
62
- ): UseInfiniteQueryResult<TData, TError>
63
13
  export function useInfiniteQuery<
64
14
  TQueryFnData,
65
- TError,
66
- TData = TQueryFnData,
15
+ TError = RegisteredError,
16
+ TData = InfiniteData<TQueryFnData>,
67
17
  TQueryKey extends QueryKey = QueryKey,
18
+ TPageParam = unknown,
68
19
  >(
69
- arg1:
70
- | TQueryKey
71
- | UseInfiniteQueryOptions<
72
- TQueryFnData,
73
- TError,
74
- TData,
75
- TQueryFnData,
76
- TQueryKey
77
- >,
78
- arg2?:
79
- | QueryFunction<TQueryFnData, TQueryKey>
80
- | UseInfiniteQueryOptions<
81
- TQueryFnData,
82
- TError,
83
- TData,
84
- TQueryFnData,
85
- TQueryKey
86
- >,
87
- arg3?: UseInfiniteQueryOptions<
20
+ options: UseInfiniteQueryOptions<
88
21
  TQueryFnData,
89
22
  TError,
90
23
  TData,
91
24
  TQueryFnData,
92
- TQueryKey
25
+ TQueryKey,
26
+ TPageParam
93
27
  >,
28
+ queryClient?: QueryClient,
94
29
  ): UseInfiniteQueryResult<TData, TError> {
95
- const options = parseQueryArgs(arg1, arg2, arg3)
96
30
  return useBaseQuery(
97
31
  options,
98
32
  InfiniteQueryObserver as typeof QueryObserver,
33
+ queryClient,
99
34
  ) as UseInfiniteQueryResult<TData, TError>
100
35
  }
@@ -1,35 +1,23 @@
1
1
  import * as React from 'react'
2
- import type { QueryKey, QueryFilters } from '@tanstack/query-core'
3
- import { notifyManager, parseFilterArgs } from '@tanstack/query-core'
2
+ import type { QueryClient, QueryFilters } from '@tanstack/query-core'
3
+ import { notifyManager } from '@tanstack/query-core'
4
4
 
5
- import { useSyncExternalStore } from './useSyncExternalStore'
6
- import type { ContextOptions } from './types'
7
5
  import { useQueryClient } from './QueryClientProvider'
8
6
 
9
- interface Options extends ContextOptions {}
10
-
11
- export function useIsFetching(filters?: QueryFilters, options?: Options): number
12
7
  export function useIsFetching(
13
- queryKey?: QueryKey,
14
8
  filters?: QueryFilters,
15
- options?: Options,
16
- ): number
17
- export function useIsFetching(
18
- arg1?: QueryKey | QueryFilters,
19
- arg2?: QueryFilters | Options,
20
- arg3?: Options,
9
+ queryClient?: QueryClient,
21
10
  ): number {
22
- const [filters, options = {}] = parseFilterArgs(arg1, arg2, arg3)
23
- const queryClient = useQueryClient({ context: options.context })
24
- const queryCache = queryClient.getQueryCache()
11
+ const client = useQueryClient(queryClient)
12
+ const queryCache = client.getQueryCache()
25
13
 
26
- return useSyncExternalStore(
14
+ return React.useSyncExternalStore(
27
15
  React.useCallback(
28
16
  (onStoreChange) =>
29
17
  queryCache.subscribe(notifyManager.batchCalls(onStoreChange)),
30
18
  [queryCache],
31
19
  ),
32
- () => queryClient.isFetching(filters),
33
- () => queryClient.isFetching(filters),
20
+ () => client.isFetching(filters),
21
+ () => client.isFetching(filters),
34
22
  )
35
23
  }