@gravity-ui/data-source 0.6.1 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (278) hide show
  1. package/README.md +752 -15
  2. package/build/cjs/core/index.d.ts +3 -1
  3. package/build/cjs/core/index.js +7 -0
  4. package/build/cjs/core/index.js.map +1 -1
  5. package/build/cjs/core/types/DataManager.d.ts +5 -0
  6. package/build/cjs/core/types/DataManager.js.map +1 -1
  7. package/build/cjs/core/types/DataSource.d.ts +15 -19
  8. package/build/cjs/core/types/DataSource.js.map +1 -1
  9. package/build/cjs/core/types/Normalizer.d.ts +29 -0
  10. package/build/cjs/core/types/Normalizer.js +6 -0
  11. package/build/cjs/core/types/Normalizer.js.map +1 -0
  12. package/build/cjs/core/utils/__tests__/composeFullKey.test.js +34 -0
  13. package/build/cjs/core/utils/__tests__/composeFullKey.test.js.map +1 -0
  14. package/build/cjs/core/utils/__tests__/composeKey.test.js +32 -0
  15. package/build/cjs/core/utils/__tests__/composeKey.test.js.map +1 -0
  16. package/build/cjs/core/utils/__tests__/getError.test.js +31 -0
  17. package/build/cjs/core/utils/__tests__/getError.test.js.map +1 -0
  18. package/build/cjs/core/utils/__tests__/getStatus.test.js +49 -0
  19. package/build/cjs/core/utils/__tests__/getStatus.test.js.map +1 -0
  20. package/build/cjs/core/utils/__tests__/hasTag.test.js +31 -0
  21. package/build/cjs/core/utils/__tests__/hasTag.test.js.map +1 -0
  22. package/build/cjs/core/utils/__tests__/mergeStatuses.test.js +25 -0
  23. package/build/cjs/core/utils/__tests__/mergeStatuses.test.js.map +1 -0
  24. package/build/cjs/core/utils/__tests__/skipContext.test.js +70 -0
  25. package/build/cjs/core/utils/__tests__/skipContext.test.js.map +1 -0
  26. package/build/cjs/core/utils/__tests__/withCancellation.test.js +106 -0
  27. package/build/cjs/core/utils/__tests__/withCancellation.test.js.map +1 -0
  28. package/build/cjs/core/utils/__tests__/withCatch.test.js +208 -0
  29. package/build/cjs/core/utils/__tests__/withCatch.test.js.map +1 -0
  30. package/build/cjs/core/utils/withCatch.d.ts +26 -0
  31. package/build/cjs/core/utils/withCatch.js +37 -0
  32. package/build/cjs/core/utils/withCatch.js.map +1 -0
  33. package/build/cjs/react/DataManagerProvider.d.ts +7 -0
  34. package/build/cjs/react/DataManagerProvider.js +19 -0
  35. package/build/cjs/react/DataManagerProvider.js.map +1 -0
  36. package/build/cjs/react/__tests__/DataManagerContext.test.js +47 -0
  37. package/build/cjs/react/__tests__/DataManagerContext.test.js.map +1 -0
  38. package/build/cjs/react/__tests__/withDataManager.test.js +61 -0
  39. package/build/cjs/react/__tests__/withDataManager.test.js.map +1 -0
  40. package/build/cjs/react/components/DataInfiniteLoader/__tests__/DataInfiniteLoader.test.js +187 -0
  41. package/build/cjs/react/components/DataInfiniteLoader/__tests__/DataInfiniteLoader.test.js.map +1 -0
  42. package/build/cjs/react/components/DataLoader/__tests__/DataLoader.test.js +119 -0
  43. package/build/cjs/react/components/DataLoader/__tests__/DataLoader.test.js.map +1 -0
  44. package/build/cjs/react/index.d.ts +2 -0
  45. package/build/cjs/react/index.js +8 -0
  46. package/build/cjs/react/index.js.map +1 -1
  47. package/build/cjs/react/withDataManager.d.ts +1 -1
  48. package/build/cjs/react/withDataManager.js +3 -3
  49. package/build/cjs/react/withDataManager.js.map +1 -1
  50. package/build/cjs/react-query/ClientDataManager.d.ts +11 -2
  51. package/build/cjs/react-query/ClientDataManager.js +76 -9
  52. package/build/cjs/react-query/ClientDataManager.js.map +1 -1
  53. package/build/cjs/react-query/DataSourceProvider.d.ts +7 -0
  54. package/build/cjs/react-query/DataSourceProvider.js +35 -0
  55. package/build/cjs/react-query/DataSourceProvider.js.map +1 -0
  56. package/build/cjs/react-query/__tests__/createQueryNormalizer.test.js +177 -0
  57. package/build/cjs/react-query/__tests__/createQueryNormalizer.test.js.map +1 -0
  58. package/build/cjs/react-query/__tests__/normalizationEdgeCases.test.js +100 -0
  59. package/build/cjs/react-query/__tests__/normalizationEdgeCases.test.js.map +1 -0
  60. package/build/cjs/react-query/__tests__/subscriptions.test.js +1180 -0
  61. package/build/cjs/react-query/__tests__/subscriptions.test.js.map +1 -0
  62. package/build/cjs/react-query/__tests__/threeLevelIntegration.test.js +514 -0
  63. package/build/cjs/react-query/__tests__/threeLevelIntegration.test.js.map +1 -0
  64. package/build/cjs/react-query/__tests__/updateQueriesFromMutationData.test.js +229 -0
  65. package/build/cjs/react-query/__tests__/updateQueriesFromMutationData.test.js.map +1 -0
  66. package/build/cjs/react-query/constants.d.ts +2 -0
  67. package/build/cjs/react-query/constants.js +9 -0
  68. package/build/cjs/react-query/constants.js.map +1 -0
  69. package/build/cjs/react-query/hooks/__tests__/useQueryContext.test.js +55 -0
  70. package/build/cjs/react-query/hooks/__tests__/useQueryContext.test.js.map +1 -0
  71. package/build/cjs/react-query/hooks/__tests__/useQueryData.refetch.test.js +195 -0
  72. package/build/cjs/react-query/hooks/__tests__/useQueryData.refetch.test.js.map +1 -0
  73. package/build/cjs/react-query/hooks/__tests__/useQueryData.test.js +97 -0
  74. package/build/cjs/react-query/hooks/__tests__/useQueryData.test.js.map +1 -0
  75. package/build/cjs/react-query/hooks/__tests__/useQueryResponses.test.js +77 -0
  76. package/build/cjs/react-query/hooks/__tests__/useQueryResponses.test.js.map +1 -0
  77. package/build/cjs/react-query/hooks/__tests__/useRefetchAll.test.js +79 -0
  78. package/build/cjs/react-query/hooks/__tests__/useRefetchAll.test.js.map +1 -0
  79. package/build/cjs/react-query/hooks/__tests__/useRefetchErrored.test.js +117 -0
  80. package/build/cjs/react-query/hooks/__tests__/useRefetchErrored.test.js.map +1 -0
  81. package/build/cjs/react-query/hooks/__tests__/useRefetchInterval.test.js +156 -0
  82. package/build/cjs/react-query/hooks/__tests__/useRefetchInterval.test.js.map +1 -0
  83. package/build/cjs/react-query/hooks/useRefetchInterval.d.ts +1 -1
  84. package/build/cjs/react-query/impl/infinite/factory.d.ts +1 -1
  85. package/build/cjs/react-query/impl/infinite/factory.js.map +1 -1
  86. package/build/cjs/react-query/impl/infinite/hooks.js +4 -1
  87. package/build/cjs/react-query/impl/infinite/hooks.js.map +1 -1
  88. package/build/cjs/react-query/impl/infinite/types.d.ts +9 -9
  89. package/build/cjs/react-query/impl/infinite/types.js.map +1 -1
  90. package/build/cjs/react-query/impl/infinite/utils.js +11 -22
  91. package/build/cjs/react-query/impl/infinite/utils.js.map +1 -1
  92. package/build/cjs/react-query/impl/plain/factory.d.ts +1 -1
  93. package/build/cjs/react-query/impl/plain/factory.js.map +1 -1
  94. package/build/cjs/react-query/impl/plain/hooks.js +4 -1
  95. package/build/cjs/react-query/impl/plain/hooks.js.map +1 -1
  96. package/build/cjs/react-query/impl/plain/types.d.ts +6 -6
  97. package/build/cjs/react-query/impl/plain/types.js.map +1 -1
  98. package/build/cjs/react-query/impl/plain/utils.js +12 -23
  99. package/build/cjs/react-query/impl/plain/utils.js.map +1 -1
  100. package/build/cjs/react-query/index.d.ts +2 -0
  101. package/build/cjs/react-query/index.js +7 -0
  102. package/build/cjs/react-query/index.js.map +1 -1
  103. package/build/cjs/react-query/types/normalizer.d.ts +21 -0
  104. package/build/cjs/react-query/types/normalizer.js +6 -0
  105. package/build/cjs/react-query/types/normalizer.js.map +1 -0
  106. package/build/cjs/react-query/types/options.d.ts +12 -0
  107. package/build/cjs/react-query/types/options.js.map +1 -1
  108. package/build/cjs/react-query/utils/__tests__/formatNullableValue.test.js +27 -0
  109. package/build/cjs/react-query/utils/__tests__/formatNullableValue.test.js.map +1 -0
  110. package/build/cjs/react-query/utils/__tests__/getProgressiveRefetch.test.js +76 -0
  111. package/build/cjs/react-query/utils/__tests__/getProgressiveRefetch.test.js.map +1 -0
  112. package/build/cjs/react-query/utils/__tests__/normalizeStatus.test.js +30 -0
  113. package/build/cjs/react-query/utils/__tests__/normalizeStatus.test.js.map +1 -0
  114. package/build/cjs/react-query/utils/__tests__/notReachable.test.js +35 -0
  115. package/build/cjs/react-query/utils/__tests__/notReachable.test.js.map +1 -0
  116. package/build/cjs/react-query/utils/__tests__/parseNullableValue.test.js +27 -0
  117. package/build/cjs/react-query/utils/__tests__/parseNullableValue.test.js.map +1 -0
  118. package/build/cjs/react-query/utils/formatNullableValue.d.ts +2 -0
  119. package/build/cjs/react-query/utils/formatNullableValue.js +17 -0
  120. package/build/cjs/react-query/utils/formatNullableValue.js.map +1 -0
  121. package/build/cjs/react-query/utils/getProgressiveRefetch.d.ts +2 -2
  122. package/build/cjs/react-query/utils/normalize.d.ts +22 -0
  123. package/build/cjs/react-query/utils/normalize.js +150 -0
  124. package/build/cjs/react-query/utils/normalize.js.map +1 -0
  125. package/build/cjs/react-query/utils/parseNullableValue.d.ts +2 -0
  126. package/build/cjs/react-query/utils/parseNullableValue.js +17 -0
  127. package/build/cjs/react-query/utils/parseNullableValue.js.map +1 -0
  128. package/build/cjs/react-query/utils/warn.d.ts +1 -0
  129. package/build/cjs/react-query/utils/warn.js +15 -0
  130. package/build/cjs/react-query/utils/warn.js.map +1 -0
  131. package/build/cjs/react-query/utils/warnDisabledRefetch.d.ts +1 -0
  132. package/build/cjs/react-query/utils/warnDisabledRefetch.js +11 -0
  133. package/build/cjs/react-query/utils/warnDisabledRefetch.js.map +1 -0
  134. package/build/cjs/setupTests.d.ts +1 -0
  135. package/build/cjs/setupTests.js +4 -0
  136. package/build/cjs/setupTests.js.map +1 -0
  137. package/build/esm/core/index.d.ts +3 -1
  138. package/build/esm/core/index.js +1 -0
  139. package/build/esm/core/index.js.map +1 -1
  140. package/build/esm/core/types/DataManager.d.ts +5 -0
  141. package/build/esm/core/types/DataManager.js.map +1 -1
  142. package/build/esm/core/types/DataSource.d.ts +15 -19
  143. package/build/esm/core/types/DataSource.js.map +1 -1
  144. package/build/esm/core/types/Normalizer.d.ts +29 -0
  145. package/build/esm/core/types/Normalizer.js +2 -0
  146. package/build/esm/core/types/Normalizer.js.map +1 -0
  147. package/build/esm/core/utils/__tests__/composeFullKey.test.js +32 -0
  148. package/build/esm/core/utils/__tests__/composeFullKey.test.js.map +1 -0
  149. package/build/esm/core/utils/__tests__/composeKey.test.js +30 -0
  150. package/build/esm/core/utils/__tests__/composeKey.test.js.map +1 -0
  151. package/build/esm/core/utils/__tests__/getError.test.js +29 -0
  152. package/build/esm/core/utils/__tests__/getError.test.js.map +1 -0
  153. package/build/esm/core/utils/__tests__/getStatus.test.js +47 -0
  154. package/build/esm/core/utils/__tests__/getStatus.test.js.map +1 -0
  155. package/build/esm/core/utils/__tests__/hasTag.test.js +29 -0
  156. package/build/esm/core/utils/__tests__/hasTag.test.js.map +1 -0
  157. package/build/esm/core/utils/__tests__/mergeStatuses.test.js +23 -0
  158. package/build/esm/core/utils/__tests__/mergeStatuses.test.js.map +1 -0
  159. package/build/esm/core/utils/__tests__/skipContext.test.js +67 -0
  160. package/build/esm/core/utils/__tests__/skipContext.test.js.map +1 -0
  161. package/build/esm/core/utils/__tests__/withCancellation.test.js +104 -0
  162. package/build/esm/core/utils/__tests__/withCancellation.test.js.map +1 -0
  163. package/build/esm/core/utils/__tests__/withCatch.test.js +205 -0
  164. package/build/esm/core/utils/__tests__/withCatch.test.js.map +1 -0
  165. package/build/esm/core/utils/withCatch.d.ts +26 -0
  166. package/build/esm/core/utils/withCatch.js +31 -0
  167. package/build/esm/core/utils/withCatch.js.map +1 -0
  168. package/build/esm/react/DataManagerProvider.d.ts +7 -0
  169. package/build/esm/react/DataManagerProvider.js +12 -0
  170. package/build/esm/react/DataManagerProvider.js.map +1 -0
  171. package/build/esm/react/__tests__/DataManagerContext.test.js +44 -0
  172. package/build/esm/react/__tests__/DataManagerContext.test.js.map +1 -0
  173. package/build/esm/react/__tests__/withDataManager.test.js +58 -0
  174. package/build/esm/react/__tests__/withDataManager.test.js.map +1 -0
  175. package/build/esm/react/components/DataInfiniteLoader/__tests__/DataInfiniteLoader.test.js +184 -0
  176. package/build/esm/react/components/DataInfiniteLoader/__tests__/DataInfiniteLoader.test.js.map +1 -0
  177. package/build/esm/react/components/DataLoader/__tests__/DataLoader.test.js +116 -0
  178. package/build/esm/react/components/DataLoader/__tests__/DataLoader.test.js.map +1 -0
  179. package/build/esm/react/index.d.ts +2 -0
  180. package/build/esm/react/index.js +1 -0
  181. package/build/esm/react/index.js.map +1 -1
  182. package/build/esm/react/withDataManager.d.ts +1 -1
  183. package/build/esm/react/withDataManager.js +3 -3
  184. package/build/esm/react/withDataManager.js.map +1 -1
  185. package/build/esm/react-query/ClientDataManager.d.ts +11 -2
  186. package/build/esm/react-query/ClientDataManager.js +70 -3
  187. package/build/esm/react-query/ClientDataManager.js.map +1 -1
  188. package/build/esm/react-query/DataSourceProvider.d.ts +7 -0
  189. package/build/esm/react-query/DataSourceProvider.js +28 -0
  190. package/build/esm/react-query/DataSourceProvider.js.map +1 -0
  191. package/build/esm/react-query/__tests__/createQueryNormalizer.test.js +174 -0
  192. package/build/esm/react-query/__tests__/createQueryNormalizer.test.js.map +1 -0
  193. package/build/esm/react-query/__tests__/normalizationEdgeCases.test.js +98 -0
  194. package/build/esm/react-query/__tests__/normalizationEdgeCases.test.js.map +1 -0
  195. package/build/esm/react-query/__tests__/subscriptions.test.js +1176 -0
  196. package/build/esm/react-query/__tests__/subscriptions.test.js.map +1 -0
  197. package/build/esm/react-query/__tests__/threeLevelIntegration.test.js +511 -0
  198. package/build/esm/react-query/__tests__/threeLevelIntegration.test.js.map +1 -0
  199. package/build/esm/react-query/__tests__/updateQueriesFromMutationData.test.js +227 -0
  200. package/build/esm/react-query/__tests__/updateQueriesFromMutationData.test.js.map +1 -0
  201. package/build/esm/react-query/constants.d.ts +2 -0
  202. package/build/esm/react-query/constants.js +3 -0
  203. package/build/esm/react-query/constants.js.map +1 -0
  204. package/build/esm/react-query/hooks/__tests__/useQueryContext.test.js +52 -0
  205. package/build/esm/react-query/hooks/__tests__/useQueryContext.test.js.map +1 -0
  206. package/build/esm/react-query/hooks/__tests__/useQueryData.refetch.test.js +192 -0
  207. package/build/esm/react-query/hooks/__tests__/useQueryData.refetch.test.js.map +1 -0
  208. package/build/esm/react-query/hooks/__tests__/useQueryData.test.js +95 -0
  209. package/build/esm/react-query/hooks/__tests__/useQueryData.test.js.map +1 -0
  210. package/build/esm/react-query/hooks/__tests__/useQueryResponses.test.js +74 -0
  211. package/build/esm/react-query/hooks/__tests__/useQueryResponses.test.js.map +1 -0
  212. package/build/esm/react-query/hooks/__tests__/useRefetchAll.test.js +77 -0
  213. package/build/esm/react-query/hooks/__tests__/useRefetchAll.test.js.map +1 -0
  214. package/build/esm/react-query/hooks/__tests__/useRefetchErrored.test.js +115 -0
  215. package/build/esm/react-query/hooks/__tests__/useRefetchErrored.test.js.map +1 -0
  216. package/build/esm/react-query/hooks/__tests__/useRefetchInterval.test.js +154 -0
  217. package/build/esm/react-query/hooks/__tests__/useRefetchInterval.test.js.map +1 -0
  218. package/build/esm/react-query/hooks/useRefetchInterval.d.ts +1 -1
  219. package/build/esm/react-query/impl/infinite/factory.d.ts +1 -1
  220. package/build/esm/react-query/impl/infinite/factory.js.map +1 -1
  221. package/build/esm/react-query/impl/infinite/hooks.js +5 -2
  222. package/build/esm/react-query/impl/infinite/hooks.js.map +1 -1
  223. package/build/esm/react-query/impl/infinite/types.d.ts +9 -9
  224. package/build/esm/react-query/impl/infinite/types.js.map +1 -1
  225. package/build/esm/react-query/impl/infinite/utils.js +9 -20
  226. package/build/esm/react-query/impl/infinite/utils.js.map +1 -1
  227. package/build/esm/react-query/impl/plain/factory.d.ts +1 -1
  228. package/build/esm/react-query/impl/plain/factory.js.map +1 -1
  229. package/build/esm/react-query/impl/plain/hooks.js +5 -2
  230. package/build/esm/react-query/impl/plain/hooks.js.map +1 -1
  231. package/build/esm/react-query/impl/plain/types.d.ts +6 -6
  232. package/build/esm/react-query/impl/plain/types.js.map +1 -1
  233. package/build/esm/react-query/impl/plain/utils.js +10 -21
  234. package/build/esm/react-query/impl/plain/utils.js.map +1 -1
  235. package/build/esm/react-query/index.d.ts +2 -0
  236. package/build/esm/react-query/index.js +1 -0
  237. package/build/esm/react-query/index.js.map +1 -1
  238. package/build/esm/react-query/types/normalizer.d.ts +21 -0
  239. package/build/esm/react-query/types/normalizer.js +2 -0
  240. package/build/esm/react-query/types/normalizer.js.map +1 -0
  241. package/build/esm/react-query/types/options.d.ts +12 -0
  242. package/build/esm/react-query/types/options.js.map +1 -1
  243. package/build/esm/react-query/utils/__tests__/formatNullableValue.test.js +25 -0
  244. package/build/esm/react-query/utils/__tests__/formatNullableValue.test.js.map +1 -0
  245. package/build/esm/react-query/utils/__tests__/getProgressiveRefetch.test.js +74 -0
  246. package/build/esm/react-query/utils/__tests__/getProgressiveRefetch.test.js.map +1 -0
  247. package/build/esm/react-query/utils/__tests__/normalizeStatus.test.js +28 -0
  248. package/build/esm/react-query/utils/__tests__/normalizeStatus.test.js.map +1 -0
  249. package/build/esm/react-query/utils/__tests__/notReachable.test.js +33 -0
  250. package/build/esm/react-query/utils/__tests__/notReachable.test.js.map +1 -0
  251. package/build/esm/react-query/utils/__tests__/parseNullableValue.test.js +25 -0
  252. package/build/esm/react-query/utils/__tests__/parseNullableValue.test.js.map +1 -0
  253. package/build/esm/react-query/utils/formatNullableValue.d.ts +2 -0
  254. package/build/esm/react-query/utils/formatNullableValue.js +11 -0
  255. package/build/esm/react-query/utils/formatNullableValue.js.map +1 -0
  256. package/build/esm/react-query/utils/getProgressiveRefetch.d.ts +2 -2
  257. package/build/esm/react-query/utils/normalize.d.ts +22 -0
  258. package/build/esm/react-query/utils/normalize.js +143 -0
  259. package/build/esm/react-query/utils/normalize.js.map +1 -0
  260. package/build/esm/react-query/utils/parseNullableValue.d.ts +2 -0
  261. package/build/esm/react-query/utils/parseNullableValue.js +11 -0
  262. package/build/esm/react-query/utils/parseNullableValue.js.map +1 -0
  263. package/build/esm/react-query/utils/warn.d.ts +1 -0
  264. package/build/esm/react-query/utils/warn.js +9 -0
  265. package/build/esm/react-query/utils/warn.js.map +1 -0
  266. package/build/esm/react-query/utils/warnDisabledRefetch.d.ts +1 -0
  267. package/build/esm/react-query/utils/warnDisabledRefetch.js +5 -0
  268. package/build/esm/react-query/utils/warnDisabledRefetch.js.map +1 -0
  269. package/build/esm/setupTests.d.ts +1 -0
  270. package/build/esm/setupTests.js +2 -0
  271. package/build/esm/setupTests.js.map +1 -0
  272. package/package.json +18 -13
  273. package/build/cjs/react-query/impl/utils.d.ts +0 -4
  274. package/build/cjs/react-query/impl/utils.js +0 -27
  275. package/build/cjs/react-query/impl/utils.js.map +0 -1
  276. package/build/esm/react-query/impl/utils.d.ts +0 -4
  277. package/build/esm/react-query/impl/utils.js +0 -21
  278. package/build/esm/react-query/impl/utils.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"names":["_reactQuery","require","_core","_interopRequireDefault","e","__esModule","default","ClientDataManager","exports","_config$defaultOption","_config$defaultOption2","config","arguments","length","undefined","_classCallCheck","queryClient","QueryClient","_objectSpread","defaultOptions","queries","networkMode","mutations","_createClass","key","value","invalidateTag","tag","invalidateOptions","invalidateQueries","predicate","_ref","queryKey","hasTag","invalidateTags","tags","_ref2","every","invalidateSource","dataSource","name","resetSource","resetQueries","invalidateParams","params","composeFullKey","exact","resetParams","invalidateSourceTags","slice","filters","_this","invalidate","repeatInvalidate","repeat","i","count","setTimeout","interval"],"sources":["ClientDataManager.ts"],"sourcesContent":["import type {InvalidateQueryFilters, QueryClientConfig} from '@tanstack/react-query';\nimport {QueryClient} from '@tanstack/react-query';\n\nimport {\n type AnyDataSource,\n type DataManager,\n type DataSourceParams,\n type DataSourceTag,\n composeFullKey,\n hasTag,\n} from '../core';\nimport type {InvalidateOptions, InvalidateRepeatOptions} from '../core/types/DataManagerOptions';\n\nexport type ClientDataManagerConfig = QueryClientConfig;\n\nexport class ClientDataManager implements DataManager {\n readonly queryClient: QueryClient;\n\n constructor(config: ClientDataManagerConfig = {}) {\n this.queryClient = new QueryClient({\n ...config,\n defaultOptions: {\n ...config.defaultOptions,\n queries: {\n networkMode: 'always',\n ...config.defaultOptions?.queries,\n },\n mutations: {\n networkMode: 'always',\n ...config.defaultOptions?.mutations,\n },\n },\n });\n }\n\n invalidateTag(tag: DataSourceTag, invalidateOptions?: InvalidateOptions) {\n return this.invalidateQueries(\n {\n predicate: ({queryKey}) => hasTag(queryKey, tag),\n },\n invalidateOptions,\n );\n }\n\n invalidateTags(tags: DataSourceTag[], invalidateOptions?: InvalidateOptions) {\n return this.invalidateQueries(\n {\n predicate: ({queryKey}) => tags.every((tag) => hasTag(queryKey, tag)),\n },\n invalidateOptions,\n );\n }\n\n invalidateSource<TDataSource extends AnyDataSource>(\n dataSource: TDataSource,\n invalidateOptions?: InvalidateOptions,\n ) {\n return this.invalidateQueries(\n {\n // First element is a data source name\n queryKey: [dataSource.name],\n },\n invalidateOptions,\n );\n }\n\n resetSource<TDataSource extends AnyDataSource>(dataSource: TDataSource) {\n return this.queryClient.resetQueries({\n // First element is a data source name\n queryKey: [dataSource.name],\n });\n }\n\n invalidateParams<TDataSource extends AnyDataSource>(\n dataSource: TDataSource,\n params: DataSourceParams<TDataSource>,\n invalidateOptions?: InvalidateOptions,\n ) {\n return this.invalidateQueries(\n {\n queryKey: composeFullKey(dataSource, params),\n exact: true,\n },\n invalidateOptions,\n );\n }\n\n resetParams<TDataSource extends AnyDataSource>(\n dataSource: TDataSource,\n params: DataSourceParams<TDataSource>,\n ) {\n return this.queryClient.resetQueries({\n queryKey: composeFullKey(dataSource, params),\n exact: true,\n });\n }\n\n invalidateSourceTags<TDataSource extends AnyDataSource>(\n dataSource: TDataSource,\n params: DataSourceParams<TDataSource>,\n invalidateOptions?: InvalidateOptions,\n ) {\n return this.invalidateQueries(\n {\n // Last element is a full key\n queryKey: composeFullKey(dataSource, params).slice(0, -1),\n },\n invalidateOptions,\n );\n }\n\n protected invalidateQueries(\n filters: InvalidateQueryFilters,\n invalidateOptions?: InvalidateOptions,\n ) {\n const invalidate = () => this.queryClient.invalidateQueries(filters);\n\n this.repeatInvalidate(invalidate, invalidateOptions?.repeat);\n\n return invalidate();\n }\n\n protected repeatInvalidate(invalidate: () => Promise<void>, repeat?: InvalidateRepeatOptions) {\n if (!repeat) {\n return;\n }\n\n for (let i = 1; i <= repeat.count; i++) {\n setTimeout(invalidate, repeat.interval * i);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_core","require","_reactQuery","_core2","_normalize","_interopRequireDefault","e","__esModule","default","ClientDataManager","exports","_config$defaultOption","_config$defaultOption2","_this","config","arguments","length","undefined","_classCallCheck","queryClient","normalizer","queryNormalizer","QueryClient","_objectSpread","defaultOptions","queries","networkMode","mutations","createNormalize","normalizerConfig","createQueryNormalizer","data","optimisticUpdate","invalidateData","_createClass","key","value","mutationData","_this2","queriesToUpdate","getQueriesToUpdate","forEach","query","queryKey","JSON","parse","cachedQuery","getQueryCache","find","dataUpdatedAt","state","isInvalidated","error","status","setQueryData","updatedAt","setState","_this3","invalidateQueries","invalidateTag","tag","invalidateOptions","predicate","_ref","hasTag","invalidateTags","tags","_ref2","every","invalidateSource","dataSource","name","resetSource","resetQueries","invalidateParams","params","composeFullKey","exact","resetParams","invalidateSourceTags","slice","filters","_this4","invalidate","repeatInvalidate","repeat","i","count","setTimeout","interval","createNormalizer"],"sources":["ClientDataManager.ts"],"sourcesContent":["import type {Data} from '@normy/core';\nimport {createNormalizer} from '@normy/core';\nimport type {InvalidateQueryFilters, QueryClientConfig, QueryKey} from '@tanstack/react-query';\nimport {QueryClient} from '@tanstack/react-query';\n\nimport {\n type AnyDataSource,\n type DataManager,\n type DataSourceParams,\n type DataSourceTag,\n type Normalizer,\n type NormalizerConfig,\n composeFullKey,\n hasTag,\n} from '../core';\nimport type {InvalidateOptions, InvalidateRepeatOptions} from '../core/types/DataManagerOptions';\n\nimport type {QueryNormalizer} from './types/normalizer';\nimport {createQueryNormalizer} from './utils/normalize';\n\nexport interface ClientDataManagerConfig extends QueryClientConfig {\n normalizerConfig?: NormalizerConfig | boolean;\n}\n\nexport class ClientDataManager implements DataManager {\n readonly queryClient: QueryClient;\n readonly normalizer?: Normalizer | undefined;\n readonly queryNormalizer?: QueryNormalizer | undefined;\n\n constructor(config: ClientDataManagerConfig = {}) {\n this.queryClient = new QueryClient({\n ...config,\n defaultOptions: {\n ...config.defaultOptions,\n queries: {\n networkMode: 'always',\n ...config.defaultOptions?.queries,\n },\n mutations: {\n networkMode: 'always',\n ...config.defaultOptions?.mutations,\n },\n },\n });\n\n this.normalizer = this.createNormalize(config.normalizerConfig);\n this.queryNormalizer = createQueryNormalizer(\n this.normalizer,\n this.queryClient,\n config.normalizerConfig,\n (data) => this.optimisticUpdate(data),\n (data) => this.invalidateData(data),\n );\n }\n\n optimisticUpdate(mutationData: Data) {\n if (!this.normalizer) {\n return;\n }\n\n const queriesToUpdate = this.normalizer.getQueriesToUpdate(mutationData);\n\n queriesToUpdate.forEach((query) => {\n const queryKey = JSON.parse(query.queryKey) as QueryKey;\n\n const cachedQuery = this.queryClient.getQueryCache().find({queryKey});\n\n const dataUpdatedAt = cachedQuery?.state.dataUpdatedAt;\n const isInvalidated = cachedQuery?.state.isInvalidated;\n const error = cachedQuery?.state.error;\n const status = cachedQuery?.state.status;\n\n this.queryClient.setQueryData(queryKey, () => query.data, {\n updatedAt: dataUpdatedAt,\n });\n\n cachedQuery?.setState({isInvalidated, error, status});\n });\n }\n\n invalidateData(data: Data): void {\n if (!this.normalizer) {\n return;\n }\n\n const queriesToUpdate = this.normalizer.getQueriesToUpdate(data);\n\n queriesToUpdate.forEach((query) => {\n const queryKey = JSON.parse(query.queryKey) as QueryKey;\n this.queryClient.invalidateQueries({queryKey});\n });\n }\n\n invalidateTag(tag: DataSourceTag, invalidateOptions?: InvalidateOptions) {\n return this.invalidateQueries(\n {\n predicate: ({queryKey}) => hasTag(queryKey, tag),\n },\n invalidateOptions,\n );\n }\n\n invalidateTags(tags: DataSourceTag[], invalidateOptions?: InvalidateOptions) {\n return this.invalidateQueries(\n {\n predicate: ({queryKey}) => tags.every((tag) => hasTag(queryKey, tag)),\n },\n invalidateOptions,\n );\n }\n\n invalidateSource<TDataSource extends AnyDataSource>(\n dataSource: TDataSource,\n invalidateOptions?: InvalidateOptions,\n ) {\n return this.invalidateQueries(\n {\n // First element is a data source name\n queryKey: [dataSource.name],\n },\n invalidateOptions,\n );\n }\n\n resetSource<TDataSource extends AnyDataSource>(dataSource: TDataSource) {\n return this.queryClient.resetQueries({\n // First element is a data source name\n queryKey: [dataSource.name],\n });\n }\n\n invalidateParams<TDataSource extends AnyDataSource>(\n dataSource: TDataSource,\n params: DataSourceParams<TDataSource>,\n invalidateOptions?: InvalidateOptions,\n ) {\n return this.invalidateQueries(\n {\n queryKey: composeFullKey(dataSource, params),\n exact: true,\n },\n invalidateOptions,\n );\n }\n\n resetParams<TDataSource extends AnyDataSource>(\n dataSource: TDataSource,\n params: DataSourceParams<TDataSource>,\n ) {\n return this.queryClient.resetQueries({\n queryKey: composeFullKey(dataSource, params),\n exact: true,\n });\n }\n\n invalidateSourceTags<TDataSource extends AnyDataSource>(\n dataSource: TDataSource,\n params: DataSourceParams<TDataSource>,\n invalidateOptions?: InvalidateOptions,\n ) {\n return this.invalidateQueries(\n {\n // Last element is a full key\n queryKey: composeFullKey(dataSource, params).slice(0, -1),\n },\n invalidateOptions,\n );\n }\n\n protected invalidateQueries(\n filters: InvalidateQueryFilters,\n invalidateOptions?: InvalidateOptions,\n ) {\n const invalidate = () => this.queryClient.invalidateQueries(filters);\n\n this.repeatInvalidate(invalidate, invalidateOptions?.repeat);\n\n return invalidate();\n }\n\n protected repeatInvalidate(invalidate: () => Promise<void>, repeat?: InvalidateRepeatOptions) {\n if (!repeat) {\n return;\n }\n\n for (let i = 1; i <= repeat.count; i++) {\n setTimeout(invalidate, repeat.interval * i);\n }\n }\n\n private createNormalize(\n config: boolean | NormalizerConfig | undefined,\n ): Normalizer | undefined {\n if (!config) {\n return undefined;\n }\n\n if (config === true) {\n return createNormalizer({});\n }\n\n return createNormalizer(config);\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,7 @@
1
+ import React from 'react';
2
+ import type { ClientDataManager } from './ClientDataManager';
3
+ export interface DataSourceProviderProps {
4
+ dataManager: ClientDataManager;
5
+ children: React.ReactNode;
6
+ }
7
+ export declare const DataSourceProvider: React.FC<DataSourceProviderProps>;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.DataSourceProvider = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _reactQuery = require("@tanstack/react-query");
9
+ var _DataManagerProvider = require("../react/DataManagerProvider");
10
+ var _jsxRuntime = require("react/jsx-runtime");
11
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
12
+ var DataSourceProvider = exports.DataSourceProvider = function DataSourceProvider(_ref) {
13
+ var children = _ref.children,
14
+ dataManager = _ref.dataManager;
15
+ _react.default.useEffect(function () {
16
+ if (!dataManager.queryNormalizer) {
17
+ return undefined;
18
+ }
19
+ dataManager.queryNormalizer.subscribe();
20
+ return function () {
21
+ var _dataManager$queryNor, _dataManager$queryNor2;
22
+ (_dataManager$queryNor = dataManager.queryNormalizer) === null || _dataManager$queryNor === void 0 || _dataManager$queryNor.unsubscribe();
23
+ (_dataManager$queryNor2 = dataManager.queryNormalizer) === null || _dataManager$queryNor2 === void 0 || _dataManager$queryNor2.clear();
24
+ };
25
+ // eslint-disable-next-line react-hooks/exhaustive-deps
26
+ }, []);
27
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactQuery.QueryClientProvider, {
28
+ client: dataManager.queryClient,
29
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_DataManagerProvider.DataManagerProvider, {
30
+ dataManager: dataManager,
31
+ children: children
32
+ })
33
+ });
34
+ };
35
+ // #sourceMappingURL=DataSourceProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_react","_interopRequireDefault","require","_reactQuery","_DataManagerProvider","_jsxRuntime","e","__esModule","default","DataSourceProvider","exports","_ref","children","dataManager","React","useEffect","queryNormalizer","undefined","subscribe","_dataManager$queryNor","_dataManager$queryNor2","unsubscribe","clear","_jsx","QueryClientProvider","client","queryClient","DataManagerProvider"],"sources":["DataSourceProvider.tsx"],"sourcesContent":["import React from 'react';\n\nimport {QueryClientProvider} from '@tanstack/react-query';\n\nimport {DataManagerProvider} from '../react/DataManagerProvider';\n\nimport type {ClientDataManager} from './ClientDataManager';\n\nexport interface DataSourceProviderProps {\n dataManager: ClientDataManager;\n children: React.ReactNode;\n}\n\nexport const DataSourceProvider: React.FC<DataSourceProviderProps> = ({children, dataManager}) => {\n React.useEffect(() => {\n if (!dataManager.queryNormalizer) {\n return undefined;\n }\n\n dataManager.queryNormalizer.subscribe();\n\n return () => {\n dataManager.queryNormalizer?.unsubscribe();\n dataManager.queryNormalizer?.clear();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <QueryClientProvider client={dataManager.queryClient}>\n <DataManagerProvider dataManager={dataManager}>{children}</DataManagerProvider>\n </QueryClientProvider>\n );\n};\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,WAAA,GAAAD,OAAA;AAEA,IAAAE,oBAAA,GAAAF,OAAA;AAAiE,IAAAG,WAAA,GAAAH,OAAA;AAAA,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAS1D,IAAMG,kBAAqD,GAAAC,OAAA,CAAAD,kBAAA,GAAG,SAAxDA,kBAAqDA,CAAAE,IAAA,EAAgC;EAAA,IAA3BC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;IAAEC,WAAW,GAAAF,IAAA,CAAXE,WAAW;EACxFC,cAAK,CAACC,SAAS,CAAC,YAAM;IAClB,IAAI,CAACF,WAAW,CAACG,eAAe,EAAE;MAC9B,OAAOC,SAAS;IACpB;IAEAJ,WAAW,CAACG,eAAe,CAACE,SAAS,CAAC,CAAC;IAEvC,OAAO,YAAM;MAAA,IAAAC,qBAAA,EAAAC,sBAAA;MACT,CAAAD,qBAAA,GAAAN,WAAW,CAACG,eAAe,cAAAG,qBAAA,eAA3BA,qBAAA,CAA6BE,WAAW,CAAC,CAAC;MAC1C,CAAAD,sBAAA,GAAAP,WAAW,CAACG,eAAe,cAAAI,sBAAA,eAA3BA,sBAAA,CAA6BE,KAAK,CAAC,CAAC;IACxC,CAAC;IACD;EACJ,CAAC,EAAE,EAAE,CAAC;EAEN,oBACI,IAAAC,eAAA,EAACC,+BAAmB;IAACC,MAAM,EAAEZ,WAAW,CAACa,WAAY;IAAAd,QAAA,eACjD,IAAAW,eAAA,EAACI,wCAAmB;MAACd,WAAW,EAAEA,WAAY;MAAAD,QAAA,EAAEA;IAAQ,CAAsB;EAAC,CAC9D,CAAC;AAE9B,CAAC","ignoreList":[]}
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+
3
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
4
+ var _ClientDataManager = require("../ClientDataManager");
5
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
6
+ describe('QueryNormalizer API', function () {
7
+ var dataManager;
8
+ beforeEach(function () {
9
+ dataManager = new _ClientDataManager.ClientDataManager({
10
+ defaultOptions: {
11
+ queries: {
12
+ retry: false
13
+ },
14
+ mutations: {
15
+ retry: false
16
+ }
17
+ },
18
+ normalizerConfig: {
19
+ devLogging: false
20
+ }
21
+ });
22
+ });
23
+ afterEach(function () {
24
+ dataManager.queryClient.clear();
25
+ });
26
+ it('should create queryNormalizer with required methods', function () {
27
+ var _dataManager$queryNor, _dataManager$queryNor2, _dataManager$queryNor3, _dataManager$queryNor4, _dataManager$queryNor5, _dataManager$queryNor6, _dataManager$queryNor7, _dataManager$queryNor8, _dataManager$queryNor9;
28
+ expect(dataManager.queryNormalizer).toBeDefined();
29
+ expect((_dataManager$queryNor = dataManager.queryNormalizer) === null || _dataManager$queryNor === void 0 ? void 0 : _dataManager$queryNor.getNormalizedData).toBeDefined();
30
+ expect((_dataManager$queryNor2 = dataManager.queryNormalizer) === null || _dataManager$queryNor2 === void 0 ? void 0 : _dataManager$queryNor2.setNormalizedData).toBeDefined();
31
+ expect((_dataManager$queryNor3 = dataManager.queryNormalizer) === null || _dataManager$queryNor3 === void 0 ? void 0 : _dataManager$queryNor3.clear).toBeDefined();
32
+ expect((_dataManager$queryNor4 = dataManager.queryNormalizer) === null || _dataManager$queryNor4 === void 0 ? void 0 : _dataManager$queryNor4.getObjectById).toBeDefined();
33
+ expect((_dataManager$queryNor5 = dataManager.queryNormalizer) === null || _dataManager$queryNor5 === void 0 ? void 0 : _dataManager$queryNor5.getQueryFragment).toBeDefined();
34
+ expect((_dataManager$queryNor6 = dataManager.queryNormalizer) === null || _dataManager$queryNor6 === void 0 ? void 0 : _dataManager$queryNor6.getDependentQueries).toBeDefined();
35
+ expect((_dataManager$queryNor7 = dataManager.queryNormalizer) === null || _dataManager$queryNor7 === void 0 ? void 0 : _dataManager$queryNor7.getDependentQueriesByIds).toBeDefined();
36
+ expect((_dataManager$queryNor8 = dataManager.queryNormalizer) === null || _dataManager$queryNor8 === void 0 ? void 0 : _dataManager$queryNor8.subscribe).toBeDefined();
37
+ expect((_dataManager$queryNor9 = dataManager.queryNormalizer) === null || _dataManager$queryNor9 === void 0 ? void 0 : _dataManager$queryNor9.unsubscribe).toBeDefined();
38
+ });
39
+ it('getNormalizedData should return normalized data', function () {
40
+ expect(dataManager.queryNormalizer).toBeDefined();
41
+ var data = dataManager.queryNormalizer.getNormalizedData();
42
+ expect(data).toBeDefined();
43
+ expect(data.objects).toBeDefined();
44
+ expect(data.queries).toBeDefined();
45
+ });
46
+ it('setNormalizedData should update queries', function () {
47
+ expect(dataManager.normalizer).toBeDefined();
48
+ expect(dataManager.queryNormalizer).toBeDefined();
49
+ var queryKey = ['users'];
50
+ dataManager.queryClient.setQueryData(queryKey, [{
51
+ id: '1',
52
+ name: 'Old'
53
+ }]);
54
+ dataManager.normalizer.setQuery(JSON.stringify(queryKey), [{
55
+ id: '1',
56
+ name: 'Old'
57
+ }]);
58
+ dataManager.queryNormalizer.setNormalizedData({
59
+ id: '1',
60
+ name: 'New'
61
+ });
62
+ var data = dataManager.queryClient.getQueryData(queryKey);
63
+ expect(data[0].name).toBe('New');
64
+ });
65
+ it('clear should clear normalized data', function () {
66
+ expect(dataManager.normalizer).toBeDefined();
67
+ expect(dataManager.queryNormalizer).toBeDefined();
68
+ var queryKey = ['users'];
69
+ dataManager.queryClient.setQueryData(queryKey, [{
70
+ id: '1',
71
+ name: 'User'
72
+ }]);
73
+ dataManager.normalizer.setQuery(JSON.stringify(queryKey), [{
74
+ id: '1',
75
+ name: 'User'
76
+ }]);
77
+ dataManager.queryNormalizer.clear();
78
+ var data = dataManager.queryNormalizer.getNormalizedData();
79
+ expect(Object.keys(data.objects)).toHaveLength(0);
80
+ });
81
+ it('getObjectById should return object by ID', function () {
82
+ expect(dataManager.normalizer).toBeDefined();
83
+ expect(dataManager.queryNormalizer).toBeDefined();
84
+ var queryKey = ['users'];
85
+ var userData = [{
86
+ id: '1',
87
+ name: 'User 1'
88
+ }];
89
+
90
+ // Add to normalizer
91
+ dataManager.normalizer.setQuery(JSON.stringify(queryKey), userData);
92
+
93
+ // Get normalized data
94
+ var normalized = dataManager.queryNormalizer.getNormalizedData();
95
+ expect(Object.keys(normalized.objects).length).toBeGreaterThan(0);
96
+
97
+ // getObjectById should be defined and available
98
+ expect(dataManager.queryNormalizer.getObjectById).toBeDefined();
99
+ expect((0, _typeof2.default)(dataManager.queryNormalizer.getObjectById)).toBe('function');
100
+ });
101
+ it('getDependentQueries should return dependent queries', function () {
102
+ expect(dataManager.normalizer).toBeDefined();
103
+ expect(dataManager.queryNormalizer).toBeDefined();
104
+ var queryKey1 = ['users'];
105
+ var queryKey2 = ['user', '1'];
106
+ dataManager.queryClient.setQueryData(queryKey1, [{
107
+ id: '1',
108
+ name: 'User'
109
+ }]);
110
+ dataManager.queryClient.setQueryData(queryKey2, {
111
+ id: '1',
112
+ name: 'User'
113
+ });
114
+ dataManager.normalizer.setQuery(JSON.stringify(queryKey1), [{
115
+ id: '1',
116
+ name: 'User'
117
+ }]);
118
+ dataManager.normalizer.setQuery(JSON.stringify(queryKey2), {
119
+ id: '1',
120
+ name: 'User'
121
+ });
122
+ var dependentQueries = dataManager.queryNormalizer.getDependentQueries({
123
+ id: '1',
124
+ name: 'Updated'
125
+ });
126
+ expect(dependentQueries.length).toBeGreaterThan(0);
127
+ });
128
+ it('getDependentQueriesByIds should be available', function () {
129
+ expect(dataManager.queryNormalizer).toBeDefined();
130
+
131
+ // getDependentQueriesByIds should be defined and available
132
+ expect(dataManager.queryNormalizer.getDependentQueriesByIds).toBeDefined();
133
+ expect((0, _typeof2.default)(dataManager.queryNormalizer.getDependentQueriesByIds)).toBe('function');
134
+
135
+ // Call with empty array should not throw
136
+ var result = dataManager.queryNormalizer.getDependentQueriesByIds([]);
137
+ expect(Array.isArray(result)).toBe(true);
138
+ });
139
+ it('should not create queryNormalizer when normalizerConfig is false', function () {
140
+ var dmWithoutNormalizer = new _ClientDataManager.ClientDataManager({
141
+ normalizerConfig: false
142
+ });
143
+ expect(dmWithoutNormalizer.normalizer).toBeUndefined();
144
+ expect(dmWithoutNormalizer.queryNormalizer).toBeUndefined();
145
+ });
146
+ it('should not create queryNormalizer when normalizerConfig is undefined', function () {
147
+ var dmWithoutNormalizer = new _ClientDataManager.ClientDataManager({});
148
+ expect(dmWithoutNormalizer.normalizer).toBeUndefined();
149
+ expect(dmWithoutNormalizer.queryNormalizer).toBeUndefined();
150
+ });
151
+ it('should create queryNormalizer when normalizerConfig is true', function () {
152
+ var dmWithNormalizer = new _ClientDataManager.ClientDataManager({
153
+ normalizerConfig: true
154
+ });
155
+ expect(dmWithNormalizer.normalizer).toBeDefined();
156
+ expect(dmWithNormalizer.queryNormalizer).toBeDefined();
157
+ });
158
+ it('should work correctly with optimisticUpdate via setNormalizedData', function () {
159
+ expect(dataManager.normalizer).toBeDefined();
160
+ expect(dataManager.queryNormalizer).toBeDefined();
161
+ var queryKey = ['users'];
162
+ var initialData = [{
163
+ id: '1',
164
+ name: 'Old Name'
165
+ }];
166
+ dataManager.queryClient.setQueryData(queryKey, initialData);
167
+ dataManager.normalizer.setQuery(JSON.stringify(queryKey), initialData);
168
+ var mutationData = {
169
+ id: '1',
170
+ name: 'New Name'
171
+ };
172
+ dataManager.queryNormalizer.setNormalizedData(mutationData);
173
+ var updatedData = dataManager.queryClient.getQueryData(queryKey);
174
+ expect(updatedData[0].name).toBe('New Name');
175
+ });
176
+ });
177
+ // #sourceMappingURL=createQueryNormalizer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_ClientDataManager","require","_interopRequireDefault","e","__esModule","default","describe","dataManager","beforeEach","ClientDataManager","defaultOptions","queries","retry","mutations","normalizerConfig","devLogging","afterEach","queryClient","clear","it","_dataManager$queryNor","_dataManager$queryNor2","_dataManager$queryNor3","_dataManager$queryNor4","_dataManager$queryNor5","_dataManager$queryNor6","_dataManager$queryNor7","_dataManager$queryNor8","_dataManager$queryNor9","expect","queryNormalizer","toBeDefined","getNormalizedData","setNormalizedData","getObjectById","getQueryFragment","getDependentQueries","getDependentQueriesByIds","subscribe","unsubscribe","data","objects","normalizer","queryKey","setQueryData","id","name","setQuery","JSON","stringify","getQueryData","toBe","Object","keys","toHaveLength","userData","normalized","length","toBeGreaterThan","_typeof","queryKey1","queryKey2","dependentQueries","result","Array","isArray","dmWithoutNormalizer","toBeUndefined","dmWithNormalizer","initialData","mutationData","updatedData"],"sources":["createQueryNormalizer.test.tsx"],"sourcesContent":["import type {Data} from '@normy/core';\n\nimport {ClientDataManager} from '../ClientDataManager';\n\ndescribe('QueryNormalizer API', () => {\n let dataManager: ClientDataManager;\n\n beforeEach(() => {\n dataManager = new ClientDataManager({\n defaultOptions: {\n queries: {retry: false},\n mutations: {retry: false},\n },\n normalizerConfig: {\n devLogging: false,\n },\n });\n });\n\n afterEach(() => {\n dataManager.queryClient.clear();\n });\n\n it('should create queryNormalizer with required methods', () => {\n expect(dataManager.queryNormalizer).toBeDefined();\n expect(dataManager.queryNormalizer?.getNormalizedData).toBeDefined();\n expect(dataManager.queryNormalizer?.setNormalizedData).toBeDefined();\n expect(dataManager.queryNormalizer?.clear).toBeDefined();\n expect(dataManager.queryNormalizer?.getObjectById).toBeDefined();\n expect(dataManager.queryNormalizer?.getQueryFragment).toBeDefined();\n expect(dataManager.queryNormalizer?.getDependentQueries).toBeDefined();\n expect(dataManager.queryNormalizer?.getDependentQueriesByIds).toBeDefined();\n expect(dataManager.queryNormalizer?.subscribe).toBeDefined();\n expect(dataManager.queryNormalizer?.unsubscribe).toBeDefined();\n });\n\n it('getNormalizedData should return normalized data', () => {\n expect(dataManager.queryNormalizer).toBeDefined();\n\n const data = dataManager.queryNormalizer!.getNormalizedData();\n expect(data).toBeDefined();\n expect(data.objects).toBeDefined();\n expect(data.queries).toBeDefined();\n });\n\n it('setNormalizedData should update queries', () => {\n expect(dataManager.normalizer).toBeDefined();\n expect(dataManager.queryNormalizer).toBeDefined();\n\n const queryKey = ['users'];\n dataManager.queryClient.setQueryData(queryKey, [{id: '1', name: 'Old'}]);\n dataManager.normalizer!.setQuery(JSON.stringify(queryKey), [{id: '1', name: 'Old'}]);\n\n dataManager.queryNormalizer!.setNormalizedData({id: '1', name: 'New'});\n\n const data = dataManager.queryClient.getQueryData(queryKey) as Array<{\n id: string;\n name: string;\n }>;\n expect(data[0].name).toBe('New');\n });\n\n it('clear should clear normalized data', () => {\n expect(dataManager.normalizer).toBeDefined();\n expect(dataManager.queryNormalizer).toBeDefined();\n\n const queryKey = ['users'];\n dataManager.queryClient.setQueryData(queryKey, [{id: '1', name: 'User'}]);\n dataManager.normalizer!.setQuery(JSON.stringify(queryKey), [{id: '1', name: 'User'}]);\n\n dataManager.queryNormalizer!.clear();\n\n const data = dataManager.queryNormalizer!.getNormalizedData();\n expect(Object.keys(data.objects)).toHaveLength(0);\n });\n\n it('getObjectById should return object by ID', () => {\n expect(dataManager.normalizer).toBeDefined();\n expect(dataManager.queryNormalizer).toBeDefined();\n\n const queryKey = ['users'];\n const userData = [{id: '1', name: 'User 1'}];\n\n // Add to normalizer\n dataManager.normalizer!.setQuery(JSON.stringify(queryKey), userData);\n\n // Get normalized data\n const normalized = dataManager.queryNormalizer!.getNormalizedData();\n expect(Object.keys(normalized.objects).length).toBeGreaterThan(0);\n\n // getObjectById should be defined and available\n expect(dataManager.queryNormalizer!.getObjectById).toBeDefined();\n expect(typeof dataManager.queryNormalizer!.getObjectById).toBe('function');\n });\n\n it('getDependentQueries should return dependent queries', () => {\n expect(dataManager.normalizer).toBeDefined();\n expect(dataManager.queryNormalizer).toBeDefined();\n\n const queryKey1 = ['users'];\n const queryKey2 = ['user', '1'];\n\n dataManager.queryClient.setQueryData(queryKey1, [{id: '1', name: 'User'}]);\n dataManager.queryClient.setQueryData(queryKey2, {id: '1', name: 'User'});\n\n dataManager.normalizer!.setQuery(JSON.stringify(queryKey1), [{id: '1', name: 'User'}]);\n dataManager.normalizer!.setQuery(JSON.stringify(queryKey2), {id: '1', name: 'User'});\n\n const dependentQueries = dataManager.queryNormalizer!.getDependentQueries({\n id: '1',\n name: 'Updated',\n });\n expect(dependentQueries.length).toBeGreaterThan(0);\n });\n\n it('getDependentQueriesByIds should be available', () => {\n expect(dataManager.queryNormalizer).toBeDefined();\n\n // getDependentQueriesByIds should be defined and available\n expect(dataManager.queryNormalizer!.getDependentQueriesByIds).toBeDefined();\n expect(typeof dataManager.queryNormalizer!.getDependentQueriesByIds).toBe('function');\n\n // Call with empty array should not throw\n const result = dataManager.queryNormalizer!.getDependentQueriesByIds([]);\n expect(Array.isArray(result)).toBe(true);\n });\n\n it('should not create queryNormalizer when normalizerConfig is false', () => {\n const dmWithoutNormalizer = new ClientDataManager({\n normalizerConfig: false,\n });\n\n expect(dmWithoutNormalizer.normalizer).toBeUndefined();\n expect(dmWithoutNormalizer.queryNormalizer).toBeUndefined();\n });\n\n it('should not create queryNormalizer when normalizerConfig is undefined', () => {\n const dmWithoutNormalizer = new ClientDataManager({});\n\n expect(dmWithoutNormalizer.normalizer).toBeUndefined();\n expect(dmWithoutNormalizer.queryNormalizer).toBeUndefined();\n });\n\n it('should create queryNormalizer when normalizerConfig is true', () => {\n const dmWithNormalizer = new ClientDataManager({\n normalizerConfig: true,\n });\n\n expect(dmWithNormalizer.normalizer).toBeDefined();\n expect(dmWithNormalizer.queryNormalizer).toBeDefined();\n });\n\n it('should work correctly with optimisticUpdate via setNormalizedData', () => {\n expect(dataManager.normalizer).toBeDefined();\n expect(dataManager.queryNormalizer).toBeDefined();\n\n const queryKey = ['users'];\n const initialData = [{id: '1', name: 'Old Name'}];\n\n dataManager.queryClient.setQueryData(queryKey, initialData);\n dataManager.normalizer!.setQuery(JSON.stringify(queryKey), initialData);\n\n const mutationData: Data = {id: '1', name: 'New Name'};\n dataManager.queryNormalizer!.setNormalizedData(mutationData);\n\n const updatedData = dataManager.queryClient.getQueryData(queryKey) as Array<{\n id: string;\n name: string;\n }>;\n expect(updatedData[0].name).toBe('New Name');\n });\n});\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,100 @@
1
+ "use strict";
2
+
3
+ var _ClientDataManager = require("../ClientDataManager");
4
+ describe('normalization edge cases', function () {
5
+ var dataManager;
6
+ beforeEach(function () {
7
+ dataManager = new _ClientDataManager.ClientDataManager({
8
+ defaultOptions: {
9
+ queries: {
10
+ retry: false
11
+ },
12
+ mutations: {
13
+ retry: false
14
+ }
15
+ },
16
+ normalizerConfig: {
17
+ devLogging: false
18
+ }
19
+ });
20
+ });
21
+ afterEach(function () {
22
+ dataManager.queryClient.clear();
23
+ });
24
+ it('should work correctly with empty data', function () {
25
+ expect(dataManager.normalizer).toBeDefined();
26
+ var queryKey = ['empty'];
27
+ dataManager.queryClient.setQueryData(queryKey, []);
28
+ dataManager.normalizer.setQuery(JSON.stringify(queryKey), []);
29
+ var mutationData = {
30
+ id: '1',
31
+ name: 'New'
32
+ };
33
+ expect(function () {
34
+ dataManager.optimisticUpdate(mutationData);
35
+ }).not.toThrow();
36
+ });
37
+ it('should work correctly with null data', function () {
38
+ expect(dataManager.normalizer).toBeDefined();
39
+ var queryKey = ['null'];
40
+ dataManager.queryClient.setQueryData(queryKey, null);
41
+ var mutationData = {
42
+ id: '1',
43
+ name: 'New'
44
+ };
45
+ expect(function () {
46
+ dataManager.optimisticUpdate(mutationData);
47
+ }).not.toThrow();
48
+ });
49
+ it('should work correctly with undefined data', function () {
50
+ expect(dataManager.normalizer).toBeDefined();
51
+ var queryKey = ['undefined'];
52
+ dataManager.queryClient.setQueryData(queryKey, undefined);
53
+ var mutationData = {
54
+ id: '1',
55
+ name: 'New'
56
+ };
57
+ expect(function () {
58
+ dataManager.optimisticUpdate(mutationData);
59
+ }).not.toThrow();
60
+ });
61
+ it('should work correctly with arrays of objects', function () {
62
+ expect(dataManager.normalizer).toBeDefined();
63
+ var queryKey = ['array'];
64
+ var data = [{
65
+ id: '1',
66
+ name: 'Item 1'
67
+ }, {
68
+ id: '2',
69
+ name: 'Item 2'
70
+ }];
71
+ dataManager.queryClient.setQueryData(queryKey, data);
72
+ dataManager.normalizer.setQuery(JSON.stringify(queryKey), data);
73
+ var mutationData = {
74
+ id: '1',
75
+ name: 'Updated Item 1'
76
+ };
77
+ dataManager.optimisticUpdate(mutationData);
78
+ var updatedData = dataManager.queryClient.getQueryData(queryKey);
79
+ expect(updatedData[0].name).toBe('Updated Item 1');
80
+ expect(updatedData[1].name).toBe('Item 2');
81
+ });
82
+ it('should work correctly with single objects', function () {
83
+ expect(dataManager.normalizer).toBeDefined();
84
+ var queryKey = ['single'];
85
+ var data = {
86
+ id: '1',
87
+ name: 'Item'
88
+ };
89
+ dataManager.queryClient.setQueryData(queryKey, data);
90
+ dataManager.normalizer.setQuery(JSON.stringify(queryKey), data);
91
+ var mutationData = {
92
+ id: '1',
93
+ name: 'Updated Item'
94
+ };
95
+ dataManager.optimisticUpdate(mutationData);
96
+ var updatedData = dataManager.queryClient.getQueryData(queryKey);
97
+ expect(updatedData.name).toBe('Updated Item');
98
+ });
99
+ });
100
+ // #sourceMappingURL=normalizationEdgeCases.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_ClientDataManager","require","describe","dataManager","beforeEach","ClientDataManager","defaultOptions","queries","retry","mutations","normalizerConfig","devLogging","afterEach","queryClient","clear","it","expect","normalizer","toBeDefined","queryKey","setQueryData","setQuery","JSON","stringify","mutationData","id","name","optimisticUpdate","not","toThrow","undefined","data","updatedData","getQueryData","toBe"],"sources":["normalizationEdgeCases.test.tsx"],"sourcesContent":["import type {Data} from '@normy/core';\n\nimport {ClientDataManager} from '../ClientDataManager';\n\ndescribe('normalization edge cases', () => {\n let dataManager: ClientDataManager;\n\n beforeEach(() => {\n dataManager = new ClientDataManager({\n defaultOptions: {\n queries: {retry: false},\n mutations: {retry: false},\n },\n normalizerConfig: {\n devLogging: false,\n },\n });\n });\n\n afterEach(() => {\n dataManager.queryClient.clear();\n });\n\n it('should work correctly with empty data', () => {\n expect(dataManager.normalizer).toBeDefined();\n\n const queryKey = ['empty'];\n dataManager.queryClient.setQueryData(queryKey, []);\n dataManager.normalizer!.setQuery(JSON.stringify(queryKey), []);\n\n const mutationData: Data = {id: '1', name: 'New'};\n expect(() => {\n dataManager.optimisticUpdate(mutationData);\n }).not.toThrow();\n });\n\n it('should work correctly with null data', () => {\n expect(dataManager.normalizer).toBeDefined();\n\n const queryKey = ['null'];\n dataManager.queryClient.setQueryData(queryKey, null);\n\n const mutationData: Data = {id: '1', name: 'New'};\n expect(() => {\n dataManager.optimisticUpdate(mutationData);\n }).not.toThrow();\n });\n\n it('should work correctly with undefined data', () => {\n expect(dataManager.normalizer).toBeDefined();\n\n const queryKey = ['undefined'];\n dataManager.queryClient.setQueryData(queryKey, undefined);\n\n const mutationData: Data = {id: '1', name: 'New'};\n expect(() => {\n dataManager.optimisticUpdate(mutationData);\n }).not.toThrow();\n });\n\n it('should work correctly with arrays of objects', () => {\n expect(dataManager.normalizer).toBeDefined();\n\n const queryKey = ['array'];\n const data = [\n {id: '1', name: 'Item 1'},\n {id: '2', name: 'Item 2'},\n ];\n\n dataManager.queryClient.setQueryData(queryKey, data);\n dataManager.normalizer!.setQuery(JSON.stringify(queryKey), data);\n\n const mutationData: Data = {id: '1', name: 'Updated Item 1'};\n dataManager.optimisticUpdate(mutationData);\n\n const updatedData = dataManager.queryClient.getQueryData(queryKey) as Array<{\n id: string;\n name: string;\n }>;\n expect(updatedData[0].name).toBe('Updated Item 1');\n expect(updatedData[1].name).toBe('Item 2');\n });\n\n it('should work correctly with single objects', () => {\n expect(dataManager.normalizer).toBeDefined();\n\n const queryKey = ['single'];\n const data = {id: '1', name: 'Item'};\n\n dataManager.queryClient.setQueryData(queryKey, data);\n dataManager.normalizer!.setQuery(JSON.stringify(queryKey), data);\n\n const mutationData: Data = {id: '1', name: 'Updated Item'};\n dataManager.optimisticUpdate(mutationData);\n\n const updatedData = dataManager.queryClient.getQueryData(queryKey) as {\n id: string;\n name: string;\n };\n expect(updatedData.name).toBe('Updated Item');\n });\n});\n"],"mappings":"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","ignoreList":[]}