@qiaopeng/tanstack-query-plus 0.5.9 → 0.5.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (250) hide show
  1. package/README.md +86 -55
  2. package/dist/{types/base.d.ts → base-CHnwqfyz.d.cts} +12 -14
  3. package/dist/base-CHnwqfyz.d.ts +52 -0
  4. package/dist/chunk-52ZO6Y67.cjs +1121 -0
  5. package/dist/chunk-52ZO6Y67.cjs.map +1 -0
  6. package/dist/chunk-5J6OXSLW.cjs +36 -0
  7. package/dist/chunk-5J6OXSLW.cjs.map +1 -0
  8. package/dist/chunk-6MAYHLTE.cjs +310 -0
  9. package/dist/chunk-6MAYHLTE.cjs.map +1 -0
  10. package/dist/chunk-ADS2QTMP.js +144 -0
  11. package/dist/chunk-ADS2QTMP.js.map +1 -0
  12. package/dist/chunk-APXNNHBD.cjs +374 -0
  13. package/dist/chunk-APXNNHBD.cjs.map +1 -0
  14. package/dist/chunk-AXMWOGNX.js +134 -0
  15. package/dist/chunk-AXMWOGNX.js.map +1 -0
  16. package/dist/chunk-B4KO3K3E.cjs +521 -0
  17. package/dist/chunk-B4KO3K3E.cjs.map +1 -0
  18. package/dist/chunk-BK3OTIBD.cjs +15 -0
  19. package/dist/chunk-BK3OTIBD.cjs.map +1 -0
  20. package/dist/chunk-BYAOQALW.js +13 -0
  21. package/dist/chunk-BYAOQALW.js.map +1 -0
  22. package/dist/chunk-CRTVS7VI.cjs +162 -0
  23. package/dist/chunk-CRTVS7VI.cjs.map +1 -0
  24. package/dist/chunk-EXITP7QO.js +288 -0
  25. package/dist/chunk-EXITP7QO.js.map +1 -0
  26. package/dist/chunk-GMO3PRZZ.js +565 -0
  27. package/dist/chunk-GMO3PRZZ.js.map +1 -0
  28. package/dist/chunk-HRO2DWKZ.js +12 -0
  29. package/dist/chunk-HRO2DWKZ.js.map +1 -0
  30. package/dist/chunk-JHDKUQSB.js +1069 -0
  31. package/dist/chunk-JHDKUQSB.js.map +1 -0
  32. package/dist/chunk-JN2Y6RSY.js +23 -0
  33. package/dist/chunk-JN2Y6RSY.js.map +1 -0
  34. package/dist/chunk-JRJSKRZW.cjs +29 -0
  35. package/dist/chunk-JRJSKRZW.cjs.map +1 -0
  36. package/dist/chunk-KC62H4VJ.js +123 -0
  37. package/dist/chunk-KC62H4VJ.js.map +1 -0
  38. package/dist/chunk-LHEHSLD5.js +31 -0
  39. package/dist/chunk-LHEHSLD5.js.map +1 -0
  40. package/dist/chunk-N4264P7N.cjs +156 -0
  41. package/dist/chunk-N4264P7N.cjs.map +1 -0
  42. package/dist/chunk-NF5QYPYC.cjs +133 -0
  43. package/dist/chunk-NF5QYPYC.cjs.map +1 -0
  44. package/dist/chunk-OFLCHKKE.cjs +28 -0
  45. package/dist/chunk-OFLCHKKE.cjs.map +1 -0
  46. package/dist/chunk-PCNSWVA5.cjs +602 -0
  47. package/dist/chunk-PCNSWVA5.cjs.map +1 -0
  48. package/dist/chunk-STOMAA2X.js +85 -0
  49. package/dist/chunk-STOMAA2X.js.map +1 -0
  50. package/dist/chunk-UVF5S6LX.cjs +15 -0
  51. package/dist/chunk-UVF5S6LX.cjs.map +1 -0
  52. package/dist/chunk-WEIXCDCA.cjs +90 -0
  53. package/dist/chunk-WEIXCDCA.cjs.map +1 -0
  54. package/dist/chunk-X3ZTSLBQ.js +355 -0
  55. package/dist/chunk-X3ZTSLBQ.js.map +1 -0
  56. package/dist/chunk-YEV73J4J.js +504 -0
  57. package/dist/chunk-YEV73J4J.js.map +1 -0
  58. package/dist/chunk-YW5PNTRU.cjs +14 -0
  59. package/dist/chunk-YW5PNTRU.cjs.map +1 -0
  60. package/dist/chunk-ZNXSWUIS.js +12 -0
  61. package/dist/chunk-ZNXSWUIS.js.map +1 -0
  62. package/dist/chunk-ZUEMBY4W.js +21 -0
  63. package/dist/chunk-ZUEMBY4W.js.map +1 -0
  64. package/dist/components/index.cjs +60 -0
  65. package/dist/components/index.cjs.map +1 -0
  66. package/dist/components/index.d.cts +43 -0
  67. package/dist/components/index.d.ts +43 -4
  68. package/dist/components/index.js +3 -4
  69. package/dist/components/index.js.map +1 -0
  70. package/dist/core/devtools.cjs +25 -0
  71. package/dist/core/devtools.cjs.map +1 -0
  72. package/dist/core/devtools.d.cts +17 -0
  73. package/dist/core/devtools.d.ts +9 -7
  74. package/dist/core/devtools.js +4 -16
  75. package/dist/core/devtools.js.map +1 -0
  76. package/dist/core/index.cjs +220 -0
  77. package/dist/core/index.cjs.map +1 -0
  78. package/dist/core/index.d.cts +196 -0
  79. package/dist/core/index.d.ts +196 -9
  80. package/dist/core/index.js +7 -8
  81. package/dist/core/index.js.map +1 -0
  82. package/dist/features/index.cjs +76 -0
  83. package/dist/features/index.cjs.map +1 -0
  84. package/dist/features/index.d.cts +86 -0
  85. package/dist/features/index.d.ts +86 -4
  86. package/dist/features/index.js +7 -3
  87. package/dist/features/index.js.map +1 -0
  88. package/dist/hooks/index.cjs +209 -0
  89. package/dist/hooks/index.cjs.map +1 -0
  90. package/dist/hooks/index.d.cts +377 -0
  91. package/dist/hooks/index.d.ts +377 -10
  92. package/dist/hooks/index.js +8 -9
  93. package/dist/hooks/index.js.map +1 -0
  94. package/dist/hooks/useInViewPrefetch.cjs +33 -0
  95. package/dist/hooks/useInViewPrefetch.cjs.map +1 -0
  96. package/dist/hooks/useInViewPrefetch.d.cts +12 -0
  97. package/dist/hooks/useInViewPrefetch.d.ts +6 -4
  98. package/dist/hooks/useInViewPrefetch.js +30 -20
  99. package/dist/hooks/useInViewPrefetch.js.map +1 -0
  100. package/dist/index.cjs +811 -0
  101. package/dist/index.cjs.map +1 -0
  102. package/dist/index.d.cts +36 -0
  103. package/dist/index.d.ts +36 -8
  104. package/dist/index.js +89 -7
  105. package/dist/index.js.map +1 -0
  106. package/dist/{types/offline.d.ts → offline-DVPtgoAS.d.ts} +15 -13
  107. package/dist/offline-xxeA_-6V.d.cts +99 -0
  108. package/dist/persistence-MRtkmhqq.d.cts +216 -0
  109. package/dist/persistence-tIrEb0pR.d.ts +216 -0
  110. package/dist/react-query/index.cjs +52 -0
  111. package/dist/react-query/index.cjs.map +1 -0
  112. package/dist/react-query/index.d.cts +1 -0
  113. package/dist/react-query/index.d.ts +1 -3
  114. package/dist/react-query/index.js +3 -1
  115. package/dist/react-query/index.js.map +1 -0
  116. package/dist/types/index.cjs +43 -0
  117. package/dist/types/index.cjs.map +1 -0
  118. package/dist/types/index.d.cts +157 -0
  119. package/dist/types/index.d.ts +116 -12
  120. package/dist/types/index.js +6 -8
  121. package/dist/types/index.js.map +1 -0
  122. package/dist/utils/index.cjs +234 -0
  123. package/dist/utils/index.cjs.map +1 -0
  124. package/dist/utils/index.d.cts +272 -0
  125. package/dist/utils/index.d.ts +272 -10
  126. package/dist/utils/index.js +9 -9
  127. package/dist/utils/index.js.map +1 -0
  128. package/package.json +13 -3
  129. package/dist/PersistQueryClientProvider.d.ts +0 -22
  130. package/dist/PersistQueryClientProvider.d.ts.map +0 -1
  131. package/dist/PersistQueryClientProvider.js +0 -57
  132. package/dist/components/LoadingFallback.d.ts +0 -16
  133. package/dist/components/LoadingFallback.d.ts.map +0 -1
  134. package/dist/components/LoadingFallback.js +0 -27
  135. package/dist/components/QueryErrorBoundary.d.ts +0 -12
  136. package/dist/components/QueryErrorBoundary.d.ts.map +0 -1
  137. package/dist/components/QueryErrorBoundary.js +0 -9
  138. package/dist/components/SuspenseWrapper.d.ts +0 -14
  139. package/dist/components/SuspenseWrapper.d.ts.map +0 -1
  140. package/dist/components/SuspenseWrapper.js +0 -9
  141. package/dist/components/index.d.ts.map +0 -1
  142. package/dist/components/internal/ErrorBoundary.d.ts +0 -27
  143. package/dist/components/internal/ErrorBoundary.d.ts.map +0 -1
  144. package/dist/components/internal/ErrorBoundary.js +0 -37
  145. package/dist/core/config.d.ts +0 -80
  146. package/dist/core/config.d.ts.map +0 -1
  147. package/dist/core/config.js +0 -327
  148. package/dist/core/devtools.d.ts.map +0 -1
  149. package/dist/core/env.d.ts +0 -4
  150. package/dist/core/env.d.ts.map +0 -1
  151. package/dist/core/env.js +0 -26
  152. package/dist/core/focusManager.d.ts +0 -33
  153. package/dist/core/focusManager.d.ts.map +0 -1
  154. package/dist/core/focusManager.js +0 -122
  155. package/dist/core/index.d.ts.map +0 -1
  156. package/dist/core/keys.d.ts +0 -59
  157. package/dist/core/keys.d.ts.map +0 -1
  158. package/dist/core/keys.js +0 -107
  159. package/dist/core/queryOptions.d.ts +0 -19
  160. package/dist/core/queryOptions.d.ts.map +0 -1
  161. package/dist/core/queryOptions.js +0 -32
  162. package/dist/features/index.d.ts.map +0 -1
  163. package/dist/features/offline.d.ts +0 -49
  164. package/dist/features/offline.d.ts.map +0 -1
  165. package/dist/features/offline.js +0 -300
  166. package/dist/features/persistence.d.ts +0 -36
  167. package/dist/features/persistence.d.ts.map +0 -1
  168. package/dist/features/persistence.js +0 -187
  169. package/dist/hooks/batchQueries.d.ts +0 -129
  170. package/dist/hooks/batchQueries.d.ts.map +0 -1
  171. package/dist/hooks/batchQueries.js +0 -301
  172. package/dist/hooks/index.d.ts.map +0 -1
  173. package/dist/hooks/useDataGuardMutation.d.ts +0 -39
  174. package/dist/hooks/useDataGuardMutation.d.ts.map +0 -1
  175. package/dist/hooks/useDataGuardMutation.js +0 -137
  176. package/dist/hooks/useDataGuardQuery.d.ts +0 -28
  177. package/dist/hooks/useDataGuardQuery.d.ts.map +0 -1
  178. package/dist/hooks/useDataGuardQuery.js +0 -71
  179. package/dist/hooks/useFocusManager.d.ts +0 -41
  180. package/dist/hooks/useFocusManager.d.ts.map +0 -1
  181. package/dist/hooks/useFocusManager.js +0 -109
  182. package/dist/hooks/useInViewPrefetch.d.ts.map +0 -1
  183. package/dist/hooks/useInfiniteQuery.d.ts +0 -33
  184. package/dist/hooks/useInfiniteQuery.d.ts.map +0 -1
  185. package/dist/hooks/useInfiniteQuery.js +0 -61
  186. package/dist/hooks/useMutation.d.ts +0 -25
  187. package/dist/hooks/useMutation.d.ts.map +0 -1
  188. package/dist/hooks/useMutation.js +0 -180
  189. package/dist/hooks/usePrefetch.d.ts +0 -54
  190. package/dist/hooks/usePrefetch.d.ts.map +0 -1
  191. package/dist/hooks/usePrefetch.js +0 -229
  192. package/dist/hooks/useQuery.d.ts +0 -21
  193. package/dist/hooks/useQuery.d.ts.map +0 -1
  194. package/dist/hooks/useQuery.js +0 -46
  195. package/dist/hooks/useSuspenseQuery.d.ts +0 -11
  196. package/dist/hooks/useSuspenseQuery.d.ts.map +0 -1
  197. package/dist/hooks/useSuspenseQuery.js +0 -19
  198. package/dist/index.d.ts.map +0 -1
  199. package/dist/react-query/index.d.ts.map +0 -1
  200. package/dist/types/base.d.ts.map +0 -1
  201. package/dist/types/base.js +0 -26
  202. package/dist/types/dataGuard.d.ts +0 -69
  203. package/dist/types/dataGuard.d.ts.map +0 -1
  204. package/dist/types/dataGuard.js +0 -10
  205. package/dist/types/index.d.ts.map +0 -1
  206. package/dist/types/infinite.d.ts +0 -39
  207. package/dist/types/infinite.d.ts.map +0 -1
  208. package/dist/types/infinite.js +0 -1
  209. package/dist/types/offline.d.ts.map +0 -1
  210. package/dist/types/offline.js +0 -8
  211. package/dist/types/optimistic.d.ts +0 -126
  212. package/dist/types/optimistic.d.ts.map +0 -1
  213. package/dist/types/optimistic.js +0 -7
  214. package/dist/types/persistence.d.ts +0 -9
  215. package/dist/types/persistence.d.ts.map +0 -1
  216. package/dist/types/persistence.js +0 -1
  217. package/dist/types/selectors.d.ts +0 -11
  218. package/dist/types/selectors.d.ts.map +0 -1
  219. package/dist/types/selectors.js +0 -1
  220. package/dist/types/suspense.d.ts +0 -67
  221. package/dist/types/suspense.d.ts.map +0 -1
  222. package/dist/types/suspense.js +0 -1
  223. package/dist/utils/dataGuard.d.ts +0 -37
  224. package/dist/utils/dataGuard.d.ts.map +0 -1
  225. package/dist/utils/dataGuard.js +0 -251
  226. package/dist/utils/fieldMapper.d.ts +0 -9
  227. package/dist/utils/fieldMapper.d.ts.map +0 -1
  228. package/dist/utils/fieldMapper.js +0 -27
  229. package/dist/utils/index.d.ts.map +0 -1
  230. package/dist/utils/network.d.ts +0 -9
  231. package/dist/utils/network.d.ts.map +0 -1
  232. package/dist/utils/network.js +0 -43
  233. package/dist/utils/optimisticUtils.d.ts +0 -45
  234. package/dist/utils/optimisticUtils.d.ts.map +0 -1
  235. package/dist/utils/optimisticUtils.js +0 -116
  236. package/dist/utils/placeholderData.d.ts +0 -3
  237. package/dist/utils/placeholderData.d.ts.map +0 -1
  238. package/dist/utils/placeholderData.js +0 -28
  239. package/dist/utils/prefetchManager.d.ts +0 -111
  240. package/dist/utils/prefetchManager.d.ts.map +0 -1
  241. package/dist/utils/prefetchManager.js +0 -246
  242. package/dist/utils/queryKey.d.ts +0 -26
  243. package/dist/utils/queryKey.d.ts.map +0 -1
  244. package/dist/utils/queryKey.js +0 -89
  245. package/dist/utils/selectors.d.ts +0 -30
  246. package/dist/utils/selectors.d.ts.map +0 -1
  247. package/dist/utils/selectors.js +0 -18
  248. package/dist/utils/storage.d.ts +0 -7
  249. package/dist/utils/storage.d.ts.map +0 -1
  250. package/dist/utils/storage.js +0 -84
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/fieldMapper.ts","../src/utils/optimisticUtils.ts","../src/utils/placeholderData.ts","../src/utils/prefetchManager.ts","../src/utils/selectors.ts","../src/utils/queryClientUtils.ts"],"names":["getNetworkInfo","getNetworkSpeed","DEFAULT_STALE_TIME"],"mappings":"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","file":"chunk-PCNSWVA5.cjs","sourcesContent":["import type { QueryClient } from \"@tanstack/react-query\";\nexport interface FieldMappingConfig { nameField: string; configKey: string }\nexport function createFieldEnricher<T = any>(queryKey: any, mappings: Record<string, FieldMappingConfig>) {\n return (data: T, queryClient: QueryClient): T => {\n const config = queryClient.getQueryData<any>(queryKey);\n if (!config) return data as T;\n const result: any = { ...(data as any) };\n Object.entries(mappings).forEach(([idField, { nameField, configKey }]) => {\n const idValue = (data as any)[idField];\n if (idValue == null) return;\n const options = config[configKey];\n if (!options?.length) return;\n const optionMap = new Map(options.map((item: any) => [String(item.value), item.label]));\n const label = optionMap.get(String(idValue));\n if (label) { result[nameField] = label; }\n });\n return result as T;\n };\n}\nexport function createTempId(prefix = \"temp\"): string { return `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`; }\nexport function createOptimisticBase(customFields?: Record<string, any>): Record<string, any> {\n const now = new Date().toISOString();\n return { createTime: now, updateTime: now, createUser: \"\", updateUser: \"\", deleteStatus: 0, ...customFields };\n}","import type { QueryKey } from \"@tanstack/react-query\";\nimport type { ListOperationConfig, OptimisticUpdateConfig, OptimisticOperationTypeValue } from \"../types/optimistic\";\nimport type { EntityWithId } from \"../types/selectors\";\nimport { ListOperationType } from \"../types/optimistic.js\";\n/**\n * Loose equality check for IDs (string vs number)\n */\nexport function idsAreEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (a === undefined || a === null || b === undefined || b === null) return false;\n return String(a) === String(b);\n}\n\nexport const listUpdater = {\n add: <T extends EntityWithId>(items: T[] | undefined, newItem: T): T[] => {\n const currentItems = items || [];\n const existingIndex = currentItems.findIndex((item) => idsAreEqual(item.id, newItem.id));\n if (existingIndex >= 0) {\n const updatedItems = [...currentItems];\n updatedItems[existingIndex] = newItem;\n return updatedItems;\n }\n return [newItem, ...currentItems];\n },\n update: <T extends EntityWithId>(items: T[] | undefined, updatedItem: Partial<T> & { id: T[\"id\"] }): T[] => {\n const currentItems = items || [];\n return currentItems.map((item) => (idsAreEqual(item.id, updatedItem.id) ? { ...item, ...updatedItem } : item));\n },\n remove: <T extends EntityWithId>(items: T[] | undefined, itemId: T[\"id\"]): T[] => {\n const currentItems = items || [];\n return currentItems.filter((item) => !idsAreEqual(item.id, itemId));\n }\n};\nexport function createAddItemConfig<T extends EntityWithId>(queryKey: QueryKey, options?: { addToTop?: boolean; onRollback?: (error: Error) => void }): OptimisticUpdateConfig<T[], T> {\n return { queryKey, updater: (oldData: T[] | undefined, newItem: T) => { const currentItems = oldData || []; if (options?.addToTop !== false) { return [newItem, ...currentItems]; } return [...currentItems, newItem]; }, rollback: options?.onRollback ? (_previousData: T[], error: Error) => { options.onRollback!(error); } : undefined, enabled: true };\n}\nexport function createUpdateItemConfig<T extends EntityWithId>(queryKey: QueryKey, options?: { onRollback?: (error: Error) => void }): OptimisticUpdateConfig<T[], Partial<T> & { id: T[\"id\"] }> {\n return { queryKey, updater: (oldData: T[] | undefined, updatedItem: Partial<T> & { id: T[\"id\"] }) => { return listUpdater.update(oldData, updatedItem); }, rollback: options?.onRollback ? (_previousData: T[], error: Error) => { options.onRollback!(error); } : undefined, enabled: true };\n}\nexport function createRemoveItemConfig<T extends EntityWithId>(queryKey: QueryKey, options?: { onRollback?: (error: Error) => void }): OptimisticUpdateConfig<T[], T[\"id\"]> {\n return { queryKey, updater: (oldData: T[] | undefined, itemId: T[\"id\"]) => { return listUpdater.remove(oldData, itemId); }, rollback: options?.onRollback ? (_previousData: T[], error: Error) => { options.onRollback!(error); } : undefined, enabled: true };\n}\nexport type ListOperationVariables<T extends EntityWithId, TOperation extends ListOperationType> = TOperation extends ListOperationType.ADD ? T : TOperation extends ListOperationType.UPDATE ? Partial<T> & { id: T[\"id\"] } : TOperation extends ListOperationType.REMOVE ? T[\"id\"] : never;\nexport function createListOperationConfig<T extends EntityWithId, TOperation extends ListOperationType = ListOperationType>(config: ListOperationConfig<T>): OptimisticUpdateConfig<T[], ListOperationVariables<T, TOperation>> {\n return {\n queryKey: config.queryKey,\n updater: (oldData: T[] | undefined, variables: ListOperationVariables<T, TOperation>) => {\n switch (config.operation) {\n case ListOperationType.ADD:\n return listUpdater.add(oldData, variables as T);\n case ListOperationType.UPDATE:\n return listUpdater.update(oldData, variables as Partial<T> & { id: T[\"id\"] });\n case ListOperationType.REMOVE:\n return listUpdater.remove(oldData, variables as T[\"id\"]);\n default:\n return oldData || [];\n }\n },\n rollback: config.onRollback\n ? (previousData: T[], error: Error) => {\n const opType: OptimisticOperationTypeValue = config.operation === ListOperationType.ADD\n ? \"create\"\n : config.operation === ListOperationType.REMOVE\n ? \"delete\"\n : \"update\";\n config.onRollback!(error, { previousData, timestamp: Date.now(), operationType: opType });\n }\n : undefined,\n enabled: true\n };\n}\nexport function batchUpdateItems<T extends EntityWithId>(items: T[] | undefined | null, updates: Array<Partial<T> & { id: T[\"id\"] }>): T[] {\n let currentItems = items || [];\n updates.forEach((update) => { currentItems = listUpdater.update(currentItems, update); });\n return currentItems;\n}\nexport function batchRemoveItems<T extends EntityWithId>(items: T[] | undefined | null, itemIds: Array<T[\"id\"]>): T[] {\n let currentItems = items || [];\n itemIds.forEach((itemId) => { currentItems = listUpdater.remove(currentItems, itemId); });\n return currentItems;\n}\nexport function reorderItems<T extends EntityWithId>(items: T[] | undefined | null, fromIndex: number, toIndex: number): T[] {\n const currentItems = [...(items || [])];\n if (fromIndex < 0 || fromIndex >= currentItems.length || toIndex < 0 || toIndex >= currentItems.length) { return currentItems; }\n const [movedItem] = currentItems.splice(fromIndex, 1);\n currentItems.splice(toIndex, 0, movedItem);\n return currentItems;\n}\nexport function conditionalUpdateItems<T extends EntityWithId>(items: T[] | undefined | null, predicate: (item: T) => boolean, updater: (item: T) => Partial<T>): T[] {\n const currentItems = items || [];\n return currentItems.map((item) => { if (predicate(item)) { return { ...item, ...updater(item) }; } return item; });\n}\nexport function applyListOperationToPaginated<T extends EntityWithId>(data: { items: T[]; total?: number }, operation: ListOperationType, payload: Partial<T>): { items: T[]; total?: number } {\n let items = data.items || [];\n if (operation === ListOperationType.ADD) { items = listUpdater.add(items, payload as T); }\n else if (operation === ListOperationType.UPDATE) { items = listUpdater.update(items, payload as Partial<T> & { id: T[\"id\"] }); }\n else if (operation === ListOperationType.REMOVE) { const id = (payload as any)?.id; items = listUpdater.remove(items, id); }\n const total = typeof data.total === \"number\"\n ? operation === ListOperationType.ADD\n ? data.total + 1\n : operation === ListOperationType.REMOVE\n ? Math.max(0, data.total - 1)\n : data.total\n : data.total;\n return { ...data, items, total };\n}\n","export { keepPreviousData } from \"@tanstack/react-query\";\n\nexport function stableListPlaceholder<T = any>(previousData: T | undefined): T | undefined {\n if (previousData === undefined || previousData === null) return previousData as any;\n if (Array.isArray(previousData)) {\n return [] as any;\n }\n if (typeof previousData === \"object\") {\n const obj = { ...(previousData as any) };\n if (Array.isArray(obj.Rows)) {\n obj.Rows = [];\n if (typeof obj.Total === \"number\") obj.Total = obj.Total;\n return obj as T;\n }\n if (Array.isArray(obj.items)) {\n obj.items = [];\n if (typeof obj.total === \"number\") obj.total = obj.total;\n return obj as T;\n }\n if (Array.isArray(obj.data)) {\n obj.data = [];\n return obj as T;\n }\n }\n return previousData as any;\n}\n","import type { QueryClient, QueryFunction, QueryKey } from \"@tanstack/react-query\";\nimport { DEFAULT_STALE_TIME } from \"../core/config.js\";\nimport { getNetworkInfo, getNetworkSpeed } from \"./network.js\";\n\ninterface NetworkInformation extends EventTarget { effectiveType?: string; downlink?: number; rtt?: number; saveData?: boolean }\ninterface NavigatorWithConnection extends Navigator { connection?: NetworkInformation; mozConnection?: NetworkInformation; webkitConnection?: NetworkInformation }\nexport interface PrefetchConfig { priority?: \"high\" | \"medium\" | \"low\"; delay?: number; staleTime?: number; allowSlowNetwork?: boolean }\nexport interface PrefetchTask { queryKey: QueryKey; queryFn: QueryFunction<any>; config: PrefetchConfig; timestamp: number; id: string; predictionScore?: number }\nexport type NetworkSpeed = \"slow\" | \"medium\" | \"fast\" | \"unknown\";\nexport interface PrefetchStats { queueSize: number; historySize: number; networkSpeed: NetworkSpeed; isProcessing: boolean; totalPrefetches: number; successfulPrefetches: number; failedPrefetches: number; averagePrefetchTime: number; skippedPrefetches: number }\nexport interface InteractionRecord { queryKey: QueryKey; timestamp: number; type: \"view\" | \"hover\" | \"click\" | \"focus\" }\nexport interface PredictionResult { queryKey: QueryKey; score: number; reason: string }\n\nexport class SmartPrefetchManager {\n private queryClient: QueryClient;\n private prefetchQueue: Map<string, PrefetchTask> = new Map();\n private prefetchHistory: Set<string> = new Set();\n private networkSpeed: NetworkSpeed = \"fast\";\n private isProcessing = false;\n private maxQueueSize = 10;\n private maxHistorySize = 100;\n private totalPrefetches = 0;\n private successfulPrefetches = 0;\n private failedPrefetches = 0;\n private skippedPrefetches = 0;\n private prefetchTimes: number[] = [];\n private maxPrefetchTimesSize = 50;\n private interactionHistory: InteractionRecord[] = [];\n private maxInteractionHistorySize = 100;\n private queryAccessCounts: Map<string, number> = new Map();\n private querySequences: Array<{ from: string; to: string; count: number }> = [];\n private maxSequenceSize = 50;\n private networkCleanup?: () => void;\n constructor(queryClient: QueryClient) { this.queryClient = queryClient; this.initNetworkMonitoring(); }\n private initNetworkMonitoring() {\n const networkInfo = getNetworkInfo();\n if (!networkInfo) { return; }\n this.updateNetworkSpeed();\n if (typeof navigator !== \"undefined\" && \"connection\" in navigator) {\n const navWithConnection = navigator as NavigatorWithConnection;\n const connection = navWithConnection.connection || navWithConnection.mozConnection || navWithConnection.webkitConnection;\n const handleNetworkChange = () => { this.updateNetworkSpeed(); };\n connection?.addEventListener?.(\"change\", handleNetworkChange);\n this.networkCleanup = () => { connection?.removeEventListener(\"change\", handleNetworkChange); };\n }\n }\n private updateNetworkSpeed() { this.networkSpeed = getNetworkSpeed(); }\n public getNetworkSpeed(): NetworkSpeed { return this.networkSpeed; }\n public isSlowNetwork(): boolean { return this.networkSpeed === \"slow\" || this.networkSpeed === \"unknown\"; }\n public shouldPrefetch(queryKey: QueryKey, config: PrefetchConfig = {}): boolean {\n const key = this.getQueryKeyString(queryKey);\n if (this.prefetchQueue.has(key)) return false;\n if (this.prefetchHistory.has(key)) return false;\n const cachedData = this.queryClient.getQueryData(queryKey);\n if (cachedData) return false;\n if (this.isSlowNetwork() && !config.allowSlowNetwork) return false;\n if (this.prefetchQueue.size >= this.maxQueueSize) return false;\n return true;\n }\n public addPrefetchTask(queryKey: QueryKey, queryFn: QueryFunction<any>, config: PrefetchConfig = {}): boolean {\n if (!this.shouldPrefetch(queryKey, config)) { this.skippedPrefetches++; return false; }\n const key = this.getQueryKeyString(queryKey);\n const task: PrefetchTask = { id: `${key}-${Date.now()}`, queryKey, queryFn, config: { priority: \"medium\", delay: 0, staleTime: DEFAULT_STALE_TIME, allowSlowNetwork: false, ...config }, timestamp: Date.now() };\n this.prefetchQueue.set(key, task);\n this.processQueue();\n return true;\n }\n private async processQueue() {\n if (this.isProcessing || this.prefetchQueue.size === 0) { return; }\n this.isProcessing = true;\n try {\n const sortedTasks = this.getSortedTasks();\n for (const task of sortedTasks) {\n const key = this.getQueryKeyString(task.queryKey);\n const startTime = Date.now();\n if (task.config.delay && task.config.delay > 0) { await this.delay(task.config.delay); }\n try {\n this.totalPrefetches++;\n await this.queryClient.prefetchQuery({ queryKey: task.queryKey, queryFn: task.queryFn, staleTime: task.config.staleTime });\n this.successfulPrefetches++;\n const duration = Date.now() - startTime;\n this.recordPrefetchTime(duration);\n this.addToHistory(key);\n } catch {\n this.failedPrefetches++;\n }\n this.prefetchQueue.delete(key);\n }\n } finally { this.isProcessing = false; }\n }\n private getSortedTasks(): PrefetchTask[] {\n const tasks = Array.from(this.prefetchQueue.values());\n const priorityOrder = { high: 0, medium: 1, low: 2 } as const;\n return tasks.sort((a, b) => {\n const priorityA = priorityOrder[a.config.priority || \"medium\"]; const priorityB = priorityOrder[b.config.priority || \"medium\"]; if (priorityA !== priorityB) return priorityA - priorityB;\n if (a.predictionScore !== undefined && b.predictionScore !== undefined) { if (a.predictionScore !== b.predictionScore) { return b.predictionScore - a.predictionScore; } }\n return a.timestamp - b.timestamp;\n });\n }\n public async prefetchNow<TData = unknown>(queryKey: QueryKey, queryFn: QueryFunction<TData>, config: PrefetchConfig = {}): Promise<void> {\n const key = this.getQueryKeyString(queryKey);\n const startTime = Date.now();\n try {\n this.totalPrefetches++;\n await this.queryClient.prefetchQuery({ queryKey, queryFn, staleTime: config.staleTime || DEFAULT_STALE_TIME });\n this.successfulPrefetches++;\n const duration = Date.now() - startTime;\n this.recordPrefetchTime(duration);\n this.addToHistory(key);\n } catch (error) { this.failedPrefetches++; throw error; }\n }\n private addToHistory(key: string) { this.prefetchHistory.add(key); if (this.prefetchHistory.size > this.maxHistorySize) { const firstKey = this.prefetchHistory.values().next().value as string | undefined; if (firstKey) { this.prefetchHistory.delete(firstKey); } } }\n public clearHistory() { this.prefetchHistory.clear(); }\n public clearQueue() { this.prefetchQueue.clear(); }\n public reset(): void { this.clearQueue(); this.clearHistory(); this.clearInteractionHistory(); this.resetStats(); }\n public destroy(): void { if (this.networkCleanup) { this.networkCleanup(); this.networkCleanup = undefined; } this.reset(); }\n public recordInteraction(queryKey: QueryKey, type: \"view\" | \"hover\" | \"click\" | \"focus\" = \"view\"): void {\n const interaction: InteractionRecord = { queryKey, timestamp: Date.now(), type };\n this.interactionHistory.push(interaction);\n if (this.interactionHistory.length > this.maxInteractionHistorySize) { this.interactionHistory.shift(); }\n const key = this.getQueryKeyString(queryKey);\n this.queryAccessCounts.set(key, (this.queryAccessCounts.get(key) || 0) + 1);\n if (this.interactionHistory.length >= 2) {\n const prevInteraction = this.interactionHistory[this.interactionHistory.length - 2];\n const prevKey = this.getQueryKeyString(prevInteraction.queryKey);\n const existingSequence = this.querySequences.find((s) => s.from === prevKey && s.to === key);\n if (existingSequence) { existingSequence.count++; } else { this.querySequences.push({ from: prevKey, to: key, count: 1 }); if (this.querySequences.length > this.maxSequenceSize) { this.querySequences.shift(); } }\n }\n }\n public getPredictions(currentQueryKey?: QueryKey, limit = 5): PredictionResult[] {\n const predictions: PredictionResult[] = [];\n if (currentQueryKey) {\n const currentKey = this.getQueryKeyString(currentQueryKey);\n const sequences = this.querySequences.filter((s) => s.from === currentKey).sort((a, b) => b.count - a.count).slice(0, limit);\n sequences.forEach((seq) => { try { const queryKey = JSON.parse(seq.to); predictions.push({ queryKey, score: Math.min(seq.count / 10, 1), reason: `Frequently accessed after current query (${seq.count} times)` }); } catch {} });\n }\n const frequentQueries = Array.from(this.queryAccessCounts.entries()).sort((a, b) => b[1] - a[1]).slice(0, limit);\n frequentQueries.forEach(([key, count]) => { try { const queryKey = JSON.parse(key); if (!predictions.some((p) => this.getQueryKeyString(p.queryKey) === key)) { predictions.push({ queryKey, score: Math.min(count / 20, 1), reason: `Frequently accessed (${count} times)` }); } } catch {} });\n const recentInteractions = this.interactionHistory.slice(-10).reverse();\n recentInteractions.forEach((interaction, index) => {\n const key = this.getQueryKeyString(interaction.queryKey);\n if (!predictions.some((p) => this.getQueryKeyString(p.queryKey) === key)) {\n predictions.push({ queryKey: interaction.queryKey, score: Math.max(0.3 - index * 0.03, 0.1), reason: `Recently accessed (${index + 1} queries ago)` });\n }\n });\n return predictions.sort((a, b) => b.score - a.score).slice(0, limit);\n }\n public async prefetchPredicted(currentQueryKey: QueryKey | undefined, queryFnMap: Map<string, QueryFunction<any>>, config: PrefetchConfig = {}): Promise<void> {\n const predictions = this.getPredictions(currentQueryKey);\n for (const prediction of predictions) {\n const key = this.getQueryKeyString(prediction.queryKey);\n const queryFn = queryFnMap.get(key);\n if (queryFn) {\n const taskConfig = { ...config, priority: prediction.score > 0.7 ? \"high\" : prediction.score > 0.4 ? \"medium\" : \"low\" } as PrefetchConfig;\n const added = this.addPrefetchTask(prediction.queryKey, queryFn, taskConfig);\n if (added) { const task = this.prefetchQueue.get(key); if (task) { task.predictionScore = prediction.score; } }\n }\n }\n }\n public clearInteractionHistory(): void { this.interactionHistory = []; this.queryAccessCounts.clear(); this.querySequences = []; }\n private recordPrefetchTime(duration: number): void { this.prefetchTimes.push(duration); if (this.prefetchTimes.length > this.maxPrefetchTimesSize) { this.prefetchTimes.shift(); } }\n private getAveragePrefetchTime(): number { if (this.prefetchTimes.length === 0) { return 0; } const sum = this.prefetchTimes.reduce((acc, time) => acc + time, 0); return Math.round(sum / this.prefetchTimes.length); }\n public getStats(): PrefetchStats { return { queueSize: this.prefetchQueue.size, historySize: this.prefetchHistory.size, networkSpeed: this.networkSpeed, isProcessing: this.isProcessing, totalPrefetches: this.totalPrefetches, successfulPrefetches: this.successfulPrefetches, failedPrefetches: this.failedPrefetches, averagePrefetchTime: this.getAveragePrefetchTime(), skippedPrefetches: this.skippedPrefetches }; }\n public getPerformanceReport(): { stats: PrefetchStats; successRate: number; predictions: { totalInteractions: number; uniqueQueries: number; sequencePatterns: number }; queue: { size: number; byPriority: { high: number; medium: number; low: number } } } {\n const stats = this.getStats();\n const successRate = stats.totalPrefetches > 0 ? Math.round((stats.successfulPrefetches / stats.totalPrefetches) * 100) : 0;\n const queueTasks = Array.from(this.prefetchQueue.values());\n const byPriority = { high: queueTasks.filter((t) => t.config.priority === \"high\").length, medium: queueTasks.filter((t) => t.config.priority === \"medium\").length, low: queueTasks.filter((t) => t.config.priority === \"low\").length };\n return { stats, successRate, predictions: { totalInteractions: this.interactionHistory.length, uniqueQueries: this.queryAccessCounts.size, sequencePatterns: this.querySequences.length }, queue: { size: this.prefetchQueue.size, byPriority } };\n }\n public resetStats(): void { this.totalPrefetches = 0; this.successfulPrefetches = 0; this.failedPrefetches = 0; this.skippedPrefetches = 0; this.prefetchTimes = []; }\n private getQueryKeyString(queryKey: QueryKey): string { return JSON.stringify(queryKey); }\n private delay(ms: number): Promise<void> { return new Promise((resolve) => setTimeout(resolve, ms)); }\n public setMaxQueueSize(size: number): void { this.maxQueueSize = size; }\n public setMaxHistorySize(size: number): void { this.maxHistorySize = size; }\n public getQueuedTasks(): PrefetchTask[] { return Array.from(this.prefetchQueue.values()); }\n public removeTask(queryKey: QueryKey): boolean { const key = this.getQueryKeyString(queryKey); return this.prefetchQueue.delete(key); }\n public hasTask(queryKey: QueryKey): boolean { const key = this.getQueryKeyString(queryKey); return this.prefetchQueue.has(key); }\n public updateTaskPriority(queryKey: QueryKey, priority: \"high\" | \"medium\" | \"low\"): boolean { const key = this.getQueryKeyString(queryKey); const task = this.prefetchQueue.get(key); if (task) { task.config.priority = priority; return true; } return false; }\n public pauseQueue(): void { this.isProcessing = true; }\n public resumeQueue(): void { this.isProcessing = false; this.processQueue(); }\n}\nlet prefetchManagerInstance: SmartPrefetchManager | null = null;\nexport function getPrefetchManager(queryClient: QueryClient): SmartPrefetchManager { if (!prefetchManagerInstance) { prefetchManagerInstance = new SmartPrefetchManager(queryClient); } return prefetchManagerInstance; }\nexport function resetPrefetchManager() { prefetchManagerInstance = null; }","import type { EntityWithId, PaginatedData } from \"../types/selectors\";\nexport function selectById<T extends EntityWithId>(id: T[\"id\"]) { return (data: T[] | undefined): T | undefined => { return data?.find((item) => item.id === id); }; }\nexport function selectByIds<T extends EntityWithId>(ids: T[\"id\"][]) { return (data: T[] | undefined): T[] => { if (!data) return []; return data.filter((item) => ids.includes(item.id)); }; }\nexport function selectFirst<T>(data: T[] | undefined): T | undefined { return data?.[0]; }\nexport function selectLast<T>(data: T[] | undefined): T | undefined { if (!data || data.length === 0) return undefined; return data[data.length - 1]; }\nexport function selectCount<T>(data: T[] | undefined): number { return data?.length ?? 0; }\nexport function selectTotal<T extends { total?: number }>(data: T | undefined): number { return data?.total ?? 0; }\nexport function selectItems<TItem, T extends PaginatedData<TItem>>(data: T | undefined): TItem[] { return data?.items ?? []; }\nexport function selectWhere<T>(predicate: (item: T) => boolean) { return (data: T[] | undefined): T[] => { if (!data) return []; return data.filter(predicate); }; }\nexport function selectMap<T, R>(mapper: (item: T) => R) { return (data: T[] | undefined): R[] => { if (!data) return []; return data.map(mapper); }; }\nexport function selectField<T, K extends keyof T>(field: K) { return (data: T | undefined): T[K] | undefined => { return data?.[field]; }; }\nexport function selectFields<T, K extends keyof T>(fields: K[]) { return (data: T | undefined): Pick<T, K> | undefined => { if (!data) return undefined; const result = {} as Pick<T, K>; fields.forEach((field) => { result[field] = data[field]; }); return result; }; }\nexport function compose<T, R1, R2>(selector1: (data: T) => R1, selector2: (data: R1) => R2) { return (data: T): R2 => { return selector2(selector1(data)); }; }\nexport const selectors = { byId: selectById, byIds: selectByIds, first: selectFirst, last: selectLast, count: selectCount, total: selectTotal, items: selectItems, where: selectWhere, map: selectMap, field: selectField, fields: selectFields, compose };","import type { QueryClient, QueryKey } from \"@tanstack/react-query\";\n\nexport interface BatchTask {\n queryKey: QueryKey;\n data?: any;\n exact?: boolean;\n}\n\nexport function invalidateQueriesBatch(queryClient: QueryClient, tasks: BatchTask[] | QueryKey[]) {\n tasks.forEach(task => {\n if (Array.isArray(task) || typeof task === 'string') {\n queryClient.invalidateQueries({ queryKey: task as QueryKey });\n } else {\n queryClient.invalidateQueries(task as any);\n }\n });\n}\n\nexport function cancelQueriesBatch(queryClient: QueryClient, tasks: BatchTask[] | QueryKey[]) {\n tasks.forEach(task => {\n if (Array.isArray(task) || typeof task === 'string') {\n queryClient.cancelQueries({ queryKey: task as QueryKey });\n } else {\n queryClient.cancelQueries(task as any);\n }\n });\n}\n\nexport function setQueryDataBatch(queryClient: QueryClient, tasks: { queryKey: QueryKey; data: any }[]) {\n tasks.forEach(task => queryClient.setQueryData(task.queryKey, task.data));\n}\n"]}
@@ -0,0 +1,85 @@
1
+ // src/utils/storage.ts
2
+ function getStorageByType(storageType) {
3
+ try {
4
+ switch (storageType) {
5
+ case "localStorage" /* LOCAL */:
6
+ return typeof window !== "undefined" ? window.localStorage : null;
7
+ case "sessionStorage" /* SESSION */:
8
+ return typeof window !== "undefined" ? window.sessionStorage : null;
9
+ default:
10
+ return null;
11
+ }
12
+ } catch {
13
+ return null;
14
+ }
15
+ }
16
+ function isStorageAvailable(storageType) {
17
+ try {
18
+ const storage = getStorageByType(storageType);
19
+ if (!storage) {
20
+ return false;
21
+ }
22
+ const testKey = "__storage_test__";
23
+ storage.setItem(testKey, "test");
24
+ storage.removeItem(testKey);
25
+ return true;
26
+ } catch {
27
+ return false;
28
+ }
29
+ }
30
+ function getStorageUsage(storageType) {
31
+ try {
32
+ const storage = getStorageByType(storageType);
33
+ if (!storage) {
34
+ return { type: storageType, used: 0, total: 0, usage: 0, available: false, error: "Storage not available" };
35
+ }
36
+ let used = 0;
37
+ for (let i = 0; i < storage.length; i++) {
38
+ const key = storage.key(i);
39
+ if (key) {
40
+ const value = storage.getItem(key);
41
+ if (value) {
42
+ used += key.length + value.length;
43
+ }
44
+ }
45
+ }
46
+ const total = storageType === "localStorage" /* LOCAL */ ? 5 * 1024 * 1024 : 5 * 1024 * 1024;
47
+ return { type: storageType, used, total, usage: used / total, available: true };
48
+ } catch (error) {
49
+ return { type: storageType, used: 0, total: 0, usage: 0, available: false, error: error instanceof Error ? error.message : "Unknown error" };
50
+ }
51
+ }
52
+ function formatBytes(bytes) {
53
+ if (bytes === 0) {
54
+ return "0 Bytes";
55
+ }
56
+ const k = 1024;
57
+ const sizes = ["Bytes", "KB", "MB", "GB"];
58
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
59
+ return `${Number.parseFloat((bytes / k ** i).toFixed(2))} ${sizes[i]}`;
60
+ }
61
+ function deepClone(obj) {
62
+ if (obj === null || typeof obj !== "object") {
63
+ return obj;
64
+ }
65
+ if (obj instanceof Date) {
66
+ return new Date(obj.getTime());
67
+ }
68
+ if (Array.isArray(obj)) {
69
+ return obj.map((item) => deepClone(item));
70
+ }
71
+ if (typeof obj === "object") {
72
+ const cloned = {};
73
+ for (const key in obj) {
74
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
75
+ cloned[key] = deepClone(obj[key]);
76
+ }
77
+ }
78
+ return cloned;
79
+ }
80
+ return obj;
81
+ }
82
+
83
+ export { deepClone, formatBytes, getStorageUsage, isStorageAvailable };
84
+ //# sourceMappingURL=chunk-STOMAA2X.js.map
85
+ //# sourceMappingURL=chunk-STOMAA2X.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/storage.ts"],"names":[],"mappings":";AAEA,SAAS,iBAAiB,WAAA,EAA0C;AAClE,EAAA,IAAI;AACF,IAAA,QAAQ,WAAA;AAAa,MACnB,KAAA,cAAA;AACE,QAAA,OAAO,OAAO,MAAA,KAAW,WAAA,GAAc,MAAA,CAAO,YAAA,GAAe,IAAA;AAAA,MAC/D,KAAA,gBAAA;AACE,QAAA,OAAO,OAAO,MAAA,KAAW,WAAA,GAAc,MAAA,CAAO,cAAA,GAAiB,IAAA;AAAA,MACjE;AACE,QAAA,OAAO,IAAA;AAAA;AACX,EACF,CAAA,CAAA,MAAQ;AAAE,IAAA,OAAO,IAAA;AAAA,EAAM;AACzB;AACO,SAAS,mBAAmB,WAAA,EAAmC;AACpE,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,iBAAiB,WAAW,CAAA;AAC5C,IAAA,IAAI,CAAC,OAAA,EAAS;AAAE,MAAA,OAAO,KAAA;AAAA,IAAO;AAC9B,IAAA,MAAM,OAAA,GAAU,kBAAA;AAChB,IAAA,OAAA,CAAQ,OAAA,CAAQ,SAAS,MAAM,CAAA;AAC/B,IAAA,OAAA,CAAQ,WAAW,OAAO,CAAA;AAC1B,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AAAE,IAAA,OAAO,KAAA;AAAA,EAAO;AAC1B;AACO,SAAS,gBAAgB,WAAA,EAAuC;AACrE,EAAA,IAAI;AACF,IAAA,MAAM,OAAA,GAAU,iBAAiB,WAAW,CAAA;AAC5C,IAAA,IAAI,CAAC,OAAA,EAAS;AAAE,MAAA,OAAO,EAAE,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,SAAA,EAAW,KAAA,EAAO,KAAA,EAAO,uBAAA,EAAwB;AAAA,IAAG;AAC7H,IAAA,IAAI,IAAA,GAAO,CAAA;AACX,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AACvC,MAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA;AACzB,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA;AACjC,QAAA,IAAI,KAAA,EAAO;AAAE,UAAA,IAAA,IAAQ,GAAA,CAAI,SAAS,KAAA,CAAM,MAAA;AAAA,QAAQ;AAAA,MAClD;AAAA,IACF;AACA,IAAA,MAAM,QAAQ,WAAA,KAAA,cAAA,eAAoC,CAAA,GAAI,IAAA,GAAO,IAAA,GAAO,IAAI,IAAA,GAAO,IAAA;AAC/E,IAAA,OAAO,EAAE,MAAM,WAAA,EAAa,IAAA,EAAM,OAAO,KAAA,EAAO,IAAA,GAAO,KAAA,EAAO,SAAA,EAAW,IAAA,EAAK;AAAA,EAChF,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,EAAE,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,CAAA,EAAG,OAAO,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,SAAA,EAAW,OAAO,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,UAAU,eAAA,EAAgB;AAAA,EAC7I;AACF;AACO,SAAS,YAAY,KAAA,EAAuB;AACjD,EAAA,IAAI,UAAU,CAAA,EAAG;AAAE,IAAA,OAAO,SAAA;AAAA,EAAW;AACrC,EAAA,MAAM,CAAA,GAAI,IAAA;AAAM,EAAA,MAAM,KAAA,GAAQ,CAAC,OAAA,EAAS,IAAA,EAAM,MAAM,IAAI,CAAA;AAAG,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAC,CAAA;AAC7G,EAAA,OAAO,CAAA,EAAG,MAAA,CAAO,UAAA,CAAA,CAAY,KAAA,GAAQ,CAAA,IAAK,CAAA,EAAG,OAAA,CAAQ,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AACtE;AACO,SAAS,UAAa,GAAA,EAAW;AACtC,EAAA,IAAI,GAAA,KAAQ,IAAA,IAAQ,OAAO,GAAA,KAAQ,QAAA,EAAU;AAAE,IAAA,OAAO,GAAA;AAAA,EAAK;AAC3D,EAAA,IAAK,eAAuB,IAAA,EAAM;AAAE,IAAA,OAAO,IAAI,IAAA,CAAM,GAAA,CAAY,OAAA,EAAS,CAAA;AAAA,EAAQ;AAClF,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AAAE,IAAA,OAAO,IAAI,GAAA,CAAI,CAAC,IAAA,KAAS,SAAA,CAAU,IAAI,CAAC,CAAA;AAAA,EAAQ;AAC1E,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAAE,IAAA,MAAM,SAAS,EAAC;AAAQ,IAAA,KAAA,MAAW,OAAO,GAAA,EAAY;AAAE,MAAA,IAAI,OAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,GAAA,EAAY,GAAG,CAAA,EAAG;AAAE,QAAC,OAAe,GAAG,CAAA,GAAI,SAAA,CAAW,GAAA,CAAY,GAAG,CAAC,CAAA;AAAA,MAAG;AAAA,IAAE;AAAE,IAAA,OAAO,MAAA;AAAA,EAAQ;AAC5N,EAAA,OAAO,GAAA;AACT","file":"chunk-STOMAA2X.js","sourcesContent":["import type { StorageInfo } from \"../types/persistence\";\nimport { StorageType } from \"../types/base.js\";\nfunction getStorageByType(storageType: StorageType): Storage | null {\n try {\n switch (storageType) {\n case StorageType.LOCAL:\n return typeof window !== \"undefined\" ? window.localStorage : null;\n case StorageType.SESSION:\n return typeof window !== \"undefined\" ? window.sessionStorage : null;\n default:\n return null;\n }\n } catch { return null; }\n}\nexport function isStorageAvailable(storageType: StorageType): boolean {\n try {\n const storage = getStorageByType(storageType);\n if (!storage) { return false; }\n const testKey = \"__storage_test__\";\n storage.setItem(testKey, \"test\");\n storage.removeItem(testKey);\n return true;\n } catch { return false; }\n}\nexport function getStorageUsage(storageType: StorageType): StorageInfo {\n try {\n const storage = getStorageByType(storageType);\n if (!storage) { return { type: storageType, used: 0, total: 0, usage: 0, available: false, error: \"Storage not available\" }; }\n let used = 0;\n for (let i = 0; i < storage.length; i++) {\n const key = storage.key(i);\n if (key) {\n const value = storage.getItem(key);\n if (value) { used += key.length + value.length; }\n }\n }\n const total = storageType === StorageType.LOCAL ? 5 * 1024 * 1024 : 5 * 1024 * 1024;\n return { type: storageType, used, total, usage: used / total, available: true };\n } catch (error) {\n return { type: storageType, used: 0, total: 0, usage: 0, available: false, error: error instanceof Error ? error.message : \"Unknown error\" };\n }\n}\nexport function formatBytes(bytes: number): string {\n if (bytes === 0) { return \"0 Bytes\"; }\n const k = 1024; const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\"]; const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${Number.parseFloat((bytes / k ** i).toFixed(2))} ${sizes[i]}`;\n}\nexport function deepClone<T>(obj: T): T {\n if (obj === null || typeof obj !== \"object\") { return obj; }\n if ((obj as any) instanceof Date) { return new Date((obj as any).getTime()) as T; }\n if (Array.isArray(obj)) { return obj.map((item) => deepClone(item)) as T; }\n if (typeof obj === \"object\") { const cloned = {} as T; for (const key in obj as any) { if (Object.prototype.hasOwnProperty.call(obj as any, key)) { (cloned as any)[key] = deepClone((obj as any)[key]); } } return cloned; }\n return obj;\n}"]}
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ // src/types/optimistic.ts
4
+ var OptimisticOperationType = { CREATE: "create", UPDATE: "update", DELETE: "delete", BATCH: "batch" };
5
+ var ListOperationType = /* @__PURE__ */ ((ListOperationType2) => {
6
+ ListOperationType2["ADD"] = "add";
7
+ ListOperationType2["UPDATE"] = "update";
8
+ ListOperationType2["REMOVE"] = "remove";
9
+ return ListOperationType2;
10
+ })(ListOperationType || {});
11
+
12
+ exports.ListOperationType = ListOperationType;
13
+ exports.OptimisticOperationType = OptimisticOperationType;
14
+ //# sourceMappingURL=chunk-UVF5S6LX.cjs.map
15
+ //# sourceMappingURL=chunk-UVF5S6LX.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types/optimistic.ts"],"names":["ListOperationType"],"mappings":";;;AAIO,IAAM,uBAAA,GAA0B,EAAE,MAAA,EAAQ,QAAA,EAAU,QAAQ,QAAA,EAAU,MAAA,EAAQ,QAAA,EAAU,KAAA,EAAO,OAAA;AAG/F,IAAK,iBAAA,qBAAAA,kBAAAA,KAAL;AAAyB,EAAAA,mBAAA,KAAA,CAAA,GAAM,KAAA;AAAO,EAAAA,mBAAA,QAAA,CAAA,GAAS,QAAA;AAAU,EAAAA,mBAAA,QAAA,CAAA,GAAS,QAAA;AAA7D,EAAA,OAAAA,kBAAAA;AAAA,CAAA,EAAA,iBAAA,IAAA,EAAA","file":"chunk-UVF5S6LX.cjs","sourcesContent":["import type { QueryKey } from \"@tanstack/react-query\";\nimport type { EntityWithId } from \"./selectors\";\nexport interface OptimisticUpdateConfig<TData = unknown, TVariables = unknown> { queryKey: QueryKey; updater: (oldData: TData | undefined, variables: TVariables) => TData | undefined; rollback?: (previousData: TData, error: Error) => void; enabled?: boolean }\nexport interface OptimisticContext<TData = unknown> { previousData?: TData; timestamp: number; operationType: OptimisticOperationTypeValue }\nexport const OptimisticOperationType = { CREATE: \"create\", UPDATE: \"update\", DELETE: \"delete\", BATCH: \"batch\" } as const;\nexport type OptimisticOperationTypeValue = (typeof OptimisticOperationType)[keyof typeof OptimisticOperationType];\nexport interface ListOperationConfig<T extends EntityWithId> { queryKey: QueryKey; operation: ListOperationType; onRollback?: (error: Error, context: OptimisticContext<T[]>) => void }\nexport enum ListOperationType { ADD = \"add\", UPDATE = \"update\", REMOVE = \"remove\" }\nexport interface BatchQueryResult<TData = unknown, TError = Error> { data: TData | undefined; isLoading: boolean; isError: boolean; error: TError | null; status: \"pending\" | \"error\" | \"success\" }\nexport type OptimisticUpdater<TData = unknown, TVariables = unknown> = (oldData: TData | undefined, variables: TVariables) => TData;\nexport type RollbackFunction<TData = unknown> = (previousData: TData, error: Error) => void;\nexport type ListUpdater<T extends EntityWithId> = { add: (items: T[] | undefined, newItem: T) => T[]; update: (items: T[] | undefined, updatedItem: Partial<T> & { id: T[\"id\"] }) => T[]; remove: (items: T[] | undefined, itemId: T[\"id\"]) => T[] };\nexport interface OptimisticGlobalConfig { enabledByDefault: boolean; defaultRollbackDelay: number; debugMode: boolean; maxRetries: number }\nexport interface BatchQueryStats { total: number; loading: number; success: number; error: number; stale: number; successRate: number; errorRate: number }\nexport interface BatchQueryConfig<TData = unknown, TError = Error> { enableStats?: boolean; enableBatchOperations?: boolean; autoRefreshInterval?: number; onBatchSuccess?: (results: TData[]) => void; onBatchError?: (errors: TError[]) => void; onBatchSettled?: (results: TData[], errors: TError[]) => void; retryConfig?: BatchRetryConfig; enablePartialSuccess?: boolean; onPartialSuccess?: (report: BatchOperationReport<TData, TError>) => void }\nexport interface BatchRetryConfig { maxRetries?: number; retryDelay?: number | ((attemptIndex: number) => number); retryOnlyFailed?: boolean; shouldRetry?: (error: Error, attemptCount: number) => boolean }\nexport interface BatchOperationReport<TData = unknown, TError = Error> { total: number; successful: number; failed: number; successResults: Array<{ index: number; data: TData }>; failureErrors: Array<{ index: number; error: TError; queryKey?: unknown[] }>; isPartialSuccess: boolean; isFullSuccess: boolean; isFullFailure: boolean; duration: number; retryCount?: number }\nexport interface BatchErrorAggregate<TError = Error> { totalErrors: number; errors: Array<{ index: number; error: TError; queryKey?: unknown[] }>; errorsByType: Map<string, TError[]>; firstError: TError | null; lastError: TError | null; errorSummary: string }\nexport interface BatchQueryOperations { refetchAll: () => Promise<PromiseSettledResult<unknown>[]>; invalidateAll: () => Promise<PromiseSettledResult<void>[]>; cancelAll: () => Promise<PromiseSettledResult<void>[]>; resetAll: () => Promise<PromiseSettledResult<void>[]>; removeAll: () => void; retryFailed: () => Promise<BatchOperationReport>; getErrorAggregate: () => BatchErrorAggregate; getOperationReport: () => BatchOperationReport }\nexport interface EnhancedBatchQueryResult<TData = unknown, TCombinedResult = TData, TError = Error> { data: TCombinedResult; stats: BatchQueryStats; operations: BatchQueryOperations; config: BatchQueryConfig<TData, TError> }"]}
@@ -0,0 +1,90 @@
1
+ 'use strict';
2
+
3
+ // src/utils/storage.ts
4
+ function getStorageByType(storageType) {
5
+ try {
6
+ switch (storageType) {
7
+ case "localStorage" /* LOCAL */:
8
+ return typeof window !== "undefined" ? window.localStorage : null;
9
+ case "sessionStorage" /* SESSION */:
10
+ return typeof window !== "undefined" ? window.sessionStorage : null;
11
+ default:
12
+ return null;
13
+ }
14
+ } catch {
15
+ return null;
16
+ }
17
+ }
18
+ function isStorageAvailable(storageType) {
19
+ try {
20
+ const storage = getStorageByType(storageType);
21
+ if (!storage) {
22
+ return false;
23
+ }
24
+ const testKey = "__storage_test__";
25
+ storage.setItem(testKey, "test");
26
+ storage.removeItem(testKey);
27
+ return true;
28
+ } catch {
29
+ return false;
30
+ }
31
+ }
32
+ function getStorageUsage(storageType) {
33
+ try {
34
+ const storage = getStorageByType(storageType);
35
+ if (!storage) {
36
+ return { type: storageType, used: 0, total: 0, usage: 0, available: false, error: "Storage not available" };
37
+ }
38
+ let used = 0;
39
+ for (let i = 0; i < storage.length; i++) {
40
+ const key = storage.key(i);
41
+ if (key) {
42
+ const value = storage.getItem(key);
43
+ if (value) {
44
+ used += key.length + value.length;
45
+ }
46
+ }
47
+ }
48
+ const total = storageType === "localStorage" /* LOCAL */ ? 5 * 1024 * 1024 : 5 * 1024 * 1024;
49
+ return { type: storageType, used, total, usage: used / total, available: true };
50
+ } catch (error) {
51
+ return { type: storageType, used: 0, total: 0, usage: 0, available: false, error: error instanceof Error ? error.message : "Unknown error" };
52
+ }
53
+ }
54
+ function formatBytes(bytes) {
55
+ if (bytes === 0) {
56
+ return "0 Bytes";
57
+ }
58
+ const k = 1024;
59
+ const sizes = ["Bytes", "KB", "MB", "GB"];
60
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
61
+ return `${Number.parseFloat((bytes / k ** i).toFixed(2))} ${sizes[i]}`;
62
+ }
63
+ function deepClone(obj) {
64
+ if (obj === null || typeof obj !== "object") {
65
+ return obj;
66
+ }
67
+ if (obj instanceof Date) {
68
+ return new Date(obj.getTime());
69
+ }
70
+ if (Array.isArray(obj)) {
71
+ return obj.map((item) => deepClone(item));
72
+ }
73
+ if (typeof obj === "object") {
74
+ const cloned = {};
75
+ for (const key in obj) {
76
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
77
+ cloned[key] = deepClone(obj[key]);
78
+ }
79
+ }
80
+ return cloned;
81
+ }
82
+ return obj;
83
+ }
84
+
85
+ exports.deepClone = deepClone;
86
+ exports.formatBytes = formatBytes;
87
+ exports.getStorageUsage = getStorageUsage;
88
+ exports.isStorageAvailable = isStorageAvailable;
89
+ //# sourceMappingURL=chunk-WEIXCDCA.cjs.map
90
+ //# sourceMappingURL=chunk-WEIXCDCA.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/storage.ts"],"names":[],"mappings":"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","file":"chunk-WEIXCDCA.cjs","sourcesContent":["import type { StorageInfo } from \"../types/persistence\";\nimport { StorageType } from \"../types/base.js\";\nfunction getStorageByType(storageType: StorageType): Storage | null {\n try {\n switch (storageType) {\n case StorageType.LOCAL:\n return typeof window !== \"undefined\" ? window.localStorage : null;\n case StorageType.SESSION:\n return typeof window !== \"undefined\" ? window.sessionStorage : null;\n default:\n return null;\n }\n } catch { return null; }\n}\nexport function isStorageAvailable(storageType: StorageType): boolean {\n try {\n const storage = getStorageByType(storageType);\n if (!storage) { return false; }\n const testKey = \"__storage_test__\";\n storage.setItem(testKey, \"test\");\n storage.removeItem(testKey);\n return true;\n } catch { return false; }\n}\nexport function getStorageUsage(storageType: StorageType): StorageInfo {\n try {\n const storage = getStorageByType(storageType);\n if (!storage) { return { type: storageType, used: 0, total: 0, usage: 0, available: false, error: \"Storage not available\" }; }\n let used = 0;\n for (let i = 0; i < storage.length; i++) {\n const key = storage.key(i);\n if (key) {\n const value = storage.getItem(key);\n if (value) { used += key.length + value.length; }\n }\n }\n const total = storageType === StorageType.LOCAL ? 5 * 1024 * 1024 : 5 * 1024 * 1024;\n return { type: storageType, used, total, usage: used / total, available: true };\n } catch (error) {\n return { type: storageType, used: 0, total: 0, usage: 0, available: false, error: error instanceof Error ? error.message : \"Unknown error\" };\n }\n}\nexport function formatBytes(bytes: number): string {\n if (bytes === 0) { return \"0 Bytes\"; }\n const k = 1024; const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\"]; const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${Number.parseFloat((bytes / k ** i).toFixed(2))} ${sizes[i]}`;\n}\nexport function deepClone<T>(obj: T): T {\n if (obj === null || typeof obj !== \"object\") { return obj; }\n if ((obj as any) instanceof Date) { return new Date((obj as any).getTime()) as T; }\n if (Array.isArray(obj)) { return obj.map((item) => deepClone(item)) as T; }\n if (typeof obj === \"object\") { const cloned = {} as T; for (const key in obj as any) { if (Object.prototype.hasOwnProperty.call(obj as any, key)) { (cloned as any)[key] = deepClone((obj as any)[key]); } } return cloned; }\n return obj;\n}"]}