synapse-storage 4.1.1 → 5.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (289) hide show
  1. package/README.md +142 -12
  2. package/dist/_utils/chunk.util.d.ts +0 -1
  3. package/dist/_utils/deepMerge.util.d.ts +0 -1
  4. package/dist/_utils/error-handling.util.d.ts +0 -1
  5. package/dist/_utils/flatMap.util.d.ts +0 -1
  6. package/dist/_utils/index.d.ts +0 -1
  7. package/dist/_utils/logger-console.util.d.ts +0 -1
  8. package/dist/api/api.module.d.ts +0 -1
  9. package/dist/api/components/endpoint.d.ts +11 -12
  10. package/dist/api/components/endpoint.js.map +1 -1
  11. package/dist/api/components/query-storage.d.ts +0 -1
  12. package/dist/api/components/query-storage.js +1 -1
  13. package/dist/api/components/query-storage.js.map +1 -1
  14. package/dist/api/index.d.ts +0 -1
  15. package/dist/api/types/api.interface.d.ts +0 -1
  16. package/dist/api/types/endpoint.interface.d.ts +0 -1
  17. package/dist/api/types/query.interface.d.ts +0 -1
  18. package/dist/api/utils/api-helpers.d.ts +0 -1
  19. package/dist/{core/storage → api}/utils/cache.util.d.ts +3 -6
  20. package/dist/{core/storage → api}/utils/cache.util.js +4 -7
  21. package/dist/api/utils/cache.util.js.map +1 -0
  22. package/dist/api/utils/create-header-context.d.ts +0 -1
  23. package/dist/api/utils/endpoint-headers.d.ts +0 -1
  24. package/dist/api/utils/fetch-base-query.d.ts +0 -1
  25. package/dist/api/utils/file-utils.d.ts +0 -1
  26. package/dist/api/utils/get-cacheable-headers.d.ts +0 -1
  27. package/dist/core/index.d.ts +0 -1
  28. package/dist/core/selector/index.d.ts +1 -1
  29. package/dist/core/selector/index.js +2 -0
  30. package/dist/core/selector/index.js.map +1 -1
  31. package/dist/core/selector/selector.interface.d.ts +15 -30
  32. package/dist/core/selector/selector.interface.js +2 -2
  33. package/dist/core/selector/selector.interface.js.map +1 -1
  34. package/dist/core/selector/selector.module.d.ts +16 -1
  35. package/dist/core/selector/selector.module.js +82 -20
  36. package/dist/core/selector/selector.module.js.map +1 -1
  37. package/dist/core/selector/selectors.base.d.ts +56 -0
  38. package/dist/core/selector/selectors.base.js +118 -0
  39. package/dist/core/selector/selectors.base.js.map +1 -0
  40. package/dist/core/storage/adapters/async-base-storage.service.d.ts +15 -4
  41. package/dist/core/storage/adapters/async-base-storage.service.js +106 -36
  42. package/dist/core/storage/adapters/async-base-storage.service.js.map +1 -1
  43. package/dist/core/storage/adapters/indexed-DB.service.d.ts +4 -5
  44. package/dist/core/storage/adapters/indexed-DB.service.js +66 -14
  45. package/dist/core/storage/adapters/indexed-DB.service.js.map +1 -1
  46. package/dist/core/storage/adapters/local-storage.service.d.ts +9 -4
  47. package/dist/core/storage/adapters/local-storage.service.js +25 -5
  48. package/dist/core/storage/adapters/local-storage.service.js.map +1 -1
  49. package/dist/core/storage/adapters/memory-storage.service.d.ts +2 -4
  50. package/dist/core/storage/adapters/memory-storage.service.js +5 -5
  51. package/dist/core/storage/adapters/memory-storage.service.js.map +1 -1
  52. package/dist/core/storage/adapters/path.utils.d.ts +0 -1
  53. package/dist/core/storage/adapters/storage-core.d.ts +6 -2
  54. package/dist/core/storage/adapters/storage-core.js +6 -3
  55. package/dist/core/storage/adapters/storage-core.js.map +1 -1
  56. package/dist/core/storage/adapters/sync-base-storage.service.d.ts +20 -4
  57. package/dist/core/storage/adapters/sync-base-storage.service.js +110 -35
  58. package/dist/core/storage/adapters/sync-base-storage.service.js.map +1 -1
  59. package/dist/core/storage/index.d.ts +2 -5
  60. package/dist/core/storage/index.js +1 -5
  61. package/dist/core/storage/index.js.map +1 -1
  62. package/dist/core/storage/middlewares/broadcast.middleware.d.ts +0 -1
  63. package/dist/core/storage/middlewares/index.d.ts +3 -1
  64. package/dist/core/storage/middlewares/index.js +6 -0
  65. package/dist/core/storage/middlewares/index.js.map +1 -1
  66. package/dist/core/storage/middlewares/storage-batching.middleware.d.ts +0 -1
  67. package/dist/core/storage/middlewares/storage-logger.middleware.d.ts +20 -0
  68. package/dist/core/storage/middlewares/storage-logger.middleware.js +53 -0
  69. package/dist/core/storage/middlewares/storage-logger.middleware.js.map +1 -0
  70. package/dist/core/storage/middlewares/storage-shallow-compare.middleware.d.ts +0 -1
  71. package/dist/core/storage/middlewares/storage-shallow-compare.middleware.js +4 -10
  72. package/dist/core/storage/middlewares/storage-shallow-compare.middleware.js.map +1 -1
  73. package/dist/core/storage/middlewares/sync-broadcast.middleware.d.ts +0 -1
  74. package/dist/core/storage/middlewares/sync-storage-batching.middleware.d.ts +0 -1
  75. package/dist/core/storage/middlewares/sync-storage-logger.middleware.d.ts +7 -0
  76. package/dist/core/storage/middlewares/sync-storage-logger.middleware.js +48 -0
  77. package/dist/core/storage/middlewares/sync-storage-logger.middleware.js.map +1 -0
  78. package/dist/core/storage/middlewares/sync-storage-shallow-compare.middleware.d.ts +0 -1
  79. package/dist/core/storage/middlewares/sync-storage-shallow-compare.middleware.js +4 -10
  80. package/dist/core/storage/middlewares/sync-storage-shallow-compare.middleware.js.map +1 -1
  81. package/dist/core/storage/modules/singleton/mixin.util.d.ts +0 -1
  82. package/dist/core/storage/modules/singleton/models.d.ts +0 -1
  83. package/dist/core/storage/modules/singleton/singleton.util.d.ts +0 -1
  84. package/dist/core/storage/storage.interface.d.ts +59 -4
  85. package/dist/core/storage/storage.interface.js +0 -2
  86. package/dist/core/storage/storage.interface.js.map +1 -1
  87. package/dist/core/storage/utils/broadcast.util.d.ts +0 -1
  88. package/dist/core/storage/utils/middleware-module.d.ts +0 -3
  89. package/dist/core/storage/utils/middleware-module.js +0 -8
  90. package/dist/core/storage/utils/middleware-module.js.map +1 -1
  91. package/dist/core/storage/utils/migration.util.d.ts +38 -0
  92. package/dist/core/storage/utils/migration.util.js +48 -0
  93. package/dist/core/storage/utils/migration.util.js.map +1 -0
  94. package/dist/core/storage/utils/path-selector.util.d.ts +0 -1
  95. package/dist/core/storage/utils/state-diff.util.d.ts +9 -2
  96. package/dist/core/storage/utils/state-diff.util.js +30 -3
  97. package/dist/core/storage/utils/state-diff.util.js.map +1 -1
  98. package/dist/core/storage/utils/storage-factory.util.d.ts +7 -9
  99. package/dist/core/storage/utils/storage-factory.util.js +10 -10
  100. package/dist/core/storage/utils/storage-factory.util.js.map +1 -1
  101. package/dist/core/storage/utils/storage-key.d.ts +0 -1
  102. package/dist/index.d.ts +0 -1
  103. package/dist/react/hooks/index.d.ts +2 -1
  104. package/dist/react/hooks/index.js +4 -0
  105. package/dist/react/hooks/index.js.map +1 -1
  106. package/dist/react/hooks/useCreateStorage.d.ts +5 -6
  107. package/dist/react/hooks/useCreateStorage.js +2 -2
  108. package/dist/react/hooks/useCreateStorage.js.map +1 -1
  109. package/dist/react/hooks/useObservable.d.ts +17 -0
  110. package/dist/react/hooks/useObservable.js +38 -0
  111. package/dist/react/hooks/useObservable.js.map +1 -0
  112. package/dist/react/hooks/useSelector.d.ts +0 -1
  113. package/dist/react/hooks/useSelector.js +5 -2
  114. package/dist/react/hooks/useSelector.js.map +1 -1
  115. package/dist/react/hooks/useStorage.d.ts +0 -1
  116. package/dist/react/hooks/useStorageSubscribe.d.ts +0 -1
  117. package/dist/react/hooks/useSubscription.d.ts +13 -0
  118. package/dist/react/hooks/useSubscription.js +23 -0
  119. package/dist/react/hooks/useSubscription.js.map +1 -0
  120. package/dist/react/index.d.ts +0 -1
  121. package/dist/react/utils/awaitSynapse.d.ts +9 -10
  122. package/dist/react/utils/awaitSynapse.js +3 -2
  123. package/dist/react/utils/awaitSynapse.js.map +1 -1
  124. package/dist/react/utils/createSynapseCtx.d.ts +18 -23
  125. package/dist/react/utils/createSynapseCtx.js +64 -39
  126. package/dist/react/utils/createSynapseCtx.js.map +1 -1
  127. package/dist/react/utils/index.d.ts +0 -1
  128. package/dist/reactive/dispatcher/dispatcher.base.d.ts +122 -0
  129. package/dist/reactive/dispatcher/dispatcher.base.js +294 -0
  130. package/dist/reactive/dispatcher/dispatcher.base.js.map +1 -0
  131. package/dist/reactive/dispatcher/dispatcher.module.d.ts +12 -67
  132. package/dist/reactive/dispatcher/dispatcher.module.js +13 -72
  133. package/dist/reactive/dispatcher/dispatcher.module.js.map +1 -1
  134. package/dist/reactive/dispatcher/index.d.ts +1 -1
  135. package/dist/reactive/dispatcher/index.js +2 -0
  136. package/dist/reactive/dispatcher/index.js.map +1 -1
  137. package/dist/reactive/dispatcher/middlewares/index.d.ts +0 -1
  138. package/dist/reactive/dispatcher/middlewares/logger.middleware.d.ts +0 -1
  139. package/dist/reactive/dispatcher/path.util.d.ts +15 -0
  140. package/dist/reactive/dispatcher/path.util.js +34 -0
  141. package/dist/reactive/dispatcher/path.util.js.map +1 -0
  142. package/dist/reactive/dispatcher/standalone.d.ts +1 -150
  143. package/dist/reactive/dispatcher/standalone.js +6 -217
  144. package/dist/reactive/dispatcher/standalone.js.map +1 -1
  145. package/dist/reactive/effects/effects.base.d.ts +62 -0
  146. package/dist/reactive/effects/effects.base.js +90 -0
  147. package/dist/reactive/effects/effects.base.js.map +1 -0
  148. package/dist/reactive/effects/effects.module.d.ts +122 -11
  149. package/dist/reactive/effects/effects.module.js +129 -17
  150. package/dist/reactive/effects/effects.module.js.map +1 -1
  151. package/dist/reactive/effects/index.d.ts +1 -1
  152. package/dist/reactive/effects/index.js +2 -0
  153. package/dist/reactive/effects/index.js.map +1 -1
  154. package/dist/reactive/effects/utils/chunkRequestConsistent.d.ts +0 -1
  155. package/dist/reactive/effects/utils/chunkRequestParallel.d.ts +0 -1
  156. package/dist/reactive/effects/utils/fromRequest.d.ts +0 -1
  157. package/dist/reactive/effects/utils/index.d.ts +0 -1
  158. package/dist/reactive/effects/utils/toObservable.d.ts +0 -1
  159. package/dist/reactive/index.d.ts +0 -1
  160. package/dist/utils/createEventBus.d.ts +47 -46
  161. package/dist/utils/createEventBus.js +152 -174
  162. package/dist/utils/createEventBus.js.map +1 -1
  163. package/dist/utils/createSynapse/createSynapse.d.ts +25 -7
  164. package/dist/utils/createSynapse/createSynapse.js +28 -98
  165. package/dist/utils/createSynapse/createSynapse.js.map +1 -1
  166. package/dist/utils/createSynapse/factory.d.ts +6 -0
  167. package/dist/utils/createSynapse/factory.js +256 -0
  168. package/dist/utils/createSynapse/factory.js.map +1 -0
  169. package/dist/utils/createSynapse/index.d.ts +2 -2
  170. package/dist/utils/createSynapse/index.js.map +1 -1
  171. package/dist/utils/createSynapse/synapse.types.d.ts +87 -0
  172. package/dist/utils/createSynapse/synapse.types.js +11 -0
  173. package/dist/utils/createSynapse/synapse.types.js.map +1 -0
  174. package/dist/utils/createSynapse/types.d.ts +6 -85
  175. package/dist/utils/createSynapse/types.js +2 -1
  176. package/dist/utils/createSynapse/types.js.map +1 -1
  177. package/dist/utils/createSynapse/waitForDependencies.d.ts +0 -1
  178. package/dist/utils/createSynapse/waitForDependencies.js +1 -1
  179. package/dist/utils/createSynapse/waitForDependencies.js.map +1 -1
  180. package/dist/utils/createSynapseAwaiter.d.ts +13 -10
  181. package/dist/utils/createSynapseAwaiter.js +30 -3
  182. package/dist/utils/createSynapseAwaiter.js.map +1 -1
  183. package/dist/utils/dehydrateModule.d.ts +6 -0
  184. package/dist/utils/dehydrateModule.js +43 -0
  185. package/dist/utils/dehydrateModule.js.map +1 -0
  186. package/dist/utils/index.d.ts +3 -3
  187. package/dist/utils/index.js +3 -0
  188. package/dist/utils/index.js.map +1 -1
  189. package/package.json +12 -2
  190. package/dist/_utils/chunk.util.d.ts.map +0 -1
  191. package/dist/_utils/deepMerge.util.d.ts.map +0 -1
  192. package/dist/_utils/error-handling.util.d.ts.map +0 -1
  193. package/dist/_utils/flatMap.util.d.ts.map +0 -1
  194. package/dist/_utils/index.d.ts.map +0 -1
  195. package/dist/_utils/logger-console.util.d.ts.map +0 -1
  196. package/dist/api/api.module.d.ts.map +0 -1
  197. package/dist/api/components/endpoint.d.ts.map +0 -1
  198. package/dist/api/components/query-storage.d.ts.map +0 -1
  199. package/dist/api/example.d.ts +0 -83
  200. package/dist/api/example.d.ts.map +0 -1
  201. package/dist/api/example.js +0 -90
  202. package/dist/api/example.js.map +0 -1
  203. package/dist/api/index.d.ts.map +0 -1
  204. package/dist/api/types/api.interface.d.ts.map +0 -1
  205. package/dist/api/types/endpoint.interface.d.ts.map +0 -1
  206. package/dist/api/types/query.interface.d.ts.map +0 -1
  207. package/dist/api/utils/api-helpers.d.ts.map +0 -1
  208. package/dist/api/utils/create-header-context.d.ts.map +0 -1
  209. package/dist/api/utils/endpoint-headers.d.ts.map +0 -1
  210. package/dist/api/utils/fetch-base-query.d.ts.map +0 -1
  211. package/dist/api/utils/file-utils.d.ts.map +0 -1
  212. package/dist/api/utils/get-cacheable-headers.d.ts.map +0 -1
  213. package/dist/core/index.d.ts.map +0 -1
  214. package/dist/core/selector/index.d.ts.map +0 -1
  215. package/dist/core/selector/selector.interface.d.ts.map +0 -1
  216. package/dist/core/selector/selector.module.d.ts.map +0 -1
  217. package/dist/core/storage/adapters/async-base-storage.service.d.ts.map +0 -1
  218. package/dist/core/storage/adapters/indexed-DB.service.d.ts.map +0 -1
  219. package/dist/core/storage/adapters/local-storage.service.d.ts.map +0 -1
  220. package/dist/core/storage/adapters/memory-storage.service.d.ts.map +0 -1
  221. package/dist/core/storage/adapters/path.utils.d.ts.map +0 -1
  222. package/dist/core/storage/adapters/storage-core.d.ts.map +0 -1
  223. package/dist/core/storage/adapters/sync-base-storage.service.d.ts.map +0 -1
  224. package/dist/core/storage/index.d.ts.map +0 -1
  225. package/dist/core/storage/middlewares/broadcast.middleware.d.ts.map +0 -1
  226. package/dist/core/storage/middlewares/index.d.ts.map +0 -1
  227. package/dist/core/storage/middlewares/storage-batching.middleware.d.ts.map +0 -1
  228. package/dist/core/storage/middlewares/storage-shallow-compare.middleware.d.ts.map +0 -1
  229. package/dist/core/storage/middlewares/sync-broadcast.middleware.d.ts.map +0 -1
  230. package/dist/core/storage/middlewares/sync-storage-batching.middleware.d.ts.map +0 -1
  231. package/dist/core/storage/middlewares/sync-storage-shallow-compare.middleware.d.ts.map +0 -1
  232. package/dist/core/storage/modules/plugin/plugin.interface.d.ts +0 -101
  233. package/dist/core/storage/modules/plugin/plugin.interface.d.ts.map +0 -1
  234. package/dist/core/storage/modules/plugin/plugin.interface.js +0 -8
  235. package/dist/core/storage/modules/plugin/plugin.interface.js.map +0 -1
  236. package/dist/core/storage/modules/plugin/plugin.service.d.ts +0 -49
  237. package/dist/core/storage/modules/plugin/plugin.service.d.ts.map +0 -1
  238. package/dist/core/storage/modules/plugin/plugin.service.js +0 -406
  239. package/dist/core/storage/modules/plugin/plugin.service.js.map +0 -1
  240. package/dist/core/storage/modules/singleton/mixin.util.d.ts.map +0 -1
  241. package/dist/core/storage/modules/singleton/models.d.ts.map +0 -1
  242. package/dist/core/storage/modules/singleton/singleton.util.d.ts.map +0 -1
  243. package/dist/core/storage/storage.interface.d.ts.map +0 -1
  244. package/dist/core/storage/utils/broadcast.util.d.ts.map +0 -1
  245. package/dist/core/storage/utils/cache.util.d.ts.map +0 -1
  246. package/dist/core/storage/utils/cache.util.js.map +0 -1
  247. package/dist/core/storage/utils/middleware-module.d.ts.map +0 -1
  248. package/dist/core/storage/utils/path-selector.util.d.ts.map +0 -1
  249. package/dist/core/storage/utils/state-diff.util.d.ts.map +0 -1
  250. package/dist/core/storage/utils/storage-factory.util.d.ts.map +0 -1
  251. package/dist/core/storage/utils/storage-key.d.ts.map +0 -1
  252. package/dist/core/storage/utils/storage.utils.d.ts +0 -17
  253. package/dist/core/storage/utils/storage.utils.d.ts.map +0 -1
  254. package/dist/core/storage/utils/storage.utils.js +0 -57
  255. package/dist/core/storage/utils/storage.utils.js.map +0 -1
  256. package/dist/index.d.ts.map +0 -1
  257. package/dist/react/hooks/index.d.ts.map +0 -1
  258. package/dist/react/hooks/useCreateStorage.d.ts.map +0 -1
  259. package/dist/react/hooks/useSelector.d.ts.map +0 -1
  260. package/dist/react/hooks/useStorage.d.ts.map +0 -1
  261. package/dist/react/hooks/useStorageSubscribe.d.ts.map +0 -1
  262. package/dist/react/index.d.ts.map +0 -1
  263. package/dist/react/utils/awaitSynapse.d.ts.map +0 -1
  264. package/dist/react/utils/createSynapseCtx.d.ts.map +0 -1
  265. package/dist/react/utils/index.d.ts.map +0 -1
  266. package/dist/reactive/dispatcher/dispatcher.module.d.ts.map +0 -1
  267. package/dist/reactive/dispatcher/index.d.ts.map +0 -1
  268. package/dist/reactive/dispatcher/middlewares/index.d.ts.map +0 -1
  269. package/dist/reactive/dispatcher/middlewares/logger.middleware.d.ts.map +0 -1
  270. package/dist/reactive/dispatcher/standalone.d.ts.map +0 -1
  271. package/dist/reactive/effects/effects.module.d.ts.map +0 -1
  272. package/dist/reactive/effects/index.d.ts.map +0 -1
  273. package/dist/reactive/effects/utils/chunkRequestConsistent.d.ts.map +0 -1
  274. package/dist/reactive/effects/utils/chunkRequestParallel.d.ts.map +0 -1
  275. package/dist/reactive/effects/utils/fromRequest.d.ts.map +0 -1
  276. package/dist/reactive/effects/utils/index.d.ts.map +0 -1
  277. package/dist/reactive/effects/utils/toObservable.d.ts.map +0 -1
  278. package/dist/reactive/index.d.ts.map +0 -1
  279. package/dist/utils/createEventBus.d.ts.map +0 -1
  280. package/dist/utils/createSynapse/createSynapse.d.ts.map +0 -1
  281. package/dist/utils/createSynapse/index.d.ts.map +0 -1
  282. package/dist/utils/createSynapse/types.d.ts.map +0 -1
  283. package/dist/utils/createSynapse/validate.d.ts +0 -2
  284. package/dist/utils/createSynapse/validate.d.ts.map +0 -1
  285. package/dist/utils/createSynapse/validate.js +0 -76
  286. package/dist/utils/createSynapse/validate.js.map +0 -1
  287. package/dist/utils/createSynapse/waitForDependencies.d.ts.map +0 -1
  288. package/dist/utils/createSynapseAwaiter.d.ts.map +0 -1
  289. package/dist/utils/index.d.ts.map +0 -1
@@ -1,93 +1,14 @@
1
- import { Observable } from 'rxjs';
2
- import { ISelectorModule, IStorage, IStorageBase } from '../../core';
3
- import { Effect, ExternalStates } from '../../reactive';
1
+ import { IStorage, IStorageBase } from '../../core';
4
2
  export type ExtractPromiseType<T> = T extends Promise<infer U> ? U : T;
5
3
  export type ExtractStorageType<T> = T extends IStorageBase<infer U> ? U : never;
6
- export type ExtractDispatchType<T> = T extends {
7
- dispatch: infer D;
8
- } ? D : never;
9
4
  export type StorageCreatorFunction<T extends Record<string, any>> = () => Promise<IStorage<T>>;
10
5
  export type SynapseDependency = {
11
6
  storage: IStorageBase<any>;
12
7
  };
13
- /** Всё что можно передать в dependencies[]: raw storage, обёртка { storage }, или Promise от другого synapse */
14
- export type DependencyInput = IStorageBase<any> | SynapseDependency | Promise<AnySynapseStore>;
15
8
  /**
16
- * Базовая конфигурация хранилища
9
+ * Всё, что можно передать в `dependencies[]`: raw storage, обёртка `{ storage }`,
10
+ * или Promise/Handle другого synapse (любой объект с `.storage: IStorageBase`).
17
11
  */
18
- export type BaseSynapseConfig<TStore extends Record<string, any>, TSelectors = any, TExternalSelectors extends Record<string, any> = Record<string, any>> = ({
19
- storage: IStorage<TStore>;
20
- createStorageFn?: undefined;
21
- } | {
22
- storage?: undefined;
23
- createStorageFn: StorageCreatorFunction<TStore>;
24
- }) & {
25
- setup?: () => Promise<void> | void;
26
- dependencies?: DependencyInput[];
27
- dependencyTimeout?: number;
28
- externalSelectors?: TExternalSelectors;
29
- createSelectorsFn?: (selectorModule: ISelectorModule<TStore>, externalSelectors: TExternalSelectors) => TSelectors;
30
- };
31
- /**
32
- * Конфигурация с dispatcher и effects
33
- */
34
- export type CreateSynapseConfigWithEffects<TStore extends Record<string, any>, TSelectors = any, TDispatcher = any, TServices extends Record<string, any> = Record<string, never>, TConfig extends Record<string, any> = Record<string, never>, TExternalSelectors extends Record<string, any> = Record<string, any>> = BaseSynapseConfig<TStore, TSelectors, TExternalSelectors> & {
35
- createDispatcherFn: (storage: IStorage<TStore>) => TDispatcher;
36
- createEffectConfig: () => {
37
- services?: TServices;
38
- config?: TConfig;
39
- externalDispatchers?: Record<string, any>;
40
- externalStates?: ExternalStates;
41
- };
42
- effects?: Effect<TStore, any, TServices, TConfig, any, any>[];
43
- };
44
- /**
45
- * Конфигурация только с dispatcher
46
- */
47
- export type CreateSynapseConfigWithDispatcher<TStore extends Record<string, any>, TSelectors = any, TDispatcher = any, TExternalSelectors extends Record<string, any> = Record<string, any>> = BaseSynapseConfig<TStore, TSelectors, TExternalSelectors> & {
48
- createDispatcherFn: (storage: IStorage<TStore>) => TDispatcher;
49
- createEffectConfig?: never;
50
- effects?: never;
51
- };
52
- /**
53
- * Конфигурация без dispatcher
54
- */
55
- export type CreateSynapseConfigBasic<TStore extends Record<string, any>, TSelectors = any, TExternalSelectors extends Record<string, any> = Record<string, any>> = BaseSynapseConfig<TStore, TSelectors, TExternalSelectors> & {
56
- createDispatcherFn?: never;
57
- createEffectConfig?: never;
58
- effects?: never;
59
- };
60
- /**
61
- * Результат с dispatcher и effects
62
- */
63
- export interface SynapseStoreWithEffects<TStore extends Record<string, any>, TStorage extends IStorageBase<TStore>, TSelectors, TActions> {
64
- storage: TStorage;
65
- selectors: TSelectors;
66
- actions: TActions;
67
- state$: Observable<TStore>;
68
- dispatcher: any;
69
- destroy: () => Promise<void>;
70
- }
71
- /**
72
- * Результат только с dispatcher
73
- */
74
- export interface SynapseStoreWithDispatcher<TStore extends Record<string, any>, TStorage extends IStorageBase<TStore>, TSelectors, TActions> {
75
- storage: TStorage;
76
- selectors: TSelectors;
77
- actions: TActions;
78
- dispatcher: any;
79
- destroy: () => Promise<void>;
80
- }
81
- /**
82
- * Результат без dispatcher
83
- */
84
- export interface SynapseStoreBasic<TStore extends Record<string, any>, TStorage extends IStorageBase<TStore>, TSelectors> {
85
- storage: TStorage;
86
- selectors: TSelectors;
87
- destroy: () => Promise<void>;
88
- }
89
- /**
90
- * Union-тип для всех возможных результатов createSynapse
91
- */
92
- export type AnySynapseStore<TStore extends Record<string, any> = any, TStorage extends IStorageBase<TStore> = IStorage<any>, TSelectors = any, TActions = any> = SynapseStoreWithEffects<TStore, TStorage, TSelectors, TActions> | SynapseStoreWithDispatcher<TStore, TStorage, TSelectors, TActions> | SynapseStoreBasic<TStore, TStorage, TSelectors>;
93
- //# sourceMappingURL=types.d.ts.map
12
+ export type DependencyInput = IStorageBase<any> | SynapseDependency | PromiseLike<{
13
+ storage: IStorageBase<any>;
14
+ }>;
@@ -1,5 +1,6 @@
1
1
  /**
2
- * Union-тип для всех возможных результатов createSynapse
2
+ * Всё, что можно передать в `dependencies[]`: raw storage, обёртка `{ storage }`,
3
+ * или Promise/Handle другого synapse (любой объект с `.storage: IStorageBase`).
3
4
  */
4
5
 
5
6
 
@@ -1 +1 @@
1
- {"version":3,"file":"utils/createSynapse/types.js","sources":["../../../src/utils/createSynapse/types.ts"],"sourcesContent":["import { Observable } from 'rxjs'\n\nimport { ISelectorModule, IStorage, IStorageBase } from '../../core'\nimport { Effect, ExternalStates } from '../../reactive'\n\n// Вспомогательные типы для извлечения типов из других типов\nexport type ExtractPromiseType<T> = T extends Promise<infer U> ? U : T\nexport type ExtractStorageType<T> = T extends IStorageBase<infer U> ? U : never\nexport type ExtractDispatchType<T> = T extends { dispatch: infer D } ? D : never\n\nexport type StorageCreatorFunction<T extends Record<string, any>> = () => Promise<IStorage<T>>\n\nexport type SynapseDependency = {\n storage: IStorageBase<any>\n}\n\n/** Всё что можно передать в dependencies[]: raw storage, обёртка { storage }, или Promise от другого synapse */\nexport type DependencyInput = IStorageBase<any> | SynapseDependency | Promise<AnySynapseStore>\n\n/**\n * Базовая конфигурация хранилища\n */\nexport type BaseSynapseConfig<TStore extends Record<string, any>, TSelectors = any, TExternalSelectors extends Record<string, any> = Record<string, any>> = (\n | { storage: IStorage<TStore>; createStorageFn?: undefined }\n | { storage?: undefined; createStorageFn: StorageCreatorFunction<TStore> }\n) & {\n // Асинхронная функция инициализации, вызывается после готовности зависимостей, до инициализации хранилища\n setup?: () => Promise<void> | void\n // Зависимости от других synapse\n dependencies?: DependencyInput[]\n // Таймаут ожидания готовности зависимостей (мс, по умолчанию 30000)\n dependencyTimeout?: number\n // Внешние селекторы\n externalSelectors?: TExternalSelectors\n // Функция создания селекторов\n createSelectorsFn?: (selectorModule: ISelectorModule<TStore>, externalSelectors: TExternalSelectors) => TSelectors\n}\n\n/**\n * Конфигурация с dispatcher и effects\n */\nexport type CreateSynapseConfigWithEffects<\n TStore extends Record<string, any>,\n TSelectors = any,\n TDispatcher = any,\n TServices extends Record<string, any> = Record<string, never>,\n TConfig extends Record<string, any> = Record<string, never>,\n TExternalSelectors extends Record<string, any> = Record<string, any>,\n> = BaseSynapseConfig<TStore, TSelectors, TExternalSelectors> & {\n // Функция создания диспетчера (обязательная)\n createDispatcherFn: (storage: IStorage<TStore>) => TDispatcher\n // Функция создания конфигурации для эффектов (dispatcher передаётся автоматически)\n createEffectConfig: () => {\n services?: TServices\n config?: TConfig\n externalDispatchers?: Record<string, any>\n externalStates?: ExternalStates\n }\n // Эффекты\n effects?: Effect<TStore, any, TServices, TConfig, any, any>[]\n}\n\n/**\n * Конфигурация только с dispatcher\n */\nexport type CreateSynapseConfigWithDispatcher<\n TStore extends Record<string, any>,\n TSelectors = any,\n TDispatcher = any,\n TExternalSelectors extends Record<string, any> = Record<string, any>,\n> = BaseSynapseConfig<TStore, TSelectors, TExternalSelectors> & {\n // Функция создания диспетчера (обязательная)\n createDispatcherFn: (storage: IStorage<TStore>) => TDispatcher\n // Эффекты отсутствуют\n createEffectConfig?: never\n effects?: never\n}\n\n/**\n * Конфигурация без dispatcher\n */\nexport type CreateSynapseConfigBasic<\n TStore extends Record<string, any>,\n TSelectors = any,\n TExternalSelectors extends Record<string, any> = Record<string, any>,\n> = BaseSynapseConfig<TStore, TSelectors, TExternalSelectors> & {\n // Dispatcher отсутствует\n createDispatcherFn?: never\n createEffectConfig?: never\n effects?: never\n}\n\n/**\n * Результат с dispatcher и effects\n */\nexport interface SynapseStoreWithEffects<TStore extends Record<string, any>, TStorage extends IStorageBase<TStore>, TSelectors, TActions> {\n storage: TStorage\n selectors: TSelectors\n actions: TActions\n state$: Observable<TStore>\n dispatcher: any\n destroy: () => Promise<void>\n}\n\n/**\n * Результат только с dispatcher\n */\nexport interface SynapseStoreWithDispatcher<TStore extends Record<string, any>, TStorage extends IStorageBase<TStore>, TSelectors, TActions> {\n storage: TStorage\n selectors: TSelectors\n actions: TActions\n dispatcher: any\n destroy: () => Promise<void>\n}\n\n/**\n * Результат без dispatcher\n */\nexport interface SynapseStoreBasic<TStore extends Record<string, any>, TStorage extends IStorageBase<TStore>, TSelectors> {\n storage: TStorage\n selectors: TSelectors\n destroy: () => Promise<void>\n}\n\n/**\n * Union-тип для всех возможных результатов createSynapse\n */\nexport type AnySynapseStore<TStore extends Record<string, any> = any, TStorage extends IStorageBase<TStore> = IStorage<any>, TSelectors = any, TActions = any> =\n | SynapseStoreWithEffects<TStore, TStorage, TSelectors, TActions>\n | SynapseStoreWithDispatcher<TStore, TStorage, TSelectors, TActions>\n | SynapseStoreBasic<TStore, TStorage, TSelectors>\n"],"names":[],"mappings":"AA4HA;;CAEC,GAIkD"}
1
+ {"version":3,"file":"utils/createSynapse/types.js","sources":["../../../src/utils/createSynapse/types.ts"],"sourcesContent":["import { IStorage, IStorageBase } from '../../core'\n\n// Вспомогательные типы для извлечения типов из других типов\nexport type ExtractPromiseType<T> = T extends Promise<infer U> ? U : T\nexport type ExtractStorageType<T> = T extends IStorageBase<infer U> ? U : never\n\nexport type StorageCreatorFunction<T extends Record<string, any>> = () => Promise<IStorage<T>>\n\nexport type SynapseDependency = {\n storage: IStorageBase<any>\n}\n\n/**\n * Всё, что можно передать в `dependencies[]`: raw storage, обёртка `{ storage }`,\n * или Promise/Handle другого synapse (любой объект с `.storage: IStorageBase`).\n */\nexport type DependencyInput = IStorageBase<any> | SynapseDependency | PromiseLike<{ storage: IStorageBase<any> }>\n"],"names":[],"mappings":"AAYA;;;CAGC,GACgH"}
@@ -1,3 +1,2 @@
1
1
  import type { DependencyInput } from './types';
2
2
  export declare function waitForDependencies(dependencies?: DependencyInput[], timeoutMs?: number): Promise<void>;
3
- //# sourceMappingURL=waitForDependencies.d.ts.map
@@ -7,7 +7,7 @@ const DEFAULT_DEPENDENCY_TIMEOUT = 30000;
7
7
  * Извлекает IStorageBase из любого формата зависимости:
8
8
  * - IStorageBase напрямую (есть waitForReady)
9
9
  * - { storage: IStorageBase } — обёртка
10
- * - AnySynapseStore — результат createSynapse (тоже имеет .storage)
10
+ * - готовый synapse — результат createSynapse (тоже имеет .storage)
11
11
  */ function extractStorage(dep) {
12
12
  if (typeof dep.waitForReady === 'function') return dep;
13
13
  if (dep.storage && typeof dep.storage.waitForReady === 'function') return dep.storage;
@@ -1 +1 @@
1
- {"version":3,"file":"utils/createSynapse/waitForDependencies.js","sources":["../../../src/utils/createSynapse/waitForDependencies.ts"],"sourcesContent":["import { handleOperationError, logError } from '../../_utils/error-handling.util'\nimport type { IStorageBase } from '../../core'\nimport type { DependencyInput } from './types'\n\nconst DEFAULT_DEPENDENCY_TIMEOUT = 30_000\n\n/**\n * Извлекает IStorageBase из любого формата зависимости:\n * - IStorageBase напрямую (есть waitForReady)\n * - { storage: IStorageBase } — обёртка\n * - AnySynapseStore — результат createSynapse (тоже имеет .storage)\n */\nfunction extractStorage(dep: any): IStorageBase<any> {\n if (typeof dep.waitForReady === 'function') return dep\n if (dep.storage && typeof dep.storage.waitForReady === 'function') return dep.storage\n throw new Error('Invalid dependency: expected IStorageBase or { storage: IStorageBase }')\n}\n\nexport async function waitForDependencies(dependencies: DependencyInput[] = [], timeoutMs: number = DEFAULT_DEPENDENCY_TIMEOUT): Promise<void> {\n if (dependencies.length === 0) {\n return\n }\n\n logError(`Waiting for ${dependencies.length} dependencies to be ready...`, '', null, 'warn')\n\n await Promise.all(\n dependencies.map(async (dependencyOrPromise, index) => {\n try {\n const resolved = await dependencyOrPromise\n const storage = extractStorage(resolved)\n const name = storage.name || 'unnamed'\n\n // initialize() идемпотентен — повторный вызов безопасен\n await storage.initialize()\n\n await Promise.race([\n storage.waitForReady(),\n new Promise<never>((_, reject) =>\n globalThis.setTimeout(() => reject(new Error(`Dependency ${index} (\"${name}\") timed out after ${timeoutMs}ms. Check that it initializes correctly.`)), timeoutMs),\n ),\n ])\n } catch (error) {\n handleOperationError(`createSynapse: dependency ${index} failed to initialize`, error)\n }\n }),\n )\n}\n"],"names":["handleOperationError","logError","DEFAULT_DEPENDENCY_TIMEOUT","extractStorage","dep","Error","waitForDependencies","dependencies","timeoutMs","Promise","dependencyOrPromise","index","resolved","storage","name","_","reject","globalThis","error"],"mappings":";;;AAAiF;AAIjF,MAAME,0BAA0BA,GAAG;AAEnC;;;;;CAKC,GACD,SAASC,cAAcA,CAACC,GAAQ;IAC9B,IAAI,OAAOA,IAAI,YAAY,KAAK,YAAY,OAAOA;IACnD,IAAIA,IAAI,OAAO,IAAI,OAAOA,IAAI,OAAO,CAAC,YAAY,KAAK,YAAY,OAAOA,IAAI,OAAO;IACrF,MAAM,IAAIC,MAAM;AAClB;AAEO,eAAeC,mBAAmBA,CAACC,eAAkC,EAAE,EAAEC,YAAoBN,0BAA0B;IAC5H,IAAIK,aAAa,MAAM,KAAK,GAAG;QAC7B;IACF;IAEAN,QAAQA,CAAC,CAAC,YAAY,EAAEM,aAAa,MAAM,CAAC,4BAA4B,CAAC,EAAE,IAAI,MAAM;IAErF,MAAME,QAAQ,GAAG,CACfF,aAAa,GAAG,CAAC,OAAOG,qBAAqBC;QAC3C,IAAI;YACF,MAAMC,WAAW,MAAMF;YACvB,MAAMG,UAAUV,cAAcA,CAACS;YAC/B,MAAME,OAAOD,QAAQ,IAAI,IAAI;YAE7B,wDAAwD;YACxD,MAAMA,QAAQ,UAAU;YAExB,MAAMJ,QAAQ,IAAI,CAAC;gBACjBI,QAAQ,YAAY;gBACpB,IAAIJ,QAAe,CAACM,GAAGC,SACrBC,WAAW,UAAU,CAAC,IAAMD,OAAO,IAAIX,MAAM,CAAC,WAAW,EAAEM,MAAM,GAAG,EAAEG,KAAK,mBAAmB,EAAEN,UAAU,wCAAwC,CAAC,IAAIA;aAE1J;QACH,EAAE,OAAOU,OAAO;YACdlB,oBAAoBA,CAAC,CAAC,0BAA0B,EAAEW,MAAM,qBAAqB,CAAC,EAAEO;QAClF;IACF;AAEJ"}
1
+ {"version":3,"file":"utils/createSynapse/waitForDependencies.js","sources":["../../../src/utils/createSynapse/waitForDependencies.ts"],"sourcesContent":["import { handleOperationError, logError } from '../../_utils/error-handling.util'\nimport type { IStorageBase } from '../../core'\nimport type { DependencyInput } from './types'\n\nconst DEFAULT_DEPENDENCY_TIMEOUT = 30_000\n\n/**\n * Извлекает IStorageBase из любого формата зависимости:\n * - IStorageBase напрямую (есть waitForReady)\n * - { storage: IStorageBase } — обёртка\n * - готовый synapse — результат createSynapse (тоже имеет .storage)\n */\nfunction extractStorage(dep: any): IStorageBase<any> {\n if (typeof dep.waitForReady === 'function') return dep\n if (dep.storage && typeof dep.storage.waitForReady === 'function') return dep.storage\n throw new Error('Invalid dependency: expected IStorageBase or { storage: IStorageBase }')\n}\n\nexport async function waitForDependencies(dependencies: DependencyInput[] = [], timeoutMs: number = DEFAULT_DEPENDENCY_TIMEOUT): Promise<void> {\n if (dependencies.length === 0) {\n return\n }\n\n logError(`Waiting for ${dependencies.length} dependencies to be ready...`, '', null, 'warn')\n\n await Promise.all(\n dependencies.map(async (dependencyOrPromise, index) => {\n try {\n const resolved = await dependencyOrPromise\n const storage = extractStorage(resolved)\n const name = storage.name || 'unnamed'\n\n // initialize() идемпотентен — повторный вызов безопасен\n await storage.initialize()\n\n await Promise.race([\n storage.waitForReady(),\n new Promise<never>((_, reject) =>\n globalThis.setTimeout(() => reject(new Error(`Dependency ${index} (\"${name}\") timed out after ${timeoutMs}ms. Check that it initializes correctly.`)), timeoutMs),\n ),\n ])\n } catch (error) {\n handleOperationError(`createSynapse: dependency ${index} failed to initialize`, error)\n }\n }),\n )\n}\n"],"names":["handleOperationError","logError","DEFAULT_DEPENDENCY_TIMEOUT","extractStorage","dep","Error","waitForDependencies","dependencies","timeoutMs","Promise","dependencyOrPromise","index","resolved","storage","name","_","reject","globalThis","error"],"mappings":";;;AAAiF;AAIjF,MAAME,0BAA0BA,GAAG;AAEnC;;;;;CAKC,GACD,SAASC,cAAcA,CAACC,GAAQ;IAC9B,IAAI,OAAOA,IAAI,YAAY,KAAK,YAAY,OAAOA;IACnD,IAAIA,IAAI,OAAO,IAAI,OAAOA,IAAI,OAAO,CAAC,YAAY,KAAK,YAAY,OAAOA,IAAI,OAAO;IACrF,MAAM,IAAIC,MAAM;AAClB;AAEO,eAAeC,mBAAmBA,CAACC,eAAkC,EAAE,EAAEC,YAAoBN,0BAA0B;IAC5H,IAAIK,aAAa,MAAM,KAAK,GAAG;QAC7B;IACF;IAEAN,QAAQA,CAAC,CAAC,YAAY,EAAEM,aAAa,MAAM,CAAC,4BAA4B,CAAC,EAAE,IAAI,MAAM;IAErF,MAAME,QAAQ,GAAG,CACfF,aAAa,GAAG,CAAC,OAAOG,qBAAqBC;QAC3C,IAAI;YACF,MAAMC,WAAW,MAAMF;YACvB,MAAMG,UAAUV,cAAcA,CAACS;YAC/B,MAAME,OAAOD,QAAQ,IAAI,IAAI;YAE7B,wDAAwD;YACxD,MAAMA,QAAQ,UAAU;YAExB,MAAMJ,QAAQ,IAAI,CAAC;gBACjBI,QAAQ,YAAY;gBACpB,IAAIJ,QAAe,CAACM,GAAGC,SACrBC,WAAW,UAAU,CAAC,IAAMD,OAAO,IAAIX,MAAM,CAAC,WAAW,EAAEM,MAAM,GAAG,EAAEG,KAAK,mBAAmB,EAAEN,UAAU,wCAAwC,CAAC,IAAIA;aAE1J;QACH,EAAE,OAAOU,OAAO;YACdlB,oBAAoBA,CAAC,CAAC,0BAA0B,EAAEW,MAAM,qBAAqB,CAAC,EAAEO;QAClF;IACF;AAEJ"}
@@ -1,10 +1,13 @@
1
- import { IStorage } from '../core';
2
- import { AnySynapseStore } from '../utils';
3
- export interface SynapseAwaiter<TStore extends Record<string, any>, TStorage extends IStorage<TStore>, TSelectors, TActions> {
1
+ import { type IStorageBase } from '../core';
2
+ /** Минимальная форма готового synapse, нужная awaiter'у: доступ к storage. */
3
+ export interface AwaitableSynapse {
4
+ storage: IStorageBase<any>;
5
+ }
6
+ export interface SynapseAwaiter<TStore extends AwaitableSynapse> {
4
7
  /**
5
8
  * Возвращает Promise, который резолвится когда Synapse готов
6
9
  */
7
- waitForReady(): Promise<AnySynapseStore<TStore, TStorage, TSelectors, TActions>>;
10
+ waitForReady(): Promise<TStore>;
8
11
  /**
9
12
  * Проверяет, готов ли Synapse прямо сейчас (синхронно)
10
13
  */
@@ -12,13 +15,13 @@ export interface SynapseAwaiter<TStore extends Record<string, any>, TStorage ext
12
15
  /**
13
16
  * Получает store если он готов, иначе undefined
14
17
  */
15
- getStoreIfReady(): AnySynapseStore<TStore, TStorage, TSelectors, TActions> | undefined;
18
+ getStoreIfReady(): TStore | undefined;
16
19
  /**
17
20
  * Подписывается на событие готовности
18
21
  * @param callback Функция, вызываемая когда store становится готов
19
22
  * @returns Функция отписки
20
23
  */
21
- onReady(callback: (store: AnySynapseStore<TStore, TStorage, TSelectors, TActions>) => void): VoidFunction;
24
+ onReady(callback: (store: TStore) => void): VoidFunction;
22
25
  /**
23
26
  * Подписывается на ошибки инициализации
24
27
  * @param callback Функция, вызываемая при ошибке
@@ -39,8 +42,8 @@ export interface SynapseAwaiter<TStore extends Record<string, any>, TStorage ext
39
42
  destroy(): void;
40
43
  }
41
44
  /**
42
- * Создает фреймворк-независимую утилиту для ожидания готовности Synapse
43
- * Работает в любом JS окружении: Node.js, браузер, React Native, и т.д.
45
+ * Создает фреймворк-независимую утилиту для ожидания готовности Synapse.
46
+ * Принимает `SynapseModule`-handle (PromiseLike), Promise готового synapse либо сам
47
+ * готовый synapse. Работает в любом JS окружении: Node.js, браузер, React Native.
44
48
  */
45
- export declare function createSynapseAwaiter<TStore extends Record<string, any>, TStorage extends IStorage<TStore>, TSelectors, TActions>(synapseStorePromise: Promise<AnySynapseStore<TStore, TStorage, TSelectors, TActions>> | AnySynapseStore<TStore, TStorage, TSelectors, TActions>): SynapseAwaiter<TStore, TStorage, TSelectors, TActions>;
46
- //# sourceMappingURL=createSynapseAwaiter.d.ts.map
49
+ export declare function createSynapseAwaiter<TStore extends AwaitableSynapse>(synapseStorePromise: PromiseLike<TStore> | TStore): SynapseAwaiter<TStore>;
@@ -1,10 +1,30 @@
1
1
  import { handleCallbackError } from "../_utils/error-handling.util.js";
2
+ import { StorageStatus } from "../core/index.js";
2
3
 
3
4
 
4
5
 
6
+
7
+
8
+ /** Похож ли вход на thenable (handle/Promise), а не на уже готовый synapse. */ const isThenable = (value)=>typeof value?.then === 'function';
9
+ /**
10
+ * Синхронно извлекает уже готовый synapse из входа, если это возможно:
11
+ * - `SynapseModule`-handle, уже собранный (`getSnapshot()` отдаёт synapse);
12
+ * - напрямую переданный synapse с уже инициализированным (READY) хранилищем.
13
+ * Иначе `undefined` — резолв уйдёт в async-ветку. Это и есть SSR sync-fast-path.
14
+ */ const resolveSyncReady = (input)=>{
15
+ // Handle: синхронный снапшот уже собранного synapse (server после dehydrate / повторный mount).
16
+ const snapshot = input?.getSnapshot?.();
17
+ if (snapshot && snapshot.storage.initStatus.status === StorageStatus.READY) return snapshot;
18
+ // Напрямую переданный готовый synapse (не thenable) с READY-хранилищем.
19
+ if (!isThenable(input) && input.storage?.initStatus?.status === StorageStatus.READY) {
20
+ return input;
21
+ }
22
+ return undefined;
23
+ };
5
24
  /**
6
- * Создает фреймворк-независимую утилиту для ожидания готовности Synapse
7
- * Работает в любом JS окружении: Node.js, браузер, React Native, и т.д.
25
+ * Создает фреймворк-независимую утилиту для ожидания готовности Synapse.
26
+ * Принимает `SynapseModule`-handle (PromiseLike), Promise готового synapse либо сам
27
+ * готовый synapse. Работает в любом JS окружении: Node.js, браузер, React Native.
8
28
  */ function createSynapseAwaiter(synapseStorePromise) {
9
29
  let status = 'pending';
10
30
  let store;
@@ -12,10 +32,17 @@ import { handleCallbackError } from "../_utils/error-handling.util.js";
12
32
  let destroyed = false;
13
33
  const readyCallbacks = new Set();
14
34
  const errorCallbacks = new Set();
35
+ // SSR sync-fast-path: если стор уже готов синхронно — выставляем состояние ДО возврата,
36
+ // чтобы getStoreIfReady() отдавал его на первом синхронном рендере (сервер/гидрация).
37
+ const syncReady = resolveSyncReady(synapseStorePromise);
38
+ if (syncReady) {
39
+ store = syncReady;
40
+ status = 'ready';
41
+ }
15
42
  // Создаем Promise для инициализации хранилища
16
43
  const storeInitPromise = (async ()=>{
17
44
  try {
18
- const resolvedStore = await (synapseStorePromise instanceof Promise ? synapseStorePromise : Promise.resolve(synapseStorePromise));
45
+ const resolvedStore = await Promise.resolve(synapseStorePromise);
19
46
  // Дополнительно ждем готовности хранилища
20
47
  await resolvedStore.storage.waitForReady();
21
48
  // Если awaiter был уничтожен во время инициализации — не обновляем состояние
@@ -1 +1 @@
1
- {"version":3,"file":"utils/createSynapseAwaiter.js","sources":["../../src/utils/createSynapseAwaiter.ts"],"sourcesContent":["import { handleCallbackError } from '../_utils/error-handling.util'\nimport { IStorage } from '../core'\nimport { AnySynapseStore } from '../utils'\n\nexport interface SynapseAwaiter<TStore extends Record<string, any>, TStorage extends IStorage<TStore>, TSelectors, TActions> {\n /**\n * Возвращает Promise, который резолвится когда Synapse готов\n */\n waitForReady(): Promise<AnySynapseStore<TStore, TStorage, TSelectors, TActions>>\n\n /**\n * Проверяет, готов ли Synapse прямо сейчас (синхронно)\n */\n isReady(): boolean\n\n /**\n * Получает store если он готов, иначе undefined\n */\n getStoreIfReady(): AnySynapseStore<TStore, TStorage, TSelectors, TActions> | undefined\n\n /**\n * Подписывается на событие готовности\n * @param callback Функция, вызываемая когда store становится готов\n * @returns Функция отписки\n */\n onReady(callback: (store: AnySynapseStore<TStore, TStorage, TSelectors, TActions>) => void): VoidFunction\n\n /**\n * Подписывается на ошибки инициализации\n * @param callback Функция, вызываемая при ошибке\n * @returns Функция отписки\n */\n onError(callback: (error: Error) => void): VoidFunction\n\n /**\n * Получает текущий статус\n */\n getStatus(): 'pending' | 'ready' | 'error'\n\n /**\n * Получает ошибку если есть\n */\n getError(): Error | null\n\n /**\n * Очищает ресурсы\n */\n destroy(): void\n}\n\n/**\n * Создает фреймворк-независимую утилиту для ожидания готовности Synapse\n * Работает в любом JS окружении: Node.js, браузер, React Native, и т.д.\n */\nexport function createSynapseAwaiter<TStore extends Record<string, any>, TStorage extends IStorage<TStore>, TSelectors, TActions>(\n synapseStorePromise: Promise<AnySynapseStore<TStore, TStorage, TSelectors, TActions>> | AnySynapseStore<TStore, TStorage, TSelectors, TActions>,\n): SynapseAwaiter<TStore, TStorage, TSelectors, TActions> {\n let status: 'pending' | 'ready' | 'error' = 'pending'\n let store: AnySynapseStore<TStore, TStorage, TSelectors, TActions> | undefined\n let error: Error | null = null\n let destroyed = false\n\n const readyCallbacks = new Set<(store: AnySynapseStore<TStore, TStorage, TSelectors, TActions>) => void>()\n const errorCallbacks = new Set<(error: Error) => void>()\n\n // Создаем Promise для инициализации хранилища\n const storeInitPromise = (async () => {\n try {\n const resolvedStore = await (synapseStorePromise instanceof Promise ? synapseStorePromise : Promise.resolve(synapseStorePromise))\n\n // Дополнительно ждем готовности хранилища\n await resolvedStore.storage.waitForReady()\n\n // Если awaiter был уничтожен во время инициализации — не обновляем состояние\n if (destroyed) return resolvedStore\n\n store = resolvedStore\n status = 'ready'\n\n // Уведомляем всех подписчиков о готовности\n readyCallbacks.forEach((callback) => {\n try {\n callback(store!)\n } catch (err) {\n handleCallbackError('SynapseAwaiter: error in ready callback', err)\n }\n })\n\n return resolvedStore\n } catch (err) {\n const errorObj = err instanceof Error ? err : new Error(String(err))\n\n // Если awaiter был уничтожен во время инициализации — не обновляем состояние\n if (destroyed) throw errorObj\n\n error = errorObj\n status = 'error'\n\n // Уведомляем всех подписчиков об ошибке\n errorCallbacks.forEach((callback) => {\n try {\n callback(errorObj)\n } catch (callbackErr) {\n handleCallbackError('SynapseAwaiter: error in error callback', callbackErr)\n }\n })\n\n throw errorObj\n }\n })()\n\n return {\n waitForReady: () => storeInitPromise,\n\n isReady: () => status === 'ready',\n\n getStoreIfReady: () => store,\n\n onReady: (callback) => {\n // Если уже готов, вызываем callback немедленно\n if (status === 'ready' && store) {\n try {\n callback(store)\n } catch (err) {\n handleCallbackError('SynapseAwaiter: error in immediate ready callback', err)\n }\n } else {\n // Иначе добавляем в список ожидания\n readyCallbacks.add(callback)\n }\n\n return () => {\n readyCallbacks.delete(callback)\n }\n },\n\n onError: (callback) => {\n // Если уже есть ошибка, вызываем callback немедленно\n if (status === 'error' && error) {\n try {\n callback(error)\n } catch (err) {\n handleCallbackError('SynapseAwaiter: error in immediate error callback', err)\n }\n } else {\n // Иначе добавляем в список ожидания\n errorCallbacks.add(callback)\n }\n\n return () => {\n errorCallbacks.delete(callback)\n }\n },\n\n getStatus: () => status,\n\n getError: () => error,\n\n destroy: () => {\n destroyed = true\n readyCallbacks.clear()\n errorCallbacks.clear()\n store = undefined\n error = null\n status = 'pending'\n },\n }\n}\n"],"names":["handleCallbackError","createSynapseAwaiter","synapseStorePromise","status","store","error","destroyed","readyCallbacks","Set","errorCallbacks","storeInitPromise","resolvedStore","Promise","callback","err","errorObj","Error","String","callbackErr","undefined"],"mappings":";;;AAAmE;AAkDnE;;;CAGC,GACM,SAASC,oBAAoBA,CAClCC,mBAA+I;IAE/I,IAAIC,SAAwC;IAC5C,IAAIC;IACJ,IAAIC,QAAsB;IAC1B,IAAIC,YAAY;IAEhB,MAAMC,iBAAiB,IAAIC;IAC3B,MAAMC,iBAAiB,IAAID;IAE3B,8CAA8C;IAC9C,MAAME,mBAAoB;QACxB,IAAI;YACF,MAAMC,gBAAgB,MAAOT,CAAAA,+BAA+BU,UAAUV,sBAAsBU,QAAQ,OAAO,CAACV,oBAAmB;YAE/H,0CAA0C;YAC1C,MAAMS,cAAc,OAAO,CAAC,YAAY;YAExC,6EAA6E;YAC7E,IAAIL,WAAW,OAAOK;YAEtBP,QAAQO;YACRR,SAAS;YAET,2CAA2C;YAC3CI,eAAe,OAAO,CAAC,CAACM;gBACtB,IAAI;oBACFA,SAAST;gBACX,EAAE,OAAOU,KAAK;oBACZd,mBAAmBA,CAAC,2CAA2Cc;gBACjE;YACF;YAEA,OAAOH;QACT,EAAE,OAAOG,KAAK;YACZ,MAAMC,WAAWD,eAAeE,QAAQF,MAAM,IAAIE,MAAMC,OAAOH;YAE/D,6EAA6E;YAC7E,IAAIR,WAAW,MAAMS;YAErBV,QAAQU;YACRZ,SAAS;YAET,wCAAwC;YACxCM,eAAe,OAAO,CAAC,CAACI;gBACtB,IAAI;oBACFA,SAASE;gBACX,EAAE,OAAOG,aAAa;oBACpBlB,mBAAmBA,CAAC,2CAA2CkB;gBACjE;YACF;YAEA,MAAMH;QACR;IACF;IAEA,OAAO;QACL,cAAc,IAAML;QAEpB,SAAS,IAAMP,WAAW;QAE1B,iBAAiB,IAAMC;QAEvB,SAAS,CAACS;YACR,+CAA+C;YAC/C,IAAIV,WAAW,WAAWC,OAAO;gBAC/B,IAAI;oBACFS,SAAST;gBACX,EAAE,OAAOU,KAAK;oBACZd,mBAAmBA,CAAC,qDAAqDc;gBAC3E;YACF,OAAO;gBACL,oCAAoC;gBACpCP,eAAe,GAAG,CAACM;YACrB;YAEA,OAAO;gBACLN,eAAe,MAAM,CAACM;YACxB;QACF;QAEA,SAAS,CAACA;YACR,qDAAqD;YACrD,IAAIV,WAAW,WAAWE,OAAO;gBAC/B,IAAI;oBACFQ,SAASR;gBACX,EAAE,OAAOS,KAAK;oBACZd,mBAAmBA,CAAC,qDAAqDc;gBAC3E;YACF,OAAO;gBACL,oCAAoC;gBACpCL,eAAe,GAAG,CAACI;YACrB;YAEA,OAAO;gBACLJ,eAAe,MAAM,CAACI;YACxB;QACF;QAEA,WAAW,IAAMV;QAEjB,UAAU,IAAME;QAEhB,SAAS;YACPC,YAAY;YACZC,eAAe,KAAK;YACpBE,eAAe,KAAK;YACpBL,QAAQe;YACRd,QAAQ;YACRF,SAAS;QACX;IACF;AACF"}
1
+ {"version":3,"file":"utils/createSynapseAwaiter.js","sources":["../../src/utils/createSynapseAwaiter.ts"],"sourcesContent":["import { handleCallbackError } from '../_utils/error-handling.util'\nimport { type IStorageBase, StorageStatus } from '../core'\n\n/** Минимальная форма готового synapse, нужная awaiter'у: доступ к storage. */\nexport interface AwaitableSynapse {\n storage: IStorageBase<any>\n}\n\n/** Похож ли вход на thenable (handle/Promise), а не на уже готовый synapse. */\nconst isThenable = (value: unknown): value is PromiseLike<unknown> => typeof (value as { then?: unknown } | null)?.then === 'function'\n\n/**\n * Синхронно извлекает уже готовый synapse из входа, если это возможно:\n * - `SynapseModule`-handle, уже собранный (`getSnapshot()` отдаёт synapse);\n * - напрямую переданный synapse с уже инициализированным (READY) хранилищем.\n * Иначе `undefined` — резолв уйдёт в async-ветку. Это и есть SSR sync-fast-path.\n */\nconst resolveSyncReady = <TStore extends AwaitableSynapse>(input: PromiseLike<TStore> | TStore): TStore | undefined => {\n // Handle: синхронный снапшот уже собранного synapse (server после dehydrate / повторный mount).\n const snapshot = (input as { getSnapshot?: () => TStore | undefined } | null)?.getSnapshot?.()\n if (snapshot && snapshot.storage.initStatus.status === StorageStatus.READY) return snapshot\n\n // Напрямую переданный готовый synapse (не thenable) с READY-хранилищем.\n if (!isThenable(input) && (input as TStore).storage?.initStatus?.status === StorageStatus.READY) {\n return input as TStore\n }\n\n return undefined\n}\n\nexport interface SynapseAwaiter<TStore extends AwaitableSynapse> {\n /**\n * Возвращает Promise, который резолвится когда Synapse готов\n */\n waitForReady(): Promise<TStore>\n\n /**\n * Проверяет, готов ли Synapse прямо сейчас (синхронно)\n */\n isReady(): boolean\n\n /**\n * Получает store если он готов, иначе undefined\n */\n getStoreIfReady(): TStore | undefined\n\n /**\n * Подписывается на событие готовности\n * @param callback Функция, вызываемая когда store становится готов\n * @returns Функция отписки\n */\n onReady(callback: (store: TStore) => void): VoidFunction\n\n /**\n * Подписывается на ошибки инициализации\n * @param callback Функция, вызываемая при ошибке\n * @returns Функция отписки\n */\n onError(callback: (error: Error) => void): VoidFunction\n\n /**\n * Получает текущий статус\n */\n getStatus(): 'pending' | 'ready' | 'error'\n\n /**\n * Получает ошибку если есть\n */\n getError(): Error | null\n\n /**\n * Очищает ресурсы\n */\n destroy(): void\n}\n\n/**\n * Создает фреймворк-независимую утилиту для ожидания готовности Synapse.\n * Принимает `SynapseModule`-handle (PromiseLike), Promise готового synapse либо сам\n * готовый synapse. Работает в любом JS окружении: Node.js, браузер, React Native.\n */\nexport function createSynapseAwaiter<TStore extends AwaitableSynapse>(synapseStorePromise: PromiseLike<TStore> | TStore): SynapseAwaiter<TStore> {\n let status: 'pending' | 'ready' | 'error' = 'pending'\n let store: TStore | undefined\n let error: Error | null = null\n let destroyed = false\n\n const readyCallbacks = new Set<(store: TStore) => void>()\n const errorCallbacks = new Set<(error: Error) => void>()\n\n // SSR sync-fast-path: если стор уже готов синхронно — выставляем состояние ДО возврата,\n // чтобы getStoreIfReady() отдавал его на первом синхронном рендере (сервер/гидрация).\n const syncReady = resolveSyncReady(synapseStorePromise)\n if (syncReady) {\n store = syncReady\n status = 'ready'\n }\n\n // Создаем Promise для инициализации хранилища\n const storeInitPromise = (async () => {\n try {\n const resolvedStore = await Promise.resolve(synapseStorePromise)\n\n // Дополнительно ждем готовности хранилища\n await resolvedStore.storage.waitForReady()\n\n // Если awaiter был уничтожен во время инициализации — не обновляем состояние\n if (destroyed) return resolvedStore\n\n store = resolvedStore\n status = 'ready'\n\n // Уведомляем всех подписчиков о готовности\n readyCallbacks.forEach((callback) => {\n try {\n callback(store!)\n } catch (err) {\n handleCallbackError('SynapseAwaiter: error in ready callback', err)\n }\n })\n\n return resolvedStore\n } catch (err) {\n const errorObj = err instanceof Error ? err : new Error(String(err))\n\n // Если awaiter был уничтожен во время инициализации — не обновляем состояние\n if (destroyed) throw errorObj\n\n error = errorObj\n status = 'error'\n\n // Уведомляем всех подписчиков об ошибке\n errorCallbacks.forEach((callback) => {\n try {\n callback(errorObj)\n } catch (callbackErr) {\n handleCallbackError('SynapseAwaiter: error in error callback', callbackErr)\n }\n })\n\n throw errorObj\n }\n })()\n\n return {\n waitForReady: () => storeInitPromise,\n\n isReady: () => status === 'ready',\n\n getStoreIfReady: () => store,\n\n onReady: (callback) => {\n // Если уже готов, вызываем callback немедленно\n if (status === 'ready' && store) {\n try {\n callback(store)\n } catch (err) {\n handleCallbackError('SynapseAwaiter: error in immediate ready callback', err)\n }\n } else {\n // Иначе добавляем в список ожидания\n readyCallbacks.add(callback)\n }\n\n return () => {\n readyCallbacks.delete(callback)\n }\n },\n\n onError: (callback) => {\n // Если уже есть ошибка, вызываем callback немедленно\n if (status === 'error' && error) {\n try {\n callback(error)\n } catch (err) {\n handleCallbackError('SynapseAwaiter: error in immediate error callback', err)\n }\n } else {\n // Иначе добавляем в список ожидания\n errorCallbacks.add(callback)\n }\n\n return () => {\n errorCallbacks.delete(callback)\n }\n },\n\n getStatus: () => status,\n\n getError: () => error,\n\n destroy: () => {\n destroyed = true\n readyCallbacks.clear()\n errorCallbacks.clear()\n store = undefined\n error = null\n status = 'pending'\n },\n }\n}\n"],"names":["handleCallbackError","StorageStatus","isThenable","value","resolveSyncReady","input","snapshot","undefined","createSynapseAwaiter","synapseStorePromise","status","store","error","destroyed","readyCallbacks","Set","errorCallbacks","syncReady","storeInitPromise","resolvedStore","Promise","callback","err","errorObj","Error","String","callbackErr"],"mappings":";;;;;AAAmE;AACT;AAO1D,6EAA6E,GAC7E,MAAME,UAAUA,GAAG,CAACC,QAAkD,OAAQA,OAAqC,SAAS;AAE5H;;;;;CAKC,GACD,MAAMC,gBAAgBA,GAAG,CAAkCC;IACzD,gGAAgG;IAChG,MAAMC,WAAYD,OAA6D;IAC/E,IAAIC,YAAYA,SAAS,OAAO,CAAC,UAAU,CAAC,MAAM,KAAKL,mBAAmB,EAAE,OAAOK;IAEnF,wEAAwE;IACxE,IAAI,CAACJ,UAAUA,CAACG,UAAWA,MAAiB,OAAO,EAAE,YAAY,WAAWJ,mBAAmB,EAAE;QAC/F,OAAOI;IACT;IAEA,OAAOE;AACT;AAgDA;;;;CAIC,GACM,SAASC,oBAAoBA,CAAkCC,mBAAiD;IACrH,IAAIC,SAAwC;IAC5C,IAAIC;IACJ,IAAIC,QAAsB;IAC1B,IAAIC,YAAY;IAEhB,MAAMC,iBAAiB,IAAIC;IAC3B,MAAMC,iBAAiB,IAAID;IAE3B,wFAAwF;IACxF,sFAAsF;IACtF,MAAME,YAAYb,gBAAgBA,CAACK;IACnC,IAAIQ,WAAW;QACbN,QAAQM;QACRP,SAAS;IACX;IAEA,8CAA8C;IAC9C,MAAMQ,mBAAoB;QACxB,IAAI;YACF,MAAMC,gBAAgB,MAAMC,QAAQ,OAAO,CAACX;YAE5C,0CAA0C;YAC1C,MAAMU,cAAc,OAAO,CAAC,YAAY;YAExC,6EAA6E;YAC7E,IAAIN,WAAW,OAAOM;YAEtBR,QAAQQ;YACRT,SAAS;YAET,2CAA2C;YAC3CI,eAAe,OAAO,CAAC,CAACO;gBACtB,IAAI;oBACFA,SAASV;gBACX,EAAE,OAAOW,KAAK;oBACZtB,mBAAmBA,CAAC,2CAA2CsB;gBACjE;YACF;YAEA,OAAOH;QACT,EAAE,OAAOG,KAAK;YACZ,MAAMC,WAAWD,eAAeE,QAAQF,MAAM,IAAIE,MAAMC,OAAOH;YAE/D,6EAA6E;YAC7E,IAAIT,WAAW,MAAMU;YAErBX,QAAQW;YACRb,SAAS;YAET,wCAAwC;YACxCM,eAAe,OAAO,CAAC,CAACK;gBACtB,IAAI;oBACFA,SAASE;gBACX,EAAE,OAAOG,aAAa;oBACpB1B,mBAAmBA,CAAC,2CAA2C0B;gBACjE;YACF;YAEA,MAAMH;QACR;IACF;IAEA,OAAO;QACL,cAAc,IAAML;QAEpB,SAAS,IAAMR,WAAW;QAE1B,iBAAiB,IAAMC;QAEvB,SAAS,CAACU;YACR,+CAA+C;YAC/C,IAAIX,WAAW,WAAWC,OAAO;gBAC/B,IAAI;oBACFU,SAASV;gBACX,EAAE,OAAOW,KAAK;oBACZtB,mBAAmBA,CAAC,qDAAqDsB;gBAC3E;YACF,OAAO;gBACL,oCAAoC;gBACpCR,eAAe,GAAG,CAACO;YACrB;YAEA,OAAO;gBACLP,eAAe,MAAM,CAACO;YACxB;QACF;QAEA,SAAS,CAACA;YACR,qDAAqD;YACrD,IAAIX,WAAW,WAAWE,OAAO;gBAC/B,IAAI;oBACFS,SAAST;gBACX,EAAE,OAAOU,KAAK;oBACZtB,mBAAmBA,CAAC,qDAAqDsB;gBAC3E;YACF,OAAO;gBACL,oCAAoC;gBACpCN,eAAe,GAAG,CAACK;YACrB;YAEA,OAAO;gBACLL,eAAe,MAAM,CAACK;YACxB;QACF;QAEA,WAAW,IAAMX;QAEjB,UAAU,IAAME;QAEhB,SAAS;YACPC,YAAY;YACZC,eAAe,KAAK;YACpBE,eAAe,KAAK;YACpBL,QAAQJ;YACRK,QAAQ;YACRF,SAAS;QACX;IACF;AACF"}
@@ -0,0 +1,6 @@
1
+ import type { SynapseModule } from './createSynapse/index';
2
+ export interface DehydrateModuleOptions<TState extends Record<string, any>> {
3
+ state?: Partial<TState>;
4
+ ssr?: boolean;
5
+ }
6
+ export declare const dehydrateModule: <TState extends Record<string, any>, TDispatcher, TSelectors>(synapseModule: SynapseModule<TState, TDispatcher, TSelectors>, options?: DehydrateModuleOptions<TState>) => Promise<TState>;
@@ -0,0 +1,43 @@
1
+ import { StorageStatus } from "../core/index.js";
2
+
3
+
4
+
5
+ // Server-safe дегидрация модуля: сериализуемый снапшот стора для пропа dehydratedState.
6
+ // В отличие от замыкания dehydrate из createSynapseCtx — без React-зависимостей, импортируется
7
+ // в серверный (RSC / 'server only') модуль.
8
+ const dehydrateModule = async (synapseModule, options)=>{
9
+ const { state, ssr = false } = options ?? {};
10
+ // Per-request форк: собственный стор, не пересекается с другими запросами.
11
+ // ready({ withEffects: false }) — собираем стор для снапшота БЕЗ запуска эффектов: на
12
+ // сервере они не нужны и потенциально вредны (см. ready()/buildSynapse withEffects).
13
+ const fork = synapseModule.fork();
14
+ const forked = await fork.ready({
15
+ withEffects: false
16
+ });
17
+ // hydrate заменяет состояние целиком, поэтому мерджим поверх текущего, иначе частичный
18
+ // state занулил бы непереданные поля. await покрывает и async-сторы (IndexedDB), иначе
19
+ // getStateSync() снял бы снапшот до завершения гидрации.
20
+ if (state) await forked.storage.hydrate({
21
+ ...forked.storage.getStateSync(),
22
+ ...state
23
+ });
24
+ const snapshot = forked.storage.getStateSync();
25
+ await fork.destroy();
26
+ if (ssr) {
27
+ // Прогрев main handle тоже через ready({ withEffects: false }): серверу нужны только
28
+ // READY-storage + state для resolveSyncReady → getStoreIfReady → seedHydration. Эффекты
29
+ // не стартуем — main handle при ssr живёт между запросами и не destroy-ится, его эффекты
30
+ // «висели» бы навсегда.
31
+ const main = await synapseModule.ready({
32
+ withEffects: false
33
+ });
34
+ if (main.storage.initStatus.status === StorageStatus.READY) {
35
+ await main.storage.hydrate(snapshot);
36
+ }
37
+ }
38
+ return snapshot;
39
+ };
40
+
41
+ export { dehydrateModule };
42
+
43
+ //# sourceMappingURL=dehydrateModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils/dehydrateModule.js","sources":["../../src/utils/dehydrateModule.ts"],"sourcesContent":["import { StorageStatus } from '../core'\nimport type { SynapseModule } from './createSynapse/index'\n\nexport interface DehydrateModuleOptions<TState extends Record<string, any>> {\n // Серверные данные под запрос. Накладываются поверх initialState форка shallow-мерджем\n // верхнего уровня, поэтому можно передавать только изменённые поля. Вложенные объекты\n // заменяются целиком: правишь подполе api.x — передавай весь api.\n state?: Partial<TState>\n // Прогреть основной handle снапшотом для синхронного SSR-рендера. Только для синхронно\n // готовых (READY) сторов (Memory/LocalStorage); у async-сторов (IndexedDB) синхронного\n // серверного рендера нет — прогрев пропускается.\n ssr?: boolean\n}\n\n// Server-safe дегидрация модуля: сериализуемый снапшот стора для пропа dehydratedState.\n// В отличие от замыкания dehydrate из createSynapseCtx — без React-зависимостей, импортируется\n// в серверный (RSC / 'server only') модуль.\nexport const dehydrateModule = async <TState extends Record<string, any>, TDispatcher, TSelectors>(\n synapseModule: SynapseModule<TState, TDispatcher, TSelectors>,\n options?: DehydrateModuleOptions<TState>,\n): Promise<TState> => {\n const { state, ssr = false } = options ?? {}\n\n // Per-request форк: собственный стор, не пересекается с другими запросами.\n // ready({ withEffects: false }) — собираем стор для снапшота БЕЗ запуска эффектов: на\n // сервере они не нужны и потенциально вредны (см. ready()/buildSynapse withEffects).\n const fork = synapseModule.fork()\n const forked = await fork.ready({ withEffects: false })\n // hydrate заменяет состояние целиком, поэтому мерджим поверх текущего, иначе частичный\n // state занулил бы непереданные поля. await покрывает и async-сторы (IndexedDB), иначе\n // getStateSync() снял бы снапшот до завершения гидрации.\n if (state) await forked.storage.hydrate({ ...forked.storage.getStateSync(), ...state })\n const snapshot = forked.storage.getStateSync()\n await fork.destroy()\n\n if (ssr) {\n // Прогрев main handle тоже через ready({ withEffects: false }): серверу нужны только\n // READY-storage + state для resolveSyncReady → getStoreIfReady → seedHydration. Эффекты\n // не стартуем — main handle при ssr живёт между запросами и не destroy-ится, его эффекты\n // «висели» бы навсегда.\n const main = await synapseModule.ready({ withEffects: false })\n if (main.storage.initStatus.status === StorageStatus.READY) {\n await main.storage.hydrate(snapshot)\n }\n }\n\n return snapshot\n}\n"],"names":["StorageStatus","dehydrateModule","synapseModule","options","state","ssr","fork","forked","snapshot","main"],"mappings":";;;AAAuC;AAcvC,wFAAwF;AACxF,+FAA+F;AAC/F,4CAA4C;AACrC,MAAMC,eAAeA,GAAG,OAC7BC,eACAC;IAEA,MAAM,EAAEC,KAAK,EAAEC,MAAM,KAAK,EAAE,GAAGF,WAAW,CAAC;IAE3C,2EAA2E;IAC3E,sFAAsF;IACtF,qFAAqF;IACrF,MAAMG,OAAOJ,cAAc,IAAI;IAC/B,MAAMK,SAAS,MAAMD,KAAK,KAAK,CAAC;QAAE,aAAa;IAAM;IACrD,uFAAuF;IACvF,uFAAuF;IACvF,yDAAyD;IACzD,IAAIF,OAAO,MAAMG,OAAO,OAAO,CAAC,OAAO,CAAC;QAAE,GAAGA,OAAO,OAAO,CAAC,YAAY,EAAE;QAAE,GAAGH,KAAK;IAAC;IACrF,MAAMI,WAAWD,OAAO,OAAO,CAAC,YAAY;IAC5C,MAAMD,KAAK,OAAO;IAElB,IAAID,KAAK;QACP,qFAAqF;QACrF,wFAAwF;QACxF,yFAAyF;QACzF,wBAAwB;QACxB,MAAMI,OAAO,MAAMP,cAAc,KAAK,CAAC;YAAE,aAAa;QAAM;QAC5D,IAAIO,KAAK,OAAO,CAAC,UAAU,CAAC,MAAM,KAAKT,mBAAmB,EAAE;YAC1D,MAAMS,KAAK,OAAO,CAAC,OAAO,CAACD;QAC7B;IACF;IAEA,OAAOA;AACT,EAAC"}
@@ -1,4 +1,4 @@
1
1
  export { createEventBus, type EventBusConfig, type EventBusEvent, type EventBusState } from './createEventBus';
2
- export { type AnySynapseStore, createSynapse, type SynapseStoreBasic, type SynapseStoreWithDispatcher, type SynapseStoreWithEffects } from './createSynapse/index';
3
- export { createSynapseAwaiter } from './createSynapseAwaiter';
4
- //# sourceMappingURL=index.d.ts.map
2
+ export { createSynapse, type Synapse, type SynapseConfig, type SynapseModule } from './createSynapse/index';
3
+ export { type AwaitableSynapse, createSynapseAwaiter, type SynapseAwaiter } from './createSynapseAwaiter';
4
+ export { dehydrateModule, type DehydrateModuleOptions } from './dehydrateModule';
@@ -5,8 +5,11 @@
5
5
 
6
6
 
7
7
 
8
+
9
+
8
10
  export { createEventBus } from "./createEventBus.js";
9
11
  export { createSynapse } from "./createSynapse/index.js";
10
12
  export { createSynapseAwaiter } from "./createSynapseAwaiter.js";
13
+ export { dehydrateModule } from "./dehydrateModule.js";
11
14
 
12
15
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils/index.js","sources":["../../src/utils/index.ts"],"sourcesContent":["export { createEventBus, type EventBusConfig, type EventBusEvent, type EventBusState } from './createEventBus'\nexport { type AnySynapseStore, createSynapse, type SynapseStoreBasic, type SynapseStoreWithDispatcher, type SynapseStoreWithEffects } from './createSynapse/index'\nexport { createSynapseAwaiter } from './createSynapseAwaiter'\n"],"names":["createEventBus","createSynapse","createSynapseAwaiter"],"mappings":";;;AAA8G;AACoD;AACrG"}
1
+ {"version":3,"file":"utils/index.js","sources":["../../src/utils/index.ts"],"sourcesContent":["export { createEventBus, type EventBusConfig, type EventBusEvent, type EventBusState } from './createEventBus'\nexport { createSynapse, type Synapse, type SynapseConfig, type SynapseModule } from './createSynapse/index'\nexport { type AwaitableSynapse, createSynapseAwaiter, type SynapseAwaiter } from './createSynapseAwaiter'\nexport { dehydrateModule, type DehydrateModuleOptions } from './dehydrateModule'\n"],"names":["createEventBus","createSynapse","createSynapseAwaiter","dehydrateModule"],"mappings":";;;;AAA8G;AACH;AACF;AACzB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "synapse-storage",
3
- "version": "4.1.1",
3
+ "version": "5.0.3",
4
4
  "description": "Набор инструментов для управления состоянием и апи-запросами",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -33,6 +33,9 @@
33
33
  "scripts": {
34
34
  "build": "rslib build",
35
35
  "watch": "rslib build --watch",
36
+ "test": "vitest run",
37
+ "test:watch": "vitest",
38
+ "test:coverage": "vitest run --coverage",
36
39
  "lint": "eslint src --ext .ts",
37
40
  "lint:fix": "eslint --config eslint.config.mjs src --ext .ts,.tsx --fix",
38
41
  "format": "prettier --write \"src/**/*.ts\"",
@@ -91,6 +94,9 @@
91
94
  "@eslint/js": "^9.27.0",
92
95
  "@humanwhocodes/retry": "^0.4.3",
93
96
  "@rslib/core": "0.21.5",
97
+ "@testing-library/dom": "^10.4.1",
98
+ "@testing-library/jest-dom": "^6.6.3",
99
+ "@testing-library/react": "^16.3.0",
94
100
  "@types/node": "^22.15.18",
95
101
  "@types/react": "^19.1.0",
96
102
  "@types/react-dom": "^19.1.0",
@@ -101,11 +107,15 @@
101
107
  "eslint-plugin-import": "^2.31.0",
102
108
  "eslint-plugin-prettier": "^5.4.0",
103
109
  "eslint-plugin-simple-import-sort": "^12.1.1",
110
+ "fake-indexeddb": "^6.0.1",
111
+ "jsdom": "^26.1.0",
104
112
  "prettier": "^3.5.3",
105
113
  "react": "^19.1.0",
106
114
  "react-dom": "^19.1.0",
107
115
  "rxjs": "^7.8.0",
108
116
  "typescript": "^5.8.3",
109
- "typescript-eslint": "^8.32.1"
117
+ "typescript-eslint": "^8.32.1",
118
+ "vitest": "^3.2.4",
119
+ "@vitest/coverage-v8": "^3.2.4"
110
120
  }
111
121
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"chunk.util.d.ts","sourceRoot":"","sources":["../../src/_utils/chunk.util.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,GAAE,MAAU,GAAG,CAAC,EAAE,EAAE,CAe5D"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"deepMerge.util.d.ts","sourceRoot":"","sources":["../../src/_utils/deepMerge.util.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,GAAI,QAAQ,GAAG,EAAE,QAAQ,GAAG,QAcjD,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"error-handling.util.d.ts","sourceRoot":"","sources":["../../src/_utils/error-handling.util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAA;AAGhE;;;GAGG;AACH,qBAAa,YAAa,SAAQ,KAAK;aAGnB,OAAO,CAAC,EAAE,MAAM;aAChB,KAAK,CAAC,EAAE,OAAO;gBAF/B,OAAO,EAAE,MAAM,EACC,OAAO,CAAC,EAAE,MAAM,YAAA,EAChB,KAAK,CAAC,EAAE,OAAO,YAAA;CAKlC;AAED;;;;;;;GAOG;AAEH,KAAK,SAAS,GAAG,OAAO,GAAG,MAAM,CAAA;AAEjC;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,EAAE,KAAK,GAAE,SAAmB,GAAG,IAAI,CAOnH;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,KAAK,CAGpG;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,CAElG;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,CAEjG;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,SAAS,CAOpG;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,CAErG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"flatMap.util.d.ts","sourceRoot":"","sources":["../../src/_utils/flatMap.util.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAczG"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/_utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,cAAc,uBAAuB,CAAA;AACrC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,uBAAuB,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger-console.util.d.ts","sourceRoot":"","sources":["../../src/_utils/logger-console.util.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa;mBACT,GAAG,EAAE;oBACJ,GAAG,EAAE;qBACJ,GAAG,EAAE;qBACL,GAAG,EAAE;;8BAEI,GAAG,EAAE;CAChC,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"api.module.d.ts","sourceRoot":"","sources":["../../src/api/api.module.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACpG,OAAO,EAAE,cAAc,EAAE,QAAQ,IAAI,YAAY,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AACrG,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAInE,KAAK,eAAe,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;AAGjF,KAAK,YAAY,CAAC,WAAW,IAAI;KAC9B,CAAC,IAAI,MAAM,eAAe,CAAC,WAAW,CAAC,GAAG,YAAY,CAAC,iBAAiB,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAChK,CAAA;AAED,qBAAa,SAAS,CAAC,WAAW,SAAS,CAAC,MAAM,EAAE,cAAc,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACtH,yBAAyB;IACzB,OAAO,CAAC,YAAY,CAAe;IAEnC,qCAAqC;IACrC,OAAO,CAAC,YAAY,CAAQ;IAE5B,2EAA2E;IAC3E,OAAO,CAAC,YAAY,CAA6B;IAEjD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA+C;IAEnF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAiC;IAEnE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqC;IAErE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAmC;IAEnE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAiC;IAEnE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAa;IAE7C,wBAAwB;IACxB,OAAO,CAAC,SAAS,CAEX;gBAEM,OAAO,EAAE,IAAI,CAAC,sBAAsB,EAAE,WAAW,CAAC,GAAG;QAAE,SAAS,EAAE,WAAW,CAAA;KAAE;IAU9E,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAQpB,OAAO;YAgBP,mBAAmB;IAqBjC,OAAO,CAAC,iBAAiB;IAMzB;;;OAGG;IACI,YAAY,IAAI,YAAY,CAAC,WAAW,CAAC;IAKhD;;;;;;OAMG;IACU,OAAO,CAAC,CAAC,SAAS,MAAM,eAAe,CAAC,WAAW,CAAC,GAAG,MAAM,EACxE,YAAY,EAAE,CAAC,EACf,MAAM,EAAE,iBAAiB,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAC1D,OAAO,CAAC,EAAE,YAAY,GACrB,OAAO,CAAC,WAAW,CAAC,iBAAiB,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAmBrE,OAAO;CAerB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"endpoint.d.ts","sourceRoot":"","sources":["../../../src/api/components/endpoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAe,MAAM,wBAAwB,CAAA;AAC5E,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,qBAAqB,EAAgB,MAAM,6BAA6B,CAAA;AAC1I,OAAO,EAAE,YAAY,EAAe,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAMjF,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAK9C,MAAM,WAAW,oBAAoB,CAAC,aAAa,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,eAAe;IAC9F,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,YAAY,CAAA;IAC1B,MAAM,EAAE,cAAc,CAAC,aAAa,EAAE,eAAe,CAAC,CAAA;IACtD,mBAAmB,EAAE,sBAAsB,CAAC,qBAAqB,CAAC,CAAA;IAClE,iBAAiB,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAA;IAClD,iBAAiB,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAA;IAClD,eAAe,EAAE,sBAAsB,CAAC,WAAW,CAAC,CAAA;CACrD;AAED,qBAAa,aAAa,CAAC,aAAa,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,eAAe,CAAE,YAAW,YAAY,CAAC,aAAa,EAAE,eAAe,CAAC;IAC5I,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA4C;IAEhF,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAI;IAEvB,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,CAKzB;IAED,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAc;IAC3C,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAgD;IACtF,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAA+C;IACnF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAiC;IACnE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqC;IAErE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmC;IAEjE,mEAAmE;IACnE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAU;IAE3C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyC;IAExE,qEAAqE;IACrE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkE;gBAEvF,OAAO,EAAE,oBAAoB,CAAC,aAAa,EAAE,eAAe,CAAC;IA4BlE,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,qBAAqB,CAAC,eAAe,CAAC;IA2FrG;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;OAEG;YACW,cAAc;IA0H5B;;OAEG;YACW,YAAY;IAsC1B;;OAEG;YACW,cAAc;IA+C5B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAW1B,SAAS,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,WAAW;IAepD,KAAK;IASX,OAAO;CAIf"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"query-storage.d.ts","sourceRoot":"","sources":["../../../src/api/components/query-storage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAErD,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAEvD;;;GAGG;AACH,qBAAa,YAAY;IA0BrB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IA1BpC,0BAA0B;IAC1B,OAAO,CAAC,OAAO,CAAwB;IAEvC,OAAO,CAAC,eAAe,CAAuC;IAE9D,gEAAgE;IAChE,OAAO,CAAC,QAAQ,CAAiC;IAEjD,kCAAkC;IAClC,OAAO,CAAC,mBAAmB,CAO1B;IAED,qCAAqC;IACrC,OAAO,CAAC,YAAY,CAAQ;IAE5B,mCAAmC;IACnC,OAAO,CAAC,YAAY,CAA6B;gBAG9B,eAAe,EAAE,aAAa,EAC9B,iBAAiB,EAAE,sBAAsB,CAAC,OAAO,CAAC;IAGxD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAQ1B,aAAa;YAiBb,aAAa;IAY3B,OAAO,CAAC,oBAAoB;IAiB5B;;OAEG;IACI,UAAU,IAAI,QAAQ,GAAG,IAAI;IAIpC;;;;OAIG;IACI,cAAc,CAAC,WAAW,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW;IAIpG;;OAEG;IACU,eAAe,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAuBjF;;;;;;;OAOG;IACU,eAAe,CAAC,CAAC,EAAE,WAAW,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACrE,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE,CAAC,EACP,YAAY,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,EAC3C,WAAW,EAAE,WAAW,EACxB,IAAI,EAAE,MAAM,EAAE,GACb,OAAO,CAAC,IAAI,CAAC;IA2BhB;;;;;;OAMG;IACI,WAAW,CAAC,cAAc,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,MAAM;IAiB3F;;;;OAIG;IACI,iBAAiB,CAAC,cAAc,CAAC,EAAE,cAAc;;;;oBAvLpD,CAAN;;;;IA2ME;;;OAGG;IACU,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBjE;;;OAGG;IACU,eAAe,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAYrE;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAerC;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBrC;;;OAGG;YACW,eAAe;IA4B7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;CAU9B"}
@@ -1,83 +0,0 @@
1
- import { ApiClient } from './api.module';
2
- export interface PokemonListResponse {
3
- count: number;
4
- next: string | null;
5
- previous: string | null;
6
- results: {
7
- name: string;
8
- url: string;
9
- }[];
10
- }
11
- export interface PokemonDetails {
12
- id: number;
13
- name: string;
14
- height: number;
15
- weight: number;
16
- sprites: {
17
- front_default: string;
18
- back_default: string;
19
- other?: {
20
- 'official-artwork'?: {
21
- front_default: string;
22
- };
23
- };
24
- };
25
- types: {
26
- slot: number;
27
- type: {
28
- name: string;
29
- url: string;
30
- };
31
- }[];
32
- abilities: {
33
- ability: {
34
- name: string;
35
- url: string;
36
- };
37
- is_hidden: boolean;
38
- slot: number;
39
- }[];
40
- stats: {
41
- base_stat: number;
42
- effort: number;
43
- stat: {
44
- name: string;
45
- url: string;
46
- };
47
- }[];
48
- }
49
- export interface PokemonSearchParams {
50
- limit?: number;
51
- offset?: number;
52
- }
53
- export declare const api: ApiClient<(create: import("./types/endpoint.interface").CreateEndpoint) => Promise<{
54
- updatePokemonById: import("./types/endpoint.interface").EndpointConfig<{
55
- id: number;
56
- }, PokemonDetails>;
57
- getPokemonById: import("./types/endpoint.interface").EndpointConfig<{
58
- id: number;
59
- }, PokemonDetails>;
60
- getPokemonList: import("./types/endpoint.interface").EndpointConfig<PokemonSearchParams, PokemonListResponse>;
61
- }>>;
62
- export declare const pokemonApi: ApiClient<(create: import("./types/endpoint.interface").CreateEndpoint) => Promise<{
63
- updatePokemonById: import("./types/endpoint.interface").EndpointConfig<{
64
- id: number;
65
- }, PokemonDetails>;
66
- getPokemonById: import("./types/endpoint.interface").EndpointConfig<{
67
- id: number;
68
- }, PokemonDetails>;
69
- getPokemonList: import("./types/endpoint.interface").EndpointConfig<PokemonSearchParams, PokemonListResponse>;
70
- }>>;
71
- export declare const pokemonEndpoints: {
72
- updatePokemonById: import("./types/endpoint.interface").Endpoint<{
73
- id: number;
74
- }, PokemonDetails>;
75
- getPokemonById: import("./types/endpoint.interface").Endpoint<{
76
- id: number;
77
- }, PokemonDetails>;
78
- getPokemonList: import("./types/endpoint.interface").Endpoint<PokemonSearchParams, PokemonListResponse>;
79
- };
80
- export declare const getPokemonById: (params: {
81
- id: number;
82
- }, options?: import("./types/query.interface").QueryOptions) => import("./types/endpoint.interface").RequestResponseModify<PokemonDetails, any>;
83
- //# sourceMappingURL=example.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"example.d.ts","sourceRoot":"","sources":["../../src/api/example.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAIxC,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAA;QACZ,GAAG,EAAE,MAAM,CAAA;KACZ,EAAE,CAAA;CACJ;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE;QACP,aAAa,EAAE,MAAM,CAAA;QACrB,YAAY,EAAE,MAAM,CAAA;QACpB,KAAK,CAAC,EAAE;YACN,kBAAkB,CAAC,EAAE;gBACnB,aAAa,EAAE,MAAM,CAAA;aACtB,CAAA;SACF,CAAA;KACF,CAAA;IACD,KAAK,EAAE;QACL,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE;YACJ,IAAI,EAAE,MAAM,CAAA;YACZ,GAAG,EAAE,MAAM,CAAA;SACZ,CAAA;KACF,EAAE,CAAA;IACH,SAAS,EAAE;QACT,OAAO,EAAE;YACP,IAAI,EAAE,MAAM,CAAA;YACZ,GAAG,EAAE,MAAM,CAAA;SACZ,CAAA;QACD,SAAS,EAAE,OAAO,CAAA;QAClB,IAAI,EAAE,MAAM,CAAA;KACb,EAAE,CAAA;IACH,KAAK,EAAE;QACL,SAAS,EAAE,MAAM,CAAA;QACjB,MAAM,EAAE,MAAM,CAAA;QACd,IAAI,EAAE;YACJ,IAAI,EAAE,MAAM,CAAA;YACZ,GAAG,EAAE,MAAM,CAAA;SACZ,CAAA;KACF,EAAE,CAAA;CACJ;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAkCD,eAAO,MAAM,GAAG;;YAmBoB,MAAM;;;YAQT,MAAM;;;GA2BrC,CAAA;AAEF,eAAO,MAAM,UAAU;;YArCa,MAAM;;;YAQT,MAAM;;;GA6BG,CAAA;AAC1C,eAAO,MAAM,gBAAgB;;YAtCO,MAAM;;;YAQT,MAAM;;;CA8BkB,CAAA;AACzD,eAAO,MAAM,cAAc;QA/BM,MAAM;+IA+B8B,CAAA"}