synapse-storage 3.0.1 → 3.0.3

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 (282) hide show
  1. package/dist/api.cjs +891 -0
  2. package/dist/api.cjs.map +1 -0
  3. package/dist/api.d.cts +365 -0
  4. package/dist/api.d.ts +365 -0
  5. package/dist/api.js +860 -0
  6. package/dist/api.js.map +1 -0
  7. package/dist/core.cjs +2389 -0
  8. package/dist/core.cjs.map +1 -0
  9. package/dist/core.d.cts +397 -0
  10. package/dist/{core/storage/modules/plugin/plugin.interface.d.ts → core.d.ts} +203 -7
  11. package/dist/core.js +2356 -0
  12. package/dist/core.js.map +1 -0
  13. package/dist/dispatcher.module-CdpmkplA.d.cts +363 -0
  14. package/dist/dispatcher.module-jd8U_ZEs.d.ts +363 -0
  15. package/dist/index.cjs +4148 -0
  16. package/dist/index.cjs.map +1 -0
  17. package/dist/index.d.cts +10 -0
  18. package/dist/index.d.ts +10 -10
  19. package/dist/index.js +4092 -13
  20. package/dist/index.js.map +1 -1
  21. package/dist/react.cjs +268 -0
  22. package/dist/react.cjs.map +1 -0
  23. package/dist/react.d.cts +74 -0
  24. package/dist/react.d.ts +74 -0
  25. package/dist/react.js +239 -0
  26. package/dist/react.js.map +1 -0
  27. package/dist/reactive.cjs +643 -0
  28. package/dist/reactive.cjs.map +1 -0
  29. package/dist/reactive.d.cts +35 -0
  30. package/dist/reactive.d.ts +35 -0
  31. package/dist/reactive.js +604 -0
  32. package/dist/reactive.js.map +1 -0
  33. package/dist/{core/selector/selector.interface.d.ts → selector.interface-CA5y-kD_.d.cts} +7 -35
  34. package/dist/selector.interface-CA5y-kD_.d.ts +63 -0
  35. package/dist/storage.interface-Dl8SLUd1.d.cts +128 -0
  36. package/dist/storage.interface-Dl8SLUd1.d.ts +128 -0
  37. package/dist/utils.cjs +601 -0
  38. package/dist/utils.cjs.map +1 -0
  39. package/dist/utils.d.cts +92 -0
  40. package/dist/utils.d.ts +92 -0
  41. package/dist/utils.js +574 -0
  42. package/dist/utils.js.map +1 -0
  43. package/package.json +54 -17
  44. package/dist/_utils/chunk.util.d.ts +0 -8
  45. package/dist/_utils/chunk.util.d.ts.map +0 -1
  46. package/dist/_utils/chunk.util.js +0 -21
  47. package/dist/_utils/chunk.util.js.map +0 -1
  48. package/dist/_utils/deepMerge.util.d.ts +0 -2
  49. package/dist/_utils/deepMerge.util.d.ts.map +0 -1
  50. package/dist/_utils/deepMerge.util.js +0 -16
  51. package/dist/_utils/deepMerge.util.js.map +0 -1
  52. package/dist/_utils/flatMap.util.d.ts +0 -10
  53. package/dist/_utils/flatMap.util.d.ts.map +0 -1
  54. package/dist/_utils/flatMap.util.js +0 -23
  55. package/dist/_utils/flatMap.util.js.map +0 -1
  56. package/dist/_utils/index.d.ts +0 -4
  57. package/dist/_utils/index.d.ts.map +0 -1
  58. package/dist/_utils/index.js +0 -4
  59. package/dist/_utils/index.js.map +0 -1
  60. package/dist/api/api.module.d.ts +0 -38
  61. package/dist/api/api.module.d.ts.map +0 -1
  62. package/dist/api/api.module.js +0 -82
  63. package/dist/api/api.module.js.map +0 -1
  64. package/dist/api/components/endpoint.d.ts +0 -26
  65. package/dist/api/components/endpoint.d.ts.map +0 -1
  66. package/dist/api/components/endpoint.js +0 -253
  67. package/dist/api/components/endpoint.js.map +0 -1
  68. package/dist/api/components/query-storage.d.ts +0 -84
  69. package/dist/api/components/query-storage.d.ts.map +0 -1
  70. package/dist/api/components/query-storage.js +0 -221
  71. package/dist/api/components/query-storage.js.map +0 -1
  72. package/dist/api/example.d.ts +0 -83
  73. package/dist/api/example.d.ts.map +0 -1
  74. package/dist/api/example.js +0 -85
  75. package/dist/api/example.js.map +0 -1
  76. package/dist/api/index.d.ts +0 -4
  77. package/dist/api/index.d.ts.map +0 -1
  78. package/dist/api/index.js +0 -6
  79. package/dist/api/index.js.map +0 -1
  80. package/dist/api/types/api.interface.d.ts +0 -108
  81. package/dist/api/types/api.interface.d.ts.map +0 -1
  82. package/dist/api/types/api.interface.js +0 -19
  83. package/dist/api/types/api.interface.js.map +0 -1
  84. package/dist/api/types/endpoint.interface.d.ts +0 -116
  85. package/dist/api/types/endpoint.interface.d.ts.map +0 -1
  86. package/dist/api/types/endpoint.interface.js +0 -2
  87. package/dist/api/types/endpoint.interface.js.map +0 -1
  88. package/dist/api/types/query.interface.d.ts +0 -87
  89. package/dist/api/types/query.interface.d.ts.map +0 -1
  90. package/dist/api/types/query.interface.js +0 -2
  91. package/dist/api/types/query.interface.js.map +0 -1
  92. package/dist/api/utils/api-helpers.d.ts +0 -22
  93. package/dist/api/utils/api-helpers.d.ts.map +0 -1
  94. package/dist/api/utils/api-helpers.js +0 -44
  95. package/dist/api/utils/api-helpers.js.map +0 -1
  96. package/dist/api/utils/create-header-context.d.ts +0 -10
  97. package/dist/api/utils/create-header-context.d.ts.map +0 -1
  98. package/dist/api/utils/create-header-context.js +0 -36
  99. package/dist/api/utils/create-header-context.js.map +0 -1
  100. package/dist/api/utils/endpoint-headers.d.ts +0 -23
  101. package/dist/api/utils/endpoint-headers.d.ts.map +0 -1
  102. package/dist/api/utils/endpoint-headers.js +0 -57
  103. package/dist/api/utils/endpoint-headers.js.map +0 -1
  104. package/dist/api/utils/fetch-base-query.d.ts +0 -9
  105. package/dist/api/utils/fetch-base-query.d.ts.map +0 -1
  106. package/dist/api/utils/fetch-base-query.js +0 -181
  107. package/dist/api/utils/fetch-base-query.js.map +0 -1
  108. package/dist/api/utils/file-utils.d.ts +0 -43
  109. package/dist/api/utils/file-utils.d.ts.map +0 -1
  110. package/dist/api/utils/file-utils.js +0 -108
  111. package/dist/api/utils/file-utils.js.map +0 -1
  112. package/dist/api/utils/get-cacheable-headers.d.ts +0 -8
  113. package/dist/api/utils/get-cacheable-headers.d.ts.map +0 -1
  114. package/dist/api/utils/get-cacheable-headers.js +0 -21
  115. package/dist/api/utils/get-cacheable-headers.js.map +0 -1
  116. package/dist/core/index.d.ts +0 -3
  117. package/dist/core/index.d.ts.map +0 -1
  118. package/dist/core/index.js +0 -3
  119. package/dist/core/index.js.map +0 -1
  120. package/dist/core/selector/index.d.ts +0 -3
  121. package/dist/core/selector/index.d.ts.map +0 -1
  122. package/dist/core/selector/index.js +0 -2
  123. package/dist/core/selector/index.js.map +0 -1
  124. package/dist/core/selector/selector.interface.d.ts.map +0 -1
  125. package/dist/core/selector/selector.interface.js +0 -2
  126. package/dist/core/selector/selector.interface.js.map +0 -1
  127. package/dist/core/selector/selector.module.d.ts +0 -29
  128. package/dist/core/selector/selector.module.d.ts.map +0 -1
  129. package/dist/core/selector/selector.module.js +0 -467
  130. package/dist/core/selector/selector.module.js.map +0 -1
  131. package/dist/core/storage/adapters/base-storage.service.d.ts +0 -65
  132. package/dist/core/storage/adapters/base-storage.service.d.ts.map +0 -1
  133. package/dist/core/storage/adapters/base-storage.service.js +0 -660
  134. package/dist/core/storage/adapters/base-storage.service.js.map +0 -1
  135. package/dist/core/storage/adapters/indexed-DB.service.d.ts +0 -63
  136. package/dist/core/storage/adapters/indexed-DB.service.d.ts.map +0 -1
  137. package/dist/core/storage/adapters/indexed-DB.service.js +0 -595
  138. package/dist/core/storage/adapters/indexed-DB.service.js.map +0 -1
  139. package/dist/core/storage/adapters/indexed-DB.service.old.d.ts +0 -38
  140. package/dist/core/storage/adapters/indexed-DB.service.old.d.ts.map +0 -1
  141. package/dist/core/storage/adapters/indexed-DB.service.old.js +0 -318
  142. package/dist/core/storage/adapters/indexed-DB.service.old.js.map +0 -1
  143. package/dist/core/storage/adapters/local-storage.service.d.ts +0 -21
  144. package/dist/core/storage/adapters/local-storage.service.d.ts.map +0 -1
  145. package/dist/core/storage/adapters/local-storage.service.js +0 -99
  146. package/dist/core/storage/adapters/local-storage.service.js.map +0 -1
  147. package/dist/core/storage/adapters/memory-storage.service.d.ts +0 -22
  148. package/dist/core/storage/adapters/memory-storage.service.d.ts.map +0 -1
  149. package/dist/core/storage/adapters/memory-storage.service.js +0 -99
  150. package/dist/core/storage/adapters/memory-storage.service.js.map +0 -1
  151. package/dist/core/storage/adapters/path.utils.d.ts +0 -5
  152. package/dist/core/storage/adapters/path.utils.d.ts.map +0 -1
  153. package/dist/core/storage/adapters/path.utils.js +0 -35
  154. package/dist/core/storage/adapters/path.utils.js.map +0 -1
  155. package/dist/core/storage/index.d.ts +0 -11
  156. package/dist/core/storage/index.d.ts.map +0 -1
  157. package/dist/core/storage/index.js +0 -12
  158. package/dist/core/storage/index.js.map +0 -1
  159. package/dist/core/storage/middlewares/broadcast.middleware.d.ts +0 -9
  160. package/dist/core/storage/middlewares/broadcast.middleware.d.ts.map +0 -1
  161. package/dist/core/storage/middlewares/broadcast.middleware.js +0 -115
  162. package/dist/core/storage/middlewares/broadcast.middleware.js.map +0 -1
  163. package/dist/core/storage/middlewares/index.d.ts +0 -4
  164. package/dist/core/storage/middlewares/index.d.ts.map +0 -1
  165. package/dist/core/storage/middlewares/index.js +0 -3
  166. package/dist/core/storage/middlewares/index.js.map +0 -1
  167. package/dist/core/storage/middlewares/storage-batching.middleware.d.ts +0 -7
  168. package/dist/core/storage/middlewares/storage-batching.middleware.d.ts.map +0 -1
  169. package/dist/core/storage/middlewares/storage-batching.middleware.js +0 -36
  170. package/dist/core/storage/middlewares/storage-batching.middleware.js.map +0 -1
  171. package/dist/core/storage/middlewares/storage-shallow-compare.middleware.d.ts +0 -7
  172. package/dist/core/storage/middlewares/storage-shallow-compare.middleware.d.ts.map +0 -1
  173. package/dist/core/storage/middlewares/storage-shallow-compare.middleware.js +0 -46
  174. package/dist/core/storage/middlewares/storage-shallow-compare.middleware.js.map +0 -1
  175. package/dist/core/storage/modules/plugin/plugin.interface.d.ts.map +0 -1
  176. package/dist/core/storage/modules/plugin/plugin.interface.js +0 -2
  177. package/dist/core/storage/modules/plugin/plugin.interface.js.map +0 -1
  178. package/dist/core/storage/modules/plugin/plugin.service.d.ts +0 -25
  179. package/dist/core/storage/modules/plugin/plugin.service.d.ts.map +0 -1
  180. package/dist/core/storage/modules/plugin/plugin.service.js +0 -186
  181. package/dist/core/storage/modules/plugin/plugin.service.js.map +0 -1
  182. package/dist/core/storage/storage.interface.d.ts +0 -70
  183. package/dist/core/storage/storage.interface.d.ts.map +0 -1
  184. package/dist/core/storage/storage.interface.js +0 -10
  185. package/dist/core/storage/storage.interface.js.map +0 -1
  186. package/dist/core/storage/utils/batch.utils.d.ts +0 -33
  187. package/dist/core/storage/utils/batch.utils.d.ts.map +0 -1
  188. package/dist/core/storage/utils/batch.utils.js +0 -88
  189. package/dist/core/storage/utils/batch.utils.js.map +0 -1
  190. package/dist/core/storage/utils/broadcast.util.d.ts +0 -48
  191. package/dist/core/storage/utils/broadcast.util.d.ts.map +0 -1
  192. package/dist/core/storage/utils/broadcast.util.js +0 -162
  193. package/dist/core/storage/utils/broadcast.util.js.map +0 -1
  194. package/dist/core/storage/utils/cache.util.d.ts +0 -33
  195. package/dist/core/storage/utils/cache.util.d.ts.map +0 -1
  196. package/dist/core/storage/utils/cache.util.js +0 -47
  197. package/dist/core/storage/utils/cache.util.js.map +0 -1
  198. package/dist/core/storage/utils/middleware-module.d.ts +0 -46
  199. package/dist/core/storage/utils/middleware-module.d.ts.map +0 -1
  200. package/dist/core/storage/utils/middleware-module.js +0 -109
  201. package/dist/core/storage/utils/middleware-module.js.map +0 -1
  202. package/dist/core/storage/utils/storage-key.d.ts +0 -11
  203. package/dist/core/storage/utils/storage-key.d.ts.map +0 -1
  204. package/dist/core/storage/utils/storage-key.js +0 -21
  205. package/dist/core/storage/utils/storage-key.js.map +0 -1
  206. package/dist/core/storage/utils/storage.utils.d.ts +0 -17
  207. package/dist/core/storage/utils/storage.utils.d.ts.map +0 -1
  208. package/dist/core/storage/utils/storage.utils.js +0 -57
  209. package/dist/core/storage/utils/storage.utils.js.map +0 -1
  210. package/dist/index.d.ts.map +0 -1
  211. package/dist/react/hooks/index.d.ts +0 -3
  212. package/dist/react/hooks/index.d.ts.map +0 -1
  213. package/dist/react/hooks/index.js +0 -3
  214. package/dist/react/hooks/index.js.map +0 -1
  215. package/dist/react/hooks/useSelector.d.ts +0 -22
  216. package/dist/react/hooks/useSelector.d.ts.map +0 -1
  217. package/dist/react/hooks/useSelector.js +0 -104
  218. package/dist/react/hooks/useSelector.js.map +0 -1
  219. package/dist/react/hooks/useStorageSubscribe.d.ts +0 -12
  220. package/dist/react/hooks/useStorageSubscribe.d.ts.map +0 -1
  221. package/dist/react/hooks/useStorageSubscribe.js +0 -49
  222. package/dist/react/hooks/useStorageSubscribe.js.map +0 -1
  223. package/dist/react/index.d.ts +0 -3
  224. package/dist/react/index.d.ts.map +0 -1
  225. package/dist/react/index.js +0 -3
  226. package/dist/react/index.js.map +0 -1
  227. package/dist/react/utils/createSynapseCtx.d.ts +0 -40
  228. package/dist/react/utils/createSynapseCtx.d.ts.map +0 -1
  229. package/dist/react/utils/createSynapseCtx.js +0 -125
  230. package/dist/react/utils/createSynapseCtx.js.map +0 -1
  231. package/dist/react/utils/index.d.ts +0 -2
  232. package/dist/react/utils/index.d.ts.map +0 -1
  233. package/dist/react/utils/index.js +0 -2
  234. package/dist/react/utils/index.js.map +0 -1
  235. package/dist/reactive/dispatcher/dispatcher.module.d.ts +0 -195
  236. package/dist/reactive/dispatcher/dispatcher.module.d.ts.map +0 -1
  237. package/dist/reactive/dispatcher/dispatcher.module.js +0 -288
  238. package/dist/reactive/dispatcher/dispatcher.module.js.map +0 -1
  239. package/dist/reactive/dispatcher/index.d.ts +0 -3
  240. package/dist/reactive/dispatcher/index.d.ts.map +0 -1
  241. package/dist/reactive/dispatcher/index.js +0 -3
  242. package/dist/reactive/dispatcher/index.js.map +0 -1
  243. package/dist/reactive/dispatcher/middlewares/index.d.ts +0 -2
  244. package/dist/reactive/dispatcher/middlewares/index.d.ts.map +0 -1
  245. package/dist/reactive/dispatcher/middlewares/index.js +0 -2
  246. package/dist/reactive/dispatcher/middlewares/index.js.map +0 -1
  247. package/dist/reactive/dispatcher/middlewares/logger.middleware.d.ts +0 -31
  248. package/dist/reactive/dispatcher/middlewares/logger.middleware.d.ts.map +0 -1
  249. package/dist/reactive/dispatcher/middlewares/logger.middleware.js +0 -126
  250. package/dist/reactive/dispatcher/middlewares/logger.middleware.js.map +0 -1
  251. package/dist/reactive/effects/effects.module.d.ts +0 -150
  252. package/dist/reactive/effects/effects.module.d.ts.map +0 -1
  253. package/dist/reactive/effects/effects.module.js +0 -277
  254. package/dist/reactive/effects/effects.module.js.map +0 -1
  255. package/dist/reactive/effects/index.d.ts +0 -2
  256. package/dist/reactive/effects/index.d.ts.map +0 -1
  257. package/dist/reactive/effects/index.js +0 -2
  258. package/dist/reactive/effects/index.js.map +0 -1
  259. package/dist/reactive/effects/utils/chunkRequestConsistent.d.ts +0 -12
  260. package/dist/reactive/effects/utils/chunkRequestConsistent.d.ts.map +0 -1
  261. package/dist/reactive/effects/utils/chunkRequestConsistent.js +0 -16
  262. package/dist/reactive/effects/utils/chunkRequestConsistent.js.map +0 -1
  263. package/dist/reactive/effects/utils/chunkRequestParallel.d.ts +0 -12
  264. package/dist/reactive/effects/utils/chunkRequestParallel.d.ts.map +0 -1
  265. package/dist/reactive/effects/utils/chunkRequestParallel.js +0 -13
  266. package/dist/reactive/effects/utils/chunkRequestParallel.js.map +0 -1
  267. package/dist/reactive/effects/utils/index.d.ts +0 -3
  268. package/dist/reactive/effects/utils/index.d.ts.map +0 -1
  269. package/dist/reactive/effects/utils/index.js +0 -3
  270. package/dist/reactive/effects/utils/index.js.map +0 -1
  271. package/dist/reactive/index.d.ts +0 -3
  272. package/dist/reactive/index.d.ts.map +0 -1
  273. package/dist/reactive/index.js +0 -3
  274. package/dist/reactive/index.js.map +0 -1
  275. package/dist/utils/createSynapse.d.ts +0 -92
  276. package/dist/utils/createSynapse.d.ts.map +0 -1
  277. package/dist/utils/createSynapse.js +0 -79
  278. package/dist/utils/createSynapse.js.map +0 -1
  279. package/dist/utils/index.d.ts +0 -2
  280. package/dist/utils/index.d.ts.map +0 -1
  281. package/dist/utils/index.js +0 -2
  282. package/dist/utils/index.js.map +0 -1
package/dist/react.js ADDED
@@ -0,0 +1,239 @@
1
+ // src/react/hooks/useSelector.ts
2
+ import { useEffect, useRef, useState } from "react";
3
+ var SELECTOR_REGISTRY = /* @__PURE__ */ new Map();
4
+ function useSelector(selector, options) {
5
+ const [state, setState] = useState(options?.initialValue);
6
+ const [isLoading, setIsLoading] = useState(!!options?.withLoading);
7
+ const prevValueRef = useRef(options?.initialValue);
8
+ const equalsRef = useRef(options?.equals || ((a, b) => a === b));
9
+ const selectorId = selector.getId();
10
+ const updateComponentState = (newValue) => {
11
+ if (prevValueRef.current === void 0 || !equalsRef.current(newValue, prevValueRef.current)) {
12
+ prevValueRef.current = newValue;
13
+ setState(newValue);
14
+ }
15
+ };
16
+ useEffect(() => {
17
+ if (!SELECTOR_REGISTRY.has(selectorId)) {
18
+ SELECTOR_REGISTRY.set(selectorId, {
19
+ lastValue: void 0,
20
+ listeners: /* @__PURE__ */ new Set(),
21
+ unsubscribe: null
22
+ });
23
+ }
24
+ const registry = SELECTOR_REGISTRY.get(selectorId);
25
+ registry.listeners.add(updateComponentState);
26
+ if (registry.lastValue !== void 0) {
27
+ updateComponentState(registry.lastValue);
28
+ if (options?.withLoading) {
29
+ setIsLoading(false);
30
+ }
31
+ } else {
32
+ if (options?.withLoading) setIsLoading(true);
33
+ selector.select().then((initialValue) => {
34
+ registry.lastValue = initialValue;
35
+ registry.listeners.forEach((listener) => listener(initialValue));
36
+ if (options?.withLoading) setIsLoading(false);
37
+ }).catch((error) => {
38
+ console.error(`useSelector: \u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u043F\u043E\u043B\u0443\u0447\u0435\u043D\u0438\u0438 \u043D\u0430\u0447\u0430\u043B\u044C\u043D\u043E\u0433\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0434\u043B\u044F ${selectorId}`, error);
39
+ if (options?.withLoading) setIsLoading(false);
40
+ });
41
+ }
42
+ if (!registry.unsubscribe) {
43
+ registry.unsubscribe = selector.subscribe({
44
+ notify: (newValue) => {
45
+ registry.lastValue = newValue;
46
+ registry.listeners.forEach((listener) => {
47
+ try {
48
+ listener(newValue);
49
+ } catch (error) {
50
+ console.error(`useSelector: \u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u0443\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u0438 \u0441\u043B\u0443\u0448\u0430\u0442\u0435\u043B\u044F \u0434\u043B\u044F ${selectorId}`, error);
51
+ }
52
+ });
53
+ }
54
+ });
55
+ }
56
+ return () => {
57
+ const registry2 = SELECTOR_REGISTRY.get(selectorId);
58
+ if (registry2) {
59
+ registry2.listeners.delete(updateComponentState);
60
+ if (registry2.listeners.size === 0) {
61
+ if (registry2.unsubscribe) {
62
+ registry2.unsubscribe();
63
+ }
64
+ SELECTOR_REGISTRY.delete(selectorId);
65
+ }
66
+ }
67
+ };
68
+ }, [selector, selectorId]);
69
+ if (options?.withLoading) {
70
+ return { data: state, isLoading };
71
+ }
72
+ return state;
73
+ }
74
+
75
+ // src/react/hooks/useStorageSubscribe.ts
76
+ import { useEffect as useEffect2, useState as useState2 } from "react";
77
+ var useStorageSubscribe = (storage, selector) => {
78
+ const [value, setValue] = useState2(void 0);
79
+ useEffect2(() => {
80
+ let isMounted = true;
81
+ const initializeValue = async () => {
82
+ try {
83
+ const state = await storage.getState();
84
+ const selectedValue = selector(state);
85
+ if (isMounted) {
86
+ setValue(selectedValue);
87
+ }
88
+ } catch (error) {
89
+ console.error("Failed to initialize storage value:", error);
90
+ }
91
+ };
92
+ initializeValue();
93
+ let unsubscribe;
94
+ try {
95
+ unsubscribe = storage.subscribe(selector, (newValue) => {
96
+ if (isMounted) {
97
+ setValue(newValue);
98
+ }
99
+ });
100
+ } catch (error) {
101
+ console.error("Failed to subscribe to storage:", error);
102
+ unsubscribe = () => {
103
+ };
104
+ }
105
+ return () => {
106
+ isMounted = false;
107
+ unsubscribe();
108
+ };
109
+ }, [storage, selector]);
110
+ return value;
111
+ };
112
+
113
+ // src/react/utils/createSynapseCtx.tsx
114
+ import { createContext, useContext, useEffect as useEffect3, useRef as useRef2, useState as useState3 } from "react";
115
+
116
+ // src/_utils/deepMerge.util.ts
117
+ var deepMerge = (target, source) => {
118
+ for (const key in source) {
119
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
120
+ if (typeof source[key] === "object" && source[key] !== null && !Array.isArray(source[key])) {
121
+ if (!target[key] || typeof target[key] !== "object") {
122
+ target[key] = {};
123
+ }
124
+ deepMerge(target[key], source[key]);
125
+ } else {
126
+ target[key] = source[key];
127
+ }
128
+ }
129
+ }
130
+ };
131
+
132
+ // src/react/utils/createSynapseCtx.tsx
133
+ import { jsx } from "react/jsx-runtime";
134
+ var ERROR_HOOK_MESSAGE = "useSynapseActions \u043D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u043E \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u044C \u0432\u043D\u0443\u0442\u0440\u0438 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0430 contextSynapse";
135
+ var ERROR_CONTEXT_INIT = "\u041E\u0448\u0438\u0431\u043A\u0430 \u043F\u0440\u0438 \u0438\u043D\u0438\u0446\u0438\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u0438 \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442\u0430:";
136
+ function createSynapseCtx(synapseStorePromise, options) {
137
+ const { loadingComponent = null, mergeFn = deepMerge } = options || {};
138
+ let synapseStore = null;
139
+ let storeReady = false;
140
+ const initPromise = (async () => {
141
+ try {
142
+ synapseStore = await (synapseStorePromise instanceof Promise ? synapseStorePromise : Promise.resolve(synapseStorePromise));
143
+ storeReady = true;
144
+ } catch (error) {
145
+ console.error("\u041E\u0448\u0438\u0431\u043A\u0430 \u0438\u043D\u0438\u0446\u0438\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u0438 \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0430 Synapse:", error);
146
+ }
147
+ })();
148
+ const SynapseContext = createContext(null);
149
+ const useSynapseStorage = () => {
150
+ const context = useContext(SynapseContext);
151
+ if (!context) throw new Error(ERROR_HOOK_MESSAGE);
152
+ return context.storage;
153
+ };
154
+ const useSynapseSelectors = () => {
155
+ const context = useContext(SynapseContext);
156
+ if (!context) throw new Error(ERROR_HOOK_MESSAGE);
157
+ return context.selectors;
158
+ };
159
+ const useSynapseActions = () => {
160
+ const context = useContext(SynapseContext);
161
+ if (!context) throw new Error(ERROR_HOOK_MESSAGE);
162
+ if ("actions" in context) {
163
+ return context.actions;
164
+ }
165
+ throw new Error("useSynapseActions: actions \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B \u0434\u043B\u044F \u044D\u0442\u043E\u0433\u043E \u0442\u0438\u043F\u0430 \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0430. \u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044C, \u0447\u0442\u043E \u043F\u0435\u0440\u0435\u0434\u0430\u043D\u0430 \u0444\u0443\u043D\u043A\u0446\u0438\u044F createDispatcherFn \u043F\u0440\u0438 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u0438 \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0430.");
166
+ };
167
+ const useSynapseState$ = () => {
168
+ const context = useContext(SynapseContext);
169
+ if (!context) throw new Error(ERROR_HOOK_MESSAGE);
170
+ if ("state$" in context) {
171
+ return context.state$;
172
+ }
173
+ throw new Error("useSynapseState$: state$ \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u0435\u043D \u0434\u043B\u044F \u044D\u0442\u043E\u0433\u043E \u0442\u0438\u043F\u0430 \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0430. \u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044C, \u0447\u0442\u043E \u043F\u0435\u0440\u0435\u0434\u0430\u043D\u044B \u0444\u0443\u043D\u043A\u0446\u0438\u0438 createDispatcherFn \u0438 createEffectConfig \u043F\u0440\u0438 \u0441\u043E\u0437\u0434\u0430\u043D\u0438\u0438 \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0430.");
174
+ };
175
+ function contextSynapse(Component) {
176
+ function WrappedComponent({ contextProps, ...props }) {
177
+ const [initialized, setInitialized] = useState3(false);
178
+ const [storeInitialized, setStoreInitialized] = useState3(storeReady);
179
+ const debugIdRef = useRef2(`synapse-${synapseStore?.storage.name || "initializing"}`);
180
+ useEffect3(() => {
181
+ if (!storeReady) {
182
+ initPromise.then(() => {
183
+ setStoreInitialized(true);
184
+ });
185
+ }
186
+ }, []);
187
+ useEffect3(() => {
188
+ if (!storeInitialized) return;
189
+ let mounted = true;
190
+ const initializeContext = async () => {
191
+ try {
192
+ if (synapseStore && contextProps && Object.keys(contextProps).length > 0) {
193
+ await synapseStore.storage.update((state) => {
194
+ mergeFn(state, contextProps);
195
+ });
196
+ }
197
+ if (mounted) {
198
+ setInitialized(true);
199
+ }
200
+ } catch (error) {
201
+ console.error(`[${debugIdRef.current}] ${ERROR_CONTEXT_INIT}`, error);
202
+ }
203
+ };
204
+ initializeContext();
205
+ return () => {
206
+ mounted = false;
207
+ };
208
+ }, [contextProps, storeInitialized]);
209
+ if (!storeInitialized) {
210
+ return loadingComponent || /* @__PURE__ */ jsx("div", { children: "\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430 \u0445\u0440\u0430\u043D\u0438\u043B\u0438\u0449\u0430..." });
211
+ }
212
+ if (!initialized) {
213
+ return loadingComponent || /* @__PURE__ */ jsx("div", { children: "\u0418\u043D\u0438\u0446\u0438\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442\u0430..." });
214
+ }
215
+ return /* @__PURE__ */ jsx(SynapseContext.Provider, { value: synapseStore, children: /* @__PURE__ */ jsx(Component, { ...props }) });
216
+ }
217
+ const componentName = Component.displayName || Component.name || "Component";
218
+ WrappedComponent.displayName = `SynapseContext(${componentName})`;
219
+ return WrappedComponent;
220
+ }
221
+ const cleanupSynapse = async () => {
222
+ await initPromise;
223
+ return synapseStore?.destroy() || Promise.resolve();
224
+ };
225
+ return {
226
+ contextSynapse,
227
+ useSynapseStorage,
228
+ useSynapseSelectors,
229
+ useSynapseActions,
230
+ useSynapseState$,
231
+ cleanupSynapse
232
+ };
233
+ }
234
+ export {
235
+ createSynapseCtx,
236
+ useSelector,
237
+ useStorageSubscribe
238
+ };
239
+ //# sourceMappingURL=react.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/react/hooks/useSelector.ts","../src/react/hooks/useStorageSubscribe.ts","../src/react/utils/createSynapseCtx.tsx","../src/_utils/deepMerge.util.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react'\n\nimport type { SelectorAPI } from '../../core'\n\ninterface UseSelectorOptions<T> {\n /** Начальное значение до загрузки данных из селектора */\n initialValue?: T\n /** Функция сравнения для предотвращения лишних ререндеров */\n equals?: (a: T, b: T) => boolean\n /** Включать ли статус загрузки в возвращаемый результат */\n withLoading?: boolean\n}\n\n/**\n * Глобальный реестр селекторов с активными подписками.\n * Хранит последние значения селекторов и список callbacks для обновления всех компонентов.\n */\nconst SELECTOR_REGISTRY = new Map<\n string,\n {\n lastValue: any\n listeners: Set<(value: any) => void>\n unsubscribe: VoidFunction | null\n }\n>()\n\n/**\n * Хук для использования селекторов в компонентах React.\n * Обеспечивает согласованность значений между всеми экземплярами хука.\n */\nexport function useSelector<T>(selector: SelectorAPI<T>): T | undefined\nexport function useSelector<T>(selector: SelectorAPI<T>, options: UseSelectorOptions<T> & { withLoading?: true }): { data: T | undefined; isLoading: boolean }\nexport function useSelector<T>(selector: SelectorAPI<T>, options?: UseSelectorOptions<T>): { data: T | undefined; isLoading: boolean } | T | undefined {\n // Базовые состояния\n const [state, setState] = useState<T | undefined>(options?.initialValue)\n const [isLoading, setIsLoading] = useState<boolean>(!!options?.withLoading)\n\n // Для предотвращения лишних ререндеров\n const prevValueRef = useRef<T | undefined>(options?.initialValue)\n const equalsRef = useRef(options?.equals || ((a: T, b: T) => a === b))\n\n // Получаем ID селектора с помощью метода getId()\n const selectorId = selector.getId()\n\n // Обновляем состояние компонента при изменении значения\n const updateComponentState = (newValue: T) => {\n // Сравниваем с предыдущим значением компонента\n if (prevValueRef.current === undefined || !equalsRef.current(newValue, prevValueRef.current)) {\n prevValueRef.current = newValue\n setState(newValue)\n }\n }\n\n useEffect(() => {\n // Создаем запись в реестре, если её ещё нет\n if (!SELECTOR_REGISTRY.has(selectorId)) {\n SELECTOR_REGISTRY.set(selectorId, {\n lastValue: undefined,\n listeners: new Set(),\n unsubscribe: null,\n })\n }\n\n const registry = SELECTOR_REGISTRY.get(selectorId)!\n\n // Добавляем текущий компонент в список слушателей\n registry.listeners.add(updateComponentState)\n\n // Если у нас уже есть значение, сразу устанавливаем его\n if (registry.lastValue !== undefined) {\n updateComponentState(registry.lastValue)\n\n // Если был запрошен режим загрузки, сразу сбрасываем его\n if (options?.withLoading) {\n setIsLoading(false)\n }\n } else {\n // Запрашиваем начальное значение\n if (options?.withLoading) setIsLoading(true)\n\n selector\n .select()\n .then((initialValue) => {\n // Обновляем значение в реестре\n registry.lastValue = initialValue\n\n // Уведомляем все компоненты\n registry.listeners.forEach((listener) => listener(initialValue))\n\n if (options?.withLoading) setIsLoading(false)\n })\n .catch((error) => {\n console.error(`useSelector: Ошибка при получении начального значения для ${selectorId}`, error)\n if (options?.withLoading) setIsLoading(false)\n })\n }\n\n // Создаем подписку только один раз для селектора\n if (!registry.unsubscribe) {\n registry.unsubscribe = selector.subscribe({\n notify: (newValue: T) => {\n // Обновляем значение в реестре\n registry.lastValue = newValue\n\n // Уведомляем все компоненты\n registry.listeners.forEach((listener) => {\n try {\n listener(newValue)\n } catch (error) {\n console.error(`useSelector: Ошибка при уведомлении слушателя для ${selectorId}`, error)\n }\n })\n },\n })\n }\n\n // При размонтировании компонента\n return () => {\n const registry = SELECTOR_REGISTRY.get(selectorId)\n if (registry) {\n // Удаляем текущий компонент из списка слушателей\n registry.listeners.delete(updateComponentState)\n\n // Если больше нет слушателей, можно очистить подписку\n if (registry.listeners.size === 0) {\n if (registry.unsubscribe) {\n registry.unsubscribe()\n }\n SELECTOR_REGISTRY.delete(selectorId)\n }\n }\n }\n }, [selector, selectorId])\n\n // Возвращаем данные в нужном формате\n if (options?.withLoading) {\n return { data: state, isLoading }\n }\n\n return state\n}\n","import { useEffect, useState } from 'react'\n\nimport { IStorage } from '../../core'\n\n/**\n * Хук для подписки на изменения в хранилище\n *\n * @template S - Тип состояния хранилища\n * @template R - Тип возвращаемого значения\n * @param storage - Экземпляр хранилища\n * @param selector - Функция-селектор для выбора данных\n * @returns Значение из хранилища\n */\nexport const useStorageSubscribe = <S extends Record<string, any>, R = any>(storage: IStorage<S>, selector: (state: S) => R): R | undefined => {\n const [value, setValue] = useState<R | undefined>(undefined)\n\n useEffect(() => {\n // Флаг монтирования для предотвращения обновления состояния при размонтировании\n let isMounted = true\n\n const initializeValue = async () => {\n try {\n const state = await storage.getState()\n const selectedValue = selector(state) as R\n\n if (isMounted) {\n setValue(selectedValue)\n }\n } catch (error) {\n console.error('Failed to initialize storage value:', error)\n }\n }\n\n // Инициализируем значение\n initializeValue()\n\n let unsubscribe: VoidFunction\n try {\n unsubscribe = storage.subscribe(selector, (newValue: R) => {\n if (isMounted) {\n setValue(newValue)\n }\n })\n } catch (error) {\n console.error('Failed to subscribe to storage:', error)\n unsubscribe = () => {}\n }\n\n return () => {\n isMounted = false\n unsubscribe()\n }\n }, [storage, selector])\n\n return value\n}\n","import { ComponentType, createContext, PropsWithChildren, useContext, useEffect, useRef, useState } from 'react'\nimport { Observable } from 'rxjs'\n\nimport { deepMerge } from '../../_utils'\nimport { IStorage } from '../../core'\nimport { AnySynapseStore, SynapseStoreBasic, SynapseStoreWithDispatcher, SynapseStoreWithEffects } from '../../utils'\n\nconst ERROR_HOOK_MESSAGE = 'useSynapseActions необходимо использовать внутри компонента contextSynapse'\nconst ERROR_CONTEXT_INIT = 'Ошибка при инициализации контекста:'\n\ninterface Options<TStore extends Record<string, any>> {\n loadingComponent?: any\n mergeFn?: (target: TStore, source: Record<string, any>) => void\n}\n\n/**\n * Перегрузки для createSynapseCtx в зависимости от типа хранилища\n */\n\n// Для хранилища с effects\nexport function createSynapseCtx<TStore extends Record<string, any>, TStorage extends IStorage<TStore>, TSelectors, TActions>(\n synapseStorePromise: Promise<SynapseStoreWithEffects<TStore, TStorage, TSelectors, TActions>> | SynapseStoreWithEffects<TStore, TStorage, TSelectors, TActions>,\n options?: Options<TStore>,\n): {\n contextSynapse: <SelfComponentProps, PublicContextProps = Record<string, any>>(\n Component: ComponentType<SelfComponentProps>,\n ) => ComponentType<SelfComponentProps & { contextProps?: PublicContextProps }>\n useSynapseStorage: () => TStorage\n useSynapseSelectors: () => TSelectors\n useSynapseActions: () => TActions\n useSynapseState$: () => Observable<TStore>\n cleanupSynapse: () => Promise<void>\n}\n\n// Для хранилища с dispatcher (без effects)\nexport function createSynapseCtx<TStore extends Record<string, any>, TStorage extends IStorage<TStore>, TSelectors, TActions>(\n synapseStorePromise: Promise<SynapseStoreWithDispatcher<TStore, TStorage, TSelectors, TActions>> | SynapseStoreWithDispatcher<TStore, TStorage, TSelectors, TActions>,\n options?: Options<TStore>,\n): {\n contextSynapse: <SelfComponentProps, PublicContextProps = Record<string, any>>(\n Component: ComponentType<SelfComponentProps>,\n ) => ComponentType<SelfComponentProps & { contextProps?: PublicContextProps }>\n useSynapseStorage: () => TStorage\n useSynapseSelectors: () => TSelectors\n useSynapseActions: () => TActions\n cleanupSynapse: () => Promise<void>\n}\n\n// Для базового хранилища\nexport function createSynapseCtx<TStore extends Record<string, any>, TStorage extends IStorage<TStore>, TSelectors>(\n synapseStorePromise: Promise<SynapseStoreBasic<TStore, TStorage, TSelectors>> | SynapseStoreBasic<TStore, TStorage, TSelectors>,\n options?: Options<TStore>,\n): {\n contextSynapse: <SelfComponentProps, PublicContextProps = Record<string, any>>(\n Component: ComponentType<SelfComponentProps>,\n ) => ComponentType<SelfComponentProps & { contextProps?: PublicContextProps }>\n useSynapseStorage: () => TStorage\n useSynapseSelectors: () => TSelectors\n cleanupSynapse: () => Promise<void>\n}\n\n// Основная реализация\nexport function createSynapseCtx<TStore extends Record<string, any>, TStorage extends IStorage<TStore>, TSelectors = any, TActions = any>(\n synapseStorePromise: Promise<AnySynapseStore<TStore, TStorage, TSelectors, TActions>> | AnySynapseStore<TStore, TStorage, TSelectors, TActions>,\n options?: Options<TStore>,\n) {\n const { loadingComponent = null, mergeFn = deepMerge } = options || {}\n\n // Храним ссылку на store\n let synapseStore: AnySynapseStore<TStore, TStorage, TSelectors, TActions> | null = null\n\n // Флаг готовности хранилища\n let storeReady = false\n\n // Если передан Promise, начинаем его обработку\n const initPromise = (async () => {\n try {\n synapseStore = await (synapseStorePromise instanceof Promise ? synapseStorePromise : Promise.resolve(synapseStorePromise))\n storeReady = true\n } catch (error) {\n console.error('Ошибка инициализации хранилища Synapse:', error)\n }\n })()\n\n const SynapseContext = createContext<AnySynapseStore<TStore, TStorage, TSelectors, TActions> | null>(null)\n\n const useSynapseStorage = (): TStorage => {\n const context = useContext(SynapseContext)\n if (!context) throw new Error(ERROR_HOOK_MESSAGE)\n\n return context.storage\n }\n\n const useSynapseSelectors = (): TSelectors => {\n const context = useContext(SynapseContext)\n if (!context) throw new Error(ERROR_HOOK_MESSAGE)\n\n return context.selectors\n }\n\n // Условный хук для actions (только если есть dispatcher)\n const useSynapseActions = (): TActions => {\n const context = useContext(SynapseContext)\n if (!context) throw new Error(ERROR_HOOK_MESSAGE)\n\n if ('actions' in context) {\n return (context as SynapseStoreWithDispatcher<TStore, TStorage, TSelectors, TActions> | SynapseStoreWithEffects<TStore, TStorage, TSelectors, TActions>).actions\n }\n\n throw new Error('useSynapseActions: actions недоступны для этого типа хранилища. Убедитесь, что передана функция createDispatcherFn при создании хранилища.')\n }\n\n // Условный хук для state$ (только если есть effects)\n const useSynapseState$ = (): Observable<TStore> => {\n const context = useContext(SynapseContext)\n if (!context) throw new Error(ERROR_HOOK_MESSAGE)\n\n if ('state$' in context) {\n return (context as SynapseStoreWithEffects<TStore, TStorage, TSelectors, TActions>).state$\n }\n\n throw new Error('useSynapseState$: state$ недоступен для этого типа хранилища. Убедитесь, что переданы функции createDispatcherFn и createEffectConfig при создании хранилища.')\n }\n\n /**\n * Декоратор для обертывания компонентов в контекст Synapse\n */\n function contextSynapse<SelfComponentProps, PublicContextProps = Record<string, any>>(Component: ComponentType<SelfComponentProps>) {\n type WrappedComponentProps = SelfComponentProps & { contextProps?: PublicContextProps }\n\n function WrappedComponent({ contextProps, ...props }: WrappedComponentProps) {\n const [initialized, setInitialized] = useState(false)\n const [storeInitialized, setStoreInitialized] = useState(storeReady)\n const debugIdRef = useRef(`synapse-${synapseStore?.storage.name || 'initializing'}`)\n\n // Отслеживаем инициализацию хранилища, если оно еще не готово\n useEffect(() => {\n if (!storeReady) {\n initPromise.then(() => {\n setStoreInitialized(true)\n })\n }\n }, [])\n\n // Инициализируем контекст при монтировании компонента\n useEffect(() => {\n // Не начинаем инициализацию контекста, пока хранилище не готово\n if (!storeInitialized) return\n\n let mounted = true\n\n const initializeContext = async () => {\n try {\n if (synapseStore && contextProps && Object.keys(contextProps).length > 0) {\n await synapseStore.storage.update((state) => {\n mergeFn(state, contextProps)\n })\n }\n\n if (mounted) {\n setInitialized(true)\n }\n } catch (error) {\n console.error(`[${debugIdRef.current}] ${ERROR_CONTEXT_INIT}`, error)\n }\n }\n\n initializeContext()\n\n return () => {\n mounted = false\n }\n }, [contextProps, storeInitialized])\n\n // Проверяем инициализацию хранилища и контекста\n if (!storeInitialized) {\n return loadingComponent || <div>Загрузка хранилища...</div>\n }\n\n if (!initialized) {\n return loadingComponent || <div>Инициализация контекста...</div>\n }\n\n return (\n <SynapseContext.Provider value={synapseStore}>\n <Component {...(props as PropsWithChildren<SelfComponentProps>)} />\n </SynapseContext.Provider>\n )\n }\n\n // Устанавливаем отображаемое имя для отладки\n const componentName = Component.displayName || Component.name || 'Component'\n WrappedComponent.displayName = `SynapseContext(${componentName})`\n\n return WrappedComponent\n }\n\n const cleanupSynapse = async (): Promise<void> => {\n await initPromise // Ждем завершения инициализации\n return synapseStore?.destroy() || Promise.resolve()\n }\n\n return {\n contextSynapse,\n useSynapseStorage,\n useSynapseSelectors,\n useSynapseActions,\n useSynapseState$,\n cleanupSynapse,\n }\n}\n","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}\n"],"mappings":"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","names":["registry","useEffect","useState","useEffect","useRef","useState","useState","useRef","useEffect"]}