@qiaopeng/tanstack-query-plus 0.5.9 → 0.5.10

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 (250) hide show
  1. package/README.md +86 -55
  2. package/dist/{types/base.d.ts → base-CHnwqfyz.d.cts} +12 -14
  3. package/dist/base-CHnwqfyz.d.ts +52 -0
  4. package/dist/chunk-52ZO6Y67.cjs +1121 -0
  5. package/dist/chunk-52ZO6Y67.cjs.map +1 -0
  6. package/dist/chunk-5J6OXSLW.cjs +36 -0
  7. package/dist/chunk-5J6OXSLW.cjs.map +1 -0
  8. package/dist/chunk-6MAYHLTE.cjs +310 -0
  9. package/dist/chunk-6MAYHLTE.cjs.map +1 -0
  10. package/dist/chunk-ADS2QTMP.js +144 -0
  11. package/dist/chunk-ADS2QTMP.js.map +1 -0
  12. package/dist/chunk-APXNNHBD.cjs +374 -0
  13. package/dist/chunk-APXNNHBD.cjs.map +1 -0
  14. package/dist/chunk-AXMWOGNX.js +134 -0
  15. package/dist/chunk-AXMWOGNX.js.map +1 -0
  16. package/dist/chunk-B4KO3K3E.cjs +521 -0
  17. package/dist/chunk-B4KO3K3E.cjs.map +1 -0
  18. package/dist/chunk-BK3OTIBD.cjs +15 -0
  19. package/dist/chunk-BK3OTIBD.cjs.map +1 -0
  20. package/dist/chunk-BYAOQALW.js +13 -0
  21. package/dist/chunk-BYAOQALW.js.map +1 -0
  22. package/dist/chunk-CRTVS7VI.cjs +162 -0
  23. package/dist/chunk-CRTVS7VI.cjs.map +1 -0
  24. package/dist/chunk-EXITP7QO.js +288 -0
  25. package/dist/chunk-EXITP7QO.js.map +1 -0
  26. package/dist/chunk-GMO3PRZZ.js +565 -0
  27. package/dist/chunk-GMO3PRZZ.js.map +1 -0
  28. package/dist/chunk-HRO2DWKZ.js +12 -0
  29. package/dist/chunk-HRO2DWKZ.js.map +1 -0
  30. package/dist/chunk-JHDKUQSB.js +1069 -0
  31. package/dist/chunk-JHDKUQSB.js.map +1 -0
  32. package/dist/chunk-JN2Y6RSY.js +23 -0
  33. package/dist/chunk-JN2Y6RSY.js.map +1 -0
  34. package/dist/chunk-JRJSKRZW.cjs +29 -0
  35. package/dist/chunk-JRJSKRZW.cjs.map +1 -0
  36. package/dist/chunk-KC62H4VJ.js +123 -0
  37. package/dist/chunk-KC62H4VJ.js.map +1 -0
  38. package/dist/chunk-LHEHSLD5.js +31 -0
  39. package/dist/chunk-LHEHSLD5.js.map +1 -0
  40. package/dist/chunk-N4264P7N.cjs +156 -0
  41. package/dist/chunk-N4264P7N.cjs.map +1 -0
  42. package/dist/chunk-NF5QYPYC.cjs +133 -0
  43. package/dist/chunk-NF5QYPYC.cjs.map +1 -0
  44. package/dist/chunk-OFLCHKKE.cjs +28 -0
  45. package/dist/chunk-OFLCHKKE.cjs.map +1 -0
  46. package/dist/chunk-PCNSWVA5.cjs +602 -0
  47. package/dist/chunk-PCNSWVA5.cjs.map +1 -0
  48. package/dist/chunk-STOMAA2X.js +85 -0
  49. package/dist/chunk-STOMAA2X.js.map +1 -0
  50. package/dist/chunk-UVF5S6LX.cjs +15 -0
  51. package/dist/chunk-UVF5S6LX.cjs.map +1 -0
  52. package/dist/chunk-WEIXCDCA.cjs +90 -0
  53. package/dist/chunk-WEIXCDCA.cjs.map +1 -0
  54. package/dist/chunk-X3ZTSLBQ.js +355 -0
  55. package/dist/chunk-X3ZTSLBQ.js.map +1 -0
  56. package/dist/chunk-YEV73J4J.js +504 -0
  57. package/dist/chunk-YEV73J4J.js.map +1 -0
  58. package/dist/chunk-YW5PNTRU.cjs +14 -0
  59. package/dist/chunk-YW5PNTRU.cjs.map +1 -0
  60. package/dist/chunk-ZNXSWUIS.js +12 -0
  61. package/dist/chunk-ZNXSWUIS.js.map +1 -0
  62. package/dist/chunk-ZUEMBY4W.js +21 -0
  63. package/dist/chunk-ZUEMBY4W.js.map +1 -0
  64. package/dist/components/index.cjs +60 -0
  65. package/dist/components/index.cjs.map +1 -0
  66. package/dist/components/index.d.cts +43 -0
  67. package/dist/components/index.d.ts +43 -4
  68. package/dist/components/index.js +3 -4
  69. package/dist/components/index.js.map +1 -0
  70. package/dist/core/devtools.cjs +25 -0
  71. package/dist/core/devtools.cjs.map +1 -0
  72. package/dist/core/devtools.d.cts +17 -0
  73. package/dist/core/devtools.d.ts +9 -7
  74. package/dist/core/devtools.js +4 -16
  75. package/dist/core/devtools.js.map +1 -0
  76. package/dist/core/index.cjs +220 -0
  77. package/dist/core/index.cjs.map +1 -0
  78. package/dist/core/index.d.cts +196 -0
  79. package/dist/core/index.d.ts +196 -9
  80. package/dist/core/index.js +7 -8
  81. package/dist/core/index.js.map +1 -0
  82. package/dist/features/index.cjs +76 -0
  83. package/dist/features/index.cjs.map +1 -0
  84. package/dist/features/index.d.cts +86 -0
  85. package/dist/features/index.d.ts +86 -4
  86. package/dist/features/index.js +7 -3
  87. package/dist/features/index.js.map +1 -0
  88. package/dist/hooks/index.cjs +209 -0
  89. package/dist/hooks/index.cjs.map +1 -0
  90. package/dist/hooks/index.d.cts +377 -0
  91. package/dist/hooks/index.d.ts +377 -10
  92. package/dist/hooks/index.js +8 -9
  93. package/dist/hooks/index.js.map +1 -0
  94. package/dist/hooks/useInViewPrefetch.cjs +33 -0
  95. package/dist/hooks/useInViewPrefetch.cjs.map +1 -0
  96. package/dist/hooks/useInViewPrefetch.d.cts +12 -0
  97. package/dist/hooks/useInViewPrefetch.d.ts +6 -4
  98. package/dist/hooks/useInViewPrefetch.js +30 -20
  99. package/dist/hooks/useInViewPrefetch.js.map +1 -0
  100. package/dist/index.cjs +811 -0
  101. package/dist/index.cjs.map +1 -0
  102. package/dist/index.d.cts +36 -0
  103. package/dist/index.d.ts +36 -8
  104. package/dist/index.js +89 -7
  105. package/dist/index.js.map +1 -0
  106. package/dist/{types/offline.d.ts → offline-DVPtgoAS.d.ts} +15 -13
  107. package/dist/offline-xxeA_-6V.d.cts +99 -0
  108. package/dist/persistence-MRtkmhqq.d.cts +216 -0
  109. package/dist/persistence-tIrEb0pR.d.ts +216 -0
  110. package/dist/react-query/index.cjs +52 -0
  111. package/dist/react-query/index.cjs.map +1 -0
  112. package/dist/react-query/index.d.cts +1 -0
  113. package/dist/react-query/index.d.ts +1 -3
  114. package/dist/react-query/index.js +3 -1
  115. package/dist/react-query/index.js.map +1 -0
  116. package/dist/types/index.cjs +43 -0
  117. package/dist/types/index.cjs.map +1 -0
  118. package/dist/types/index.d.cts +157 -0
  119. package/dist/types/index.d.ts +116 -12
  120. package/dist/types/index.js +6 -8
  121. package/dist/types/index.js.map +1 -0
  122. package/dist/utils/index.cjs +234 -0
  123. package/dist/utils/index.cjs.map +1 -0
  124. package/dist/utils/index.d.cts +272 -0
  125. package/dist/utils/index.d.ts +272 -10
  126. package/dist/utils/index.js +9 -9
  127. package/dist/utils/index.js.map +1 -0
  128. package/package.json +13 -3
  129. package/dist/PersistQueryClientProvider.d.ts +0 -22
  130. package/dist/PersistQueryClientProvider.d.ts.map +0 -1
  131. package/dist/PersistQueryClientProvider.js +0 -57
  132. package/dist/components/LoadingFallback.d.ts +0 -16
  133. package/dist/components/LoadingFallback.d.ts.map +0 -1
  134. package/dist/components/LoadingFallback.js +0 -27
  135. package/dist/components/QueryErrorBoundary.d.ts +0 -12
  136. package/dist/components/QueryErrorBoundary.d.ts.map +0 -1
  137. package/dist/components/QueryErrorBoundary.js +0 -9
  138. package/dist/components/SuspenseWrapper.d.ts +0 -14
  139. package/dist/components/SuspenseWrapper.d.ts.map +0 -1
  140. package/dist/components/SuspenseWrapper.js +0 -9
  141. package/dist/components/index.d.ts.map +0 -1
  142. package/dist/components/internal/ErrorBoundary.d.ts +0 -27
  143. package/dist/components/internal/ErrorBoundary.d.ts.map +0 -1
  144. package/dist/components/internal/ErrorBoundary.js +0 -37
  145. package/dist/core/config.d.ts +0 -80
  146. package/dist/core/config.d.ts.map +0 -1
  147. package/dist/core/config.js +0 -327
  148. package/dist/core/devtools.d.ts.map +0 -1
  149. package/dist/core/env.d.ts +0 -4
  150. package/dist/core/env.d.ts.map +0 -1
  151. package/dist/core/env.js +0 -26
  152. package/dist/core/focusManager.d.ts +0 -33
  153. package/dist/core/focusManager.d.ts.map +0 -1
  154. package/dist/core/focusManager.js +0 -122
  155. package/dist/core/index.d.ts.map +0 -1
  156. package/dist/core/keys.d.ts +0 -59
  157. package/dist/core/keys.d.ts.map +0 -1
  158. package/dist/core/keys.js +0 -107
  159. package/dist/core/queryOptions.d.ts +0 -19
  160. package/dist/core/queryOptions.d.ts.map +0 -1
  161. package/dist/core/queryOptions.js +0 -32
  162. package/dist/features/index.d.ts.map +0 -1
  163. package/dist/features/offline.d.ts +0 -49
  164. package/dist/features/offline.d.ts.map +0 -1
  165. package/dist/features/offline.js +0 -300
  166. package/dist/features/persistence.d.ts +0 -36
  167. package/dist/features/persistence.d.ts.map +0 -1
  168. package/dist/features/persistence.js +0 -187
  169. package/dist/hooks/batchQueries.d.ts +0 -129
  170. package/dist/hooks/batchQueries.d.ts.map +0 -1
  171. package/dist/hooks/batchQueries.js +0 -301
  172. package/dist/hooks/index.d.ts.map +0 -1
  173. package/dist/hooks/useDataGuardMutation.d.ts +0 -39
  174. package/dist/hooks/useDataGuardMutation.d.ts.map +0 -1
  175. package/dist/hooks/useDataGuardMutation.js +0 -137
  176. package/dist/hooks/useDataGuardQuery.d.ts +0 -28
  177. package/dist/hooks/useDataGuardQuery.d.ts.map +0 -1
  178. package/dist/hooks/useDataGuardQuery.js +0 -71
  179. package/dist/hooks/useFocusManager.d.ts +0 -41
  180. package/dist/hooks/useFocusManager.d.ts.map +0 -1
  181. package/dist/hooks/useFocusManager.js +0 -109
  182. package/dist/hooks/useInViewPrefetch.d.ts.map +0 -1
  183. package/dist/hooks/useInfiniteQuery.d.ts +0 -33
  184. package/dist/hooks/useInfiniteQuery.d.ts.map +0 -1
  185. package/dist/hooks/useInfiniteQuery.js +0 -61
  186. package/dist/hooks/useMutation.d.ts +0 -25
  187. package/dist/hooks/useMutation.d.ts.map +0 -1
  188. package/dist/hooks/useMutation.js +0 -180
  189. package/dist/hooks/usePrefetch.d.ts +0 -54
  190. package/dist/hooks/usePrefetch.d.ts.map +0 -1
  191. package/dist/hooks/usePrefetch.js +0 -229
  192. package/dist/hooks/useQuery.d.ts +0 -21
  193. package/dist/hooks/useQuery.d.ts.map +0 -1
  194. package/dist/hooks/useQuery.js +0 -46
  195. package/dist/hooks/useSuspenseQuery.d.ts +0 -11
  196. package/dist/hooks/useSuspenseQuery.d.ts.map +0 -1
  197. package/dist/hooks/useSuspenseQuery.js +0 -19
  198. package/dist/index.d.ts.map +0 -1
  199. package/dist/react-query/index.d.ts.map +0 -1
  200. package/dist/types/base.d.ts.map +0 -1
  201. package/dist/types/base.js +0 -26
  202. package/dist/types/dataGuard.d.ts +0 -69
  203. package/dist/types/dataGuard.d.ts.map +0 -1
  204. package/dist/types/dataGuard.js +0 -10
  205. package/dist/types/index.d.ts.map +0 -1
  206. package/dist/types/infinite.d.ts +0 -39
  207. package/dist/types/infinite.d.ts.map +0 -1
  208. package/dist/types/infinite.js +0 -1
  209. package/dist/types/offline.d.ts.map +0 -1
  210. package/dist/types/offline.js +0 -8
  211. package/dist/types/optimistic.d.ts +0 -126
  212. package/dist/types/optimistic.d.ts.map +0 -1
  213. package/dist/types/optimistic.js +0 -7
  214. package/dist/types/persistence.d.ts +0 -9
  215. package/dist/types/persistence.d.ts.map +0 -1
  216. package/dist/types/persistence.js +0 -1
  217. package/dist/types/selectors.d.ts +0 -11
  218. package/dist/types/selectors.d.ts.map +0 -1
  219. package/dist/types/selectors.js +0 -1
  220. package/dist/types/suspense.d.ts +0 -67
  221. package/dist/types/suspense.d.ts.map +0 -1
  222. package/dist/types/suspense.js +0 -1
  223. package/dist/utils/dataGuard.d.ts +0 -37
  224. package/dist/utils/dataGuard.d.ts.map +0 -1
  225. package/dist/utils/dataGuard.js +0 -251
  226. package/dist/utils/fieldMapper.d.ts +0 -9
  227. package/dist/utils/fieldMapper.d.ts.map +0 -1
  228. package/dist/utils/fieldMapper.js +0 -27
  229. package/dist/utils/index.d.ts.map +0 -1
  230. package/dist/utils/network.d.ts +0 -9
  231. package/dist/utils/network.d.ts.map +0 -1
  232. package/dist/utils/network.js +0 -43
  233. package/dist/utils/optimisticUtils.d.ts +0 -45
  234. package/dist/utils/optimisticUtils.d.ts.map +0 -1
  235. package/dist/utils/optimisticUtils.js +0 -116
  236. package/dist/utils/placeholderData.d.ts +0 -3
  237. package/dist/utils/placeholderData.d.ts.map +0 -1
  238. package/dist/utils/placeholderData.js +0 -28
  239. package/dist/utils/prefetchManager.d.ts +0 -111
  240. package/dist/utils/prefetchManager.d.ts.map +0 -1
  241. package/dist/utils/prefetchManager.js +0 -246
  242. package/dist/utils/queryKey.d.ts +0 -26
  243. package/dist/utils/queryKey.d.ts.map +0 -1
  244. package/dist/utils/queryKey.js +0 -89
  245. package/dist/utils/selectors.d.ts +0 -30
  246. package/dist/utils/selectors.d.ts.map +0 -1
  247. package/dist/utils/selectors.js +0 -18
  248. package/dist/utils/storage.d.ts +0 -7
  249. package/dist/utils/storage.d.ts.map +0 -1
  250. package/dist/utils/storage.js +0 -84
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/batchQueries.ts","../src/hooks/useFocusManager.ts","../src/hooks/useInfiniteQuery.ts","../src/hooks/useMutation.ts","../src/hooks/usePrefetch.ts","../src/hooks/useQuery.ts","../src/hooks/useSuspenseQuery.ts","../src/hooks/useDataGuardQuery.ts","../src/hooks/useDataGuardMutation.ts","../src/hooks/useMutationState.ts","../src/hooks/useStatus.ts"],"names":["useQueryClient","useQueries","results","useRef","useSuspenseQueries","useMemo","useQuery","useEffect","useState","focusManager","getSmartFocusManager","pauseFocusManager","resumeFocusManager","useCallback","useInfiniteQuery","infiniteQueryOptions","DEFAULT_MUTATION_CONFIG","deriveFamilyKey","isListFamilyKey","useTanStackMutation","DEFAULT_STALE_TIME","isSlowNetwork","isDev","useSuspenseQuery","useSuspenseInfiniteQuery","applyDataGuard","addHashToData","ConflictError","markRecentlyUpdated","hashObject","updateFamilyMetadata","startsWithKeyPrefix","clearRecentlyUpdated","useTanStackMutationState","useTanStackIsFetching","useTanStackIsMutating"],"mappings":"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","file":"chunk-52ZO6Y67.cjs","sourcesContent":["import type { QueryClient, UseQueryOptions, UseQueryResult, UseSuspenseQueryOptions, UseSuspenseQueryResult, DefaultError } from \"@tanstack/react-query\";\nimport type { BatchErrorAggregate, BatchOperationReport, BatchQueryConfig, BatchQueryOperations, BatchQueryStats, BatchRetryConfig } from \"../types/optimistic\";\nimport { useQueries, useQuery, useQueryClient, useSuspenseQueries } from \"@tanstack/react-query\";\nimport { useEffect, useMemo, useRef } from \"react\";\n\ninterface InternalBatchQueryOperations extends BatchQueryOperations { _queryClient: QueryClient; _queries: UseQueryOptions[]; _results: UseQueryResult[] | UseSuspenseQueryResult[] }\n\nfunction createErrorAggregate<TError = Error>(results: UseQueryResult[] | UseSuspenseQueryResult[], queries: UseQueryOptions[]): BatchErrorAggregate<TError> {\n const errors: Array<{ index: number; error: TError; queryKey?: unknown[] }> = [];\n const errorsByType = new Map<string, TError[]>();\n results.forEach((result, index) => {\n if (result.isError && result.error) {\n const error = result.error as TError;\n const queryKey = queries[index]?.queryKey as unknown[];\n errors.push({ index, error, queryKey });\n const errorType = error instanceof Error ? error.constructor.name : \"Unknown\";\n if (!errorsByType.has(errorType)) { errorsByType.set(errorType, []); }\n errorsByType.get(errorType)!.push(error);\n }\n });\n const firstError = errors.length > 0 ? errors[0].error : null;\n const lastError = errors.length > 0 ? errors[errors.length - 1].error : null;\n const errorSummary = errors.length === 0 ? \"No errors\" : errors.length === 1 ? `1 error: ${firstError instanceof Error ? firstError.message : String(firstError)}` : `${errors.length} errors: ${Array.from(errorsByType.entries()).map(([type, errs]) => `${type}(${errs.length})`).join(\", \")}`;\n return { totalErrors: errors.length, errors, errorsByType, firstError, lastError, errorSummary };\n}\n\nfunction createOperationReport<TData = unknown, TError = Error>(results: UseQueryResult[] | UseSuspenseQueryResult[], queries: UseQueryOptions[], startTime: number, retryCount = 0): BatchOperationReport<TData, TError> {\n const total = results.length;\n const successResults: Array<{ index: number; data: TData }> = [];\n const failureErrors: Array<{ index: number; error: TError; queryKey?: unknown[] }> = [];\n results.forEach((result, index) => {\n if (result.isSuccess && result.data !== undefined) {\n successResults.push({ index, data: result.data as TData });\n } else if (result.isError && result.error) {\n failureErrors.push({ index, error: result.error as TError, queryKey: queries[index]?.queryKey as unknown[] });\n }\n });\n const successful = successResults.length;\n const failed = failureErrors.length;\n const isFullSuccess = successful === total && failed === 0;\n const isFullFailure = failed === total && successful === 0;\n const isPartialSuccess = successful > 0 && failed > 0;\n return { total, successful, failed, successResults, failureErrors, isPartialSuccess, isFullSuccess, isFullFailure, duration: Date.now() - startTime, retryCount };\n}\n\nasync function executeBatchOperationWithRetry<T = unknown>(operation: () => Promise<PromiseSettledResult<T>[]>, retryConfig?: BatchRetryConfig): Promise<{ results: PromiseSettledResult<T>[]; retryCount: number }> {\n const maxRetries = retryConfig?.maxRetries ?? 0;\n const retryDelay = retryConfig?.retryDelay ?? 1000;\n const shouldRetry = retryConfig?.shouldRetry;\n let retryCount = 0;\n let results = await operation();\n if (maxRetries === 0) { return { results, retryCount }; }\n while (retryCount < maxRetries) {\n const hasFailures = results.some((r) => r.status === \"rejected\");\n if (!hasFailures) break;\n if (shouldRetry) {\n const firstError = results.find((r) => r.status === \"rejected\");\n if (firstError && firstError.status === \"rejected\") {\n const error = firstError.reason instanceof Error ? firstError.reason : new Error(String(firstError.reason));\n if (!shouldRetry(error, retryCount + 1)) { break; }\n }\n }\n const delay = typeof retryDelay === \"function\" ? retryDelay(retryCount) : retryDelay;\n await new Promise((resolve) => setTimeout(resolve, delay));\n retryCount++;\n results = await operation();\n }\n return { results, retryCount };\n}\n\nexport function calculateBatchStats(results: UseQueryResult[] | UseSuspenseQueryResult[]): BatchQueryStats {\n const total = results.length;\n const loading = results.filter((result) => result.isLoading).length;\n const success = results.filter((result) => result.isSuccess).length;\n const error = results.filter((result) => result.isError).length;\n const stale = results.filter((result) => result.isStale).length;\n return { total, loading, success, error, stale, successRate: total > 0 ? (success / total) * 100 : 0, errorRate: total > 0 ? (error / total) * 100 : 0 };\n}\n\nexport function useEnhancedQueries(queries: UseQueryOptions[], config: BatchQueryConfig = {}) {\n const queryClient = useQueryClient();\n const { results, stats } = useQueries({ queries, combine: (results) => ({ results, stats: calculateBatchStats(results) }) });\n const retryCountRef = useRef<number>(0);\n const operations: InternalBatchQueryOperations = {\n _queryClient: queryClient,\n _queries: queries,\n _results: results,\n refetchAll: async () => {\n const operation = () => {\n const promises = queries.map((query) => queryClient.refetchQueries({ queryKey: query.queryKey, exact: true }));\n return Promise.allSettled(promises);\n };\n const { results: settledResults, retryCount } = await executeBatchOperationWithRetry(operation, config.retryConfig);\n retryCountRef.current = retryCount;\n if (config.enablePartialSuccess) {\n const report = operations.getOperationReport();\n if (report.isPartialSuccess && config.onPartialSuccess) { config.onPartialSuccess(report); }\n }\n return settledResults;\n },\n invalidateAll: async () => {\n const operation = () => {\n const promises = queries.map((query) => queryClient.invalidateQueries({ queryKey: query.queryKey, exact: true }));\n return Promise.allSettled(promises);\n };\n const { results: settledResults, retryCount } = await executeBatchOperationWithRetry(operation, config.retryConfig);\n retryCountRef.current = retryCount;\n return settledResults;\n },\n cancelAll: async () => {\n const promises = queries.map((query) => queryClient.cancelQueries({ queryKey: query.queryKey, exact: true }));\n return Promise.allSettled(promises);\n },\n resetAll: async () => {\n const operation = () => {\n const promises = queries.map((query) => queryClient.resetQueries({ queryKey: query.queryKey, exact: true }));\n return Promise.allSettled(promises);\n };\n const { results: settledResults, retryCount } = await executeBatchOperationWithRetry(operation, config.retryConfig);\n retryCountRef.current = retryCount;\n return settledResults;\n },\n removeAll: () => {\n queries.forEach((query) => { queryClient.removeQueries({ queryKey: query.queryKey, exact: true }); });\n },\n retryFailed: async () => {\n const failedIndices = results.map((result, index) => (result.isError ? index : -1)).filter((index) => index !== -1);\n if (failedIndices.length === 0) { return createOperationReport(results, queries, 0, 0); }\n const retryPromises = failedIndices.map((index) => {\n const query = queries[index];\n return queryClient.refetchQueries({ queryKey: query.queryKey, exact: true });\n });\n await Promise.allSettled(retryPromises);\n retryCountRef.current++;\n return operations.getOperationReport();\n },\n getErrorAggregate: () => { return createErrorAggregate(results, queries); },\n getOperationReport: () => { return createOperationReport(results, queries, 0, retryCountRef.current); }\n };\n return { data: results, stats, operations, config };\n}\n\nexport function useEnhancedSuspenseQueries(queries: UseSuspenseQueryOptions[], config: BatchQueryConfig = {}) {\n const queryClient = useQueryClient();\n const { results, stats } = useSuspenseQueries({ queries, combine: (results) => ({ results, stats: calculateBatchStats(results) }) });\n const retryCountRef = useRef<number>(0);\n const operations: InternalBatchQueryOperations = {\n _queryClient: queryClient,\n _queries: queries,\n _results: results,\n refetchAll: async () => {\n const operation = () => {\n const promises = queries.map((query) => queryClient.refetchQueries({ queryKey: query.queryKey, exact: true }));\n return Promise.allSettled(promises);\n };\n const { results: settledResults, retryCount } = await executeBatchOperationWithRetry(operation, config.retryConfig);\n retryCountRef.current = retryCount;\n if (config.enablePartialSuccess) {\n const report = operations.getOperationReport();\n if (report.isPartialSuccess && config.onPartialSuccess) { config.onPartialSuccess(report); }\n }\n return settledResults;\n },\n invalidateAll: async () => {\n const operation = () => {\n const promises = queries.map((query) => queryClient.invalidateQueries({ queryKey: query.queryKey, exact: true }));\n return Promise.allSettled(promises);\n };\n const { results: settledResults, retryCount } = await executeBatchOperationWithRetry(operation, config.retryConfig);\n retryCountRef.current = retryCount;\n return settledResults;\n },\n cancelAll: async () => {\n const promises = queries.map((query) => queryClient.cancelQueries({ queryKey: query.queryKey, exact: true }));\n return Promise.allSettled(promises);\n },\n resetAll: async () => {\n const operation = () => {\n const promises = queries.map((query) => queryClient.resetQueries({ queryKey: query.queryKey, exact: true }));\n return Promise.allSettled(promises);\n };\n const { results: settledResults, retryCount } = await executeBatchOperationWithRetry(operation, config.retryConfig);\n retryCountRef.current = retryCount;\n return settledResults;\n },\n removeAll: () => {\n queries.forEach((query) => { queryClient.removeQueries({ queryKey: query.queryKey, exact: true }); });\n },\n retryFailed: async () => {\n const failedIndices = results.map((result, index) => (result.isError ? index : -1)).filter((index) => index !== -1);\n if (failedIndices.length === 0) { return createOperationReport(results, queries, 0, 0); }\n const retryPromises = failedIndices.map((index) => {\n const query = queries[index];\n return queryClient.refetchQueries({ queryKey: query.queryKey, exact: true });\n });\n await Promise.allSettled(retryPromises);\n retryCountRef.current++;\n return operations.getOperationReport();\n },\n getErrorAggregate: () => { return createErrorAggregate(results, queries); },\n getOperationReport: () => { return createOperationReport(results, queries, 0, retryCountRef.current); }\n };\n return { data: results, stats, operations, config };\n}\n\nexport function createBatchQueryConfig(config: Partial<BatchQueryConfig> = {}): BatchQueryConfig {\n return { enableStats: true, enableBatchOperations: true, autoRefreshInterval: undefined, onBatchSuccess: undefined, onBatchError: undefined, onBatchSettled: undefined, enablePartialSuccess: false, onPartialSuccess: undefined, retryConfig: undefined, ...config };\n}\n\nexport const batchQueryUtils = {\n isAllLoading: (results: UseQueryResult[] | UseSuspenseQueryResult[]): boolean => results.every((result) => result.isLoading),\n isAllSuccess: (results: UseQueryResult[] | UseSuspenseQueryResult[]): boolean => results.every((result) => result.isSuccess),\n hasError: (results: UseQueryResult[] | UseSuspenseQueryResult[]): boolean => results.some((result) => result.isError),\n hasStale: (results: UseQueryResult[] | UseSuspenseQueryResult[]): boolean => results.some((result) => result.isStale),\n getAllErrors: (results: UseQueryResult[] | UseSuspenseQueryResult[]): Error[] => results.filter((result) => result.isError).map((result) => result.error).filter((error): error is Error => error instanceof Error),\n getAllData: (results: UseQueryResult[] | UseSuspenseQueryResult[]): unknown[] => results.filter((result) => result.isSuccess).map((result) => result.data),\n isAllPending: (results: UseQueryResult[] | UseSuspenseQueryResult[]): boolean => results.every((result) => result.isPending),\n isAnyFetching: (results: UseQueryResult[] | UseSuspenseQueryResult[]): boolean => results.some((result) => result.isFetching),\n getSuccessData: <T>(results: UseQueryResult<T>[]): T[] => results.filter((result) => result.isSuccess && result.data !== undefined).map((result) => result.data as T),\n getFirstError: (results: UseQueryResult[] | UseSuspenseQueryResult[]): Error | null => { const errorResult = results.find((result) => result.isError); return errorResult?.error instanceof Error ? errorResult.error : null; },\n createErrorAggregate: <TError = Error>(results: UseQueryResult[] | UseSuspenseQueryResult[], queries: UseQueryOptions[]): BatchErrorAggregate<TError> => createErrorAggregate<TError>(results, queries),\n createOperationReport: <TData = unknown, TError = Error>(results: UseQueryResult[] | UseSuspenseQueryResult[], queries: UseQueryOptions[], startTime: number, retryCount = 0): BatchOperationReport<TData, TError> => createOperationReport<TData, TError>(results, queries, startTime, retryCount)\n};\n\nexport function useCombinedQueries<TCombinedResult = UseQueryResult[]>(options: { queries: UseQueryOptions[]; combine?: (results: UseQueryResult[]) => TCombinedResult }): TCombinedResult {\n return useQueries(options) as TCombinedResult;\n}\n\nexport function useDynamicBatchQueries<TItem, TData = unknown>(options: { items: TItem[]; queryKeyPrefix: unknown[]; queryFn: (item: TItem) => Promise<TData>; enabled?: boolean; staleTime?: number; gcTime?: number; config?: BatchQueryConfig }) {\n const { items, queryKeyPrefix, queryFn, enabled = true, staleTime, gcTime, config = {} } = options;\n const queries = useMemo(() => {\n if (!enabled || items.length === 0) return [] as UseQueryOptions[];\n return items.map((item) => ({ queryKey: [...queryKeyPrefix, item], queryFn: () => queryFn(item), staleTime, gcTime, enabled }));\n }, [items, queryKeyPrefix, queryFn, enabled, staleTime, gcTime]);\n return useEnhancedQueries(queries, config);\n}\n\nexport function useDependentBatchQueries<TPrimaryData>(options: { primaryQuery: UseQueryOptions<TPrimaryData>; dependentQueries: (data: TPrimaryData) => UseQueryOptions[]; config?: BatchQueryConfig }): DependentBatchQueriesResult<TPrimaryData> {\n const { primaryQuery, dependentQueries, config = {} } = options;\n const primaryResult = useQuery(primaryQuery);\n const queries = useMemo(() => {\n try {\n if (!primaryResult.data) { return []; }\n return dependentQueries(primaryResult.data);\n } catch {\n return [];\n }\n }, [primaryResult.data, dependentQueries]);\n const enhancedQueriesResult = useEnhancedQueries(queries, config);\n return { primaryResult: primaryResult as UseQueryResult<TPrimaryData, DefaultError>, results: enhancedQueriesResult.data as UseQueryResult[], stats: enhancedQueriesResult.stats, operations: enhancedQueriesResult.operations };\n}\n\nexport interface DependentBatchQueriesResult<TPrimaryData> {\n primaryResult: UseQueryResult<TPrimaryData, DefaultError>;\n results: UseQueryResult[];\n stats: BatchQueryStats;\n operations: InternalBatchQueryOperations;\n}\n\n \n\nexport function useAutoRefreshBatchQueries(options: { queries: UseQueryOptions[]; refreshInterval?: number; enabled?: boolean; config?: BatchQueryConfig }) {\n const { queries, refreshInterval = 30000, enabled = true, config = {} } = options;\n const result = useEnhancedQueries(queries, config);\n useEffect(() => {\n if (!enabled || !refreshInterval || !result.operations) return;\n const intervalId = setInterval(() => { result.operations?.refetchAll(); }, refreshInterval);\n return () => clearInterval(intervalId);\n }, [enabled, refreshInterval, result.operations]);\n return result;\n}\n\nexport function useDashboardQueries<T extends Record<string, UseQueryOptions>>(queriesMap: T) {\n const queries = useMemo(() => { return Object.values(queriesMap); }, [queriesMap]);\n type CombinedDataType = { [K in keyof T]: T[K] extends UseQueryOptions<infer TData> ? TData : unknown };\n const { results, combinedData, stats } = useQueries({ queries, combine: (results) => {\n const keys = Object.keys(queriesMap) as Array<keyof T>;\n const data = {} as Record<keyof T, unknown>;\n keys.forEach((key, index) => { data[key] = results[index].data; });\n return { results, combinedData: data as CombinedDataType, stats: calculateBatchStats(results) };\n } });\n const isLoading = results.some((r) => r.isLoading);\n const isError = results.some((r) => r.isError);\n const isSuccess = results.every((r) => r.isSuccess);\n return { data: combinedData, results, stats, isLoading, isError, isSuccess };\n}\n\nexport function usePaginatedBatchQueries<TData = unknown>(options: { pageNumbers: number[]; queryKeyPrefix: unknown[]; queryFn: (page: number) => Promise<TData>; staleTime?: number; config?: BatchQueryConfig }) {\n const { pageNumbers, queryKeyPrefix, queryFn, staleTime, config } = options;\n return useDynamicBatchQueries({ items: pageNumbers, queryKeyPrefix, queryFn, staleTime, config });\n}\n\nexport function useConditionalBatchQueries(queries: (UseQueryOptions & { enabled?: boolean })[]) {\n const enabledQueries = useMemo(() => { return queries.filter((q) => q.enabled !== false); }, [queries]);\n return useEnhancedQueries(enabledQueries);\n}\n\nexport function useRetryBatchQueries(options: { queries: UseQueryOptions[]; retry?: number | ((failureCount: number, error: Error) => boolean); retryDelay?: number | ((attemptIndex: number) => number); config?: BatchQueryConfig }) {\n const { queries, retry, retryDelay, config } = options;\n const queriesWithRetry = useMemo(() => { return queries.map((query) => ({ ...query, retry: query.retry ?? retry, retryDelay: query.retryDelay ?? retryDelay })); }, [queries, retry, retryDelay]);\n return useEnhancedQueries(queriesWithRetry, config);\n}\n\nexport function useBatchQueryPerformance(results: UseQueryResult[] | UseSuspenseQueryResult[]) {\n return useMemo(() => {\n const stats = calculateBatchStats(results);\n const fetchTimes = results.filter((r) => r.dataUpdatedAt > 0).map((r) => r.dataUpdatedAt);\n const avgFetchTime = fetchTimes.length > 0 ? fetchTimes.reduce((a, b) => a + b, 0) / fetchTimes.length : 0;\n return { ...stats, avgFetchTime, totalQueries: results.length, activeQueries: results.filter((r) => r.isFetching).length, cachedQueries: results.filter((r) => !r.isStale).length };\n }, [results]);\n}","import type { QueryKey } from \"@tanstack/react-query\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { focusManager, getSmartFocusManager, pauseFocusManager, resumeFocusManager } from \"../core/focusManager.js\";\n\nexport interface UseFocusRefetchOptions { enabled?: boolean; minInterval?: number; queryKeys?: QueryKey[] }\nexport interface UsePauseFocusOptions { autoPause?: boolean; pauseWhen?: boolean }\n\nexport function useFocusState(): boolean {\n const [focused, setFocused] = useState(focusManager.isFocused());\n useEffect(() => {\n const unsubscribe = focusManager.subscribe((isFocused) => { setFocused(isFocused); });\n return unsubscribe;\n }, []);\n return focused;\n}\n\nexport function useFocusRefetch(options: UseFocusRefetchOptions = {}) {\n const queryClient = useQueryClient();\n const { enabled = true, minInterval = 5000, queryKeys = [] } = options;\n const smartManager = getSmartFocusManager();\n const queryKeysJson = JSON.stringify(queryKeys);\n const stableQueryKeys = useMemo(() => queryKeys, [queryKeysJson]);\n useEffect(() => {\n if (!enabled || stableQueryKeys.length === 0) return;\n const unsubscribe = focusManager.subscribe((isFocused) => {\n if (!isFocused) return;\n stableQueryKeys.forEach((queryKey) => {\n if (smartManager.shouldRefetch(queryKey, minInterval)) {\n queryClient.invalidateQueries({ queryKey });\n }\n });\n });\n return unsubscribe;\n }, [queryClient, enabled, minInterval, stableQueryKeys, smartManager]);\n}\n\nexport function usePauseFocus(options: UsePauseFocusOptions = {}) {\n const { autoPause = false, pauseWhen = false } = options;\n useEffect(() => {\n if (autoPause || pauseWhen) {\n pauseFocusManager();\n return () => { resumeFocusManager(); };\n }\n }, [autoPause, pauseWhen]);\n const pause = useCallback(() => { pauseFocusManager(); }, []);\n const resume = useCallback(() => { resumeFocusManager(); }, []);\n return { pause, resume };\n}\n\nexport function useSmartFocusManager() {\n const manager = getSmartFocusManager();\n const pause = useCallback(() => { manager.pause(); }, [manager]);\n const resume = useCallback(() => { manager.resume(); }, [manager]);\n const getStats = useCallback(() => { return manager.getStats(); }, [manager]);\n return { pause, resume, getStats, stats: manager.getStats() };\n}\n\nexport function useConditionalFocusRefetch(queryKey: QueryKey, condition: () => boolean, options: { minInterval?: number; enabled?: boolean } = {}) {\n const queryClient = useQueryClient();\n const { minInterval = 5000, enabled = true } = options;\n const smartManager = getSmartFocusManager();\n const queryKeyJson = JSON.stringify(queryKey);\n const stableQueryKey = useMemo(() => queryKey, [queryKeyJson]);\n const conditionRef = useRef(condition);\n useEffect(() => { conditionRef.current = condition; }, [condition]);\n useEffect(() => {\n if (!enabled) return;\n const unsubscribe = focusManager.subscribe((isFocused) => {\n if (!isFocused || !conditionRef.current()) return;\n if (smartManager.shouldRefetch(stableQueryKey, minInterval)) {\n queryClient.invalidateQueries({ queryKey: stableQueryKey });\n }\n });\n return unsubscribe;\n }, [queryClient, stableQueryKey, minInterval, enabled, smartManager]);\n}\n\nexport function useFocusCallback(callback: () => void, options: { minInterval?: number; enabled?: boolean; queryKey?: QueryKey } = {}) {\n const { minInterval = 0, enabled = true, queryKey } = options;\n const lastCallTime = useRef<number>(0);\n const smartManager = getSmartFocusManager();\n const queryKeyJson = JSON.stringify(queryKey);\n const stableQueryKey = useMemo(() => queryKey, [queryKeyJson]);\n const callbackRef = useRef(callback);\n useEffect(() => { callbackRef.current = callback; }, [callback]);\n useEffect(() => {\n if (!enabled) return;\n const unsubscribe = focusManager.subscribe((isFocused) => {\n if (!isFocused) return;\n if (stableQueryKey !== undefined) {\n if (smartManager.shouldRefetch(stableQueryKey, minInterval)) {\n callbackRef.current();\n }\n return;\n }\n const now = Date.now();\n if (minInterval > 0 && now - lastCallTime.current < minInterval) return;\n lastCallTime.current = now;\n callbackRef.current();\n });\n return unsubscribe;\n }, [minInterval, enabled, stableQueryKey, smartManager]);\n}\n\nexport function usePageVisibility(): boolean {\n const [isVisible, setIsVisible] = useState(typeof document !== \"undefined\" ? !document.hidden : true);\n useEffect(() => {\n const unsubscribe = focusManager.subscribe((isFocused) => { setIsVisible(isFocused); });\n return unsubscribe;\n }, []);\n return isVisible;\n}","import type { DefaultError, QueryFunction, QueryKey, UseInfiniteQueryOptions, UseInfiniteQueryResult } from \"@tanstack/react-query\";\nimport type { CursorPaginatedResponse, OffsetPaginatedResponse, PageNumberPaginatedResponse } from \"../types/infinite\";\nimport { infiniteQueryOptions, useInfiniteQuery } from \"@tanstack/react-query\";\nexport function useEnhancedInfiniteQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown>(options: UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>): UseInfiniteQueryResult<TData, TError> {\n return useInfiniteQuery(options);\n}\nexport function createInfiniteQueryOptions<TQueryFnData = unknown, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown>(config: { queryKey: TQueryKey; queryFn: QueryFunction<TQueryFnData, TQueryKey, TPageParam>; initialPageParam: TPageParam; getNextPageParam: (lastPage: TQueryFnData, allPages: TQueryFnData[], lastPageParam: TPageParam, allPageParams: TPageParam[]) => TPageParam | undefined | null; getPreviousPageParam?: (firstPage: TQueryFnData, allPages: TQueryFnData[], firstPageParam: TPageParam, allPageParams: TPageParam[]) => TPageParam | undefined | null; staleTime?: number; gcTime?: number; maxPages?: number }): UseInfiniteQueryOptions<TQueryFnData, DefaultError, TQueryFnData, TQueryKey, TPageParam> {\n return infiniteQueryOptions({ ...config, maxPages: config.maxPages });\n}\nexport function createCursorPaginationOptions<T>(config: { queryKey: QueryKey; queryFn: (cursor: string | null) => Promise<CursorPaginatedResponse<T>>; initialCursor?: string | null; staleTime?: number; gcTime?: number; maxPages?: number }): UseInfiniteQueryOptions<CursorPaginatedResponse<T>, DefaultError, CursorPaginatedResponse<T>, QueryKey, string | null> {\n return createInfiniteQueryOptions({\n queryKey: config.queryKey,\n queryFn: ({ pageParam }) => config.queryFn(pageParam as string | null),\n initialPageParam: config.initialCursor ?? null,\n getNextPageParam: (lastPage) => lastPage.cursor ?? null,\n getPreviousPageParam: () => null,\n staleTime: config.staleTime,\n gcTime: config.gcTime,\n maxPages: config.maxPages\n });\n}\nexport function createOffsetPaginationOptions<T>(config: { queryKey: QueryKey; queryFn: (offset: number, limit: number) => Promise<OffsetPaginatedResponse<T>>; limit?: number; staleTime?: number; gcTime?: number; maxPages?: number }): UseInfiniteQueryOptions<OffsetPaginatedResponse<T>, DefaultError, OffsetPaginatedResponse<T>, QueryKey, number> {\n const limit = config.limit ?? 20;\n return createInfiniteQueryOptions({\n queryKey: [...config.queryKey, limit] as QueryKey,\n queryFn: ({ pageParam }) => config.queryFn(pageParam as number, limit),\n initialPageParam: 0,\n getNextPageParam: (lastPage, allPages) => {\n if (lastPage.hasMore === false) return undefined;\n const currentOffset = allPages.length * limit;\n if (currentOffset >= lastPage.total) return undefined;\n return currentOffset;\n },\n getPreviousPageParam: (_firstPage, allPages) => {\n if (allPages.length <= 1) return undefined;\n return (allPages.length - 2) * limit;\n },\n staleTime: config.staleTime,\n gcTime: config.gcTime,\n maxPages: config.maxPages\n });\n}\nexport function createPageNumberPaginationOptions<T>(config: { queryKey: QueryKey; queryFn: (page: number) => Promise<PageNumberPaginatedResponse<T>>; staleTime?: number; gcTime?: number; maxPages?: number }): UseInfiniteQueryOptions<PageNumberPaginatedResponse<T>, DefaultError, PageNumberPaginatedResponse<T>, QueryKey, number> {\n return createInfiniteQueryOptions({\n queryKey: config.queryKey,\n queryFn: ({ pageParam }) => config.queryFn(pageParam as number),\n initialPageParam: 1,\n getNextPageParam: (lastPage, allPages) => {\n const nextPage = allPages.length + 1;\n if (nextPage > lastPage.totalPages) return undefined;\n return nextPage;\n },\n getPreviousPageParam: (_firstPage, allPages) => {\n if (allPages.length <= 1) return undefined;\n return allPages.length - 1;\n },\n staleTime: config.staleTime,\n gcTime: config.gcTime,\n maxPages: config.maxPages\n });\n}","import type { MutationFunction, MutationKey, QueryClient, QueryKey, UseMutationOptions as TanStackUseMutationOptions, UseMutationResult } from \"@tanstack/react-query\";\nimport type { MutationContext, MutationOptions } from \"../types\";\nimport type { EntityWithId } from \"../types/selectors\";\nimport { useQueryClient, useMutation as useTanStackMutation } from \"@tanstack/react-query\";\nimport { DEFAULT_MUTATION_CONFIG } from \"../core/config.js\";\nimport { deriveFamilyKey, isListFamilyKey } from \"../utils/queryKey.js\";\n\nexport type { MutationKey };\n\nexport interface MutationDefaultsConfig { [key: string]: TanStackUseMutationOptions<any, any, any, any> }\n\nexport function useMutation<TData = unknown, TError = Error, TVariables = void, TContext = unknown>(options: MutationOptions<TData, TError, TVariables, TContext>): UseMutationResult<TData, TError, TVariables, TContext> {\n const queryClient = useQueryClient();\n const { optimistic, onMutate, onError, onSuccess, onSettled, ...restOptions } = options as any;\n type MutationCtx = MutationContext<unknown, TContext>;\n const mutationConfig: TanStackUseMutationOptions<TData, TError, TVariables, MutationCtx> = {\n ...restOptions,\n retry: restOptions.retry ?? DEFAULT_MUTATION_CONFIG.retry,\n retryDelay: restOptions.retryDelay ?? DEFAULT_MUTATION_CONFIG.retryDelay,\n gcTime: restOptions.gcTime ?? DEFAULT_MUTATION_CONFIG.gcTime\n } as TanStackUseMutationOptions<TData, TError, TVariables, MutationCtx>;\n \n if (!optimistic) {\n if (onMutate) { mutationConfig.onMutate = onMutate as any; }\n if (onError) { mutationConfig.onError = onError as any; }\n if (onSuccess) { mutationConfig.onSuccess = onSuccess as any; }\n if (onSettled) { mutationConfig.onSettled = onSettled as any; }\n } else {\n mutationConfig.onMutate = async (variables: TVariables) => {\n if (optimistic.enabled === false) {\n const mutateCallback = onMutate as (vars: TVariables) => Promise<TContext | undefined>;\n const userContext = onMutate ? await mutateCallback(variables) : undefined;\n return { userContext } as MutationCtx;\n }\n try {\n // Derive family key (e.g., ['products', 'list'] from ['products', 'list', { page: 1, pageSize: 10 }])\n const familyKey = optimistic.familyKey ?? deriveFamilyKey(optimistic.queryKey);\n \n // Cancel all queries in the family to prevent race conditions\n await queryClient.cancelQueries({ queryKey: familyKey });\n\n // Save snapshots of all queries in the family\n const previousData = queryClient.getQueriesData({ queryKey: familyKey });\n\n // Apply field mapping if specified\n let mappedVariables: TVariables = variables;\n if (optimistic.fieldMapping && typeof variables === \"object\" && variables !== null) {\n mappedVariables = { ...variables } as TVariables;\n const sourceObj = variables as Record<string, unknown>;\n const targetObj = mappedVariables as Record<string, unknown>;\n Object.entries(optimistic.fieldMapping as Record<string, string>).forEach(([sourceField, targetField]) => {\n if (sourceField in sourceObj) { (targetObj as Record<string, any>)[targetField] = sourceObj[sourceField]; }\n });\n }\n\n // ✅ Official approach: Update all cached query variants using setQueriesData\n queryClient.setQueriesData(\n { queryKey: familyKey },\n (oldData: unknown | undefined) => {\n if (!oldData) return oldData;\n return optimistic.updater(oldData, mappedVariables);\n }\n );\n\n const mutateCallback = onMutate as (vars: TVariables) => Promise<TContext | undefined>;\n const userContext = onMutate ? await mutateCallback(variables) : undefined;\n return { previousData, userContext } as MutationCtx;\n } catch (error) {\n return { userContext: undefined } as MutationCtx;\n }\n };\n \n mutationConfig.onError = (error, variables, context) => {\n // Rollback all query variants\n if (context?.previousData) {\n context.previousData.forEach(([queryKey, data]: [QueryKey, any]) => {\n queryClient.setQueryData(queryKey, data);\n });\n }\n \n if (optimistic.rollback && context?.previousData) {\n try { \n // Call rollback with the first snapshot (usually the current query)\n const firstSnapshot = context.previousData[0]?.[1];\n if (firstSnapshot) {\n optimistic.rollback(firstSnapshot, error as Error); \n }\n } catch {}\n }\n \n if (onError) {\n const errorCallback = onError as (err: TError, vars: TVariables, ctx: TContext) => void;\n errorCallback(error, variables, context?.userContext as TContext);\n }\n };\n \n mutationConfig.onSuccess = (data, variables, context) => {\n // Determine invalidation scope\n const scope = optimistic.invalidateScope ?? (isListFamilyKey(optimistic.queryKey) ? \"family\" : \"exact\");\n const invalidations: Array<Parameters<QueryClient[\"invalidateQueries\"]>[0]> = [];\n \n if (scope !== \"none\") {\n if (scope === \"family\") {\n const familyKey = optimistic.familyKey ?? deriveFamilyKey(optimistic.queryKey);\n invalidations.push({ queryKey: familyKey });\n } else {\n invalidations.push({ queryKey: optimistic.queryKey });\n }\n }\n \n // Add related keys\n if (Array.isArray(optimistic.relatedKeys) && optimistic.relatedKeys.length > 0) {\n optimistic.relatedKeys.forEach((k: QueryKey) => invalidations.push({ queryKey: k }));\n }\n if (Array.isArray(optimistic.invalidates) && optimistic.invalidates.length > 0) {\n optimistic.invalidates.forEach((k: QueryKey) => invalidations.push({ queryKey: k }));\n }\n\n // Execute invalidations (deduplicated)\n if (invalidations.length > 0) {\n const seen = new Set<string>();\n const tasks = invalidations\n .map((cfg) => ({ ...cfg, exact: false }))\n .filter((cfg) => {\n const key = JSON.stringify(cfg.queryKey);\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n \n tasks.forEach(task => queryClient.invalidateQueries(task));\n }\n\n if (onSuccess) {\n const successCallback = onSuccess as (d: TData, vars: TVariables, ctx: TContext) => void;\n successCallback(data, variables, context?.userContext as TContext);\n }\n };\n \n mutationConfig.onSettled = (data, error, variables, context) => {\n if (onSettled) {\n const settledCallback = onSettled as (d: TData | undefined, err: TError | null, vars: TVariables, ctx: TContext) => void;\n settledCallback(data, error, variables, context?.userContext as TContext);\n }\n };\n }\n return useTanStackMutation(mutationConfig) as UseMutationResult<TData, TError, TVariables, TContext>;\n}\n\nexport function setupMutationDefaults(queryClient: QueryClient, config: MutationDefaultsConfig): void {\n Object.entries(config).forEach(([key, options]) => { queryClient.setMutationDefaults([key], options); });\n}\n\nexport function useListMutation<T extends EntityWithId>(\n mutationFn: MutationFunction<T, { operation: string; data: Partial<T> }>, \n queryKey: QueryKey, \n options?: TanStackUseMutationOptions<T, Error, { operation: string; data: Partial<T> }> & { mutationKey?: readonly unknown[] }\n) {\n const queryClient = useQueryClient();\n return useTanStackMutation({\n mutationFn,\n onSettled: () => {\n // Invalidate all queries in the family\n const familyKey = deriveFamilyKey(queryKey);\n queryClient.invalidateQueries({ queryKey: familyKey, exact: false });\n },\n ...options,\n mutationKey: options?.mutationKey\n });\n}\n\n\n","import type { QueryFunction, QueryKey } from \"@tanstack/react-query\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { DEFAULT_STALE_TIME } from \"../core/config.js\";\nimport { isSlowNetwork } from \"../utils/network.js\";\n\nexport interface PrefetchOptions { delay?: number; enabled?: boolean; staleTime?: number; minInterval?: number }\nexport interface HoverPrefetchOptions extends PrefetchOptions { hoverDelay?: number }\nexport interface InViewPrefetchOptions extends PrefetchOptions { threshold?: number; rootMargin?: string; triggerOnce?: boolean }\n\nfunction isMissingOrStale(queryClient: ReturnType<typeof useQueryClient>, queryKey: QueryKey, staleTime: number): boolean {\n const state = queryClient.getQueryState(queryKey);\n if (!state || state.data === undefined) return true;\n const updatedAt = state.dataUpdatedAt ?? 0;\n return Date.now() - updatedAt > staleTime;\n}\n\nexport function useHoverPrefetch<TData = unknown>(queryKey: QueryKey, queryFn: QueryFunction<TData>, options: HoverPrefetchOptions = {}) {\n const queryClient = useQueryClient();\n const timeoutRef = useRef<NodeJS.Timeout | undefined>(undefined);\n const { hoverDelay = 200, enabled = true, staleTime = DEFAULT_STALE_TIME, minInterval = 1000 } = options;\n const queryFnRef = useRef(queryFn);\n useEffect(() => { queryFnRef.current = queryFn; }, [queryFn]);\n const lastPrefetchRef = useRef(new Map<string, number>());\n const prefetch = useCallback(() => {\n if (!enabled) return;\n const keyStr = JSON.stringify(queryKey);\n const last = lastPrefetchRef.current.get(keyStr) ?? 0;\n if (Date.now() - last < minInterval) return;\n if (!isMissingOrStale(queryClient, queryKey, staleTime)) return;\n queryClient.prefetchQuery({ queryKey, queryFn: queryFnRef.current, staleTime });\n lastPrefetchRef.current.set(keyStr, Date.now());\n }, [queryClient, queryKey, enabled, staleTime]);\n const handleMouseEnter = useCallback(() => {\n if (!enabled) return;\n if (timeoutRef.current) { clearTimeout(timeoutRef.current); }\n timeoutRef.current = setTimeout(prefetch, hoverDelay);\n }, [prefetch, hoverDelay, enabled]);\n const handleMouseLeave = useCallback(() => { if (timeoutRef.current) { clearTimeout(timeoutRef.current); } }, []);\n useEffect(() => () => { if (timeoutRef.current) { clearTimeout(timeoutRef.current); } }, []);\n return { onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, onFocus: prefetch };\n}\n\n\nexport function useRoutePrefetch() {\n const queryClient = useQueryClient();\n const lastPrefetchRef = useRef(new Map<string, number>());\n return useCallback(<TData = unknown>(queryKey: QueryKey, queryFn: QueryFunction<TData>, options?: PrefetchOptions) => {\n const { enabled = true, staleTime = DEFAULT_STALE_TIME, minInterval = 1000 } = options || {};\n if (!enabled) return;\n const keyStr = JSON.stringify(queryKey);\n const last = lastPrefetchRef.current.get(keyStr) ?? 0;\n if (Date.now() - last < minInterval) return;\n if (!isMissingOrStale(queryClient, queryKey, staleTime)) return;\n queryClient.prefetchQuery({ queryKey, queryFn, staleTime });\n lastPrefetchRef.current.set(keyStr, Date.now());\n }, [queryClient]);\n}\n\nexport function useBatchPrefetch() {\n const queryClient = useQueryClient();\n return useCallback(<TData = unknown>(queries: Array<{ queryKey: QueryKey; queryFn: QueryFunction<TData>; staleTime?: number }>) => {\n queries.forEach(({ queryKey, queryFn, staleTime = DEFAULT_STALE_TIME }) => {\n if (isMissingOrStale(queryClient, queryKey, staleTime)) {\n queryClient.prefetchQuery({ queryKey, queryFn, staleTime });\n }\n });\n }, [queryClient]);\n}\n\nexport function useSmartPrefetch() {\n const queryClient = useQueryClient();\n const prefetchedRef = useRef(new Set<string>());\n const lastPrefetchRef = useRef(new Map<string, number>());\n const shouldPrefetchQuery = useCallback((queryKey: QueryKey): boolean => {\n const key = JSON.stringify(queryKey);\n if (prefetchedRef.current.has(key)) return false;\n if (isSlowNetwork()) return false;\n return true;\n }, []);\n const prefetch = useCallback(<TData = unknown>(queryKey: QueryKey, queryFn: QueryFunction<TData>, options?: PrefetchOptions) => {\n if (!shouldPrefetchQuery(queryKey)) return;\n const { staleTime = DEFAULT_STALE_TIME, minInterval = 1000 } = options || {};\n const keyStr = JSON.stringify(queryKey);\n const last = lastPrefetchRef.current.get(keyStr) ?? 0;\n if (Date.now() - last < minInterval) return;\n if (!isMissingOrStale(queryClient, queryKey, staleTime)) return;\n prefetchedRef.current.add(keyStr);\n queryClient.prefetchQuery({ queryKey, queryFn, staleTime });\n lastPrefetchRef.current.set(keyStr, Date.now());\n }, [queryClient, shouldPrefetchQuery]);\n const clearPrefetchHistory = useCallback(() => { prefetchedRef.current.clear(); }, []);\n return { prefetch, shouldPrefetch: !isSlowNetwork(), clearPrefetchHistory };\n}\n\nfunction useStableQueryKey(queryKey: QueryKey): QueryKey {\n const keyRef = useRef(queryKey);\n const keyStr = JSON.stringify(queryKey);\n const prevKeyStr = useRef(keyStr);\n if (prevKeyStr.current !== keyStr) {\n keyRef.current = queryKey;\n prevKeyStr.current = keyStr;\n }\n return keyRef.current;\n}\n\nexport function useConditionalPrefetch<TData = unknown>(queryKey: QueryKey, queryFn: QueryFunction<TData>, condition: boolean, options?: PrefetchOptions) {\n const queryClient = useQueryClient();\n const { staleTime = DEFAULT_STALE_TIME, delay = 0 } = options || {};\n const queryFnRef = useRef(queryFn);\n useEffect(() => { queryFnRef.current = queryFn; }, [queryFn]);\n const stableQueryKey = useStableQueryKey(queryKey);\n useEffect(() => {\n if (!condition) return;\n const currentQueryKey = stableQueryKey;\n const timeoutId = setTimeout(() => {\n if (isMissingOrStale(queryClient, currentQueryKey, staleTime)) {\n queryClient.prefetchQuery({ queryKey: currentQueryKey, queryFn: queryFnRef.current, staleTime });\n }\n }, delay);\n return () => clearTimeout(timeoutId);\n }, [condition, queryClient, staleTime, delay, stableQueryKey]);\n}\n\nexport function useIdlePrefetch<TData = unknown>(queryKey: QueryKey, queryFn: QueryFunction<TData>, options?: PrefetchOptions & { timeout?: number }) {\n const queryClient = useQueryClient();\n const { staleTime = DEFAULT_STALE_TIME, enabled = true, timeout = 1000 } = options || {};\n const queryFnRef = useRef(queryFn);\n useEffect(() => { queryFnRef.current = queryFn; }, [queryFn]);\n const stableQueryKey = useStableQueryKey(queryKey);\n useEffect(() => {\n if (!enabled) return;\n const currentQueryKey = stableQueryKey;\n if (typeof window === \"undefined\" || !(\"requestIdleCallback\" in window)) {\n const timeoutId = setTimeout(() => {\n if (isMissingOrStale(queryClient, currentQueryKey, staleTime)) {\n queryClient.prefetchQuery({ queryKey: currentQueryKey, queryFn: queryFnRef.current, staleTime });\n }\n }, timeout);\n return () => clearTimeout(timeoutId);\n }\n const idleCallbackId = (window as any).requestIdleCallback(() => {\n if (isMissingOrStale(queryClient, currentQueryKey, staleTime)) {\n queryClient.prefetchQuery({ queryKey: currentQueryKey, queryFn: queryFnRef.current, staleTime });\n }\n }, { timeout });\n return () => (window as any).cancelIdleCallback(idleCallbackId);\n }, [queryClient, staleTime, enabled, timeout, stableQueryKey]);\n}\n\nexport function usePeriodicPrefetch<TData = unknown>(queryKey: QueryKey, queryFn: QueryFunction<TData>, options?: PrefetchOptions & { interval?: number }) {\n const queryClient = useQueryClient();\n const { staleTime = DEFAULT_STALE_TIME, enabled = true, interval = 60000 } = options || {};\n const queryFnRef = useRef(queryFn);\n useEffect(() => { queryFnRef.current = queryFn; }, [queryFn]);\n const stableQueryKey = useStableQueryKey(queryKey);\n useEffect(() => {\n if (!enabled) return;\n const currentQueryKey = stableQueryKey;\n const prefetchData = () => {\n if (isMissingOrStale(queryClient, currentQueryKey, staleTime)) {\n queryClient.prefetchQuery({ queryKey: currentQueryKey, queryFn: queryFnRef.current, staleTime });\n }\n };\n prefetchData();\n const intervalId = setInterval(prefetchData, interval);\n return () => clearInterval(intervalId);\n }, [queryClient, staleTime, enabled, interval, stableQueryKey]);\n}\n\nexport function usePredictivePrefetch() {\n const queryClient = useQueryClient();\n const interactionHistoryRef = useRef<Array<{ action: string; target: string; timestamp: number }>>([]);\n const maxHistorySize = 50;\n const recordInteraction = useCallback((action: string, target: string) => {\n interactionHistoryRef.current.push({ action, target, timestamp: Date.now() });\n if (interactionHistoryRef.current.length > maxHistorySize) {\n interactionHistoryRef.current.shift();\n }\n }, []);\n const getPredictions = useCallback(() => {\n const history = interactionHistoryRef.current;\n if (history.length < 3) return [];\n const targetCounts = new Map<string, number>();\n history.forEach(({ target }) => { targetCounts.set(target, (targetCounts.get(target) || 0) + 1); });\n return Array.from(targetCounts.entries()).sort((a, b) => b[1] - a[1]).slice(0, 5).map(([target]) => target);\n }, []);\n const prefetchPredicted = useCallback(<TData = unknown>(getQueryConfig: (target: string) => { queryKey: QueryKey; queryFn: QueryFunction<TData> }) => {\n const predictions = getPredictions();\n predictions.forEach((target) => {\n const { queryKey, queryFn } = getQueryConfig(target);\n queryClient.prefetchQuery({ queryKey, queryFn });\n });\n }, [queryClient, getPredictions]);\n const clearHistory = useCallback(() => { interactionHistoryRef.current = []; }, []);\n return { recordInteraction, getPredictions, prefetchPredicted, clearHistory };\n}\n\nexport function usePriorityPrefetch() {\n const queryClient = useQueryClient();\n const tasksRef = useRef<Array<{ queryKey: QueryKey; queryFn: QueryFunction<any>; priority: \"high\" | \"medium\" | \"low\"; timestamp: number }>>([]);\n const [taskCount, setTaskCount] = useState(0);\n const addPrefetchTask = useCallback(<TData = unknown>(queryKey: QueryKey, queryFn: QueryFunction<TData>, priority: \"high\" | \"medium\" | \"low\" = \"medium\") => {\n tasksRef.current.push({ queryKey, queryFn, priority, timestamp: Date.now() });\n setTaskCount(tasksRef.current.length);\n }, []);\n const processTasks = useCallback(async () => {\n const priorityOrder = { high: 0, medium: 1, low: 2 } as const;\n const sortedTasks = [...tasksRef.current].sort((a, b) => {\n const priorityDiff = priorityOrder[a.priority] - priorityOrder[b.priority];\n if (priorityDiff !== 0) return priorityDiff;\n return a.timestamp - b.timestamp;\n });\n for (const task of sortedTasks) {\n await queryClient.prefetchQuery({ queryKey: task.queryKey, queryFn: task.queryFn });\n }\n tasksRef.current = [];\n setTaskCount(0);\n }, [queryClient]);\n const clearTasks = useCallback(() => { tasksRef.current = []; setTaskCount(0); }, []);\n return { addPrefetchTask, processTasks, clearTasks, taskCount };\n}","import type { DefaultError, QueryKey, UseQueryOptions, UseQueryResult } from \"@tanstack/react-query\";\nimport { skipToken, useQuery } from \"@tanstack/react-query\";\nimport { useEffect, useRef } from \"react\";\nimport { isDev } from \"../core/env.js\";\n\nexport interface EnhancedQueryOptions<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey> extends UseQueryOptions<TQueryFnData, TError, TData, TQueryKey> {\n /** Log errors to console in development */\n logErrors?: boolean;\n /** Callback when query takes longer than threshold */\n onSlowQuery?: (duration: number, queryKey: TQueryKey) => void;\n /** Threshold in ms to trigger onSlowQuery (default: 3000) */\n slowQueryThreshold?: number;\n /** Enable performance tracking */\n trackPerformance?: boolean;\n}\n\nexport type EnhancedQueryResult<TData = unknown, TError = DefaultError> = UseQueryResult<TData, TError> & {\n /** Number of times the query has been refetched */\n refetchCount: number;\n /** Last query duration in ms */\n lastQueryDuration: number | null;\n};\n\nexport function useEnhancedQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(\n options: EnhancedQueryOptions<TQueryFnData, TError, TData, TQueryKey>\n): EnhancedQueryResult<TData, TError> {\n const {\n logErrors = isDev,\n onSlowQuery,\n slowQueryThreshold = 3000,\n trackPerformance = false,\n ...queryOptions\n } = options;\n\n const startTimeRef = useRef<number>(0);\n const refetchCountRef = useRef(0);\n const lastDurationRef = useRef<number | null>(null);\n const wasFetchingRef = useRef(false);\n\n const result = useQuery(queryOptions);\n\n // Performance tracking\n useEffect(() => {\n if (trackPerformance || onSlowQuery) {\n if (result.isFetching && !wasFetchingRef.current) {\n startTimeRef.current = Date.now();\n } else if (!result.isFetching && wasFetchingRef.current && startTimeRef.current > 0) {\n const duration = Date.now() - startTimeRef.current;\n lastDurationRef.current = duration;\n if (onSlowQuery && duration > slowQueryThreshold) {\n onSlowQuery(duration, queryOptions.queryKey as TQueryKey);\n }\n startTimeRef.current = 0;\n }\n wasFetchingRef.current = result.isFetching;\n }\n }, [result.isFetching, onSlowQuery, slowQueryThreshold, trackPerformance, queryOptions.queryKey]);\n\n // Error logging\n useEffect(() => {\n if (logErrors && result.isError && result.error) {\n console.error(`[useEnhancedQuery Error] ${JSON.stringify(queryOptions.queryKey)}:`, result.error);\n }\n }, [result.isError, result.error, logErrors, queryOptions.queryKey]);\n\n // Refetch counting\n useEffect(() => {\n if (result.isRefetching) {\n refetchCountRef.current++;\n }\n }, [result.isRefetching]);\n\n return {\n ...result,\n refetchCount: refetchCountRef.current,\n lastQueryDuration: lastDurationRef.current\n };\n}\n\nexport { skipToken };\n","import type { DefaultError, QueryFunction, QueryFunctionContext, QueryKey, UseSuspenseInfiniteQueryOptions, UseSuspenseInfiniteQueryResult, UseSuspenseQueryOptions, UseSuspenseQueryResult } from \"@tanstack/react-query\";\nimport { useSuspenseInfiniteQuery, useSuspenseQuery } from \"@tanstack/react-query\";\ntype InfiniteQueryFunction<TQueryFnData = unknown, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown> = (context: QueryFunctionContext<TQueryKey, TPageParam>) => Promise<TQueryFnData>;\nexport function createSuspenseQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TVariables = void>(\n getQueryKey: (variables: TVariables) => TQueryKey,\n queryFn: QueryFunction<TQueryFnData, TQueryKey>,\n options?: Omit<UseSuspenseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, \"queryKey\" | \"queryFn\">\n) {\n return (variables: TVariables): UseSuspenseQueryResult<TData, TError> => {\n const queryKey = getQueryKey(variables);\n return useSuspenseQuery({ queryKey, queryFn, ...options });\n };\n}\nexport function createSuspenseInfiniteQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown, TVariables = void>(\n getQueryKey: (variables: TVariables) => TQueryKey,\n queryFn: InfiniteQueryFunction<TQueryFnData, TQueryKey, TPageParam>,\n options: Omit<UseSuspenseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>, \"queryKey\" | \"queryFn\"> & {\n getNextPageParam: (lastPage: TQueryFnData, allPages: TQueryFnData[], lastPageParam: TPageParam, allPageParams: TPageParam[]) => TPageParam | undefined | null;\n initialPageParam: TPageParam;\n }\n) {\n return (variables: TVariables): UseSuspenseInfiniteQueryResult<TData, TError> => {\n const queryKey = getQueryKey(variables);\n return useSuspenseInfiniteQuery({ queryKey, queryFn, ...options });\n };\n}\nexport function useEnhancedSuspenseQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey>(options: UseSuspenseQueryOptions<TQueryFnData, TError, TData, TQueryKey>): UseSuspenseQueryResult<TData, TError> {\n return useSuspenseQuery(options);\n}\nexport function useEnhancedSuspenseInfiniteQuery<TQueryFnData = unknown, TError = DefaultError, TData = TQueryFnData, TQueryKey extends QueryKey = QueryKey, TPageParam = unknown>(options: UseSuspenseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>): UseSuspenseInfiniteQueryResult<TData, TError> {\n return useSuspenseInfiniteQuery(options);\n}","import type { QueryKey, UseQueryOptions } from \"@tanstack/react-query\";\nimport type { DataGuardOptions, VersionedEntity, VersionedPaginatedResponse } from \"../types/dataGuard.js\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { applyDataGuard, addHashToData } from \"../utils/dataGuard.js\";\nimport { isDev } from \"../core/env.js\";\n\n/**\n * Hook: 创建带数据防护的查询配置\n * \n * 自动根据后端返回的数据选择最佳防护策略:\n * 1. 如果有 version 字段 → 使用版本号比较(最可靠)\n * 2. 如果有 updatedAt 字段 → 使用时间戳比较(次优)\n * 3. 都没有 → 使用内容哈希比较(兜底)\n * \n * @example\n * ```typescript\n * const { data } = useEnhancedQuery(\n * useDataGuardQueryConfig(\n * ['products', 'list', { page: 1, pageSize: 20 }],\n * () => fetchProducts(1, 20),\n * {\n * maxDataAge: 5000,\n * onStaleDataDetected: (info) => {\n * console.warn('检测到旧数据', info)\n * }\n * }\n * )\n * )\n * ```\n */\nexport function useDataGuardQueryConfig<T extends VersionedEntity>(\n queryKey: QueryKey,\n fetchFn: () => Promise<VersionedPaginatedResponse<T>>,\n options?: DataGuardOptions\n): Pick<UseQueryOptions<VersionedPaginatedResponse<T>>, \"queryKey\" | \"queryFn\"> {\n const queryClient = useQueryClient();\n\n return {\n queryKey,\n queryFn: async () => {\n const newData = await fetchFn();\n const cached = queryClient.getQueryData<VersionedPaginatedResponse<T>>(queryKey);\n\n // 应用数据防护\n const { shouldReject, reason, strategy, guardDetails } = applyDataGuard(\n newData,\n cached,\n queryKey,\n options\n );\n\n // 触发回调\n options?.onDataGuardApplied?.({\n strategy,\n passed: !shouldReject,\n details: guardDetails\n });\n\n if (shouldReject) {\n if (isDev) {\n console.warn(\"[Data Guard] 拒绝旧数据\", {\n reason,\n strategy,\n queryKey,\n guardDetails\n });\n }\n\n options?.onStaleDataDetected?.({\n reason,\n strategy,\n queryKey,\n cached,\n rejected: newData\n });\n\n return cached!;\n }\n\n if (isDev) {\n console.log(\"[Data Guard] 接受新数据\", {\n strategy,\n guardDetails\n });\n }\n\n // 添加哈希标记\n return addHashToData(newData);\n }\n };\n}\n","import type { QueryKey, UseMutationResult } from \"@tanstack/react-query\";\nimport type { MutationOptions } from \"../types/index.js\";\nimport type { VersionedEntity, VersionedPaginatedResponse } from \"../types/dataGuard.js\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport { useMutation } from \"./useMutation.js\";\nimport { ConflictError } from \"../types/dataGuard.js\";\nimport { hashObject, markRecentlyUpdated, clearRecentlyUpdated, updateFamilyMetadata } from \"../utils/dataGuard.js\";\nimport { startsWithKeyPrefix } from \"../utils/queryKey.js\";\n\nexport interface DataGuardMutationOptions<TData, TError, TVariables, TContext> extends MutationOptions<TData, TError, TVariables, TContext> {\n /** 冲突错误回调 */\n onConflict?: (error: any) => void;\n}\n\n/**\n * 带数据防护的 Mutation Hook\n * \n * 自动处理:\n * 1. 乐观更新时递增版本号和更新时间戳\n * 2. 标记最近更新的项\n * 3. 成功后更新所有家族缓存的元数据\n * 4. 冲突检测(409 错误)\n * 5. 延迟清理更新标记\n * \n * @example\n * ```typescript\n * const mutation = useDataGuardMutation(\n * (updated) => api.updateProduct(updated.id, updated),\n * ['products', 'list', { page: 1, pageSize: 20 }],\n * {\n * optimistic: {\n * queryKey: ['products', 'list', { page: 1, pageSize: 20 }],\n * updater: (old, updated) => ({\n * ...old,\n * items: old?.items?.map(p => p.id === updated.id ? updated : p)\n * })\n * },\n * onConflict: (error) => {\n * toast.error('数据冲突,请刷新')\n * }\n * }\n * )\n * ```\n */\nexport function useDataGuardMutation<\n TData extends VersionedEntity = VersionedEntity,\n TError = Error,\n TVariables extends VersionedEntity = VersionedEntity,\n TContext = unknown\n>(\n mutationFn: (data: TVariables) => Promise<TData>,\n queryKey: QueryKey,\n options?: DataGuardMutationOptions<TData, TError, TVariables, TContext>\n): UseMutationResult<TData, TError, TVariables, TContext> {\n const queryClient = useQueryClient();\n const { onConflict, onSuccess, optimistic, ...restOptions } = options || {};\n\n // 增强的 mutation 函数:检测冲突\n const enhancedMutationFn = async (data: TVariables): Promise<TData> => {\n try {\n const result = await mutationFn(data);\n return result;\n } catch (error: any) {\n // 检测冲突错误(409 Conflict)\n if (error && typeof error === 'object' && \n (error.status === 409 || error.code === \"CONFLICT\" || error.name === \"ConflictError\")) {\n onConflict?.(error);\n throw new ConflictError(error);\n }\n throw error;\n }\n };\n\n // 增强的乐观更新配置\n const enhancedOptimistic = optimistic ? {\n ...optimistic,\n updater: (old: any, variables: TVariables) => {\n // 调用原始 updater\n const updated = optimistic.updater(old, variables);\n\n if (!updated) return updated;\n\n // 检查 variables.id 是否存在\n if (variables.id === undefined || variables.id === null) {\n return updated;\n }\n\n // 标记最近更新的项\n const withMark = markRecentlyUpdated(updated, variables.id);\n\n // 乐观更新版本号(安全检查:确保 old 存在)\n if (old && old.version !== undefined) {\n withMark.version = old.version + 1;\n }\n\n // 乐观更新时间戳(安全检查:确保 old 存在)\n if (old && old.updatedAt !== undefined) {\n withMark.updatedAt = new Date().toISOString();\n }\n\n // 更新哈希(安全检查:确保 old 存在)\n if (old && old._hash !== undefined) {\n withMark._hash = hashObject(withMark.items);\n }\n\n return withMark;\n }\n } : undefined;\n\n // 增强的成功回调\n const enhancedOnSuccess = (data: TData, variables: TVariables, onMutateResult: any, context: any) => {\n try {\n // 更新所有家族缓存的元数据\n const familyKey = Array.isArray(queryKey) ? queryKey.slice(0, -1) : [queryKey];\n updateFamilyMetadata<TData>(queryClient, familyKey, data);\n\n // 延迟清理最近更新标记(5秒后)\n const cleanupDelay = 5000;\n\n // 延迟清理最近更新标记\n setTimeout(() => {\n try {\n // 检查 variables.id 是否存在\n if (variables.id === undefined || variables.id === null) {\n return;\n }\n\n const cache = queryClient.getQueryCache();\n const queries = cache.findAll({\n predicate: (q: any) => startsWithKeyPrefix(q.queryKey as QueryKey, familyKey)\n });\n\n queries.forEach((q: any) => {\n const old = queryClient.getQueryData<VersionedPaginatedResponse<TData>>(q.queryKey);\n if (old?._recentlyUpdatedIds) {\n const cleared = clearRecentlyUpdated(old, variables.id);\n queryClient.setQueryData(q.queryKey, cleared);\n }\n });\n } catch (error) {\n // 清理标记失败不应该影响用户操作(静默处理)\n }\n }, cleanupDelay);\n } catch (error) {\n // 元数据更新失败不应该影响用户操作(静默处理)\n }\n\n // 调用用户的 onSuccess\n onSuccess?.(data, variables, onMutateResult, context);\n };\n\n return useMutation({\n ...restOptions,\n mutationFn: enhancedMutationFn,\n optimistic: enhancedOptimistic as any, // 类型复杂,暂时保留\n onSuccess: enhancedOnSuccess,\n onError: (error: TError, variables: TVariables, onMutateResult: any, context: any) => {\n if (error instanceof ConflictError) {\n // 冲突时失效所有家族缓存\n const familyKey = Array.isArray(queryKey) ? queryKey.slice(0, -1) : [queryKey];\n queryClient.invalidateQueries({ queryKey: familyKey });\n }\n\n // 调用用户的 onError\n restOptions.onError?.(error, variables, onMutateResult, context);\n }\n });\n}\n","import { useMutationState as useTanStackMutationState } from \"@tanstack/react-query\";\nimport type { MutationFilters } from \"@tanstack/react-query\";\n\nexport type MutationStateOptions<TResult = unknown> = Parameters<typeof useTanStackMutationState<TResult>>[0];\n\nexport function useMutationState<TResult = unknown>(\n options: MutationStateOptions<TResult> = {}\n): Array<TResult> {\n return useTanStackMutationState(options);\n}\n\nexport type { MutationFilters };\n","import { useIsFetching as useTanStackIsFetching, useIsMutating as useTanStackIsMutating } from \"@tanstack/react-query\";\nimport type { QueryFilters, MutationFilters } from \"@tanstack/react-query\";\n\nexport function useIsFetching(filters?: QueryFilters): number {\n return useTanStackIsFetching(filters);\n}\n\nexport function useIsMutating(filters?: MutationFilters): number {\n return useTanStackIsMutating(filters);\n}\n"]}
@@ -0,0 +1,36 @@
1
+ 'use strict';
2
+
3
+ // src/types/base.ts
4
+ var StorageType = /* @__PURE__ */ ((StorageType2) => {
5
+ StorageType2["LOCAL"] = "localStorage";
6
+ StorageType2["SESSION"] = "sessionStorage";
7
+ StorageType2["INDEXED_DB"] = "indexedDB";
8
+ StorageType2["CUSTOM"] = "custom";
9
+ return StorageType2;
10
+ })(StorageType || {});
11
+ var ConnectionQuality = /* @__PURE__ */ ((ConnectionQuality2) => {
12
+ ConnectionQuality2["SLOW"] = "slow";
13
+ ConnectionQuality2["FAST"] = "fast";
14
+ ConnectionQuality2["UNKNOWN"] = "unknown";
15
+ return ConnectionQuality2;
16
+ })(ConnectionQuality || {});
17
+ var CachePriority = /* @__PURE__ */ ((CachePriority2) => {
18
+ CachePriority2["HIGH"] = "high";
19
+ CachePriority2["MEDIUM"] = "medium";
20
+ CachePriority2["LOW"] = "low";
21
+ return CachePriority2;
22
+ })(CachePriority || {});
23
+ var PersistenceStrategyType = /* @__PURE__ */ ((PersistenceStrategyType2) => {
24
+ PersistenceStrategyType2["AGGRESSIVE"] = "aggressive";
25
+ PersistenceStrategyType2["CONSERVATIVE"] = "conservative";
26
+ PersistenceStrategyType2["SELECTIVE"] = "selective";
27
+ PersistenceStrategyType2["CUSTOM"] = "custom";
28
+ return PersistenceStrategyType2;
29
+ })(PersistenceStrategyType || {});
30
+
31
+ exports.CachePriority = CachePriority;
32
+ exports.ConnectionQuality = ConnectionQuality;
33
+ exports.PersistenceStrategyType = PersistenceStrategyType;
34
+ exports.StorageType = StorageType;
35
+ //# sourceMappingURL=chunk-5J6OXSLW.cjs.map
36
+ //# sourceMappingURL=chunk-5J6OXSLW.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types/base.ts"],"names":["StorageType","ConnectionQuality","CachePriority","PersistenceStrategyType"],"mappings":";;;AAEO,IAAK,WAAA,qBAAAA,YAAAA,KAAL;AAAmB,EAAAA,aAAA,OAAA,CAAA,GAAQ,cAAA;AAAgB,EAAAA,aAAA,SAAA,CAAA,GAAU,gBAAA;AAAkB,EAAAA,aAAA,YAAA,CAAA,GAAa,WAAA;AAAa,EAAAA,aAAA,QAAA,CAAA,GAAS,QAAA;AAArG,EAAA,OAAAA,YAAAA;AAAA,CAAA,EAAA,WAAA,IAAA,EAAA;AACL,IAAK,iBAAA,qBAAAC,kBAAAA,KAAL;AAAyB,EAAAA,mBAAA,MAAA,CAAA,GAAO,MAAA;AAAQ,EAAAA,mBAAA,MAAA,CAAA,GAAO,MAAA;AAAQ,EAAAA,mBAAA,SAAA,CAAA,GAAU,SAAA;AAA5D,EAAA,OAAAA,kBAAAA;AAAA,CAAA,EAAA,iBAAA,IAAA,EAAA;AACL,IAAK,aAAA,qBAAAC,cAAAA,KAAL;AAAqB,EAAAA,eAAA,MAAA,CAAA,GAAO,MAAA;AAAQ,EAAAA,eAAA,QAAA,CAAA,GAAS,QAAA;AAAU,EAAAA,eAAA,KAAA,CAAA,GAAM,KAAA;AAAxD,EAAA,OAAAA,cAAAA;AAAA,CAAA,EAAA,aAAA,IAAA,EAAA;AACL,IAAK,uBAAA,qBAAAC,wBAAAA,KAAL;AAA+B,EAAAA,yBAAA,YAAA,CAAA,GAAa,YAAA;AAAc,EAAAA,yBAAA,cAAA,CAAA,GAAe,cAAA;AAAgB,EAAAA,yBAAA,WAAA,CAAA,GAAY,WAAA;AAAa,EAAAA,yBAAA,QAAA,CAAA,GAAS,QAAA;AAAtH,EAAA,OAAAA,wBAAAA;AAAA,CAAA,EAAA,uBAAA,IAAA,EAAA","file":"chunk-5J6OXSLW.cjs","sourcesContent":["import type { QueryClient } from \"@tanstack/react-query\";\nimport type { PersistedClient, Persister } from \"@tanstack/react-query-persist-client\";\nexport enum StorageType { LOCAL = \"localStorage\", SESSION = \"sessionStorage\", INDEXED_DB = \"indexedDB\", CUSTOM = \"custom\" }\nexport enum ConnectionQuality { SLOW = \"slow\", FAST = \"fast\", UNKNOWN = \"unknown\" }\nexport enum CachePriority { HIGH = \"high\", MEDIUM = \"medium\", LOW = \"low\" }\nexport enum PersistenceStrategyType { AGGRESSIVE = \"aggressive\", CONSERVATIVE = \"conservative\", SELECTIVE = \"selective\", CUSTOM = \"custom\" }\nexport interface OperationResult<T = unknown> { success: boolean; data?: T; error?: Error; duration?: number; metadata?: Record<string, unknown> }\nexport interface NetworkInformation { effectiveType?: \"4g\" | \"3g\" | \"2g\" | \"slow-2g\"; saveData?: boolean; downlink?: number; rtt?: number }\nexport interface NetworkStatus { isOnline: boolean; isOffline: boolean; connectionQuality: ConnectionQuality; connection?: NetworkInformation; lastOnlineAt?: Date; lastOfflineAt?: Date }\nexport type DeepReadonly<T> = { readonly [P in keyof T]: T[P] extends object ? DeepReadonly<T[P]> : T[P] };\nexport type Optional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;\nexport type Required<T, K extends keyof T> = T & { [P in K]-?: T[P] };\nexport type { PersistedClient, Persister, QueryClient };"]}
@@ -0,0 +1,310 @@
1
+ 'use strict';
2
+
3
+ var chunkOFLCHKKE_cjs = require('./chunk-OFLCHKKE.cjs');
4
+
5
+ // src/core/config.ts
6
+ var TIME_CONSTANTS = {
7
+ THIRTY_SECONDS: 30 * 1e3,
8
+ ONE_MINUTE: 60 * 1e3,
9
+ FIVE_MINUTES: 5 * 60 * 1e3,
10
+ TEN_MINUTES: 10 * 60 * 1e3,
11
+ FIFTEEN_MINUTES: 15 * 60 * 1e3,
12
+ THIRTY_MINUTES: 30 * 60 * 1e3,
13
+ ONE_HOUR: 60 * 60 * 1e3,
14
+ ONE_DAY: 24 * 60 * 60 * 1e3
15
+ };
16
+ var DEFAULT_STALE_TIME = TIME_CONSTANTS.THIRTY_SECONDS;
17
+ var DEFAULT_GC_TIME = TIME_CONSTANTS.TEN_MINUTES;
18
+ function extractHttpStatus(error) {
19
+ if (!error || typeof error !== "object") return void 0;
20
+ const err = error;
21
+ if (typeof err.status === "number") return err.status;
22
+ if (typeof err.statusCode === "number") return err.statusCode;
23
+ if (err.response) {
24
+ if (typeof err.response.status === "number") return err.response.status;
25
+ if (typeof err.response.statusCode === "number") return err.response.statusCode;
26
+ }
27
+ return void 0;
28
+ }
29
+ function defaultQueryRetryStrategy(failureCount, error) {
30
+ const status = extractHttpStatus(error);
31
+ if (status && status >= 400 && status < 500) {
32
+ return false;
33
+ }
34
+ if (status && status >= 500 && status < 600) {
35
+ return failureCount < 1;
36
+ }
37
+ return failureCount < 2;
38
+ }
39
+ function defaultMutationRetryStrategy(failureCount, error) {
40
+ const status = extractHttpStatus(error);
41
+ if (status && status >= 400 && status < 500) {
42
+ return false;
43
+ }
44
+ if (status && status >= 500 && status < 600) {
45
+ return false;
46
+ }
47
+ return failureCount < 1;
48
+ }
49
+ function exponentialBackoff(attemptIndex) {
50
+ return Math.min(1e3 * 2 ** attemptIndex, 3e4);
51
+ }
52
+ var DEFAULT_QUERY_CONFIG = {
53
+ staleTime: DEFAULT_STALE_TIME,
54
+ gcTime: DEFAULT_GC_TIME,
55
+ retry: defaultQueryRetryStrategy,
56
+ retryDelay: exponentialBackoff,
57
+ refetchOnWindowFocus: true,
58
+ refetchOnReconnect: true,
59
+ refetchOnMount: true
60
+ };
61
+ var DEFAULT_MUTATION_CONFIG = {
62
+ retry: 0,
63
+ retryDelay: exponentialBackoff,
64
+ gcTime: DEFAULT_GC_TIME
65
+ };
66
+ var GLOBAL_QUERY_CONFIG = {
67
+ queries: DEFAULT_QUERY_CONFIG,
68
+ mutations: DEFAULT_MUTATION_CONFIG
69
+ };
70
+ var SMART_RETRY_MUTATION_CONFIG = {
71
+ retry: defaultMutationRetryStrategy,
72
+ retryDelay: exponentialBackoff,
73
+ gcTime: DEFAULT_GC_TIME
74
+ };
75
+ var DEVELOPMENT_CONFIG = {
76
+ queries: {
77
+ ...DEFAULT_QUERY_CONFIG,
78
+ staleTime: 0,
79
+ gcTime: TIME_CONSTANTS.TEN_MINUTES,
80
+ retry: defaultQueryRetryStrategy,
81
+ refetchOnWindowFocus: true
82
+ },
83
+ mutations: {
84
+ ...DEFAULT_MUTATION_CONFIG,
85
+ retry: 0
86
+ }
87
+ };
88
+ var PRODUCTION_CONFIG = {
89
+ queries: {
90
+ ...DEFAULT_QUERY_CONFIG,
91
+ staleTime: TIME_CONSTANTS.TEN_MINUTES,
92
+ gcTime: TIME_CONSTANTS.THIRTY_MINUTES,
93
+ retry: defaultQueryRetryStrategy,
94
+ refetchOnWindowFocus: true
95
+ },
96
+ mutations: {
97
+ ...DEFAULT_MUTATION_CONFIG,
98
+ retry: 0
99
+ }
100
+ };
101
+ var LONG_CACHE_CONFIG = {
102
+ queries: {
103
+ ...DEFAULT_QUERY_CONFIG,
104
+ staleTime: TIME_CONSTANTS.FIFTEEN_MINUTES,
105
+ gcTime: TIME_CONSTANTS.ONE_HOUR,
106
+ retry: defaultQueryRetryStrategy,
107
+ refetchOnWindowFocus: true,
108
+ refetchOnReconnect: true
109
+ },
110
+ mutations: {
111
+ ...DEFAULT_MUTATION_CONFIG,
112
+ retry: 0
113
+ }
114
+ };
115
+ var REALTIME_CONFIG = {
116
+ queries: {
117
+ ...DEFAULT_QUERY_CONFIG,
118
+ staleTime: 0,
119
+ gcTime: TIME_CONSTANTS.ONE_MINUTE * 2,
120
+ retry: defaultQueryRetryStrategy,
121
+ refetchOnWindowFocus: true,
122
+ refetchOnReconnect: true,
123
+ refetchInterval: TIME_CONSTANTS.THIRTY_SECONDS
124
+ },
125
+ mutations: DEFAULT_MUTATION_CONFIG
126
+ };
127
+ function getConfigByEnvironment(env) {
128
+ switch (env) {
129
+ case "development":
130
+ return DEVELOPMENT_CONFIG;
131
+ case "production":
132
+ return PRODUCTION_CONFIG;
133
+ case "realtime":
134
+ return REALTIME_CONFIG;
135
+ case "longCache":
136
+ return LONG_CACHE_CONFIG;
137
+ case "test":
138
+ return {
139
+ queries: {
140
+ ...DEFAULT_QUERY_CONFIG,
141
+ retry: 0,
142
+ staleTime: 0,
143
+ refetchOnWindowFocus: false,
144
+ refetchOnReconnect: false,
145
+ refetchOnMount: true
146
+ },
147
+ mutations: {
148
+ ...DEFAULT_MUTATION_CONFIG,
149
+ retry: 0
150
+ }
151
+ };
152
+ default:
153
+ return GLOBAL_QUERY_CONFIG;
154
+ }
155
+ }
156
+ function createCustomConfig(overrides) {
157
+ return {
158
+ queries: {
159
+ ...DEFAULT_QUERY_CONFIG,
160
+ ...overrides.queries
161
+ },
162
+ mutations: {
163
+ ...DEFAULT_MUTATION_CONFIG,
164
+ ...overrides.mutations
165
+ }
166
+ };
167
+ }
168
+ function validateGcTime(staleTime, gcTime) {
169
+ if (gcTime <= staleTime) {
170
+ return {
171
+ isValid: false,
172
+ warning: `gcTime (${gcTime}ms) \u5FC5\u987B\u5927\u4E8E staleTime (${staleTime}ms)\u3002\u5F53\u524D gcTime \u8FC7\u5C0F\uFF0C\u53EF\u80FD\u5BFC\u81F4\u7F13\u5B58\u6570\u636E\u8FC7\u65E9\u88AB\u6E05\u7406\u3002`
173
+ };
174
+ }
175
+ return { isValid: true };
176
+ }
177
+ function validateConfig(config) {
178
+ const warnings = [];
179
+ let isValid = true;
180
+ if (config.queries) {
181
+ const staleTime = typeof config.queries.staleTime === "number" ? config.queries.staleTime : DEFAULT_STALE_TIME;
182
+ const gcTime = typeof config.queries.gcTime === "number" ? config.queries.gcTime : DEFAULT_GC_TIME;
183
+ const gcTimeValidation = validateGcTime(staleTime, gcTime);
184
+ if (!gcTimeValidation.isValid && gcTimeValidation.warning) {
185
+ warnings.push(gcTimeValidation.warning);
186
+ isValid = false;
187
+ } else if (gcTimeValidation.warning) {
188
+ warnings.push(gcTimeValidation.warning);
189
+ }
190
+ if ("cacheTime" in config.queries) {
191
+ warnings.push("\u68C0\u6D4B\u5230\u5DF2\u5E9F\u5F03\u7684 'cacheTime' \u5C5E\u6027\u3002\u5728 React Query v5 \u4E2D\uFF0C\u8BF7\u4F7F\u7528 'gcTime' \u4EE3\u66FF\u3002");
192
+ isValid = false;
193
+ }
194
+ if (config.queries.refetchOnWindowFocus === false) {
195
+ warnings.push("\u5EFA\u8BAE\u542F\u7528 'refetchOnWindowFocus' \u4EE5\u63D0\u4F9B\u66F4\u597D\u7684\u7528\u6237\u4F53\u9A8C\u3002\u5F53\u7528\u6237\u5207\u6362\u56DE\u5E94\u7528\u65F6\uFF0C\u6570\u636E\u4F1A\u81EA\u52A8\u5237\u65B0\u3002");
196
+ }
197
+ if (typeof config.queries.retryDelay === "number") {
198
+ warnings.push(
199
+ "\u5EFA\u8BAE\u4F7F\u7528\u6307\u6570\u9000\u907F\u7B56\u7565\u4F5C\u4E3A\u91CD\u8BD5\u5EF6\u8FDF\uFF0C\u800C\u4E0D\u662F\u56FA\u5B9A\u5EF6\u8FDF\u3002\u4F8B\u5982\uFF1A(attemptIndex) => Math.min(1000 * 2 ** attemptIndex, 30000)"
200
+ );
201
+ }
202
+ }
203
+ return { isValid, warnings };
204
+ }
205
+ function ensureBestPractices(config) {
206
+ const result = { ...config };
207
+ if (result.queries) {
208
+ const queries = { ...result.queries };
209
+ if ("cacheTime" in queries) {
210
+ const cacheTime = queries.cacheTime;
211
+ if (typeof cacheTime === "number" && queries.gcTime === void 0) {
212
+ queries.gcTime = cacheTime;
213
+ }
214
+ delete queries.cacheTime;
215
+ if (!chunkOFLCHKKE_cjs.isProd) {
216
+ console.warn("[TanStack Query Config] \u5DF2\u79FB\u9664\u5E9F\u5F03\u7684 'cacheTime' \u5C5E\u6027\uFF0C\u6539\u7528 'gcTime'.");
217
+ }
218
+ }
219
+ const staleTime = typeof queries.staleTime === "number" ? queries.staleTime : DEFAULT_STALE_TIME;
220
+ const gcTime = typeof queries.gcTime === "number" ? queries.gcTime : DEFAULT_GC_TIME;
221
+ const validation = validateGcTime(staleTime, gcTime);
222
+ if (!validation.isValid) {
223
+ queries.gcTime = staleTime + TIME_CONSTANTS.ONE_MINUTE;
224
+ if (!chunkOFLCHKKE_cjs.isProd) {
225
+ console.warn(
226
+ `[TanStack Query Config] \u81EA\u52A8\u8C03\u6574 gcTime \u4ECE ${gcTime}ms \u5230 ${queries.gcTime}ms\uFF0C\u4EE5\u786E\u4FDD\u5927\u4E8E staleTime (${staleTime}ms)\u3002`
227
+ );
228
+ }
229
+ }
230
+ if (queries.retryDelay === void 0) {
231
+ queries.retryDelay = exponentialBackoff;
232
+ }
233
+ if (queries.refetchOnWindowFocus === void 0) {
234
+ queries.refetchOnWindowFocus = true;
235
+ }
236
+ result.queries = queries;
237
+ }
238
+ return result;
239
+ }
240
+ function createSafeRetryStrategy(maxRetries4xx = 0, maxRetries5xx = 0, maxRetriesOther = 1) {
241
+ return (failureCount, error) => {
242
+ const status = extractHttpStatus(error);
243
+ if (status && status >= 400 && status < 500) {
244
+ return failureCount < maxRetries4xx;
245
+ }
246
+ if (status && status >= 500 && status < 600) {
247
+ return failureCount < maxRetries5xx;
248
+ }
249
+ return failureCount < maxRetriesOther;
250
+ };
251
+ }
252
+ function createErrorSafeConfig(options = {}) {
253
+ const {
254
+ maxRetries4xx = 0,
255
+ maxRetries5xx = 0,
256
+ maxRetriesOther = 1,
257
+ disableFocus = false,
258
+ disableReconnect = false,
259
+ conditionalRefetchInterval,
260
+ overrides
261
+ } = options;
262
+ const queries = {
263
+ ...DEFAULT_QUERY_CONFIG,
264
+ retry: createSafeRetryStrategy(maxRetries4xx, maxRetries5xx, maxRetriesOther),
265
+ retryDelay: exponentialBackoff,
266
+ refetchOnWindowFocus: disableFocus ? false : true,
267
+ refetchOnReconnect: disableReconnect ? false : true
268
+ };
269
+ if (conditionalRefetchInterval !== void 0) {
270
+ if (typeof conditionalRefetchInterval === "number") {
271
+ queries.refetchInterval = (query) => query?.state?.error ? false : conditionalRefetchInterval;
272
+ } else {
273
+ const fn = conditionalRefetchInterval;
274
+ queries.refetchInterval = (query) => fn.length >= 2 ? fn(query?.state?.data, query) : fn(query);
275
+ }
276
+ }
277
+ const mutations = {
278
+ ...DEFAULT_MUTATION_CONFIG,
279
+ retry: createSafeRetryStrategy(maxRetries4xx, maxRetries5xx, maxRetriesOther)
280
+ };
281
+ const result = {
282
+ queries: { ...queries, ...overrides?.queries || {} },
283
+ mutations: { ...mutations, ...overrides?.mutations || {} }
284
+ };
285
+ return result;
286
+ }
287
+
288
+ exports.DEFAULT_GC_TIME = DEFAULT_GC_TIME;
289
+ exports.DEFAULT_MUTATION_CONFIG = DEFAULT_MUTATION_CONFIG;
290
+ exports.DEFAULT_QUERY_CONFIG = DEFAULT_QUERY_CONFIG;
291
+ exports.DEFAULT_STALE_TIME = DEFAULT_STALE_TIME;
292
+ exports.DEVELOPMENT_CONFIG = DEVELOPMENT_CONFIG;
293
+ exports.GLOBAL_QUERY_CONFIG = GLOBAL_QUERY_CONFIG;
294
+ exports.LONG_CACHE_CONFIG = LONG_CACHE_CONFIG;
295
+ exports.PRODUCTION_CONFIG = PRODUCTION_CONFIG;
296
+ exports.REALTIME_CONFIG = REALTIME_CONFIG;
297
+ exports.SMART_RETRY_MUTATION_CONFIG = SMART_RETRY_MUTATION_CONFIG;
298
+ exports.TIME_CONSTANTS = TIME_CONSTANTS;
299
+ exports.createCustomConfig = createCustomConfig;
300
+ exports.createErrorSafeConfig = createErrorSafeConfig;
301
+ exports.createSafeRetryStrategy = createSafeRetryStrategy;
302
+ exports.defaultMutationRetryStrategy = defaultMutationRetryStrategy;
303
+ exports.defaultQueryRetryStrategy = defaultQueryRetryStrategy;
304
+ exports.ensureBestPractices = ensureBestPractices;
305
+ exports.exponentialBackoff = exponentialBackoff;
306
+ exports.getConfigByEnvironment = getConfigByEnvironment;
307
+ exports.validateConfig = validateConfig;
308
+ exports.validateGcTime = validateGcTime;
309
+ //# sourceMappingURL=chunk-6MAYHLTE.cjs.map
310
+ //# sourceMappingURL=chunk-6MAYHLTE.cjs.map