@depup/tanstack__react-query 5.91.0-depup.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 (330) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +25 -0
  3. package/build/codemods/src/utils/index.cjs +208 -0
  4. package/build/codemods/src/utils/transformers/query-cache-transformer.cjs +124 -0
  5. package/build/codemods/src/utils/transformers/query-client-transformer.cjs +53 -0
  6. package/build/codemods/src/utils/transformers/use-query-like-transformer.cjs +38 -0
  7. package/build/codemods/src/v4/key-transformation.cjs +181 -0
  8. package/build/codemods/src/v4/replace-import-specifier.cjs +25 -0
  9. package/build/codemods/src/v4/utils/replacers/key-replacer.cjs +164 -0
  10. package/build/codemods/src/v5/is-loading/is-loading.cjs +244 -0
  11. package/build/codemods/src/v5/keep-previous-data/README.md +32 -0
  12. package/build/codemods/src/v5/keep-previous-data/keep-previous-data.cjs +271 -0
  13. package/build/codemods/src/v5/keep-previous-data/utils/already-has-placeholder-data-property.cjs +26 -0
  14. package/build/codemods/src/v5/remove-overloads/remove-overloads.cjs +58 -0
  15. package/build/codemods/src/v5/remove-overloads/transformers/filter-aware-usage-transformer.cjs +271 -0
  16. package/build/codemods/src/v5/remove-overloads/transformers/query-fn-aware-usage-transformer.cjs +185 -0
  17. package/build/codemods/src/v5/remove-overloads/utils/index.cjs +123 -0
  18. package/build/codemods/src/v5/remove-overloads/utils/unknown-usage-error.cjs +27 -0
  19. package/build/codemods/src/v5/rename-hydrate/rename-hydrate.cjs +55 -0
  20. package/build/codemods/src/v5/rename-properties/rename-properties.cjs +41 -0
  21. package/build/legacy/HydrationBoundary.cjs +91 -0
  22. package/build/legacy/HydrationBoundary.cjs.map +1 -0
  23. package/build/legacy/HydrationBoundary.d.cts +2 -0
  24. package/build/legacy/HydrationBoundary.d.ts +2 -0
  25. package/build/legacy/HydrationBoundary.js +57 -0
  26. package/build/legacy/HydrationBoundary.js.map +1 -0
  27. package/build/legacy/IsRestoringProvider.cjs +47 -0
  28. package/build/legacy/IsRestoringProvider.cjs.map +1 -0
  29. package/build/legacy/IsRestoringProvider.d.cts +2 -0
  30. package/build/legacy/IsRestoringProvider.d.ts +2 -0
  31. package/build/legacy/IsRestoringProvider.js +12 -0
  32. package/build/legacy/IsRestoringProvider.js.map +1 -0
  33. package/build/legacy/QueryClientProvider.cjs +72 -0
  34. package/build/legacy/QueryClientProvider.cjs.map +1 -0
  35. package/build/legacy/QueryClientProvider.d.cts +4 -0
  36. package/build/legacy/QueryClientProvider.d.ts +4 -0
  37. package/build/legacy/QueryClientProvider.js +36 -0
  38. package/build/legacy/QueryClientProvider.js.map +1 -0
  39. package/build/legacy/QueryErrorResetBoundary.cjs +67 -0
  40. package/build/legacy/QueryErrorResetBoundary.cjs.map +1 -0
  41. package/build/legacy/QueryErrorResetBoundary.d.cts +8 -0
  42. package/build/legacy/QueryErrorResetBoundary.d.ts +8 -0
  43. package/build/legacy/QueryErrorResetBoundary.js +32 -0
  44. package/build/legacy/QueryErrorResetBoundary.js.map +1 -0
  45. package/build/legacy/_tsup-dts-rollup.d.cts +993 -0
  46. package/build/legacy/_tsup-dts-rollup.d.ts +993 -0
  47. package/build/legacy/errorBoundaryUtils.cjs +69 -0
  48. package/build/legacy/errorBoundaryUtils.cjs.map +1 -0
  49. package/build/legacy/errorBoundaryUtils.d.cts +3 -0
  50. package/build/legacy/errorBoundaryUtils.d.ts +3 -0
  51. package/build/legacy/errorBoundaryUtils.js +33 -0
  52. package/build/legacy/errorBoundaryUtils.js.map +1 -0
  53. package/build/legacy/index.cjs +97 -0
  54. package/build/legacy/index.cjs.map +1 -0
  55. package/build/legacy/index.d.cts +206 -0
  56. package/build/legacy/index.d.ts +206 -0
  57. package/build/legacy/index.js +54 -0
  58. package/build/legacy/index.js.map +1 -0
  59. package/build/legacy/infiniteQueryOptions.cjs +33 -0
  60. package/build/legacy/infiniteQueryOptions.cjs.map +1 -0
  61. package/build/legacy/infiniteQueryOptions.d.cts +4 -0
  62. package/build/legacy/infiniteQueryOptions.d.ts +4 -0
  63. package/build/legacy/infiniteQueryOptions.js +8 -0
  64. package/build/legacy/infiniteQueryOptions.js.map +1 -0
  65. package/build/legacy/mutationOptions.cjs +33 -0
  66. package/build/legacy/mutationOptions.cjs.map +1 -0
  67. package/build/legacy/mutationOptions.d.cts +1 -0
  68. package/build/legacy/mutationOptions.d.ts +1 -0
  69. package/build/legacy/mutationOptions.js +8 -0
  70. package/build/legacy/mutationOptions.js.map +1 -0
  71. package/build/legacy/queryOptions.cjs +33 -0
  72. package/build/legacy/queryOptions.cjs.map +1 -0
  73. package/build/legacy/queryOptions.d.cts +4 -0
  74. package/build/legacy/queryOptions.d.ts +4 -0
  75. package/build/legacy/queryOptions.js +8 -0
  76. package/build/legacy/queryOptions.js.map +1 -0
  77. package/build/legacy/suspense.cjs +58 -0
  78. package/build/legacy/suspense.cjs.map +1 -0
  79. package/build/legacy/suspense.d.cts +5 -0
  80. package/build/legacy/suspense.d.ts +5 -0
  81. package/build/legacy/suspense.js +29 -0
  82. package/build/legacy/suspense.js.map +1 -0
  83. package/build/legacy/types.cjs +19 -0
  84. package/build/legacy/types.cjs.map +1 -0
  85. package/build/legacy/types.d.cts +24 -0
  86. package/build/legacy/types.d.ts +24 -0
  87. package/build/legacy/types.js +1 -0
  88. package/build/legacy/types.js.map +1 -0
  89. package/build/legacy/useBaseQuery.cjs +133 -0
  90. package/build/legacy/useBaseQuery.cjs.map +1 -0
  91. package/build/legacy/useBaseQuery.d.cts +1 -0
  92. package/build/legacy/useBaseQuery.d.ts +1 -0
  93. package/build/legacy/useBaseQuery.js +108 -0
  94. package/build/legacy/useBaseQuery.js.map +1 -0
  95. package/build/legacy/useInfiniteQuery.cjs +40 -0
  96. package/build/legacy/useInfiniteQuery.cjs.map +1 -0
  97. package/build/legacy/useInfiniteQuery.d.cts +1 -0
  98. package/build/legacy/useInfiniteQuery.d.ts +1 -0
  99. package/build/legacy/useInfiniteQuery.js +16 -0
  100. package/build/legacy/useInfiniteQuery.js.map +1 -0
  101. package/build/legacy/useIsFetching.cjs +56 -0
  102. package/build/legacy/useIsFetching.cjs.map +1 -0
  103. package/build/legacy/useIsFetching.d.cts +1 -0
  104. package/build/legacy/useIsFetching.d.ts +1 -0
  105. package/build/legacy/useIsFetching.js +22 -0
  106. package/build/legacy/useIsFetching.js.map +1 -0
  107. package/build/legacy/useMutation.cjs +74 -0
  108. package/build/legacy/useMutation.cjs.map +1 -0
  109. package/build/legacy/useMutation.d.cts +1 -0
  110. package/build/legacy/useMutation.d.ts +1 -0
  111. package/build/legacy/useMutation.js +45 -0
  112. package/build/legacy/useMutation.js.map +1 -0
  113. package/build/legacy/useMutationState.cjs +86 -0
  114. package/build/legacy/useMutationState.cjs.map +1 -0
  115. package/build/legacy/useMutationState.d.cts +2 -0
  116. package/build/legacy/useMutationState.d.ts +2 -0
  117. package/build/legacy/useMutationState.js +51 -0
  118. package/build/legacy/useMutationState.js.map +1 -0
  119. package/build/legacy/usePrefetchInfiniteQuery.cjs +37 -0
  120. package/build/legacy/usePrefetchInfiniteQuery.cjs.map +1 -0
  121. package/build/legacy/usePrefetchInfiniteQuery.d.cts +1 -0
  122. package/build/legacy/usePrefetchInfiniteQuery.d.ts +1 -0
  123. package/build/legacy/usePrefetchInfiniteQuery.js +12 -0
  124. package/build/legacy/usePrefetchInfiniteQuery.js.map +1 -0
  125. package/build/legacy/usePrefetchQuery.cjs +37 -0
  126. package/build/legacy/usePrefetchQuery.cjs.map +1 -0
  127. package/build/legacy/usePrefetchQuery.d.cts +1 -0
  128. package/build/legacy/usePrefetchQuery.d.ts +1 -0
  129. package/build/legacy/usePrefetchQuery.js +12 -0
  130. package/build/legacy/usePrefetchQuery.js.map +1 -0
  131. package/build/legacy/useQueries.cjs +128 -0
  132. package/build/legacy/useQueries.cjs.map +1 -0
  133. package/build/legacy/useQueries.d.cts +3 -0
  134. package/build/legacy/useQueries.d.ts +3 -0
  135. package/build/legacy/useQueries.js +107 -0
  136. package/build/legacy/useQueries.js.map +1 -0
  137. package/build/legacy/useQuery.cjs +36 -0
  138. package/build/legacy/useQuery.cjs.map +1 -0
  139. package/build/legacy/useQuery.d.cts +1 -0
  140. package/build/legacy/useQuery.d.ts +1 -0
  141. package/build/legacy/useQuery.js +12 -0
  142. package/build/legacy/useQuery.js.map +1 -0
  143. package/build/legacy/useSuspenseInfiniteQuery.cjs +51 -0
  144. package/build/legacy/useSuspenseInfiniteQuery.cjs.map +1 -0
  145. package/build/legacy/useSuspenseInfiniteQuery.d.cts +1 -0
  146. package/build/legacy/useSuspenseInfiniteQuery.d.ts +1 -0
  147. package/build/legacy/useSuspenseInfiniteQuery.js +27 -0
  148. package/build/legacy/useSuspenseInfiniteQuery.js.map +1 -0
  149. package/build/legacy/useSuspenseQueries.cjs +56 -0
  150. package/build/legacy/useSuspenseQueries.cjs.map +1 -0
  151. package/build/legacy/useSuspenseQueries.d.cts +3 -0
  152. package/build/legacy/useSuspenseQueries.d.ts +3 -0
  153. package/build/legacy/useSuspenseQueries.js +32 -0
  154. package/build/legacy/useSuspenseQueries.js.map +1 -0
  155. package/build/legacy/useSuspenseQuery.cjs +52 -0
  156. package/build/legacy/useSuspenseQuery.cjs.map +1 -0
  157. package/build/legacy/useSuspenseQuery.d.cts +1 -0
  158. package/build/legacy/useSuspenseQuery.d.ts +1 -0
  159. package/build/legacy/useSuspenseQuery.js +28 -0
  160. package/build/legacy/useSuspenseQuery.js.map +1 -0
  161. package/build/modern/HydrationBoundary.cjs +91 -0
  162. package/build/modern/HydrationBoundary.cjs.map +1 -0
  163. package/build/modern/HydrationBoundary.d.cts +2 -0
  164. package/build/modern/HydrationBoundary.d.ts +2 -0
  165. package/build/modern/HydrationBoundary.js +57 -0
  166. package/build/modern/HydrationBoundary.js.map +1 -0
  167. package/build/modern/IsRestoringProvider.cjs +47 -0
  168. package/build/modern/IsRestoringProvider.cjs.map +1 -0
  169. package/build/modern/IsRestoringProvider.d.cts +2 -0
  170. package/build/modern/IsRestoringProvider.d.ts +2 -0
  171. package/build/modern/IsRestoringProvider.js +12 -0
  172. package/build/modern/IsRestoringProvider.js.map +1 -0
  173. package/build/modern/QueryClientProvider.cjs +72 -0
  174. package/build/modern/QueryClientProvider.cjs.map +1 -0
  175. package/build/modern/QueryClientProvider.d.cts +4 -0
  176. package/build/modern/QueryClientProvider.d.ts +4 -0
  177. package/build/modern/QueryClientProvider.js +36 -0
  178. package/build/modern/QueryClientProvider.js.map +1 -0
  179. package/build/modern/QueryErrorResetBoundary.cjs +67 -0
  180. package/build/modern/QueryErrorResetBoundary.cjs.map +1 -0
  181. package/build/modern/QueryErrorResetBoundary.d.cts +8 -0
  182. package/build/modern/QueryErrorResetBoundary.d.ts +8 -0
  183. package/build/modern/QueryErrorResetBoundary.js +32 -0
  184. package/build/modern/QueryErrorResetBoundary.js.map +1 -0
  185. package/build/modern/_tsup-dts-rollup.d.cts +993 -0
  186. package/build/modern/_tsup-dts-rollup.d.ts +993 -0
  187. package/build/modern/errorBoundaryUtils.cjs +69 -0
  188. package/build/modern/errorBoundaryUtils.cjs.map +1 -0
  189. package/build/modern/errorBoundaryUtils.d.cts +3 -0
  190. package/build/modern/errorBoundaryUtils.d.ts +3 -0
  191. package/build/modern/errorBoundaryUtils.js +33 -0
  192. package/build/modern/errorBoundaryUtils.js.map +1 -0
  193. package/build/modern/index.cjs +97 -0
  194. package/build/modern/index.cjs.map +1 -0
  195. package/build/modern/index.d.cts +206 -0
  196. package/build/modern/index.d.ts +206 -0
  197. package/build/modern/index.js +54 -0
  198. package/build/modern/index.js.map +1 -0
  199. package/build/modern/infiniteQueryOptions.cjs +33 -0
  200. package/build/modern/infiniteQueryOptions.cjs.map +1 -0
  201. package/build/modern/infiniteQueryOptions.d.cts +4 -0
  202. package/build/modern/infiniteQueryOptions.d.ts +4 -0
  203. package/build/modern/infiniteQueryOptions.js +8 -0
  204. package/build/modern/infiniteQueryOptions.js.map +1 -0
  205. package/build/modern/mutationOptions.cjs +33 -0
  206. package/build/modern/mutationOptions.cjs.map +1 -0
  207. package/build/modern/mutationOptions.d.cts +1 -0
  208. package/build/modern/mutationOptions.d.ts +1 -0
  209. package/build/modern/mutationOptions.js +8 -0
  210. package/build/modern/mutationOptions.js.map +1 -0
  211. package/build/modern/queryOptions.cjs +33 -0
  212. package/build/modern/queryOptions.cjs.map +1 -0
  213. package/build/modern/queryOptions.d.cts +4 -0
  214. package/build/modern/queryOptions.d.ts +4 -0
  215. package/build/modern/queryOptions.js +8 -0
  216. package/build/modern/queryOptions.js.map +1 -0
  217. package/build/modern/suspense.cjs +58 -0
  218. package/build/modern/suspense.cjs.map +1 -0
  219. package/build/modern/suspense.d.cts +5 -0
  220. package/build/modern/suspense.d.ts +5 -0
  221. package/build/modern/suspense.js +29 -0
  222. package/build/modern/suspense.js.map +1 -0
  223. package/build/modern/types.cjs +19 -0
  224. package/build/modern/types.cjs.map +1 -0
  225. package/build/modern/types.d.cts +24 -0
  226. package/build/modern/types.d.ts +24 -0
  227. package/build/modern/types.js +1 -0
  228. package/build/modern/types.js.map +1 -0
  229. package/build/modern/useBaseQuery.cjs +130 -0
  230. package/build/modern/useBaseQuery.cjs.map +1 -0
  231. package/build/modern/useBaseQuery.d.cts +1 -0
  232. package/build/modern/useBaseQuery.d.ts +1 -0
  233. package/build/modern/useBaseQuery.js +105 -0
  234. package/build/modern/useBaseQuery.js.map +1 -0
  235. package/build/modern/useInfiniteQuery.cjs +40 -0
  236. package/build/modern/useInfiniteQuery.cjs.map +1 -0
  237. package/build/modern/useInfiniteQuery.d.cts +1 -0
  238. package/build/modern/useInfiniteQuery.d.ts +1 -0
  239. package/build/modern/useInfiniteQuery.js +16 -0
  240. package/build/modern/useInfiniteQuery.js.map +1 -0
  241. package/build/modern/useIsFetching.cjs +56 -0
  242. package/build/modern/useIsFetching.cjs.map +1 -0
  243. package/build/modern/useIsFetching.d.cts +1 -0
  244. package/build/modern/useIsFetching.d.ts +1 -0
  245. package/build/modern/useIsFetching.js +22 -0
  246. package/build/modern/useIsFetching.js.map +1 -0
  247. package/build/modern/useMutation.cjs +74 -0
  248. package/build/modern/useMutation.cjs.map +1 -0
  249. package/build/modern/useMutation.d.cts +1 -0
  250. package/build/modern/useMutation.d.ts +1 -0
  251. package/build/modern/useMutation.js +45 -0
  252. package/build/modern/useMutation.js.map +1 -0
  253. package/build/modern/useMutationState.cjs +86 -0
  254. package/build/modern/useMutationState.cjs.map +1 -0
  255. package/build/modern/useMutationState.d.cts +2 -0
  256. package/build/modern/useMutationState.d.ts +2 -0
  257. package/build/modern/useMutationState.js +51 -0
  258. package/build/modern/useMutationState.js.map +1 -0
  259. package/build/modern/usePrefetchInfiniteQuery.cjs +37 -0
  260. package/build/modern/usePrefetchInfiniteQuery.cjs.map +1 -0
  261. package/build/modern/usePrefetchInfiniteQuery.d.cts +1 -0
  262. package/build/modern/usePrefetchInfiniteQuery.d.ts +1 -0
  263. package/build/modern/usePrefetchInfiniteQuery.js +12 -0
  264. package/build/modern/usePrefetchInfiniteQuery.js.map +1 -0
  265. package/build/modern/usePrefetchQuery.cjs +37 -0
  266. package/build/modern/usePrefetchQuery.cjs.map +1 -0
  267. package/build/modern/usePrefetchQuery.d.cts +1 -0
  268. package/build/modern/usePrefetchQuery.d.ts +1 -0
  269. package/build/modern/usePrefetchQuery.js +12 -0
  270. package/build/modern/usePrefetchQuery.js.map +1 -0
  271. package/build/modern/useQueries.cjs +128 -0
  272. package/build/modern/useQueries.cjs.map +1 -0
  273. package/build/modern/useQueries.d.cts +3 -0
  274. package/build/modern/useQueries.d.ts +3 -0
  275. package/build/modern/useQueries.js +107 -0
  276. package/build/modern/useQueries.js.map +1 -0
  277. package/build/modern/useQuery.cjs +36 -0
  278. package/build/modern/useQuery.cjs.map +1 -0
  279. package/build/modern/useQuery.d.cts +1 -0
  280. package/build/modern/useQuery.d.ts +1 -0
  281. package/build/modern/useQuery.js +12 -0
  282. package/build/modern/useQuery.js.map +1 -0
  283. package/build/modern/useSuspenseInfiniteQuery.cjs +51 -0
  284. package/build/modern/useSuspenseInfiniteQuery.cjs.map +1 -0
  285. package/build/modern/useSuspenseInfiniteQuery.d.cts +1 -0
  286. package/build/modern/useSuspenseInfiniteQuery.d.ts +1 -0
  287. package/build/modern/useSuspenseInfiniteQuery.js +27 -0
  288. package/build/modern/useSuspenseInfiniteQuery.js.map +1 -0
  289. package/build/modern/useSuspenseQueries.cjs +56 -0
  290. package/build/modern/useSuspenseQueries.cjs.map +1 -0
  291. package/build/modern/useSuspenseQueries.d.cts +3 -0
  292. package/build/modern/useSuspenseQueries.d.ts +3 -0
  293. package/build/modern/useSuspenseQueries.js +32 -0
  294. package/build/modern/useSuspenseQueries.js.map +1 -0
  295. package/build/modern/useSuspenseQuery.cjs +52 -0
  296. package/build/modern/useSuspenseQuery.cjs.map +1 -0
  297. package/build/modern/useSuspenseQuery.d.cts +1 -0
  298. package/build/modern/useSuspenseQuery.d.ts +1 -0
  299. package/build/modern/useSuspenseQuery.js +28 -0
  300. package/build/modern/useSuspenseQuery.js.map +1 -0
  301. package/build/query-codemods/eslint.config.js +18 -0
  302. package/build/query-codemods/package.json +38 -0
  303. package/build/query-codemods/root.eslint.config.js +64 -0
  304. package/build/query-codemods/tsconfig.json +8 -0
  305. package/build/query-codemods/vite.config.ts +30 -0
  306. package/changes.json +5 -0
  307. package/package.json +104 -0
  308. package/src/HydrationBoundary.tsx +111 -0
  309. package/src/IsRestoringProvider.ts +7 -0
  310. package/src/QueryClientProvider.tsx +45 -0
  311. package/src/QueryErrorResetBoundary.tsx +56 -0
  312. package/src/errorBoundaryUtils.ts +82 -0
  313. package/src/index.ts +56 -0
  314. package/src/infiniteQueryOptions.ts +149 -0
  315. package/src/mutationOptions.ts +41 -0
  316. package/src/queryOptions.ts +87 -0
  317. package/src/suspense.ts +80 -0
  318. package/src/types.ts +242 -0
  319. package/src/useBaseQuery.ts +170 -0
  320. package/src/useInfiniteQuery.ts +81 -0
  321. package/src/useIsFetching.ts +24 -0
  322. package/src/useMutation.ts +69 -0
  323. package/src/useMutationState.ts +75 -0
  324. package/src/usePrefetchInfiniteQuery.tsx +30 -0
  325. package/src/usePrefetchQuery.tsx +19 -0
  326. package/src/useQueries.ts +328 -0
  327. package/src/useQuery.ts +52 -0
  328. package/src/useSuspenseInfiniteQuery.ts +50 -0
  329. package/src/useSuspenseQueries.ts +211 -0
  330. package/src/useSuspenseQuery.ts +34 -0
@@ -0,0 +1,87 @@
1
+ import type {
2
+ DataTag,
3
+ DefaultError,
4
+ InitialDataFunction,
5
+ NonUndefinedGuard,
6
+ OmitKeyof,
7
+ QueryFunction,
8
+ QueryKey,
9
+ SkipToken,
10
+ } from '@tanstack/query-core'
11
+ import type { UseQueryOptions } from './types'
12
+
13
+ export type UndefinedInitialDataOptions<
14
+ TQueryFnData = unknown,
15
+ TError = DefaultError,
16
+ TData = TQueryFnData,
17
+ TQueryKey extends QueryKey = QueryKey,
18
+ > = UseQueryOptions<TQueryFnData, TError, TData, TQueryKey> & {
19
+ initialData?:
20
+ | undefined
21
+ | InitialDataFunction<NonUndefinedGuard<TQueryFnData>>
22
+ | NonUndefinedGuard<TQueryFnData>
23
+ }
24
+
25
+ export type UnusedSkipTokenOptions<
26
+ TQueryFnData = unknown,
27
+ TError = DefaultError,
28
+ TData = TQueryFnData,
29
+ TQueryKey extends QueryKey = QueryKey,
30
+ > = OmitKeyof<
31
+ UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
32
+ 'queryFn'
33
+ > & {
34
+ queryFn?: Exclude<
35
+ UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>['queryFn'],
36
+ SkipToken | undefined
37
+ >
38
+ }
39
+
40
+ export type DefinedInitialDataOptions<
41
+ TQueryFnData = unknown,
42
+ TError = DefaultError,
43
+ TData = TQueryFnData,
44
+ TQueryKey extends QueryKey = QueryKey,
45
+ > = Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'queryFn'> & {
46
+ initialData:
47
+ | NonUndefinedGuard<TQueryFnData>
48
+ | (() => NonUndefinedGuard<TQueryFnData>)
49
+ queryFn?: QueryFunction<TQueryFnData, TQueryKey>
50
+ }
51
+
52
+ export function queryOptions<
53
+ TQueryFnData = unknown,
54
+ TError = DefaultError,
55
+ TData = TQueryFnData,
56
+ TQueryKey extends QueryKey = QueryKey,
57
+ >(
58
+ options: DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,
59
+ ): DefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey> & {
60
+ queryKey: DataTag<TQueryKey, TQueryFnData, TError>
61
+ }
62
+
63
+ export function queryOptions<
64
+ TQueryFnData = unknown,
65
+ TError = DefaultError,
66
+ TData = TQueryFnData,
67
+ TQueryKey extends QueryKey = QueryKey,
68
+ >(
69
+ options: UnusedSkipTokenOptions<TQueryFnData, TError, TData, TQueryKey>,
70
+ ): UnusedSkipTokenOptions<TQueryFnData, TError, TData, TQueryKey> & {
71
+ queryKey: DataTag<TQueryKey, TQueryFnData, TError>
72
+ }
73
+
74
+ export function queryOptions<
75
+ TQueryFnData = unknown,
76
+ TError = DefaultError,
77
+ TData = TQueryFnData,
78
+ TQueryKey extends QueryKey = QueryKey,
79
+ >(
80
+ options: UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey>,
81
+ ): UndefinedInitialDataOptions<TQueryFnData, TError, TData, TQueryKey> & {
82
+ queryKey: DataTag<TQueryKey, TQueryFnData, TError>
83
+ }
84
+
85
+ export function queryOptions(options: unknown) {
86
+ return options
87
+ }
@@ -0,0 +1,80 @@
1
+ import type {
2
+ DefaultError,
3
+ DefaultedQueryObserverOptions,
4
+ Query,
5
+ QueryKey,
6
+ QueryObserver,
7
+ QueryObserverResult,
8
+ } from '@tanstack/query-core'
9
+ import type { QueryErrorResetBoundaryValue } from './QueryErrorResetBoundary'
10
+
11
+ export const defaultThrowOnError = <
12
+ TQueryFnData = unknown,
13
+ TError = DefaultError,
14
+ TData = TQueryFnData,
15
+ TQueryKey extends QueryKey = QueryKey,
16
+ >(
17
+ _error: TError,
18
+ query: Query<TQueryFnData, TError, TData, TQueryKey>,
19
+ ) => query.state.data === undefined
20
+
21
+ export const ensureSuspenseTimers = (
22
+ defaultedOptions: DefaultedQueryObserverOptions<any, any, any, any, any>,
23
+ ) => {
24
+ if (defaultedOptions.suspense) {
25
+ // Handle staleTime to ensure minimum 1000ms in Suspense mode
26
+ // This prevents unnecessary refetching when components remount after suspending
27
+ const MIN_SUSPENSE_TIME_MS = 1000
28
+
29
+ const clamp = (value: number | 'static' | undefined) =>
30
+ value === 'static'
31
+ ? value
32
+ : Math.max(value ?? MIN_SUSPENSE_TIME_MS, MIN_SUSPENSE_TIME_MS)
33
+
34
+ const originalStaleTime = defaultedOptions.staleTime
35
+ defaultedOptions.staleTime =
36
+ typeof originalStaleTime === 'function'
37
+ ? (...args) => clamp(originalStaleTime(...args))
38
+ : clamp(originalStaleTime)
39
+
40
+ if (typeof defaultedOptions.gcTime === 'number') {
41
+ defaultedOptions.gcTime = Math.max(
42
+ defaultedOptions.gcTime,
43
+ MIN_SUSPENSE_TIME_MS,
44
+ )
45
+ }
46
+ }
47
+ }
48
+
49
+ export const willFetch = (
50
+ result: QueryObserverResult<any, any>,
51
+ isRestoring: boolean,
52
+ ) => result.isLoading && result.isFetching && !isRestoring
53
+
54
+ export const shouldSuspend = (
55
+ defaultedOptions:
56
+ | DefaultedQueryObserverOptions<any, any, any, any, any>
57
+ | undefined,
58
+ result: QueryObserverResult<any, any>,
59
+ ) => defaultedOptions?.suspense && result.isPending
60
+
61
+ export const fetchOptimistic = <
62
+ TQueryFnData,
63
+ TError,
64
+ TData,
65
+ TQueryData,
66
+ TQueryKey extends QueryKey,
67
+ >(
68
+ defaultedOptions: DefaultedQueryObserverOptions<
69
+ TQueryFnData,
70
+ TError,
71
+ TData,
72
+ TQueryData,
73
+ TQueryKey
74
+ >,
75
+ observer: QueryObserver<TQueryFnData, TError, TData, TQueryData, TQueryKey>,
76
+ errorResetBoundary: QueryErrorResetBoundaryValue,
77
+ ) =>
78
+ observer.fetchOptimistic(defaultedOptions).catch(() => {
79
+ errorResetBoundary.clearReset()
80
+ })
package/src/types.ts ADDED
@@ -0,0 +1,242 @@
1
+ /* istanbul ignore file */
2
+
3
+ import type {
4
+ DefaultError,
5
+ DefinedInfiniteQueryObserverResult,
6
+ DefinedQueryObserverResult,
7
+ DistributiveOmit,
8
+ FetchQueryOptions,
9
+ InfiniteQueryObserverOptions,
10
+ InfiniteQueryObserverResult,
11
+ MutateFunction,
12
+ MutationObserverOptions,
13
+ MutationObserverResult,
14
+ OmitKeyof,
15
+ Override,
16
+ QueryKey,
17
+ QueryObserverOptions,
18
+ QueryObserverResult,
19
+ SkipToken,
20
+ } from '@tanstack/query-core'
21
+
22
+ export type AnyUseBaseQueryOptions = UseBaseQueryOptions<
23
+ any,
24
+ any,
25
+ any,
26
+ any,
27
+ any
28
+ >
29
+ export interface UseBaseQueryOptions<
30
+ TQueryFnData = unknown,
31
+ TError = DefaultError,
32
+ TData = TQueryFnData,
33
+ TQueryData = TQueryFnData,
34
+ TQueryKey extends QueryKey = QueryKey,
35
+ > extends QueryObserverOptions<
36
+ TQueryFnData,
37
+ TError,
38
+ TData,
39
+ TQueryData,
40
+ TQueryKey
41
+ > {
42
+ /**
43
+ * Set this to `false` to unsubscribe this observer from updates to the query cache.
44
+ * Defaults to `true`.
45
+ */
46
+ subscribed?: boolean
47
+ }
48
+
49
+ export interface UsePrefetchQueryOptions<
50
+ TQueryFnData = unknown,
51
+ TError = DefaultError,
52
+ TData = TQueryFnData,
53
+ TQueryKey extends QueryKey = QueryKey,
54
+ > extends OmitKeyof<
55
+ FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
56
+ 'queryFn'
57
+ > {
58
+ queryFn?: Exclude<
59
+ FetchQueryOptions<TQueryFnData, TError, TData, TQueryKey>['queryFn'],
60
+ SkipToken
61
+ >
62
+ }
63
+
64
+ export type AnyUseQueryOptions = UseQueryOptions<any, any, any, any>
65
+ export interface UseQueryOptions<
66
+ TQueryFnData = unknown,
67
+ TError = DefaultError,
68
+ TData = TQueryFnData,
69
+ TQueryKey extends QueryKey = QueryKey,
70
+ > extends OmitKeyof<
71
+ UseBaseQueryOptions<TQueryFnData, TError, TData, TQueryFnData, TQueryKey>,
72
+ 'suspense'
73
+ > {}
74
+
75
+ export type AnyUseSuspenseQueryOptions = UseSuspenseQueryOptions<
76
+ any,
77
+ any,
78
+ any,
79
+ any
80
+ >
81
+ export interface UseSuspenseQueryOptions<
82
+ TQueryFnData = unknown,
83
+ TError = DefaultError,
84
+ TData = TQueryFnData,
85
+ TQueryKey extends QueryKey = QueryKey,
86
+ > extends OmitKeyof<
87
+ UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>,
88
+ 'queryFn' | 'enabled' | 'throwOnError' | 'placeholderData'
89
+ > {
90
+ queryFn?: Exclude<
91
+ UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>['queryFn'],
92
+ SkipToken
93
+ >
94
+ }
95
+
96
+ export type AnyUseInfiniteQueryOptions = UseInfiniteQueryOptions<
97
+ any,
98
+ any,
99
+ any,
100
+ any,
101
+ any
102
+ >
103
+ export interface UseInfiniteQueryOptions<
104
+ TQueryFnData = unknown,
105
+ TError = DefaultError,
106
+ TData = TQueryFnData,
107
+ TQueryKey extends QueryKey = QueryKey,
108
+ TPageParam = unknown,
109
+ > extends OmitKeyof<
110
+ InfiniteQueryObserverOptions<
111
+ TQueryFnData,
112
+ TError,
113
+ TData,
114
+ TQueryKey,
115
+ TPageParam
116
+ >,
117
+ 'suspense'
118
+ > {
119
+ /**
120
+ * Set this to `false` to unsubscribe this observer from updates to the query cache.
121
+ * Defaults to `true`.
122
+ */
123
+ subscribed?: boolean
124
+ }
125
+
126
+ export type AnyUseSuspenseInfiniteQueryOptions =
127
+ UseSuspenseInfiniteQueryOptions<any, any, any, any, any>
128
+ export interface UseSuspenseInfiniteQueryOptions<
129
+ TQueryFnData = unknown,
130
+ TError = DefaultError,
131
+ TData = TQueryFnData,
132
+ TQueryKey extends QueryKey = QueryKey,
133
+ TPageParam = unknown,
134
+ > extends OmitKeyof<
135
+ UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>,
136
+ 'queryFn' | 'enabled' | 'throwOnError' | 'placeholderData'
137
+ > {
138
+ queryFn?: Exclude<
139
+ UseInfiniteQueryOptions<
140
+ TQueryFnData,
141
+ TError,
142
+ TData,
143
+ TQueryKey,
144
+ TPageParam
145
+ >['queryFn'],
146
+ SkipToken
147
+ >
148
+ }
149
+
150
+ export type UseBaseQueryResult<
151
+ TData = unknown,
152
+ TError = DefaultError,
153
+ > = QueryObserverResult<TData, TError>
154
+
155
+ export type UseQueryResult<
156
+ TData = unknown,
157
+ TError = DefaultError,
158
+ > = UseBaseQueryResult<TData, TError>
159
+
160
+ export type UseSuspenseQueryResult<
161
+ TData = unknown,
162
+ TError = DefaultError,
163
+ > = DistributiveOmit<
164
+ DefinedQueryObserverResult<TData, TError>,
165
+ 'isPlaceholderData' | 'promise'
166
+ >
167
+
168
+ export type DefinedUseQueryResult<
169
+ TData = unknown,
170
+ TError = DefaultError,
171
+ > = DefinedQueryObserverResult<TData, TError>
172
+
173
+ export type UseInfiniteQueryResult<
174
+ TData = unknown,
175
+ TError = DefaultError,
176
+ > = InfiniteQueryObserverResult<TData, TError>
177
+
178
+ export type DefinedUseInfiniteQueryResult<
179
+ TData = unknown,
180
+ TError = DefaultError,
181
+ > = DefinedInfiniteQueryObserverResult<TData, TError>
182
+
183
+ export type UseSuspenseInfiniteQueryResult<
184
+ TData = unknown,
185
+ TError = DefaultError,
186
+ > = OmitKeyof<
187
+ DefinedInfiniteQueryObserverResult<TData, TError>,
188
+ 'isPlaceholderData' | 'promise'
189
+ >
190
+
191
+ export type AnyUseMutationOptions = UseMutationOptions<any, any, any, any>
192
+ export interface UseMutationOptions<
193
+ TData = unknown,
194
+ TError = DefaultError,
195
+ TVariables = void,
196
+ TOnMutateResult = unknown,
197
+ > extends OmitKeyof<
198
+ MutationObserverOptions<TData, TError, TVariables, TOnMutateResult>,
199
+ '_defaulted'
200
+ > {}
201
+
202
+ export type UseMutateFunction<
203
+ TData = unknown,
204
+ TError = DefaultError,
205
+ TVariables = void,
206
+ TOnMutateResult = unknown,
207
+ > = (
208
+ ...args: Parameters<
209
+ MutateFunction<TData, TError, TVariables, TOnMutateResult>
210
+ >
211
+ ) => void
212
+
213
+ export type UseMutateAsyncFunction<
214
+ TData = unknown,
215
+ TError = DefaultError,
216
+ TVariables = void,
217
+ TOnMutateResult = unknown,
218
+ > = MutateFunction<TData, TError, TVariables, TOnMutateResult>
219
+
220
+ export type UseBaseMutationResult<
221
+ TData = unknown,
222
+ TError = DefaultError,
223
+ TVariables = unknown,
224
+ TOnMutateResult = unknown,
225
+ > = Override<
226
+ MutationObserverResult<TData, TError, TVariables, TOnMutateResult>,
227
+ { mutate: UseMutateFunction<TData, TError, TVariables, TOnMutateResult> }
228
+ > & {
229
+ mutateAsync: UseMutateAsyncFunction<
230
+ TData,
231
+ TError,
232
+ TVariables,
233
+ TOnMutateResult
234
+ >
235
+ }
236
+
237
+ export type UseMutationResult<
238
+ TData = unknown,
239
+ TError = DefaultError,
240
+ TVariables = unknown,
241
+ TOnMutateResult = unknown,
242
+ > = UseBaseMutationResult<TData, TError, TVariables, TOnMutateResult>
@@ -0,0 +1,170 @@
1
+ 'use client'
2
+ import * as React from 'react'
3
+
4
+ import { environmentManager, noop, notifyManager } from '@tanstack/query-core'
5
+ import { useQueryClient } from './QueryClientProvider'
6
+ import { useQueryErrorResetBoundary } from './QueryErrorResetBoundary'
7
+ import {
8
+ ensurePreventErrorBoundaryRetry,
9
+ getHasError,
10
+ useClearResetErrorBoundary,
11
+ } from './errorBoundaryUtils'
12
+ import { useIsRestoring } from './IsRestoringProvider'
13
+ import {
14
+ ensureSuspenseTimers,
15
+ fetchOptimistic,
16
+ shouldSuspend,
17
+ willFetch,
18
+ } from './suspense'
19
+ import type {
20
+ QueryClient,
21
+ QueryKey,
22
+ QueryObserver,
23
+ QueryObserverResult,
24
+ } from '@tanstack/query-core'
25
+ import type { UseBaseQueryOptions } from './types'
26
+
27
+ export function useBaseQuery<
28
+ TQueryFnData,
29
+ TError,
30
+ TData,
31
+ TQueryData,
32
+ TQueryKey extends QueryKey,
33
+ >(
34
+ options: UseBaseQueryOptions<
35
+ TQueryFnData,
36
+ TError,
37
+ TData,
38
+ TQueryData,
39
+ TQueryKey
40
+ >,
41
+ Observer: typeof QueryObserver,
42
+ queryClient?: QueryClient,
43
+ ): QueryObserverResult<TData, TError> {
44
+ if (process.env.NODE_ENV !== 'production') {
45
+ if (typeof options !== 'object' || Array.isArray(options)) {
46
+ throw new Error(
47
+ 'Bad argument type. Starting with v5, only the "Object" form is allowed when calling query related functions. Please use the error stack to find the culprit call. More info here: https://tanstack.com/query/latest/docs/react/guides/migrating-to-v5#supports-a-single-signature-one-object',
48
+ )
49
+ }
50
+ }
51
+
52
+ const isRestoring = useIsRestoring()
53
+ const errorResetBoundary = useQueryErrorResetBoundary()
54
+ const client = useQueryClient(queryClient)
55
+ const defaultedOptions = client.defaultQueryOptions(options)
56
+ ;(client.getDefaultOptions().queries as any)?._experimental_beforeQuery?.(
57
+ defaultedOptions,
58
+ )
59
+
60
+ const query = client
61
+ .getQueryCache()
62
+ .get<
63
+ TQueryFnData,
64
+ TError,
65
+ TQueryData,
66
+ TQueryKey
67
+ >(defaultedOptions.queryHash)
68
+
69
+ if (process.env.NODE_ENV !== 'production') {
70
+ if (!defaultedOptions.queryFn) {
71
+ console.error(
72
+ `[${defaultedOptions.queryHash}]: No queryFn was passed as an option, and no default queryFn was found. The queryFn parameter is only optional when using a default queryFn. More info here: https://tanstack.com/query/latest/docs/framework/react/guides/default-query-function`,
73
+ )
74
+ }
75
+ }
76
+
77
+ // Make sure results are optimistically set in fetching state before subscribing or updating options
78
+ defaultedOptions._optimisticResults = isRestoring
79
+ ? 'isRestoring'
80
+ : 'optimistic'
81
+
82
+ ensureSuspenseTimers(defaultedOptions)
83
+ ensurePreventErrorBoundaryRetry(defaultedOptions, errorResetBoundary, query)
84
+ useClearResetErrorBoundary(errorResetBoundary)
85
+
86
+ // this needs to be invoked before creating the Observer because that can create a cache entry
87
+ const isNewCacheEntry = !client
88
+ .getQueryCache()
89
+ .get(defaultedOptions.queryHash)
90
+
91
+ const [observer] = React.useState(
92
+ () =>
93
+ new Observer<TQueryFnData, TError, TData, TQueryData, TQueryKey>(
94
+ client,
95
+ defaultedOptions,
96
+ ),
97
+ )
98
+
99
+ // note: this must be called before useSyncExternalStore
100
+ const result = observer.getOptimisticResult(defaultedOptions)
101
+
102
+ const shouldSubscribe = !isRestoring && options.subscribed !== false
103
+ React.useSyncExternalStore(
104
+ React.useCallback(
105
+ (onStoreChange) => {
106
+ const unsubscribe = shouldSubscribe
107
+ ? observer.subscribe(notifyManager.batchCalls(onStoreChange))
108
+ : noop
109
+
110
+ // Update result to make sure we did not miss any query updates
111
+ // between creating the observer and subscribing to it.
112
+ observer.updateResult()
113
+
114
+ return unsubscribe
115
+ },
116
+ [observer, shouldSubscribe],
117
+ ),
118
+ () => observer.getCurrentResult(),
119
+ () => observer.getCurrentResult(),
120
+ )
121
+
122
+ React.useEffect(() => {
123
+ observer.setOptions(defaultedOptions)
124
+ }, [defaultedOptions, observer])
125
+
126
+ // Handle suspense
127
+ if (shouldSuspend(defaultedOptions, result)) {
128
+ throw fetchOptimistic(defaultedOptions, observer, errorResetBoundary)
129
+ }
130
+
131
+ // Handle error boundary
132
+ if (
133
+ getHasError({
134
+ result,
135
+ errorResetBoundary,
136
+ throwOnError: defaultedOptions.throwOnError,
137
+ query,
138
+ suspense: defaultedOptions.suspense,
139
+ })
140
+ ) {
141
+ throw result.error
142
+ }
143
+
144
+ ;(client.getDefaultOptions().queries as any)?._experimental_afterQuery?.(
145
+ defaultedOptions,
146
+ result,
147
+ )
148
+
149
+ if (
150
+ defaultedOptions.experimental_prefetchInRender &&
151
+ !environmentManager.isServer() &&
152
+ willFetch(result, isRestoring)
153
+ ) {
154
+ const promise = isNewCacheEntry
155
+ ? // Fetch immediately on render in order to ensure `.promise` is resolved even if the component is unmounted
156
+ fetchOptimistic(defaultedOptions, observer, errorResetBoundary)
157
+ : // subscribe to the "cache promise" so that we can finalize the currentThenable once data comes in
158
+ query?.promise
159
+
160
+ promise?.catch(noop).finally(() => {
161
+ // `.updateResult()` will trigger `.#currentThenable` to finalize
162
+ observer.updateResult()
163
+ })
164
+ }
165
+
166
+ // Handle result property usage tracking
167
+ return !defaultedOptions.notifyOnChangeProps
168
+ ? observer.trackResult(result)
169
+ : result
170
+ }
@@ -0,0 +1,81 @@
1
+ 'use client'
2
+ import { InfiniteQueryObserver } from '@tanstack/query-core'
3
+ import { useBaseQuery } from './useBaseQuery'
4
+ import type {
5
+ DefaultError,
6
+ InfiniteData,
7
+ QueryClient,
8
+ QueryKey,
9
+ QueryObserver,
10
+ } from '@tanstack/query-core'
11
+ import type {
12
+ DefinedUseInfiniteQueryResult,
13
+ UseInfiniteQueryOptions,
14
+ UseInfiniteQueryResult,
15
+ } from './types'
16
+ import type {
17
+ DefinedInitialDataInfiniteOptions,
18
+ UndefinedInitialDataInfiniteOptions,
19
+ } from './infiniteQueryOptions'
20
+
21
+ export function useInfiniteQuery<
22
+ TQueryFnData,
23
+ TError = DefaultError,
24
+ TData = InfiniteData<TQueryFnData>,
25
+ TQueryKey extends QueryKey = QueryKey,
26
+ TPageParam = unknown,
27
+ >(
28
+ options: DefinedInitialDataInfiniteOptions<
29
+ TQueryFnData,
30
+ TError,
31
+ TData,
32
+ TQueryKey,
33
+ TPageParam
34
+ >,
35
+ queryClient?: QueryClient,
36
+ ): DefinedUseInfiniteQueryResult<TData, TError>
37
+
38
+ export function useInfiniteQuery<
39
+ TQueryFnData,
40
+ TError = DefaultError,
41
+ TData = InfiniteData<TQueryFnData>,
42
+ TQueryKey extends QueryKey = QueryKey,
43
+ TPageParam = unknown,
44
+ >(
45
+ options: UndefinedInitialDataInfiniteOptions<
46
+ TQueryFnData,
47
+ TError,
48
+ TData,
49
+ TQueryKey,
50
+ TPageParam
51
+ >,
52
+ queryClient?: QueryClient,
53
+ ): UseInfiniteQueryResult<TData, TError>
54
+
55
+ export function useInfiniteQuery<
56
+ TQueryFnData,
57
+ TError = DefaultError,
58
+ TData = InfiniteData<TQueryFnData>,
59
+ TQueryKey extends QueryKey = QueryKey,
60
+ TPageParam = unknown,
61
+ >(
62
+ options: UseInfiniteQueryOptions<
63
+ TQueryFnData,
64
+ TError,
65
+ TData,
66
+ TQueryKey,
67
+ TPageParam
68
+ >,
69
+ queryClient?: QueryClient,
70
+ ): UseInfiniteQueryResult<TData, TError>
71
+
72
+ export function useInfiniteQuery(
73
+ options: UseInfiniteQueryOptions,
74
+ queryClient?: QueryClient,
75
+ ) {
76
+ return useBaseQuery(
77
+ options,
78
+ InfiniteQueryObserver as typeof QueryObserver,
79
+ queryClient,
80
+ )
81
+ }
@@ -0,0 +1,24 @@
1
+ 'use client'
2
+ import * as React from 'react'
3
+ import { notifyManager } from '@tanstack/query-core'
4
+
5
+ import { useQueryClient } from './QueryClientProvider'
6
+ import type { QueryClient, QueryFilters } from '@tanstack/query-core'
7
+
8
+ export function useIsFetching(
9
+ filters?: QueryFilters,
10
+ queryClient?: QueryClient,
11
+ ): number {
12
+ const client = useQueryClient(queryClient)
13
+ const queryCache = client.getQueryCache()
14
+
15
+ return React.useSyncExternalStore(
16
+ React.useCallback(
17
+ (onStoreChange) =>
18
+ queryCache.subscribe(notifyManager.batchCalls(onStoreChange)),
19
+ [queryCache],
20
+ ),
21
+ () => client.isFetching(filters),
22
+ () => client.isFetching(filters),
23
+ )
24
+ }