synapse-storage 3.0.19 → 4.0.1

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 +28 -168
  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
package/README.md CHANGED
@@ -1,191 +1,51 @@
1
1
  # Synapse Storage
2
2
 
3
- > **🇺🇸 English** | [🇷🇺 Русский](./docs/ru/README.md) | [📝 ChangeLog](./CHANGELOG.md)
4
-
5
- State management toolkit + API client
6
-
7
3
  [![npm version](https://badge.fury.io/js/synapse-storage.svg)](https://badge.fury.io/js/synapse-storage)
8
4
  [![Bundle Size](https://img.shields.io/bundlephobia/minzip/synapse-storage)](https://bundlephobia.com/package/synapse-storage)
9
5
  [![TypeScript](https://img.shields.io/badge/TypeScript-Ready-blue)](https://www.typescriptlang.org/)
10
6
  [![RxJS Version](https://img.shields.io/badge/RxJS-%5E7.8.2-red?logo=reactivex)](https://rxjs.dev/)
11
7
 
12
- ## Key Features
13
-
14
- - 🚀 **Framework Agnostic** - You can use Synapse with any framework or independently
15
- - 💾 **Various Storage Adapters** - Memory, LocalStorage, IndexedDB
16
- - 🧮 **Different Ways to Access Data** - Computed values with memoization
17
- - Ability to create Redux-style computed selectors
18
- - Ability to directly subscribe to specific properties in storage
19
- - Ability to subscribe to reactive state
20
- - 🌐 **API Client Creation** - HTTP client with caching capabilities (Similar to RTK Query)
21
- - ⚛️ **React** - Several convenient hooks for React
22
- - ⚡ **RxJS** - Ability to create Redux-Observable style effects
23
- - ⚙️ **Custom Middleware Support** - Ability to extend storage functionality with custom middlewares
24
- - 🔌 **Custom Plugin Support** - Ability to extend storage functionality with custom plugins
25
-
26
- ---
27
- ## Author
28
-
29
- **Vladislav** — Senior Frontend Developer (React, TypeScript)
30
-
31
- > ### 🔎 Currently looking for new career opportunities!
32
- >
33
- > [GitHub](https://github.com/Vlad92msk/) | [LinkedIn](https://www.linkedin.com/in/vlad-firsov/)
8
+ Framework-agnostic state management toolkit and API client for TypeScript applications.
9
+ Combines reactive storage, memoized selectors, Redux-Observable style effects, and a tag-based HTTP cache — all in one library.
34
10
 
35
- ---
36
- *PS: Not recommended for production use yet as I develop this in my free time.
37
- The library works in general, but I can provide guarantees only after full integration into my pet project - Social Network.
38
- This won't happen before changing my current workplace and country of residence*
39
- ---
40
-
41
- ## 📦 Installation
11
+ ## Quick Start
42
12
 
43
13
  ```bash
44
14
  npm install synapse-storage
45
15
  ```
46
16
 
47
- ```bash
48
- # For reactive capabilities
49
- npm install rxjs
50
-
51
- # For React integration
52
- npm install react react-dom
53
-
54
- # All at once for full functionality
55
- npm install synapse-storage rxjs react react-dom
56
- ```
57
-
58
- | Module | Description | Dependencies |
59
- |--------|-------------|--------------|
60
- | `synapse-storage/core` | base | - |
61
- | `synapse-storage/react` | React | React 18+ |
62
- | `synapse-storage/reactive` | RxJS | RxJS 7.8.2+ |
63
- | `synapse-storage/api` | HTTP client | - |
64
- | `synapse-storage/utils` | Utils | - |
65
-
66
- > **💡 Tip:** Import only the modules you need for optimal bundle size
67
-
68
- ### tsconfig.json:
69
- ```json
70
- {
71
- "compilerOptions": {
72
- "target": "ES2022",
73
- "module": "ES2022",
74
- "moduleResolution": "bundler"
75
- }
76
- }
77
- ```
78
-
79
- ## 📚 Documentation
80
-
81
- - [📖 Main](./README.md)
82
- - [🚀 Basic Usage](./docs/en/basic-usage.md)
83
- - [🧮 Redux-style Computed Selectors](./docs/en/redux-selectors.md)
84
- - [⚙️ Middlewares](./docs/en/middlewares.md)
85
- - [🌐 API Client](./docs/en/api-client.md)
86
- - ⚡ Reactive Approach
87
- - [⚡ Creating Dispatcher](./docs/en/create-dispatcher.md)
88
- - [⚡ Creating Effects](./docs/en/create-effects.md)
89
- - [⚡ Creating Effects Module](./docs/en/create-effects-module.md)
90
- - [🛠️ createSynapse Utility](./docs/en/create-synapse.md)
91
- - [🔌 Creating Custom Plugins](./docs/en/custom-plugins.md)
92
- - [⚙️ Creating Custom Middlewares](./docs/en/custom-middlewares.md)
93
- - [📋 Additional](./docs/en/additional.md)
94
-
95
- ## 🎯 Examples
96
-
97
- - [GitHub](https://github.com/Vlad92msk/synapse-examples)
98
- - [YouTube](https://www.youtube.com/channel/UCGENI_i4qmBkPp98P2HvvGw)
99
-
100
- ---
101
-
102
- ## 📊 Why Synapse Storage?
103
-
104
- **One library instead of many** - Synapse combines functionality that usually requires multiple dependencies:
105
-
106
- | What you get | Traditional approach | Synapse Storage |
107
- |--------------|---------------------|---------|
108
- | **State Management** | Redux + RTK (~45KB) | ✅ |
109
- | **HTTP Client + Caching** | React Query (~39KB) | ✅|
110
- | **Reactive Effects** | Redux-Observable (~25KB) | ✅|
111
- | **Storage Adapters** | Custom solutions | ✅|
112
- | **React Integration** | Custom hooks | ✅|
113
- | **Computed Selectors** | Reselect (~5KB) | ✅|
114
- | **Middleware System** | Custom implementation | ✅|
115
- | **Plugin Architecture** | Custom implementation | ✅|
116
-
117
- ### Bundle Size Comparison
118
-
119
- ```typescript
120
- // Traditional stack
121
- import { configureStore } from '@reduxjs/toolkit' // ~45KB
122
- import { createApi } from '@reduxjs/toolkit/query' // included in RTK
123
- import { QueryClient } from '@tanstack/react-query' // ~39KB
124
- import { createEpicMiddleware } from 'redux-observable' // ~25KB
125
- // Total: ~109KB + custom implementations
126
-
127
- // Synapse Storage
128
- import { createSynapse } from 'synapse-storage' // ~171KB
129
- // Total: 171KB with ALL features included
130
- ```
131
-
132
- ### Modular Usage
133
-
134
- Don't need everything? Import only what you use:
135
-
136
- | Use Case | Import | Size | Comparison |
137
- |-------------------|------------------------|------|---------------------------|
138
- | **Basic state** | `synapse-storage/core` | ~42KB | vs Redux: 45KB |
139
- | **+ HTTP client** | `+ /api` | +13KB | vs React Query: 39KB |
140
- | **+ Reactive** | `+ /reactive` | +8KB | vs Redux-Observable: 25KB |
141
- | **+ React hooks** | `+ /react` | +5KB | vs Custom hooks |
142
- | **Full package** | all modules | ~171KB |vs 109KB stack + custom |
143
-
144
- > **🎯 Result:** Similar or better performance with unified API and TypeScript support out of the box
145
-
146
- ## 🧩 Modular Architecture "Like a Constructor"
147
-
148
- **Use only what you need** - each module works independently:
149
-
150
- ### 🎯 Flexible Usage Scenarios
151
-
152
17
  ```typescript
153
- // 📦 Minimal project - storage only
154
18
  import { MemoryStorage } from 'synapse-storage/core'
155
-
156
- // 📦 + Add HTTP client when needed
157
- import { ApiClient } from 'synapse-storage/api'
158
-
159
- // 📦 + Add reactive effects when required
160
- import { createDispatcher } from 'synapse-storage/reactive'
161
-
162
- // 📦 + Add React hooks for UI
19
+ import { createSynapse } from 'synapse-storage/utils'
163
20
  import { useSelector } from 'synapse-storage/react'
164
- ```
165
21
 
166
- ### 🔧 Or Create Your Own Implementation
167
-
168
- ```typescript
169
- // Use core + your solutions
170
- import { IStorage } from 'synapse-storage/core'
171
-
172
- // Implement your HTTP client
173
- class MyApiClient { /* your logic */ }
22
+ const synapse = createSynapse({
23
+ storage: new MemoryStorage({
24
+ name: 'counter',
25
+ initialState: { count: 0 },
26
+ }),
27
+ createSelectorsFn: (s) => ({
28
+ count: s.createSelector((state) => state.count),
29
+ }),
30
+ })
31
+ ```
174
32
 
175
- // Implement your React hooks
176
- const useMyCustomHook = () => { /* your logic */ }
33
+ ## Key Features
177
34
 
178
- // Combine as convenient!
179
- ```
35
+ - **Sync & Async Storage** — MemoryStorage, LocalStorage (synchronous), IndexedDB (async) with unified API
36
+ - **Selectors** — memoized computed values with dependency tracking
37
+ - **Immer-like Updates** — mutate state directly inside `update()` callbacks
38
+ - **API Client** — HTTP client with tag-based caching and invalidation
39
+ - **React Integration** — hooks on `useSyncExternalStore` (Concurrent Mode safe)
40
+ - **RxJS Effects** — dispatchers, effects, and watchers (Redux-Observable style)
41
+ - **Middleware & Plugins** — extensible sync/async pipelines
42
+ - **EventBus** — decoupled inter-module communication with wildcards
43
+ - **Cross-tab Sync** — BroadcastChannel middleware for multi-tab state
180
44
 
181
- ### 🎨 Constructor Approach Benefits
45
+ ## Documentation
182
46
 
183
- - **🚀 Quick Start** - begin with core, add modules as project grows
184
- - **📦 Optimal Bundle** - don't pay for unused functionality
185
- - **🔄 Flexibility** - replace any module with your implementation
186
- - **🛠️ Compatibility** - modules work independently but integrate perfectly
187
- - **📈 Scalability** - from simple state to full-featured architecture
47
+ Full documentation, API reference, and examples available on [GitHub](https://github.com/Vlad92msk/synapse).
188
48
 
189
- > **💡 Evolution Example:** Started with MemoryStorage → added ApiClient → connected reactive effects → integrated React hooks. **Each step is optional!**
49
+ ## License
190
50
 
191
- ---
51
+ MIT
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Разбивает массив на группы элементов указанного размера.
3
+ * @param array - Массив для разбиения
4
+ * @param size - Размер каждой группы
5
+ * @returns Массив групп элементов
6
+ */
7
+ export declare function chunk<T>(array: T[], size?: number): T[][];
8
+ //# sourceMappingURL=chunk.util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk.util.d.ts","sourceRoot":"","sources":["../../src/_utils/chunk.util.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,GAAE,MAAU,GAAG,CAAC,EAAE,EAAE,CAe5D"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Разбивает массив на группы элементов указанного размера.
3
+ * @param array - Массив для разбиения
4
+ * @param size - Размер каждой группы
5
+ * @returns Массив групп элементов
6
+ */ function chunk(array, size = 1) {
7
+ if (size <= 0) throw new Error('Size must be greater than 0');
8
+ if (!array || !array.length) return [];
9
+ const result = [];
10
+ const length = array.length;
11
+ let index = 0;
12
+ while(index < length){
13
+ result.push(array.slice(index, index + size));
14
+ index += size;
15
+ }
16
+ return result;
17
+ }
18
+
19
+ export { chunk };
20
+
21
+ //# sourceMappingURL=chunk.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_utils/chunk.util.js","sources":["../../src/_utils/chunk.util.ts"],"sourcesContent":["/**\n * Разбивает массив на группы элементов указанного размера.\n * @param array - Массив для разбиения\n * @param size - Размер каждой группы\n * @returns Массив групп элементов\n */\nexport function chunk<T>(array: T[], size: number = 1): T[][] {\n if (size <= 0) throw new Error('Size must be greater than 0')\n\n if (!array || !array.length) return []\n\n const result: T[][] = []\n const length = array.length\n let index = 0\n\n while (index < length) {\n result.push(array.slice(index, index + size))\n index += size\n }\n\n return result\n}\n"],"names":["chunk","array","size","Error","result","length","index"],"mappings":"AAAA;;;;;CAKC,GACM,SAASA,KAAKA,CAAIC,KAAU,EAAEC,OAAe,CAAC;IACnD,IAAIA,QAAQ,GAAG,MAAM,IAAIC,MAAM;IAE/B,IAAI,CAACF,SAAS,CAACA,MAAM,MAAM,EAAE,OAAO,EAAE;IAEtC,MAAMG,SAAgB,EAAE;IACxB,MAAMC,SAASJ,MAAM,MAAM;IAC3B,IAAIK,QAAQ;IAEZ,MAAOA,QAAQD,OAAQ;QACrBD,OAAO,IAAI,CAACH,MAAM,KAAK,CAACK,OAAOA,QAAQJ;QACvCI,SAASJ;IACX;IAEA,OAAOE;AACT"}
@@ -0,0 +1,2 @@
1
+ export declare const deepMerge: (target: any, source: any) => any;
2
+ //# sourceMappingURL=deepMerge.util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepMerge.util.d.ts","sourceRoot":"","sources":["../../src/_utils/deepMerge.util.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,GAAI,QAAQ,GAAG,EAAE,QAAQ,GAAG,QAcjD,CAAA"}
@@ -0,0 +1,19 @@
1
+ const deepMerge = (target, source)=>{
2
+ for(const key in source){
3
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
4
+ if (typeof source[key] === 'object' && source[key] !== null && !Array.isArray(source[key])) {
5
+ if (!target[key] || typeof target[key] !== 'object') {
6
+ target[key] = {};
7
+ }
8
+ deepMerge(target[key], source[key]);
9
+ } else {
10
+ target[key] = source[key];
11
+ }
12
+ }
13
+ }
14
+ return target;
15
+ };
16
+
17
+ export { deepMerge };
18
+
19
+ //# sourceMappingURL=deepMerge.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_utils/deepMerge.util.js","sources":["../../src/_utils/deepMerge.util.ts"],"sourcesContent":["export const deepMerge = (target: any, source: any) => {\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n if (typeof source[key] === 'object' && source[key] !== null && !Array.isArray(source[key])) {\n if (!target[key] || typeof target[key] !== 'object') {\n target[key] = {}\n }\n deepMerge(target[key], source[key])\n } else {\n target[key] = source[key]\n }\n }\n }\n return target\n}\n"],"names":["deepMerge","target","source","key","Object","Array"],"mappings":"AAAO,MAAMA,SAASA,GAAG,CAACC,QAAaC;IACrC,IAAK,MAAMC,OAAOD,OAAQ;QACxB,IAAIE,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAACF,QAAQC,MAAM;YACrD,IAAI,OAAOD,MAAM,CAACC,IAAI,KAAK,YAAYD,MAAM,CAACC,IAAI,KAAK,QAAQ,CAACE,MAAM,OAAO,CAACH,MAAM,CAACC,IAAI,GAAG;gBAC1F,IAAI,CAACF,MAAM,CAACE,IAAI,IAAI,OAAOF,MAAM,CAACE,IAAI,KAAK,UAAU;oBACnDF,MAAM,CAACE,IAAI,GAAG,CAAC;gBACjB;gBACAH,SAASA,CAACC,MAAM,CAACE,IAAI,EAAED,MAAM,CAACC,IAAI;YACpC,OAAO;gBACLF,MAAM,CAACE,IAAI,GAAGD,MAAM,CAACC,IAAI;YAC3B;QACF;IACF;IACA,OAAOF;AACT,EAAC"}
@@ -0,0 +1,50 @@
1
+ import type { ILogger } from '../core/storage/storage.interface';
2
+ /**
3
+ * Базовый класс ошибок Synapse.
4
+ * Позволяет отличать ошибки библиотеки от прочих через `instanceof`.
5
+ */
6
+ export declare class SynapseError extends Error {
7
+ readonly context?: string | undefined;
8
+ readonly cause?: unknown | undefined;
9
+ constructor(message: string, context?: string | undefined, cause?: unknown | undefined);
10
+ }
11
+ /**
12
+ * Категории обработки ошибок в Synapse:
13
+ *
14
+ * - CRITICAL: Ошибки конфигурации/инициализации → log + throw (fail fast)
15
+ * - OPERATION: Ошибки CRUD-операций → log + rethrow (вызывающий код решает)
16
+ * - CALLBACK: Ошибки в пользовательских callback'ах → log + swallow (не крашим приложение)
17
+ * - CLEANUP: Ошибки при destroy/unsubscribe → log + swallow (best-effort)
18
+ */
19
+ type LogMethod = 'error' | 'warn';
20
+ /**
21
+ * Логирует ошибку через ILogger (если есть) или через console-fallback.
22
+ */
23
+ export declare function logError(message: string, error: unknown, logger?: ILogger | null, level?: LogMethod): void;
24
+ /**
25
+ * OPERATION pattern: логирует и пробрасывает ошибку.
26
+ * Для CRUD-операций (get, set, update, delete) и инициализации.
27
+ */
28
+ export declare function handleOperationError(context: string, error: unknown, logger?: ILogger | null): never;
29
+ /**
30
+ * CALLBACK pattern: логирует и проглатывает ошибку.
31
+ * Для пользовательских callback'ов, подписчиков, эффектов.
32
+ * Ошибка в одном callback'е не должна ломать остальные.
33
+ */
34
+ export declare function handleCallbackError(context: string, error: unknown, logger?: ILogger | null): void;
35
+ /**
36
+ * CLEANUP pattern: логирует предупреждение и продолжает.
37
+ * Для destroy(), unsubscribe() и прочих cleanup-операций.
38
+ */
39
+ export declare function handleCleanupError(context: string, error: unknown, logger?: ILogger | null): void;
40
+ /**
41
+ * Обёртка для безопасного вызова callback'а (CALLBACK pattern).
42
+ * Возвращает результат или undefined при ошибке.
43
+ */
44
+ export declare function safeCallback<T>(fn: () => T, context: string, logger?: ILogger | null): T | undefined;
45
+ /**
46
+ * Обёртка для promise в fire-and-forget сценариях (CLEANUP pattern).
47
+ */
48
+ export declare function safePromise(promise: Promise<unknown>, context: string, logger?: ILogger | null): void;
49
+ export {};
50
+ //# sourceMappingURL=error-handling.util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-handling.util.d.ts","sourceRoot":"","sources":["../../src/_utils/error-handling.util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAA;AAGhE;;;GAGG;AACH,qBAAa,YAAa,SAAQ,KAAK;aAGnB,OAAO,CAAC,EAAE,MAAM;aAChB,KAAK,CAAC,EAAE,OAAO;gBAF/B,OAAO,EAAE,MAAM,EACC,OAAO,CAAC,EAAE,MAAM,YAAA,EAChB,KAAK,CAAC,EAAE,OAAO,YAAA;CAKlC;AAED;;;;;;;GAOG;AAEH,KAAK,SAAS,GAAG,OAAO,GAAG,MAAM,CAAA;AAEjC;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,EAAE,KAAK,GAAE,SAAmB,GAAG,IAAI,CAOnH;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,KAAK,CAGpG;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,CAElG;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,CAEjG;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,SAAS,CAOpG;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,CAErG"}
@@ -0,0 +1,67 @@
1
+ import { loggerConsole } from "./logger-console.util.js";
2
+
3
+
4
+
5
+ /**
6
+ * Базовый класс ошибок Synapse.
7
+ * Позволяет отличать ошибки библиотеки от прочих через `instanceof`.
8
+ */ class SynapseError extends Error {
9
+ context;
10
+ cause;
11
+ constructor(message, context, cause){
12
+ super(context ? `[${context}] ${message}` : message), this.context = context, this.cause = cause;
13
+ this.name = 'SynapseError';
14
+ }
15
+ }
16
+ /**
17
+ * Логирует ошибку через ILogger (если есть) или через console-fallback.
18
+ */ function logError(message, error, logger, level = 'error') {
19
+ const meta = {
20
+ error: error instanceof Error ? error.message : String(error)
21
+ };
22
+ if (logger) {
23
+ logger[level](message, meta);
24
+ } else {
25
+ loggerConsole[level](`[Synapse] ${message}`, error);
26
+ }
27
+ }
28
+ /**
29
+ * OPERATION pattern: логирует и пробрасывает ошибку.
30
+ * Для CRUD-операций (get, set, update, delete) и инициализации.
31
+ */ function handleOperationError(context, error, logger) {
32
+ logError(context, error, logger);
33
+ throw error;
34
+ }
35
+ /**
36
+ * CALLBACK pattern: логирует и проглатывает ошибку.
37
+ * Для пользовательских callback'ов, подписчиков, эффектов.
38
+ * Ошибка в одном callback'е не должна ломать остальные.
39
+ */ function handleCallbackError(context, error, logger) {
40
+ logError(context, error, logger);
41
+ }
42
+ /**
43
+ * CLEANUP pattern: логирует предупреждение и продолжает.
44
+ * Для destroy(), unsubscribe() и прочих cleanup-операций.
45
+ */ function handleCleanupError(context, error, logger) {
46
+ logError(context, error, logger, 'warn');
47
+ }
48
+ /**
49
+ * Обёртка для безопасного вызова callback'а (CALLBACK pattern).
50
+ * Возвращает результат или undefined при ошибке.
51
+ */ function safeCallback(fn, context, logger) {
52
+ try {
53
+ return fn();
54
+ } catch (error) {
55
+ handleCallbackError(context, error, logger);
56
+ return undefined;
57
+ }
58
+ }
59
+ /**
60
+ * Обёртка для promise в fire-and-forget сценариях (CLEANUP pattern).
61
+ */ function safePromise(promise, context, logger) {
62
+ promise.catch((error)=>handleCleanupError(context, error, logger));
63
+ }
64
+
65
+ export { SynapseError, handleCallbackError, handleCleanupError, handleOperationError, logError, safeCallback, safePromise };
66
+
67
+ //# sourceMappingURL=error-handling.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_utils/error-handling.util.js","sources":["../../src/_utils/error-handling.util.ts"],"sourcesContent":["import type { ILogger } from '../core/storage/storage.interface'\nimport { loggerConsole } from './logger-console.util'\n\n/**\n * Базовый класс ошибок Synapse.\n * Позволяет отличать ошибки библиотеки от прочих через `instanceof`.\n */\nexport class SynapseError extends Error {\n constructor(\n message: string,\n public readonly context?: string,\n public readonly cause?: unknown,\n ) {\n super(context ? `[${context}] ${message}` : message)\n this.name = 'SynapseError'\n }\n}\n\n/**\n * Категории обработки ошибок в Synapse:\n *\n * - CRITICAL: Ошибки конфигурации/инициализации → log + throw (fail fast)\n * - OPERATION: Ошибки CRUD-операций → log + rethrow (вызывающий код решает)\n * - CALLBACK: Ошибки в пользовательских callback'ах → log + swallow (не крашим приложение)\n * - CLEANUP: Ошибки при destroy/unsubscribe → log + swallow (best-effort)\n */\n\ntype LogMethod = 'error' | 'warn'\n\n/**\n * Логирует ошибку через ILogger (если есть) или через console-fallback.\n */\nexport function logError(message: string, error: unknown, logger?: ILogger | null, level: LogMethod = 'error'): void {\n const meta = { error: error instanceof Error ? error.message : String(error) }\n if (logger) {\n logger[level](message, meta)\n } else {\n loggerConsole[level](`[Synapse] ${message}`, error)\n }\n}\n\n/**\n * OPERATION pattern: логирует и пробрасывает ошибку.\n * Для CRUD-операций (get, set, update, delete) и инициализации.\n */\nexport function handleOperationError(context: string, error: unknown, logger?: ILogger | null): never {\n logError(context, error, logger)\n throw error\n}\n\n/**\n * CALLBACK pattern: логирует и проглатывает ошибку.\n * Для пользовательских callback'ов, подписчиков, эффектов.\n * Ошибка в одном callback'е не должна ломать остальные.\n */\nexport function handleCallbackError(context: string, error: unknown, logger?: ILogger | null): void {\n logError(context, error, logger)\n}\n\n/**\n * CLEANUP pattern: логирует предупреждение и продолжает.\n * Для destroy(), unsubscribe() и прочих cleanup-операций.\n */\nexport function handleCleanupError(context: string, error: unknown, logger?: ILogger | null): void {\n logError(context, error, logger, 'warn')\n}\n\n/**\n * Обёртка для безопасного вызова callback'а (CALLBACK pattern).\n * Возвращает результат или undefined при ошибке.\n */\nexport function safeCallback<T>(fn: () => T, context: string, logger?: ILogger | null): T | undefined {\n try {\n return fn()\n } catch (error) {\n handleCallbackError(context, error, logger)\n return undefined\n }\n}\n\n/**\n * Обёртка для promise в fire-and-forget сценариях (CLEANUP pattern).\n */\nexport function safePromise(promise: Promise<unknown>, context: string, logger?: ILogger | null): void {\n promise.catch((error) => handleCleanupError(context, error, logger))\n}\n"],"names":["loggerConsole","SynapseError","Error","message","context","cause","logError","error","logger","level","meta","String","handleOperationError","handleCallbackError","handleCleanupError","safeCallback","fn","undefined","safePromise","promise"],"mappings":";;;AACqD;AAErD;;;CAGC,GACM,MAAMC,YAAYA,SAASC;;;IAChC,YACEC,OAAe,EACCC,OAAgB,EAChBC,KAAe,CAC/B;QACA,KAAK,CAACD,UAAU,CAAC,CAAC,EAAEA,QAAQ,EAAE,EAAED,SAAS,GAAGA,eAH5BC,UAAAA,cACAC,QAAAA;QAGhB,IAAI,CAAC,IAAI,GAAG;IACd;AACF;AAaA;;CAEC,GACM,SAASC,QAAQA,CAACH,OAAe,EAAEI,KAAc,EAAEC,MAAuB,EAAEC,QAAmB,OAAO;IAC3G,MAAMC,OAAO;QAAE,OAAOH,iBAAiBL,QAAQK,MAAM,OAAO,GAAGI,OAAOJ;IAAO;IAC7E,IAAIC,QAAQ;QACVA,MAAM,CAACC,MAAM,CAACN,SAASO;IACzB,OAAO;QACLV,aAAa,CAACS,MAAM,CAAC,CAAC,UAAU,EAAEN,SAAS,EAAEI;IAC/C;AACF;AAEA;;;CAGC,GACM,SAASK,oBAAoBA,CAACR,OAAe,EAAEG,KAAc,EAAEC,MAAuB;IAC3FF,QAAQA,CAACF,SAASG,OAAOC;IACzB,MAAMD;AACR;AAEA;;;;CAIC,GACM,SAASM,mBAAmBA,CAACT,OAAe,EAAEG,KAAc,EAAEC,MAAuB;IAC1FF,QAAQA,CAACF,SAASG,OAAOC;AAC3B;AAEA;;;CAGC,GACM,SAASM,kBAAkBA,CAACV,OAAe,EAAEG,KAAc,EAAEC,MAAuB;IACzFF,QAAQA,CAACF,SAASG,OAAOC,QAAQ;AACnC;AAEA;;;CAGC,GACM,SAASO,YAAYA,CAAIC,EAAW,EAAEZ,OAAe,EAAEI,MAAuB;IACnF,IAAI;QACF,OAAOQ;IACT,EAAE,OAAOT,OAAO;QACdM,mBAAmBA,CAACT,SAASG,OAAOC;QACpC,OAAOS;IACT;AACF;AAEA;;CAEC,GACM,SAASC,WAAWA,CAACC,OAAyB,EAAEf,OAAe,EAAEI,MAAuB;IAC7FW,QAAQ,KAAK,CAAC,CAACZ,QAAUO,kBAAkBA,CAACV,SAASG,OAAOC;AAC9D"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Создает новый массив, применяя функцию к каждому элементу массива,
3
+ * а затем сглаживает результат на один уровень.
4
+ *
5
+ * @param array - Исходный массив
6
+ * @param iteratee - Функция, применяемая к каждому элементу
7
+ * @returns Новый сглаженный массив
8
+ */
9
+ export declare function flatMap<T, R>(array: T[], iteratee: (value: T, index: number, array: T[]) => R | R[]): R[];
10
+ //# sourceMappingURL=flatMap.util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flatMap.util.d.ts","sourceRoot":"","sources":["../../src/_utils/flatMap.util.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAczG"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Создает новый массив, применяя функцию к каждому элементу массива,
3
+ * а затем сглаживает результат на один уровень.
4
+ *
5
+ * @param array - Исходный массив
6
+ * @param iteratee - Функция, применяемая к каждому элементу
7
+ * @returns Новый сглаженный массив
8
+ */ function flatMap(array, iteratee) {
9
+ if (!array || !array.length) return [];
10
+ return array.reduce((acc, value, index)=>{
11
+ const mapped = iteratee(value, index, array);
12
+ if (Array.isArray(mapped)) {
13
+ acc.push(...mapped);
14
+ } else {
15
+ acc.push(mapped);
16
+ }
17
+ return acc;
18
+ }, []);
19
+ }
20
+
21
+ export { flatMap };
22
+
23
+ //# sourceMappingURL=flatMap.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_utils/flatMap.util.js","sources":["../../src/_utils/flatMap.util.ts"],"sourcesContent":["/**\n * Создает новый массив, применяя функцию к каждому элементу массива,\n * а затем сглаживает результат на один уровень.\n *\n * @param array - Исходный массив\n * @param iteratee - Функция, применяемая к каждому элементу\n * @returns Новый сглаженный массив\n */\nexport function flatMap<T, R>(array: T[], iteratee: (value: T, index: number, array: T[]) => R | R[]): R[] {\n if (!array || !array.length) return []\n\n return array.reduce((acc: R[], value: T, index: number) => {\n const mapped = iteratee(value, index, array)\n\n if (Array.isArray(mapped)) {\n acc.push(...mapped)\n } else {\n acc.push(mapped)\n }\n\n return acc\n }, [])\n}\n"],"names":["flatMap","array","iteratee","acc","value","index","mapped","Array"],"mappings":"AAAA;;;;;;;CAOC,GACM,SAASA,OAAOA,CAAOC,KAAU,EAAEC,QAA0D;IAClG,IAAI,CAACD,SAAS,CAACA,MAAM,MAAM,EAAE,OAAO,EAAE;IAEtC,OAAOA,MAAM,MAAM,CAAC,CAACE,KAAUC,OAAUC;QACvC,MAAMC,SAASJ,SAASE,OAAOC,OAAOJ;QAEtC,IAAIM,MAAM,OAAO,CAACD,SAAS;YACzBH,IAAI,IAAI,IAAIG;QACd,OAAO;YACLH,IAAI,IAAI,CAACG;QACX;QAEA,OAAOH;IACT,GAAG,EAAE;AACP"}
@@ -0,0 +1,6 @@
1
+ export * from './chunk.util';
2
+ export * from './deepMerge.util';
3
+ export * from './error-handling.util';
4
+ export * from './flatMap.util';
5
+ export * from './logger-console.util';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/_utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,uBAAuB,CAAA;AACrC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA"}
@@ -0,0 +1,13 @@
1
+ export * from "./chunk.util.js";
2
+ export * from "./deepMerge.util.js";
3
+ export * from "./error-handling.util.js";
4
+ export * from "./flatMap.util.js";
5
+ export * from "./logger-console.util.js";
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_utils/index.js","sources":["../../src/_utils/index.ts"],"sourcesContent":["export * from './chunk.util'\nexport * from './deepMerge.util'\nexport * from './error-handling.util'\nexport * from './flatMap.util'\nexport * from './logger-console.util'\n"],"names":[],"mappings":";;;;;AAA4B;AACI;AACK;AACP;AACO"}
@@ -0,0 +1,9 @@
1
+ export declare const loggerConsole: {
2
+ log: (...args: any[]) => void;
3
+ warn: (...args: any[]) => void;
4
+ error: (...args: any[]) => void;
5
+ group: (...args: any[]) => void;
6
+ groupEnd: () => void;
7
+ groupCollapsed: (...args: any[]) => void;
8
+ };
9
+ //# sourceMappingURL=logger-console.util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger-console.util.d.ts","sourceRoot":"","sources":["../../src/_utils/logger-console.util.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa;mBACT,GAAG,EAAE;oBACJ,GAAG,EAAE;qBACJ,GAAG,EAAE;qBACL,GAAG,EAAE;;8BAEI,GAAG,EAAE;CAChC,CAAA"}
@@ -0,0 +1,14 @@
1
+ const globalConsole = globalThis.console;
2
+ // Экспортируем обертку, которая использует console через globalThis
3
+ const loggerConsole = {
4
+ log: (...args)=>globalConsole.log(...args),
5
+ warn: (...args)=>globalConsole.warn(...args),
6
+ error: (...args)=>globalConsole.error(...args),
7
+ group: (...args)=>globalConsole.group(...args),
8
+ groupEnd: ()=>globalConsole.groupEnd(),
9
+ groupCollapsed: (...args)=>globalConsole.groupCollapsed(...args)
10
+ };
11
+
12
+ export { loggerConsole };
13
+
14
+ //# sourceMappingURL=logger-console.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_utils/logger-console.util.js","sources":["../../src/_utils/logger-console.util.ts"],"sourcesContent":["const globalConsole = globalThis.console\n\n// Экспортируем обертку, которая использует console через globalThis\nexport const loggerConsole = {\n log: (...args: any[]) => globalConsole.log(...args),\n warn: (...args: any[]) => globalConsole.warn(...args),\n error: (...args: any[]) => globalConsole.error(...args),\n group: (...args: any[]) => globalConsole.group(...args),\n groupEnd: () => globalConsole.groupEnd(),\n groupCollapsed: (...args: any[]) => globalConsole.groupCollapsed(...args),\n}\n"],"names":["globalConsole","globalThis","loggerConsole","args"],"mappings":"AAAA,MAAMA,aAAaA,GAAGC,WAAW,OAAO;AAExC,oEAAoE;AAC7D,MAAMC,aAAaA,GAAG;IAC3B,KAAK,CAAC,GAAGC,OAAgBH,aAAaA,CAAC,GAAG,IAAIG;IAC9C,MAAM,CAAC,GAAGA,OAAgBH,aAAaA,CAAC,IAAI,IAAIG;IAChD,OAAO,CAAC,GAAGA,OAAgBH,aAAaA,CAAC,KAAK,IAAIG;IAClD,OAAO,CAAC,GAAGA,OAAgBH,aAAaA,CAAC,KAAK,IAAIG;IAClD,UAAU,IAAMH,aAAaA,CAAC,QAAQ;IACtC,gBAAgB,CAAC,GAAGG,OAAgBH,aAAaA,CAAC,cAAc,IAAIG;AACtE,EAAC"}
@@ -0,0 +1,46 @@
1
+ import { CreateApiClientOptions, ExtractParamsType, ExtractResultType } from './types/api.interface';
2
+ import { CreateEndpoint, Endpoint as EndpointType, EndpointConfig } from './types/endpoint.interface';
3
+ import { QueryOptions, QueryResult } from './types/query.interface';
4
+ type EndpointsResult<F> = F extends (create: any) => Promise<infer R> ? R : never;
5
+ type EndpointsMap<EndpointsFn> = {
6
+ [K in keyof EndpointsResult<EndpointsFn>]: EndpointType<ExtractParamsType<EndpointsResult<EndpointsFn>[K]>, ExtractResultType<EndpointsResult<EndpointsFn>[K]>>;
7
+ };
8
+ export declare class ApiClient<EndpointsFn extends (create: CreateEndpoint) => Promise<Record<string, EndpointConfig<any, any>>>> {
9
+ /** Хранилище запросов */
10
+ private queryStorage;
11
+ /** Флаг завершённой инициализации */
12
+ private _initialized;
13
+ /** Промис текущей инициализации (для дедупликации параллельных вызовов) */
14
+ private _initPromise;
15
+ private readonly cacheableHeaderKeys;
16
+ private readonly globalCacheConfig;
17
+ private readonly baseQueryConfig;
18
+ private readonly storageExternal;
19
+ private readonly globalRetryConfig;
20
+ private readonly createEndpoints;
21
+ /** Реестр эндпоинтов */
22
+ private endpoints;
23
+ constructor(options: Omit<CreateApiClientOptions, 'endpoints'> & {
24
+ endpoints: EndpointsFn;
25
+ });
26
+ init(): Promise<this>;
27
+ private _doInit;
28
+ private initializeEndpoints;
29
+ private ensureInitialized;
30
+ /**
31
+ * Получает все эндпоинты с улучшенной типизацией
32
+ * @returns Типизированный объект эндпоинтов
33
+ */
34
+ getEndpoints(): EndpointsMap<EndpointsFn>;
35
+ /**
36
+ * Выполняет запрос к API с типизацией и обработкой ошибок
37
+ * @param endpointName Имя эндпоинта (с подсказками TypeScript)
38
+ * @param params Параметры запроса (с типизацией)
39
+ * @param options Опции запроса
40
+ * @returns Promise с типизированным результатом запроса
41
+ */
42
+ request<K extends keyof EndpointsResult<EndpointsFn> & string>(endpointName: K, params: ExtractParamsType<EndpointsResult<EndpointsFn>[K]>, options?: QueryOptions): Promise<QueryResult<ExtractResultType<EndpointsResult<EndpointsFn>[K]>, Error>>;
43
+ destroy(): Promise<void>;
44
+ }
45
+ export {};
46
+ //# sourceMappingURL=api.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.module.d.ts","sourceRoot":"","sources":["../../src/api/api.module.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACpG,OAAO,EAAE,cAAc,EAAE,QAAQ,IAAI,YAAY,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AACrG,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAInE,KAAK,eAAe,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;AAGjF,KAAK,YAAY,CAAC,WAAW,IAAI;KAC9B,CAAC,IAAI,MAAM,eAAe,CAAC,WAAW,CAAC,GAAG,YAAY,CAAC,iBAAiB,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAChK,CAAA;AAED,qBAAa,SAAS,CAAC,WAAW,SAAS,CAAC,MAAM,EAAE,cAAc,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACtH,yBAAyB;IACzB,OAAO,CAAC,YAAY,CAAe;IAEnC,qCAAqC;IACrC,OAAO,CAAC,YAAY,CAAQ;IAE5B,2EAA2E;IAC3E,OAAO,CAAC,YAAY,CAA6B;IAEjD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA+C;IAEnF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAiC;IAEnE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqC;IAErE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAmC;IAEnE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAiC;IAEnE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAa;IAE7C,wBAAwB;IACxB,OAAO,CAAC,SAAS,CAEX;gBAEM,OAAO,EAAE,IAAI,CAAC,sBAAsB,EAAE,WAAW,CAAC,GAAG;QAAE,SAAS,EAAE,WAAW,CAAA;KAAE;IAU9E,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAQpB,OAAO;YAgBP,mBAAmB;IAqBjC,OAAO,CAAC,iBAAiB;IAMzB;;;OAGG;IACI,YAAY,IAAI,YAAY,CAAC,WAAW,CAAC;IAKhD;;;;;;OAMG;IACU,OAAO,CAAC,CAAC,SAAS,MAAM,eAAe,CAAC,WAAW,CAAC,GAAG,MAAM,EACxE,YAAY,EAAE,CAAC,EACf,MAAM,EAAE,iBAAiB,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAC1D,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,WAAW,CAAC,iBAAiB,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAmBrE,OAAO;CAerB"}