@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/core/config.ts"],"names":["isProd"],"mappings":"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","file":"chunk-6MAYHLTE.cjs","sourcesContent":["import type { DefaultOptions } from \"@tanstack/react-query\";\nimport { isProd } from \"./env.js\";\n\nexport const TIME_CONSTANTS = {\n THIRTY_SECONDS: 30 * 1000,\n ONE_MINUTE: 60 * 1000,\n FIVE_MINUTES: 5 * 60 * 1000,\n TEN_MINUTES: 10 * 60 * 1000,\n FIFTEEN_MINUTES: 15 * 60 * 1000,\n THIRTY_MINUTES: 30 * 60 * 1000,\n ONE_HOUR: 60 * 60 * 1000,\n ONE_DAY: 24 * 60 * 60 * 1000\n} as const;\n\nexport const DEFAULT_STALE_TIME = TIME_CONSTANTS.THIRTY_SECONDS;\nexport const DEFAULT_GC_TIME = TIME_CONSTANTS.TEN_MINUTES;\n\ninterface HttpError {\n status?: number;\n statusCode?: number;\n message?: string;\n response?: {\n status?: number;\n statusCode?: number;\n };\n}\n\n/**\n * 从错误对象中提取 HTTP 状态码\n * 兼容多种错误对象结构:axios、fetch、自定义等\n */\nfunction extractHttpStatus(error: unknown): number | undefined {\n if (!error || typeof error !== \"object\") return undefined;\n \n const err = error as HttpError;\n \n // 直接在错误对象上的 status\n if (typeof err.status === \"number\") return err.status;\n if (typeof err.statusCode === \"number\") return err.statusCode;\n \n // 在 response 对象中的 status (axios 等)\n if (err.response) {\n if (typeof err.response.status === \"number\") return err.response.status;\n if (typeof err.response.statusCode === \"number\") return err.response.statusCode;\n }\n \n return undefined;\n}\n\n/**\n * 默认 Query 重试策略\n * - 4XX 客户端错误:不重试(客户端问题,重试无意义)\n * - 5XX 服务端错误:最多重试 1 次(避免过度重试)\n * - 其他错误(网络等):最多重试 2 次\n */\nexport function defaultQueryRetryStrategy(failureCount: number, error: unknown): boolean {\n const status = extractHttpStatus(error);\n \n // 4XX 客户端错误:不重试\n if (status && status >= 400 && status < 500) {\n return false;\n }\n \n // 5XX 服务端错误:最多重试 1 次\n if (status && status >= 500 && status < 600) {\n return failureCount < 1;\n }\n \n // 其他错误(网络错误等):最多重试 2 次\n return failureCount < 2;\n}\n\n/**\n * 默认 Mutation 重试策略\n * - 4XX 客户端错误:不重试\n * - 5XX 服务端错误:不重试(Mutation 更谨慎,避免重复操作)\n * - 其他错误:最多重试 1 次\n */\nexport function defaultMutationRetryStrategy(failureCount: number, error: unknown): boolean {\n const status = extractHttpStatus(error);\n \n // 4XX 客户端错误:不重试\n if (status && status >= 400 && status < 500) {\n return false;\n }\n \n // 5XX 服务端错误:不重试(Mutation 避免重复操作)\n if (status && status >= 500 && status < 600) {\n return false;\n }\n \n // 其他错误(网络错误等):最多重试 1 次\n return failureCount < 1;\n}\n\nexport function exponentialBackoff(attemptIndex: number): number {\n return Math.min(1000 * 2 ** attemptIndex, 30000);\n}\n\nexport const DEFAULT_QUERY_CONFIG: NonNullable<DefaultOptions[\"queries\"]> = {\n staleTime: DEFAULT_STALE_TIME,\n gcTime: DEFAULT_GC_TIME,\n retry: defaultQueryRetryStrategy,\n retryDelay: exponentialBackoff,\n refetchOnWindowFocus: true,\n refetchOnReconnect: true,\n refetchOnMount: true\n};\n\nexport const DEFAULT_MUTATION_CONFIG: NonNullable<DefaultOptions[\"mutations\"]> = {\n retry: 0,\n retryDelay: exponentialBackoff,\n gcTime: DEFAULT_GC_TIME\n};\n\nexport const GLOBAL_QUERY_CONFIG: DefaultOptions = {\n queries: DEFAULT_QUERY_CONFIG,\n mutations: DEFAULT_MUTATION_CONFIG\n};\n\nexport const SMART_RETRY_MUTATION_CONFIG: DefaultOptions[\"mutations\"] = {\n retry: defaultMutationRetryStrategy,\n retryDelay: exponentialBackoff,\n gcTime: DEFAULT_GC_TIME\n};\n\nexport const DEVELOPMENT_CONFIG: DefaultOptions = {\n queries: {\n ...DEFAULT_QUERY_CONFIG,\n staleTime: 0,\n gcTime: TIME_CONSTANTS.TEN_MINUTES,\n retry: defaultQueryRetryStrategy,\n refetchOnWindowFocus: true\n },\n mutations: {\n ...DEFAULT_MUTATION_CONFIG,\n retry: 0\n }\n};\n\nexport const PRODUCTION_CONFIG: DefaultOptions = {\n queries: {\n ...DEFAULT_QUERY_CONFIG,\n staleTime: TIME_CONSTANTS.TEN_MINUTES,\n gcTime: TIME_CONSTANTS.THIRTY_MINUTES,\n retry: defaultQueryRetryStrategy,\n refetchOnWindowFocus: true\n },\n mutations: {\n ...DEFAULT_MUTATION_CONFIG,\n retry: 0\n }\n};\n\nexport const LONG_CACHE_CONFIG: DefaultOptions = {\n queries: {\n ...DEFAULT_QUERY_CONFIG,\n staleTime: TIME_CONSTANTS.FIFTEEN_MINUTES,\n gcTime: TIME_CONSTANTS.ONE_HOUR,\n retry: defaultQueryRetryStrategy,\n refetchOnWindowFocus: true,\n refetchOnReconnect: true\n },\n mutations: {\n ...DEFAULT_MUTATION_CONFIG,\n retry: 0\n }\n};\n\nexport const REALTIME_CONFIG: DefaultOptions = {\n queries: {\n ...DEFAULT_QUERY_CONFIG,\n staleTime: 0,\n gcTime: TIME_CONSTANTS.ONE_MINUTE * 2,\n retry: defaultQueryRetryStrategy,\n refetchOnWindowFocus: true,\n refetchOnReconnect: true,\n refetchInterval: TIME_CONSTANTS.THIRTY_SECONDS\n },\n mutations: DEFAULT_MUTATION_CONFIG\n};\n\nexport function getConfigByEnvironment(\n env: \"development\" | \"production\" | \"test\" | \"realtime\" | \"longCache\"\n): DefaultOptions {\n switch (env) {\n case \"development\":\n return DEVELOPMENT_CONFIG;\n case \"production\":\n return PRODUCTION_CONFIG;\n case \"realtime\":\n return REALTIME_CONFIG;\n case \"longCache\":\n return LONG_CACHE_CONFIG;\n case \"test\":\n return {\n queries: {\n ...DEFAULT_QUERY_CONFIG,\n retry: 0,\n staleTime: 0,\n refetchOnWindowFocus: false,\n refetchOnReconnect: false,\n refetchOnMount: true\n },\n mutations: {\n ...DEFAULT_MUTATION_CONFIG,\n retry: 0\n }\n };\n default:\n return GLOBAL_QUERY_CONFIG;\n }\n}\n\nexport function createCustomConfig(overrides: Partial<DefaultOptions>): DefaultOptions {\n return {\n queries: {\n ...DEFAULT_QUERY_CONFIG,\n ...overrides.queries\n },\n mutations: {\n ...DEFAULT_MUTATION_CONFIG,\n ...overrides.mutations\n }\n };\n}\n\nexport function validateGcTime(staleTime: number, gcTime: number): { isValid: boolean; warning?: string } {\n if (gcTime <= staleTime) {\n return {\n isValid: false,\n warning: `gcTime (${gcTime}ms) 必须大于 staleTime (${staleTime}ms)。当前 gcTime 过小,可能导致缓存数据过早被清理。`\n };\n }\n return { isValid: true };\n}\n\nexport function validateConfig(config: DefaultOptions): { isValid: boolean; warnings: string[] } {\n const warnings: string[] = [];\n let isValid = true;\n if (config.queries) {\n const staleTime = typeof config.queries.staleTime === \"number\" ? config.queries.staleTime : DEFAULT_STALE_TIME;\n const gcTime = typeof config.queries.gcTime === \"number\" ? config.queries.gcTime : DEFAULT_GC_TIME;\n const gcTimeValidation = validateGcTime(staleTime, gcTime);\n if (!gcTimeValidation.isValid && gcTimeValidation.warning) {\n warnings.push(gcTimeValidation.warning);\n isValid = false;\n } else if (gcTimeValidation.warning) {\n warnings.push(gcTimeValidation.warning);\n }\n if (\"cacheTime\" in config.queries) {\n warnings.push(\"检测到已废弃的 'cacheTime' 属性。在 React Query v5 中,请使用 'gcTime' 代替。\");\n isValid = false;\n }\n if (config.queries.refetchOnWindowFocus === false) {\n warnings.push(\"建议启用 'refetchOnWindowFocus' 以提供更好的用户体验。当用户切换回应用时,数据会自动刷新。\");\n }\n if (typeof config.queries.retryDelay === \"number\") {\n warnings.push(\n \"建议使用指数退避策略作为重试延迟,而不是固定延迟。例如:(attemptIndex) => Math.min(1000 * 2 ** attemptIndex, 30000)\"\n );\n }\n }\n return { isValid, warnings };\n}\n\nexport function ensureBestPractices(config: DefaultOptions): DefaultOptions {\n const result: DefaultOptions = { ...config };\n if (result.queries) {\n const queries = { ...result.queries };\n \n // Handle deprecated cacheTime -> gcTime mapping\n if (\"cacheTime\" in queries) {\n const cacheTime = (queries as any).cacheTime;\n if (typeof cacheTime === \"number\" && queries.gcTime === undefined) {\n queries.gcTime = cacheTime;\n }\n delete (queries as any).cacheTime;\n if (!isProd) {\n console.warn(\"[TanStack Query Config] 已移除废弃的 'cacheTime' 属性,改用 'gcTime'.\");\n }\n }\n\n const staleTime = typeof queries.staleTime === \"number\" ? queries.staleTime : DEFAULT_STALE_TIME;\n const gcTime = typeof queries.gcTime === \"number\" ? queries.gcTime : DEFAULT_GC_TIME;\n const validation = validateGcTime(staleTime, gcTime);\n \n if (!validation.isValid) {\n queries.gcTime = staleTime + TIME_CONSTANTS.ONE_MINUTE;\n if (!isProd) {\n console.warn(\n `[TanStack Query Config] 自动调整 gcTime 从 ${gcTime}ms 到 ${queries.gcTime}ms,以确保大于 staleTime (${staleTime}ms)。`\n );\n }\n }\n \n if (queries.retryDelay === undefined) {\n queries.retryDelay = exponentialBackoff;\n }\n \n if (queries.refetchOnWindowFocus === undefined) {\n queries.refetchOnWindowFocus = true;\n }\n \n result.queries = queries;\n }\n return result;\n}\n\n/**\n * 创建安全的重试策略\n * @param maxRetries4xx - 4XX 错误最大重试次数(默认 0,不重试)\n * @param maxRetries5xx - 5XX 错误最大重试次数(默认 0,不重试)\n * @param maxRetriesOther - 其他错误最大重试次数(默认 1)\n */\nexport function createSafeRetryStrategy(\n maxRetries4xx: number = 0,\n maxRetries5xx: number = 0,\n maxRetriesOther: number = 1\n) {\n return (failureCount: number, error: unknown): boolean => {\n const status = extractHttpStatus(error);\n \n // 4XX 客户端错误\n if (status && status >= 400 && status < 500) {\n return failureCount < maxRetries4xx;\n }\n \n // 5XX 服务端错误\n if (status && status >= 500 && status < 600) {\n return failureCount < maxRetries5xx;\n }\n \n // 其他错误(网络等)\n return failureCount < maxRetriesOther;\n };\n}\n\n/**\n * 创建错误安全配置\n * 适用于需要严格控制重试和 refetch 行为的场景\n * \n * @example\n * ```typescript\n * // 完全禁用重试\n * const config = createErrorSafeConfig({\n * maxRetries4xx: 0,\n * maxRetries5xx: 0,\n * maxRetriesOther: 0,\n * disableFocus: true,\n * disableReconnect: true\n * });\n * ```\n */\nexport function createErrorSafeConfig(options: {\n maxRetries4xx?: number;\n maxRetries5xx?: number;\n maxRetriesOther?: number;\n disableFocus?: boolean;\n disableReconnect?: boolean;\n conditionalRefetchInterval?: number | ((query: any) => number | false) | ((data: unknown, query: any) => number | false);\n overrides?: Partial<DefaultOptions>;\n} = {}): DefaultOptions {\n const {\n maxRetries4xx = 0,\n maxRetries5xx = 0,\n maxRetriesOther = 1,\n disableFocus = false,\n disableReconnect = false,\n conditionalRefetchInterval,\n overrides\n } = options;\n \n const queries: DefaultOptions[\"queries\"] = {\n ...DEFAULT_QUERY_CONFIG,\n retry: createSafeRetryStrategy(maxRetries4xx, maxRetries5xx, maxRetriesOther),\n retryDelay: exponentialBackoff,\n refetchOnWindowFocus: disableFocus ? false : true,\n refetchOnReconnect: disableReconnect ? false : true\n };\n \n if (conditionalRefetchInterval !== undefined) {\n if (typeof conditionalRefetchInterval === \"number\") {\n (queries as any).refetchInterval = (query: any) => (query?.state?.error ? false : conditionalRefetchInterval);\n } else {\n const fn = conditionalRefetchInterval;\n (queries as any).refetchInterval = (query: any) => (fn.length >= 2 ? (fn as any)(query?.state?.data, query) : (fn as any)(query));\n }\n }\n \n const mutations: DefaultOptions[\"mutations\"] = { \n ...DEFAULT_MUTATION_CONFIG,\n retry: createSafeRetryStrategy(maxRetries4xx, maxRetries5xx, maxRetriesOther)\n };\n \n const result: DefaultOptions = {\n queries: { ...(queries as any), ...(overrides?.queries as any || {}) },\n mutations: { ...(mutations as any), ...(overrides?.mutations as any || {}) }\n };\n \n return result;\n}\n"]}
@@ -0,0 +1,144 @@
1
+ import { DEFAULT_QUERY_CONFIG, DEFAULT_GC_TIME, DEFAULT_STALE_TIME } from './chunk-EXITP7QO.js';
2
+ import { queryOptions } from '@tanstack/react-query';
3
+
4
+ // src/core/keys.ts
5
+ var queryKeys = {
6
+ all: ["tanstack-query"],
7
+ users: () => [...queryKeys.all, "users"],
8
+ user: (id) => [...queryKeys.users(), id],
9
+ userProfile: (id) => [...queryKeys.user(id), "profile"],
10
+ userSettings: (id) => [...queryKeys.user(id), "settings"],
11
+ usersByRole: (role) => [...queryKeys.users(), "by-role", role],
12
+ posts: () => [...queryKeys.all, "posts"],
13
+ post: (id) => [...queryKeys.posts(), id],
14
+ postsByUser: (userId) => [...queryKeys.posts(), "by-user", userId],
15
+ postsByTag: (tag) => [...queryKeys.posts(), "by-tag", tag],
16
+ postComments: (postId) => [...queryKeys.post(postId), "comments"],
17
+ search: (query, type) => [...queryKeys.all, "search", { query, type }],
18
+ notifications: () => [...queryKeys.all, "notifications"],
19
+ notification: (id) => [...queryKeys.notifications(), id],
20
+ unreadNotifications: () => [...queryKeys.notifications(), "unread"],
21
+ settings: () => [...queryKeys.all, "settings"],
22
+ appSettings: () => [...queryKeys.settings(), "app"],
23
+ userPreferences: (userId) => [...queryKeys.settings(), "preferences", userId]
24
+ };
25
+ function createFilteredKey(baseKey, filters) {
26
+ return [...baseKey, "filtered", filters];
27
+ }
28
+ function createPaginatedKey(baseKey, page, pageSize) {
29
+ return [...baseKey, "paginated", { page, pageSize }];
30
+ }
31
+ function createSortedKey(baseKey, sortBy, sortOrder = "asc") {
32
+ return [...baseKey, "sorted", { sortBy, sortOrder }];
33
+ }
34
+ function createSearchKey(baseKey, searchTerm, searchFields) {
35
+ return [...baseKey, "search", { term: searchTerm, fields: searchFields }];
36
+ }
37
+ function createComplexKey(baseKey, options) {
38
+ const params = {};
39
+ if (options.page !== void 0 && options.pageSize !== void 0) {
40
+ params.page = options.page;
41
+ params.pageSize = options.pageSize;
42
+ }
43
+ if (options.filters && Object.keys(options.filters).length > 0) {
44
+ params.filters = options.filters;
45
+ }
46
+ if (options.sortBy) {
47
+ params.sortBy = options.sortBy;
48
+ params.sortOrder = options.sortOrder || "asc";
49
+ }
50
+ if (options.search) {
51
+ params.search = options.search;
52
+ }
53
+ return [...baseKey, "complex", params];
54
+ }
55
+ function matchesKeyPattern(queryKey, pattern) {
56
+ if (pattern.length > queryKey.length) return false;
57
+ return pattern.every((patternPart, index) => {
58
+ const keyPart = queryKey[index];
59
+ if (typeof patternPart === "object" && typeof keyPart === "object") {
60
+ return JSON.stringify(patternPart) === JSON.stringify(keyPart);
61
+ }
62
+ return patternPart === keyPart;
63
+ });
64
+ }
65
+ function validateQueryKey(queryKey) {
66
+ if (!Array.isArray(queryKey) || queryKey.length === 0) return false;
67
+ return queryKey.every(
68
+ (part) => part !== null && part !== void 0 && (typeof part === "string" || typeof part === "number" || typeof part === "boolean" || typeof part === "object" && part !== null)
69
+ );
70
+ }
71
+ function containsEntity(queryKey, entity) {
72
+ return queryKey.includes(entity);
73
+ }
74
+ function extractEntityId(queryKey, entityIndex) {
75
+ const value = queryKey[entityIndex];
76
+ return typeof value === "string" ? value : void 0;
77
+ }
78
+ function normalizeQueryKey(queryKey) {
79
+ return queryKey.filter((part) => part !== null && part !== void 0);
80
+ }
81
+ function areKeysEqual(key1, key2) {
82
+ if (key1.length !== key2.length) return false;
83
+ return key1.every((part, index) => {
84
+ const otherPart = key2[index];
85
+ if (typeof part === "object" && typeof otherPart === "object") {
86
+ return JSON.stringify(part) === JSON.stringify(otherPart);
87
+ }
88
+ return part === otherPart;
89
+ });
90
+ }
91
+ function createDomainKeyFactory(domain) {
92
+ return {
93
+ all: () => [...queryKeys.all, domain],
94
+ lists: () => [...queryKeys.all, domain, "list"],
95
+ list: (params) => params ? [...queryKeys.all, domain, "list", params] : [...queryKeys.all, domain, "list"],
96
+ details: () => [...queryKeys.all, domain, "detail"],
97
+ detail: (id) => [...queryKeys.all, domain, "detail", id],
98
+ subResource: (id, resource) => [...queryKeys.all, domain, "detail", id, resource],
99
+ byRelation: (relation, relationId) => [...queryKeys.all, domain, `by-${relation}`, relationId]
100
+ };
101
+ }
102
+ function createMutationKeyFactory(domain) {
103
+ return {
104
+ create: () => [domain, "create"],
105
+ update: (id) => id ? [domain, "update", id] : [domain, "update"],
106
+ delete: (id) => id ? [domain, "delete", id] : [domain, "delete"],
107
+ batch: (operation) => [domain, "batch", operation],
108
+ custom: (operation, id) => id ? [domain, operation, id] : [domain, operation]
109
+ };
110
+ }
111
+ function createAppQueryOptions(config) {
112
+ return queryOptions({
113
+ ...DEFAULT_QUERY_CONFIG,
114
+ queryKey: config.queryKey,
115
+ queryFn: config.queryFn,
116
+ staleTime: config.staleTime ?? DEFAULT_QUERY_CONFIG.staleTime ?? DEFAULT_STALE_TIME,
117
+ gcTime: config.gcTime ?? DEFAULT_QUERY_CONFIG.gcTime ?? DEFAULT_GC_TIME,
118
+ enabled: config.enabled
119
+ });
120
+ }
121
+ function createAppQueryOptionsWithSelect(config) {
122
+ return queryOptions({
123
+ ...DEFAULT_QUERY_CONFIG,
124
+ queryKey: config.queryKey,
125
+ queryFn: config.queryFn,
126
+ select: config.select,
127
+ staleTime: config.staleTime ?? DEFAULT_QUERY_CONFIG.staleTime ?? DEFAULT_STALE_TIME,
128
+ gcTime: config.gcTime ?? DEFAULT_QUERY_CONFIG.gcTime ?? DEFAULT_GC_TIME
129
+ });
130
+ }
131
+ function createListQueryOptions(config) {
132
+ return queryOptions({
133
+ ...DEFAULT_QUERY_CONFIG,
134
+ queryKey: config.queryKey,
135
+ queryFn: config.queryFn,
136
+ staleTime: config.staleTime ?? 0,
137
+ gcTime: config.gcTime ?? DEFAULT_QUERY_CONFIG.gcTime ?? DEFAULT_GC_TIME,
138
+ enabled: config.enabled
139
+ });
140
+ }
141
+
142
+ export { areKeysEqual, containsEntity, createAppQueryOptions, createAppQueryOptionsWithSelect, createComplexKey, createDomainKeyFactory, createFilteredKey, createListQueryOptions, createMutationKeyFactory, createPaginatedKey, createSearchKey, createSortedKey, extractEntityId, matchesKeyPattern, normalizeQueryKey, queryKeys, validateQueryKey };
143
+ //# sourceMappingURL=chunk-ADS2QTMP.js.map
144
+ //# sourceMappingURL=chunk-ADS2QTMP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/keys.ts","../src/core/queryOptions.ts"],"names":[],"mappings":"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","file":"chunk-ADS2QTMP.js","sourcesContent":["import type { QueryKey } from \"@tanstack/react-query\";\n\nexport const queryKeys = {\n all: [\"tanstack-query\"] as const,\n users: () => [...queryKeys.all, \"users\"] as const,\n user: (id: string) => [...queryKeys.users(), id] as const,\n userProfile: (id: string) => [...queryKeys.user(id), \"profile\"] as const,\n userSettings: (id: string) => [...queryKeys.user(id), \"settings\"] as const,\n usersByRole: (role: string) => [...queryKeys.users(), \"by-role\", role] as const,\n posts: () => [...queryKeys.all, \"posts\"] as const,\n post: (id: string) => [...queryKeys.posts(), id] as const,\n postsByUser: (userId: string) => [...queryKeys.posts(), \"by-user\", userId] as const,\n postsByTag: (tag: string) => [...queryKeys.posts(), \"by-tag\", tag] as const,\n postComments: (postId: string) => [...queryKeys.post(postId), \"comments\"] as const,\n search: (query: string, type?: string) => [...queryKeys.all, \"search\", { query, type }] as const,\n notifications: () => [...queryKeys.all, \"notifications\"] as const,\n notification: (id: string) => [...queryKeys.notifications(), id] as const,\n unreadNotifications: () => [...queryKeys.notifications(), \"unread\"] as const,\n settings: () => [...queryKeys.all, \"settings\"] as const,\n appSettings: () => [...queryKeys.settings(), \"app\"] as const,\n userPreferences: (userId: string) => [...queryKeys.settings(), \"preferences\", userId] as const\n};\n\nexport function createFilteredKey(baseKey: QueryKey, filters: Record<string, unknown>): QueryKey {\n return [...baseKey, \"filtered\", filters];\n}\nexport function createPaginatedKey(baseKey: QueryKey, page: number, pageSize: number): QueryKey {\n return [...baseKey, \"paginated\", { page, pageSize }];\n}\nexport function createSortedKey(baseKey: QueryKey, sortBy: string, sortOrder: \"asc\" | \"desc\" = \"asc\"): QueryKey {\n return [...baseKey, \"sorted\", { sortBy, sortOrder }];\n}\nexport function createSearchKey(baseKey: QueryKey, searchTerm: string, searchFields?: string[]): QueryKey {\n return [...baseKey, \"search\", { term: searchTerm, fields: searchFields }];\n}\nexport function createComplexKey(\n baseKey: QueryKey,\n options: { page?: number; pageSize?: number; filters?: Record<string, unknown>; sortBy?: string; sortOrder?: \"asc\" | \"desc\"; search?: string }\n): QueryKey {\n const params: Record<string, unknown> = {};\n if (options.page !== undefined && options.pageSize !== undefined) {\n params.page = options.page;\n params.pageSize = options.pageSize;\n }\n if (options.filters && Object.keys(options.filters).length > 0) {\n params.filters = options.filters;\n }\n if (options.sortBy) {\n params.sortBy = options.sortBy;\n params.sortOrder = options.sortOrder || \"asc\";\n }\n if (options.search) {\n params.search = options.search;\n }\n return [...baseKey, \"complex\", params];\n}\nexport function matchesKeyPattern(queryKey: QueryKey, pattern: QueryKey): boolean {\n if (pattern.length > queryKey.length) return false;\n return pattern.every((patternPart, index) => {\n const keyPart = queryKey[index];\n if (typeof patternPart === \"object\" && typeof keyPart === \"object\") {\n return JSON.stringify(patternPart) === JSON.stringify(keyPart);\n }\n return patternPart === keyPart;\n });\n}\nexport function validateQueryKey(queryKey: QueryKey): boolean {\n if (!Array.isArray(queryKey) || queryKey.length === 0) return false;\n return queryKey.every(\n (part) => part !== null && part !== undefined && (typeof part === \"string\" || typeof part === \"number\" || typeof part === \"boolean\" || (typeof part === \"object\" && part !== null))\n );\n}\nexport function containsEntity(queryKey: QueryKey, entity: string): boolean {\n return queryKey.includes(entity);\n}\nexport function extractEntityId(queryKey: QueryKey, entityIndex: number): string | undefined {\n const value = queryKey[entityIndex];\n return typeof value === \"string\" ? value : undefined;\n}\nexport function normalizeQueryKey(queryKey: QueryKey): QueryKey {\n return queryKey.filter((part) => part !== null && part !== undefined);\n}\nexport function areKeysEqual(key1: QueryKey, key2: QueryKey): boolean {\n if (key1.length !== key2.length) return false;\n return key1.every((part, index) => {\n const otherPart = key2[index];\n if (typeof part === \"object\" && typeof otherPart === \"object\") {\n return JSON.stringify(part) === JSON.stringify(otherPart);\n }\n return part === otherPart;\n });\n}\nexport function createDomainKeyFactory(domain: string) {\n return {\n all: () => [...queryKeys.all, domain] as const,\n lists: () => [...queryKeys.all, domain, \"list\"] as const,\n list: (params?: Record<string, unknown>) => (params ? ([...queryKeys.all, domain, \"list\", params] as const) : ([...queryKeys.all, domain, \"list\"] as const)),\n details: () => [...queryKeys.all, domain, \"detail\"] as const,\n detail: (id: string | number) => [...queryKeys.all, domain, \"detail\", id] as const,\n subResource: (id: string | number, resource: string) => [...queryKeys.all, domain, \"detail\", id, resource] as const,\n byRelation: (relation: string, relationId: string | number) => [...queryKeys.all, domain, `by-${relation}`, relationId] as const\n };\n}\nexport function createMutationKeyFactory(domain: string) {\n return {\n create: () => [domain, \"create\"] as const,\n update: (id?: string | number) => (id ? ([domain, \"update\", id] as const) : ([domain, \"update\"] as const)),\n delete: (id?: string | number) => (id ? ([domain, \"delete\", id] as const) : ([domain, \"delete\"] as const)),\n batch: (operation: string) => [domain, \"batch\", operation] as const,\n custom: (operation: string, id?: string | number) => (id ? ([domain, operation, id] as const) : ([domain, operation] as const))\n };\n}","import type { DefaultError, QueryFunction, QueryKey, UseQueryOptions } from \"@tanstack/react-query\";\nimport { queryOptions } from \"@tanstack/react-query\";\nimport { DEFAULT_GC_TIME, DEFAULT_QUERY_CONFIG, DEFAULT_STALE_TIME } from \"./config.js\";\n\nexport interface BaseQueryConfig<TData> {\n queryKey: QueryKey;\n queryFn: QueryFunction<TData, QueryKey>;\n staleTime?: number;\n gcTime?: number;\n enabled?: boolean;\n}\n\nexport function createAppQueryOptions<TData>(config: BaseQueryConfig<TData>): UseQueryOptions<TData, DefaultError, TData, QueryKey> {\n return queryOptions<TData, DefaultError, TData, QueryKey>({\n ...(DEFAULT_QUERY_CONFIG as UseQueryOptions<TData, DefaultError, TData, QueryKey>),\n queryKey: config.queryKey,\n queryFn: config.queryFn,\n staleTime: config.staleTime ?? (DEFAULT_QUERY_CONFIG.staleTime as number) ?? DEFAULT_STALE_TIME,\n gcTime: config.gcTime ?? (DEFAULT_QUERY_CONFIG.gcTime as number) ?? DEFAULT_GC_TIME,\n enabled: config.enabled,\n });\n}\n\nexport interface SelectQueryConfig<TData, TSelected = TData> extends Omit<BaseQueryConfig<TData>, \"enabled\"> {\n select: (data: TData) => TSelected;\n}\n\nexport function createAppQueryOptionsWithSelect<TData, TSelected = TData>(config: SelectQueryConfig<TData, TSelected>): UseQueryOptions<TData, DefaultError, TSelected, QueryKey> {\n return queryOptions<TData, DefaultError, TSelected, QueryKey>({\n ...(DEFAULT_QUERY_CONFIG as UseQueryOptions<TData, DefaultError, TSelected, QueryKey>),\n queryKey: config.queryKey,\n queryFn: config.queryFn,\n select: config.select,\n staleTime: config.staleTime ?? (DEFAULT_QUERY_CONFIG.staleTime as number) ?? DEFAULT_STALE_TIME,\n gcTime: config.gcTime ?? (DEFAULT_QUERY_CONFIG.gcTime as number) ?? DEFAULT_GC_TIME,\n });\n}\n\nexport interface ListQueryConfig<TData> extends Omit<BaseQueryConfig<TData>, \"staleTime\" | \"gcTime\"> {\n staleTime?: number;\n gcTime?: number;\n}\n\nexport function createListQueryOptions<TData>(config: ListQueryConfig<TData>): UseQueryOptions<TData, DefaultError, TData, QueryKey> {\n return queryOptions<TData, DefaultError, TData, QueryKey>({\n ...(DEFAULT_QUERY_CONFIG as UseQueryOptions<TData, DefaultError, TData, QueryKey>),\n queryKey: config.queryKey,\n queryFn: config.queryFn,\n staleTime: config.staleTime ?? 0,\n gcTime: config.gcTime ?? (DEFAULT_QUERY_CONFIG.gcTime as number) ?? DEFAULT_GC_TIME,\n enabled: config.enabled,\n });\n}\n"]}
@@ -0,0 +1,374 @@
1
+ 'use strict';
2
+
3
+ // src/utils/queryKey.ts
4
+ function normalizeQueryParams(params, config = {}) {
5
+ const { required = [], defaults = {}, sortKeys = true, removeEmpty = true } = config;
6
+ if (!params) {
7
+ return { ...defaults };
8
+ }
9
+ const normalized = {};
10
+ required.forEach((key) => {
11
+ const value = params[key] ?? defaults[key];
12
+ if (value !== void 0) {
13
+ if (typeof value === "number" || typeof value === "string" && !Number.isNaN(Number(value))) {
14
+ normalized[String(key)] = Number(value);
15
+ } else {
16
+ normalized[String(key)] = value;
17
+ }
18
+ }
19
+ });
20
+ const optionalKeys = Object.keys(params).filter((key) => !required.includes(key));
21
+ if (sortKeys) {
22
+ optionalKeys.sort();
23
+ }
24
+ optionalKeys.forEach((key) => {
25
+ const value = params[key];
26
+ if (removeEmpty && (value === void 0 || value === null || value === "")) {
27
+ return;
28
+ }
29
+ if (typeof value === "string") {
30
+ const trimmed = value.trim();
31
+ if (trimmed || !removeEmpty) {
32
+ normalized[key] = trimmed;
33
+ }
34
+ } else if (value !== void 0 && value !== null) {
35
+ normalized[key] = value;
36
+ }
37
+ });
38
+ return normalized;
39
+ }
40
+ function createQueryKeyFactory(config) {
41
+ const { namespace, normalizeConfig } = config;
42
+ return {
43
+ all: () => [namespace],
44
+ lists: () => [namespace, "list"],
45
+ list: (params) => {
46
+ const normalized = normalizeQueryParams(params, normalizeConfig);
47
+ return [namespace, "list", normalized];
48
+ },
49
+ details: () => [namespace, "detail"],
50
+ detail: (id) => [namespace, "detail", id],
51
+ custom: (queryName, params) => {
52
+ if (params !== void 0) {
53
+ return [namespace, "custom", queryName, params];
54
+ }
55
+ return [namespace, "custom", queryName];
56
+ }
57
+ };
58
+ }
59
+ function createSimpleQueryKeyFactory(namespace) {
60
+ return createQueryKeyFactory({ namespace });
61
+ }
62
+ function isQueryKeyEqual(key1, key2) {
63
+ if (key1.length !== key2.length) return false;
64
+ return key1.every((value, index) => {
65
+ const other = key2[index];
66
+ if (typeof value !== "object" || value === null) {
67
+ return value === other;
68
+ }
69
+ if (typeof other !== "object" || other === null) {
70
+ return false;
71
+ }
72
+ const keys1 = Object.keys(value);
73
+ const keys2 = Object.keys(other);
74
+ if (keys1.length !== keys2.length) return false;
75
+ return keys1.every((key) => value[key] === other[key]);
76
+ });
77
+ }
78
+ function extractParamsFromKey(queryKey) {
79
+ const lastItem = queryKey[queryKey.length - 1];
80
+ if (typeof lastItem === "object" && lastItem !== null && !Array.isArray(lastItem)) {
81
+ return lastItem;
82
+ }
83
+ return void 0;
84
+ }
85
+ function startsWithKeyPrefix(key, prefix) {
86
+ const k = Array.isArray(key) ? key : [key];
87
+ const p = Array.isArray(prefix) ? prefix : [prefix];
88
+ if (p.length > k.length) return false;
89
+ for (let i = 0; i < p.length; i++) {
90
+ if (JSON.stringify(k[i]) !== JSON.stringify(p[i])) {
91
+ return false;
92
+ }
93
+ }
94
+ return true;
95
+ }
96
+ function deriveFamilyKey(queryKey) {
97
+ const arr = Array.isArray(queryKey) ? [...queryKey] : [queryKey];
98
+ while (arr.length > 1) {
99
+ const last = arr[arr.length - 1];
100
+ if (last && typeof last === "object" && !Array.isArray(last)) {
101
+ arr.pop();
102
+ continue;
103
+ }
104
+ if (typeof last === "string" && (last === "paginated" || last === "filtered" || last === "sorted" || last === "search" || last === "complex")) {
105
+ arr.pop();
106
+ continue;
107
+ }
108
+ break;
109
+ }
110
+ return arr;
111
+ }
112
+ function isListFamilyKey(queryKey) {
113
+ const parts = Array.isArray(queryKey) ? queryKey : [queryKey];
114
+ return parts.includes("list") || parts.includes("paginated");
115
+ }
116
+
117
+ // src/utils/network.ts
118
+ function hasConnectionAPI(nav) {
119
+ return "connection" in nav;
120
+ }
121
+ function isSlowNetwork() {
122
+ if (typeof navigator === "undefined") {
123
+ return false;
124
+ }
125
+ if (!hasConnectionAPI(navigator)) {
126
+ return false;
127
+ }
128
+ const connection = navigator.connection;
129
+ if (!connection) {
130
+ return false;
131
+ }
132
+ return connection.effectiveType === "slow-2g" || connection.effectiveType === "2g" || connection.saveData === true;
133
+ }
134
+ function getNetworkInfo() {
135
+ if (typeof navigator === "undefined") {
136
+ return null;
137
+ }
138
+ if (!hasConnectionAPI(navigator)) {
139
+ return null;
140
+ }
141
+ return navigator.connection || null;
142
+ }
143
+ function isFastNetwork() {
144
+ const networkInfo = getNetworkInfo();
145
+ if (!networkInfo) {
146
+ return true;
147
+ }
148
+ return networkInfo.effectiveType === "4g" && networkInfo.saveData !== true;
149
+ }
150
+ function getNetworkSpeed() {
151
+ const networkInfo = getNetworkInfo();
152
+ if (!networkInfo || !networkInfo.effectiveType) {
153
+ return "unknown";
154
+ }
155
+ switch (networkInfo.effectiveType) {
156
+ case "4g":
157
+ return "fast";
158
+ case "3g":
159
+ return "medium";
160
+ case "2g":
161
+ case "slow-2g":
162
+ return "slow";
163
+ default:
164
+ return "unknown";
165
+ }
166
+ }
167
+
168
+ // src/utils/dataGuard.ts
169
+ function simpleHash(str) {
170
+ let hash = 0;
171
+ for (let i = 0; i < str.length; i++) {
172
+ const char = str.charCodeAt(i);
173
+ hash = (hash << 5) - hash + char;
174
+ hash = hash | 0;
175
+ }
176
+ return Math.abs(hash).toString(36);
177
+ }
178
+ function sortObjectKeys(obj) {
179
+ if (obj === null || obj === void 0) return obj;
180
+ if (typeof obj !== "object") return obj;
181
+ if (Array.isArray(obj)) return obj.map(sortObjectKeys);
182
+ const sorted = {};
183
+ Object.keys(obj).sort().forEach((key) => {
184
+ sorted[key] = sortObjectKeys(obj[key]);
185
+ });
186
+ return sorted;
187
+ }
188
+ function hashObject(obj) {
189
+ try {
190
+ const sorted = sortObjectKeys(obj);
191
+ return simpleHash(JSON.stringify(sorted));
192
+ } catch {
193
+ return simpleHash(String(obj));
194
+ }
195
+ }
196
+ function applyDataGuard(newData, cached, queryKey, options = {}) {
197
+ const {
198
+ maxDataAge = 1e4,
199
+ enableVersionCheck = true,
200
+ enableTimestampCheck = true,
201
+ enableHashCheck = true
202
+ } = options;
203
+ if (!cached) {
204
+ return {
205
+ shouldReject: false,
206
+ reason: "No cached data",
207
+ strategy: "none",
208
+ guardDetails: {}
209
+ };
210
+ }
211
+ let shouldReject = false;
212
+ let reason = "";
213
+ let strategy = "none";
214
+ let guardDetails = {};
215
+ if (enableVersionCheck && cached.version !== void 0 && newData.version !== void 0) {
216
+ strategy = "version";
217
+ if (newData.version < cached.version) {
218
+ shouldReject = true;
219
+ reason = `\u7248\u672C\u53F7\u56DE\u9000\uFF1A\u7F13\u5B58\u7248\u672C ${cached.version} > \u65B0\u6570\u636E\u7248\u672C ${newData.version}`;
220
+ guardDetails = {
221
+ cachedVersion: cached.version,
222
+ newVersion: newData.version,
223
+ diff: cached.version - newData.version
224
+ };
225
+ } else if (newData.version === cached.version) {
226
+ guardDetails = {
227
+ version: newData.version,
228
+ status: "identical"
229
+ };
230
+ } else {
231
+ guardDetails = {
232
+ cachedVersion: cached.version,
233
+ newVersion: newData.version,
234
+ status: "updated"
235
+ };
236
+ }
237
+ } else if (enableTimestampCheck && cached.updatedAt && newData.updatedAt) {
238
+ strategy = "timestamp";
239
+ try {
240
+ const cachedTime = new Date(cached.updatedAt).getTime();
241
+ const newTime = new Date(newData.updatedAt).getTime();
242
+ const timeDiff = cachedTime - newTime;
243
+ const dataAge = Date.now() - newTime;
244
+ guardDetails = {
245
+ cachedTime: cached.updatedAt,
246
+ newTime: newData.updatedAt,
247
+ timeDiff,
248
+ dataAge
249
+ };
250
+ if (newTime < cachedTime) {
251
+ if (dataAge > maxDataAge) {
252
+ shouldReject = true;
253
+ reason = `\u65F6\u95F4\u6233\u8FC7\u671F\uFF1A\u65B0\u6570\u636E\u65F6\u95F4 ${newData.updatedAt} \u65E9\u4E8E\u7F13\u5B58 ${cached.updatedAt}\uFF0C\u4E14\u6570\u636E\u5E74\u9F84 ${dataAge}ms \u8D85\u8FC7\u9608\u503C ${maxDataAge}ms`;
254
+ } else {
255
+ guardDetails.warning = `\u65F6\u95F4\u6233\u7565\u65E7\u4F46\u5728\u53EF\u63A5\u53D7\u8303\u56F4\u5185\uFF08${dataAge}ms < ${maxDataAge}ms\uFF09`;
256
+ }
257
+ }
258
+ } catch (error) {
259
+ guardDetails.error = `\u65F6\u95F4\u6233\u89E3\u6790\u5931\u8D25: ${error}`;
260
+ }
261
+ } else if (enableHashCheck) {
262
+ strategy = "hash";
263
+ const newHash = hashObject(newData.items);
264
+ const cachedHash = cached._hash;
265
+ guardDetails = {
266
+ cachedHash,
267
+ newHash,
268
+ identical: cachedHash === newHash
269
+ };
270
+ if (cachedHash && cachedHash === newHash) {
271
+ shouldReject = true;
272
+ reason = "\u5185\u5BB9\u54C8\u5E0C\u76F8\u540C\uFF0C\u6570\u636E\u672A\u53D8\u5316";
273
+ } else if (cachedHash && cached._recentlyUpdatedIds && (Array.isArray(cached._recentlyUpdatedIds) ? cached._recentlyUpdatedIds.length > 0 : cached._recentlyUpdatedIds.size > 0)) {
274
+ let hasRevert = false;
275
+ for (const id of cached._recentlyUpdatedIds) {
276
+ const cachedItem = cached.items.find((item) => item.id === id);
277
+ const newItem = newData.items.find((item) => item.id === id);
278
+ if (cachedItem && newItem) {
279
+ const cachedItemHash = hashObject(cachedItem);
280
+ const newItemHash = hashObject(newItem);
281
+ if (cachedItemHash !== newItemHash) {
282
+ if (Object.keys(cachedItem).length > Object.keys(newItem).length) {
283
+ hasRevert = true;
284
+ guardDetails.revertedItem = { id, cachedItem, newItem };
285
+ break;
286
+ }
287
+ }
288
+ }
289
+ }
290
+ if (hasRevert) {
291
+ shouldReject = true;
292
+ reason = "\u68C0\u6D4B\u5230\u6700\u8FD1\u66F4\u65B0\u7684\u9879\u53EF\u80FD\u88AB\u56DE\u9000";
293
+ }
294
+ }
295
+ }
296
+ return {
297
+ shouldReject,
298
+ reason,
299
+ strategy,
300
+ guardDetails
301
+ };
302
+ }
303
+ function addHashToData(data) {
304
+ return {
305
+ ...data,
306
+ _hash: hashObject(data.items)
307
+ };
308
+ }
309
+ function markRecentlyUpdated(data, updatedId) {
310
+ const existing = data._recentlyUpdatedIds ? Array.isArray(data._recentlyUpdatedIds) ? [...data._recentlyUpdatedIds] : Array.from(data._recentlyUpdatedIds) : [];
311
+ if (!existing.includes(updatedId)) {
312
+ existing.push(updatedId);
313
+ }
314
+ return {
315
+ ...data,
316
+ _recentlyUpdatedIds: existing
317
+ };
318
+ }
319
+ function clearRecentlyUpdated(data, updatedId) {
320
+ if (!data._recentlyUpdatedIds) return data;
321
+ const existing = Array.isArray(data._recentlyUpdatedIds) ? data._recentlyUpdatedIds : Array.from(data._recentlyUpdatedIds);
322
+ const remaining = existing.filter((id) => id !== updatedId);
323
+ return {
324
+ ...data,
325
+ _recentlyUpdatedIds: remaining.length > 0 ? remaining : void 0
326
+ };
327
+ }
328
+ function updateFamilyMetadata(queryClient, familyKey, response) {
329
+ const cache = queryClient.getQueryCache();
330
+ const queries = cache.findAll({
331
+ predicate: (q) => startsWithKeyPrefix(q.queryKey, familyKey)
332
+ });
333
+ queries.forEach((q) => {
334
+ const old = queryClient.getQueryData(q.queryKey);
335
+ if (old) {
336
+ const updated = { ...old };
337
+ if (response.version !== void 0) {
338
+ updated.version = response.version;
339
+ } else if (old.version !== void 0) {
340
+ updated.version = old.version + 1;
341
+ }
342
+ if (response.updatedAt) {
343
+ updated.updatedAt = response.updatedAt;
344
+ } else if (old.updatedAt !== void 0) {
345
+ updated.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
346
+ }
347
+ if (old._hash !== void 0 && updated.items) {
348
+ updated._hash = hashObject(updated.items);
349
+ }
350
+ queryClient.setQueryData(q.queryKey, updated);
351
+ }
352
+ });
353
+ }
354
+
355
+ exports.addHashToData = addHashToData;
356
+ exports.applyDataGuard = applyDataGuard;
357
+ exports.clearRecentlyUpdated = clearRecentlyUpdated;
358
+ exports.createQueryKeyFactory = createQueryKeyFactory;
359
+ exports.createSimpleQueryKeyFactory = createSimpleQueryKeyFactory;
360
+ exports.deriveFamilyKey = deriveFamilyKey;
361
+ exports.extractParamsFromKey = extractParamsFromKey;
362
+ exports.getNetworkInfo = getNetworkInfo;
363
+ exports.getNetworkSpeed = getNetworkSpeed;
364
+ exports.hashObject = hashObject;
365
+ exports.isFastNetwork = isFastNetwork;
366
+ exports.isListFamilyKey = isListFamilyKey;
367
+ exports.isQueryKeyEqual = isQueryKeyEqual;
368
+ exports.isSlowNetwork = isSlowNetwork;
369
+ exports.markRecentlyUpdated = markRecentlyUpdated;
370
+ exports.normalizeQueryParams = normalizeQueryParams;
371
+ exports.startsWithKeyPrefix = startsWithKeyPrefix;
372
+ exports.updateFamilyMetadata = updateFamilyMetadata;
373
+ //# sourceMappingURL=chunk-APXNNHBD.cjs.map
374
+ //# sourceMappingURL=chunk-APXNNHBD.cjs.map