synapse-storage 3.0.19 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (351) hide show
  1. package/README.md +28 -168
  2. package/dist/_utils/chunk.util.d.ts +8 -0
  3. package/dist/_utils/chunk.util.d.ts.map +1 -0
  4. package/dist/_utils/chunk.util.js +21 -0
  5. package/dist/_utils/chunk.util.js.map +1 -0
  6. package/dist/_utils/deepMerge.util.d.ts +2 -0
  7. package/dist/_utils/deepMerge.util.d.ts.map +1 -0
  8. package/dist/_utils/deepMerge.util.js +19 -0
  9. package/dist/_utils/deepMerge.util.js.map +1 -0
  10. package/dist/_utils/error-handling.util.d.ts +50 -0
  11. package/dist/_utils/error-handling.util.d.ts.map +1 -0
  12. package/dist/_utils/error-handling.util.js +67 -0
  13. package/dist/_utils/error-handling.util.js.map +1 -0
  14. package/dist/_utils/flatMap.util.d.ts +10 -0
  15. package/dist/_utils/flatMap.util.d.ts.map +1 -0
  16. package/dist/_utils/flatMap.util.js +23 -0
  17. package/dist/_utils/flatMap.util.js.map +1 -0
  18. package/dist/_utils/index.d.ts +6 -0
  19. package/dist/_utils/index.d.ts.map +1 -0
  20. package/dist/_utils/index.js +13 -0
  21. package/dist/_utils/index.js.map +1 -0
  22. package/dist/_utils/logger-console.util.d.ts +9 -0
  23. package/dist/_utils/logger-console.util.d.ts.map +1 -0
  24. package/dist/_utils/logger-console.util.js +14 -0
  25. package/dist/_utils/logger-console.util.js.map +1 -0
  26. package/dist/api/api.module.d.ts +46 -0
  27. package/dist/api/api.module.d.ts.map +1 -0
  28. package/dist/api/api.module.js +121 -0
  29. package/dist/api/api.module.js.map +1 -0
  30. package/dist/api/components/endpoint.d.ts +57 -0
  31. package/dist/api/components/endpoint.d.ts.map +1 -0
  32. package/dist/api/components/endpoint.js +385 -0
  33. package/dist/api/components/endpoint.js.map +1 -0
  34. package/dist/api/components/query-storage.d.ts +100 -0
  35. package/dist/api/components/query-storage.d.ts.map +1 -0
  36. package/dist/api/components/query-storage.js +293 -0
  37. package/dist/api/components/query-storage.js.map +1 -0
  38. package/dist/api/example.d.ts +83 -0
  39. package/dist/api/example.d.ts.map +1 -0
  40. package/dist/api/example.js +90 -0
  41. package/dist/api/example.js.map +1 -0
  42. package/dist/api/index.d.ts +4 -0
  43. package/dist/api/index.d.ts.map +1 -0
  44. package/dist/api/index.js +11 -0
  45. package/dist/api/index.js.map +1 -0
  46. package/dist/api/types/api.interface.d.ts +126 -0
  47. package/dist/api/types/api.interface.d.ts.map +1 -0
  48. package/dist/api/types/api.interface.js +15 -0
  49. package/dist/api/types/api.interface.js.map +1 -0
  50. package/dist/api/types/endpoint.interface.d.ts +118 -0
  51. package/dist/api/types/endpoint.interface.d.ts.map +1 -0
  52. package/dist/api/types/endpoint.interface.js +6 -0
  53. package/dist/api/types/endpoint.interface.js.map +1 -0
  54. package/dist/api/types/query.interface.d.ts +85 -0
  55. package/dist/api/types/query.interface.d.ts.map +1 -0
  56. package/dist/api/types/query.interface.js +6 -0
  57. package/dist/api/types/query.interface.js.map +1 -0
  58. package/dist/api/utils/api-helpers.d.ts +22 -0
  59. package/dist/api/utils/api-helpers.d.ts.map +1 -0
  60. package/dist/api/utils/api-helpers.js +44 -0
  61. package/dist/api/utils/api-helpers.js.map +1 -0
  62. package/dist/api/utils/create-header-context.d.ts +10 -0
  63. package/dist/api/utils/create-header-context.d.ts.map +1 -0
  64. package/dist/api/utils/create-header-context.js +40 -0
  65. package/dist/api/utils/create-header-context.js.map +1 -0
  66. package/dist/api/utils/endpoint-headers.d.ts +23 -0
  67. package/dist/api/utils/endpoint-headers.d.ts.map +1 -0
  68. package/dist/api/utils/endpoint-headers.js +61 -0
  69. package/dist/api/utils/endpoint-headers.js.map +1 -0
  70. package/dist/api/utils/fetch-base-query.d.ts +9 -0
  71. package/dist/api/utils/fetch-base-query.d.ts.map +1 -0
  72. package/dist/api/utils/fetch-base-query.js +242 -0
  73. package/dist/api/utils/fetch-base-query.js.map +1 -0
  74. package/dist/api/utils/file-utils.d.ts +43 -0
  75. package/dist/api/utils/file-utils.d.ts.map +1 -0
  76. package/dist/api/utils/file-utils.js +102 -0
  77. package/dist/api/utils/file-utils.js.map +1 -0
  78. package/dist/api/utils/get-cacheable-headers.d.ts +8 -0
  79. package/dist/api/utils/get-cacheable-headers.d.ts.map +1 -0
  80. package/dist/api/utils/get-cacheable-headers.js +23 -0
  81. package/dist/api/utils/get-cacheable-headers.js.map +1 -0
  82. package/dist/core/index.d.ts +3 -0
  83. package/dist/core/index.d.ts.map +1 -0
  84. package/dist/core/index.js +7 -0
  85. package/dist/core/index.js.map +1 -0
  86. package/dist/core/selector/index.d.ts +3 -0
  87. package/dist/core/selector/index.d.ts.map +1 -0
  88. package/dist/core/selector/index.js +5 -0
  89. package/dist/core/selector/index.js.map +1 -0
  90. package/dist/{selector.interface-CA5y-kD_.d.ts → core/selector/selector.interface.d.ts} +41 -8
  91. package/dist/core/selector/selector.interface.d.ts.map +1 -0
  92. package/dist/core/selector/selector.interface.js +7 -0
  93. package/dist/core/selector/selector.interface.js.map +1 -0
  94. package/dist/core/selector/selector.module.d.ts +36 -0
  95. package/dist/core/selector/selector.module.d.ts.map +1 -0
  96. package/dist/core/selector/selector.module.js +412 -0
  97. package/dist/core/selector/selector.module.js.map +1 -0
  98. package/dist/core/storage/adapters/async-base-storage.service.d.ts +49 -0
  99. package/dist/core/storage/adapters/async-base-storage.service.d.ts.map +1 -0
  100. package/dist/core/storage/adapters/async-base-storage.service.js +505 -0
  101. package/dist/core/storage/adapters/async-base-storage.service.js.map +1 -0
  102. package/dist/core/storage/adapters/indexed-DB.service.d.ts +89 -0
  103. package/dist/core/storage/adapters/indexed-DB.service.d.ts.map +1 -0
  104. package/dist/core/storage/adapters/indexed-DB.service.js +596 -0
  105. package/dist/core/storage/adapters/indexed-DB.service.js.map +1 -0
  106. package/dist/core/storage/adapters/local-storage.service.d.ts +23 -0
  107. package/dist/core/storage/adapters/local-storage.service.d.ts.map +1 -0
  108. package/dist/core/storage/adapters/local-storage.service.js +111 -0
  109. package/dist/core/storage/adapters/local-storage.service.js.map +1 -0
  110. package/dist/core/storage/adapters/memory-storage.service.d.ts +24 -0
  111. package/dist/core/storage/adapters/memory-storage.service.d.ts.map +1 -0
  112. package/dist/core/storage/adapters/memory-storage.service.js +110 -0
  113. package/dist/core/storage/adapters/memory-storage.service.js.map +1 -0
  114. package/dist/core/storage/adapters/path.utils.d.ts +5 -0
  115. package/dist/core/storage/adapters/path.utils.d.ts.map +1 -0
  116. package/dist/core/storage/adapters/path.utils.js +42 -0
  117. package/dist/core/storage/adapters/path.utils.js.map +1 -0
  118. package/dist/core/storage/adapters/storage-core.d.ts +61 -0
  119. package/dist/core/storage/adapters/storage-core.d.ts.map +1 -0
  120. package/dist/core/storage/adapters/storage-core.js +221 -0
  121. package/dist/core/storage/adapters/storage-core.js.map +1 -0
  122. package/dist/core/storage/adapters/sync-base-storage.service.d.ts +56 -0
  123. package/dist/core/storage/adapters/sync-base-storage.service.d.ts.map +1 -0
  124. package/dist/core/storage/adapters/sync-base-storage.service.js +481 -0
  125. package/dist/core/storage/adapters/sync-base-storage.service.js.map +1 -0
  126. package/dist/core/storage/index.d.ts +16 -0
  127. package/dist/core/storage/index.d.ts.map +1 -0
  128. package/dist/core/storage/index.js +38 -0
  129. package/dist/core/storage/index.js.map +1 -0
  130. package/dist/core/storage/middlewares/broadcast.middleware.d.ts +9 -0
  131. package/dist/core/storage/middlewares/broadcast.middleware.d.ts.map +1 -0
  132. package/dist/core/storage/middlewares/broadcast.middleware.js +197 -0
  133. package/dist/core/storage/middlewares/broadcast.middleware.js.map +1 -0
  134. package/dist/core/storage/middlewares/index.d.ts +9 -0
  135. package/dist/core/storage/middlewares/index.d.ts.map +1 -0
  136. package/dist/core/storage/middlewares/index.js +17 -0
  137. package/dist/core/storage/middlewares/index.js.map +1 -0
  138. package/dist/core/storage/middlewares/storage-batching.middleware.d.ts +7 -0
  139. package/dist/core/storage/middlewares/storage-batching.middleware.d.ts.map +1 -0
  140. package/dist/core/storage/middlewares/storage-batching.middleware.js +108 -0
  141. package/dist/core/storage/middlewares/storage-batching.middleware.js.map +1 -0
  142. package/dist/core/storage/middlewares/storage-shallow-compare.middleware.d.ts +7 -0
  143. package/dist/core/storage/middlewares/storage-shallow-compare.middleware.d.ts.map +1 -0
  144. package/dist/core/storage/middlewares/storage-shallow-compare.middleware.js +43 -0
  145. package/dist/core/storage/middlewares/storage-shallow-compare.middleware.js.map +1 -0
  146. package/dist/core/storage/middlewares/sync-broadcast.middleware.d.ts +9 -0
  147. package/dist/core/storage/middlewares/sync-broadcast.middleware.d.ts.map +1 -0
  148. package/dist/core/storage/middlewares/sync-broadcast.middleware.js +177 -0
  149. package/dist/core/storage/middlewares/sync-broadcast.middleware.js.map +1 -0
  150. package/dist/core/storage/middlewares/sync-storage-batching.middleware.d.ts +6 -0
  151. package/dist/core/storage/middlewares/sync-storage-batching.middleware.d.ts.map +1 -0
  152. package/dist/core/storage/middlewares/sync-storage-batching.middleware.js +56 -0
  153. package/dist/core/storage/middlewares/sync-storage-batching.middleware.js.map +1 -0
  154. package/dist/core/storage/middlewares/sync-storage-shallow-compare.middleware.d.ts +7 -0
  155. package/dist/core/storage/middlewares/sync-storage-shallow-compare.middleware.d.ts.map +1 -0
  156. package/dist/core/storage/middlewares/sync-storage-shallow-compare.middleware.js +39 -0
  157. package/dist/core/storage/middlewares/sync-storage-shallow-compare.middleware.js.map +1 -0
  158. package/dist/core/storage/modules/plugin/plugin.interface.d.ts +101 -0
  159. package/dist/core/storage/modules/plugin/plugin.interface.d.ts.map +1 -0
  160. package/dist/core/storage/modules/plugin/plugin.interface.js +8 -0
  161. package/dist/core/storage/modules/plugin/plugin.interface.js.map +1 -0
  162. package/dist/core/storage/modules/plugin/plugin.service.d.ts +49 -0
  163. package/dist/core/storage/modules/plugin/plugin.service.d.ts.map +1 -0
  164. package/dist/core/storage/modules/plugin/plugin.service.js +406 -0
  165. package/dist/core/storage/modules/plugin/plugin.service.js.map +1 -0
  166. package/dist/core/storage/modules/singleton/mixin.util.d.ts +6 -0
  167. package/dist/core/storage/modules/singleton/mixin.util.d.ts.map +1 -0
  168. package/dist/core/storage/modules/singleton/mixin.util.js +30 -0
  169. package/dist/core/storage/modules/singleton/mixin.util.js.map +1 -0
  170. package/dist/core/storage/modules/singleton/models.d.ts +143 -0
  171. package/dist/core/storage/modules/singleton/models.d.ts.map +1 -0
  172. package/dist/core/storage/modules/singleton/models.js +60 -0
  173. package/dist/core/storage/modules/singleton/models.js.map +1 -0
  174. package/dist/core/storage/modules/singleton/singleton.util.d.ts +36 -0
  175. package/dist/core/storage/modules/singleton/singleton.util.d.ts.map +1 -0
  176. package/dist/core/storage/modules/singleton/singleton.util.js +216 -0
  177. package/dist/core/storage/modules/singleton/singleton.util.js.map +1 -0
  178. package/dist/core/storage/storage.interface.d.ts +168 -0
  179. package/dist/core/storage/storage.interface.d.ts.map +1 -0
  180. package/dist/core/storage/storage.interface.js +23 -0
  181. package/dist/core/storage/storage.interface.js.map +1 -0
  182. package/dist/core/storage/utils/broadcast.util.d.ts +49 -0
  183. package/dist/core/storage/utils/broadcast.util.d.ts.map +1 -0
  184. package/dist/core/storage/utils/broadcast.util.js +141 -0
  185. package/dist/core/storage/utils/broadcast.util.js.map +1 -0
  186. package/dist/core/storage/utils/cache.util.d.ts +33 -0
  187. package/dist/core/storage/utils/cache.util.d.ts.map +1 -0
  188. package/dist/core/storage/utils/cache.util.js +54 -0
  189. package/dist/core/storage/utils/cache.util.js.map +1 -0
  190. package/dist/core/storage/utils/middleware-module.d.ts +94 -0
  191. package/dist/core/storage/utils/middleware-module.d.ts.map +1 -0
  192. package/dist/core/storage/utils/middleware-module.js +258 -0
  193. package/dist/core/storage/utils/middleware-module.js.map +1 -0
  194. package/dist/core/storage/utils/path-selector.util.d.ts +15 -0
  195. package/dist/core/storage/utils/path-selector.util.d.ts.map +1 -0
  196. package/dist/core/storage/utils/path-selector.util.js +58 -0
  197. package/dist/core/storage/utils/path-selector.util.js.map +1 -0
  198. package/dist/core/storage/utils/state-diff.util.d.ts +14 -0
  199. package/dist/core/storage/utils/state-diff.util.d.ts.map +1 -0
  200. package/dist/core/storage/utils/state-diff.util.js +88 -0
  201. package/dist/core/storage/utils/state-diff.util.js.map +1 -0
  202. package/dist/core/storage/utils/storage-factory.util.d.ts +21 -0
  203. package/dist/core/storage/utils/storage-factory.util.d.ts.map +1 -0
  204. package/dist/core/storage/utils/storage-factory.util.js +40 -0
  205. package/dist/core/storage/utils/storage-factory.util.js.map +1 -0
  206. package/dist/core/storage/utils/storage-key.d.ts +11 -0
  207. package/dist/core/storage/utils/storage-key.d.ts.map +1 -0
  208. package/dist/core/storage/utils/storage-key.js +24 -0
  209. package/dist/core/storage/utils/storage-key.js.map +1 -0
  210. package/dist/core/storage/utils/storage.utils.d.ts +17 -0
  211. package/dist/core/storage/utils/storage.utils.d.ts.map +1 -0
  212. package/dist/core/storage/utils/storage.utils.js +57 -0
  213. package/dist/core/storage/utils/storage.utils.js.map +1 -0
  214. package/dist/index.d.ts +10 -12
  215. package/dist/index.d.ts.map +1 -0
  216. package/dist/index.js +17 -1
  217. package/dist/index.js.map +1 -0
  218. package/dist/react/hooks/index.d.ts +5 -0
  219. package/dist/react/hooks/index.d.ts.map +1 -0
  220. package/dist/react/hooks/index.js +11 -0
  221. package/dist/react/hooks/index.js.map +1 -0
  222. package/dist/react/hooks/useCreateStorage.d.ts +39 -0
  223. package/dist/react/hooks/useCreateStorage.d.ts.map +1 -0
  224. package/dist/react/hooks/useCreateStorage.js +137 -0
  225. package/dist/react/hooks/useCreateStorage.js.map +1 -0
  226. package/dist/react/hooks/useSelector.d.ts +21 -0
  227. package/dist/react/hooks/useSelector.d.ts.map +1 -0
  228. package/dist/react/hooks/useSelector.js +56 -0
  229. package/dist/react/hooks/useSelector.js.map +1 -0
  230. package/dist/react/hooks/useStorage.d.ts +39 -0
  231. package/dist/react/hooks/useStorage.d.ts.map +1 -0
  232. package/dist/react/hooks/useStorage.js +78 -0
  233. package/dist/react/hooks/useStorage.js.map +1 -0
  234. package/dist/react/hooks/useStorageSubscribe.d.ts +16 -0
  235. package/dist/react/hooks/useStorageSubscribe.d.ts.map +1 -0
  236. package/dist/react/hooks/useStorageSubscribe.js +55 -0
  237. package/dist/react/hooks/useStorageSubscribe.js.map +1 -0
  238. package/dist/react/index.d.ts +3 -0
  239. package/dist/react/index.d.ts.map +1 -0
  240. package/dist/react/index.js +7 -0
  241. package/dist/react/index.js.map +1 -0
  242. package/dist/react/utils/awaitSynapse.d.ts +34 -0
  243. package/dist/react/utils/awaitSynapse.d.ts.map +1 -0
  244. package/dist/react/utils/awaitSynapse.js +87 -0
  245. package/dist/react/utils/awaitSynapse.js.map +1 -0
  246. package/dist/react/utils/createSynapseCtx.d.ts +33 -0
  247. package/dist/react/utils/createSynapseCtx.d.ts.map +1 -0
  248. package/dist/react/utils/createSynapseCtx.js +139 -0
  249. package/dist/react/utils/createSynapseCtx.js.map +1 -0
  250. package/dist/react/utils/index.d.ts +3 -0
  251. package/dist/react/utils/index.d.ts.map +1 -0
  252. package/dist/react/utils/index.js +9 -0
  253. package/dist/react/utils/index.js.map +1 -0
  254. package/dist/reactive/dispatcher/dispatcher.module.d.ts +216 -0
  255. package/dist/reactive/dispatcher/dispatcher.module.d.ts.map +1 -0
  256. package/dist/reactive/dispatcher/dispatcher.module.js +384 -0
  257. package/dist/reactive/dispatcher/dispatcher.module.js.map +1 -0
  258. package/dist/reactive/dispatcher/index.d.ts +4 -0
  259. package/dist/reactive/dispatcher/index.d.ts.map +1 -0
  260. package/dist/reactive/dispatcher/index.js +9 -0
  261. package/dist/reactive/dispatcher/index.js.map +1 -0
  262. package/dist/reactive/dispatcher/middlewares/index.d.ts +2 -0
  263. package/dist/reactive/dispatcher/middlewares/index.d.ts.map +1 -0
  264. package/dist/reactive/dispatcher/middlewares/index.js +5 -0
  265. package/dist/reactive/dispatcher/middlewares/index.js.map +1 -0
  266. package/dist/reactive/dispatcher/middlewares/logger.middleware.d.ts +37 -0
  267. package/dist/reactive/dispatcher/middlewares/logger.middleware.d.ts.map +1 -0
  268. package/dist/reactive/dispatcher/middlewares/logger.middleware.js +188 -0
  269. package/dist/reactive/dispatcher/middlewares/logger.middleware.js.map +1 -0
  270. package/dist/reactive/dispatcher/standalone.d.ts +112 -0
  271. package/dist/reactive/dispatcher/standalone.d.ts.map +1 -0
  272. package/dist/reactive/dispatcher/standalone.js +142 -0
  273. package/dist/reactive/dispatcher/standalone.js.map +1 -0
  274. package/dist/reactive/effects/effects.module.d.ts +225 -0
  275. package/dist/reactive/effects/effects.module.d.ts.map +1 -0
  276. package/dist/reactive/effects/effects.module.js +356 -0
  277. package/dist/reactive/effects/effects.module.js.map +1 -0
  278. package/dist/reactive/effects/index.d.ts +4 -0
  279. package/dist/reactive/effects/index.d.ts.map +1 -0
  280. package/dist/reactive/effects/index.js +11 -0
  281. package/dist/reactive/effects/index.js.map +1 -0
  282. package/dist/reactive/effects/utils/chunkRequestConsistent.d.ts +12 -0
  283. package/dist/reactive/effects/utils/chunkRequestConsistent.d.ts.map +1 -0
  284. package/dist/reactive/effects/utils/chunkRequestConsistent.js +25 -0
  285. package/dist/reactive/effects/utils/chunkRequestConsistent.js.map +1 -0
  286. package/dist/reactive/effects/utils/chunkRequestParallel.d.ts +12 -0
  287. package/dist/reactive/effects/utils/chunkRequestParallel.d.ts.map +1 -0
  288. package/dist/reactive/effects/utils/chunkRequestParallel.js +22 -0
  289. package/dist/reactive/effects/utils/chunkRequestParallel.js.map +1 -0
  290. package/dist/reactive/effects/utils/fromRequest.d.ts +40 -0
  291. package/dist/reactive/effects/utils/fromRequest.d.ts.map +1 -0
  292. package/dist/reactive/effects/utils/fromRequest.js +64 -0
  293. package/dist/reactive/effects/utils/fromRequest.js.map +1 -0
  294. package/dist/reactive/effects/utils/index.d.ts +5 -0
  295. package/dist/reactive/effects/utils/index.d.ts.map +1 -0
  296. package/dist/reactive/effects/utils/index.js +11 -0
  297. package/dist/reactive/effects/utils/index.js.map +1 -0
  298. package/dist/reactive/effects/utils/toObservable.d.ts +23 -0
  299. package/dist/reactive/effects/utils/toObservable.d.ts.map +1 -0
  300. package/dist/reactive/effects/utils/toObservable.js +39 -0
  301. package/dist/reactive/effects/utils/toObservable.js.map +1 -0
  302. package/dist/reactive/index.d.ts +3 -0
  303. package/dist/reactive/index.d.ts.map +1 -0
  304. package/dist/reactive/index.js +7 -0
  305. package/dist/reactive/index.js.map +1 -0
  306. package/dist/utils/createEventBus.d.ts +87 -0
  307. package/dist/utils/createEventBus.d.ts.map +1 -0
  308. package/dist/utils/createEventBus.js +215 -0
  309. package/dist/utils/createEventBus.js.map +1 -0
  310. package/dist/utils/createSynapse/createSynapse.d.ts +9 -0
  311. package/dist/utils/createSynapse/createSynapse.d.ts.map +1 -0
  312. package/dist/utils/createSynapse/createSynapse.js +103 -0
  313. package/dist/utils/createSynapse/createSynapse.js.map +1 -0
  314. package/dist/utils/createSynapse/index.d.ts +3 -0
  315. package/dist/utils/createSynapse/index.d.ts.map +1 -0
  316. package/dist/utils/createSynapse/index.js +6 -0
  317. package/dist/utils/createSynapse/index.js.map +1 -0
  318. package/dist/utils/createSynapse/types.d.ts +93 -0
  319. package/dist/utils/createSynapse/types.d.ts.map +1 -0
  320. package/dist/utils/createSynapse/types.js +6 -0
  321. package/dist/utils/createSynapse/types.js.map +1 -0
  322. package/dist/utils/createSynapse/validate.d.ts +2 -0
  323. package/dist/utils/createSynapse/validate.d.ts.map +1 -0
  324. package/dist/utils/createSynapse/validate.js +76 -0
  325. package/dist/utils/createSynapse/validate.js.map +1 -0
  326. package/dist/utils/createSynapse/waitForDependencies.d.ts +3 -0
  327. package/dist/utils/createSynapse/waitForDependencies.d.ts.map +1 -0
  328. package/dist/utils/createSynapse/waitForDependencies.js +40 -0
  329. package/dist/utils/createSynapse/waitForDependencies.js.map +1 -0
  330. package/dist/utils/createSynapseAwaiter.d.ts +46 -0
  331. package/dist/utils/createSynapseAwaiter.d.ts.map +1 -0
  332. package/dist/utils/createSynapseAwaiter.js +102 -0
  333. package/dist/utils/createSynapseAwaiter.js.map +1 -0
  334. package/dist/utils/index.d.ts +4 -0
  335. package/dist/utils/index.d.ts.map +1 -0
  336. package/dist/utils/index.js +12 -0
  337. package/dist/utils/index.js.map +1 -0
  338. package/package.json +17 -21
  339. package/dist/api.d.ts +0 -365
  340. package/dist/api.js +0 -1
  341. package/dist/core.d.ts +0 -106
  342. package/dist/core.js +0 -1
  343. package/dist/createSynapse-vkfKjRob.d.ts +0 -97
  344. package/dist/dispatcher.module-BOsMHbD5.d.ts +0 -360
  345. package/dist/react.d.ts +0 -119
  346. package/dist/react.js +0 -1
  347. package/dist/reactive.d.ts +0 -35
  348. package/dist/reactive.js +0 -1
  349. package/dist/storage.interface-BA_ktyDz.d.ts +0 -591
  350. package/dist/utils.d.ts +0 -139
  351. package/dist/utils.js +0 -1
@@ -0,0 +1,89 @@
1
+ import { IAsyncPluginExecutor } from '../modules/plugin/plugin.interface';
2
+ import { ConfigureAsyncMiddlewares, IEventEmitter, ILogger, IndexedDBStorageConfig, StorageType } from '../storage.interface';
3
+ import { StorageKey, StorageKeyType } from '../utils/storage-key';
4
+ import { AsyncBaseStorage } from './async-base-storage.service';
5
+ export interface IndexedDBConfig {
6
+ dbName?: string;
7
+ }
8
+ export declare class IndexedDBManager {
9
+ private readonly dbName;
10
+ private readonly logger?;
11
+ private static instances;
12
+ private db;
13
+ private initPromise;
14
+ private storeNames;
15
+ private dbVersion;
16
+ private constructor();
17
+ static getInstance(dbName: string, dbVersion?: number, logger?: ILogger): IndexedDBManager;
18
+ initialize(): Promise<IDBDatabase>;
19
+ private autoDetectAndOpen;
20
+ private detectCurrentVersion;
21
+ ensureStoreExists(storeName: string): Promise<IDBDatabase>;
22
+ private openDatabase;
23
+ closeDatabase(): void;
24
+ deleteDatabase(): Promise<void>;
25
+ ensureStoresExist(storeNames: string[]): Promise<IDBDatabase>;
26
+ getCurrentVersion(): number;
27
+ }
28
+ export declare class IndexedDBStorage<T extends Record<string, any>> extends AsyncBaseStorage<T> {
29
+ protected static readonly STORAGE_TYPE: StorageType;
30
+ readonly type: StorageType;
31
+ private readonly DB_NAME;
32
+ private readonly STORE_NAME;
33
+ private dbManager;
34
+ constructor(config: IndexedDBStorageConfig<T>, pluginExecutor?: IAsyncPluginExecutor, eventEmitter?: IEventEmitter, logger?: ILogger);
35
+ static create<T extends Record<string, any>>(config: IndexedDBStorageConfig, pluginExecutor?: IAsyncPluginExecutor, eventEmitter?: IEventEmitter, logger?: ILogger): IndexedDBStorage<T>;
36
+ protected doInitialize(): Promise<this>;
37
+ static createStorages<S extends Record<string, any>>(dbName: string, configs: {
38
+ [K in keyof S]: {
39
+ name: string;
40
+ initialState?: S[K];
41
+ middlewares?: ConfigureAsyncMiddlewares;
42
+ pluginExecutor?: IAsyncPluginExecutor;
43
+ eventEmitter?: IEventEmitter;
44
+ };
45
+ }, logger?: ILogger): Promise<{
46
+ [K in keyof S]: IndexedDBStorage<S[K]>;
47
+ }>;
48
+ /**
49
+ * Выполняет операцию в рамках IDB-транзакции.
50
+ * Обёртка для низкоуровневого IDB transaction API.
51
+ *
52
+ * @param mode - Режим транзакции ('readonly' | 'readwrite')
53
+ * @param fn - Callback, получающий IDBObjectStore. Возвращает результат операции.
54
+ * @returns Promise с результатом callback-а
55
+ */
56
+ transaction<R>(mode: IDBTransactionMode, fn: (store: IDBObjectStore) => IDBRequest<R> | R): Promise<R>;
57
+ /**
58
+ * Текущая версия базы данных.
59
+ */
60
+ get dbVersion(): number;
61
+ /**
62
+ * Имя базы данных.
63
+ */
64
+ get dbName(): string;
65
+ /**
66
+ * Имя object store в IndexedDB.
67
+ */
68
+ get storeName(): string;
69
+ private getTransaction;
70
+ private getObjectStore;
71
+ protected doGet(key: StorageKeyType): Promise<any>;
72
+ protected doSet(key: StorageKeyType, value: any): Promise<void>;
73
+ private putValueInStore;
74
+ protected doUpdate(updates: Array<{
75
+ key: string | StorageKey;
76
+ value: any;
77
+ }>): Promise<void>;
78
+ protected doDelete(key: StorageKeyType): Promise<boolean>;
79
+ protected doClear(): Promise<void>;
80
+ protected doKeys(): Promise<string[]>;
81
+ protected doHas(key: StorageKeyType): Promise<boolean>;
82
+ /**
83
+ * Override performCleanup: persistent storage should NOT clear data on destroy.
84
+ * Only clean up middleware and runtime resources, not persisted data.
85
+ */
86
+ protected performCleanup(): Promise<void>;
87
+ protected doDestroy(): Promise<void>;
88
+ }
89
+ //# sourceMappingURL=indexed-DB.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexed-DB.service.d.ts","sourceRoot":"","sources":["../../../../src/core/storage/adapters/indexed-DB.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,596 @@
1
+ import { SingletonMixin } from "../modules/singleton/mixin.util.js";
2
+ import { StorageKey } from "../utils/storage-key.js";
3
+ import { AsyncBaseStorage } from "./async-base-storage.service.js";
4
+ import { getValueByPath, parsePath, setValueByPath } from "./path.utils.js";
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+ // Управляет соединением с базой данных
15
+ class IndexedDBManager {
16
+ dbName;
17
+ logger;
18
+ static instances = new Map();
19
+ db = null;
20
+ initPromise = null;
21
+ storeNames = new Set();
22
+ dbVersion;
23
+ constructor(dbName, dbVersion, logger){
24
+ this.dbName = dbName;
25
+ this.logger = logger;
26
+ this.dbVersion = dbVersion;
27
+ }
28
+ static getInstance(dbName, dbVersion = 1, logger) {
29
+ if (!IndexedDBManager.instances.has(dbName)) {
30
+ IndexedDBManager.instances.set(dbName, new IndexedDBManager(dbName, dbVersion, logger));
31
+ }
32
+ const instance = IndexedDBManager.instances.get(dbName);
33
+ // Update version if higher version is requested
34
+ if (dbVersion > instance.dbVersion) {
35
+ instance.dbVersion = dbVersion;
36
+ }
37
+ return instance;
38
+ }
39
+ async initialize() {
40
+ if (this.db) {
41
+ return this.db;
42
+ }
43
+ if (!this.initPromise) {
44
+ this.initPromise = this.autoDetectAndOpen();
45
+ }
46
+ return this.initPromise;
47
+ }
48
+ async autoDetectAndOpen() {
49
+ // Auto-detect the current DB version to avoid VersionError
50
+ const currentVersion = await this.detectCurrentVersion();
51
+ if (currentVersion > this.dbVersion) {
52
+ this.logger?.debug(`Auto-detected higher DB version: ${currentVersion} (requested: ${this.dbVersion})`);
53
+ this.dbVersion = currentVersion;
54
+ }
55
+ return this.openDatabase();
56
+ }
57
+ detectCurrentVersion() {
58
+ return new Promise((resolve)=>{
59
+ try {
60
+ const request = indexedDB.open(this.dbName);
61
+ request.onsuccess = ()=>{
62
+ const version = request.result.version;
63
+ request.result.close();
64
+ resolve(version);
65
+ };
66
+ request.onerror = ()=>resolve(0);
67
+ } catch {
68
+ resolve(0);
69
+ }
70
+ });
71
+ }
72
+ async ensureStoreExists(storeName) {
73
+ await this.initialize();
74
+ if (this.db.objectStoreNames.contains(storeName)) {
75
+ this.storeNames.add(storeName);
76
+ return this.db;
77
+ }
78
+ this.logger?.debug(`Store "${storeName}" not found, upgrading database`, {
79
+ dbName: this.dbName,
80
+ currentStores: Array.from(this.db.objectStoreNames)
81
+ });
82
+ this.db.close();
83
+ this.db = null;
84
+ this.dbVersion++;
85
+ this.initPromise = this.openDatabase([
86
+ storeName
87
+ ]);
88
+ const newDb = await this.initPromise;
89
+ this.storeNames.add(storeName);
90
+ return newDb;
91
+ }
92
+ async openDatabase(newStores = []) {
93
+ return new Promise((resolve, reject)=>{
94
+ this.logger?.debug(`Opening database "${this.dbName}" with version ${this.dbVersion}`);
95
+ const request = indexedDB.open(this.dbName, this.dbVersion);
96
+ request.onerror = ()=>{
97
+ this.logger?.error(`Failed to open database "${this.dbName}"`, {
98
+ error: request.error
99
+ });
100
+ reject(request.error);
101
+ };
102
+ request.onblocked = ()=>{
103
+ this.logger?.warn(`Database "${this.dbName}" upgrade blocked by another connection. Close other tabs or connections.`);
104
+ reject(new Error(`Database "${this.dbName}" upgrade blocked — close other tabs using this database`));
105
+ };
106
+ request.onsuccess = ()=>{
107
+ this.db = request.result;
108
+ // Auto-close when another connection requests a version upgrade
109
+ this.db.onversionchange = ()=>{
110
+ this.db?.close();
111
+ this.db = null;
112
+ this.initPromise = null;
113
+ };
114
+ // Add existing stores to our set
115
+ for(let i = 0; i < this.db.objectStoreNames.length; i++){
116
+ this.storeNames.add(this.db.objectStoreNames[i]);
117
+ }
118
+ this.logger?.debug(`Database "${this.dbName}" opened successfully`, {
119
+ version: this.db.version,
120
+ stores: Array.from(this.db.objectStoreNames)
121
+ });
122
+ resolve(this.db);
123
+ };
124
+ request.onupgradeneeded = (event)=>{
125
+ const db = event.target.result;
126
+ this.logger?.debug(`Upgrading database "${this.dbName}" to version ${this.dbVersion}`);
127
+ // Create new stores that don't exist yet
128
+ for (const storeName of newStores){
129
+ if (!db.objectStoreNames.contains(storeName)) {
130
+ this.logger?.debug(`Creating store "${storeName}"`);
131
+ db.createObjectStore(storeName);
132
+ }
133
+ }
134
+ };
135
+ });
136
+ }
137
+ closeDatabase() {
138
+ if (this.db) {
139
+ this.db.close();
140
+ this.db = null;
141
+ this.initPromise = null;
142
+ }
143
+ }
144
+ async deleteDatabase() {
145
+ this.closeDatabase();
146
+ return new Promise((resolve, reject)=>{
147
+ const request = indexedDB.deleteDatabase(this.dbName);
148
+ request.onsuccess = ()=>{
149
+ this.logger?.debug(`Database "${this.dbName}" deleted successfully`);
150
+ IndexedDBManager.instances.delete(this.dbName);
151
+ this.storeNames.clear();
152
+ resolve();
153
+ };
154
+ request.onerror = ()=>{
155
+ this.logger?.error(`Failed to delete database "${this.dbName}"`, {
156
+ error: request.error
157
+ });
158
+ reject(request.error);
159
+ };
160
+ });
161
+ }
162
+ async ensureStoresExist(storeNames) {
163
+ // Сначала инициализируем базу
164
+ await this.initialize();
165
+ // Проверяем, какие хранилища уже существуют
166
+ const missingStores = storeNames.filter((name)=>!this.db.objectStoreNames.contains(name));
167
+ // Если все хранилища уже существуют, просто возвращаем базу
168
+ if (missingStores.length === 0) {
169
+ return this.db;
170
+ }
171
+ // Иначе нам нужно обновить базу для создания новых хранилищ
172
+ this.logger?.debug(`Создание недостающих хранилищ: ${missingStores.join(', ')}`, {
173
+ dbName: this.dbName,
174
+ currentStores: Array.from(this.db.objectStoreNames)
175
+ });
176
+ // Закрываем текущее соединение
177
+ this.db.close();
178
+ this.db = null;
179
+ // Увеличиваем версию один раз для всех новых хранилищ
180
+ this.dbVersion++;
181
+ this.initPromise = this.openDatabase(missingStores);
182
+ return this.initPromise;
183
+ }
184
+ // Метод для получения текущей версии
185
+ getCurrentVersion() {
186
+ return this.dbVersion;
187
+ }
188
+ }
189
+ class IndexedDBStorage extends AsyncBaseStorage {
190
+ static STORAGE_TYPE = 'indexedDB';
191
+ type = 'indexedDB';
192
+ DB_NAME;
193
+ STORE_NAME;
194
+ dbManager;
195
+ constructor(config, pluginExecutor, eventEmitter, logger){
196
+ super(config, pluginExecutor, eventEmitter, logger);
197
+ this.DB_NAME = config.options?.dbName || 'app_storage';
198
+ this.STORE_NAME = config.name;
199
+ // Get database manager instance (version is auto-detected internally)
200
+ this.dbManager = IndexedDBManager.getInstance(this.DB_NAME, 1, logger);
201
+ }
202
+ static create(config, pluginExecutor, eventEmitter, logger) {
203
+ return SingletonMixin.handleSingletonCreation(config, this.STORAGE_TYPE, (finalConfig)=>new IndexedDBStorage(finalConfig, pluginExecutor, eventEmitter, logger), logger);
204
+ }
205
+ async doInitialize() {
206
+ try {
207
+ this.logger?.debug(`Initializing IndexedDB storage "${this.STORE_NAME}"`);
208
+ // Создаем store в базе данных
209
+ await this.dbManager.ensureStoreExists(this.STORE_NAME);
210
+ // Проверяем, что хранилище доступно
211
+ const db = await this.dbManager.initialize();
212
+ if (!db.objectStoreNames.contains(this.STORE_NAME)) {
213
+ throw new Error(`Store "${this.STORE_NAME}" not found after initialization`);
214
+ }
215
+ // Инициализируем middleware
216
+ this.initializeMiddlewares();
217
+ // Инициализируем с middleware
218
+ await this.initializeWithMiddlewares();
219
+ this.logger?.debug(`IndexedDB storage "${this.STORE_NAME}" initialized successfully`);
220
+ return this;
221
+ } catch (error) {
222
+ this.logger?.error(`Ошибка инициализации IndexedDB "${this.name}"`, {
223
+ error
224
+ });
225
+ throw error;
226
+ }
227
+ }
228
+ static async createStorages(dbName, configs, logger) {
229
+ // Используем единый IndexedDBManager (версия определяется автоматически)
230
+ const dbManager = IndexedDBManager.getInstance(dbName, 1, logger);
231
+ // Получаем имена всех хранилищ, которые нужно создать
232
+ const storeNames = Object.values(configs).map((config)=>config.name);
233
+ // Предварительно создаем все хранилища в рамках одной операции
234
+ await dbManager.ensureStoresExist(storeNames);
235
+ // Создаем и инициализируем все хранилища
236
+ const result = {};
237
+ for (const [key, config] of Object.entries(configs)){
238
+ const storage = new IndexedDBStorage({
239
+ ...config,
240
+ options: {
241
+ dbName
242
+ }
243
+ }, config.pluginExecutor, config.eventEmitter, logger);
244
+ // Инициализируем хранилище
245
+ result[key] = await storage.initialize();
246
+ }
247
+ return result;
248
+ }
249
+ // ─── IndexedDB-specific API ────────────────────────────────────────────────
250
+ /**
251
+ * Выполняет операцию в рамках IDB-транзакции.
252
+ * Обёртка для низкоуровневого IDB transaction API.
253
+ *
254
+ * @param mode - Режим транзакции ('readonly' | 'readwrite')
255
+ * @param fn - Callback, получающий IDBObjectStore. Возвращает результат операции.
256
+ * @returns Promise с результатом callback-а
257
+ */ async transaction(mode, fn) {
258
+ const store = await this.getObjectStore(mode);
259
+ return new Promise((resolve, reject)=>{
260
+ const tx = store.transaction;
261
+ tx.onerror = ()=>reject(tx.error);
262
+ tx.onabort = ()=>reject(tx.error || new Error('Transaction aborted'));
263
+ try {
264
+ const result = fn(store);
265
+ if (result instanceof IDBRequest) {
266
+ result.onsuccess = ()=>resolve(result.result);
267
+ result.onerror = ()=>reject(result.error);
268
+ } else {
269
+ // Sync result — resolve when transaction completes
270
+ tx.oncomplete = ()=>resolve(result);
271
+ }
272
+ } catch (error) {
273
+ reject(error);
274
+ }
275
+ });
276
+ }
277
+ /**
278
+ * Текущая версия базы данных.
279
+ */ get dbVersion() {
280
+ return this.dbManager.getCurrentVersion();
281
+ }
282
+ /**
283
+ * Имя базы данных.
284
+ */ get dbName() {
285
+ return this.DB_NAME;
286
+ }
287
+ /**
288
+ * Имя object store в IndexedDB.
289
+ */ get storeName() {
290
+ return this.STORE_NAME;
291
+ }
292
+ // ─── Private helpers ───────────────────────────────────────────────────────
293
+ async getTransaction(mode = 'readonly') {
294
+ try {
295
+ // Ensure database is open and our store exists
296
+ const db = await this.dbManager.ensureStoreExists(this.STORE_NAME);
297
+ // Проверяем существование хранилища перед созданием транзакции
298
+ if (!db.objectStoreNames.contains(this.STORE_NAME)) {
299
+ // Попытка исправить проблему - закрываем и снова открываем
300
+ this.logger?.warn(`Object store "${this.STORE_NAME}" not found, attempting to repair`);
301
+ db.close();
302
+ this.dbManager.closeDatabase();
303
+ // Пробуем заново создать хранилище с инкрементом версии
304
+ const newDb = await this.dbManager.ensureStoreExists(this.STORE_NAME);
305
+ if (!newDb.objectStoreNames.contains(this.STORE_NAME)) {
306
+ throw new Error(`Object store "${this.STORE_NAME}" still doesn't exist after repair attempt`);
307
+ }
308
+ return newDb.transaction(this.STORE_NAME, mode);
309
+ }
310
+ return db.transaction(this.STORE_NAME, mode);
311
+ } catch (error) {
312
+ this.logger?.error(`Failed to create transaction for store "${this.STORE_NAME}"`, {
313
+ error
314
+ });
315
+ throw error;
316
+ }
317
+ }
318
+ async getObjectStore(mode = 'readonly') {
319
+ const transaction = await this.getTransaction(mode);
320
+ return transaction.objectStore(this.STORE_NAME);
321
+ }
322
+ async doGet(key) {
323
+ const store = await this.getObjectStore();
324
+ // Для пустого ключа возвращаем все состояние
325
+ if (key === '') {
326
+ return new Promise((resolve, reject)=>{
327
+ const request = store.getAll();
328
+ request.onerror = ()=>reject(request.error);
329
+ request.onsuccess = ()=>{
330
+ const allValues = request.result;
331
+ const allKeys = store.getAllKeys();
332
+ allKeys.onsuccess = ()=>{
333
+ const state = allKeys.result.reduce((acc, k, index)=>{
334
+ if (k !== 'root') {
335
+ acc[k] = allValues[index];
336
+ }
337
+ return acc;
338
+ }, {});
339
+ resolve(state);
340
+ };
341
+ allKeys.onerror = ()=>reject(allKeys.error);
342
+ };
343
+ });
344
+ }
345
+ // Проверяем, является ли ключ "сырым"
346
+ if (key instanceof StorageKey && key.isUnparseable()) {
347
+ return new Promise((resolve, reject)=>{
348
+ const request = store.get(key.valueOf());
349
+ request.onerror = ()=>reject(request.error);
350
+ request.onsuccess = ()=>resolve(request.result);
351
+ });
352
+ }
353
+ // Для вложенного пути
354
+ const parts = parsePath(key);
355
+ if (parts.length > 1) {
356
+ const rootKey = parts[0];
357
+ return new Promise((resolve, reject)=>{
358
+ const request = store.get(rootKey);
359
+ request.onerror = ()=>reject(request.error);
360
+ request.onsuccess = ()=>{
361
+ const rootValue = request.result;
362
+ if (!rootValue) {
363
+ resolve(undefined);
364
+ return;
365
+ }
366
+ const value = getValueByPath(rootValue, parts.slice(1).join('.'));
367
+ resolve(value);
368
+ };
369
+ });
370
+ }
371
+ // Для простого ключа
372
+ return new Promise((resolve, reject)=>{
373
+ const request = store.get(parts[0]);
374
+ request.onerror = ()=>reject(request.error);
375
+ request.onsuccess = ()=>resolve(request.result);
376
+ });
377
+ }
378
+ async doSet(key, value) {
379
+ // Для пустого ключа устанавливаем все состояние
380
+ if (key === '') {
381
+ const store = await this.getObjectStore('readwrite');
382
+ return new Promise((resolve, reject)=>{
383
+ const tx = store.transaction;
384
+ tx.oncomplete = ()=>{
385
+ resolve();
386
+ };
387
+ tx.onerror = ()=>{
388
+ reject(tx.error);
389
+ };
390
+ const clearRequest = store.clear();
391
+ clearRequest.onsuccess = ()=>{
392
+ const entries = Object.entries(value);
393
+ for (const [entryKey, entryValue] of entries){
394
+ store.put(entryValue, entryKey);
395
+ }
396
+ };
397
+ clearRequest.onerror = ()=>{
398
+ reject(clearRequest.error);
399
+ };
400
+ });
401
+ }
402
+ const store = await this.getObjectStore('readwrite');
403
+ // Для "сырого" ключа
404
+ if (key instanceof StorageKey && key.isUnparseable()) {
405
+ await this.putValueInStore(store, key.valueOf(), value);
406
+ return;
407
+ }
408
+ // Для вложенного пути
409
+ const parts = parsePath(key);
410
+ if (parts.length > 1) {
411
+ const rootKey = parts[0];
412
+ return new Promise((resolve, reject)=>{
413
+ const request = store.get(rootKey);
414
+ request.onerror = ()=>reject(request.error);
415
+ request.onsuccess = ()=>{
416
+ const rootValue = request.result || {};
417
+ const updatedValue = setValueByPath(rootValue, parts.slice(1).join('.'), value);
418
+ const putRequest = store.put(updatedValue, rootKey);
419
+ putRequest.onerror = ()=>reject(putRequest.error);
420
+ putRequest.onsuccess = ()=>resolve();
421
+ };
422
+ });
423
+ }
424
+ // Для простого ключа
425
+ await this.putValueInStore(store, parts[0], value);
426
+ }
427
+ async putValueInStore(store, key, value) {
428
+ return new Promise((resolve, reject)=>{
429
+ const request = store.put(value, key.valueOf());
430
+ request.onerror = ()=>reject(request.error);
431
+ request.onsuccess = ()=>resolve();
432
+ });
433
+ }
434
+ async doUpdate(updates) {
435
+ // Группируем обновления
436
+ const updatesByRoot = new Map();
437
+ const rawUpdates = [];
438
+ // Разделяем обновления на "сырые" и обычные
439
+ for (const { key, value } of updates){
440
+ if (key instanceof StorageKey && key.isUnparseable()) {
441
+ rawUpdates.push({
442
+ key: key.valueOf(),
443
+ value
444
+ });
445
+ continue;
446
+ }
447
+ const parts = parsePath(key);
448
+ const rootKey = parts[0];
449
+ const path = parts.slice(1);
450
+ if (!updatesByRoot.has(rootKey)) {
451
+ updatesByRoot.set(rootKey, []);
452
+ }
453
+ updatesByRoot.get(rootKey).push({
454
+ path,
455
+ value
456
+ });
457
+ }
458
+ // Одна транзакция на весь doUpdate — атомарность
459
+ const transaction = await this.getTransaction('readwrite');
460
+ const store = transaction.objectStore(this.STORE_NAME);
461
+ return new Promise((resolve, reject)=>{
462
+ transaction.oncomplete = ()=>resolve();
463
+ transaction.onerror = ()=>{
464
+ this.logger?.error('Error during update:', {
465
+ error: transaction.error
466
+ });
467
+ reject(transaction.error);
468
+ };
469
+ transaction.onabort = ()=>{
470
+ this.logger?.error('Update transaction aborted:', {
471
+ error: transaction.error
472
+ });
473
+ reject(transaction.error || new Error('Transaction aborted'));
474
+ };
475
+ // Обрабатываем "сырые" обновления
476
+ for (const { key, value } of rawUpdates){
477
+ store.put(value, key);
478
+ }
479
+ // Обрабатываем сгруппированные обновления
480
+ // Для каждого rootKey: читаем текущее значение, применяем все path-обновления, записываем обратно
481
+ const rootKeys = Array.from(updatesByRoot.keys());
482
+ if (rootKeys.length === 0) {
483
+ // Нет сгруппированных обновлений — транзакция завершится сама
484
+ return;
485
+ }
486
+ for (const rootKey of rootKeys){
487
+ const getRequest = store.get(rootKey);
488
+ getRequest.onsuccess = ()=>{
489
+ const rootValue = getRequest.result || {};
490
+ let updatedValue = {
491
+ ...rootValue
492
+ };
493
+ const pathUpdates = updatesByRoot.get(rootKey);
494
+ for (const { path, value } of pathUpdates){
495
+ if (path.length === 0) {
496
+ updatedValue = value;
497
+ } else {
498
+ updatedValue = setValueByPath(updatedValue, path.join('.'), value);
499
+ }
500
+ }
501
+ store.put(updatedValue, rootKey);
502
+ };
503
+ }
504
+ });
505
+ }
506
+ async doDelete(key) {
507
+ const store = await this.getObjectStore('readwrite');
508
+ // Для "сырого" ключа
509
+ if (key instanceof StorageKey && key.isUnparseable()) {
510
+ return new Promise((resolve, reject)=>{
511
+ const request = store.delete(key.valueOf());
512
+ request.onerror = ()=>reject(request.error);
513
+ request.onsuccess = ()=>resolve(true);
514
+ });
515
+ }
516
+ const parts = parsePath(key);
517
+ // Для простого ключа
518
+ if (parts.length === 1) {
519
+ return new Promise((resolve, reject)=>{
520
+ const request = store.delete(parts[0]);
521
+ request.onerror = ()=>reject(request.error);
522
+ request.onsuccess = ()=>resolve(true);
523
+ });
524
+ }
525
+ // Для вложенного пути
526
+ const rootKey = parts[0];
527
+ return new Promise((resolve, reject)=>{
528
+ const getRequest = store.get(rootKey);
529
+ getRequest.onerror = ()=>reject(getRequest.error);
530
+ getRequest.onsuccess = ()=>{
531
+ const rootValue = getRequest.result;
532
+ if (!rootValue) {
533
+ resolve(false);
534
+ return;
535
+ }
536
+ const parent = getValueByPath(rootValue, parts.slice(0, -1).join('.'));
537
+ const lastKey = parts[parts.length - 1];
538
+ if (!parent || !(lastKey in parent)) {
539
+ resolve(false);
540
+ return;
541
+ }
542
+ if (Array.isArray(parent)) {
543
+ const index = parseInt(lastKey, 10);
544
+ if (!isNaN(index)) {
545
+ parent.splice(index, 1);
546
+ } else {
547
+ // @ts-ignore
548
+ delete parent[lastKey];
549
+ }
550
+ } else {
551
+ delete parent[lastKey];
552
+ }
553
+ const putRequest = store.put(rootValue, rootKey);
554
+ putRequest.onerror = ()=>reject(putRequest.error);
555
+ putRequest.onsuccess = ()=>resolve(true);
556
+ };
557
+ });
558
+ }
559
+ async doClear() {
560
+ const store = await this.getObjectStore('readwrite');
561
+ return new Promise((resolve, reject)=>{
562
+ const request = store.clear();
563
+ request.onsuccess = ()=>resolve();
564
+ request.onerror = ()=>reject(request.error);
565
+ });
566
+ }
567
+ async doKeys() {
568
+ const store = await this.getObjectStore();
569
+ const request = store.getAllKeys();
570
+ return new Promise((resolve, reject)=>{
571
+ request.onsuccess = ()=>{
572
+ resolve(request.result);
573
+ };
574
+ request.onerror = ()=>reject(request.error);
575
+ });
576
+ }
577
+ async doHas(key) {
578
+ const value = await this.doGet(key);
579
+ return value !== undefined;
580
+ }
581
+ /**
582
+ * Override performCleanup: persistent storage should NOT clear data on destroy.
583
+ * Only clean up middleware and runtime resources, not persisted data.
584
+ */ async performCleanup() {
585
+ await this.pluginExecutor?.executeOnClear();
586
+ await this.doDestroy();
587
+ }
588
+ async doDestroy() {
589
+ // Persistent storage: do NOT clear data on destroy.
590
+ // Only release runtime resources. Data persists across component lifecycles.
591
+ }
592
+ }
593
+
594
+ export { IndexedDBManager, IndexedDBStorage };
595
+
596
+ //# sourceMappingURL=indexed-DB.service.js.map