@qiaopeng/tanstack-query-plus 0.5.8 → 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 +155 -95
  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 -47
  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 -321
  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 -44
  162. package/dist/features/index.d.ts.map +0 -1
  163. package/dist/features/offline.d.ts +0 -48
  164. package/dist/features/offline.d.ts.map +0 -1
  165. package/dist/features/offline.js +0 -269
  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 -186
  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 -151
  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 -257
  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 -24
  243. package/dist/utils/queryKey.d.ts.map +0 -1
  244. package/dist/utils/queryKey.js +0 -77
  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/utils/queryKey.ts","../src/utils/network.ts","../src/utils/dataGuard.ts"],"names":[],"mappings":"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","file":"chunk-APXNNHBD.cjs","sourcesContent":["import type { QueryKey } from \"@tanstack/react-query\";\n\nexport interface NormalizeConfig<T = any> { required?: (keyof T)[]; defaults?: Partial<T>; sortKeys?: boolean; removeEmpty?: boolean }\nexport function normalizeQueryParams<T extends Record<string, any>>(params: T | undefined, config: NormalizeConfig<T> = {}): Record<string, any> {\n const { required = [], defaults = {}, sortKeys = true, removeEmpty = true } = config;\n if (!params) { return { ...defaults }; }\n const normalized: Record<string, any> = {};\n required.forEach((key) => {\n const value = params[key] ?? (defaults as any)[key];\n if (value !== undefined) {\n if (typeof value === \"number\" || (typeof value === \"string\" && !Number.isNaN(Number(value)))) { normalized[String(key)] = Number(value); } else { normalized[String(key)] = value; }\n }\n });\n const optionalKeys = Object.keys(params).filter((key) => !required.includes(key as keyof T));\n if (sortKeys) { optionalKeys.sort(); }\n optionalKeys.forEach((key) => {\n const value = params[key];\n if (removeEmpty && (value === undefined || value === null || value === \"\")) { return; }\n if (typeof value === \"string\") {\n const trimmed = value.trim();\n if (trimmed || !removeEmpty) { normalized[key] = trimmed; }\n } else if (value !== undefined && value !== null) {\n normalized[key] = value;\n }\n });\n return normalized;\n}\nexport interface QueryKeyFactoryConfig<TParams = any> { namespace: string; normalizeConfig?: NormalizeConfig<TParams> }\nexport interface QueryKeyFactory<TParams = any> { all: () => readonly [string]; lists: () => readonly [string, string]; list: (params?: TParams) => readonly [string, string, Record<string, any>]; details: () => readonly [string, string]; detail: (id: string) => readonly [string, string, string]; custom: (queryName: string, params?: any) => readonly [string, string, string, any?] }\nexport function createQueryKeyFactory<TParams = any>(config: QueryKeyFactoryConfig<TParams>): QueryKeyFactory<TParams> {\n const { namespace, normalizeConfig } = config;\n return {\n all: () => [namespace] as const,\n lists: () => [namespace, \"list\"] as const,\n list: (params?: TParams) => { const normalized = normalizeQueryParams(params as any, normalizeConfig); return [namespace, \"list\", normalized] as const; },\n details: () => [namespace, \"detail\"] as const,\n detail: (id: string) => [namespace, \"detail\", id] as const,\n custom: (queryName: string, params?: any) => { if (params !== undefined) { return [namespace, \"custom\", queryName, params] as const; } return [namespace, \"custom\", queryName] as const; }\n };\n}\nexport function createSimpleQueryKeyFactory(namespace: string): QueryKeyFactory { return createQueryKeyFactory({ namespace }); }\nexport function isQueryKeyEqual(key1: readonly any[], key2: readonly any[]): boolean {\n if (key1.length !== key2.length) return false;\n return key1.every((value, index) => {\n const other = key2[index];\n if (typeof value !== \"object\" || value === null) { return value === other; }\n if (typeof other !== \"object\" || other === null) { return false; }\n const keys1 = Object.keys(value); const keys2 = Object.keys(other);\n if (keys1.length !== keys2.length) return false;\n return keys1.every((key) => (value as any)[key] === (other as any)[key]);\n });\n}\nexport function extractParamsFromKey(queryKey: readonly any[]): Record<string, any> | undefined {\n const lastItem = queryKey[queryKey.length - 1];\n if (typeof lastItem === \"object\" && lastItem !== null && !Array.isArray(lastItem)) { return lastItem; }\n return undefined;\n}\n\nexport function startsWithKeyPrefix(key: QueryKey, prefix: QueryKey): boolean {\n const k = Array.isArray(key) ? key : [key];\n const p = Array.isArray(prefix) ? prefix : [prefix];\n if (p.length > k.length) return false;\n for (let i = 0; i < p.length; i++) {\n if (JSON.stringify(k[i]) !== JSON.stringify(p[i])) {\n return false;\n }\n }\n return true;\n}\n\nexport function deriveFamilyKey(queryKey: QueryKey): QueryKey {\n const arr = Array.isArray(queryKey) ? [...queryKey] : [queryKey as unknown];\n while (arr.length > 1) {\n const last = arr[arr.length - 1];\n if (last && typeof last === \"object\" && !Array.isArray(last)) { arr.pop(); continue; }\n if (typeof last === \"string\" && (last === \"paginated\" || last === \"filtered\" || last === \"sorted\" || last === \"search\" || last === \"complex\")) { arr.pop(); continue; }\n break;\n }\n return arr as unknown as QueryKey;\n}\n\nexport function isListFamilyKey(queryKey: QueryKey): boolean {\n const parts = Array.isArray(queryKey) ? queryKey : [queryKey as unknown];\n return parts.includes(\"list\") || parts.includes(\"paginated\");\n}\n","import type { NetworkInformation } from \"../types/base\";\nexport interface NavigatorWithConnection extends Navigator { connection?: NetworkInformation }\nfunction hasConnectionAPI(nav: Navigator): nav is NavigatorWithConnection { return \"connection\" in nav }\nexport function isSlowNetwork(): boolean {\n if (typeof navigator === \"undefined\") { return false; }\n if (!hasConnectionAPI(navigator)) { return false; }\n const connection = navigator.connection;\n if (!connection) { return false; }\n return connection.effectiveType === \"slow-2g\" || connection.effectiveType === \"2g\" || connection.saveData === true;\n}\nexport function getNetworkInfo(): NetworkInformation | null {\n if (typeof navigator === \"undefined\") { return null; }\n if (!hasConnectionAPI(navigator)) { return null; }\n return navigator.connection || null;\n}\nexport function isFastNetwork(): boolean {\n const networkInfo = getNetworkInfo();\n if (!networkInfo) { return true; }\n return networkInfo.effectiveType === \"4g\" && networkInfo.saveData !== true;\n}\nexport function getNetworkSpeed(): \"fast\" | \"medium\" | \"slow\" | \"unknown\" {\n const networkInfo = getNetworkInfo();\n if (!networkInfo || !networkInfo.effectiveType) { return \"unknown\"; }\n switch (networkInfo.effectiveType) {\n case \"4g\": return \"fast\";\n case \"3g\": return \"medium\";\n case \"2g\":\n case \"slow-2g\": return \"slow\";\n default: return \"unknown\";\n }\n}","import type { QueryClient, QueryKey } from \"@tanstack/react-query\";\nimport type {\n DataGuardOptions,\n DataGuardStrategy,\n VersionedEntity,\n VersionedPaginatedResponse\n} from \"../types/dataGuard.js\";\nimport { startsWithKeyPrefix } from \"./queryKey.js\";\n\n/**\n * 简单的字符串哈希函数(DJB2算法变体)\n */\nfunction simpleHash(str: string): string {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash | 0; // 转换为32位整数\n }\n return Math.abs(hash).toString(36);\n}\n\n/**\n * 对象键排序(确保一致的哈希值)\n */\nfunction sortObjectKeys(obj: any): any {\n if (obj === null || obj === undefined) return obj;\n if (typeof obj !== 'object') return obj;\n if (Array.isArray(obj)) return obj.map(sortObjectKeys);\n \n const sorted: any = {};\n Object.keys(obj).sort().forEach(key => {\n sorted[key] = sortObjectKeys(obj[key]);\n });\n return sorted;\n}\n\n/**\n * 计算对象的哈希值(键排序后计算,确保一致性)\n */\nexport function hashObject(obj: any): string {\n try {\n const sorted = sortObjectKeys(obj);\n return simpleHash(JSON.stringify(sorted));\n } catch {\n return simpleHash(String(obj));\n }\n}\n\n/**\n * 自适应数据防护:根据数据特征自动选择最佳防护策略\n * \n * 策略优先级:\n * 1. version(版本号)- 最可靠\n * 2. updatedAt(时间戳)- 次优\n * 3. hash(内容哈希)- 兜底\n */\nexport function applyDataGuard<T extends VersionedEntity>(\n newData: VersionedPaginatedResponse<T>,\n cached: VersionedPaginatedResponse<T> | undefined,\n queryKey: QueryKey,\n options: DataGuardOptions = {}\n): {\n shouldReject: boolean;\n reason: string;\n strategy: DataGuardStrategy;\n guardDetails: any;\n} {\n const {\n maxDataAge = 10000,\n enableVersionCheck = true,\n enableTimestampCheck = true,\n enableHashCheck = true\n } = options;\n\n // 如果没有缓存,接受新数据\n if (!cached) {\n return {\n shouldReject: false,\n reason: \"No cached data\",\n strategy: \"none\",\n guardDetails: {}\n };\n }\n\n let shouldReject = false;\n let reason = \"\";\n let strategy: DataGuardStrategy = \"none\";\n let guardDetails: any = {};\n\n // ============================================\n // 策略1:版本号比较(最可靠)\n // ============================================\n if (enableVersionCheck && cached.version !== undefined && newData.version !== undefined) {\n strategy = \"version\";\n\n if (newData.version < cached.version) {\n shouldReject = true;\n reason = `版本号回退:缓存版本 ${cached.version} > 新数据版本 ${newData.version}`;\n guardDetails = {\n cachedVersion: cached.version,\n newVersion: newData.version,\n diff: cached.version - newData.version\n };\n } else if (newData.version === cached.version) {\n guardDetails = {\n version: newData.version,\n status: \"identical\"\n };\n } else {\n guardDetails = {\n cachedVersion: cached.version,\n newVersion: newData.version,\n status: \"updated\"\n };\n }\n }\n\n // ============================================\n // 策略2:时间戳比较(次优)\n // ============================================\n else if (enableTimestampCheck && cached.updatedAt && newData.updatedAt) {\n strategy = \"timestamp\";\n\n try {\n const cachedTime = new Date(cached.updatedAt).getTime();\n const newTime = new Date(newData.updatedAt).getTime();\n const timeDiff = cachedTime - newTime;\n const dataAge = Date.now() - newTime;\n\n guardDetails = {\n cachedTime: cached.updatedAt,\n newTime: newData.updatedAt,\n timeDiff,\n dataAge\n };\n\n // 新数据的时间戳更旧\n if (newTime < cachedTime) {\n // 如果数据年龄超过阈值,拒绝\n if (dataAge > maxDataAge) {\n shouldReject = true;\n reason = `时间戳过期:新数据时间 ${newData.updatedAt} 早于缓存 ${cached.updatedAt},且数据年龄 ${dataAge}ms 超过阈值 ${maxDataAge}ms`;\n } else {\n // 数据年龄在可接受范围内,记录警告但接受\n guardDetails.warning = `时间戳略旧但在可接受范围内(${dataAge}ms < ${maxDataAge}ms)`;\n }\n }\n } catch (error) {\n guardDetails.error = `时间戳解析失败: ${error}`;\n // 时间戳解析失败,不使用时间戳策略\n // 将在下一个 else if 中尝试 hash 策略\n }\n }\n\n // ============================================\n // 策略3:内容哈希比较(兜底)\n // ============================================\n else if (enableHashCheck) {\n strategy = \"hash\";\n\n const newHash = hashObject(newData.items);\n const cachedHash = cached._hash;\n\n guardDetails = {\n cachedHash,\n newHash,\n identical: cachedHash === newHash\n };\n\n if (cachedHash && cachedHash === newHash) {\n // 内容完全相同,不需要更新\n shouldReject = true;\n reason = \"内容哈希相同,数据未变化\";\n } else if (\n cachedHash &&\n cached._recentlyUpdatedIds &&\n (Array.isArray(cached._recentlyUpdatedIds)\n ? cached._recentlyUpdatedIds.length > 0\n : cached._recentlyUpdatedIds.size > 0)\n ) {\n // 检查最近更新的项是否被回退\n let hasRevert = false;\n\n for (const id of cached._recentlyUpdatedIds) {\n const cachedItem = cached.items.find(item => item.id === id);\n const newItem = newData.items.find(item => item.id === id);\n\n if (cachedItem && newItem) {\n const cachedItemHash = hashObject(cachedItem);\n const newItemHash = hashObject(newItem);\n\n if (cachedItemHash !== newItemHash) {\n // 简单启发式:如果缓存项有更多字段,可能是新的\n if (Object.keys(cachedItem).length > Object.keys(newItem).length) {\n hasRevert = true;\n guardDetails.revertedItem = { id, cachedItem, newItem };\n break;\n }\n }\n }\n }\n\n if (hasRevert) {\n shouldReject = true;\n reason = \"检测到最近更新的项可能被回退\";\n }\n }\n }\n\n return {\n shouldReject,\n reason,\n strategy,\n guardDetails\n };\n}\n\n/**\n * 为查询数据添加哈希标记\n */\nexport function addHashToData<T extends VersionedEntity>(\n data: VersionedPaginatedResponse<T>\n): VersionedPaginatedResponse<T> {\n return {\n ...data,\n _hash: hashObject(data.items)\n };\n}\n\n/**\n * 标记最近更新的项\n */\nexport function markRecentlyUpdated<T extends VersionedEntity>(\n data: VersionedPaginatedResponse<T>,\n updatedId: string | number\n): VersionedPaginatedResponse<T> {\n const existing = data._recentlyUpdatedIds\n ? (Array.isArray(data._recentlyUpdatedIds) ? [...data._recentlyUpdatedIds] : Array.from(data._recentlyUpdatedIds))\n : [];\n if (!existing.includes(updatedId)) {\n existing.push(updatedId);\n }\n\n return {\n ...data,\n _recentlyUpdatedIds: existing\n };\n}\n\n/**\n * 清理最近更新的标记\n */\nexport function clearRecentlyUpdated<T extends VersionedEntity>(\n data: VersionedPaginatedResponse<T>,\n updatedId: string | number\n): VersionedPaginatedResponse<T> {\n if (!data._recentlyUpdatedIds) return data;\n\n const existing = Array.isArray(data._recentlyUpdatedIds) ? data._recentlyUpdatedIds : Array.from(data._recentlyUpdatedIds);\n const remaining = existing.filter((id) => id !== updatedId);\n\n return {\n ...data,\n _recentlyUpdatedIds: remaining.length > 0 ? remaining : undefined\n };\n}\n\n/**\n * 更新所有家族缓存的元数据(版本号、时间戳、哈希)\n */\nexport function updateFamilyMetadata<T extends VersionedEntity>(\n queryClient: QueryClient,\n familyKey: QueryKey,\n response: Partial<VersionedPaginatedResponse<T>>\n): void {\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<T>>(q.queryKey);\n if (old) {\n const updated: VersionedPaginatedResponse<T> = { ...old };\n\n // 更新版本号\n if (response.version !== undefined) {\n updated.version = response.version;\n } else if (old.version !== undefined) {\n updated.version = old.version + 1;\n }\n\n // 更新时间戳\n if (response.updatedAt) {\n updated.updatedAt = response.updatedAt;\n } else if (old.updatedAt !== undefined) {\n updated.updatedAt = new Date().toISOString();\n }\n\n // 更新哈希(安全检查:确保 items 存在)\n if (old._hash !== undefined && updated.items) {\n updated._hash = hashObject(updated.items);\n }\n\n queryClient.setQueryData(q.queryKey, updated);\n }\n });\n}\n"]}
@@ -0,0 +1,134 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { QueryErrorResetBoundary } from '@tanstack/react-query';
3
+ export { HydrationBoundary, dehydrate, hydrate } from '@tanstack/react-query';
4
+ import { Suspense, Component } from 'react';
5
+
6
+ // src/components/LoadingFallback.tsx
7
+ function DefaultLoadingFallback() {
8
+ return /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center p-6", children: /* @__PURE__ */ jsxs("div", { className: "text-center", children: [
9
+ /* @__PURE__ */ jsx("div", { className: "w-12 h-12 mx-auto mb-3 border-4 border-primary/20 border-t-primary rounded-full animate-spin" }),
10
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: "\u52A0\u8F7D\u4E2D..." })
11
+ ] }) });
12
+ }
13
+ function TextSkeletonFallback({ lines = 3 }) {
14
+ return /* @__PURE__ */ jsx("div", { className: "space-y-3 p-4", children: Array.from({ length: lines }).map((_, i) => /* @__PURE__ */ jsxs("div", { className: "animate-pulse", children: [
15
+ /* @__PURE__ */ jsx("div", { className: "h-4 bg-input rounded w-3/4 mb-2" }),
16
+ /* @__PURE__ */ jsx("div", { className: "h-4 bg-input rounded w-1/2" })
17
+ ] }, i)) });
18
+ }
19
+ function CardSkeletonFallback() {
20
+ return /* @__PURE__ */ jsxs("div", { className: "border border-border rounded-lg p-4 animate-pulse bg-card", children: [
21
+ /* @__PURE__ */ jsx("div", { className: "h-6 bg-input rounded w-1/2 mb-4" }),
22
+ /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
23
+ /* @__PURE__ */ jsx("div", { className: "h-4 bg-input rounded" }),
24
+ /* @__PURE__ */ jsx("div", { className: "h-4 bg-input rounded w-5/6" }),
25
+ /* @__PURE__ */ jsx("div", { className: "h-4 bg-input rounded w-4/6" })
26
+ ] })
27
+ ] });
28
+ }
29
+ function ListSkeletonFallback({ items = 3 }) {
30
+ return /* @__PURE__ */ jsx("div", { className: "space-y-4 p-4", children: Array.from({ length: items }).map((_, i) => /* @__PURE__ */ jsxs("div", { className: "flex items-center space-x-4 animate-pulse", children: [
31
+ /* @__PURE__ */ jsx("div", { className: "w-12 h-12 bg-input rounded-full shrink-0" }),
32
+ /* @__PURE__ */ jsxs("div", { className: "flex-1 space-y-2", children: [
33
+ /* @__PURE__ */ jsx("div", { className: "h-4 bg-input rounded w-3/4" }),
34
+ /* @__PURE__ */ jsx("div", { className: "h-3 bg-input rounded w-1/2" })
35
+ ] })
36
+ ] }, i)) });
37
+ }
38
+ function PageSkeletonFallback() {
39
+ return /* @__PURE__ */ jsxs("div", { className: "w-full p-6 space-y-6", children: [
40
+ /* @__PURE__ */ jsxs("div", { className: "animate-pulse", children: [
41
+ /* @__PURE__ */ jsx("div", { className: "h-8 bg-input rounded w-1/3 mb-2" }),
42
+ /* @__PURE__ */ jsx("div", { className: "h-4 bg-input rounded w-1/2" })
43
+ ] }),
44
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-6", children: [
45
+ /* @__PURE__ */ jsxs("div", { className: "md:col-span-2 space-y-4", children: [
46
+ /* @__PURE__ */ jsx(CardSkeletonFallback, {}),
47
+ /* @__PURE__ */ jsx(CardSkeletonFallback, {})
48
+ ] }),
49
+ /* @__PURE__ */ jsx("div", { className: "space-y-4", children: /* @__PURE__ */ jsxs("div", { className: "border border-border rounded-lg p-4 animate-pulse bg-card", children: [
50
+ /* @__PURE__ */ jsx("div", { className: "h-4 bg-input rounded w-2/3 mb-3" }),
51
+ /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
52
+ /* @__PURE__ */ jsx("div", { className: "h-3 bg-input rounded" }),
53
+ /* @__PURE__ */ jsx("div", { className: "h-3 bg-input rounded w-5/6" }),
54
+ /* @__PURE__ */ jsx("div", { className: "h-3 bg-input rounded w-4/6" })
55
+ ] })
56
+ ] }) })
57
+ ] })
58
+ ] });
59
+ }
60
+ function SmallLoadingIndicator({ size = "md" }) {
61
+ const sizeClasses = {
62
+ sm: "w-4 h-4 border-2",
63
+ md: "w-6 h-6 border-2",
64
+ lg: "w-8 h-8 border-3"
65
+ };
66
+ return /* @__PURE__ */ jsx("div", { className: `${sizeClasses[size]} border-primary/20 border-t-primary rounded-full animate-spin` });
67
+ }
68
+ function FullScreenLoading({ message = "\u52A0\u8F7D\u4E2D..." }) {
69
+ return /* @__PURE__ */ jsx("div", { className: "fixed inset-0 bg-background/90 flex items-center justify-center z-50", children: /* @__PURE__ */ jsxs("div", { className: "text-center", children: [
70
+ /* @__PURE__ */ jsx("div", { className: "w-16 h-16 mx-auto mb-4 border-4 border-primary/20 border-t-primary rounded-full animate-spin" }),
71
+ /* @__PURE__ */ jsx("p", { className: "text-lg text-foreground", children: message })
72
+ ] }) });
73
+ }
74
+ var ErrorBoundary = class extends Component {
75
+ constructor(props) {
76
+ super(props);
77
+ this.resetErrorBoundary = () => {
78
+ this.props.onReset?.();
79
+ this.setState({ hasError: false, error: void 0 });
80
+ };
81
+ this.state = { hasError: false };
82
+ }
83
+ static getDerivedStateFromError(error) {
84
+ return { hasError: true, error };
85
+ }
86
+ componentDidCatch(error, errorInfo) {
87
+ this.props.onError?.(error, errorInfo);
88
+ }
89
+ componentDidUpdate(prevProps) {
90
+ if (this.state.hasError && this.props.resetKeys && prevProps.resetKeys) {
91
+ const hasResetKeyChanged = this.props.resetKeys.length !== prevProps.resetKeys.length || this.props.resetKeys.some((key, index) => key !== prevProps.resetKeys?.[index]);
92
+ if (hasResetKeyChanged) {
93
+ this.resetErrorBoundary();
94
+ }
95
+ }
96
+ }
97
+ render() {
98
+ const { hasError, error } = this.state;
99
+ const { children, fallback } = this.props;
100
+ if (hasError && error) {
101
+ if (fallback) return fallback(error, this.resetErrorBoundary);
102
+ return /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center p-6", children: /* @__PURE__ */ jsxs("div", { className: "text-center max-w-md", children: [
103
+ /* @__PURE__ */ jsx("h3", { className: "text-lg font-semibold text-foreground mb-2", children: "\u53D1\u751F\u9519\u8BEF" }),
104
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground mb-4", children: error.message || "\u8BF7\u7A0D\u540E\u91CD\u8BD5" }),
105
+ /* @__PURE__ */ jsx("button", { onClick: this.resetErrorBoundary, className: "px-4 py-2 bg-primary text-primary-foreground rounded-md", children: "\u91CD\u8BD5" })
106
+ ] }) });
107
+ }
108
+ return children;
109
+ }
110
+ };
111
+ function QueryErrorBoundary({ children, fallback, onError, resetKeys, ...props }) {
112
+ return /* @__PURE__ */ jsx(QueryErrorResetBoundary, { children: ({ reset }) => /* @__PURE__ */ jsx(ErrorBoundary, { fallback: fallback || QueryErrorFallback, onError, onReset: reset, resetKeys, ...props, children }) });
113
+ }
114
+ function QueryErrorFallback(error, resetErrorBoundary) {
115
+ return /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center p-6", children: /* @__PURE__ */ jsxs("div", { className: "text-center max-w-md", children: [
116
+ /* @__PURE__ */ jsx("div", { className: "mb-4", children: /* @__PURE__ */ jsx("div", { className: "w-12 h-12 mx-auto mb-3 bg-orange-100 rounded-full flex items-center justify-center", children: /* @__PURE__ */ jsx("svg", { className: "w-6 h-6 text-orange-600", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" }) }) }) }),
117
+ /* @__PURE__ */ jsx("h3", { className: "text-lg font-semibold text-foreground mb-2", children: "\u67E5\u8BE2\u5931\u8D25" }),
118
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground mb-4", children: error.message || "\u6570\u636E\u52A0\u8F7D\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5" }),
119
+ /* @__PURE__ */ jsxs("div", { className: "space-x-2", children: [
120
+ /* @__PURE__ */ jsx("button", { onClick: resetErrorBoundary, className: "px-4 py-2 bg-primary text-primary-foreground rounded-md", children: "\u91CD\u65B0\u52A0\u8F7D" }),
121
+ /* @__PURE__ */ jsx("button", { onClick: () => window.location.reload(), className: "px-4 py-2 bg-muted text-foreground rounded-md", children: "\u5237\u65B0\u9875\u9762" })
122
+ ] })
123
+ ] }) });
124
+ }
125
+ function SuspenseWrapper({ children, fallback = /* @__PURE__ */ jsx("div", { children: "Loading..." }), errorFallback, onError, resetKeys }) {
126
+ return /* @__PURE__ */ jsx(QueryErrorBoundary, { fallback: errorFallback, onError, resetKeys, children: /* @__PURE__ */ jsx(Suspense, { fallback, children }) });
127
+ }
128
+ function QuerySuspenseWrapper({ children, fallback = /* @__PURE__ */ jsx("div", { children: "Loading query..." }), errorFallback, onError, resetKeys }) {
129
+ return /* @__PURE__ */ jsx(SuspenseWrapper, { fallback, errorFallback, onError, resetKeys, children });
130
+ }
131
+
132
+ export { CardSkeletonFallback, DefaultLoadingFallback, FullScreenLoading, ListSkeletonFallback, PageSkeletonFallback, QueryErrorBoundary, QuerySuspenseWrapper, SmallLoadingIndicator, SuspenseWrapper, TextSkeletonFallback };
133
+ //# sourceMappingURL=chunk-AXMWOGNX.js.map
134
+ //# sourceMappingURL=chunk-AXMWOGNX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/LoadingFallback.tsx","../src/components/internal/ErrorBoundary.tsx","../src/components/QueryErrorBoundary.tsx","../src/components/SuspenseWrapper.tsx"],"names":["jsx","jsxs"],"mappings":"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","file":"chunk-AXMWOGNX.js","sourcesContent":["export function DefaultLoadingFallback() {\n return (\n <div className=\"flex items-center justify-center p-6\">\n <div className=\"text-center\">\n <div className=\"w-12 h-12 mx-auto mb-3 border-4 border-primary/20 border-t-primary rounded-full animate-spin\" />\n <p className=\"text-sm text-muted-foreground\">加载中...</p>\n </div>\n </div>\n );\n}\nexport function TextSkeletonFallback({ lines = 3 }: { lines?: number }) {\n return (\n <div className=\"space-y-3 p-4\">\n {Array.from({ length: lines }).map((_, i) => (\n <div key={i} className=\"animate-pulse\">\n <div className=\"h-4 bg-input rounded w-3/4 mb-2\" />\n <div className=\"h-4 bg-input rounded w-1/2\" />\n </div>\n ))}\n </div>\n );\n}\nexport function CardSkeletonFallback() {\n return (\n <div className=\"border border-border rounded-lg p-4 animate-pulse bg-card\">\n <div className=\"h-6 bg-input rounded w-1/2 mb-4\" />\n <div className=\"space-y-2\">\n <div className=\"h-4 bg-input rounded\" />\n <div className=\"h-4 bg-input rounded w-5/6\" />\n <div className=\"h-4 bg-input rounded w-4/6\" />\n </div>\n </div>\n );\n}\nexport function ListSkeletonFallback({ items = 3 }: { items?: number }) {\n return (\n <div className=\"space-y-4 p-4\">\n {Array.from({ length: items }).map((_, i) => (\n <div key={i} className=\"flex items-center space-x-4 animate-pulse\">\n <div className=\"w-12 h-12 bg-input rounded-full shrink-0\" />\n <div className=\"flex-1 space-y-2\">\n <div className=\"h-4 bg-input rounded w-3/4\" />\n <div className=\"h-3 bg-input rounded w-1/2\" />\n </div>\n </div>\n ))}\n </div>\n );\n}\nexport function PageSkeletonFallback() {\n return (\n <div className=\"w-full p-6 space-y-6\">\n <div className=\"animate-pulse\">\n <div className=\"h-8 bg-input rounded w-1/3 mb-2\" />\n <div className=\"h-4 bg-input rounded w-1/2\" />\n </div>\n <div className=\"grid grid-cols-1 md:grid-cols-3 gap-6\">\n <div className=\"md:col-span-2 space-y-4\">\n <CardSkeletonFallback />\n <CardSkeletonFallback />\n </div>\n <div className=\"space-y-4\">\n <div className=\"border border-border rounded-lg p-4 animate-pulse bg-card\">\n <div className=\"h-4 bg-input rounded w-2/3 mb-3\" />\n <div className=\"space-y-2\">\n <div className=\"h-3 bg-input rounded\" />\n <div className=\"h-3 bg-input rounded w-5/6\" />\n <div className=\"h-3 bg-input rounded w-4/6\" />\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n}\nexport function SmallLoadingIndicator({ size = \"md\" }: { size?: \"sm\" | \"md\" | \"lg\" }) {\n const sizeClasses = {\n sm: \"w-4 h-4 border-2\",\n md: \"w-6 h-6 border-2\",\n lg: \"w-8 h-8 border-3\"\n } as const;\n return <div className={`${sizeClasses[size]} border-primary/20 border-t-primary rounded-full animate-spin`} />;\n}\nexport function FullScreenLoading({ message = \"加载中...\" }: { message?: string }) {\n return (\n <div className=\"fixed inset-0 bg-background/90 flex items-center justify-center z-50\">\n <div className=\"text-center\">\n <div className=\"w-16 h-16 mx-auto mb-4 border-4 border-primary/20 border-t-primary rounded-full animate-spin\" />\n <p className=\"text-lg text-foreground\">{message}</p>\n </div>\n </div>\n );\n}","import type { ReactNode } from \"react\";\nimport { Component } from \"react\";\n\nexport interface ErrorBoundaryProps {\n children: ReactNode;\n fallback?: (error: Error, resetErrorBoundary: () => void) => ReactNode;\n onError?: (error: Error, errorInfo: { componentStack: string }) => void;\n onReset?: () => void;\n resetKeys?: Array<string | number>;\n}\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n error?: Error;\n}\n\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n constructor(props: ErrorBoundaryProps) {\n super(props);\n this.state = { hasError: false };\n }\n static getDerivedStateFromError(error: Error): ErrorBoundaryState {\n return { hasError: true, error };\n }\n componentDidCatch(error: Error, errorInfo: { componentStack: string }) {\n this.props.onError?.(error, errorInfo);\n }\n componentDidUpdate(prevProps: ErrorBoundaryProps) {\n if (this.state.hasError && this.props.resetKeys && prevProps.resetKeys) {\n const hasResetKeyChanged = this.props.resetKeys.length !== prevProps.resetKeys.length ||\n this.props.resetKeys.some((key, index) => key !== prevProps.resetKeys?.[index]);\n if (hasResetKeyChanged) {\n this.resetErrorBoundary();\n }\n }\n }\n resetErrorBoundary = () => {\n this.props.onReset?.();\n this.setState({ hasError: false, error: undefined });\n };\n render() {\n const { hasError, error } = this.state;\n const { children, fallback } = this.props;\n if (hasError && error) {\n if (fallback) return fallback(error, this.resetErrorBoundary);\n return (\n <div className=\"flex items-center justify-center p-6\">\n <div className=\"text-center max-w-md\">\n <h3 className=\"text-lg font-semibold text-foreground mb-2\">发生错误</h3>\n <p className=\"text-sm text-muted-foreground mb-4\">{error.message || \"请稍后重试\"}</p>\n <button onClick={this.resetErrorBoundary} className=\"px-4 py-2 bg-primary text-primary-foreground rounded-md\">\n 重试\n </button>\n </div>\n </div>\n );\n }\n return children;\n }\n}","import type { ReactNode } from \"react\";\nimport { QueryErrorResetBoundary } from \"@tanstack/react-query\";\nimport { ErrorBoundary } from \"./internal/ErrorBoundary.js\";\n\nexport interface QueryErrorBoundaryProps {\n children: ReactNode;\n fallback?: (error: Error, resetErrorBoundary: () => void) => ReactNode;\n onError?: (error: Error, errorInfo: { componentStack: string }) => void;\n resetKeys?: Array<string | number>;\n}\n\nexport function QueryErrorBoundary({ children, fallback, onError, resetKeys, ...props }: QueryErrorBoundaryProps) {\n return (\n <QueryErrorResetBoundary>\n {({ reset }) => (\n <ErrorBoundary fallback={fallback || QueryErrorFallback} onError={onError} onReset={reset} resetKeys={resetKeys} {...props}>\n {children}\n </ErrorBoundary>\n )}\n </QueryErrorResetBoundary>\n );\n}\n\nexport function QueryErrorFallback(error: Error, resetErrorBoundary: () => void) {\n return (\n <div className=\"flex items-center justify-center p-6\">\n <div className=\"text-center max-w-md\">\n <div className=\"mb-4\">\n <div className=\"w-12 h-12 mx-auto mb-3 bg-orange-100 rounded-full flex items-center justify-center\">\n <svg className=\"w-6 h-6 text-orange-600\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n </div>\n </div>\n <h3 className=\"text-lg font-semibold text-foreground mb-2\">查询失败</h3>\n <p className=\"text-sm text-muted-foreground mb-4\">{error.message || \"数据加载失败,请稍后重试\"}</p>\n <div className=\"space-x-2\">\n <button onClick={resetErrorBoundary} className=\"px-4 py-2 bg-primary text-primary-foreground rounded-md\">\n 重新加载\n </button>\n <button onClick={() => window.location.reload()} className=\"px-4 py-2 bg-muted text-foreground rounded-md\">\n 刷新页面\n </button>\n </div>\n </div>\n </div>\n );\n}","import type { ReactNode } from \"react\";\nimport { Suspense } from \"react\";\nimport { QueryErrorBoundary } from \"./QueryErrorBoundary.js\";\n\ninterface SuspenseWrapperProps {\n children: ReactNode;\n fallback?: ReactNode;\n errorFallback?: (error: Error, resetErrorBoundary: () => void) => ReactNode;\n onError?: (error: Error, errorInfo: { componentStack: string }) => void;\n resetKeys?: Array<string | number>;\n}\n\nexport function SuspenseWrapper({ children, fallback = <div>Loading...</div>, errorFallback, onError, resetKeys }: SuspenseWrapperProps) {\n return (\n <QueryErrorBoundary fallback={errorFallback} onError={onError} resetKeys={resetKeys}>\n <Suspense fallback={fallback}>{children}</Suspense>\n </QueryErrorBoundary>\n );\n}\n\nexport function QuerySuspenseWrapper({ children, fallback = <div>Loading query...</div>, errorFallback, onError, resetKeys }: SuspenseWrapperProps) {\n return (\n <SuspenseWrapper fallback={fallback} errorFallback={errorFallback} onError={onError} resetKeys={resetKeys}>\n {children}\n </SuspenseWrapper>\n );\n}\n\nexport type { SuspenseWrapperProps };"]}