synapse-storage 3.0.19 → 4.0.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 (351) hide show
  1. package/README.md +661 -104
  2. package/dist/_utils/chunk.util.d.ts +8 -0
  3. package/dist/_utils/chunk.util.d.ts.map +1 -0
  4. package/dist/_utils/chunk.util.js +21 -0
  5. package/dist/_utils/chunk.util.js.map +1 -0
  6. package/dist/_utils/deepMerge.util.d.ts +2 -0
  7. package/dist/_utils/deepMerge.util.d.ts.map +1 -0
  8. package/dist/_utils/deepMerge.util.js +19 -0
  9. package/dist/_utils/deepMerge.util.js.map +1 -0
  10. package/dist/_utils/error-handling.util.d.ts +50 -0
  11. package/dist/_utils/error-handling.util.d.ts.map +1 -0
  12. package/dist/_utils/error-handling.util.js +67 -0
  13. package/dist/_utils/error-handling.util.js.map +1 -0
  14. package/dist/_utils/flatMap.util.d.ts +10 -0
  15. package/dist/_utils/flatMap.util.d.ts.map +1 -0
  16. package/dist/_utils/flatMap.util.js +23 -0
  17. package/dist/_utils/flatMap.util.js.map +1 -0
  18. package/dist/_utils/index.d.ts +6 -0
  19. package/dist/_utils/index.d.ts.map +1 -0
  20. package/dist/_utils/index.js +13 -0
  21. package/dist/_utils/index.js.map +1 -0
  22. package/dist/_utils/logger-console.util.d.ts +9 -0
  23. package/dist/_utils/logger-console.util.d.ts.map +1 -0
  24. package/dist/_utils/logger-console.util.js +14 -0
  25. package/dist/_utils/logger-console.util.js.map +1 -0
  26. package/dist/api/api.module.d.ts +46 -0
  27. package/dist/api/api.module.d.ts.map +1 -0
  28. package/dist/api/api.module.js +121 -0
  29. package/dist/api/api.module.js.map +1 -0
  30. package/dist/api/components/endpoint.d.ts +57 -0
  31. package/dist/api/components/endpoint.d.ts.map +1 -0
  32. package/dist/api/components/endpoint.js +385 -0
  33. package/dist/api/components/endpoint.js.map +1 -0
  34. package/dist/api/components/query-storage.d.ts +100 -0
  35. package/dist/api/components/query-storage.d.ts.map +1 -0
  36. package/dist/api/components/query-storage.js +293 -0
  37. package/dist/api/components/query-storage.js.map +1 -0
  38. package/dist/api/example.d.ts +83 -0
  39. package/dist/api/example.d.ts.map +1 -0
  40. package/dist/api/example.js +90 -0
  41. package/dist/api/example.js.map +1 -0
  42. package/dist/api/index.d.ts +4 -0
  43. package/dist/api/index.d.ts.map +1 -0
  44. package/dist/api/index.js +11 -0
  45. package/dist/api/index.js.map +1 -0
  46. package/dist/api/types/api.interface.d.ts +126 -0
  47. package/dist/api/types/api.interface.d.ts.map +1 -0
  48. package/dist/api/types/api.interface.js +15 -0
  49. package/dist/api/types/api.interface.js.map +1 -0
  50. package/dist/api/types/endpoint.interface.d.ts +118 -0
  51. package/dist/api/types/endpoint.interface.d.ts.map +1 -0
  52. package/dist/api/types/endpoint.interface.js +6 -0
  53. package/dist/api/types/endpoint.interface.js.map +1 -0
  54. package/dist/api/types/query.interface.d.ts +85 -0
  55. package/dist/api/types/query.interface.d.ts.map +1 -0
  56. package/dist/api/types/query.interface.js +6 -0
  57. package/dist/api/types/query.interface.js.map +1 -0
  58. package/dist/api/utils/api-helpers.d.ts +22 -0
  59. package/dist/api/utils/api-helpers.d.ts.map +1 -0
  60. package/dist/api/utils/api-helpers.js +44 -0
  61. package/dist/api/utils/api-helpers.js.map +1 -0
  62. package/dist/api/utils/create-header-context.d.ts +10 -0
  63. package/dist/api/utils/create-header-context.d.ts.map +1 -0
  64. package/dist/api/utils/create-header-context.js +40 -0
  65. package/dist/api/utils/create-header-context.js.map +1 -0
  66. package/dist/api/utils/endpoint-headers.d.ts +23 -0
  67. package/dist/api/utils/endpoint-headers.d.ts.map +1 -0
  68. package/dist/api/utils/endpoint-headers.js +61 -0
  69. package/dist/api/utils/endpoint-headers.js.map +1 -0
  70. package/dist/api/utils/fetch-base-query.d.ts +9 -0
  71. package/dist/api/utils/fetch-base-query.d.ts.map +1 -0
  72. package/dist/api/utils/fetch-base-query.js +242 -0
  73. package/dist/api/utils/fetch-base-query.js.map +1 -0
  74. package/dist/api/utils/file-utils.d.ts +43 -0
  75. package/dist/api/utils/file-utils.d.ts.map +1 -0
  76. package/dist/api/utils/file-utils.js +102 -0
  77. package/dist/api/utils/file-utils.js.map +1 -0
  78. package/dist/api/utils/get-cacheable-headers.d.ts +8 -0
  79. package/dist/api/utils/get-cacheable-headers.d.ts.map +1 -0
  80. package/dist/api/utils/get-cacheable-headers.js +23 -0
  81. package/dist/api/utils/get-cacheable-headers.js.map +1 -0
  82. package/dist/core/index.d.ts +3 -0
  83. package/dist/core/index.d.ts.map +1 -0
  84. package/dist/core/index.js +7 -0
  85. package/dist/core/index.js.map +1 -0
  86. package/dist/core/selector/index.d.ts +3 -0
  87. package/dist/core/selector/index.d.ts.map +1 -0
  88. package/dist/core/selector/index.js +5 -0
  89. package/dist/core/selector/index.js.map +1 -0
  90. package/dist/{selector.interface-CA5y-kD_.d.ts → core/selector/selector.interface.d.ts} +41 -8
  91. package/dist/core/selector/selector.interface.d.ts.map +1 -0
  92. package/dist/core/selector/selector.interface.js +7 -0
  93. package/dist/core/selector/selector.interface.js.map +1 -0
  94. package/dist/core/selector/selector.module.d.ts +36 -0
  95. package/dist/core/selector/selector.module.d.ts.map +1 -0
  96. package/dist/core/selector/selector.module.js +412 -0
  97. package/dist/core/selector/selector.module.js.map +1 -0
  98. package/dist/core/storage/adapters/async-base-storage.service.d.ts +49 -0
  99. package/dist/core/storage/adapters/async-base-storage.service.d.ts.map +1 -0
  100. package/dist/core/storage/adapters/async-base-storage.service.js +505 -0
  101. package/dist/core/storage/adapters/async-base-storage.service.js.map +1 -0
  102. package/dist/core/storage/adapters/indexed-DB.service.d.ts +89 -0
  103. package/dist/core/storage/adapters/indexed-DB.service.d.ts.map +1 -0
  104. package/dist/core/storage/adapters/indexed-DB.service.js +596 -0
  105. package/dist/core/storage/adapters/indexed-DB.service.js.map +1 -0
  106. package/dist/core/storage/adapters/local-storage.service.d.ts +23 -0
  107. package/dist/core/storage/adapters/local-storage.service.d.ts.map +1 -0
  108. package/dist/core/storage/adapters/local-storage.service.js +111 -0
  109. package/dist/core/storage/adapters/local-storage.service.js.map +1 -0
  110. package/dist/core/storage/adapters/memory-storage.service.d.ts +24 -0
  111. package/dist/core/storage/adapters/memory-storage.service.d.ts.map +1 -0
  112. package/dist/core/storage/adapters/memory-storage.service.js +110 -0
  113. package/dist/core/storage/adapters/memory-storage.service.js.map +1 -0
  114. package/dist/core/storage/adapters/path.utils.d.ts +5 -0
  115. package/dist/core/storage/adapters/path.utils.d.ts.map +1 -0
  116. package/dist/core/storage/adapters/path.utils.js +42 -0
  117. package/dist/core/storage/adapters/path.utils.js.map +1 -0
  118. package/dist/core/storage/adapters/storage-core.d.ts +61 -0
  119. package/dist/core/storage/adapters/storage-core.d.ts.map +1 -0
  120. package/dist/core/storage/adapters/storage-core.js +221 -0
  121. package/dist/core/storage/adapters/storage-core.js.map +1 -0
  122. package/dist/core/storage/adapters/sync-base-storage.service.d.ts +56 -0
  123. package/dist/core/storage/adapters/sync-base-storage.service.d.ts.map +1 -0
  124. package/dist/core/storage/adapters/sync-base-storage.service.js +481 -0
  125. package/dist/core/storage/adapters/sync-base-storage.service.js.map +1 -0
  126. package/dist/core/storage/index.d.ts +16 -0
  127. package/dist/core/storage/index.d.ts.map +1 -0
  128. package/dist/core/storage/index.js +38 -0
  129. package/dist/core/storage/index.js.map +1 -0
  130. package/dist/core/storage/middlewares/broadcast.middleware.d.ts +9 -0
  131. package/dist/core/storage/middlewares/broadcast.middleware.d.ts.map +1 -0
  132. package/dist/core/storage/middlewares/broadcast.middleware.js +197 -0
  133. package/dist/core/storage/middlewares/broadcast.middleware.js.map +1 -0
  134. package/dist/core/storage/middlewares/index.d.ts +9 -0
  135. package/dist/core/storage/middlewares/index.d.ts.map +1 -0
  136. package/dist/core/storage/middlewares/index.js +17 -0
  137. package/dist/core/storage/middlewares/index.js.map +1 -0
  138. package/dist/core/storage/middlewares/storage-batching.middleware.d.ts +7 -0
  139. package/dist/core/storage/middlewares/storage-batching.middleware.d.ts.map +1 -0
  140. package/dist/core/storage/middlewares/storage-batching.middleware.js +108 -0
  141. package/dist/core/storage/middlewares/storage-batching.middleware.js.map +1 -0
  142. package/dist/core/storage/middlewares/storage-shallow-compare.middleware.d.ts +7 -0
  143. package/dist/core/storage/middlewares/storage-shallow-compare.middleware.d.ts.map +1 -0
  144. package/dist/core/storage/middlewares/storage-shallow-compare.middleware.js +43 -0
  145. package/dist/core/storage/middlewares/storage-shallow-compare.middleware.js.map +1 -0
  146. package/dist/core/storage/middlewares/sync-broadcast.middleware.d.ts +9 -0
  147. package/dist/core/storage/middlewares/sync-broadcast.middleware.d.ts.map +1 -0
  148. package/dist/core/storage/middlewares/sync-broadcast.middleware.js +177 -0
  149. package/dist/core/storage/middlewares/sync-broadcast.middleware.js.map +1 -0
  150. package/dist/core/storage/middlewares/sync-storage-batching.middleware.d.ts +6 -0
  151. package/dist/core/storage/middlewares/sync-storage-batching.middleware.d.ts.map +1 -0
  152. package/dist/core/storage/middlewares/sync-storage-batching.middleware.js +56 -0
  153. package/dist/core/storage/middlewares/sync-storage-batching.middleware.js.map +1 -0
  154. package/dist/core/storage/middlewares/sync-storage-shallow-compare.middleware.d.ts +7 -0
  155. package/dist/core/storage/middlewares/sync-storage-shallow-compare.middleware.d.ts.map +1 -0
  156. package/dist/core/storage/middlewares/sync-storage-shallow-compare.middleware.js +39 -0
  157. package/dist/core/storage/middlewares/sync-storage-shallow-compare.middleware.js.map +1 -0
  158. package/dist/core/storage/modules/plugin/plugin.interface.d.ts +101 -0
  159. package/dist/core/storage/modules/plugin/plugin.interface.d.ts.map +1 -0
  160. package/dist/core/storage/modules/plugin/plugin.interface.js +8 -0
  161. package/dist/core/storage/modules/plugin/plugin.interface.js.map +1 -0
  162. package/dist/core/storage/modules/plugin/plugin.service.d.ts +49 -0
  163. package/dist/core/storage/modules/plugin/plugin.service.d.ts.map +1 -0
  164. package/dist/core/storage/modules/plugin/plugin.service.js +406 -0
  165. package/dist/core/storage/modules/plugin/plugin.service.js.map +1 -0
  166. package/dist/core/storage/modules/singleton/mixin.util.d.ts +6 -0
  167. package/dist/core/storage/modules/singleton/mixin.util.d.ts.map +1 -0
  168. package/dist/core/storage/modules/singleton/mixin.util.js +30 -0
  169. package/dist/core/storage/modules/singleton/mixin.util.js.map +1 -0
  170. package/dist/core/storage/modules/singleton/models.d.ts +143 -0
  171. package/dist/core/storage/modules/singleton/models.d.ts.map +1 -0
  172. package/dist/core/storage/modules/singleton/models.js +60 -0
  173. package/dist/core/storage/modules/singleton/models.js.map +1 -0
  174. package/dist/core/storage/modules/singleton/singleton.util.d.ts +36 -0
  175. package/dist/core/storage/modules/singleton/singleton.util.d.ts.map +1 -0
  176. package/dist/core/storage/modules/singleton/singleton.util.js +216 -0
  177. package/dist/core/storage/modules/singleton/singleton.util.js.map +1 -0
  178. package/dist/core/storage/storage.interface.d.ts +168 -0
  179. package/dist/core/storage/storage.interface.d.ts.map +1 -0
  180. package/dist/core/storage/storage.interface.js +23 -0
  181. package/dist/core/storage/storage.interface.js.map +1 -0
  182. package/dist/core/storage/utils/broadcast.util.d.ts +49 -0
  183. package/dist/core/storage/utils/broadcast.util.d.ts.map +1 -0
  184. package/dist/core/storage/utils/broadcast.util.js +141 -0
  185. package/dist/core/storage/utils/broadcast.util.js.map +1 -0
  186. package/dist/core/storage/utils/cache.util.d.ts +33 -0
  187. package/dist/core/storage/utils/cache.util.d.ts.map +1 -0
  188. package/dist/core/storage/utils/cache.util.js +54 -0
  189. package/dist/core/storage/utils/cache.util.js.map +1 -0
  190. package/dist/core/storage/utils/middleware-module.d.ts +94 -0
  191. package/dist/core/storage/utils/middleware-module.d.ts.map +1 -0
  192. package/dist/core/storage/utils/middleware-module.js +258 -0
  193. package/dist/core/storage/utils/middleware-module.js.map +1 -0
  194. package/dist/core/storage/utils/path-selector.util.d.ts +15 -0
  195. package/dist/core/storage/utils/path-selector.util.d.ts.map +1 -0
  196. package/dist/core/storage/utils/path-selector.util.js +58 -0
  197. package/dist/core/storage/utils/path-selector.util.js.map +1 -0
  198. package/dist/core/storage/utils/state-diff.util.d.ts +14 -0
  199. package/dist/core/storage/utils/state-diff.util.d.ts.map +1 -0
  200. package/dist/core/storage/utils/state-diff.util.js +88 -0
  201. package/dist/core/storage/utils/state-diff.util.js.map +1 -0
  202. package/dist/core/storage/utils/storage-factory.util.d.ts +21 -0
  203. package/dist/core/storage/utils/storage-factory.util.d.ts.map +1 -0
  204. package/dist/core/storage/utils/storage-factory.util.js +40 -0
  205. package/dist/core/storage/utils/storage-factory.util.js.map +1 -0
  206. package/dist/core/storage/utils/storage-key.d.ts +11 -0
  207. package/dist/core/storage/utils/storage-key.d.ts.map +1 -0
  208. package/dist/core/storage/utils/storage-key.js +24 -0
  209. package/dist/core/storage/utils/storage-key.js.map +1 -0
  210. package/dist/core/storage/utils/storage.utils.d.ts +17 -0
  211. package/dist/core/storage/utils/storage.utils.d.ts.map +1 -0
  212. package/dist/core/storage/utils/storage.utils.js +57 -0
  213. package/dist/core/storage/utils/storage.utils.js.map +1 -0
  214. package/dist/index.d.ts +10 -12
  215. package/dist/index.d.ts.map +1 -0
  216. package/dist/index.js +17 -1
  217. package/dist/index.js.map +1 -0
  218. package/dist/react/hooks/index.d.ts +5 -0
  219. package/dist/react/hooks/index.d.ts.map +1 -0
  220. package/dist/react/hooks/index.js +11 -0
  221. package/dist/react/hooks/index.js.map +1 -0
  222. package/dist/react/hooks/useCreateStorage.d.ts +39 -0
  223. package/dist/react/hooks/useCreateStorage.d.ts.map +1 -0
  224. package/dist/react/hooks/useCreateStorage.js +137 -0
  225. package/dist/react/hooks/useCreateStorage.js.map +1 -0
  226. package/dist/react/hooks/useSelector.d.ts +21 -0
  227. package/dist/react/hooks/useSelector.d.ts.map +1 -0
  228. package/dist/react/hooks/useSelector.js +56 -0
  229. package/dist/react/hooks/useSelector.js.map +1 -0
  230. package/dist/react/hooks/useStorage.d.ts +39 -0
  231. package/dist/react/hooks/useStorage.d.ts.map +1 -0
  232. package/dist/react/hooks/useStorage.js +78 -0
  233. package/dist/react/hooks/useStorage.js.map +1 -0
  234. package/dist/react/hooks/useStorageSubscribe.d.ts +16 -0
  235. package/dist/react/hooks/useStorageSubscribe.d.ts.map +1 -0
  236. package/dist/react/hooks/useStorageSubscribe.js +55 -0
  237. package/dist/react/hooks/useStorageSubscribe.js.map +1 -0
  238. package/dist/react/index.d.ts +3 -0
  239. package/dist/react/index.d.ts.map +1 -0
  240. package/dist/react/index.js +7 -0
  241. package/dist/react/index.js.map +1 -0
  242. package/dist/react/utils/awaitSynapse.d.ts +34 -0
  243. package/dist/react/utils/awaitSynapse.d.ts.map +1 -0
  244. package/dist/react/utils/awaitSynapse.js +87 -0
  245. package/dist/react/utils/awaitSynapse.js.map +1 -0
  246. package/dist/react/utils/createSynapseCtx.d.ts +33 -0
  247. package/dist/react/utils/createSynapseCtx.d.ts.map +1 -0
  248. package/dist/react/utils/createSynapseCtx.js +139 -0
  249. package/dist/react/utils/createSynapseCtx.js.map +1 -0
  250. package/dist/react/utils/index.d.ts +3 -0
  251. package/dist/react/utils/index.d.ts.map +1 -0
  252. package/dist/react/utils/index.js +9 -0
  253. package/dist/react/utils/index.js.map +1 -0
  254. package/dist/reactive/dispatcher/dispatcher.module.d.ts +216 -0
  255. package/dist/reactive/dispatcher/dispatcher.module.d.ts.map +1 -0
  256. package/dist/reactive/dispatcher/dispatcher.module.js +384 -0
  257. package/dist/reactive/dispatcher/dispatcher.module.js.map +1 -0
  258. package/dist/reactive/dispatcher/index.d.ts +4 -0
  259. package/dist/reactive/dispatcher/index.d.ts.map +1 -0
  260. package/dist/reactive/dispatcher/index.js +9 -0
  261. package/dist/reactive/dispatcher/index.js.map +1 -0
  262. package/dist/reactive/dispatcher/middlewares/index.d.ts +2 -0
  263. package/dist/reactive/dispatcher/middlewares/index.d.ts.map +1 -0
  264. package/dist/reactive/dispatcher/middlewares/index.js +5 -0
  265. package/dist/reactive/dispatcher/middlewares/index.js.map +1 -0
  266. package/dist/reactive/dispatcher/middlewares/logger.middleware.d.ts +37 -0
  267. package/dist/reactive/dispatcher/middlewares/logger.middleware.d.ts.map +1 -0
  268. package/dist/reactive/dispatcher/middlewares/logger.middleware.js +188 -0
  269. package/dist/reactive/dispatcher/middlewares/logger.middleware.js.map +1 -0
  270. package/dist/reactive/dispatcher/standalone.d.ts +112 -0
  271. package/dist/reactive/dispatcher/standalone.d.ts.map +1 -0
  272. package/dist/reactive/dispatcher/standalone.js +142 -0
  273. package/dist/reactive/dispatcher/standalone.js.map +1 -0
  274. package/dist/reactive/effects/effects.module.d.ts +225 -0
  275. package/dist/reactive/effects/effects.module.d.ts.map +1 -0
  276. package/dist/reactive/effects/effects.module.js +356 -0
  277. package/dist/reactive/effects/effects.module.js.map +1 -0
  278. package/dist/reactive/effects/index.d.ts +4 -0
  279. package/dist/reactive/effects/index.d.ts.map +1 -0
  280. package/dist/reactive/effects/index.js +11 -0
  281. package/dist/reactive/effects/index.js.map +1 -0
  282. package/dist/reactive/effects/utils/chunkRequestConsistent.d.ts +12 -0
  283. package/dist/reactive/effects/utils/chunkRequestConsistent.d.ts.map +1 -0
  284. package/dist/reactive/effects/utils/chunkRequestConsistent.js +25 -0
  285. package/dist/reactive/effects/utils/chunkRequestConsistent.js.map +1 -0
  286. package/dist/reactive/effects/utils/chunkRequestParallel.d.ts +12 -0
  287. package/dist/reactive/effects/utils/chunkRequestParallel.d.ts.map +1 -0
  288. package/dist/reactive/effects/utils/chunkRequestParallel.js +22 -0
  289. package/dist/reactive/effects/utils/chunkRequestParallel.js.map +1 -0
  290. package/dist/reactive/effects/utils/fromRequest.d.ts +40 -0
  291. package/dist/reactive/effects/utils/fromRequest.d.ts.map +1 -0
  292. package/dist/reactive/effects/utils/fromRequest.js +64 -0
  293. package/dist/reactive/effects/utils/fromRequest.js.map +1 -0
  294. package/dist/reactive/effects/utils/index.d.ts +5 -0
  295. package/dist/reactive/effects/utils/index.d.ts.map +1 -0
  296. package/dist/reactive/effects/utils/index.js +11 -0
  297. package/dist/reactive/effects/utils/index.js.map +1 -0
  298. package/dist/reactive/effects/utils/toObservable.d.ts +23 -0
  299. package/dist/reactive/effects/utils/toObservable.d.ts.map +1 -0
  300. package/dist/reactive/effects/utils/toObservable.js +39 -0
  301. package/dist/reactive/effects/utils/toObservable.js.map +1 -0
  302. package/dist/reactive/index.d.ts +3 -0
  303. package/dist/reactive/index.d.ts.map +1 -0
  304. package/dist/reactive/index.js +7 -0
  305. package/dist/reactive/index.js.map +1 -0
  306. package/dist/utils/createEventBus.d.ts +87 -0
  307. package/dist/utils/createEventBus.d.ts.map +1 -0
  308. package/dist/utils/createEventBus.js +215 -0
  309. package/dist/utils/createEventBus.js.map +1 -0
  310. package/dist/utils/createSynapse/createSynapse.d.ts +9 -0
  311. package/dist/utils/createSynapse/createSynapse.d.ts.map +1 -0
  312. package/dist/utils/createSynapse/createSynapse.js +103 -0
  313. package/dist/utils/createSynapse/createSynapse.js.map +1 -0
  314. package/dist/utils/createSynapse/index.d.ts +3 -0
  315. package/dist/utils/createSynapse/index.d.ts.map +1 -0
  316. package/dist/utils/createSynapse/index.js +6 -0
  317. package/dist/utils/createSynapse/index.js.map +1 -0
  318. package/dist/utils/createSynapse/types.d.ts +93 -0
  319. package/dist/utils/createSynapse/types.d.ts.map +1 -0
  320. package/dist/utils/createSynapse/types.js +6 -0
  321. package/dist/utils/createSynapse/types.js.map +1 -0
  322. package/dist/utils/createSynapse/validate.d.ts +2 -0
  323. package/dist/utils/createSynapse/validate.d.ts.map +1 -0
  324. package/dist/utils/createSynapse/validate.js +76 -0
  325. package/dist/utils/createSynapse/validate.js.map +1 -0
  326. package/dist/utils/createSynapse/waitForDependencies.d.ts +3 -0
  327. package/dist/utils/createSynapse/waitForDependencies.d.ts.map +1 -0
  328. package/dist/utils/createSynapse/waitForDependencies.js +40 -0
  329. package/dist/utils/createSynapse/waitForDependencies.js.map +1 -0
  330. package/dist/utils/createSynapseAwaiter.d.ts +46 -0
  331. package/dist/utils/createSynapseAwaiter.d.ts.map +1 -0
  332. package/dist/utils/createSynapseAwaiter.js +102 -0
  333. package/dist/utils/createSynapseAwaiter.js.map +1 -0
  334. package/dist/utils/index.d.ts +4 -0
  335. package/dist/utils/index.d.ts.map +1 -0
  336. package/dist/utils/index.js +12 -0
  337. package/dist/utils/index.js.map +1 -0
  338. package/package.json +17 -21
  339. package/dist/api.d.ts +0 -365
  340. package/dist/api.js +0 -1
  341. package/dist/core.d.ts +0 -106
  342. package/dist/core.js +0 -1
  343. package/dist/createSynapse-vkfKjRob.d.ts +0 -97
  344. package/dist/dispatcher.module-BOsMHbD5.d.ts +0 -360
  345. package/dist/react.d.ts +0 -119
  346. package/dist/react.js +0 -1
  347. package/dist/reactive.d.ts +0 -35
  348. package/dist/reactive.js +0 -1
  349. package/dist/storage.interface-BA_ktyDz.d.ts +0 -591
  350. package/dist/utils.d.ts +0 -139
  351. package/dist/utils.js +0 -1
@@ -0,0 +1,385 @@
1
+ import { createUniqueId, headersToObject } from "../utils/api-helpers.js";
2
+ import { createHeaderContext } from "../utils/create-header-context.js";
3
+ import { createPrepareHeaders, prepareRequestHeaders } from "../utils/endpoint-headers.js";
4
+ import { fetchBaseQuery } from "../utils/fetch-base-query.js";
5
+ import { getCacheableHeaders } from "../utils/get-cacheable-headers.js";
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+ /** HTTP-статусы, при которых делать retry по умолчанию */ const DEFAULT_RETRY_ON = [
18
+ 0,
19
+ 408,
20
+ 429,
21
+ 500,
22
+ 502,
23
+ 503,
24
+ 504
25
+ ];
26
+ class EndpointClass {
27
+ endpointSubscribers = new Set();
28
+ /** Сколько раз был вызван метод request */ fetchCounts = 0;
29
+ meta = {
30
+ cache: false,
31
+ invalidatesTags: [],
32
+ name: '',
33
+ tags: []
34
+ };
35
+ name;
36
+ queryStorage;
37
+ configCurrentEndpoint;
38
+ cacheableHeaderKeys;
39
+ globalRetryConfig;
40
+ baseQueryConfig;
41
+ queryFunction;
42
+ /** Массив заголовков, которые нужно включить в ключ кэширования */ cacheableHeaders;
43
+ prepareHeaders;
44
+ /** Карта in-flight запросов для дедупликации (cacheKey → Promise) */ inflightRequests = new Map();
45
+ constructor(options){
46
+ this.name = options.name;
47
+ this.queryStorage = options.queryStorage;
48
+ this.configCurrentEndpoint = options.config;
49
+ this.cacheableHeaderKeys = options.cacheableHeaderKeys;
50
+ this.globalRetryConfig = options.globalRetryConfig;
51
+ this.baseQueryConfig = options.baseQueryConfig;
52
+ // 1. Создаем функцию подготовки заголовков
53
+ this.prepareHeaders = createPrepareHeaders(this.baseQueryConfig.prepareHeaders, this.configCurrentEndpoint.prepareHeaders);
54
+ // 2. Создаем функцию исполнения запроса
55
+ this.queryFunction = fetchBaseQuery({
56
+ baseUrl: this.baseQueryConfig.baseUrl,
57
+ fetchFn: this.baseQueryConfig.fetchFn,
58
+ timeout: this.baseQueryConfig.timeout,
59
+ credentials: this.baseQueryConfig.credentials
60
+ });
61
+ // 3. Создаем массив тех заголовков, которые нужно включить в ключ кэширования
62
+ this.cacheableHeaders = [
63
+ ...this.cacheableHeaderKeys || [],
64
+ ...this.configCurrentEndpoint.includeCacheableHeaderKeys || []
65
+ ].filter((key)=>!this.configCurrentEndpoint.excludeCacheableHeaderKeys?.includes(key));
66
+ // 4. Сохраняем информацию в meta
67
+ this.meta.name = this.name;
68
+ this.meta.tags = this.configCurrentEndpoint.tags ?? this.meta.tags;
69
+ this.meta.invalidatesTags = this.configCurrentEndpoint.invalidatesTags ?? this.meta.invalidatesTags;
70
+ this.meta.cache = this.queryStorage.createCacheConfig(this.configCurrentEndpoint) ?? this.meta.cache;
71
+ }
72
+ request(params, options) {
73
+ // 1. Подготовка и инициализация
74
+ this.fetchCounts++;
75
+ const requestId = createUniqueId(this.name);
76
+ const controller = new AbortController();
77
+ const requestSubscribers = new Set();
78
+ const currentState = {
79
+ status: 'idle',
80
+ requestParams: params,
81
+ headers: {},
82
+ error: undefined,
83
+ data: undefined,
84
+ fromCache: false
85
+ };
86
+ // Связываем пользовательский signal с внутренним controller
87
+ if (options?.signal) {
88
+ if (options.signal.aborted) {
89
+ controller.abort();
90
+ } else {
91
+ options.signal.addEventListener('abort', ()=>controller.abort(), {
92
+ once: true
93
+ });
94
+ }
95
+ }
96
+ // 2. Функция нотификации подписчиков запроса
97
+ const notifyRequestSubscribers = (newState)=>{
98
+ Object.assign(currentState, newState);
99
+ requestSubscribers.forEach((cb)=>cb({
100
+ ...currentState
101
+ }));
102
+ };
103
+ // 3. Запускаем выполнение запроса
104
+ const waitPromise = this.executeRequest(params, options, controller, notifyRequestSubscribers);
105
+ // 4. Возвращаем объект с методами управления запросом
106
+ return {
107
+ id: requestId,
108
+ subscribe (listener, subscribeOptions = {}) {
109
+ const { autoUnsubscribe = true } = subscribeOptions;
110
+ requestSubscribers.add(listener);
111
+ listener(currentState);
112
+ const unsubscribe = ()=>requestSubscribers.delete(listener);
113
+ if (autoUnsubscribe) {
114
+ waitPromise.finally(()=>unsubscribe());
115
+ }
116
+ return unsubscribe;
117
+ },
118
+ wait: ()=>waitPromise,
119
+ waitWithCallbacks (handlers = {}) {
120
+ const { idle, loading, success, error } = handlers;
121
+ this.subscribe((state)=>{
122
+ switch(state.status){
123
+ case 'idle':
124
+ idle?.(state);
125
+ break;
126
+ case 'loading':
127
+ loading?.(state);
128
+ break;
129
+ case 'success':
130
+ success?.(state.data, state);
131
+ break;
132
+ case 'error':
133
+ error?.(state.error, state);
134
+ break;
135
+ }
136
+ }, {
137
+ autoUnsubscribe: true
138
+ });
139
+ return waitPromise;
140
+ },
141
+ abort: ()=>{
142
+ if (!controller.signal.aborted) {
143
+ controller.abort();
144
+ }
145
+ },
146
+ then: (onfulfilled, onrejected)=>waitPromise.then(onfulfilled, onrejected),
147
+ catch: (onrejected)=>waitPromise.catch(onrejected),
148
+ finally: (onfinally)=>waitPromise.finally(onfinally)
149
+ };
150
+ }
151
+ /**
152
+ * Определяет итоговую конфигурацию retry: вызов → эндпоинт → глобальная
153
+ */ resolveRetryConfig(options) {
154
+ return options?.retry ?? this.configCurrentEndpoint.retry ?? this.globalRetryConfig;
155
+ }
156
+ /**
157
+ * Выполняет сетевой запрос с кэшированием, дедупликацией и retry
158
+ */ async executeRequest(params, options, controller, notify) {
159
+ const headerContext = createHeaderContext({
160
+ requestParams: params
161
+ }, options?.context || {});
162
+ try {
163
+ // 1. Формируем заголовки
164
+ const headers = await prepareRequestHeaders(this.prepareHeaders, headerContext);
165
+ const headersForCache = getCacheableHeaders(headers, options?.cacheableHeaderKeys ? options.cacheableHeaderKeys : this.cacheableHeaders);
166
+ // 2. Формируем requestDefinition для определения метода
167
+ const requestDefinition = this.configCurrentEndpoint.request(params, options?.context);
168
+ // 3. Проверяем кэширование (с учётом HTTP-метода)
169
+ const shouldCache = this.queryStorage.shouldCache(this.configCurrentEndpoint, options, requestDefinition.method);
170
+ const [cacheKey, cacheParams] = this.queryStorage.createCacheKey(this.name, {
171
+ ...params,
172
+ ...headersForCache
173
+ });
174
+ const cacheKeyStr = String(cacheKey);
175
+ // 4. Проверяем кэш
176
+ if (shouldCache) {
177
+ const cachedResult = await this.queryStorage.getCachedResult(cacheKey);
178
+ if (cachedResult) {
179
+ notify({
180
+ fromCache: true,
181
+ status: 'success',
182
+ data: cachedResult.data,
183
+ error: undefined,
184
+ headers: cachedResult.headers,
185
+ requestParams: params
186
+ });
187
+ return {
188
+ ...cachedResult,
189
+ fromCache: true
190
+ };
191
+ }
192
+ }
193
+ // 5. Дедупликация: если запрос с таким же ключом уже летит — ждём его
194
+ if (shouldCache && this.inflightRequests.has(cacheKeyStr)) {
195
+ notify({
196
+ fromCache: false,
197
+ status: 'loading'
198
+ });
199
+ const result = await this.inflightRequests.get(cacheKeyStr);
200
+ if (!result.ok) {
201
+ notify({
202
+ fromCache: true,
203
+ status: 'error',
204
+ data: undefined,
205
+ error: result.error,
206
+ headers: result.headers,
207
+ requestParams: params
208
+ });
209
+ return {
210
+ ...result,
211
+ fromCache: true
212
+ };
213
+ }
214
+ notify({
215
+ fromCache: true,
216
+ status: 'success',
217
+ data: result.data,
218
+ error: undefined,
219
+ headers: result.headers,
220
+ requestParams: params
221
+ });
222
+ return {
223
+ ...result,
224
+ fromCache: true
225
+ };
226
+ }
227
+ // 6. Выполняем запрос (с retry и post-processing)
228
+ notify({
229
+ fromCache: false,
230
+ status: 'loading'
231
+ });
232
+ const retryConfig = this.resolveRetryConfig(options);
233
+ const fetchPromise = this.executeFetch(requestDefinition, options, controller, headers, retryConfig, shouldCache, cacheKey, cacheParams ?? {});
234
+ // Регистрируем в inflight для дедупликации (только для кэшируемых)
235
+ if (shouldCache) {
236
+ this.inflightRequests.set(cacheKeyStr, fetchPromise);
237
+ fetchPromise.finally(()=>this.inflightRequests.delete(cacheKeyStr)).catch(()=>{});
238
+ }
239
+ const response = await fetchPromise;
240
+ // 7. Обрабатываем результат
241
+ if (response.ok) {
242
+ notify({
243
+ fromCache: false,
244
+ status: 'success',
245
+ data: response.data,
246
+ error: undefined,
247
+ headers: response.headers,
248
+ requestParams: params
249
+ });
250
+ this.notifyEndpointSubscribers('success');
251
+ return {
252
+ ...response,
253
+ fromCache: false
254
+ };
255
+ } else {
256
+ // invalidateOnError: инвалидируем кэш при ошибке если включено
257
+ if (shouldCache) {
258
+ const cacheConfig = this.queryStorage.createCacheConfig(this.configCurrentEndpoint);
259
+ if (cacheConfig.invalidateOnError !== false) {
260
+ await this.queryStorage.invalidateCache(cacheKey);
261
+ }
262
+ }
263
+ notify({
264
+ fromCache: false,
265
+ status: 'error',
266
+ data: undefined,
267
+ error: response.error,
268
+ headers: response.headers,
269
+ requestParams: params
270
+ });
271
+ this.notifyEndpointSubscribers('error', response.error);
272
+ throw response.error;
273
+ }
274
+ } catch (error) {
275
+ notify({
276
+ fromCache: false,
277
+ status: 'error',
278
+ data: undefined,
279
+ error: error,
280
+ headers: undefined,
281
+ requestParams: params
282
+ });
283
+ throw error;
284
+ }
285
+ }
286
+ /**
287
+ * Выполняет HTTP-запрос с retry, инвалидацией тегов и кэшированием результата
288
+ */ async executeFetch(requestDefinition, options, controller, headers, retryConfig, shouldCache, cacheKey, cacheParams) {
289
+ // Выполняем HTTP-запрос (с retry если настроен)
290
+ const response = await this.fetchWithRetry(requestDefinition, options, controller, headers, retryConfig);
291
+ // Post-processing при успешном ответе
292
+ if (response.ok) {
293
+ const { headers: responseHeaders, ...restResponse } = response;
294
+ // Инвалидируем кэш по тегам
295
+ if (this.configCurrentEndpoint.invalidatesTags?.length) {
296
+ await this.queryStorage.invalidateCacheByTags(this.configCurrentEndpoint.invalidatesTags);
297
+ }
298
+ // Сохраняем в кэш
299
+ if (shouldCache) {
300
+ const currentCacheConfig = this.queryStorage.createCacheConfig(this.configCurrentEndpoint);
301
+ await this.queryStorage.setCachedResult(cacheKey, {
302
+ ...restResponse,
303
+ headers: headersToObject(responseHeaders)
304
+ }, currentCacheConfig, cacheParams, this.configCurrentEndpoint.tags ?? []);
305
+ }
306
+ }
307
+ return response;
308
+ }
309
+ /**
310
+ * Выполняет HTTP-запрос с повторными попытками
311
+ */ async fetchWithRetry(requestDefinition, options, controller, headers, retryConfig) {
312
+ const maxAttempts = (retryConfig?.count ?? 0) + 1;
313
+ const retryOn = retryConfig?.retryOn ?? DEFAULT_RETRY_ON;
314
+ const getDelay = (attempt)=>{
315
+ if (typeof retryConfig?.delay === 'function') return retryConfig.delay(attempt);
316
+ return retryConfig?.delay ?? 1000;
317
+ };
318
+ let lastResponse;
319
+ for(let attempt = 0; attempt < maxAttempts; attempt++){
320
+ // Если запрос отменён — бросаем ошибку (перехватывается в executeRequest)
321
+ if (controller.signal.aborted) throw new DOMException('The operation was aborted.', 'AbortError');
322
+ const mergedOptions = {
323
+ ...options,
324
+ signal: controller.signal
325
+ };
326
+ lastResponse = await this.queryFunction(requestDefinition, mergedOptions, headers);
327
+ // Успех или не-retryable статус — возвращаем сразу
328
+ if (lastResponse.ok || !retryOn.includes(lastResponse.status) || attempt === maxAttempts - 1) {
329
+ return lastResponse;
330
+ }
331
+ // Ждём перед следующей попыткой
332
+ const delay = getDelay(attempt);
333
+ await new Promise((resolve)=>{
334
+ const timer = setTimeout(resolve, delay);
335
+ // Если запрос отменили во время ожидания — прерываем delay
336
+ controller.signal.addEventListener('abort', ()=>{
337
+ clearTimeout(timer);
338
+ resolve();
339
+ }, {
340
+ once: true
341
+ });
342
+ });
343
+ }
344
+ return lastResponse;
345
+ }
346
+ /**
347
+ * Уведомляет подписчиков эндпоинта об изменении состояния
348
+ */ notifyEndpointSubscribers(status, error) {
349
+ const endpointState = {
350
+ status,
351
+ fetchCounts: this.fetchCounts,
352
+ meta: this.meta,
353
+ cacheableHeaders: this.cacheableHeaders,
354
+ error
355
+ };
356
+ this.endpointSubscribers.forEach((cb)=>cb(endpointState));
357
+ }
358
+ subscribe(cb) {
359
+ this.endpointSubscribers.add(cb);
360
+ const currentState = {
361
+ status: 'idle',
362
+ fetchCounts: this.fetchCounts,
363
+ meta: this.meta,
364
+ cacheableHeaders: this.cacheableHeaders,
365
+ error: undefined
366
+ };
367
+ cb(currentState);
368
+ return ()=>this.endpointSubscribers.delete(cb);
369
+ }
370
+ async reset() {
371
+ this.fetchCounts = 0;
372
+ // Инвалидируем кэш по тегам эндпоинта
373
+ if (this.meta.tags.length) {
374
+ await this.queryStorage.invalidateCacheByTags(this.meta.tags);
375
+ }
376
+ }
377
+ destroy() {
378
+ this.endpointSubscribers.clear();
379
+ this.inflightRequests.clear();
380
+ }
381
+ }
382
+
383
+ export { EndpointClass };
384
+
385
+ //# sourceMappingURL=endpoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/components/endpoint.js","sources":["../../../src/api/components/endpoint.ts"],"sourcesContent":["import { CreateApiClientOptions, RetryConfig } from '../types/api.interface'\nimport { Endpoint as EndpointType, EndpointConfig, EndpointState, RequestResponseModify, RequestState } from '../types/endpoint.interface'\nimport { QueryOptions, QueryResult, Unsubscribe } from '../types/query.interface'\nimport { createUniqueId, headersToObject } from '../utils/api-helpers'\nimport { createHeaderContext } from '../utils/create-header-context'\nimport { createPrepareHeaders, prepareRequestHeaders } from '../utils/endpoint-headers'\nimport { fetchBaseQuery } from '../utils/fetch-base-query'\nimport { getCacheableHeaders } from '../utils/get-cacheable-headers'\nimport { QueryStorage } from './query-storage'\n\n/** HTTP-статусы, при которых делать retry по умолчанию */\nconst DEFAULT_RETRY_ON = [0, 408, 429, 500, 502, 503, 504]\n\nexport interface EndpointClassOptions<RequestParams extends Record<string, any>, RequestResponse> {\n name: string\n queryStorage: QueryStorage\n config: EndpointConfig<RequestParams, RequestResponse>\n cacheableHeaderKeys: CreateApiClientOptions['cacheableHeaderKeys']\n globalCacheConfig: CreateApiClientOptions['cache']\n globalRetryConfig: CreateApiClientOptions['retry']\n baseQueryConfig: CreateApiClientOptions['baseQuery']\n}\n\nexport class EndpointClass<RequestParams extends Record<string, any>, RequestResponse> implements EndpointType<RequestParams, RequestResponse> {\n private readonly endpointSubscribers = new Set<(state: EndpointState) => void>()\n\n /** Сколько раз был вызван метод request */\n fetchCounts: number = 0\n\n meta: EndpointType['meta'] = {\n cache: false,\n invalidatesTags: [],\n name: '',\n tags: [],\n }\n\n private readonly name: string\n private readonly queryStorage: QueryStorage\n private readonly configCurrentEndpoint: EndpointConfig<RequestParams, RequestResponse>\n private readonly cacheableHeaderKeys: CreateApiClientOptions['cacheableHeaderKeys']\n private readonly globalRetryConfig: CreateApiClientOptions['retry']\n private readonly baseQueryConfig: CreateApiClientOptions['baseQuery']\n\n private readonly queryFunction: ReturnType<typeof fetchBaseQuery>\n\n /** Массив заголовков, которые нужно включить в ключ кэширования */\n private readonly cacheableHeaders: string[]\n\n private readonly prepareHeaders: ReturnType<typeof createPrepareHeaders>\n\n /** Карта in-flight запросов для дедупликации (cacheKey → Promise) */\n private readonly inflightRequests = new Map<string, Promise<QueryResult<RequestResponse, Error>>>()\n\n constructor(options: EndpointClassOptions<RequestParams, RequestResponse>) {\n this.name = options.name\n this.queryStorage = options.queryStorage\n this.configCurrentEndpoint = options.config\n this.cacheableHeaderKeys = options.cacheableHeaderKeys\n this.globalRetryConfig = options.globalRetryConfig\n this.baseQueryConfig = options.baseQueryConfig\n\n // 1. Создаем функцию подготовки заголовков\n this.prepareHeaders = createPrepareHeaders(this.baseQueryConfig.prepareHeaders, this.configCurrentEndpoint.prepareHeaders)\n // 2. Создаем функцию исполнения запроса\n this.queryFunction = fetchBaseQuery({\n baseUrl: this.baseQueryConfig.baseUrl,\n fetchFn: this.baseQueryConfig.fetchFn,\n timeout: this.baseQueryConfig.timeout,\n credentials: this.baseQueryConfig.credentials,\n })\n // 3. Создаем массив тех заголовков, которые нужно включить в ключ кэширования\n this.cacheableHeaders = [...(this.cacheableHeaderKeys || []), ...(this.configCurrentEndpoint.includeCacheableHeaderKeys || [])].filter(\n (key) => !this.configCurrentEndpoint.excludeCacheableHeaderKeys?.includes(key),\n )\n // 4. Сохраняем информацию в meta\n this.meta.name = this.name\n this.meta.tags = this.configCurrentEndpoint.tags ?? this.meta.tags\n this.meta.invalidatesTags = this.configCurrentEndpoint.invalidatesTags ?? this.meta.invalidatesTags\n this.meta.cache = this.queryStorage.createCacheConfig(this.configCurrentEndpoint) ?? this.meta.cache\n }\n\n public request(params: RequestParams, options?: QueryOptions): RequestResponseModify<RequestResponse> {\n // 1. Подготовка и инициализация\n this.fetchCounts++\n const requestId = createUniqueId(this.name)\n const controller = new AbortController()\n const requestSubscribers = new Set<(state: RequestState<RequestResponse, RequestParams>) => void>()\n const currentState: RequestState<RequestResponse, RequestParams> = {\n status: 'idle',\n requestParams: params,\n headers: {},\n error: undefined,\n data: undefined,\n fromCache: false,\n }\n\n // Связываем пользовательский signal с внутренним controller\n if (options?.signal) {\n if (options.signal.aborted) {\n controller.abort()\n } else {\n options.signal.addEventListener('abort', () => controller.abort(), { once: true })\n }\n }\n\n // 2. Функция нотификации подписчиков запроса\n const notifyRequestSubscribers = (newState: Partial<RequestState<RequestResponse, RequestParams>>) => {\n Object.assign(currentState, newState)\n requestSubscribers.forEach((cb) => cb({ ...currentState }))\n }\n\n // 3. Запускаем выполнение запроса\n const waitPromise = this.executeRequest(params, options, controller, notifyRequestSubscribers)\n\n // 4. Возвращаем объект с методами управления запросом\n return {\n id: requestId,\n\n subscribe(listener, subscribeOptions = {}) {\n const { autoUnsubscribe = true } = subscribeOptions\n requestSubscribers.add(listener)\n listener(currentState)\n\n const unsubscribe = () => requestSubscribers.delete(listener)\n\n if (autoUnsubscribe) {\n waitPromise.finally(() => unsubscribe())\n }\n\n return unsubscribe\n },\n\n wait: () => waitPromise,\n\n waitWithCallbacks(handlers = {}) {\n const { idle, loading, success, error } = handlers\n\n this.subscribe(\n (state: RequestState<RequestResponse, RequestParams>) => {\n switch (state.status) {\n case 'idle':\n idle?.(state)\n break\n case 'loading':\n loading?.(state)\n break\n case 'success':\n success?.(state.data, state)\n break\n case 'error':\n error?.(state.error, state)\n break\n }\n },\n { autoUnsubscribe: true },\n )\n\n return waitPromise\n },\n\n abort: () => {\n if (!controller.signal.aborted) {\n controller.abort()\n }\n },\n\n then: (onfulfilled, onrejected) => waitPromise.then(onfulfilled, onrejected),\n catch: (onrejected) => waitPromise.catch(onrejected),\n finally: (onfinally) => waitPromise.finally(onfinally),\n }\n }\n\n /**\n * Определяет итоговую конфигурацию retry: вызов → эндпоинт → глобальная\n */\n private resolveRetryConfig(options?: QueryOptions): RetryConfig | undefined {\n return options?.retry ?? this.configCurrentEndpoint.retry ?? this.globalRetryConfig\n }\n\n /**\n * Выполняет сетевой запрос с кэшированием, дедупликацией и retry\n */\n private async executeRequest(\n params: RequestParams,\n options: QueryOptions | undefined,\n controller: AbortController,\n notify: (state: Partial<RequestState<RequestResponse, RequestParams>>) => void,\n ): Promise<QueryResult<RequestResponse, Error>> {\n const headerContext = createHeaderContext({ requestParams: params }, options?.context || {})\n\n try {\n // 1. Формируем заголовки\n const headers = await prepareRequestHeaders(this.prepareHeaders, headerContext)\n const headersForCache = getCacheableHeaders(headers, options?.cacheableHeaderKeys ? options.cacheableHeaderKeys : this.cacheableHeaders)\n\n // 2. Формируем requestDefinition для определения метода\n const requestDefinition = this.configCurrentEndpoint.request(params, options?.context)\n\n // 3. Проверяем кэширование (с учётом HTTP-метода)\n const shouldCache = this.queryStorage.shouldCache(this.configCurrentEndpoint, options, requestDefinition.method)\n const [cacheKey, cacheParams] = this.queryStorage.createCacheKey(this.name, { ...params, ...headersForCache })\n const cacheKeyStr = String(cacheKey)\n\n // 4. Проверяем кэш\n if (shouldCache) {\n const cachedResult = await this.queryStorage.getCachedResult<QueryResult<RequestResponse>>(cacheKey)\n if (cachedResult) {\n notify({\n fromCache: true,\n status: 'success',\n data: cachedResult.data,\n error: undefined,\n headers: cachedResult.headers,\n requestParams: params,\n })\n return { ...cachedResult, fromCache: true }\n }\n }\n\n // 5. Дедупликация: если запрос с таким же ключом уже летит — ждём его\n if (shouldCache && this.inflightRequests.has(cacheKeyStr)) {\n notify({ fromCache: false, status: 'loading' })\n const result = await this.inflightRequests.get(cacheKeyStr)!\n if (!result.ok) {\n notify({\n fromCache: true,\n status: 'error',\n data: undefined,\n error: result.error,\n headers: result.headers,\n requestParams: params,\n })\n return { ...result, fromCache: true }\n }\n notify({\n fromCache: true,\n status: 'success',\n data: result.data,\n error: undefined,\n headers: result.headers,\n requestParams: params,\n })\n return { ...result, fromCache: true }\n }\n\n // 6. Выполняем запрос (с retry и post-processing)\n notify({ fromCache: false, status: 'loading' })\n\n const retryConfig = this.resolveRetryConfig(options)\n const fetchPromise = this.executeFetch(requestDefinition, options, controller, headers, retryConfig, shouldCache, cacheKey, cacheParams ?? {})\n\n // Регистрируем в inflight для дедупликации (только для кэшируемых)\n if (shouldCache) {\n this.inflightRequests.set(cacheKeyStr, fetchPromise)\n fetchPromise.finally(() => this.inflightRequests.delete(cacheKeyStr)).catch(() => {})\n }\n\n const response = await fetchPromise\n\n // 7. Обрабатываем результат\n if (response.ok) {\n notify({\n fromCache: false,\n status: 'success',\n data: response.data,\n error: undefined,\n headers: response.headers,\n requestParams: params,\n })\n this.notifyEndpointSubscribers('success')\n return { ...response, fromCache: false }\n } else {\n // invalidateOnError: инвалидируем кэш при ошибке если включено\n if (shouldCache) {\n const cacheConfig = this.queryStorage.createCacheConfig(this.configCurrentEndpoint)\n if (cacheConfig.invalidateOnError !== false) {\n await this.queryStorage.invalidateCache(cacheKey)\n }\n }\n\n notify({\n fromCache: false,\n status: 'error',\n data: undefined,\n error: response.error,\n headers: response.headers,\n requestParams: params,\n })\n this.notifyEndpointSubscribers('error', response.error)\n throw response.error\n }\n } catch (error) {\n notify({\n fromCache: false,\n status: 'error',\n data: undefined,\n error: error as Error,\n headers: undefined,\n requestParams: params,\n })\n throw error\n }\n }\n\n /**\n * Выполняет HTTP-запрос с retry, инвалидацией тегов и кэшированием результата\n */\n private async executeFetch(\n requestDefinition: ReturnType<EndpointConfig<RequestParams, RequestResponse>['request']>,\n options: QueryOptions | undefined,\n controller: AbortController,\n headers: Headers,\n retryConfig: RetryConfig | undefined,\n shouldCache: boolean,\n cacheKey: ReturnType<QueryStorage['createCacheKey']>[0],\n cacheParams: Record<string, any>,\n ): Promise<QueryResult<RequestResponse, Error>> {\n // Выполняем HTTP-запрос (с retry если настроен)\n const response = await this.fetchWithRetry(requestDefinition, options, controller, headers, retryConfig)\n\n // Post-processing при успешном ответе\n if (response.ok) {\n const { headers: responseHeaders, ...restResponse } = response\n\n // Инвалидируем кэш по тегам\n if (this.configCurrentEndpoint.invalidatesTags?.length) {\n await this.queryStorage.invalidateCacheByTags(this.configCurrentEndpoint.invalidatesTags)\n }\n\n // Сохраняем в кэш\n if (shouldCache) {\n const currentCacheConfig = this.queryStorage.createCacheConfig(this.configCurrentEndpoint)\n await this.queryStorage.setCachedResult(\n cacheKey,\n { ...restResponse, headers: headersToObject(responseHeaders) },\n currentCacheConfig,\n cacheParams,\n this.configCurrentEndpoint.tags ?? [],\n )\n }\n }\n\n return response\n }\n\n /**\n * Выполняет HTTP-запрос с повторными попытками\n */\n private async fetchWithRetry(\n requestDefinition: ReturnType<EndpointConfig<RequestParams, RequestResponse>['request']>,\n options: QueryOptions | undefined,\n controller: AbortController,\n headers: Headers,\n retryConfig?: RetryConfig,\n ): Promise<QueryResult<RequestResponse, Error>> {\n const maxAttempts = (retryConfig?.count ?? 0) + 1\n const retryOn = retryConfig?.retryOn ?? DEFAULT_RETRY_ON\n const getDelay = (attempt: number): number => {\n if (typeof retryConfig?.delay === 'function') return retryConfig.delay(attempt)\n return retryConfig?.delay ?? 1000\n }\n\n let lastResponse!: QueryResult<RequestResponse, Error>\n\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n // Если запрос отменён — бросаем ошибку (перехватывается в executeRequest)\n if (controller.signal.aborted) throw new DOMException('The operation was aborted.', 'AbortError')\n\n const mergedOptions: QueryOptions = { ...options, signal: controller.signal }\n lastResponse = await this.queryFunction<RequestResponse, RequestParams>(requestDefinition, mergedOptions, headers)\n\n // Успех или не-retryable статус — возвращаем сразу\n if (lastResponse.ok || !retryOn.includes(lastResponse.status) || attempt === maxAttempts - 1) {\n return lastResponse\n }\n\n // Ждём перед следующей попыткой\n const delay = getDelay(attempt)\n await new Promise<void>((resolve) => {\n const timer = setTimeout(resolve, delay)\n // Если запрос отменили во время ожидания — прерываем delay\n controller.signal.addEventListener(\n 'abort',\n () => {\n clearTimeout(timer)\n resolve()\n },\n { once: true },\n )\n })\n }\n\n return lastResponse\n }\n\n /**\n * Уведомляет подписчиков эндпоинта об изменении состояния\n */\n private notifyEndpointSubscribers(status: 'success' | 'error', error?: Error): void {\n const endpointState: EndpointState = {\n status,\n fetchCounts: this.fetchCounts,\n meta: this.meta,\n cacheableHeaders: this.cacheableHeaders,\n error,\n }\n this.endpointSubscribers.forEach((cb) => cb(endpointState))\n }\n\n public subscribe(cb: (state: EndpointState) => void): Unsubscribe {\n this.endpointSubscribers.add(cb)\n\n const currentState: EndpointState = {\n status: 'idle',\n fetchCounts: this.fetchCounts,\n meta: this.meta,\n cacheableHeaders: this.cacheableHeaders,\n error: undefined,\n }\n\n cb(currentState)\n return () => this.endpointSubscribers.delete(cb)\n }\n\n public async reset() {\n this.fetchCounts = 0\n\n // Инвалидируем кэш по тегам эндпоинта\n if (this.meta.tags.length) {\n await this.queryStorage.invalidateCacheByTags(this.meta.tags)\n }\n }\n\n public destroy() {\n this.endpointSubscribers.clear()\n this.inflightRequests.clear()\n }\n}\n"],"names":["createUniqueId","headersToObject","createHeaderContext","createPrepareHeaders","prepareRequestHeaders","fetchBaseQuery","getCacheableHeaders","DEFAULT_RETRY_ON","EndpointClass","Set","Map","options","key","params","requestId","controller","AbortController","requestSubscribers","currentState","undefined","notifyRequestSubscribers","newState","Object","cb","waitPromise","listener","subscribeOptions","autoUnsubscribe","unsubscribe","handlers","idle","loading","success","error","state","onfulfilled","onrejected","onfinally","notify","headerContext","headers","headersForCache","requestDefinition","shouldCache","cacheKey","cacheParams","cacheKeyStr","String","cachedResult","result","retryConfig","fetchPromise","response","cacheConfig","responseHeaders","restResponse","currentCacheConfig","maxAttempts","retryOn","getDelay","attempt","lastResponse","DOMException","mergedOptions","delay","Promise","resolve","timer","setTimeout","clearTimeout","status","endpointState"],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ import { IStorage, StorageKeyType } from '../../core';
2
+ import { CacheConfig, CreateApiClientOptions, StorageOption } from '../types/api.interface';
3
+ import { EndpointConfig } from '../types/endpoint.interface';
4
+ import { QueryOptions } from '../types/query.interface';
5
+ /**
6
+ * Менеджер хранилища для API
7
+ * Объединяет в себе функционал хранилища и управления кэшем
8
+ */
9
+ export declare class QueryStorage {
10
+ private readonly storageExternal;
11
+ private readonly globalCacheConfig;
12
+ /** Экземпляр хранилища */
13
+ private storage;
14
+ private cleanupInterval;
15
+ /** Индекс тегов: tag → Set<cacheKey> для быстрой инвалидации */
16
+ private tagIndex;
17
+ /** Настройки кэша по умолчанию */
18
+ private defaultCacheOptions;
19
+ /** Флаг завершённой инициализации */
20
+ private _initialized;
21
+ /** Промис текущей инициализации */
22
+ private _initPromise;
23
+ constructor(storageExternal: StorageOption, globalCacheConfig: CreateApiClientOptions['cache']);
24
+ initialize(): Promise<this>;
25
+ private _doInitialize;
26
+ private createStorage;
27
+ private startCleanupInterval;
28
+ /**
29
+ * Получает экземпляр хранилища
30
+ */
31
+ getStorage(): IStorage | null;
32
+ /**
33
+ * Создает ключ кэша для запроса с учетом заголовков
34
+ * @param endpoint Имя эндпоинта
35
+ * @param params Параметры запроса (все что посчитаем нужным)
36
+ */
37
+ createCacheKey<CacheParams extends Record<string, any>>(endpoint: string, params: CacheParams): [StorageKeyType, Record<string, any> | undefined];
38
+ /**
39
+ * Получает результат запроса из кэша
40
+ */
41
+ getCachedResult<T>(cacheKey: StorageKeyType): Promise<T | undefined>;
42
+ /**
43
+ * Сохраняет результат запроса в кэш
44
+ * @param cacheKey Ключ кэша
45
+ * @param data Данные для кэширования
46
+ * @param cacheOptions Метаданные
47
+ * @param cacheParams Параметры которые влияли на создание ключа
48
+ * @param tags Тэги эндпоинта
49
+ */
50
+ setCachedResult<T, CacheParams extends Record<string, any>>(cacheKey: StorageKeyType, data: T, cacheOptions: Exclude<CacheConfig, boolean>, cacheParams: CacheParams, tags: string[]): Promise<void>;
51
+ /**
52
+ * Проверяет, должен ли запрос быть кэширован
53
+ * @param endpointConfig Конфигурация эндпоинта
54
+ * @param options Опции запроса
55
+ * @param method HTTP-метод запроса (только GET кэшируется по REST-стандарту)
56
+ * @returns true если запрос должен кэшироваться
57
+ */
58
+ shouldCache(endpointConfig?: EndpointConfig, options?: QueryOptions, method?: string): boolean;
59
+ /**
60
+ * Создает итоговую конфигурацию кэширования для конкретного эндпоинта
61
+ * Объединяет глобальный конфиг с текущим
62
+ * @param endpointConfig Конфигурация эндпоинта
63
+ */
64
+ createCacheConfig(endpointConfig?: EndpointConfig): {
65
+ ttl?: number;
66
+ cleanup?: {
67
+ enabled: boolean;
68
+ interval?: number;
69
+ };
70
+ invalidateOnError?: boolean;
71
+ };
72
+ /**
73
+ * Инвалидирует кэш по тегам (использует индекс для O(1) поиска по тегу)
74
+ * @param tags Теги для инвалидации
75
+ */
76
+ invalidateCacheByTags(tags: string[]): Promise<void>;
77
+ /**
78
+ * Инвалидирует кэш по ключу
79
+ * @param cacheKey Ключ кэша
80
+ */
81
+ invalidateCache(cacheKey: StorageKeyType): Promise<void>;
82
+ /**
83
+ * Выполняет очистку всех просроченных записей кэша
84
+ */
85
+ cleanup(): Promise<void>;
86
+ /**
87
+ * Уничтожает хранилище и освобождает ресурсы
88
+ */
89
+ destroy(): Promise<void>;
90
+ /**
91
+ * Перестраивает индекс тегов из существующих записей в storage
92
+ * Вызывается при инициализации для восстановления после перезагрузки
93
+ */
94
+ private rebuildTagIndex;
95
+ /**
96
+ * Удаляет ключ из индекса тегов
97
+ */
98
+ private removeKeyFromTagIndex;
99
+ }
100
+ //# sourceMappingURL=query-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-storage.d.ts","sourceRoot":"","sources":["../../../src/api/components/query-storage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAErD,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAEvD;;;GAGG;AACH,qBAAa,YAAY;IA0BrB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IA1BpC,0BAA0B;IAC1B,OAAO,CAAC,OAAO,CAAwB;IAEvC,OAAO,CAAC,eAAe,CAAuC;IAE9D,gEAAgE;IAChE,OAAO,CAAC,QAAQ,CAAiC;IAEjD,kCAAkC;IAClC,OAAO,CAAC,mBAAmB,CAO1B;IAED,qCAAqC;IACrC,OAAO,CAAC,YAAY,CAAQ;IAE5B,mCAAmC;IACnC,OAAO,CAAC,YAAY,CAA6B;gBAG9B,eAAe,EAAE,aAAa,EAC9B,iBAAiB,EAAE,sBAAsB,CAAC,OAAO,CAAC;IAGxD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAQ1B,aAAa;YAiBb,aAAa;IAY3B,OAAO,CAAC,oBAAoB;IAiB5B;;OAEG;IACI,UAAU,IAAI,QAAQ,GAAG,IAAI;IAIpC;;;;OAIG;IACI,cAAc,CAAC,WAAW,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW;IAIpG;;OAEG;IACU,eAAe,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAuBjF;;;;;;;OAOG;IACU,eAAe,CAAC,CAAC,EAAE,WAAW,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACrE,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE,CAAC,EACP,YAAY,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,EAC3C,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE,MAAM,EAAE,GACb,OAAO,CAAC,IAAI,CAAC;IA2BhB;;;;;;OAMG;IACI,WAAW,CAAC,cAAc,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,MAAM;IAiB3F;;;;OAIG;IACI,iBAAiB,CAAC,cAAc,CAAC,EAAE,cAAc;;;;oBAvLpD,CAAN;;;;IA2ME;;;OAGG;IACU,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBjE;;;OAGG;IACU,eAAe,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAYrE;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAerC;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBrC;;;OAGG;YACW,eAAe;IA4B7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;CAU9B"}