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,215 @@
1
+ import { handleCallbackError } from "../_utils/error-handling.util.js";
2
+ import { MemoryStorage } from "../core/index.js";
3
+ import { createDispatcher } from "../reactive/index.js";
4
+ import { createSynapse } from "./createSynapse/index.js";
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+ function matchEventPattern(eventName, pattern) {
15
+ if (pattern === '*') return true;
16
+ if (pattern.includes('*')) {
17
+ const regex = new RegExp('^' + pattern.replace(/\*/g, '.*') + '$');
18
+ return regex.test(eventName);
19
+ }
20
+ return eventName === pattern;
21
+ }
22
+ function cleanupOldEvents(storage, maxEvents) {
23
+ const state = storage.getState();
24
+ const events = Object.entries(state.events || {});
25
+ if (events.length > maxEvents) {
26
+ const sorted = events.sort((a, b)=>b[1].timestamp - a[1].timestamp);
27
+ const toKeep = sorted.slice(0, maxEvents);
28
+ storage.set('events', Object.fromEntries(toKeep));
29
+ }
30
+ }
31
+ /**
32
+ * Создает EventBus для связи между модулями
33
+ *
34
+ * @example
35
+ * ```typescript
36
+ * // Создание EventBus
37
+ * const eventBus = await createEventBus({
38
+ * name: 'app-events',
39
+ * autoCleanup: true,
40
+ * maxEvents: 500
41
+ * })
42
+ *
43
+ * // Использование в Synapse
44
+ * const mySynapse = await createSynapse({
45
+ * dependencies: [eventBus],
46
+ * createEffectConfig: () => ({
47
+ * externalDispatchers: {
48
+ * eventBus: eventBus.dispatcher
49
+ * }
50
+ * }),
51
+ * effects: [
52
+ * createEffect((action$, _, { dispatcher, externalDispatchers: { eventBus } }) => {
53
+ * // Публикация события
54
+ * eventBus.dispatch.publish({
55
+ * event: 'USER_UPDATED',
56
+ * data: { userId: 123 }
57
+ * })
58
+ *
59
+ * // Подписка на события
60
+ * eventBus.dispatch.subscribe({
61
+ * eventPattern: 'CORE_*',
62
+ * handler: (data, event) => console.log('Received:', event.event, data)
63
+ * })
64
+ * })
65
+ * ]
66
+ * })
67
+ * ```
68
+ */ const createEventBus = (config = {})=>createSynapse({
69
+ createStorageFn: async ()=>{
70
+ return new MemoryStorage({
71
+ name: config.name || 'eventBus',
72
+ initialState: {
73
+ events: {},
74
+ subscriptions: {}
75
+ }
76
+ }).initialize();
77
+ },
78
+ createDispatcherFn: (_storage)=>{
79
+ // MemoryStorage — синхронное хранилище, безопасно кастуем
80
+ const storage = _storage;
81
+ // Хранилище активных подписок для очистки при destroy
82
+ const activeSubscriptions = new Map();
83
+ const dispatcher = createDispatcher({
84
+ storage
85
+ }, (_s, { createAction })=>({
86
+ // Публикация события
87
+ publish: createAction({
88
+ type: 'PUBLISH_EVENT',
89
+ meta: {
90
+ description: 'Публикация события в EventBus'
91
+ },
92
+ action: ({ event, data, metadata = {} })=>{
93
+ const eventId = `${event}_${Date.now()}_${Math.random()}`;
94
+ storage.set(`events.${eventId}`, {
95
+ id: eventId,
96
+ event,
97
+ data,
98
+ metadata: {
99
+ ttl: metadata.ttl || null,
100
+ priority: metadata.priority || 'normal',
101
+ ...metadata
102
+ },
103
+ timestamp: Date.now()
104
+ });
105
+ // Очистка старых событий
106
+ if (config.autoCleanup) {
107
+ cleanupOldEvents(storage, config.maxEvents || 1000);
108
+ }
109
+ return {
110
+ eventId,
111
+ event,
112
+ data
113
+ };
114
+ }
115
+ }),
116
+ // Подписка на события
117
+ subscribe: createAction({
118
+ type: 'SUBSCRIBE_TO_EVENT',
119
+ meta: {
120
+ description: 'Подписка на события в EventBus'
121
+ },
122
+ action: ({ eventPattern, handler, options = {} })=>{
123
+ const subscriptionId = `sub_${Date.now()}_${Math.random()}`;
124
+ const unsubscribe = storage.subscribe((state)=>state.events, (events)=>{
125
+ Object.values(events || {}).forEach((event)=>{
126
+ // Поддержка паттернов
127
+ if (matchEventPattern(event.event, eventPattern)) {
128
+ // Фильтрация по приоритету
129
+ if (options.priority && event.metadata.priority !== options.priority) {
130
+ return;
131
+ }
132
+ try {
133
+ handler(event.data, event);
134
+ } catch (error) {
135
+ handleCallbackError(`EventBus: error in handler for "${event.event}"`, error);
136
+ }
137
+ }
138
+ });
139
+ });
140
+ // Сохраняем подписку для управления
141
+ storage.set(`subscriptions.${subscriptionId}`, {
142
+ id: subscriptionId,
143
+ pattern: eventPattern,
144
+ options,
145
+ createdAt: Date.now()
146
+ });
147
+ activeSubscriptions.set(subscriptionId, unsubscribe);
148
+ const wrappedUnsubscribe = ()=>{
149
+ activeSubscriptions.delete(subscriptionId);
150
+ unsubscribe();
151
+ };
152
+ return {
153
+ subscriptionId,
154
+ unsubscribe: wrappedUnsubscribe
155
+ };
156
+ }
157
+ }),
158
+ // Получение истории событий
159
+ getEventHistory: createAction({
160
+ type: 'GET_EVENT_HISTORY',
161
+ meta: {
162
+ description: 'Получение истории событий'
163
+ },
164
+ action: ({ eventType, limit = 100 })=>{
165
+ const state = storage.getState();
166
+ return Object.values(state.events || {}).filter((e)=>e.event === eventType).sort((a, b)=>b.timestamp - a.timestamp).slice(0, limit);
167
+ }
168
+ }),
169
+ // Очистка событий
170
+ clearEvents: createAction({
171
+ type: 'CLEAR_EVENTS',
172
+ meta: {
173
+ description: 'Очистка событий'
174
+ },
175
+ action: ({ olderThan } = {})=>{
176
+ if (olderThan) {
177
+ const cutoff = Date.now() - olderThan;
178
+ storage.update((state)=>{
179
+ Object.keys(state.events || {}).forEach((key)=>{
180
+ if (state.events[key].timestamp < cutoff) {
181
+ delete state.events[key];
182
+ }
183
+ });
184
+ });
185
+ } else {
186
+ storage.set('events', {});
187
+ }
188
+ }
189
+ }),
190
+ // Получение активных подписок
191
+ getActiveSubscriptions: createAction({
192
+ type: 'GET_SUBSCRIPTIONS',
193
+ meta: {
194
+ description: 'Получение активных подписок'
195
+ },
196
+ action: ()=>{
197
+ const state = storage.getState();
198
+ return Object.values(state.subscriptions || {});
199
+ }
200
+ })
201
+ }));
202
+ // Оборачиваем destroy для очистки всех активных подписок
203
+ const originalDestroy = dispatcher.destroy.bind(dispatcher);
204
+ dispatcher.destroy = ()=>{
205
+ activeSubscriptions.forEach((unsub)=>unsub());
206
+ activeSubscriptions.clear();
207
+ originalDestroy();
208
+ };
209
+ return dispatcher;
210
+ }
211
+ });
212
+
213
+ export { createEventBus };
214
+
215
+ //# sourceMappingURL=createEventBus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils/createEventBus.js","sources":["../../src/utils/createEventBus.ts"],"sourcesContent":["import { handleCallbackError } from '../_utils/error-handling.util'\nimport { IStorage, ISyncStorage, MemoryStorage } from '../core'\nimport { createDispatcher } from '../reactive'\nimport { createSynapse } from './createSynapse'\n\nexport interface EventBusEvent {\n id: string\n event: string\n data: any\n metadata: {\n ttl?: number | null\n priority?: 'low' | 'normal' | 'high'\n [key: string]: any\n }\n timestamp: number\n}\n\nexport interface EventBusState {\n events: Record<string, EventBusEvent>\n subscriptions: Record<string, any>\n}\n\nexport interface EventBusConfig {\n name?: string\n autoCleanup?: boolean\n maxEvents?: number\n}\n\nfunction matchEventPattern(eventName: string, pattern: string): boolean {\n if (pattern === '*') return true\n if (pattern.includes('*')) {\n const regex = new RegExp('^' + pattern.replace(/\\*/g, '.*') + '$')\n return regex.test(eventName)\n }\n return eventName === pattern\n}\n\nfunction cleanupOldEvents(storage: ISyncStorage<EventBusState>, maxEvents: number): void {\n const state = storage.getState()\n const events = Object.entries(state.events || {})\n\n if (events.length > maxEvents) {\n const sorted = events.sort((a, b) => b[1].timestamp - a[1].timestamp)\n const toKeep = sorted.slice(0, maxEvents)\n\n storage.set('events', Object.fromEntries(toKeep))\n }\n}\n\n/**\n * Создает EventBus для связи между модулями\n *\n * @example\n * ```typescript\n * // Создание EventBus\n * const eventBus = await createEventBus({\n * name: 'app-events',\n * autoCleanup: true,\n * maxEvents: 500\n * })\n *\n * // Использование в Synapse\n * const mySynapse = await createSynapse({\n * dependencies: [eventBus],\n * createEffectConfig: () => ({\n * externalDispatchers: {\n * eventBus: eventBus.dispatcher\n * }\n * }),\n * effects: [\n * createEffect((action$, _, { dispatcher, externalDispatchers: { eventBus } }) => {\n * // Публикация события\n * eventBus.dispatch.publish({\n * event: 'USER_UPDATED',\n * data: { userId: 123 }\n * })\n *\n * // Подписка на события\n * eventBus.dispatch.subscribe({\n * eventPattern: 'CORE_*',\n * handler: (data, event) => console.log('Received:', event.event, data)\n * })\n * })\n * ]\n * })\n * ```\n */\nexport const createEventBus = (config: EventBusConfig = {}) =>\n createSynapse({\n createStorageFn: async () => {\n return new MemoryStorage<EventBusState>({\n name: config.name || 'eventBus',\n initialState: {\n events: {},\n subscriptions: {},\n },\n }).initialize()\n },\n\n createDispatcherFn: (_storage: IStorage<EventBusState>) => {\n // MemoryStorage — синхронное хранилище, безопасно кастуем\n const storage = _storage as ISyncStorage<EventBusState>\n // Хранилище активных подписок для очистки при destroy\n const activeSubscriptions = new Map<string, VoidFunction>()\n\n const dispatcher = createDispatcher({ storage }, (_s, { createAction }) => ({\n // Публикация события\n publish: createAction({\n type: 'PUBLISH_EVENT',\n meta: { description: 'Публикация события в EventBus' },\n action: ({ event, data, metadata = {} }: { event: string; data: any; metadata?: Record<string, any> }) => {\n const eventId = `${event}_${Date.now()}_${Math.random()}`\n\n storage.set(`events.${eventId}`, {\n id: eventId,\n event,\n data,\n metadata: {\n ttl: metadata.ttl || null,\n priority: metadata.priority || 'normal',\n ...metadata,\n },\n timestamp: Date.now(),\n })\n\n // Очистка старых событий\n if (config.autoCleanup) {\n cleanupOldEvents(storage, config.maxEvents || 1000)\n }\n\n return { eventId, event, data }\n },\n }),\n\n // Подписка на события\n subscribe: createAction({\n type: 'SUBSCRIBE_TO_EVENT',\n meta: { description: 'Подписка на события в EventBus' },\n action: ({\n eventPattern,\n handler,\n options = {},\n }: {\n eventPattern: string\n handler: (data: any, event: EventBusEvent) => void | Promise<void>\n options?: Record<string, any>\n }) => {\n const subscriptionId = `sub_${Date.now()}_${Math.random()}`\n\n const unsubscribe = storage.subscribe(\n (state) => state.events,\n (events) => {\n Object.values(events || {}).forEach((event) => {\n // Поддержка паттернов\n if (matchEventPattern(event.event, eventPattern)) {\n // Фильтрация по приоритету\n if (options.priority && event.metadata.priority !== options.priority) {\n return\n }\n\n try {\n handler(event.data, event)\n } catch (error) {\n handleCallbackError(`EventBus: error in handler for \"${event.event}\"`, error)\n }\n }\n })\n },\n )\n\n // Сохраняем подписку для управления\n storage.set(`subscriptions.${subscriptionId}`, {\n id: subscriptionId,\n pattern: eventPattern,\n options,\n createdAt: Date.now(),\n })\n\n activeSubscriptions.set(subscriptionId, unsubscribe)\n\n const wrappedUnsubscribe = () => {\n activeSubscriptions.delete(subscriptionId)\n unsubscribe()\n }\n\n return { subscriptionId, unsubscribe: wrappedUnsubscribe }\n },\n }),\n\n // Получение истории событий\n getEventHistory: createAction({\n type: 'GET_EVENT_HISTORY',\n meta: { description: 'Получение истории событий' },\n action: ({ eventType, limit = 100 }: { eventType: string; limit?: number }) => {\n const state = storage.getState()\n return Object.values(state.events || {})\n .filter((e) => e.event === eventType)\n .sort((a, b) => b.timestamp - a.timestamp)\n .slice(0, limit)\n },\n }),\n\n // Очистка событий\n clearEvents: createAction({\n type: 'CLEAR_EVENTS',\n meta: { description: 'Очистка событий' },\n action: ({ olderThan }: { olderThan?: number } = {}) => {\n if (olderThan) {\n const cutoff = Date.now() - olderThan\n storage.update((state) => {\n Object.keys(state.events || {}).forEach((key) => {\n if (state.events[key].timestamp < cutoff) {\n delete state.events[key]\n }\n })\n })\n } else {\n storage.set('events', {})\n }\n },\n }),\n\n // Получение активных подписок\n getActiveSubscriptions: createAction({\n type: 'GET_SUBSCRIPTIONS',\n meta: { description: 'Получение активных подписок' },\n action: () => {\n const state = storage.getState()\n return Object.values(state.subscriptions || {})\n },\n }),\n }))\n\n // Оборачиваем destroy для очистки всех активных подписок\n const originalDestroy = dispatcher.destroy.bind(dispatcher)\n dispatcher.destroy = () => {\n activeSubscriptions.forEach((unsub) => unsub())\n activeSubscriptions.clear()\n originalDestroy()\n }\n\n return dispatcher\n },\n })\n"],"names":["handleCallbackError","MemoryStorage","createDispatcher","createSynapse","matchEventPattern","eventName","pattern","regex","RegExp","cleanupOldEvents","storage","maxEvents","state","events","Object","sorted","a","b","toKeep","createEventBus","config","_storage","activeSubscriptions","Map","dispatcher","_s","createAction","event","data","metadata","eventId","Date","Math","eventPattern","handler","options","subscriptionId","unsubscribe","error","wrappedUnsubscribe","eventType","limit","e","olderThan","cutoff","key","originalDestroy","unsub"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { IStorage } from '../../core';
2
+ import type { CreateSynapseConfigBasic, CreateSynapseConfigWithDispatcher, CreateSynapseConfigWithEffects, ExtractDispatchType, SynapseStoreBasic, SynapseStoreWithDispatcher, SynapseStoreWithEffects } from './types';
3
+ /**
4
+ * Перегрузки функции createSynapse
5
+ */
6
+ export declare function createSynapse<TStore extends Record<string, any>, TSelectors = any, TDispatcher = any, TServices extends Record<string, any> = Record<string, never>, TConfig extends Record<string, any> = Record<string, never>, TExternalSelectors extends Record<string, any> = Record<string, any>, TStorage extends IStorage<TStore> = IStorage<TStore>>(config: CreateSynapseConfigWithEffects<TStore, TSelectors, TDispatcher, TServices, TConfig, TExternalSelectors>): Promise<SynapseStoreWithEffects<TStore, TStorage, TSelectors, ExtractDispatchType<TDispatcher>>>;
7
+ export declare function createSynapse<TStore extends Record<string, any>, TSelectors = any, TDispatcher = any, TExternalSelectors extends Record<string, any> = Record<string, any>, TStorage extends IStorage<TStore> = IStorage<TStore>>(config: CreateSynapseConfigWithDispatcher<TStore, TSelectors, TDispatcher, TExternalSelectors>): Promise<SynapseStoreWithDispatcher<TStore, TStorage, TSelectors, ExtractDispatchType<TDispatcher>>>;
8
+ export declare function createSynapse<TStore extends Record<string, any>, TSelectors = any, TExternalSelectors extends Record<string, any> = Record<string, any>, TStorage extends IStorage<TStore> = IStorage<TStore>>(config: CreateSynapseConfigBasic<TStore, TSelectors, TExternalSelectors>): Promise<SynapseStoreBasic<TStore, TStorage, TSelectors>>;
9
+ //# sourceMappingURL=createSynapse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createSynapse.d.ts","sourceRoot":"","sources":["../../../src/utils/createSynapse/createSynapse.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,QAAQ,EAAkB,MAAM,YAAY,CAAA;AAEtE,OAAO,KAAK,EACV,wBAAwB,EACxB,iCAAiC,EACjC,8BAA8B,EAC9B,mBAAmB,EACnB,iBAAiB,EACjB,0BAA0B,EAC1B,uBAAuB,EACxB,MAAM,SAAS,CAAA;AAIhB;;GAEG;AAGH,wBAAgB,aAAa,CAC3B,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAClC,UAAU,GAAG,GAAG,EAChB,WAAW,GAAG,GAAG,EACjB,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAC7D,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAC3D,kBAAkB,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACpE,QAAQ,SAAS,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,EAEpD,MAAM,EAAE,8BAA8B,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,kBAAkB,CAAC,GAC9G,OAAO,CAAC,uBAAuB,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;AAGnG,wBAAgB,aAAa,CAC3B,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAClC,UAAU,GAAG,GAAG,EAChB,WAAW,GAAG,GAAG,EACjB,kBAAkB,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACpE,QAAQ,SAAS,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,EAEpD,MAAM,EAAE,iCAAiC,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,kBAAkB,CAAC,GAC7F,OAAO,CAAC,0BAA0B,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA;AAGtG,wBAAgB,aAAa,CAC3B,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAClC,UAAU,GAAG,GAAG,EAChB,kBAAkB,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACpE,QAAQ,SAAS,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,EACpD,MAAM,EAAE,wBAAwB,CAAC,MAAM,EAAE,UAAU,EAAE,kBAAkB,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAA"}
@@ -0,0 +1,103 @@
1
+ import { handleCallbackError, handleOperationError } from "../../_utils/error-handling.util.js";
2
+ import { SelectorModule } from "../../core/index.js";
3
+ import { EffectsModule } from "../../reactive/index.js";
4
+ import { validateSynapseConfig } from "./validate.js";
5
+ import { waitForDependencies } from "./waitForDependencies.js";
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+ // Основная реализация
18
+ async function createSynapse(config) {
19
+ // 0. Валидируем конфигурацию
20
+ try {
21
+ validateSynapseConfig(config);
22
+ } catch (error) {
23
+ handleOperationError('createSynapse: configuration validation failed', error);
24
+ }
25
+ // 1. Сначала ждем готовности всех зависимостей
26
+ await waitForDependencies(config.dependencies, config.dependencyTimeout);
27
+ // 2. Выполняем setup (например, инициализация API-клиентов)
28
+ if (config.setup) {
29
+ try {
30
+ await config.setup();
31
+ } catch (error) {
32
+ handleOperationError('createSynapse: setup failed', error);
33
+ }
34
+ }
35
+ // 3. Создаем и инициализируем хранилище
36
+ const storageInstance = config.createStorageFn ? await config.createStorageFn() : config.storage;
37
+ await storageInstance.initialize();
38
+ // Создаем сборщики для последующей очистки
39
+ const cleanupCallbacks = [];
40
+ const result = {
41
+ storage: storageInstance,
42
+ selectors: {},
43
+ destroy: async ()=>{
44
+ for (const callback of cleanupCallbacks){
45
+ await callback();
46
+ }
47
+ }
48
+ };
49
+ cleanupCallbacks.push(()=>storageInstance.destroy());
50
+ let dispatcher;
51
+ let selectorModule;
52
+ let effectsModule;
53
+ // 4. Создаем модуль селекторов
54
+ if (config.createSelectorsFn) {
55
+ try {
56
+ selectorModule = new SelectorModule(storageInstance);
57
+ const externalSelectors = config.externalSelectors || {};
58
+ result.selectors = config.createSelectorsFn(selectorModule, externalSelectors);
59
+ if (typeof selectorModule.destroy === 'function') {
60
+ cleanupCallbacks.push(()=>selectorModule.destroy());
61
+ }
62
+ } catch (error) {
63
+ handleCallbackError('createSynapse: error creating selectors', error);
64
+ }
65
+ }
66
+ // 5. Создаем диспетчер
67
+ if (config.createDispatcherFn) {
68
+ dispatcher = config.createDispatcherFn(storageInstance);
69
+ result.dispatcher = dispatcher;
70
+ // @ts-ignore
71
+ if (dispatcher && 'dispatch' in dispatcher) {
72
+ result.actions = dispatcher.dispatch;
73
+ if (typeof dispatcher.destroy === 'function') {
74
+ cleanupCallbacks.push(()=>dispatcher.destroy());
75
+ }
76
+ }
77
+ }
78
+ // 6. Создаем и настраиваем модуль эффектов
79
+ if (config.createEffectConfig && dispatcher) {
80
+ try {
81
+ const { services, config: effectConfig, externalDispatchers, externalStates } = config.createEffectConfig();
82
+ effectsModule = new EffectsModule(storageInstance, dispatcher, externalDispatchers || {}, services, effectConfig, externalStates || {});
83
+ if (Array.isArray(config.effects)) {
84
+ // @ts-ignore
85
+ config.effects.forEach((effect)=>{
86
+ if (effectsModule) effectsModule.add(effect);
87
+ });
88
+ }
89
+ await effectsModule.start();
90
+ result.state$ = effectsModule.state$;
91
+ cleanupCallbacks.push(()=>{
92
+ if (effectsModule) effectsModule.stop();
93
+ });
94
+ } catch (error) {
95
+ handleCallbackError('createSynapse: error creating effects module', error);
96
+ }
97
+ }
98
+ return result;
99
+ }
100
+
101
+ export { createSynapse };
102
+
103
+ //# sourceMappingURL=createSynapse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils/createSynapse/createSynapse.js","sources":["../../../src/utils/createSynapse/createSynapse.ts"],"sourcesContent":["import { handleCallbackError, handleOperationError } from '../../_utils/error-handling.util'\nimport { ISelectorModule, IStorage, SelectorModule } from '../../core'\nimport { EffectsModule } from '../../reactive'\nimport type {\n CreateSynapseConfigBasic,\n CreateSynapseConfigWithDispatcher,\n CreateSynapseConfigWithEffects,\n ExtractDispatchType,\n SynapseStoreBasic,\n SynapseStoreWithDispatcher,\n SynapseStoreWithEffects,\n} from './types'\nimport { validateSynapseConfig } from './validate'\nimport { waitForDependencies } from './waitForDependencies'\n\n/**\n * Перегрузки функции createSynapse\n */\n\n// Случай 1: С dispatcher и effects\nexport function createSynapse<\n TStore extends Record<string, any>,\n TSelectors = any,\n TDispatcher = any,\n TServices extends Record<string, any> = Record<string, never>,\n TConfig extends Record<string, any> = Record<string, never>,\n TExternalSelectors extends Record<string, any> = Record<string, any>,\n TStorage extends IStorage<TStore> = IStorage<TStore>,\n>(\n config: CreateSynapseConfigWithEffects<TStore, TSelectors, TDispatcher, TServices, TConfig, TExternalSelectors>,\n): Promise<SynapseStoreWithEffects<TStore, TStorage, TSelectors, ExtractDispatchType<TDispatcher>>>\n\n// Случай 2: Только с dispatcher\nexport function createSynapse<\n TStore extends Record<string, any>,\n TSelectors = any,\n TDispatcher = any,\n TExternalSelectors extends Record<string, any> = Record<string, any>,\n TStorage extends IStorage<TStore> = IStorage<TStore>,\n>(\n config: CreateSynapseConfigWithDispatcher<TStore, TSelectors, TDispatcher, TExternalSelectors>,\n): Promise<SynapseStoreWithDispatcher<TStore, TStorage, TSelectors, ExtractDispatchType<TDispatcher>>>\n\n// Случай 3: Без dispatcher\nexport function createSynapse<\n TStore extends Record<string, any>,\n TSelectors = any,\n TExternalSelectors extends Record<string, any> = Record<string, any>,\n TStorage extends IStorage<TStore> = IStorage<TStore>,\n>(config: CreateSynapseConfigBasic<TStore, TSelectors, TExternalSelectors>): Promise<SynapseStoreBasic<TStore, TStorage, TSelectors>>\n\n// Основная реализация\nexport async function createSynapse<\n TStore extends Record<string, any>,\n TSelectors = any,\n TDispatcher = any,\n TApi extends Record<string, any> = Record<string, never>,\n TConfig extends Record<string, any> = Record<string, never>,\n TExternalSelectors extends Record<string, any> = Record<string, any>,\n TStorage extends IStorage<TStore> = IStorage<TStore>,\n>(config: any): Promise<any> {\n // 0. Валидируем конфигурацию\n try {\n validateSynapseConfig(config)\n } catch (error) {\n handleOperationError('createSynapse: configuration validation failed', error)\n }\n\n // 1. Сначала ждем готовности всех зависимостей\n await waitForDependencies(config.dependencies, config.dependencyTimeout)\n\n // 2. Выполняем setup (например, инициализация API-клиентов)\n if (config.setup) {\n try {\n await config.setup()\n } catch (error) {\n handleOperationError('createSynapse: setup failed', error)\n }\n }\n\n // 3. Создаем и инициализируем хранилище\n const storageInstance = (config.createStorageFn ? await config.createStorageFn() : config.storage!) as TStorage\n await storageInstance.initialize()\n\n // Создаем сборщики для последующей очистки\n const cleanupCallbacks: Array<() => Promise<void> | void> = []\n\n const result: any = {\n storage: storageInstance,\n selectors: {} as TSelectors,\n destroy: async () => {\n for (const callback of cleanupCallbacks) {\n await callback()\n }\n },\n }\n\n cleanupCallbacks.push(() => storageInstance.destroy())\n\n let dispatcher: TDispatcher | undefined\n let selectorModule: ISelectorModule<TStore>\n let effectsModule: any\n\n // 4. Создаем модуль селекторов\n if (config.createSelectorsFn) {\n try {\n selectorModule = new SelectorModule(storageInstance)\n\n const externalSelectors = config.externalSelectors || ({} as TExternalSelectors)\n\n result.selectors = config.createSelectorsFn(selectorModule, externalSelectors)\n\n if (typeof (selectorModule as any).destroy === 'function') {\n cleanupCallbacks.push(() => selectorModule.destroy())\n }\n } catch (error) {\n handleCallbackError('createSynapse: error creating selectors', error)\n }\n }\n\n // 5. Создаем диспетчер\n if (config.createDispatcherFn) {\n dispatcher = config.createDispatcherFn(storageInstance)\n result.dispatcher = dispatcher\n\n // @ts-ignore\n if (dispatcher && 'dispatch' in dispatcher) {\n result.actions = (dispatcher as any).dispatch\n\n if (typeof (dispatcher as any).destroy === 'function') {\n cleanupCallbacks.push(() => (dispatcher as any).destroy())\n }\n }\n }\n\n // 6. Создаем и настраиваем модуль эффектов\n if (config.createEffectConfig && dispatcher) {\n try {\n const { services, config: effectConfig, externalDispatchers, externalStates } = config.createEffectConfig()\n\n effectsModule = new EffectsModule(storageInstance, dispatcher as any, externalDispatchers || {}, services, effectConfig, externalStates || {})\n\n if (Array.isArray(config.effects)) {\n // @ts-ignore\n config.effects.forEach((effect) => {\n if (effectsModule) effectsModule.add(effect)\n })\n }\n\n await effectsModule.start()\n result.state$ = effectsModule.state$\n\n cleanupCallbacks.push(() => {\n if (effectsModule) effectsModule.stop()\n })\n } catch (error) {\n handleCallbackError('createSynapse: error creating effects module', error)\n }\n }\n\n return result\n}\n"],"names":["handleCallbackError","handleOperationError","SelectorModule","EffectsModule","validateSynapseConfig","waitForDependencies","createSynapse","config","error","storageInstance","cleanupCallbacks","result","callback","dispatcher","selectorModule","effectsModule","externalSelectors","services","effectConfig","externalDispatchers","externalStates","Array","effect"],"mappings":";;;;;;;;;;;AAA4F;AACtB;AACxB;AAUI;AACS;AAsC3D,sBAAsB;AACf,eAAeM,aAAaA,CAQjCC,MAAW;IACX,6BAA6B;IAC7B,IAAI;QACFH,qBAAqBA,CAACG;IACxB,EAAE,OAAOC,OAAO;QACdP,oBAAoBA,CAAC,kDAAkDO;IACzE;IAEA,+CAA+C;IAC/C,MAAMH,mBAAmBA,CAACE,OAAO,YAAY,EAAEA,OAAO,iBAAiB;IAEvE,4DAA4D;IAC5D,IAAIA,OAAO,KAAK,EAAE;QAChB,IAAI;YACF,MAAMA,OAAO,KAAK;QACpB,EAAE,OAAOC,OAAO;YACdP,oBAAoBA,CAAC,+BAA+BO;QACtD;IACF;IAEA,wCAAwC;IACxC,MAAMC,kBAAmBF,OAAO,eAAe,GAAG,MAAMA,OAAO,eAAe,KAAKA,OAAO,OAAO;IACjG,MAAME,gBAAgB,UAAU;IAEhC,2CAA2C;IAC3C,MAAMC,mBAAsD,EAAE;IAE9D,MAAMC,SAAc;QAClB,SAASF;QACT,WAAW,CAAC;QACZ,SAAS;YACP,KAAK,MAAMG,YAAYF,iBAAkB;gBACvC,MAAME;YACR;QACF;IACF;IAEAF,iBAAiB,IAAI,CAAC,IAAMD,gBAAgB,OAAO;IAEnD,IAAII;IACJ,IAAIC;IACJ,IAAIC;IAEJ,+BAA+B;IAC/B,IAAIR,OAAO,iBAAiB,EAAE;QAC5B,IAAI;YACFO,iBAAiB,IAAIZ,cAAcA,CAACO;YAEpC,MAAMO,oBAAoBT,OAAO,iBAAiB,IAAK,CAAC;YAExDI,OAAO,SAAS,GAAGJ,OAAO,iBAAiB,CAACO,gBAAgBE;YAE5D,IAAI,OAAQF,eAAuB,OAAO,KAAK,YAAY;gBACzDJ,iBAAiB,IAAI,CAAC,IAAMI,eAAe,OAAO;YACpD;QACF,EAAE,OAAON,OAAO;YACdR,mBAAmBA,CAAC,2CAA2CQ;QACjE;IACF;IAEA,uBAAuB;IACvB,IAAID,OAAO,kBAAkB,EAAE;QAC7BM,aAAaN,OAAO,kBAAkB,CAACE;QACvCE,OAAO,UAAU,GAAGE;QAEpB,aAAa;QACb,IAAIA,cAAc,cAAcA,YAAY;YAC1CF,OAAO,OAAO,GAAIE,WAAmB,QAAQ;YAE7C,IAAI,OAAQA,WAAmB,OAAO,KAAK,YAAY;gBACrDH,iBAAiB,IAAI,CAAC,IAAOG,WAAmB,OAAO;YACzD;QACF;IACF;IAEA,2CAA2C;IAC3C,IAAIN,OAAO,kBAAkB,IAAIM,YAAY;QAC3C,IAAI;YACF,MAAM,EAAEI,QAAQ,EAAE,QAAQC,YAAY,EAAEC,mBAAmB,EAAEC,cAAc,EAAE,GAAGb,OAAO,kBAAkB;YAEzGQ,gBAAgB,IAAIZ,aAAaA,CAACM,iBAAiBI,YAAmBM,uBAAuB,CAAC,GAAGF,UAAUC,cAAcE,kBAAkB,CAAC;YAE5I,IAAIC,MAAM,OAAO,CAACd,OAAO,OAAO,GAAG;gBACjC,aAAa;gBACbA,OAAO,OAAO,CAAC,OAAO,CAAC,CAACe;oBACtB,IAAIP,eAAeA,cAAc,GAAG,CAACO;gBACvC;YACF;YAEA,MAAMP,cAAc,KAAK;YACzBJ,OAAO,MAAM,GAAGI,cAAc,MAAM;YAEpCL,iBAAiB,IAAI,CAAC;gBACpB,IAAIK,eAAeA,cAAc,IAAI;YACvC;QACF,EAAE,OAAOP,OAAO;YACdR,mBAAmBA,CAAC,gDAAgDQ;QACtE;IACF;IAEA,OAAOG;AACT"}
@@ -0,0 +1,3 @@
1
+ export { createSynapse } from './createSynapse';
2
+ export type { AnySynapseStore, CreateSynapseConfigBasic, CreateSynapseConfigWithDispatcher, CreateSynapseConfigWithEffects, ExtractDispatchType, ExtractPromiseType, ExtractStorageType, StorageCreatorFunction, SynapseDependency, SynapseStoreBasic, SynapseStoreWithDispatcher, SynapseStoreWithEffects, } from './types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/createSynapse/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,YAAY,EACV,eAAe,EACf,wBAAwB,EACxB,iCAAiC,EACjC,8BAA8B,EAC9B,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,0BAA0B,EAC1B,uBAAuB,GACxB,MAAM,SAAS,CAAA"}
@@ -0,0 +1,6 @@
1
+
2
+
3
+
4
+ export { createSynapse } from "./createSynapse.js";
5
+
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils/createSynapse/index.js","sources":["../../../src/utils/createSynapse/index.ts"],"sourcesContent":["export { createSynapse } from './createSynapse'\nexport type {\n AnySynapseStore,\n CreateSynapseConfigBasic,\n CreateSynapseConfigWithDispatcher,\n CreateSynapseConfigWithEffects,\n ExtractDispatchType,\n ExtractPromiseType,\n ExtractStorageType,\n StorageCreatorFunction,\n SynapseDependency,\n SynapseStoreBasic,\n SynapseStoreWithDispatcher,\n SynapseStoreWithEffects,\n} from './types'\n"],"names":["createSynapse"],"mappings":";AAA+C"}
@@ -0,0 +1,93 @@
1
+ import { Observable } from 'rxjs';
2
+ import { ISelectorModule, IStorage, IStorageBase } from '../../core';
3
+ import { Effect, ExternalStates } from '../../reactive';
4
+ export type ExtractPromiseType<T> = T extends Promise<infer U> ? U : T;
5
+ export type ExtractStorageType<T> = T extends IStorageBase<infer U> ? U : never;
6
+ export type ExtractDispatchType<T> = T extends {
7
+ dispatch: infer D;
8
+ } ? D : never;
9
+ export type StorageCreatorFunction<T extends Record<string, any>> = () => Promise<IStorage<T>>;
10
+ export type SynapseDependency = {
11
+ storage: IStorageBase<any>;
12
+ };
13
+ /** Всё что можно передать в dependencies[]: raw storage, обёртка { storage }, или Promise от другого synapse */
14
+ export type DependencyInput = IStorageBase<any> | SynapseDependency | Promise<AnySynapseStore>;
15
+ /**
16
+ * Базовая конфигурация хранилища
17
+ */
18
+ export type BaseSynapseConfig<TStore extends Record<string, any>, TSelectors = any, TExternalSelectors extends Record<string, any> = Record<string, any>> = ({
19
+ storage: IStorage<TStore>;
20
+ createStorageFn?: undefined;
21
+ } | {
22
+ storage?: undefined;
23
+ createStorageFn: StorageCreatorFunction<TStore>;
24
+ }) & {
25
+ setup?: () => Promise<void> | void;
26
+ dependencies?: DependencyInput[];
27
+ dependencyTimeout?: number;
28
+ externalSelectors?: TExternalSelectors;
29
+ createSelectorsFn?: (selectorModule: ISelectorModule<TStore>, externalSelectors: TExternalSelectors) => TSelectors;
30
+ };
31
+ /**
32
+ * Конфигурация с dispatcher и effects
33
+ */
34
+ export type CreateSynapseConfigWithEffects<TStore extends Record<string, any>, TSelectors = any, TDispatcher = any, TServices extends Record<string, any> = Record<string, never>, TConfig extends Record<string, any> = Record<string, never>, TExternalSelectors extends Record<string, any> = Record<string, any>> = BaseSynapseConfig<TStore, TSelectors, TExternalSelectors> & {
35
+ createDispatcherFn: (storage: IStorage<TStore>) => TDispatcher;
36
+ createEffectConfig: () => {
37
+ services?: TServices;
38
+ config?: TConfig;
39
+ externalDispatchers?: Record<string, any>;
40
+ externalStates?: ExternalStates;
41
+ };
42
+ effects?: Effect<TStore, any, TServices, TConfig, any, any>[];
43
+ };
44
+ /**
45
+ * Конфигурация только с dispatcher
46
+ */
47
+ export type CreateSynapseConfigWithDispatcher<TStore extends Record<string, any>, TSelectors = any, TDispatcher = any, TExternalSelectors extends Record<string, any> = Record<string, any>> = BaseSynapseConfig<TStore, TSelectors, TExternalSelectors> & {
48
+ createDispatcherFn: (storage: IStorage<TStore>) => TDispatcher;
49
+ createEffectConfig?: never;
50
+ effects?: never;
51
+ };
52
+ /**
53
+ * Конфигурация без dispatcher
54
+ */
55
+ export type CreateSynapseConfigBasic<TStore extends Record<string, any>, TSelectors = any, TExternalSelectors extends Record<string, any> = Record<string, any>> = BaseSynapseConfig<TStore, TSelectors, TExternalSelectors> & {
56
+ createDispatcherFn?: never;
57
+ createEffectConfig?: never;
58
+ effects?: never;
59
+ };
60
+ /**
61
+ * Результат с dispatcher и effects
62
+ */
63
+ export interface SynapseStoreWithEffects<TStore extends Record<string, any>, TStorage extends IStorageBase<TStore>, TSelectors, TActions> {
64
+ storage: TStorage;
65
+ selectors: TSelectors;
66
+ actions: TActions;
67
+ state$: Observable<TStore>;
68
+ dispatcher: any;
69
+ destroy: () => Promise<void>;
70
+ }
71
+ /**
72
+ * Результат только с dispatcher
73
+ */
74
+ export interface SynapseStoreWithDispatcher<TStore extends Record<string, any>, TStorage extends IStorageBase<TStore>, TSelectors, TActions> {
75
+ storage: TStorage;
76
+ selectors: TSelectors;
77
+ actions: TActions;
78
+ dispatcher: any;
79
+ destroy: () => Promise<void>;
80
+ }
81
+ /**
82
+ * Результат без dispatcher
83
+ */
84
+ export interface SynapseStoreBasic<TStore extends Record<string, any>, TStorage extends IStorageBase<TStore>, TSelectors> {
85
+ storage: TStorage;
86
+ selectors: TSelectors;
87
+ destroy: () => Promise<void>;
88
+ }
89
+ /**
90
+ * Union-тип для всех возможных результатов createSynapse
91
+ */
92
+ export type AnySynapseStore<TStore extends Record<string, any> = any, TStorage extends IStorageBase<TStore> = IStorage<any>, TSelectors = any, TActions = any> = SynapseStoreWithEffects<TStore, TStorage, TSelectors, TActions> | SynapseStoreWithDispatcher<TStore, TStorage, TSelectors, TActions> | SynapseStoreBasic<TStore, TStorage, TSelectors>;
93
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/createSynapse/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Union-тип для всех возможных результатов createSynapse
3
+ */
4
+
5
+
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils/createSynapse/types.js","sources":["../../../src/utils/createSynapse/types.ts"],"sourcesContent":["import { Observable } from 'rxjs'\n\nimport { ISelectorModule, IStorage, IStorageBase } from '../../core'\nimport { Effect, ExternalStates } from '../../reactive'\n\n// Вспомогательные типы для извлечения типов из других типов\nexport type ExtractPromiseType<T> = T extends Promise<infer U> ? U : T\nexport type ExtractStorageType<T> = T extends IStorageBase<infer U> ? U : never\nexport type ExtractDispatchType<T> = T extends { dispatch: infer D } ? D : never\n\nexport type StorageCreatorFunction<T extends Record<string, any>> = () => Promise<IStorage<T>>\n\nexport type SynapseDependency = {\n storage: IStorageBase<any>\n}\n\n/** Всё что можно передать в dependencies[]: raw storage, обёртка { storage }, или Promise от другого synapse */\nexport type DependencyInput = IStorageBase<any> | SynapseDependency | Promise<AnySynapseStore>\n\n/**\n * Базовая конфигурация хранилища\n */\nexport type BaseSynapseConfig<TStore extends Record<string, any>, TSelectors = any, TExternalSelectors extends Record<string, any> = Record<string, any>> = (\n | { storage: IStorage<TStore>; createStorageFn?: undefined }\n | { storage?: undefined; createStorageFn: StorageCreatorFunction<TStore> }\n) & {\n // Асинхронная функция инициализации, вызывается после готовности зависимостей, до инициализации хранилища\n setup?: () => Promise<void> | void\n // Зависимости от других synapse\n dependencies?: DependencyInput[]\n // Таймаут ожидания готовности зависимостей (мс, по умолчанию 30000)\n dependencyTimeout?: number\n // Внешние селекторы\n externalSelectors?: TExternalSelectors\n // Функция создания селекторов\n createSelectorsFn?: (selectorModule: ISelectorModule<TStore>, externalSelectors: TExternalSelectors) => TSelectors\n}\n\n/**\n * Конфигурация с dispatcher и effects\n */\nexport type CreateSynapseConfigWithEffects<\n TStore extends Record<string, any>,\n TSelectors = any,\n TDispatcher = any,\n TServices extends Record<string, any> = Record<string, never>,\n TConfig extends Record<string, any> = Record<string, never>,\n TExternalSelectors extends Record<string, any> = Record<string, any>,\n> = BaseSynapseConfig<TStore, TSelectors, TExternalSelectors> & {\n // Функция создания диспетчера (обязательная)\n createDispatcherFn: (storage: IStorage<TStore>) => TDispatcher\n // Функция создания конфигурации для эффектов (dispatcher передаётся автоматически)\n createEffectConfig: () => {\n services?: TServices\n config?: TConfig\n externalDispatchers?: Record<string, any>\n externalStates?: ExternalStates\n }\n // Эффекты\n effects?: Effect<TStore, any, TServices, TConfig, any, any>[]\n}\n\n/**\n * Конфигурация только с dispatcher\n */\nexport type CreateSynapseConfigWithDispatcher<\n TStore extends Record<string, any>,\n TSelectors = any,\n TDispatcher = any,\n TExternalSelectors extends Record<string, any> = Record<string, any>,\n> = BaseSynapseConfig<TStore, TSelectors, TExternalSelectors> & {\n // Функция создания диспетчера (обязательная)\n createDispatcherFn: (storage: IStorage<TStore>) => TDispatcher\n // Эффекты отсутствуют\n createEffectConfig?: never\n effects?: never\n}\n\n/**\n * Конфигурация без dispatcher\n */\nexport type CreateSynapseConfigBasic<\n TStore extends Record<string, any>,\n TSelectors = any,\n TExternalSelectors extends Record<string, any> = Record<string, any>,\n> = BaseSynapseConfig<TStore, TSelectors, TExternalSelectors> & {\n // Dispatcher отсутствует\n createDispatcherFn?: never\n createEffectConfig?: never\n effects?: never\n}\n\n/**\n * Результат с dispatcher и effects\n */\nexport interface SynapseStoreWithEffects<TStore extends Record<string, any>, TStorage extends IStorageBase<TStore>, TSelectors, TActions> {\n storage: TStorage\n selectors: TSelectors\n actions: TActions\n state$: Observable<TStore>\n dispatcher: any\n destroy: () => Promise<void>\n}\n\n/**\n * Результат только с dispatcher\n */\nexport interface SynapseStoreWithDispatcher<TStore extends Record<string, any>, TStorage extends IStorageBase<TStore>, TSelectors, TActions> {\n storage: TStorage\n selectors: TSelectors\n actions: TActions\n dispatcher: any\n destroy: () => Promise<void>\n}\n\n/**\n * Результат без dispatcher\n */\nexport interface SynapseStoreBasic<TStore extends Record<string, any>, TStorage extends IStorageBase<TStore>, TSelectors> {\n storage: TStorage\n selectors: TSelectors\n destroy: () => Promise<void>\n}\n\n/**\n * Union-тип для всех возможных результатов createSynapse\n */\nexport type AnySynapseStore<TStore extends Record<string, any> = any, TStorage extends IStorageBase<TStore> = IStorage<any>, TSelectors = any, TActions = any> =\n | SynapseStoreWithEffects<TStore, TStorage, TSelectors, TActions>\n | SynapseStoreWithDispatcher<TStore, TStorage, TSelectors, TActions>\n | SynapseStoreBasic<TStore, TStorage, TSelectors>\n"],"names":[],"mappings":"AA4HA;;CAEC,GAIkD"}
@@ -0,0 +1,2 @@
1
+ export declare function validateSynapseConfig(config: any): void;
2
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/utils/createSynapse/validate.ts"],"names":[],"mappings":"AAAA,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAwFvD"}
@@ -0,0 +1,76 @@
1
+ function validateSynapseConfig(config) {
2
+ // Проверяем базовые требования к хранилищу
3
+ if (!config.storage && !config.createStorageFn) {
4
+ throw new Error('Synapse config must have either "storage" or "createStorageFn"');
5
+ }
6
+ if (config.storage && config.createStorageFn) {
7
+ throw new Error('Synapse config cannot have both "storage" and "createStorageFn". Choose one.');
8
+ }
9
+ // Проверяем зависимости эффектов от диспетчера
10
+ if (config.effects && !config.createDispatcherFn) {
11
+ throw new Error('Effects require dispatcher. Add "createDispatcherFn" to config.');
12
+ }
13
+ if (config.createEffectConfig && !config.createDispatcherFn) {
14
+ throw new Error('Effect config requires dispatcher. Add "createDispatcherFn" to config.');
15
+ }
16
+ // Проверяем зависимости
17
+ if (config.dependencies) {
18
+ if (!Array.isArray(config.dependencies)) {
19
+ throw new Error('Dependencies must be an array');
20
+ }
21
+ config.dependencies.forEach((dependency, index)=>{
22
+ if (!dependency || typeof dependency !== 'object') {
23
+ throw new Error(`Dependency at index ${index} must be an object`);
24
+ }
25
+ // Skip validation for Promises — they will be resolved and validated in waitForDependencies
26
+ if (dependency instanceof Promise || typeof dependency.then === 'function') {
27
+ return;
28
+ }
29
+ // Raw IStorageBase (имеет waitForReady напрямую)
30
+ if (typeof dependency.waitForReady === 'function') {
31
+ return;
32
+ }
33
+ // Обёртка { storage: IStorageBase }
34
+ if (dependency.storage && typeof dependency.storage.waitForReady === 'function') {
35
+ return;
36
+ }
37
+ throw new Error(`Dependency at index ${index} must be IStorageBase, { storage: IStorageBase }, or Promise<SynapseStore>`);
38
+ });
39
+ }
40
+ // Проверяем функции создания
41
+ if (config.createStorageFn && typeof config.createStorageFn !== 'function') {
42
+ throw new Error('"createStorageFn" must be a function');
43
+ }
44
+ if (config.createDispatcherFn && typeof config.createDispatcherFn !== 'function') {
45
+ throw new Error('"createDispatcherFn" must be a function');
46
+ }
47
+ if (config.createSelectorsFn && typeof config.createSelectorsFn !== 'function') {
48
+ throw new Error('"createSelectorsFn" must be a function');
49
+ }
50
+ if (config.createEffectConfig && typeof config.createEffectConfig !== 'function') {
51
+ throw new Error('"createEffectConfig" must be a function');
52
+ }
53
+ // Проверяем эффекты
54
+ if (config.effects) {
55
+ if (!Array.isArray(config.effects)) {
56
+ throw new Error('Effects must be an array');
57
+ }
58
+ config.effects.forEach((effect, index)=>{
59
+ if (typeof effect !== 'function') {
60
+ throw new Error(`Effect at index ${index} must be a function`);
61
+ }
62
+ });
63
+ }
64
+ // Проверяем setup
65
+ if (config.setup && typeof config.setup !== 'function') {
66
+ throw new Error('"setup" must be a function');
67
+ }
68
+ // Проверяем внешние селекторы
69
+ if (config.externalSelectors && typeof config.externalSelectors !== 'object') {
70
+ throw new Error('External selectors must be an object');
71
+ }
72
+ }
73
+
74
+ export { validateSynapseConfig };
75
+
76
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils/createSynapse/validate.js","sources":["../../../src/utils/createSynapse/validate.ts"],"sourcesContent":["export function validateSynapseConfig(config: any): void {\n // Проверяем базовые требования к хранилищу\n if (!config.storage && !config.createStorageFn) {\n throw new Error('Synapse config must have either \"storage\" or \"createStorageFn\"')\n }\n\n if (config.storage && config.createStorageFn) {\n throw new Error('Synapse config cannot have both \"storage\" and \"createStorageFn\". Choose one.')\n }\n\n // Проверяем зависимости эффектов от диспетчера\n if (config.effects && !config.createDispatcherFn) {\n throw new Error('Effects require dispatcher. Add \"createDispatcherFn\" to config.')\n }\n\n if (config.createEffectConfig && !config.createDispatcherFn) {\n throw new Error('Effect config requires dispatcher. Add \"createDispatcherFn\" to config.')\n }\n\n // Проверяем зависимости\n if (config.dependencies) {\n if (!Array.isArray(config.dependencies)) {\n throw new Error('Dependencies must be an array')\n }\n\n config.dependencies.forEach((dependency: any, index: number) => {\n if (!dependency || typeof dependency !== 'object') {\n throw new Error(`Dependency at index ${index} must be an object`)\n }\n\n // Skip validation for Promises — they will be resolved and validated in waitForDependencies\n if (dependency instanceof Promise || typeof dependency.then === 'function') {\n return\n }\n\n // Raw IStorageBase (имеет waitForReady напрямую)\n if (typeof dependency.waitForReady === 'function') {\n return\n }\n\n // Обёртка { storage: IStorageBase }\n if (dependency.storage && typeof dependency.storage.waitForReady === 'function') {\n return\n }\n\n throw new Error(`Dependency at index ${index} must be IStorageBase, { storage: IStorageBase }, or Promise<SynapseStore>`)\n })\n }\n\n // Проверяем функции создания\n if (config.createStorageFn && typeof config.createStorageFn !== 'function') {\n throw new Error('\"createStorageFn\" must be a function')\n }\n\n if (config.createDispatcherFn && typeof config.createDispatcherFn !== 'function') {\n throw new Error('\"createDispatcherFn\" must be a function')\n }\n\n if (config.createSelectorsFn && typeof config.createSelectorsFn !== 'function') {\n throw new Error('\"createSelectorsFn\" must be a function')\n }\n\n if (config.createEffectConfig && typeof config.createEffectConfig !== 'function') {\n throw new Error('\"createEffectConfig\" must be a function')\n }\n\n // Проверяем эффекты\n if (config.effects) {\n if (!Array.isArray(config.effects)) {\n throw new Error('Effects must be an array')\n }\n\n config.effects.forEach((effect: any, index: number) => {\n if (typeof effect !== 'function') {\n throw new Error(`Effect at index ${index} must be a function`)\n }\n })\n }\n\n // Проверяем setup\n if (config.setup && typeof config.setup !== 'function') {\n throw new Error('\"setup\" must be a function')\n }\n\n // Проверяем внешние селекторы\n if (config.externalSelectors && typeof config.externalSelectors !== 'object') {\n throw new Error('External selectors must be an object')\n }\n}\n"],"names":["validateSynapseConfig","config","Error","Array","dependency","index","Promise","effect"],"mappings":"AAAO,SAASA,qBAAqBA,CAACC,MAAW;IAC/C,2CAA2C;IAC3C,IAAI,CAACA,OAAO,OAAO,IAAI,CAACA,OAAO,eAAe,EAAE;QAC9C,MAAM,IAAIC,MAAM;IAClB;IAEA,IAAID,OAAO,OAAO,IAAIA,OAAO,eAAe,EAAE;QAC5C,MAAM,IAAIC,MAAM;IAClB;IAEA,+CAA+C;IAC/C,IAAID,OAAO,OAAO,IAAI,CAACA,OAAO,kBAAkB,EAAE;QAChD,MAAM,IAAIC,MAAM;IAClB;IAEA,IAAID,OAAO,kBAAkB,IAAI,CAACA,OAAO,kBAAkB,EAAE;QAC3D,MAAM,IAAIC,MAAM;IAClB;IAEA,wBAAwB;IACxB,IAAID,OAAO,YAAY,EAAE;QACvB,IAAI,CAACE,MAAM,OAAO,CAACF,OAAO,YAAY,GAAG;YACvC,MAAM,IAAIC,MAAM;QAClB;QAEAD,OAAO,YAAY,CAAC,OAAO,CAAC,CAACG,YAAiBC;YAC5C,IAAI,CAACD,cAAc,OAAOA,eAAe,UAAU;gBACjD,MAAM,IAAIF,MAAM,CAAC,oBAAoB,EAAEG,MAAM,kBAAkB,CAAC;YAClE;YAEA,4FAA4F;YAC5F,IAAID,sBAAsBE,WAAW,OAAOF,WAAW,IAAI,KAAK,YAAY;gBAC1E;YACF;YAEA,iDAAiD;YACjD,IAAI,OAAOA,WAAW,YAAY,KAAK,YAAY;gBACjD;YACF;YAEA,oCAAoC;YACpC,IAAIA,WAAW,OAAO,IAAI,OAAOA,WAAW,OAAO,CAAC,YAAY,KAAK,YAAY;gBAC/E;YACF;YAEA,MAAM,IAAIF,MAAM,CAAC,oBAAoB,EAAEG,MAAM,0EAA0E,CAAC;QAC1H;IACF;IAEA,6BAA6B;IAC7B,IAAIJ,OAAO,eAAe,IAAI,OAAOA,OAAO,eAAe,KAAK,YAAY;QAC1E,MAAM,IAAIC,MAAM;IAClB;IAEA,IAAID,OAAO,kBAAkB,IAAI,OAAOA,OAAO,kBAAkB,KAAK,YAAY;QAChF,MAAM,IAAIC,MAAM;IAClB;IAEA,IAAID,OAAO,iBAAiB,IAAI,OAAOA,OAAO,iBAAiB,KAAK,YAAY;QAC9E,MAAM,IAAIC,MAAM;IAClB;IAEA,IAAID,OAAO,kBAAkB,IAAI,OAAOA,OAAO,kBAAkB,KAAK,YAAY;QAChF,MAAM,IAAIC,MAAM;IAClB;IAEA,oBAAoB;IACpB,IAAID,OAAO,OAAO,EAAE;QAClB,IAAI,CAACE,MAAM,OAAO,CAACF,OAAO,OAAO,GAAG;YAClC,MAAM,IAAIC,MAAM;QAClB;QAEAD,OAAO,OAAO,CAAC,OAAO,CAAC,CAACM,QAAaF;YACnC,IAAI,OAAOE,WAAW,YAAY;gBAChC,MAAM,IAAIL,MAAM,CAAC,gBAAgB,EAAEG,MAAM,mBAAmB,CAAC;YAC/D;QACF;IACF;IAEA,kBAAkB;IAClB,IAAIJ,OAAO,KAAK,IAAI,OAAOA,OAAO,KAAK,KAAK,YAAY;QACtD,MAAM,IAAIC,MAAM;IAClB;IAEA,8BAA8B;IAC9B,IAAID,OAAO,iBAAiB,IAAI,OAAOA,OAAO,iBAAiB,KAAK,UAAU;QAC5E,MAAM,IAAIC,MAAM;IAClB;AACF"}