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
@@ -1,29 +0,0 @@
1
- import { ILogger, IStorage } from '../storage';
2
- import { ISelectorModule, Selector, SelectorAPI, SelectorOptions } from './selector.interface';
3
- export declare class SelectorModule<S extends Record<string, any>> implements ISelectorModule<S> {
4
- private readonly source;
5
- private readonly logger?;
6
- storageName: string;
7
- private subscriptions;
8
- private cachedState?;
9
- private localSelectorCache;
10
- private batchUpdateInProgress;
11
- private pendingUpdates;
12
- constructor(source: IStorage<S>, logger?: ILogger | undefined);
13
- /**
14
- * Генерирует имя для селектора на основе его типа и функции
15
- */
16
- private generateName;
17
- /**
18
- * Обрабатывает отложенные обновления, чтобы избежать каскадных уведомлений
19
- */
20
- private processPendingUpdates;
21
- createSelector<T>(selector: Selector<S, T>, options?: SelectorOptions<T>): SelectorAPI<T>;
22
- createSelector<Deps extends unknown[], T>(dependencies: {
23
- [K in keyof Deps]: SelectorAPI<Deps[K]>;
24
- }, resultFn: (...args: Deps) => T, options?: SelectorOptions<T>): SelectorAPI<T>;
25
- private createSimpleSelector;
26
- private createCombinedSelector;
27
- destroy(): void;
28
- }
29
- //# sourceMappingURL=selector.module.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"selector.module.d.ts","sourceRoot":"","sources":["../../../src/core/selector/selector.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAc,MAAM,sBAAsB,CAAA;AAuO1G,qBAAa,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAE,YAAW,eAAe,CAAC,CAAC,CAAC;IAoBpF,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IApB1B,WAAW,EAAE,MAAM,CAAA;IAEnB,OAAO,CAAC,aAAa,CAA+C;IACpE,OAAO,CAAC,WAAW,CAAC,CAAG;IAEvB,OAAO,CAAC,kBAAkB,CAOvB;IAGH,OAAO,CAAC,qBAAqB,CAAQ;IACrC,OAAO,CAAC,cAAc,CAAoB;gBAGvB,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,EACnB,MAAM,CAAC,EAAE,OAAO,YAAA;IAiBnC;;OAEG;IACH,OAAO,CAAC,YAAY;IAkBpB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA0C7B,cAAc,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;IACzF,cAAc,CAAC,IAAI,SAAS,OAAO,EAAE,EAAE,CAAC,EAAE,YAAY,EAAE;SAAG,CAAC,IAAI,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAAE,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;IAiFlL,OAAO,CAAC,oBAAoB;IAwD5B,OAAO,CAAC,sBAAsB;IA2D9B,OAAO,IAAI,IAAI;CA8ChB"}
@@ -1,467 +0,0 @@
1
- // Отладка: управление через параметр DEBUG
2
- const DEBUG = false;
3
- // Глобальный кеш селекторов (используем имя селектора как ключ)
4
- const GLOBAL_SELECTOR_CACHE = new Map();
5
- /**
6
- * Получает короткий хеш строки для добавления уникальности к имени селектора
7
- * @param str Строка для хеширования
8
- * @returns Короткий хеш
9
- */
10
- function getStringHash(str) {
11
- let hash = 0;
12
- if (str.length === 0)
13
- return hash.toString(36);
14
- for (let i = 0; i < str.length; i++) {
15
- const char = str.charCodeAt(i);
16
- hash = (hash << 5) - hash + char;
17
- hash = hash & hash;
18
- }
19
- // Преобразуем в короткую строку в формате base36
20
- return Math.abs(hash).toString(36).substring(0, 6);
21
- }
22
- /**
23
- * Интеллектуальное сравнение объектов по структуре
24
- * Сравнивает примитивы через ===, объекты - рекурсивно по структуре
25
- */
26
- function defaultEquals(a, b) {
27
- // Проверяем, одинаковые ли объекты по ссылке
28
- if (a === b)
29
- return true;
30
- // Если один из объектов null или undefined, но не оба одновременно
31
- if (a == null || b == null)
32
- return false;
33
- // Если это не объекты или функции, значит это примитивы
34
- if (typeof a !== 'object' && typeof a !== 'function' && typeof b !== 'object' && typeof b !== 'function') {
35
- return a === b;
36
- }
37
- // Если это разные типы
38
- if (typeof a !== typeof b)
39
- return false;
40
- // Если это даты
41
- if (a instanceof Date && b instanceof Date) {
42
- return a.getTime() === b.getTime();
43
- }
44
- // Если это массивы
45
- if (Array.isArray(a) && Array.isArray(b)) {
46
- if (a.length !== b.length)
47
- return false;
48
- for (let i = 0; i < a.length; i++) {
49
- if (!defaultEquals(a[i], b[i]))
50
- return false;
51
- }
52
- return true;
53
- }
54
- // Обычные объекты
55
- if (typeof a === 'object' && typeof b === 'object') {
56
- const keysA = Object.keys(a);
57
- const keysB = Object.keys(b);
58
- if (keysA.length !== keysB.length)
59
- return false;
60
- // Проверяем все ключи в a
61
- return keysA.every((key) => {
62
- if (!Object.prototype.hasOwnProperty.call(b, key))
63
- return false;
64
- return defaultEquals(a[key], b[key]);
65
- });
66
- }
67
- // По умолчанию считаем объекты разными
68
- return false;
69
- }
70
- // Мемоизирует функцию селектора для оптимизации
71
- function memoizeSelector(selectorFn, equals = defaultEquals) {
72
- let lastState;
73
- let lastResult;
74
- let hasResult = false;
75
- return function memoized(state) {
76
- // Если это первый вызов или состояние изменилось
77
- if (!hasResult || lastState !== state) {
78
- const newResult = selectorFn(state);
79
- // Проверяем, изменился ли результат
80
- if (!hasResult || !equals(newResult, lastResult)) {
81
- lastResult = newResult;
82
- }
83
- lastState = state;
84
- hasResult = true;
85
- }
86
- return lastResult;
87
- };
88
- }
89
- class SelectorSubscription {
90
- name;
91
- equals;
92
- logger;
93
- id;
94
- subscribers = new Set();
95
- lastValue;
96
- memoizedGetState;
97
- constructor(name, getState, equals = defaultEquals, logger) {
98
- this.name = name;
99
- this.equals = equals;
100
- this.logger = logger;
101
- this.id = name;
102
- // Создаем мемоизированную версию getState
103
- this.memoizedGetState = this.createMemoizedGetState(getState);
104
- if (DEBUG) {
105
- console.log(`[${this.id}] Создан new SelectorSubscription`);
106
- }
107
- }
108
- // Создает мемоизированную версию getState с кешированием результата
109
- createMemoizedGetState(getState) {
110
- let lastPromise = null;
111
- let isExecuting = false;
112
- return async () => {
113
- // Если уже выполняется запрос, возвращаем его
114
- if (isExecuting && lastPromise) {
115
- return lastPromise;
116
- }
117
- isExecuting = true;
118
- try {
119
- lastPromise = getState();
120
- return await lastPromise;
121
- }
122
- finally {
123
- isExecuting = false;
124
- }
125
- };
126
- }
127
- async notify() {
128
- try {
129
- const newValue = await this.memoizedGetState();
130
- // Проверка на изменение значения с использованием функции сравнения
131
- if (this.lastValue === undefined || !this.equals(newValue, this.lastValue)) {
132
- if (DEBUG) {
133
- console.log(`[${this.id}] Значение изменилось, notify()`, {
134
- old: this.lastValue,
135
- new: newValue,
136
- });
137
- }
138
- this.lastValue = newValue;
139
- const promises = Array.from(this.subscribers).map(async (subscriber) => {
140
- try {
141
- await subscriber.notify(newValue);
142
- }
143
- catch (error) {
144
- this.logger?.error(`[${this.id}] Ошибка в уведомлении подписчика`, { error });
145
- }
146
- });
147
- await Promise.all(promises);
148
- }
149
- else if (DEBUG) {
150
- console.log(`[${this.id}] Значение не изменилось in notify(), пропуск уведомления`);
151
- }
152
- }
153
- catch (error) {
154
- this.logger?.error(`[${this.id}] Ошибка в notify()`, { error });
155
- throw error;
156
- }
157
- }
158
- subscribe(subscriber) {
159
- if (DEBUG) {
160
- console.log(`[${this.id}] Добавлено новый подписчик, всего: ${this.subscribers.size + 1}`);
161
- }
162
- this.subscribers.add(subscriber);
163
- // Отправляем текущее значение, если оно есть
164
- if (this.lastValue !== undefined) {
165
- // Используем микротаск для асинхронности
166
- Promise.resolve().then(() => {
167
- try {
168
- subscriber.notify(this.lastValue);
169
- }
170
- catch (error) {
171
- this.logger?.error(`[${this.id}] Ошибка в первоначальном уведомлении`, { error });
172
- }
173
- });
174
- }
175
- else {
176
- // Если значения нет - запрашиваем его
177
- this.notify().catch((error) => {
178
- this.logger?.error(`[${this.id}] Ошибка в первоначальном уведомлении`, { error });
179
- });
180
- }
181
- return () => {
182
- if (DEBUG) {
183
- console.log(`[${this.id}] Подписчик удален, осталось: ${this.subscribers.size - 1}`);
184
- }
185
- this.subscribers.delete(subscriber);
186
- };
187
- }
188
- cleanup() {
189
- if (DEBUG) {
190
- console.log(`[${this.id}] Очистка подписки, было ${this.subscribers.size} подписчиков`);
191
- }
192
- this.subscribers.clear();
193
- this.lastValue = undefined;
194
- }
195
- getId() {
196
- return this.id;
197
- }
198
- }
199
- export class SelectorModule {
200
- source;
201
- logger;
202
- storageName;
203
- subscriptions = new Map();
204
- cachedState;
205
- localSelectorCache = new Map();
206
- // Флаг для батчинга обновлений
207
- batchUpdateInProgress = false;
208
- pendingUpdates = new Set();
209
- constructor(source, logger) {
210
- this.source = source;
211
- this.logger = logger;
212
- this.storageName = source.name;
213
- if (DEBUG) {
214
- console.log(`Создан SelectorModule для хранилища: ${this.storageName}`);
215
- }
216
- // Сразу получаем начальное состояние для кеширования
217
- this.source.getState().then((state) => {
218
- this.cachedState = state;
219
- if (DEBUG) {
220
- console.log(`Кэшированное начальное состояние для ${this.storageName}`);
221
- }
222
- });
223
- }
224
- /**
225
- * Генерирует имя для селектора на основе его типа и функции
226
- */
227
- generateName(isSimpleSelector, selectorOrDeps, resultFnOrOptions) {
228
- const type = isSimpleSelector ? 'simple' : 'combined';
229
- let hash = '';
230
- if (isSimpleSelector) {
231
- // Для простого селектора генерируем хеш на основе функции селектора
232
- const selectorStr = selectorOrDeps.toString();
233
- hash = getStringHash(selectorStr);
234
- }
235
- else {
236
- // Для комбинированного селектора генерируем хеш на основе ID зависимостей и функции результата
237
- const depsIds = selectorOrDeps.map((s) => s.getId()).join('_');
238
- const resultFnStr = resultFnOrOptions.toString();
239
- hash = getStringHash(depsIds + resultFnStr);
240
- }
241
- return `${this.storageName}_${type}_${hash}`;
242
- }
243
- /**
244
- * Обрабатывает отложенные обновления, чтобы избежать каскадных уведомлений
245
- */
246
- processPendingUpdates() {
247
- if (this.pendingUpdates.size === 0 || this.batchUpdateInProgress)
248
- return;
249
- this.batchUpdateInProgress = true;
250
- // Используем setTimeout для обеспечения асинхронности и батчинга обновлений
251
- setTimeout(async () => {
252
- try {
253
- // Копируем список селекторов для обновления
254
- const subscriptionsToUpdate = Array.from(this.pendingUpdates);
255
- this.pendingUpdates.clear();
256
- // Обновляем состояние один раз
257
- this.cachedState = await this.source.getState();
258
- // Обновляем все ожидающие селекторы
259
- const updatePromises = subscriptionsToUpdate.map(async (id) => {
260
- const subscription = this.subscriptions.get(id);
261
- if (subscription) {
262
- try {
263
- return await subscription.notify();
264
- }
265
- catch (error) {
266
- this.logger?.error(`Ошибка уведомления подписчика ${id}`, { error });
267
- }
268
- }
269
- return Promise.resolve();
270
- });
271
- await Promise.all(updatePromises);
272
- }
273
- catch (error) {
274
- this.logger?.error('Ошибка обработки ожидающих обновлений', { error });
275
- }
276
- finally {
277
- this.batchUpdateInProgress = false;
278
- // Если появились новые обновления во время обработки, запускаем процесс снова
279
- if (this.pendingUpdates.size > 0) {
280
- this.processPendingUpdates();
281
- }
282
- }
283
- }, 0);
284
- }
285
- createSelector(selectorOrDeps, resultFnOrOptions, optionsArg) {
286
- // Определяем, какую перегрузку используем
287
- const isSimpleSelector = !Array.isArray(selectorOrDeps);
288
- // Извлекаем options
289
- const options = isSimpleSelector ? resultFnOrOptions || {} : optionsArg || {};
290
- // Используем предоставленное имя или генерируем новое
291
- const selectorId = options.name || this.generateName(isSimpleSelector, selectorOrDeps, isSimpleSelector ? undefined : resultFnOrOptions);
292
- // Проверяем локальный кеш
293
- if (this.localSelectorCache.has(selectorId)) {
294
- if (DEBUG) {
295
- console.log(`[${this.storageName}] Reusing cached selector: ${selectorId}`);
296
- }
297
- return this.localSelectorCache.get(selectorId).api;
298
- }
299
- // Проверяем глобальный кеш
300
- if (GLOBAL_SELECTOR_CACHE.has(selectorId)) {
301
- const cached = GLOBAL_SELECTOR_CACHE.get(selectorId);
302
- cached.refCount++;
303
- if (DEBUG) {
304
- console.log(`[${this.storageName}] Повторное использование глобального кэшированного селектора: ${selectorId}, refCount: ${cached.refCount}`);
305
- }
306
- return cached.api;
307
- }
308
- // Создаем новый селектор
309
- let result;
310
- let dependencies;
311
- let unsubscribeFunctions = [];
312
- if (isSimpleSelector) {
313
- // Простой селектор с мемоизацией
314
- const memoized = memoizeSelector(selectorOrDeps, options.equals || defaultEquals);
315
- const created = this.createSimpleSelector(memoized, { ...options, name: selectorId, equals: options.equals || defaultEquals });
316
- result = created.api;
317
- unsubscribeFunctions = created.unsubscribeFunctions;
318
- }
319
- else {
320
- // Комбинированный селектор
321
- dependencies = selectorOrDeps;
322
- const created = this.createCombinedSelector(dependencies, resultFnOrOptions, {
323
- ...options,
324
- name: selectorId,
325
- equals: options.equals || defaultEquals,
326
- });
327
- result = created.api;
328
- unsubscribeFunctions = created.unsubscribeFunctions;
329
- }
330
- // Сохраняем в кеши
331
- this.localSelectorCache.set(selectorId, {
332
- api: result,
333
- dependencies,
334
- unsubscribeFunctions,
335
- });
336
- GLOBAL_SELECTOR_CACHE.set(selectorId, {
337
- api: result,
338
- refCount: 1,
339
- unsubscribeFunctions,
340
- });
341
- if (DEBUG) {
342
- console.log(`[${this.storageName}] Создан новый селектор: ${selectorId}`);
343
- }
344
- return result;
345
- }
346
- createSimpleSelector(selector, options) {
347
- if (DEBUG) {
348
- console.log(`[${this.storageName}] Создан простой селектор: ${options.name}`);
349
- }
350
- // Функция для получения данных
351
- const getState = async () => {
352
- // Используем кешированное состояние, если оно доступно
353
- if (this.cachedState) {
354
- return selector(this.cachedState);
355
- }
356
- // Иначе получаем его из хранилища
357
- const state = await this.source.getState();
358
- this.cachedState = state; // Обновляем кеш
359
- return selector(state);
360
- };
361
- const subscription = new SelectorSubscription(options.name, getState, options.equals || defaultEquals, this.logger);
362
- const id = subscription.getId();
363
- this.subscriptions.set(id, subscription);
364
- // Подписка на обновления хранилища с батчингом
365
- const unsubscribeFromStorage = this.source.subscribeToAll(async (event) => {
366
- if (event?.type === 'storage:update') {
367
- if (DEBUG) {
368
- console.log(`[${id}] Получено событие обновления хранилища`);
369
- }
370
- // Добавляем селектор в список ожидающих обновления
371
- this.pendingUpdates.add(id);
372
- this.processPendingUpdates();
373
- }
374
- });
375
- const unsubscribeFunctions = [unsubscribeFromStorage];
376
- return {
377
- api: {
378
- select: () => getState(),
379
- subscribe: (subscriber) => {
380
- return subscription.subscribe(subscriber);
381
- },
382
- getId: () => id,
383
- },
384
- unsubscribeFunctions,
385
- };
386
- }
387
- createCombinedSelector(selectors, resultFn, options) {
388
- // Мемоизируем функцию для более эффективного вычисления
389
- const memoizedResultFn = memoizeSelector((args) => resultFn(...args), options.equals || defaultEquals);
390
- const getState = async () => {
391
- const values = await Promise.all(selectors.map((s) => s.select()));
392
- return memoizedResultFn(values);
393
- };
394
- const subscription = new SelectorSubscription(options.name, getState, options.equals || defaultEquals, this.logger);
395
- const id = subscription.getId();
396
- this.subscriptions.set(id, subscription);
397
- // Создаем подписки на зависимости с дебаунсингом
398
- let debounceTimer = null;
399
- const triggerUpdate = () => {
400
- // Очищаем предыдущий таймер
401
- if (debounceTimer !== null) {
402
- clearTimeout(debounceTimer);
403
- }
404
- // Устанавливаем новый таймер для дебаунсинга
405
- debounceTimer = setTimeout(() => {
406
- debounceTimer = null;
407
- // Вызываем уведомление только после завершения дебаунса
408
- subscription.notify().catch((error) => this.logger?.error(`[${id}] Ошибка в объединенном уведомлении:`, { error }));
409
- }, 10); // Короткая задержка для дебаунсинга
410
- };
411
- const unsubscribeFunctions = selectors.map((selector) => selector.subscribe({
412
- notify: () => {
413
- triggerUpdate();
414
- },
415
- }));
416
- return {
417
- api: {
418
- select: () => getState(),
419
- subscribe: (subscriber) => {
420
- return subscription.subscribe(subscriber);
421
- },
422
- getId: () => id,
423
- },
424
- unsubscribeFunctions,
425
- };
426
- }
427
- destroy() {
428
- if (DEBUG) {
429
- console.log(`[${this.storageName}] Началось уничтожение SelectorModule`);
430
- }
431
- // Очищаем все подписки
432
- this.subscriptions.forEach((sub) => sub.cleanup());
433
- this.subscriptions.clear();
434
- // Очищаем кеш состояния
435
- this.cachedState = undefined;
436
- // Очищаем список ожидающих обновлений
437
- this.pendingUpdates.clear();
438
- // Очищаем подписки из локального кеша
439
- this.localSelectorCache.forEach((cached) => {
440
- cached.unsubscribeFunctions.forEach((unsub) => unsub());
441
- });
442
- // Собираем ключи для глобального кеша
443
- const keysToCheck = new Set();
444
- this.localSelectorCache.forEach((_, key) => {
445
- keysToCheck.add(key);
446
- });
447
- this.localSelectorCache.clear();
448
- // Уменьшаем счетчики ссылок в глобальном кеше
449
- keysToCheck.forEach((key) => {
450
- const globalCached = GLOBAL_SELECTOR_CACHE.get(key);
451
- if (globalCached) {
452
- globalCached.refCount--;
453
- if (globalCached.refCount <= 0) {
454
- globalCached.unsubscribeFunctions.forEach((unsub) => unsub());
455
- GLOBAL_SELECTOR_CACHE.delete(key);
456
- if (DEBUG) {
457
- console.log(`[${this.storageName}] Удален селектор из глобального кэша: ${key}`);
458
- }
459
- }
460
- }
461
- });
462
- if (DEBUG) {
463
- console.log(`[${this.storageName}] Уничтожен`);
464
- }
465
- }
466
- }
467
- //# sourceMappingURL=selector.module.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"selector.module.js","sourceRoot":"","sources":["../../../src/core/selector/selector.module.ts"],"names":[],"mappings":"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"}
@@ -1,65 +0,0 @@
1
- import { IPluginExecutor } from '../modules/plugin/plugin.interface';
2
- import { DefaultMiddlewares, IEventEmitter, ILogger, IStorage, StorageConfig, StorageEvent } from '../storage.interface';
3
- import { StorageKeyType } from '../utils/storage-key';
4
- type PathSelector<T, R> = (state: T) => R;
5
- export declare abstract class BaseStorage<T extends Record<string, any>> implements IStorage<T> {
6
- protected readonly config: StorageConfig;
7
- protected readonly pluginExecutor?: IPluginExecutor | undefined;
8
- protected readonly eventEmitter?: IEventEmitter | undefined;
9
- protected readonly logger?: ILogger | undefined;
10
- protected static readonly GLOBAL_SUBSCRIPTION_KEY = "*";
11
- name: string;
12
- private selectorPathCache;
13
- private middlewareModule;
14
- private initializedMiddlewares;
15
- protected subscribers: Map<StorageKeyType, Set<(value: any) => void>>;
16
- constructor(config: StorageConfig, pluginExecutor?: IPluginExecutor | undefined, eventEmitter?: IEventEmitter | undefined, logger?: ILogger | undefined);
17
- protected initializeMiddlewares(): void;
18
- protected getDefaultMiddleware(): DefaultMiddlewares;
19
- protected initializeWithMiddlewares(): Promise<void>;
20
- abstract initialize(): Promise<this>;
21
- protected abstract doGet(key: StorageKeyType): Promise<any>;
22
- protected abstract doSet(key: StorageKeyType, value: any): Promise<void>;
23
- protected abstract doUpdate(updates: Array<{
24
- key: StorageKeyType;
25
- value: any;
26
- }>): Promise<void>;
27
- protected abstract doDelete(key: StorageKeyType): Promise<boolean>;
28
- protected abstract doClear(): Promise<void>;
29
- protected abstract doKeys(): Promise<string[]>;
30
- protected abstract doHas(key: StorageKeyType): Promise<boolean>;
31
- protected abstract doDestroy(): Promise<void>;
32
- get<R>(key: StorageKeyType): Promise<R | undefined>;
33
- set<R>(key: StorageKeyType, value: R): Promise<void>;
34
- update(updater: (state: T) => void): Promise<void>;
35
- delete(key: StorageKeyType): Promise<void>;
36
- clear(): Promise<void>;
37
- keys(): Promise<string[]>;
38
- has(key: StorageKeyType): Promise<boolean>;
39
- getState(): Promise<T>;
40
- subscribeToAll(callback: (event: {
41
- type: string;
42
- key?: StorageKeyType[] | StorageKeyType;
43
- value?: any;
44
- changedPaths?: string[];
45
- }) => void): VoidFunction;
46
- subscribe(key: string, callback: (value: any) => void): VoidFunction;
47
- subscribe<R>(pathSelector: PathSelector<T, R>, callback: (value: R) => void): VoidFunction;
48
- destroy(): Promise<void>;
49
- private subscribeByKey;
50
- private createDummyState;
51
- private isEqual;
52
- /**
53
- * Возвращает полный путь, а не только корневой ключ
54
- */
55
- private extractPath;
56
- protected notifySubscribers(key: StorageKeyType, value: any): void;
57
- /**
58
- * Метод для определения изменившихся путей между двумя объектами
59
- */
60
- private findChangedPaths;
61
- private subscribeBySelector;
62
- protected emitEvent(event: StorageEvent): Promise<void>;
63
- }
64
- export {};
65
- //# sourceMappingURL=base-storage.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"base-storage.service.d.ts","sourceRoot":"","sources":["../../../../src/core/storage/adapters/base-storage.service.ts"],"names":[],"mappings":"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"}