synapse-storage 3.0.16 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (351) hide show
  1. package/README.md +657 -127
  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 -95
  342. package/dist/core.js +0 -1
  343. package/dist/createSynapse-BLbPlWXK.d.ts +0 -97
  344. package/dist/dispatcher.module-DcXkCRNj.d.ts +0 -360
  345. package/dist/react.d.ts +0 -98
  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-2HKvqdAJ.d.ts +0 -444
  350. package/dist/utils.d.ts +0 -139
  351. package/dist/utils.js +0 -1
@@ -0,0 +1,258 @@
1
+ import { handleOperationError } from "../../../_utils/error-handling.util.js";
2
+
3
+
4
+
5
+ /**
6
+ * Sentinel object returned by middleware to signal that the value has not changed.
7
+ * BaseStorage checks for this by reference equality to skip subscriber notifications.
8
+ */ const VALUE_NOT_CHANGED = Symbol('VALUE_NOT_CHANGED');
9
+ // ─── Async Middleware Module ───────────────────────────────────────────────────
10
+ class AsyncMiddlewareModule {
11
+ middlewares = [];
12
+ api;
13
+ initialized = false;
14
+ depth = 0;
15
+ dispatchFn;
16
+ constructor(storage){
17
+ this.api = {
18
+ dispatch: async (action)=>this.dispatch(action),
19
+ getState: ()=>storage.getState(),
20
+ storage: {
21
+ doGet: storage.doGet.bind(storage),
22
+ doSet: storage.doSet.bind(storage),
23
+ doUpdate: storage.doUpdate.bind(storage),
24
+ doDelete: storage.doDelete.bind(storage),
25
+ doClear: storage.doClear.bind(storage),
26
+ doKeys: storage.doKeys.bind(storage),
27
+ notifySubscribers: storage.notifySubscribers.bind(storage)
28
+ }
29
+ };
30
+ }
31
+ async baseOperation(action) {
32
+ switch(action.type){
33
+ case 'get':
34
+ {
35
+ return this.api.storage.doGet(action.key);
36
+ }
37
+ case 'set':
38
+ {
39
+ await this.api.storage.doSet(action.key, action.value);
40
+ return this.api.storage.doGet(action.key);
41
+ }
42
+ case 'update':
43
+ {
44
+ if (Array.isArray(action.value)) {
45
+ await this.api.storage.doUpdate(action.value);
46
+ return this.api.storage.doGet('');
47
+ }
48
+ return action.value;
49
+ }
50
+ case 'delete':
51
+ {
52
+ return this.api.storage.doDelete(action.key);
53
+ }
54
+ case 'clear':
55
+ {
56
+ return this.api.storage.doClear();
57
+ }
58
+ case 'reset':
59
+ {
60
+ if (action.value) {
61
+ await this.api.storage.doClear();
62
+ await this.api.storage.doSet('', action.value);
63
+ return this.api.storage.doGet('');
64
+ }
65
+ return this.api.storage.doClear();
66
+ }
67
+ case 'init':
68
+ {
69
+ const currentState = await this.api.storage.doGet('');
70
+ if (Object.keys(currentState || {}).length > 0) {
71
+ return currentState;
72
+ }
73
+ if (action.value) {
74
+ await this.api.storage.doSet('', action.value);
75
+ return this.api.storage.doGet('');
76
+ }
77
+ return currentState;
78
+ }
79
+ case 'keys':
80
+ {
81
+ return this.api.storage.doKeys();
82
+ }
83
+ default:
84
+ {
85
+ throw new Error(`Unknown action type: ${action.type}`);
86
+ }
87
+ }
88
+ }
89
+ initializeMiddlewares() {
90
+ if (this.initialized) return;
91
+ let chain = this.baseOperation.bind(this);
92
+ for (const middleware of [
93
+ ...this.middlewares
94
+ ].reverse()){
95
+ const nextChain = chain;
96
+ chain = async (action)=>{
97
+ const actionWithMeta = {
98
+ ...action,
99
+ metadata: {
100
+ ...action.metadata,
101
+ timestamp: action.metadata?.timestamp || Date.now()
102
+ }
103
+ };
104
+ return middleware.reducer(this.api)(nextChain)(actionWithMeta);
105
+ };
106
+ }
107
+ this.dispatchFn = chain;
108
+ this.initialized = true;
109
+ }
110
+ use(middleware) {
111
+ if (middleware.setup) {
112
+ middleware.setup(this.api);
113
+ }
114
+ this.middlewares.push(middleware);
115
+ this.initialized = false;
116
+ }
117
+ async dispatch(action) {
118
+ if (!this.initialized) {
119
+ this.initializeMiddlewares();
120
+ }
121
+ this.depth++;
122
+ try {
123
+ return await this.dispatchFn(action);
124
+ } catch (error) {
125
+ handleOperationError('AsyncMiddlewareModule: error in middleware chain', error);
126
+ } finally{
127
+ this.depth--;
128
+ }
129
+ }
130
+ }
131
+ /** @deprecated Use AsyncMiddlewareModule */ class MiddlewareModule extends AsyncMiddlewareModule {
132
+ }
133
+ // ─── Sync Middleware Module ────────────────────────────────────────────────────
134
+ class SyncMiddlewareModule {
135
+ middlewares = [];
136
+ api;
137
+ initialized = false;
138
+ depth = 0;
139
+ dispatchFn;
140
+ constructor(storage){
141
+ this.api = {
142
+ dispatch: (action)=>this.dispatch(action),
143
+ getState: ()=>storage.getState(),
144
+ storage: {
145
+ doGet: storage.doGet.bind(storage),
146
+ doSet: storage.doSet.bind(storage),
147
+ doUpdate: storage.doUpdate.bind(storage),
148
+ doRemove: storage.doRemove.bind(storage),
149
+ doClear: storage.doClear.bind(storage),
150
+ doKeys: storage.doKeys.bind(storage),
151
+ notifySubscribers: storage.notifySubscribers.bind(storage)
152
+ }
153
+ };
154
+ }
155
+ baseOperation(action) {
156
+ switch(action.type){
157
+ case 'get':
158
+ {
159
+ return this.api.storage.doGet(action.key);
160
+ }
161
+ case 'set':
162
+ {
163
+ this.api.storage.doSet(action.key, action.value);
164
+ return this.api.storage.doGet(action.key);
165
+ }
166
+ case 'update':
167
+ {
168
+ if (Array.isArray(action.value)) {
169
+ this.api.storage.doUpdate(action.value);
170
+ return this.api.storage.doGet('');
171
+ }
172
+ return action.value;
173
+ }
174
+ case 'delete':
175
+ {
176
+ return this.api.storage.doRemove(action.key);
177
+ }
178
+ case 'clear':
179
+ {
180
+ return this.api.storage.doClear();
181
+ }
182
+ case 'reset':
183
+ {
184
+ if (action.value) {
185
+ this.api.storage.doClear();
186
+ this.api.storage.doSet('', action.value);
187
+ return this.api.storage.doGet('');
188
+ }
189
+ return this.api.storage.doClear();
190
+ }
191
+ case 'init':
192
+ {
193
+ const currentState = this.api.storage.doGet('');
194
+ if (Object.keys(currentState || {}).length > 0) {
195
+ return currentState;
196
+ }
197
+ if (action.value) {
198
+ this.api.storage.doSet('', action.value);
199
+ return this.api.storage.doGet('');
200
+ }
201
+ return currentState;
202
+ }
203
+ case 'keys':
204
+ {
205
+ return this.api.storage.doKeys();
206
+ }
207
+ default:
208
+ {
209
+ throw new Error(`Unknown action type: ${action.type}`);
210
+ }
211
+ }
212
+ }
213
+ initializeMiddlewares() {
214
+ if (this.initialized) return;
215
+ let chain = this.baseOperation.bind(this);
216
+ for (const middleware of [
217
+ ...this.middlewares
218
+ ].reverse()){
219
+ const nextChain = chain;
220
+ chain = (action)=>{
221
+ const actionWithMeta = {
222
+ ...action,
223
+ metadata: {
224
+ ...action.metadata,
225
+ timestamp: action.metadata?.timestamp || Date.now()
226
+ }
227
+ };
228
+ return middleware.reducer(this.api)(nextChain)(actionWithMeta);
229
+ };
230
+ }
231
+ this.dispatchFn = chain;
232
+ this.initialized = true;
233
+ }
234
+ use(middleware) {
235
+ if (middleware.setup) {
236
+ middleware.setup(this.api);
237
+ }
238
+ this.middlewares.push(middleware);
239
+ this.initialized = false;
240
+ }
241
+ dispatch(action) {
242
+ if (!this.initialized) {
243
+ this.initializeMiddlewares();
244
+ }
245
+ this.depth++;
246
+ try {
247
+ return this.dispatchFn(action);
248
+ } catch (error) {
249
+ handleOperationError('SyncMiddlewareModule: error in middleware chain', error);
250
+ } finally{
251
+ this.depth--;
252
+ }
253
+ }
254
+ }
255
+
256
+ export { AsyncMiddlewareModule, MiddlewareModule, SyncMiddlewareModule, VALUE_NOT_CHANGED };
257
+
258
+ //# sourceMappingURL=middleware-module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core/storage/utils/middleware-module.js","sources":["../../../../src/core/storage/utils/middleware-module.ts"],"sourcesContent":["import { handleOperationError } from '../../../_utils/error-handling.util'\nimport { StorageKeyType } from './storage-key'\n\n/**\n * Sentinel object returned by middleware to signal that the value has not changed.\n * BaseStorage checks for this by reference equality to skip subscriber notifications.\n */\nexport const VALUE_NOT_CHANGED: unique symbol = Symbol('VALUE_NOT_CHANGED')\n\nexport type StorageActionType = 'get' | 'set' | 'delete' | 'clear' | 'init' | 'keys' | 'update' | 'reset'\n\nexport type StorageAction = {\n type: StorageActionType\n key?: StorageKeyType\n value?: any\n metadata?: Record<string, any>\n source?: string\n timestamp?: number\n}\n\n// ─── Async Middleware Types ────────────────────────────────────────────────────\n\nexport type MiddlewareAPI = {\n dispatch: (action: StorageAction) => Promise<any>\n getState: () => Promise<Record<string, any>>\n storage: {\n doGet: (key: StorageKeyType) => Promise<any>\n doSet: (key: StorageKeyType, value: any) => Promise<void>\n doUpdate: (updates: Array<{ key: StorageKeyType; value: any }>) => Promise<void>\n doDelete: (key: StorageKeyType) => Promise<boolean>\n doClear: () => Promise<void>\n doKeys: () => Promise<string[]>\n notifySubscribers: (key: StorageKeyType, value: any) => void\n }\n}\n\nexport type NextFunction = (action: StorageAction) => Promise<any>\n\nexport type SetupEventsFunction = (api: MiddlewareAPI) => void\n\nexport type Middleware = {\n name: string\n setup?: SetupEventsFunction\n cleanup?: () => Promise<void> | void\n reducer: (api: MiddlewareAPI) => (next: NextFunction) => (action: StorageAction) => Promise<any>\n}\n\n// Алиасы для явного разделения\nexport type AsyncMiddlewareAPI = MiddlewareAPI\nexport type AsyncNextFunction = NextFunction\nexport type AsyncMiddleware = Middleware\n\n// ─── Sync Middleware Types ─────────────────────────────────────────────────────\n\nexport type SyncMiddlewareAPI = {\n dispatch: (action: StorageAction) => any\n getState: () => Record<string, any>\n storage: {\n doGet: (key: StorageKeyType) => any\n doSet: (key: StorageKeyType, value: any) => void\n doUpdate: (updates: Array<{ key: StorageKeyType; value: any }>) => void\n doRemove: (key: StorageKeyType) => boolean\n doClear: () => void\n doKeys: () => string[]\n notifySubscribers: (key: StorageKeyType, value: any) => void\n }\n}\n\nexport type SyncNextFunction = (action: StorageAction) => any\n\nexport type SyncSetupEventsFunction = (api: SyncMiddlewareAPI) => void\n\nexport type SyncMiddleware = {\n name: string\n setup?: SyncSetupEventsFunction\n cleanup?: () => void\n reducer: (api: SyncMiddlewareAPI) => (next: SyncNextFunction) => (action: StorageAction) => any\n}\n\n// ─── Async Middleware Module ───────────────────────────────────────────────────\n\nexport class AsyncMiddlewareModule {\n private middlewares: Middleware[] = []\n\n private api: MiddlewareAPI\n\n private initialized = false\n\n private depth = 0\n\n private dispatchFn!: (action: StorageAction) => Promise<any>\n\n constructor(storage: any) {\n this.api = {\n dispatch: async (action: StorageAction) => this.dispatch(action),\n getState: () => storage.getState(),\n storage: {\n doGet: storage.doGet.bind(storage),\n doSet: storage.doSet.bind(storage),\n doUpdate: storage.doUpdate.bind(storage),\n doDelete: storage.doDelete.bind(storage),\n doClear: storage.doClear.bind(storage),\n doKeys: storage.doKeys.bind(storage),\n notifySubscribers: storage.notifySubscribers.bind(storage),\n },\n }\n }\n\n private async baseOperation(action: StorageAction): Promise<any> {\n switch (action.type) {\n case 'get': {\n return this.api.storage.doGet(action.key!)\n }\n\n case 'set': {\n await this.api.storage.doSet(action.key!, action.value)\n return this.api.storage.doGet(action.key!)\n }\n\n case 'update': {\n if (Array.isArray(action.value)) {\n await this.api.storage.doUpdate(action.value)\n return this.api.storage.doGet('')\n }\n return action.value\n }\n\n case 'delete': {\n return this.api.storage.doDelete(action.key!)\n }\n\n case 'clear': {\n return this.api.storage.doClear()\n }\n\n case 'reset': {\n if (action.value) {\n await this.api.storage.doClear()\n await this.api.storage.doSet('', action.value)\n return this.api.storage.doGet('')\n }\n return this.api.storage.doClear()\n }\n\n case 'init': {\n const currentState = await this.api.storage.doGet('')\n if (Object.keys(currentState || {}).length > 0) {\n return currentState\n }\n if (action.value) {\n await this.api.storage.doSet('', action.value)\n return this.api.storage.doGet('')\n }\n return currentState\n }\n\n case 'keys': {\n return this.api.storage.doKeys()\n }\n\n default: {\n throw new Error(`Unknown action type: ${action.type}`)\n }\n }\n }\n\n private initializeMiddlewares() {\n if (this.initialized) return\n\n let chain = this.baseOperation.bind(this)\n\n for (const middleware of [...this.middlewares].reverse()) {\n const nextChain = chain\n chain = async (action) => {\n const actionWithMeta = {\n ...action,\n metadata: {\n ...action.metadata,\n timestamp: action.metadata?.timestamp || Date.now(),\n },\n }\n\n return middleware.reducer(this.api)(nextChain)(actionWithMeta)\n }\n }\n\n this.dispatchFn = chain\n this.initialized = true\n }\n\n use(middleware: Middleware): void {\n if (middleware.setup) {\n middleware.setup(this.api)\n }\n\n this.middlewares.push(middleware)\n this.initialized = false\n }\n\n async dispatch(action: StorageAction): Promise<any> {\n if (!this.initialized) {\n this.initializeMiddlewares()\n }\n\n this.depth++\n try {\n return await this.dispatchFn(action)\n } catch (error) {\n handleOperationError('AsyncMiddlewareModule: error in middleware chain', error)\n } finally {\n this.depth--\n }\n }\n}\n\n/** @deprecated Use AsyncMiddlewareModule */\nexport class MiddlewareModule extends AsyncMiddlewareModule {}\n\n// ─── Sync Middleware Module ────────────────────────────────────────────────────\n\nexport class SyncMiddlewareModule {\n private middlewares: SyncMiddleware[] = []\n\n private api: SyncMiddlewareAPI\n\n private initialized = false\n\n private depth = 0\n\n private dispatchFn!: (action: StorageAction) => any\n\n constructor(storage: any) {\n this.api = {\n dispatch: (action: StorageAction) => this.dispatch(action),\n getState: () => storage.getState(),\n storage: {\n doGet: storage.doGet.bind(storage),\n doSet: storage.doSet.bind(storage),\n doUpdate: storage.doUpdate.bind(storage),\n doRemove: storage.doRemove.bind(storage),\n doClear: storage.doClear.bind(storage),\n doKeys: storage.doKeys.bind(storage),\n notifySubscribers: storage.notifySubscribers.bind(storage),\n },\n }\n }\n\n private baseOperation(action: StorageAction): any {\n switch (action.type) {\n case 'get': {\n return this.api.storage.doGet(action.key!)\n }\n\n case 'set': {\n this.api.storage.doSet(action.key!, action.value)\n return this.api.storage.doGet(action.key!)\n }\n\n case 'update': {\n if (Array.isArray(action.value)) {\n this.api.storage.doUpdate(action.value)\n return this.api.storage.doGet('')\n }\n return action.value\n }\n\n case 'delete': {\n return this.api.storage.doRemove(action.key!)\n }\n\n case 'clear': {\n return this.api.storage.doClear()\n }\n\n case 'reset': {\n if (action.value) {\n this.api.storage.doClear()\n this.api.storage.doSet('', action.value)\n return this.api.storage.doGet('')\n }\n return this.api.storage.doClear()\n }\n\n case 'init': {\n const currentState = this.api.storage.doGet('')\n if (Object.keys(currentState || {}).length > 0) {\n return currentState\n }\n if (action.value) {\n this.api.storage.doSet('', action.value)\n return this.api.storage.doGet('')\n }\n return currentState\n }\n\n case 'keys': {\n return this.api.storage.doKeys()\n }\n\n default: {\n throw new Error(`Unknown action type: ${action.type}`)\n }\n }\n }\n\n private initializeMiddlewares() {\n if (this.initialized) return\n\n let chain = this.baseOperation.bind(this)\n\n for (const middleware of [...this.middlewares].reverse()) {\n const nextChain = chain\n chain = (action) => {\n const actionWithMeta = {\n ...action,\n metadata: {\n ...action.metadata,\n timestamp: action.metadata?.timestamp || Date.now(),\n },\n }\n\n return middleware.reducer(this.api)(nextChain)(actionWithMeta)\n }\n }\n\n this.dispatchFn = chain\n this.initialized = true\n }\n\n use(middleware: SyncMiddleware): void {\n if (middleware.setup) {\n middleware.setup(this.api)\n }\n\n this.middlewares.push(middleware)\n this.initialized = false\n }\n\n dispatch(action: StorageAction): any {\n if (!this.initialized) {\n this.initializeMiddlewares()\n }\n\n this.depth++\n try {\n return this.dispatchFn(action)\n } catch (error) {\n handleOperationError('SyncMiddlewareModule: error in middleware chain', error)\n } finally {\n this.depth--\n }\n }\n}\n"],"names":["handleOperationError","VALUE_NOT_CHANGED","Symbol","AsyncMiddlewareModule","storage","action","Array","currentState","Object","Error","chain","middleware","nextChain","actionWithMeta","Date","error","MiddlewareModule","SyncMiddlewareModule"],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Creates a dummy Proxy state object for path extraction.
3
+ */
4
+ export declare function createDummyState<T>(): T;
5
+ /**
6
+ * Extracts the property path from a selector function using Proxy.
7
+ *
8
+ * **Limitations:**
9
+ * - Does not support conditional logic (if/ternary): Proxy records ALL accessed paths
10
+ * and returns the longest, which leads to subscription on the wrong path.
11
+ * - Does not support destructuring or array methods (map, filter, etc.)
12
+ * - For such cases use string-based subscription: `storage.subscribe('user.permissions', callback)`
13
+ */
14
+ export declare function extractPath<T>(selector: (state: T) => any, dummyState: T, cache?: WeakMap<(...args: any[]) => any, string>): string;
15
+ //# sourceMappingURL=path-selector.util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-selector.util.d.ts","sourceRoot":"","sources":["../../../../src/core/storage/utils/path-selector.util.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,KAAK,CAAC,CAQvC;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EAAE,MAAM,CAAC,GAAG,MAAM,CA0CnI"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Creates a dummy Proxy state object for path extraction.
3
+ */ function createDummyState() {
4
+ const handler = {
5
+ get: (target, prop)=>{
6
+ target[prop] = target[prop] || new Proxy({}, handler);
7
+ return target[prop];
8
+ }
9
+ };
10
+ return new Proxy({}, handler);
11
+ }
12
+ /**
13
+ * Extracts the property path from a selector function using Proxy.
14
+ *
15
+ * **Limitations:**
16
+ * - Does not support conditional logic (if/ternary): Proxy records ALL accessed paths
17
+ * and returns the longest, which leads to subscription on the wrong path.
18
+ * - Does not support destructuring or array methods (map, filter, etc.)
19
+ * - For such cases use string-based subscription: `storage.subscribe('user.permissions', callback)`
20
+ */ function extractPath(selector, dummyState, cache) {
21
+ if (cache?.has(selector)) {
22
+ return cache.get(selector);
23
+ }
24
+ const accessedPaths = [];
25
+ const createProxyHandler = (path = '')=>({
26
+ get: (_target, prop)=>{
27
+ if (typeof prop === 'symbol') {
28
+ return Reflect.get(_target, prop);
29
+ }
30
+ const currentPath = path ? `${path}.${prop}` : prop;
31
+ accessedPaths.push(currentPath);
32
+ return new Proxy({}, createProxyHandler(currentPath));
33
+ },
34
+ has: ()=>true,
35
+ ownKeys: ()=>[],
36
+ getOwnPropertyDescriptor: ()=>({
37
+ configurable: true,
38
+ enumerable: true
39
+ }),
40
+ apply: ()=>{
41
+ return new Proxy(()=>{}, createProxyHandler(path));
42
+ }
43
+ });
44
+ try {
45
+ selector(new Proxy(dummyState, createProxyHandler()));
46
+ } catch {
47
+ // Ignore errors from accessing non-existent properties
48
+ }
49
+ if (accessedPaths.length === 0) return '';
50
+ accessedPaths.sort((a, b)=>b.length - a.length);
51
+ const result = accessedPaths[0];
52
+ cache?.set(selector, result);
53
+ return result;
54
+ }
55
+
56
+ export { createDummyState, extractPath };
57
+
58
+ //# sourceMappingURL=path-selector.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core/storage/utils/path-selector.util.js","sources":["../../../../src/core/storage/utils/path-selector.util.ts"],"sourcesContent":["/**\n * Creates a dummy Proxy state object for path extraction.\n */\nexport function createDummyState<T>(): T {\n const handler: ProxyHandler<any> = {\n get: (target: any, prop: string) => {\n target[prop] = target[prop] || new Proxy({}, handler)\n return target[prop]\n },\n }\n return new Proxy({} as T, handler)\n}\n\n/**\n * Extracts the property path from a selector function using Proxy.\n *\n * **Limitations:**\n * - Does not support conditional logic (if/ternary): Proxy records ALL accessed paths\n * and returns the longest, which leads to subscription on the wrong path.\n * - Does not support destructuring or array methods (map, filter, etc.)\n * - For such cases use string-based subscription: `storage.subscribe('user.permissions', callback)`\n */\nexport function extractPath<T>(selector: (state: T) => any, dummyState: T, cache?: WeakMap<(...args: any[]) => any, string>): string {\n if (cache?.has(selector)) {\n return cache.get(selector)!\n }\n\n const accessedPaths: string[] = []\n\n const createProxyHandler = (path = ''): ProxyHandler<any> => ({\n get: (_target: any, prop: string) => {\n if (typeof prop === 'symbol') {\n return Reflect.get(_target, prop)\n }\n\n const currentPath = path ? `${path}.${prop}` : prop\n accessedPaths.push(currentPath)\n\n return new Proxy({}, createProxyHandler(currentPath))\n },\n has: () => true,\n ownKeys: () => [],\n getOwnPropertyDescriptor: () => ({\n configurable: true,\n enumerable: true,\n }),\n apply: () => {\n return new Proxy(() => {}, createProxyHandler(path))\n },\n })\n\n try {\n selector(new Proxy(dummyState, createProxyHandler()))\n } catch {\n // Ignore errors from accessing non-existent properties\n }\n\n if (accessedPaths.length === 0) return ''\n\n accessedPaths.sort((a, b) => b.length - a.length)\n\n const result = accessedPaths[0]\n cache?.set(selector, result)\n return result\n}\n"],"names":["createDummyState","handler","target","prop","Proxy","extractPath","selector","dummyState","cache","accessedPaths","createProxyHandler","path","_target","Reflect","currentPath","a","b","result"],"mappings":"AAAA;;CAEC,GACM,SAASA,gBAAgBA;IAC9B,MAAMC,UAA6B;QACjC,KAAK,CAACC,QAAaC;YACjBD,MAAM,CAACC,KAAK,GAAGD,MAAM,CAACC,KAAK,IAAI,IAAIC,MAAM,CAAC,GAAGH;YAC7C,OAAOC,MAAM,CAACC,KAAK;QACrB;IACF;IACA,OAAO,IAAIC,MAAM,CAAC,GAAQH;AAC5B;AAEA;;;;;;;;CAQC,GACM,SAASI,WAAWA,CAAIC,QAA2B,EAAEC,UAAa,EAAEC,KAAgD;IACzH,IAAIA,OAAO,IAAIF,WAAW;QACxB,OAAOE,MAAM,GAAG,CAACF;IACnB;IAEA,MAAMG,gBAA0B,EAAE;IAElC,MAAMC,qBAAqB,CAACC,OAAO,EAAE,GAAyB;YAC5D,KAAK,CAACC,SAAcT;gBAClB,IAAI,OAAOA,SAAS,UAAU;oBAC5B,OAAOU,QAAQ,GAAG,CAACD,SAAST;gBAC9B;gBAEA,MAAMW,cAAcH,OAAO,GAAGA,KAAK,CAAC,EAAER,MAAM,GAAGA;gBAC/CM,cAAc,IAAI,CAACK;gBAEnB,OAAO,IAAIV,MAAM,CAAC,GAAGM,mBAAmBI;YAC1C;YACA,KAAK,IAAM;YACX,SAAS,IAAM,EAAE;YACjB,0BAA0B,IAAO;oBAC/B,cAAc;oBACd,YAAY;gBACd;YACA,OAAO;gBACL,OAAO,IAAIV,MAAM,KAAO,GAAGM,mBAAmBC;YAChD;QACF;IAEA,IAAI;QACFL,SAAS,IAAIF,MAAMG,YAAYG;IACjC,EAAE,OAAM;IACN,uDAAuD;IACzD;IAEA,IAAID,cAAc,MAAM,KAAK,GAAG,OAAO;IAEvCA,cAAc,IAAI,CAAC,CAACM,GAAGC,IAAMA,EAAE,MAAM,GAAGD,EAAE,MAAM;IAEhD,MAAME,SAASR,aAAa,CAAC,EAAE;IAC/BD,OAAO,IAAIF,UAAUW;IACrB,OAAOA;AACT"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Deep equality check for two values.
3
+ */
4
+ export declare function isEqual(a: any, b: any): boolean;
5
+ /**
6
+ * Finds all changed paths between two objects.
7
+ */
8
+ export declare function findChangedPaths(oldObj: any, newObj: any, prefix?: string, changedPaths?: Set<string>, visited?: WeakMap<any, boolean>): Set<string>;
9
+ /**
10
+ * Creates a lazy deep-clone of an object.
11
+ * Shallow copy initially, structuredClone on first nested property access.
12
+ */
13
+ export declare function createLazyClone<T extends Record<string, any>>(source: T): T;
14
+ //# sourceMappingURL=state-diff.util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-diff.util.d.ts","sourceRoot":"","sources":["../../../../src/core/storage/utils/state-diff.util.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,OAAO,CA0B/C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,SAAK,EAAE,YAAY,GAAE,GAAG,CAAC,MAAM,CAAqB,EAAE,OAAO,wBAA8B,GAAG,GAAG,CAAC,MAAM,CAAC,CAkCzK;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAsB3E"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Deep equality check for two values.
3
+ */ function isEqual(a, b) {
4
+ if (a === b) return true;
5
+ if (a == null || b == null) return a === b;
6
+ const typeA = typeof a;
7
+ const typeB = typeof b;
8
+ if (typeA !== typeB) return false;
9
+ if (typeA !== 'object') return a === b;
10
+ if (a instanceof Date && b instanceof Date) {
11
+ return a.getTime() === b.getTime();
12
+ }
13
+ if (Array.isArray(a) && Array.isArray(b)) {
14
+ if (a.length !== b.length) return false;
15
+ for(let i = 0; i < a.length; i++){
16
+ if (!isEqual(a[i], b[i])) return false;
17
+ }
18
+ return true;
19
+ }
20
+ const keysA = Object.keys(a);
21
+ const keysB = Object.keys(b);
22
+ if (keysA.length !== keysB.length) return false;
23
+ return keysA.every((key)=>Object.prototype.hasOwnProperty.call(b, key) && isEqual(a[key], b[key]));
24
+ }
25
+ /**
26
+ * Finds all changed paths between two objects.
27
+ */ function findChangedPaths(oldObj, newObj, prefix = '', changedPaths = new Set(), visited = new WeakMap()) {
28
+ if (oldObj === newObj) return changedPaths;
29
+ if (typeof oldObj !== 'object' || typeof newObj !== 'object' || oldObj === null || newObj === null) {
30
+ if (oldObj !== newObj) {
31
+ changedPaths.add(prefix || '');
32
+ }
33
+ return changedPaths;
34
+ }
35
+ if (visited.has(oldObj)) return changedPaths;
36
+ visited.set(oldObj, true);
37
+ const allKeys = new Set([
38
+ ...Object.keys(oldObj || {}),
39
+ ...Object.keys(newObj || {})
40
+ ]);
41
+ for (const key of allKeys){
42
+ const oldValue = oldObj[key];
43
+ const newValue = newObj[key];
44
+ if (oldValue === newValue) continue;
45
+ const path = prefix ? `${prefix}.${key}` : key;
46
+ if (oldValue && newValue && typeof oldValue === 'object' && typeof newValue === 'object' && !Array.isArray(oldValue) && !Array.isArray(newValue)) {
47
+ findChangedPaths(oldValue, newValue, path, changedPaths, visited);
48
+ } else if (Array.isArray(oldValue) && Array.isArray(newValue)) {
49
+ if (!isEqual(oldValue, newValue)) {
50
+ changedPaths.add(path);
51
+ }
52
+ } else if (!isEqual(oldValue, newValue)) {
53
+ changedPaths.add(path);
54
+ }
55
+ }
56
+ return changedPaths;
57
+ }
58
+ /**
59
+ * Creates a lazy deep-clone of an object.
60
+ * Shallow copy initially, structuredClone on first nested property access.
61
+ */ function createLazyClone(source) {
62
+ const cloned = new Set();
63
+ const shallow = {
64
+ ...source
65
+ };
66
+ return new Proxy(shallow, {
67
+ get (target, prop, receiver) {
68
+ if (typeof prop === 'string' && !cloned.has(prop)) {
69
+ const val = target[prop];
70
+ if (val !== null && typeof val === 'object') {
71
+ cloned.add(prop);
72
+ target[prop] = structuredClone(val);
73
+ }
74
+ }
75
+ return Reflect.get(target, prop, receiver);
76
+ },
77
+ set (target, prop, value) {
78
+ if (typeof prop === 'string') {
79
+ cloned.add(prop);
80
+ }
81
+ return Reflect.set(target, prop, value);
82
+ }
83
+ });
84
+ }
85
+
86
+ export { createLazyClone, findChangedPaths, isEqual };
87
+
88
+ //# sourceMappingURL=state-diff.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core/storage/utils/state-diff.util.js","sources":["../../../../src/core/storage/utils/state-diff.util.ts"],"sourcesContent":["/**\n * Deep equality check for two values.\n */\nexport function isEqual(a: any, b: any): boolean {\n if (a === b) return true\n if (a == null || b == null) return a === b\n\n const typeA = typeof a\n const typeB = typeof b\n if (typeA !== typeB) return false\n if (typeA !== 'object') return a === b\n\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime()\n }\n\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false\n for (let i = 0; i < a.length; i++) {\n if (!isEqual(a[i], b[i])) return false\n }\n return true\n }\n\n const keysA = Object.keys(a)\n const keysB = Object.keys(b)\n if (keysA.length !== keysB.length) return false\n\n return keysA.every((key) => Object.prototype.hasOwnProperty.call(b, key) && isEqual(a[key], b[key]))\n}\n\n/**\n * Finds all changed paths between two objects.\n */\nexport function findChangedPaths(oldObj: any, newObj: any, prefix = '', changedPaths: Set<string> = new Set<string>(), visited = new WeakMap<any, boolean>()): Set<string> {\n if (oldObj === newObj) return changedPaths\n\n if (typeof oldObj !== 'object' || typeof newObj !== 'object' || oldObj === null || newObj === null) {\n if (oldObj !== newObj) {\n changedPaths.add(prefix || '')\n }\n return changedPaths\n }\n\n if (visited.has(oldObj)) return changedPaths\n visited.set(oldObj, true)\n\n const allKeys = new Set([...Object.keys(oldObj || {}), ...Object.keys(newObj || {})])\n\n for (const key of allKeys) {\n const oldValue = oldObj[key]\n const newValue = newObj[key]\n if (oldValue === newValue) continue\n\n const path = prefix ? `${prefix}.${key}` : key\n\n if (oldValue && newValue && typeof oldValue === 'object' && typeof newValue === 'object' && !Array.isArray(oldValue) && !Array.isArray(newValue)) {\n findChangedPaths(oldValue, newValue, path, changedPaths, visited)\n } else if (Array.isArray(oldValue) && Array.isArray(newValue)) {\n if (!isEqual(oldValue, newValue)) {\n changedPaths.add(path)\n }\n } else if (!isEqual(oldValue, newValue)) {\n changedPaths.add(path)\n }\n }\n\n return changedPaths\n}\n\n/**\n * Creates a lazy deep-clone of an object.\n * Shallow copy initially, structuredClone on first nested property access.\n */\nexport function createLazyClone<T extends Record<string, any>>(source: T): T {\n const cloned = new Set<string>()\n const shallow = { ...source }\n\n return new Proxy(shallow, {\n get(target, prop, receiver) {\n if (typeof prop === 'string' && !cloned.has(prop)) {\n const val = target[prop as keyof typeof target]\n if (val !== null && typeof val === 'object') {\n cloned.add(prop)\n ;(target as any)[prop] = structuredClone(val)\n }\n }\n return Reflect.get(target, prop, receiver)\n },\n set(target, prop, value) {\n if (typeof prop === 'string') {\n cloned.add(prop)\n }\n return Reflect.set(target, prop, value)\n },\n }) as T\n}\n"],"names":["isEqual","a","b","typeA","typeB","Date","Array","i","keysA","Object","keysB","key","findChangedPaths","oldObj","newObj","prefix","changedPaths","Set","visited","WeakMap","allKeys","oldValue","newValue","path","createLazyClone","source","cloned","shallow","Proxy","target","prop","receiver","val","structuredClone","Reflect","value"],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { IndexedDBStorage } from '../adapters/indexed-DB.service';
2
+ import { LocalStorage } from '../adapters/local-storage.service';
3
+ import { MemoryStorage } from '../adapters/memory-storage.service';
4
+ import { IAsyncPluginExecutor, ISyncPluginExecutor } from '../modules/plugin/plugin.interface';
5
+ import { IAsyncStorage, IEventEmitter, ILogger, IndexedDBStorageConfig, IStorage, ISyncStorage, LocalStorageConfig, MemoryStorageConfig, UniversalStorageConfig } from '../storage.interface';
6
+ export declare class StorageFactory {
7
+ static createMemory<T extends Record<string, any>>(config: MemoryStorageConfig<T>, pluginExecutor?: ISyncPluginExecutor, eventEmitter?: IEventEmitter, logger?: ILogger): MemoryStorage<T>;
8
+ static createLocal<T extends Record<string, any>>(config: LocalStorageConfig<T>, pluginExecutor?: ISyncPluginExecutor, eventEmitter?: IEventEmitter, logger?: ILogger): LocalStorage<T>;
9
+ static createIndexedDB<T extends Record<string, any>>(config: IndexedDBStorageConfig<T>, pluginExecutor?: IAsyncPluginExecutor, eventEmitter?: IEventEmitter, logger?: ILogger): IndexedDBStorage<T>;
10
+ static create<T extends Record<string, any>>(config: UniversalStorageConfig<T> & {
11
+ type: 'memory';
12
+ }, pluginExecutor?: ISyncPluginExecutor, eventEmitter?: IEventEmitter, logger?: ILogger): ISyncStorage<T>;
13
+ static create<T extends Record<string, any>>(config: UniversalStorageConfig<T> & {
14
+ type: 'localStorage';
15
+ }, pluginExecutor?: ISyncPluginExecutor, eventEmitter?: IEventEmitter, logger?: ILogger): ISyncStorage<T>;
16
+ static create<T extends Record<string, any>>(config: UniversalStorageConfig<T> & {
17
+ type: 'indexedDB';
18
+ }, pluginExecutor?: IAsyncPluginExecutor, eventEmitter?: IEventEmitter, logger?: ILogger): IAsyncStorage<T>;
19
+ static create<T extends Record<string, any>>(config: UniversalStorageConfig<T>, pluginExecutor?: ISyncPluginExecutor | IAsyncPluginExecutor, eventEmitter?: IEventEmitter, logger?: ILogger): IStorage<T>;
20
+ }
21
+ //# sourceMappingURL=storage-factory.util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-factory.util.d.ts","sourceRoot":"","sources":["../../../../src/core/storage/utils/storage-factory.util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAA;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAA;AAClE,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAA;AAC9F,OAAO,EACL,aAAa,EACb,aAAa,EACb,OAAO,EACP,sBAAsB,EACtB,QAAQ,EACR,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,sBAAsB,CAAA;AAE7B,qBAAa,cAAc;IACzB,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC/C,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAC9B,cAAc,CAAC,EAAE,mBAAmB,EACpC,YAAY,CAAC,EAAE,aAAa,EAC5B,MAAM,CAAC,EAAE,OAAO,GACf,aAAa,CAAC,CAAC,CAAC;IAInB,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC9C,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAC7B,cAAc,CAAC,EAAE,mBAAmB,EACpC,YAAY,CAAC,EAAE,aAAa,EAC5B,MAAM,CAAC,EAAE,OAAO,GACf,YAAY,CAAC,CAAC,CAAC;IAIlB,MAAM,CAAC,eAAe,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAClD,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAC,EACjC,cAAc,CAAC,EAAE,oBAAoB,EACrC,YAAY,CAAC,EAAE,aAAa,EAC5B,MAAM,CAAC,EAAE,OAAO,GACf,gBAAgB,CAAC,CAAC,CAAC;IAMtB,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzC,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAAG;QAAE,IAAI,EAAE,QAAQ,CAAA;KAAE,EACtD,cAAc,CAAC,EAAE,mBAAmB,EACpC,YAAY,CAAC,EAAE,aAAa,EAC5B,MAAM,CAAC,EAAE,OAAO,GACf,YAAY,CAAC,CAAC,CAAC;IAElB,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzC,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAAG;QAAE,IAAI,EAAE,cAAc,CAAA;KAAE,EAC5D,cAAc,CAAC,EAAE,mBAAmB,EACpC,YAAY,CAAC,EAAE,aAAa,EAC5B,MAAM,CAAC,EAAE,OAAO,GACf,YAAY,CAAC,CAAC,CAAC;IAElB,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzC,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAC,GAAG;QAAE,IAAI,EAAE,WAAW,CAAA;KAAE,EACzD,cAAc,CAAC,EAAE,oBAAoB,EACrC,YAAY,CAAC,EAAE,aAAa,EAC5B,MAAM,CAAC,EAAE,OAAO,GACf,aAAa,CAAC,CAAC,CAAC;IAEnB,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzC,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAC,EACjC,cAAc,CAAC,EAAE,mBAAmB,GAAG,oBAAoB,EAC3D,YAAY,CAAC,EAAE,aAAa,EAC5B,MAAM,CAAC,EAAE,OAAO,GACf,QAAQ,CAAC,CAAC,CAAC;CAsBf"}
@@ -0,0 +1,40 @@
1
+ import { IndexedDBStorage } from "../adapters/indexed-DB.service.js";
2
+ import { LocalStorage } from "../adapters/local-storage.service.js";
3
+ import { MemoryStorage } from "../adapters/memory-storage.service.js";
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+ class StorageFactory {
12
+ static createMemory(config, pluginExecutor, eventEmitter, logger) {
13
+ return MemoryStorage.create(config, pluginExecutor, eventEmitter, logger);
14
+ }
15
+ static createLocal(config, pluginExecutor, eventEmitter, logger) {
16
+ return LocalStorage.create(config, pluginExecutor, eventEmitter, logger);
17
+ }
18
+ static createIndexedDB(config, pluginExecutor, eventEmitter, logger) {
19
+ return IndexedDBStorage.create(config, pluginExecutor, eventEmitter, logger);
20
+ }
21
+ // ─── Реализация ─────────────────────────────────────────────────────────────
22
+ static create(config, pluginExecutor, eventEmitter, logger) {
23
+ switch(config.type){
24
+ case 'memory':
25
+ return this.createMemory(config, pluginExecutor, eventEmitter, logger);
26
+ case 'localStorage':
27
+ return this.createLocal(config, pluginExecutor, eventEmitter, logger);
28
+ case 'indexedDB':
29
+ return this.createIndexedDB(config, pluginExecutor, eventEmitter, logger);
30
+ default:
31
+ {
32
+ throw new Error(`Unsupported storage type: ${config.type}`);
33
+ }
34
+ }
35
+ }
36
+ }
37
+
38
+ export { StorageFactory };
39
+
40
+ //# sourceMappingURL=storage-factory.util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core/storage/utils/storage-factory.util.js","sources":["../../../../src/core/storage/utils/storage-factory.util.ts"],"sourcesContent":["import { IndexedDBStorage } from '../adapters/indexed-DB.service'\nimport { LocalStorage } from '../adapters/local-storage.service'\nimport { MemoryStorage } from '../adapters/memory-storage.service'\nimport { IAsyncPluginExecutor, ISyncPluginExecutor } from '../modules/plugin/plugin.interface'\nimport {\n IAsyncStorage,\n IEventEmitter,\n ILogger,\n IndexedDBStorageConfig,\n IStorage,\n ISyncStorage,\n LocalStorageConfig,\n MemoryStorageConfig,\n UniversalStorageConfig,\n} from '../storage.interface'\n\nexport class StorageFactory {\n static createMemory<T extends Record<string, any>>(\n config: MemoryStorageConfig<T>,\n pluginExecutor?: ISyncPluginExecutor,\n eventEmitter?: IEventEmitter,\n logger?: ILogger,\n ): MemoryStorage<T> {\n return MemoryStorage.create<T>(config, pluginExecutor, eventEmitter, logger)\n }\n\n static createLocal<T extends Record<string, any>>(\n config: LocalStorageConfig<T>,\n pluginExecutor?: ISyncPluginExecutor,\n eventEmitter?: IEventEmitter,\n logger?: ILogger,\n ): LocalStorage<T> {\n return LocalStorage.create<T>(config, pluginExecutor, eventEmitter, logger)\n }\n\n static createIndexedDB<T extends Record<string, any>>(\n config: IndexedDBStorageConfig<T>,\n pluginExecutor?: IAsyncPluginExecutor,\n eventEmitter?: IEventEmitter,\n logger?: ILogger,\n ): IndexedDBStorage<T> {\n return IndexedDBStorage.create<T>(config, pluginExecutor, eventEmitter, logger)\n }\n\n // ─── Перегрузки для правильного вывода типов ────────────────────────────────\n\n static create<T extends Record<string, any>>(\n config: UniversalStorageConfig<T> & { type: 'memory' },\n pluginExecutor?: ISyncPluginExecutor,\n eventEmitter?: IEventEmitter,\n logger?: ILogger,\n ): ISyncStorage<T>\n\n static create<T extends Record<string, any>>(\n config: UniversalStorageConfig<T> & { type: 'localStorage' },\n pluginExecutor?: ISyncPluginExecutor,\n eventEmitter?: IEventEmitter,\n logger?: ILogger,\n ): ISyncStorage<T>\n\n static create<T extends Record<string, any>>(\n config: UniversalStorageConfig<T> & { type: 'indexedDB' },\n pluginExecutor?: IAsyncPluginExecutor,\n eventEmitter?: IEventEmitter,\n logger?: ILogger,\n ): IAsyncStorage<T>\n\n static create<T extends Record<string, any>>(\n config: UniversalStorageConfig<T>,\n pluginExecutor?: ISyncPluginExecutor | IAsyncPluginExecutor,\n eventEmitter?: IEventEmitter,\n logger?: ILogger,\n ): IStorage<T>\n\n // ─── Реализация ─────────────────────────────────────────────────────────────\n\n static create<T extends Record<string, any>>(\n config: UniversalStorageConfig<T>,\n pluginExecutor?: ISyncPluginExecutor | IAsyncPluginExecutor,\n eventEmitter?: IEventEmitter,\n logger?: ILogger,\n ): IStorage<T> {\n switch (config.type) {\n case 'memory':\n return this.createMemory<T>(config as MemoryStorageConfig<T>, pluginExecutor as ISyncPluginExecutor, eventEmitter, logger)\n case 'localStorage':\n return this.createLocal<T>(config as LocalStorageConfig<T>, pluginExecutor as ISyncPluginExecutor, eventEmitter, logger)\n case 'indexedDB':\n return this.createIndexedDB<T>(config as IndexedDBStorageConfig<T>, pluginExecutor as IAsyncPluginExecutor, eventEmitter, logger)\n default: {\n throw new Error(`Unsupported storage type: ${(config as any).type}`)\n }\n }\n }\n}\n"],"names":["IndexedDBStorage","LocalStorage","MemoryStorage","StorageFactory","config","pluginExecutor","eventEmitter","logger","Error"],"mappings":";;;;;;;AAAiE;AACD;AACE;AAc3D,MAAMG,cAAcA;IACzB,OAAO,aACLC,MAA8B,EAC9BC,cAAoC,EACpCC,YAA4B,EAC5BC,MAAgB,EACE;QAClB,OAAOL,oBAAoB,CAAIE,QAAQC,gBAAgBC,cAAcC;IACvE;IAEA,OAAO,YACLH,MAA6B,EAC7BC,cAAoC,EACpCC,YAA4B,EAC5BC,MAAgB,EACC;QACjB,OAAON,mBAAmB,CAAIG,QAAQC,gBAAgBC,cAAcC;IACtE;IAEA,OAAO,gBACLH,MAAiC,EACjCC,cAAqC,EACrCC,YAA4B,EAC5BC,MAAgB,EACK;QACrB,OAAOP,uBAAuB,CAAII,QAAQC,gBAAgBC,cAAcC;IAC1E;IAgCA,+EAA+E;IAE/E,OAAO,OACLH,MAAiC,EACjCC,cAA2D,EAC3DC,YAA4B,EAC5BC,MAAgB,EACH;QACb,OAAQH,OAAO,IAAI;YACjB,KAAK;gBACH,OAAO,IAAI,CAAC,YAAY,CAAIA,QAAkCC,gBAAuCC,cAAcC;YACrH,KAAK;gBACH,OAAO,IAAI,CAAC,WAAW,CAAIH,QAAiCC,gBAAuCC,cAAcC;YACnH,KAAK;gBACH,OAAO,IAAI,CAAC,eAAe,CAAIH,QAAqCC,gBAAwCC,cAAcC;YAC5H;gBAAS;oBACP,MAAM,IAAIC,MAAM,CAAC,0BAA0B,EAAGJ,OAAe,IAAI,EAAE;gBACrE;QACF;IACF;AACF"}
@@ -0,0 +1,11 @@
1
+ export declare class StorageKey {
2
+ private readonly value;
3
+ private readonly isRawKey;
4
+ constructor(value: string, isRawKey?: boolean);
5
+ toString(): string;
6
+ toJSON(): string;
7
+ valueOf(): string;
8
+ isUnparseable(): boolean;
9
+ }
10
+ export type StorageKeyType = string | StorageKey;
11
+ //# sourceMappingURL=storage-key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-key.d.ts","sourceRoot":"","sources":["../../../../src/core/storage/utils/storage-key.ts"],"names":[],"mappings":"AAAA,qBAAa,UAAU;IAEnB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBADR,KAAK,EAAE,MAAM,EACb,QAAQ,GAAE,OAAe;IAG5C,QAAQ,IAAI,MAAM;IAIlB,MAAM,IAAI,MAAM;IAIhB,OAAO,IAAI,MAAM;IAIjB,aAAa,IAAI,OAAO;CAGzB;AAGD,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,UAAU,CAAA"}
@@ -0,0 +1,24 @@
1
+ class StorageKey {
2
+ value;
3
+ isRawKey;
4
+ constructor(value, isRawKey = false){
5
+ this.value = value;
6
+ this.isRawKey = isRawKey;
7
+ }
8
+ toString() {
9
+ return this.value;
10
+ }
11
+ toJSON() {
12
+ return this.value;
13
+ }
14
+ valueOf() {
15
+ return this.value;
16
+ }
17
+ isUnparseable() {
18
+ return this.isRawKey;
19
+ }
20
+ }
21
+
22
+ export { StorageKey };
23
+
24
+ //# sourceMappingURL=storage-key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core/storage/utils/storage-key.js","sources":["../../../../src/core/storage/utils/storage-key.ts"],"sourcesContent":["export class StorageKey {\n constructor(\n private readonly value: string,\n private readonly isRawKey: boolean = false,\n ) {}\n\n toString(): string {\n return this.value\n }\n\n toJSON(): string {\n return this.value\n }\n\n valueOf(): string {\n return this.value\n }\n\n isUnparseable(): boolean {\n return this.isRawKey\n }\n}\n\n// Тип, который может быть либо строкой, либо StorageKey\nexport type StorageKeyType = string | StorageKey\n"],"names":["StorageKey","value","isRawKey"],"mappings":"AAAO,MAAMA,UAAUA;;;IACrB,YACmBC,KAAa,EACbC,WAAoB,KAAK,CAC1C;aAFiBD,QAAAA;aACAC,WAAAA;IAChB;IAEH,WAAmB;QACjB,OAAO,IAAI,CAAC,KAAK;IACnB;IAEA,SAAiB;QACf,OAAO,IAAI,CAAC,KAAK;IACnB;IAEA,UAAkB;QAChB,OAAO,IAAI,CAAC,KAAK;IACnB;IAEA,gBAAyB;QACvB,OAAO,IAAI,CAAC,QAAQ;IACtB;AACF"}