synapse-storage 3.0.16 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (351) hide show
  1. package/README.md +657 -127
  2. package/dist/_utils/chunk.util.d.ts +8 -0
  3. package/dist/_utils/chunk.util.d.ts.map +1 -0
  4. package/dist/_utils/chunk.util.js +21 -0
  5. package/dist/_utils/chunk.util.js.map +1 -0
  6. package/dist/_utils/deepMerge.util.d.ts +2 -0
  7. package/dist/_utils/deepMerge.util.d.ts.map +1 -0
  8. package/dist/_utils/deepMerge.util.js +19 -0
  9. package/dist/_utils/deepMerge.util.js.map +1 -0
  10. package/dist/_utils/error-handling.util.d.ts +50 -0
  11. package/dist/_utils/error-handling.util.d.ts.map +1 -0
  12. package/dist/_utils/error-handling.util.js +67 -0
  13. package/dist/_utils/error-handling.util.js.map +1 -0
  14. package/dist/_utils/flatMap.util.d.ts +10 -0
  15. package/dist/_utils/flatMap.util.d.ts.map +1 -0
  16. package/dist/_utils/flatMap.util.js +23 -0
  17. package/dist/_utils/flatMap.util.js.map +1 -0
  18. package/dist/_utils/index.d.ts +6 -0
  19. package/dist/_utils/index.d.ts.map +1 -0
  20. package/dist/_utils/index.js +13 -0
  21. package/dist/_utils/index.js.map +1 -0
  22. package/dist/_utils/logger-console.util.d.ts +9 -0
  23. package/dist/_utils/logger-console.util.d.ts.map +1 -0
  24. package/dist/_utils/logger-console.util.js +14 -0
  25. package/dist/_utils/logger-console.util.js.map +1 -0
  26. package/dist/api/api.module.d.ts +46 -0
  27. package/dist/api/api.module.d.ts.map +1 -0
  28. package/dist/api/api.module.js +121 -0
  29. package/dist/api/api.module.js.map +1 -0
  30. package/dist/api/components/endpoint.d.ts +57 -0
  31. package/dist/api/components/endpoint.d.ts.map +1 -0
  32. package/dist/api/components/endpoint.js +385 -0
  33. package/dist/api/components/endpoint.js.map +1 -0
  34. package/dist/api/components/query-storage.d.ts +100 -0
  35. package/dist/api/components/query-storage.d.ts.map +1 -0
  36. package/dist/api/components/query-storage.js +293 -0
  37. package/dist/api/components/query-storage.js.map +1 -0
  38. package/dist/api/example.d.ts +83 -0
  39. package/dist/api/example.d.ts.map +1 -0
  40. package/dist/api/example.js +90 -0
  41. package/dist/api/example.js.map +1 -0
  42. package/dist/api/index.d.ts +4 -0
  43. package/dist/api/index.d.ts.map +1 -0
  44. package/dist/api/index.js +11 -0
  45. package/dist/api/index.js.map +1 -0
  46. package/dist/api/types/api.interface.d.ts +126 -0
  47. package/dist/api/types/api.interface.d.ts.map +1 -0
  48. package/dist/api/types/api.interface.js +15 -0
  49. package/dist/api/types/api.interface.js.map +1 -0
  50. package/dist/api/types/endpoint.interface.d.ts +118 -0
  51. package/dist/api/types/endpoint.interface.d.ts.map +1 -0
  52. package/dist/api/types/endpoint.interface.js +6 -0
  53. package/dist/api/types/endpoint.interface.js.map +1 -0
  54. package/dist/api/types/query.interface.d.ts +85 -0
  55. package/dist/api/types/query.interface.d.ts.map +1 -0
  56. package/dist/api/types/query.interface.js +6 -0
  57. package/dist/api/types/query.interface.js.map +1 -0
  58. package/dist/api/utils/api-helpers.d.ts +22 -0
  59. package/dist/api/utils/api-helpers.d.ts.map +1 -0
  60. package/dist/api/utils/api-helpers.js +44 -0
  61. package/dist/api/utils/api-helpers.js.map +1 -0
  62. package/dist/api/utils/create-header-context.d.ts +10 -0
  63. package/dist/api/utils/create-header-context.d.ts.map +1 -0
  64. package/dist/api/utils/create-header-context.js +40 -0
  65. package/dist/api/utils/create-header-context.js.map +1 -0
  66. package/dist/api/utils/endpoint-headers.d.ts +23 -0
  67. package/dist/api/utils/endpoint-headers.d.ts.map +1 -0
  68. package/dist/api/utils/endpoint-headers.js +61 -0
  69. package/dist/api/utils/endpoint-headers.js.map +1 -0
  70. package/dist/api/utils/fetch-base-query.d.ts +9 -0
  71. package/dist/api/utils/fetch-base-query.d.ts.map +1 -0
  72. package/dist/api/utils/fetch-base-query.js +242 -0
  73. package/dist/api/utils/fetch-base-query.js.map +1 -0
  74. package/dist/api/utils/file-utils.d.ts +43 -0
  75. package/dist/api/utils/file-utils.d.ts.map +1 -0
  76. package/dist/api/utils/file-utils.js +102 -0
  77. package/dist/api/utils/file-utils.js.map +1 -0
  78. package/dist/api/utils/get-cacheable-headers.d.ts +8 -0
  79. package/dist/api/utils/get-cacheable-headers.d.ts.map +1 -0
  80. package/dist/api/utils/get-cacheable-headers.js +23 -0
  81. package/dist/api/utils/get-cacheable-headers.js.map +1 -0
  82. package/dist/core/index.d.ts +3 -0
  83. package/dist/core/index.d.ts.map +1 -0
  84. package/dist/core/index.js +7 -0
  85. package/dist/core/index.js.map +1 -0
  86. package/dist/core/selector/index.d.ts +3 -0
  87. package/dist/core/selector/index.d.ts.map +1 -0
  88. package/dist/core/selector/index.js +5 -0
  89. package/dist/core/selector/index.js.map +1 -0
  90. package/dist/{selector.interface-CA5y-kD_.d.ts → core/selector/selector.interface.d.ts} +41 -8
  91. package/dist/core/selector/selector.interface.d.ts.map +1 -0
  92. package/dist/core/selector/selector.interface.js +7 -0
  93. package/dist/core/selector/selector.interface.js.map +1 -0
  94. package/dist/core/selector/selector.module.d.ts +36 -0
  95. package/dist/core/selector/selector.module.d.ts.map +1 -0
  96. package/dist/core/selector/selector.module.js +412 -0
  97. package/dist/core/selector/selector.module.js.map +1 -0
  98. package/dist/core/storage/adapters/async-base-storage.service.d.ts +49 -0
  99. package/dist/core/storage/adapters/async-base-storage.service.d.ts.map +1 -0
  100. package/dist/core/storage/adapters/async-base-storage.service.js +505 -0
  101. package/dist/core/storage/adapters/async-base-storage.service.js.map +1 -0
  102. package/dist/core/storage/adapters/indexed-DB.service.d.ts +89 -0
  103. package/dist/core/storage/adapters/indexed-DB.service.d.ts.map +1 -0
  104. package/dist/core/storage/adapters/indexed-DB.service.js +596 -0
  105. package/dist/core/storage/adapters/indexed-DB.service.js.map +1 -0
  106. package/dist/core/storage/adapters/local-storage.service.d.ts +23 -0
  107. package/dist/core/storage/adapters/local-storage.service.d.ts.map +1 -0
  108. package/dist/core/storage/adapters/local-storage.service.js +111 -0
  109. package/dist/core/storage/adapters/local-storage.service.js.map +1 -0
  110. package/dist/core/storage/adapters/memory-storage.service.d.ts +24 -0
  111. package/dist/core/storage/adapters/memory-storage.service.d.ts.map +1 -0
  112. package/dist/core/storage/adapters/memory-storage.service.js +110 -0
  113. package/dist/core/storage/adapters/memory-storage.service.js.map +1 -0
  114. package/dist/core/storage/adapters/path.utils.d.ts +5 -0
  115. package/dist/core/storage/adapters/path.utils.d.ts.map +1 -0
  116. package/dist/core/storage/adapters/path.utils.js +42 -0
  117. package/dist/core/storage/adapters/path.utils.js.map +1 -0
  118. package/dist/core/storage/adapters/storage-core.d.ts +61 -0
  119. package/dist/core/storage/adapters/storage-core.d.ts.map +1 -0
  120. package/dist/core/storage/adapters/storage-core.js +221 -0
  121. package/dist/core/storage/adapters/storage-core.js.map +1 -0
  122. package/dist/core/storage/adapters/sync-base-storage.service.d.ts +56 -0
  123. package/dist/core/storage/adapters/sync-base-storage.service.d.ts.map +1 -0
  124. package/dist/core/storage/adapters/sync-base-storage.service.js +481 -0
  125. package/dist/core/storage/adapters/sync-base-storage.service.js.map +1 -0
  126. package/dist/core/storage/index.d.ts +16 -0
  127. package/dist/core/storage/index.d.ts.map +1 -0
  128. package/dist/core/storage/index.js +38 -0
  129. package/dist/core/storage/index.js.map +1 -0
  130. package/dist/core/storage/middlewares/broadcast.middleware.d.ts +9 -0
  131. package/dist/core/storage/middlewares/broadcast.middleware.d.ts.map +1 -0
  132. package/dist/core/storage/middlewares/broadcast.middleware.js +197 -0
  133. package/dist/core/storage/middlewares/broadcast.middleware.js.map +1 -0
  134. package/dist/core/storage/middlewares/index.d.ts +9 -0
  135. package/dist/core/storage/middlewares/index.d.ts.map +1 -0
  136. package/dist/core/storage/middlewares/index.js +17 -0
  137. package/dist/core/storage/middlewares/index.js.map +1 -0
  138. package/dist/core/storage/middlewares/storage-batching.middleware.d.ts +7 -0
  139. package/dist/core/storage/middlewares/storage-batching.middleware.d.ts.map +1 -0
  140. package/dist/core/storage/middlewares/storage-batching.middleware.js +108 -0
  141. package/dist/core/storage/middlewares/storage-batching.middleware.js.map +1 -0
  142. package/dist/core/storage/middlewares/storage-shallow-compare.middleware.d.ts +7 -0
  143. package/dist/core/storage/middlewares/storage-shallow-compare.middleware.d.ts.map +1 -0
  144. package/dist/core/storage/middlewares/storage-shallow-compare.middleware.js +43 -0
  145. package/dist/core/storage/middlewares/storage-shallow-compare.middleware.js.map +1 -0
  146. package/dist/core/storage/middlewares/sync-broadcast.middleware.d.ts +9 -0
  147. package/dist/core/storage/middlewares/sync-broadcast.middleware.d.ts.map +1 -0
  148. package/dist/core/storage/middlewares/sync-broadcast.middleware.js +177 -0
  149. package/dist/core/storage/middlewares/sync-broadcast.middleware.js.map +1 -0
  150. package/dist/core/storage/middlewares/sync-storage-batching.middleware.d.ts +6 -0
  151. package/dist/core/storage/middlewares/sync-storage-batching.middleware.d.ts.map +1 -0
  152. package/dist/core/storage/middlewares/sync-storage-batching.middleware.js +56 -0
  153. package/dist/core/storage/middlewares/sync-storage-batching.middleware.js.map +1 -0
  154. package/dist/core/storage/middlewares/sync-storage-shallow-compare.middleware.d.ts +7 -0
  155. package/dist/core/storage/middlewares/sync-storage-shallow-compare.middleware.d.ts.map +1 -0
  156. package/dist/core/storage/middlewares/sync-storage-shallow-compare.middleware.js +39 -0
  157. package/dist/core/storage/middlewares/sync-storage-shallow-compare.middleware.js.map +1 -0
  158. package/dist/core/storage/modules/plugin/plugin.interface.d.ts +101 -0
  159. package/dist/core/storage/modules/plugin/plugin.interface.d.ts.map +1 -0
  160. package/dist/core/storage/modules/plugin/plugin.interface.js +8 -0
  161. package/dist/core/storage/modules/plugin/plugin.interface.js.map +1 -0
  162. package/dist/core/storage/modules/plugin/plugin.service.d.ts +49 -0
  163. package/dist/core/storage/modules/plugin/plugin.service.d.ts.map +1 -0
  164. package/dist/core/storage/modules/plugin/plugin.service.js +406 -0
  165. package/dist/core/storage/modules/plugin/plugin.service.js.map +1 -0
  166. package/dist/core/storage/modules/singleton/mixin.util.d.ts +6 -0
  167. package/dist/core/storage/modules/singleton/mixin.util.d.ts.map +1 -0
  168. package/dist/core/storage/modules/singleton/mixin.util.js +30 -0
  169. package/dist/core/storage/modules/singleton/mixin.util.js.map +1 -0
  170. package/dist/core/storage/modules/singleton/models.d.ts +143 -0
  171. package/dist/core/storage/modules/singleton/models.d.ts.map +1 -0
  172. package/dist/core/storage/modules/singleton/models.js +60 -0
  173. package/dist/core/storage/modules/singleton/models.js.map +1 -0
  174. package/dist/core/storage/modules/singleton/singleton.util.d.ts +36 -0
  175. package/dist/core/storage/modules/singleton/singleton.util.d.ts.map +1 -0
  176. package/dist/core/storage/modules/singleton/singleton.util.js +216 -0
  177. package/dist/core/storage/modules/singleton/singleton.util.js.map +1 -0
  178. package/dist/core/storage/storage.interface.d.ts +168 -0
  179. package/dist/core/storage/storage.interface.d.ts.map +1 -0
  180. package/dist/core/storage/storage.interface.js +23 -0
  181. package/dist/core/storage/storage.interface.js.map +1 -0
  182. package/dist/core/storage/utils/broadcast.util.d.ts +49 -0
  183. package/dist/core/storage/utils/broadcast.util.d.ts.map +1 -0
  184. package/dist/core/storage/utils/broadcast.util.js +141 -0
  185. package/dist/core/storage/utils/broadcast.util.js.map +1 -0
  186. package/dist/core/storage/utils/cache.util.d.ts +33 -0
  187. package/dist/core/storage/utils/cache.util.d.ts.map +1 -0
  188. package/dist/core/storage/utils/cache.util.js +54 -0
  189. package/dist/core/storage/utils/cache.util.js.map +1 -0
  190. package/dist/core/storage/utils/middleware-module.d.ts +94 -0
  191. package/dist/core/storage/utils/middleware-module.d.ts.map +1 -0
  192. package/dist/core/storage/utils/middleware-module.js +258 -0
  193. package/dist/core/storage/utils/middleware-module.js.map +1 -0
  194. package/dist/core/storage/utils/path-selector.util.d.ts +15 -0
  195. package/dist/core/storage/utils/path-selector.util.d.ts.map +1 -0
  196. package/dist/core/storage/utils/path-selector.util.js +58 -0
  197. package/dist/core/storage/utils/path-selector.util.js.map +1 -0
  198. package/dist/core/storage/utils/state-diff.util.d.ts +14 -0
  199. package/dist/core/storage/utils/state-diff.util.d.ts.map +1 -0
  200. package/dist/core/storage/utils/state-diff.util.js +88 -0
  201. package/dist/core/storage/utils/state-diff.util.js.map +1 -0
  202. package/dist/core/storage/utils/storage-factory.util.d.ts +21 -0
  203. package/dist/core/storage/utils/storage-factory.util.d.ts.map +1 -0
  204. package/dist/core/storage/utils/storage-factory.util.js +40 -0
  205. package/dist/core/storage/utils/storage-factory.util.js.map +1 -0
  206. package/dist/core/storage/utils/storage-key.d.ts +11 -0
  207. package/dist/core/storage/utils/storage-key.d.ts.map +1 -0
  208. package/dist/core/storage/utils/storage-key.js +24 -0
  209. package/dist/core/storage/utils/storage-key.js.map +1 -0
  210. package/dist/core/storage/utils/storage.utils.d.ts +17 -0
  211. package/dist/core/storage/utils/storage.utils.d.ts.map +1 -0
  212. package/dist/core/storage/utils/storage.utils.js +57 -0
  213. package/dist/core/storage/utils/storage.utils.js.map +1 -0
  214. package/dist/index.d.ts +10 -12
  215. package/dist/index.d.ts.map +1 -0
  216. package/dist/index.js +17 -1
  217. package/dist/index.js.map +1 -0
  218. package/dist/react/hooks/index.d.ts +5 -0
  219. package/dist/react/hooks/index.d.ts.map +1 -0
  220. package/dist/react/hooks/index.js +11 -0
  221. package/dist/react/hooks/index.js.map +1 -0
  222. package/dist/react/hooks/useCreateStorage.d.ts +39 -0
  223. package/dist/react/hooks/useCreateStorage.d.ts.map +1 -0
  224. package/dist/react/hooks/useCreateStorage.js +137 -0
  225. package/dist/react/hooks/useCreateStorage.js.map +1 -0
  226. package/dist/react/hooks/useSelector.d.ts +21 -0
  227. package/dist/react/hooks/useSelector.d.ts.map +1 -0
  228. package/dist/react/hooks/useSelector.js +56 -0
  229. package/dist/react/hooks/useSelector.js.map +1 -0
  230. package/dist/react/hooks/useStorage.d.ts +39 -0
  231. package/dist/react/hooks/useStorage.d.ts.map +1 -0
  232. package/dist/react/hooks/useStorage.js +78 -0
  233. package/dist/react/hooks/useStorage.js.map +1 -0
  234. package/dist/react/hooks/useStorageSubscribe.d.ts +16 -0
  235. package/dist/react/hooks/useStorageSubscribe.d.ts.map +1 -0
  236. package/dist/react/hooks/useStorageSubscribe.js +55 -0
  237. package/dist/react/hooks/useStorageSubscribe.js.map +1 -0
  238. package/dist/react/index.d.ts +3 -0
  239. package/dist/react/index.d.ts.map +1 -0
  240. package/dist/react/index.js +7 -0
  241. package/dist/react/index.js.map +1 -0
  242. package/dist/react/utils/awaitSynapse.d.ts +34 -0
  243. package/dist/react/utils/awaitSynapse.d.ts.map +1 -0
  244. package/dist/react/utils/awaitSynapse.js +87 -0
  245. package/dist/react/utils/awaitSynapse.js.map +1 -0
  246. package/dist/react/utils/createSynapseCtx.d.ts +33 -0
  247. package/dist/react/utils/createSynapseCtx.d.ts.map +1 -0
  248. package/dist/react/utils/createSynapseCtx.js +139 -0
  249. package/dist/react/utils/createSynapseCtx.js.map +1 -0
  250. package/dist/react/utils/index.d.ts +3 -0
  251. package/dist/react/utils/index.d.ts.map +1 -0
  252. package/dist/react/utils/index.js +9 -0
  253. package/dist/react/utils/index.js.map +1 -0
  254. package/dist/reactive/dispatcher/dispatcher.module.d.ts +216 -0
  255. package/dist/reactive/dispatcher/dispatcher.module.d.ts.map +1 -0
  256. package/dist/reactive/dispatcher/dispatcher.module.js +384 -0
  257. package/dist/reactive/dispatcher/dispatcher.module.js.map +1 -0
  258. package/dist/reactive/dispatcher/index.d.ts +4 -0
  259. package/dist/reactive/dispatcher/index.d.ts.map +1 -0
  260. package/dist/reactive/dispatcher/index.js +9 -0
  261. package/dist/reactive/dispatcher/index.js.map +1 -0
  262. package/dist/reactive/dispatcher/middlewares/index.d.ts +2 -0
  263. package/dist/reactive/dispatcher/middlewares/index.d.ts.map +1 -0
  264. package/dist/reactive/dispatcher/middlewares/index.js +5 -0
  265. package/dist/reactive/dispatcher/middlewares/index.js.map +1 -0
  266. package/dist/reactive/dispatcher/middlewares/logger.middleware.d.ts +37 -0
  267. package/dist/reactive/dispatcher/middlewares/logger.middleware.d.ts.map +1 -0
  268. package/dist/reactive/dispatcher/middlewares/logger.middleware.js +188 -0
  269. package/dist/reactive/dispatcher/middlewares/logger.middleware.js.map +1 -0
  270. package/dist/reactive/dispatcher/standalone.d.ts +112 -0
  271. package/dist/reactive/dispatcher/standalone.d.ts.map +1 -0
  272. package/dist/reactive/dispatcher/standalone.js +142 -0
  273. package/dist/reactive/dispatcher/standalone.js.map +1 -0
  274. package/dist/reactive/effects/effects.module.d.ts +225 -0
  275. package/dist/reactive/effects/effects.module.d.ts.map +1 -0
  276. package/dist/reactive/effects/effects.module.js +356 -0
  277. package/dist/reactive/effects/effects.module.js.map +1 -0
  278. package/dist/reactive/effects/index.d.ts +4 -0
  279. package/dist/reactive/effects/index.d.ts.map +1 -0
  280. package/dist/reactive/effects/index.js +11 -0
  281. package/dist/reactive/effects/index.js.map +1 -0
  282. package/dist/reactive/effects/utils/chunkRequestConsistent.d.ts +12 -0
  283. package/dist/reactive/effects/utils/chunkRequestConsistent.d.ts.map +1 -0
  284. package/dist/reactive/effects/utils/chunkRequestConsistent.js +25 -0
  285. package/dist/reactive/effects/utils/chunkRequestConsistent.js.map +1 -0
  286. package/dist/reactive/effects/utils/chunkRequestParallel.d.ts +12 -0
  287. package/dist/reactive/effects/utils/chunkRequestParallel.d.ts.map +1 -0
  288. package/dist/reactive/effects/utils/chunkRequestParallel.js +22 -0
  289. package/dist/reactive/effects/utils/chunkRequestParallel.js.map +1 -0
  290. package/dist/reactive/effects/utils/fromRequest.d.ts +40 -0
  291. package/dist/reactive/effects/utils/fromRequest.d.ts.map +1 -0
  292. package/dist/reactive/effects/utils/fromRequest.js +64 -0
  293. package/dist/reactive/effects/utils/fromRequest.js.map +1 -0
  294. package/dist/reactive/effects/utils/index.d.ts +5 -0
  295. package/dist/reactive/effects/utils/index.d.ts.map +1 -0
  296. package/dist/reactive/effects/utils/index.js +11 -0
  297. package/dist/reactive/effects/utils/index.js.map +1 -0
  298. package/dist/reactive/effects/utils/toObservable.d.ts +23 -0
  299. package/dist/reactive/effects/utils/toObservable.d.ts.map +1 -0
  300. package/dist/reactive/effects/utils/toObservable.js +39 -0
  301. package/dist/reactive/effects/utils/toObservable.js.map +1 -0
  302. package/dist/reactive/index.d.ts +3 -0
  303. package/dist/reactive/index.d.ts.map +1 -0
  304. package/dist/reactive/index.js +7 -0
  305. package/dist/reactive/index.js.map +1 -0
  306. package/dist/utils/createEventBus.d.ts +87 -0
  307. package/dist/utils/createEventBus.d.ts.map +1 -0
  308. package/dist/utils/createEventBus.js +215 -0
  309. package/dist/utils/createEventBus.js.map +1 -0
  310. package/dist/utils/createSynapse/createSynapse.d.ts +9 -0
  311. package/dist/utils/createSynapse/createSynapse.d.ts.map +1 -0
  312. package/dist/utils/createSynapse/createSynapse.js +103 -0
  313. package/dist/utils/createSynapse/createSynapse.js.map +1 -0
  314. package/dist/utils/createSynapse/index.d.ts +3 -0
  315. package/dist/utils/createSynapse/index.d.ts.map +1 -0
  316. package/dist/utils/createSynapse/index.js +6 -0
  317. package/dist/utils/createSynapse/index.js.map +1 -0
  318. package/dist/utils/createSynapse/types.d.ts +93 -0
  319. package/dist/utils/createSynapse/types.d.ts.map +1 -0
  320. package/dist/utils/createSynapse/types.js +6 -0
  321. package/dist/utils/createSynapse/types.js.map +1 -0
  322. package/dist/utils/createSynapse/validate.d.ts +2 -0
  323. package/dist/utils/createSynapse/validate.d.ts.map +1 -0
  324. package/dist/utils/createSynapse/validate.js +76 -0
  325. package/dist/utils/createSynapse/validate.js.map +1 -0
  326. package/dist/utils/createSynapse/waitForDependencies.d.ts +3 -0
  327. package/dist/utils/createSynapse/waitForDependencies.d.ts.map +1 -0
  328. package/dist/utils/createSynapse/waitForDependencies.js +40 -0
  329. package/dist/utils/createSynapse/waitForDependencies.js.map +1 -0
  330. package/dist/utils/createSynapseAwaiter.d.ts +46 -0
  331. package/dist/utils/createSynapseAwaiter.d.ts.map +1 -0
  332. package/dist/utils/createSynapseAwaiter.js +102 -0
  333. package/dist/utils/createSynapseAwaiter.js.map +1 -0
  334. package/dist/utils/index.d.ts +4 -0
  335. package/dist/utils/index.d.ts.map +1 -0
  336. package/dist/utils/index.js +12 -0
  337. package/dist/utils/index.js.map +1 -0
  338. package/package.json +17 -21
  339. package/dist/api.d.ts +0 -365
  340. package/dist/api.js +0 -1
  341. package/dist/core.d.ts +0 -95
  342. package/dist/core.js +0 -1
  343. package/dist/createSynapse-BLbPlWXK.d.ts +0 -97
  344. package/dist/dispatcher.module-DcXkCRNj.d.ts +0 -360
  345. package/dist/react.d.ts +0 -98
  346. package/dist/react.js +0 -1
  347. package/dist/reactive.d.ts +0 -35
  348. package/dist/reactive.js +0 -1
  349. package/dist/storage.interface-2HKvqdAJ.d.ts +0 -444
  350. package/dist/utils.d.ts +0 -139
  351. package/dist/utils.js +0 -1
@@ -0,0 +1,61 @@
1
+ import { logError } from "../../_utils/error-handling.util.js";
2
+ import { createHeaderContext } from "./create-header-context.js";
3
+
4
+
5
+
6
+
7
+
8
+ /**
9
+ * Подготавливает заголовки для запроса на основе контекста и пользовательских функций
10
+ *
11
+ * @param prepareHeadersFn - функция подготовки заголовков
12
+ * @param context - контекст запроса
13
+ * @returns - подготовленные заголовки
14
+ */ async function prepareRequestHeaders(prepareHeadersFn, context) {
15
+ // Создаем заголовки
16
+ let headers = new Headers();
17
+ // Создаем контекст, если он не передан
18
+ const headerContext = context || createHeaderContext({}, {});
19
+ // Применяем функцию подготовки заголовков, если она определена
20
+ if (prepareHeadersFn) {
21
+ try {
22
+ headers = await Promise.resolve(prepareHeadersFn(headers, headerContext));
23
+ } catch (error) {
24
+ logError('prepareRequestHeaders: error preparing headers', error, null, 'warn');
25
+ }
26
+ }
27
+ return headers;
28
+ }
29
+ /**
30
+ * Создает комбинированную функцию для подготовки заголовков, объединяющую
31
+ * глобальные заголовки и заголовки эндпоинта
32
+ *
33
+ * @param globalPrepareHeaders - функция подготовки заголовков на глобальном уровне
34
+ * @param endpointPrepareHeaders - функция подготовки заголовков на уровне эндпоинта
35
+ * @returns - функция для подготовки заголовков
36
+ */ function createPrepareHeaders(globalPrepareHeaders, endpointPrepareHeaders) {
37
+ return async (headers, context)=>{
38
+ let processedHeaders = new Headers(headers);
39
+ // Применяем глобальную функцию подготовки заголовков, если она определена
40
+ if (globalPrepareHeaders) {
41
+ try {
42
+ processedHeaders = await Promise.resolve(globalPrepareHeaders(processedHeaders, context));
43
+ } catch (error) {
44
+ logError('createPrepareHeaders: error preparing global headers', error, null, 'warn');
45
+ }
46
+ }
47
+ // Применяем функцию подготовки заголовков эндпоинта, если она определена
48
+ if (endpointPrepareHeaders) {
49
+ try {
50
+ processedHeaders = await Promise.resolve(endpointPrepareHeaders(processedHeaders, context));
51
+ } catch (error) {
52
+ logError('createPrepareHeaders: error preparing endpoint headers', error, null, 'warn');
53
+ }
54
+ }
55
+ return processedHeaders;
56
+ };
57
+ }
58
+
59
+ export { createPrepareHeaders, prepareRequestHeaders };
60
+
61
+ //# sourceMappingURL=endpoint-headers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/utils/endpoint-headers.js","sources":["../../../src/api/utils/endpoint-headers.ts"],"sourcesContent":["import { logError } from '../../_utils/error-handling.util'\nimport { ApiContext } from '../types/api.interface'\nimport { createHeaderContext } from './create-header-context'\n\n/**\n * Тип функции для подготовки заголовков запроса\n */\nexport type PrepareHeadersFunction = (headers: Headers, context: ApiContext<any>) => Promise<Headers>\n\n/**\n * Подготавливает заголовки для запроса на основе контекста и пользовательских функций\n *\n * @param prepareHeadersFn - функция подготовки заголовков\n * @param context - контекст запроса\n * @returns - подготовленные заголовки\n */\nexport async function prepareRequestHeaders<RequestParams extends Record<string, any>>(\n prepareHeadersFn?: PrepareHeadersFunction,\n context?: ApiContext<RequestParams>,\n): Promise<Headers> {\n // Создаем заголовки\n let headers = new Headers()\n\n // Создаем контекст, если он не передан\n const headerContext = context || createHeaderContext({} as ApiContext<RequestParams>, {})\n\n // Применяем функцию подготовки заголовков, если она определена\n if (prepareHeadersFn) {\n try {\n headers = await Promise.resolve(prepareHeadersFn(headers, headerContext))\n } catch (error) {\n logError('prepareRequestHeaders: error preparing headers', error, null, 'warn')\n }\n }\n\n return headers\n}\n\n/**\n * Создает комбинированную функцию для подготовки заголовков, объединяющую\n * глобальные заголовки и заголовки эндпоинта\n *\n * @param globalPrepareHeaders - функция подготовки заголовков на глобальном уровне\n * @param endpointPrepareHeaders - функция подготовки заголовков на уровне эндпоинта\n * @returns - функция для подготовки заголовков\n */\nexport function createPrepareHeaders(globalPrepareHeaders?: PrepareHeadersFunction, endpointPrepareHeaders?: PrepareHeadersFunction): PrepareHeadersFunction {\n return async (headers: Headers, context: ApiContext<any>): Promise<Headers> => {\n let processedHeaders = new Headers(headers)\n\n // Применяем глобальную функцию подготовки заголовков, если она определена\n if (globalPrepareHeaders) {\n try {\n processedHeaders = await Promise.resolve(globalPrepareHeaders(processedHeaders, context))\n } catch (error) {\n logError('createPrepareHeaders: error preparing global headers', error, null, 'warn')\n }\n }\n\n // Применяем функцию подготовки заголовков эндпоинта, если она определена\n if (endpointPrepareHeaders) {\n try {\n processedHeaders = await Promise.resolve(endpointPrepareHeaders(processedHeaders, context))\n } catch (error) {\n logError('createPrepareHeaders: error preparing endpoint headers', error, null, 'warn')\n }\n }\n\n return processedHeaders\n }\n}\n"],"names":["logError","createHeaderContext","prepareRequestHeaders","prepareHeadersFn","context","headers","Headers","headerContext","Promise","error","createPrepareHeaders","globalPrepareHeaders","endpointPrepareHeaders","processedHeaders"],"mappings":";;;;;AAA2D;AAEE;AAO7D;;;;;;CAMC,GACM,eAAeE,qBAAqBA,CACzCC,gBAAyC,EACzCC,OAAmC;IAEnC,oBAAoB;IACpB,IAAIC,UAAU,IAAIC;IAElB,uCAAuC;IACvC,MAAMC,gBAAgBH,WAAWH,mBAAmBA,CAAC,CAAC,GAAgC,CAAC;IAEvF,+DAA+D;IAC/D,IAAIE,kBAAkB;QACpB,IAAI;YACFE,UAAU,MAAMG,QAAQ,OAAO,CAACL,iBAAiBE,SAASE;QAC5D,EAAE,OAAOE,OAAO;YACdT,QAAQA,CAAC,kDAAkDS,OAAO,MAAM;QAC1E;IACF;IAEA,OAAOJ;AACT;AAEA;;;;;;;CAOC,GACM,SAASK,oBAAoBA,CAACC,oBAA6C,EAAEC,sBAA+C;IACjI,OAAO,OAAOP,SAAkBD;QAC9B,IAAIS,mBAAmB,IAAIP,QAAQD;QAEnC,0EAA0E;QAC1E,IAAIM,sBAAsB;YACxB,IAAI;gBACFE,mBAAmB,MAAML,QAAQ,OAAO,CAACG,qBAAqBE,kBAAkBT;YAClF,EAAE,OAAOK,OAAO;gBACdT,QAAQA,CAAC,wDAAwDS,OAAO,MAAM;YAChF;QACF;QAEA,yEAAyE;QACzE,IAAIG,wBAAwB;YAC1B,IAAI;gBACFC,mBAAmB,MAAML,QAAQ,OAAO,CAACI,uBAAuBC,kBAAkBT;YACpF,EAAE,OAAOK,OAAO;gBACdT,QAAQA,CAAC,0DAA0DS,OAAO,MAAM;YAClF;QACF;QAEA,OAAOI;IACT;AACF"}
@@ -0,0 +1,9 @@
1
+ import { FetchBaseQueryArgs, RequestDefinition } from '../types/api.interface';
2
+ import { QueryOptions, QueryResult } from '../types/query.interface';
3
+ /**
4
+ * Создает базовый fetch-клиент для запросов с поддержкой файлов
5
+ * @param options Настройки базового клиента
6
+ * @returns Функция для выполнения запросов
7
+ */
8
+ export declare function fetchBaseQuery(options: Omit<FetchBaseQueryArgs, 'prepareHeaders'>): <RequestResult, RequestParams extends Record<string, any>, E extends Error = Error>(args: RequestDefinition<RequestParams>, queryOptions: QueryOptions | undefined, headers: Headers) => Promise<QueryResult<RequestResult, E>>;
9
+ //# sourceMappingURL=fetch-base-query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-base-query.d.ts","sourceRoot":"","sources":["../../../src/api/utils/fetch-base-query.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,kBAAkB,EAAE,iBAAiB,EAAkB,MAAM,wBAAwB,CAAA;AAC1G,OAAO,EAAsB,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAqFxF;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,IAGlE,aAAa,EAAE,aAAa,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,SAAS,KAAK,GAAG,KAAK,EAC7F,MAAM,iBAAiB,CAAC,aAAa,CAAC,EACtC,cAAc,YAAY,YAAK,EAC/B,SAAS,OAAO,KACf,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAsG1C"}
@@ -0,0 +1,242 @@
1
+ import { handleCallbackError, logError } from "../../_utils/error-handling.util.js";
2
+ import { ResponseFormat } from "../types/api.interface.js";
3
+ import { getFileMetadataFromHeaders, getResponseFormatForMimeType, isFileResponse } from "./file-utils.js";
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+ /**
12
+ * Извлекает данные из response в зависимости от формата
13
+ * @param response Объект Response
14
+ * @param format Формат ответа
15
+ * @returns Объект с данными или ошибкой
16
+ */ async function getResponseData(response, format) {
17
+ let responseFormat = format;
18
+ const contentType = response.headers.get('content-type') || '';
19
+ // Если формат не указан, пытаемся определить его из MIME-типа
20
+ if (!responseFormat && contentType) {
21
+ // Проверка, является ли ответ файлом на основе заголовков
22
+ if (isFileResponse(response.headers)) {
23
+ responseFormat = ResponseFormat.Blob;
24
+ } else {
25
+ responseFormat = getResponseFormatForMimeType(contentType);
26
+ }
27
+ }
28
+ // Если формат всё ещё не определен, используем JSON по умолчанию
29
+ if (!responseFormat) {
30
+ responseFormat = ResponseFormat.Json;
31
+ }
32
+ try {
33
+ // Получение метаданных файла, если формат указывает на файл
34
+ let fileMetadata;
35
+ if (responseFormat === ResponseFormat.Blob || responseFormat === ResponseFormat.ArrayBuffer) {
36
+ fileMetadata = getFileMetadataFromHeaders(response.headers);
37
+ }
38
+ // Обработка данных в зависимости от формата
39
+ switch(responseFormat){
40
+ case ResponseFormat.Json:
41
+ {
42
+ // Пробуем получить JSON-данные
43
+ try {
44
+ const data = await response.json();
45
+ return response.ok ? {
46
+ data: data,
47
+ fileMetadata
48
+ } : {
49
+ error: data,
50
+ fileMetadata
51
+ };
52
+ } catch (error) {
53
+ // Если не удалось разобрать JSON, возвращаем текст
54
+ const text = await response.text();
55
+ return response.ok ? {
56
+ data: text,
57
+ fileMetadata
58
+ } : {
59
+ error: text,
60
+ fileMetadata
61
+ };
62
+ }
63
+ }
64
+ case ResponseFormat.Text:
65
+ {
66
+ const text = await response.text();
67
+ return response.ok ? {
68
+ data: text,
69
+ fileMetadata
70
+ } : {
71
+ error: text,
72
+ fileMetadata
73
+ };
74
+ }
75
+ case ResponseFormat.Blob:
76
+ {
77
+ const blob = await response.blob();
78
+ return response.ok ? {
79
+ data: blob,
80
+ fileMetadata
81
+ } : {
82
+ error: blob,
83
+ fileMetadata
84
+ };
85
+ }
86
+ case ResponseFormat.ArrayBuffer:
87
+ {
88
+ const buffer = await response.arrayBuffer();
89
+ return response.ok ? {
90
+ data: buffer,
91
+ fileMetadata
92
+ } : {
93
+ error: buffer,
94
+ fileMetadata
95
+ };
96
+ }
97
+ case ResponseFormat.FormData:
98
+ {
99
+ const formData = await response.formData();
100
+ return response.ok ? {
101
+ data: formData,
102
+ fileMetadata
103
+ } : {
104
+ error: formData,
105
+ fileMetadata
106
+ };
107
+ }
108
+ case ResponseFormat.Raw:
109
+ {
110
+ return response.ok ? {
111
+ data: response,
112
+ fileMetadata
113
+ } : {
114
+ error: response,
115
+ fileMetadata
116
+ };
117
+ }
118
+ default:
119
+ // Если формат неизвестен, возвращаем blob как наиболее универсальный
120
+ // eslint-disable-next-line no-case-declarations
121
+ const blob = await response.blob();
122
+ return response.ok ? {
123
+ data: blob,
124
+ fileMetadata
125
+ } : {
126
+ error: blob,
127
+ fileMetadata
128
+ };
129
+ }
130
+ } catch (err) {
131
+ handleCallbackError(`fetchBaseQuery: error extracting response data (format: ${responseFormat})`, err);
132
+ return response.ok ? {
133
+ data: undefined
134
+ } : {
135
+ error: err
136
+ };
137
+ }
138
+ }
139
+ /**
140
+ * Создает базовый fetch-клиент для запросов с поддержкой файлов
141
+ * @param options Настройки базового клиента
142
+ * @returns Функция для выполнения запросов
143
+ */ function fetchBaseQuery(options) {
144
+ const { baseUrl, timeout = 30000, fetchFn = fetch, credentials = 'same-origin' } = options;
145
+ return async (args, queryOptions = {}, headers)=>{
146
+ const { path, method, body, query, responseFormat: reqResponseFormat } = args;
147
+ const { signal, timeout: requestTimeout = timeout, responseFormat: optResponseFormat } = queryOptions;
148
+ // Определяем формат ответа с приоритетом от options
149
+ const responseFormat = optResponseFormat || reqResponseFormat;
150
+ // Строим URL с учетом api параметров
151
+ const url = new URL(path.startsWith('http') ? path : `${baseUrl}${path}`);
152
+ // Добавляем query-параметры в URL
153
+ if (query) {
154
+ Object.entries(query).forEach(([key, value])=>{
155
+ if (value !== undefined && value !== null) {
156
+ if (Array.isArray(value)) {
157
+ value.forEach((item)=>url.searchParams.append(key, String(item)));
158
+ } else {
159
+ url.searchParams.append(key, String(value));
160
+ }
161
+ }
162
+ });
163
+ }
164
+ // Если body это объект, конвертируем в JSON и устанавливаем Content-Type
165
+ let serializedBody;
166
+ if (body !== undefined) {
167
+ if (body instanceof FormData || body instanceof Blob) {
168
+ serializedBody = body;
169
+ } else if (typeof body === 'object' && body !== null) {
170
+ try {
171
+ serializedBody = JSON.stringify(body);
172
+ if (!headers.has('Content-Type')) {
173
+ headers.set('Content-Type', 'application/json');
174
+ }
175
+ } catch (error) {
176
+ logError('fetchBaseQuery: error serializing request body', error);
177
+ serializedBody = String(body);
178
+ }
179
+ } else {
180
+ serializedBody = String(body);
181
+ }
182
+ }
183
+ // Создаем таймаут если указан
184
+ let timeoutId;
185
+ const timeoutPromise = new Promise((_, reject)=>{
186
+ if (requestTimeout) {
187
+ timeoutId = globalThis.setTimeout(()=>{
188
+ reject(new Error(`Превышено время ожидания запроса (${requestTimeout}мс)`));
189
+ }, requestTimeout);
190
+ }
191
+ });
192
+ try {
193
+ // Выполняем запрос
194
+ const fetchPromise = fetchFn(url.toString(), {
195
+ method,
196
+ headers,
197
+ body: serializedBody,
198
+ signal,
199
+ credentials
200
+ });
201
+ // Используем Promise.race для обработки таймаута
202
+ const response = await Promise.race([
203
+ fetchPromise,
204
+ timeoutPromise
205
+ ]);
206
+ // Обрабатываем ответ
207
+ const { data, error, fileMetadata } = await getResponseData(response, responseFormat);
208
+ // Формируем результат запроса
209
+ const result = {
210
+ data,
211
+ error,
212
+ ok: response.ok,
213
+ status: response.status,
214
+ statusText: response.statusText,
215
+ headers: response.headers,
216
+ fileDownloadResult: fileMetadata
217
+ };
218
+ return result;
219
+ } catch (err) {
220
+ // Обрабатываем ошибки сети или таймаута
221
+ const error = err;
222
+ handleCallbackError('fetchBaseQuery: request execution error', error);
223
+ // Формируем результат с ошибкой
224
+ return {
225
+ error: error,
226
+ ok: false,
227
+ status: 0,
228
+ statusText: error.message,
229
+ headers: new Headers()
230
+ };
231
+ } finally{
232
+ // Очищаем таймер в любом случае
233
+ if (timeoutId) {
234
+ globalThis.clearTimeout(timeoutId);
235
+ }
236
+ }
237
+ };
238
+ }
239
+
240
+ export { fetchBaseQuery };
241
+
242
+ //# sourceMappingURL=fetch-base-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/utils/fetch-base-query.js","sources":["../../../src/api/utils/fetch-base-query.ts"],"sourcesContent":["import { handleCallbackError, logError } from '../../_utils/error-handling.util'\nimport { ApiContext, FetchBaseQueryArgs, RequestDefinition, ResponseFormat } from '../types/api.interface'\nimport { FileDownloadResult, QueryOptions, QueryResult } from '../types/query.interface'\nimport { getFileMetadataFromHeaders, getResponseFormatForMimeType, isFileResponse } from './file-utils'\n\n/**\n * Извлекает данные из response в зависимости от формата\n * @param response Объект Response\n * @param format Формат ответа\n * @returns Объект с данными или ошибкой\n */\nasync function getResponseData<T, E extends Error>(response: Response, format?: ResponseFormat): Promise<{ data?: T; error?: E; fileMetadata?: FileDownloadResult }> {\n let responseFormat = format\n const contentType = response.headers.get('content-type') || ''\n\n // Если формат не указан, пытаемся определить его из MIME-типа\n if (!responseFormat && contentType) {\n // Проверка, является ли ответ файлом на основе заголовков\n if (isFileResponse(response.headers)) {\n responseFormat = ResponseFormat.Blob\n } else {\n responseFormat = getResponseFormatForMimeType(contentType)\n }\n }\n\n // Если формат всё ещё не определен, используем JSON по умолчанию\n if (!responseFormat) {\n responseFormat = ResponseFormat.Json\n }\n\n try {\n // Получение метаданных файла, если формат указывает на файл\n let fileMetadata: any\n if (responseFormat === ResponseFormat.Blob || responseFormat === ResponseFormat.ArrayBuffer) {\n fileMetadata = getFileMetadataFromHeaders(response.headers)\n }\n\n // Обработка данных в зависимости от формата\n switch (responseFormat) {\n case ResponseFormat.Json: {\n // Пробуем получить JSON-данные\n try {\n const data = await response.json()\n return response.ok ? { data: data as T, fileMetadata } : { error: data as E, fileMetadata }\n } catch (error) {\n // Если не удалось разобрать JSON, возвращаем текст\n const text = await response.text()\n return response.ok ? { data: text as unknown as T, fileMetadata } : { error: text as unknown as E, fileMetadata }\n }\n }\n\n case ResponseFormat.Text: {\n const text = await response.text()\n return response.ok ? { data: text as unknown as T, fileMetadata } : { error: text as unknown as E, fileMetadata }\n }\n\n case ResponseFormat.Blob: {\n const blob = await response.blob()\n return response.ok ? { data: blob as unknown as T, fileMetadata } : { error: blob as unknown as E, fileMetadata }\n }\n\n case ResponseFormat.ArrayBuffer: {\n const buffer = await response.arrayBuffer()\n return response.ok ? { data: buffer as unknown as T, fileMetadata } : { error: buffer as unknown as E, fileMetadata }\n }\n\n case ResponseFormat.FormData: {\n const formData = await response.formData()\n return response.ok ? { data: formData as unknown as T, fileMetadata } : { error: formData as unknown as E, fileMetadata }\n }\n\n case ResponseFormat.Raw: {\n return response.ok ? { data: response as unknown as T, fileMetadata } : { error: response as unknown as E, fileMetadata }\n }\n\n default:\n // Если формат неизвестен, возвращаем blob как наиболее универсальный\n // eslint-disable-next-line no-case-declarations\n const blob = await response.blob()\n return response.ok ? { data: blob as unknown as T, fileMetadata } : { error: blob as unknown as E, fileMetadata }\n }\n } catch (err) {\n handleCallbackError(`fetchBaseQuery: error extracting response data (format: ${responseFormat})`, err)\n return response.ok ? { data: undefined } : { error: err as E }\n }\n}\n\n/**\n * Создает базовый fetch-клиент для запросов с поддержкой файлов\n * @param options Настройки базового клиента\n * @returns Функция для выполнения запросов\n */\nexport function fetchBaseQuery(options: Omit<FetchBaseQueryArgs, 'prepareHeaders'>) {\n const { baseUrl, timeout = 30000, fetchFn = fetch, credentials = 'same-origin' } = options\n\n return async <RequestResult, RequestParams extends Record<string, any>, E extends Error = Error>(\n args: RequestDefinition<RequestParams>,\n queryOptions: QueryOptions = {},\n headers: Headers,\n ): Promise<QueryResult<RequestResult, E>> => {\n const { path, method, body, query, responseFormat: reqResponseFormat } = args\n\n const { signal, timeout: requestTimeout = timeout, responseFormat: optResponseFormat } = queryOptions\n\n // Определяем формат ответа с приоритетом от options\n const responseFormat = optResponseFormat || reqResponseFormat\n\n // Строим URL с учетом api параметров\n const url = new URL(path.startsWith('http') ? path : `${baseUrl}${path}`)\n\n // Добавляем query-параметры в URL\n if (query) {\n Object.entries(query).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n if (Array.isArray(value)) {\n value.forEach((item) => url.searchParams.append(key, String(item)))\n } else {\n url.searchParams.append(key, String(value))\n }\n }\n })\n }\n\n // Если body это объект, конвертируем в JSON и устанавливаем Content-Type\n let serializedBody: string | FormData | Blob | undefined\n if (body !== undefined) {\n if (body instanceof FormData || body instanceof Blob) {\n serializedBody = body\n } else if (typeof body === 'object' && body !== null) {\n try {\n serializedBody = JSON.stringify(body)\n if (!headers.has('Content-Type')) {\n headers.set('Content-Type', 'application/json')\n }\n } catch (error) {\n logError('fetchBaseQuery: error serializing request body', error)\n serializedBody = String(body)\n }\n } else {\n serializedBody = String(body)\n }\n }\n\n // Создаем таймаут если указан\n let timeoutId: ReturnType<typeof setTimeout> | undefined\n const timeoutPromise = new Promise<never>((_, reject) => {\n if (requestTimeout) {\n timeoutId = globalThis.setTimeout(() => {\n reject(new Error(`Превышено время ожидания запроса (${requestTimeout}мс)`))\n }, requestTimeout)\n }\n })\n\n try {\n // Выполняем запрос\n const fetchPromise = fetchFn(url.toString(), {\n method,\n headers,\n body: serializedBody,\n signal,\n credentials,\n })\n\n // Используем Promise.race для обработки таймаута\n const response = await Promise.race([fetchPromise, timeoutPromise])\n\n // Обрабатываем ответ\n const { data, error, fileMetadata } = await getResponseData<RequestResult, E>(response, responseFormat as ResponseFormat)\n\n // Формируем результат запроса\n const result: QueryResult<RequestResult, E> = {\n data,\n error,\n ok: response.ok,\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n fileDownloadResult: fileMetadata,\n }\n\n return result\n } catch (err) {\n // Обрабатываем ошибки сети или таймаута\n const error = err as Error\n handleCallbackError('fetchBaseQuery: request execution error', error)\n\n // Формируем результат с ошибкой\n return {\n error: error as E,\n ok: false,\n status: 0,\n statusText: error.message,\n headers: new Headers(),\n }\n } finally {\n // Очищаем таймер в любом случае\n if (timeoutId) {\n globalThis.clearTimeout(timeoutId)\n }\n }\n }\n}\n"],"names":["handleCallbackError","logError","ResponseFormat","getFileMetadataFromHeaders","getResponseFormatForMimeType","isFileResponse","getResponseData","response","format","responseFormat","contentType","fileMetadata","data","error","text","blob","buffer","formData","err","undefined","fetchBaseQuery","options","baseUrl","timeout","fetchFn","fetch","credentials","args","queryOptions","headers","path","method","body","query","reqResponseFormat","signal","requestTimeout","optResponseFormat","url","URL","Object","key","value","Array","item","String","serializedBody","FormData","Blob","JSON","timeoutId","timeoutPromise","Promise","_","reject","globalThis","Error","fetchPromise","result","Headers"],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import { ResponseFormat } from '../types/api.interface';
2
+ /**
3
+ * Получает формат ответа на основе MIME-типа
4
+ * @param contentType MIME-тип контента
5
+ * @returns Формат ответа
6
+ */
7
+ export declare function getResponseFormatForMimeType(contentType: string): ResponseFormat | undefined;
8
+ /**
9
+ * Проверяет, является ли ответ файлом на основе заголовков
10
+ * @param headers Заголовки ответа
11
+ * @returns true если ответ является файлом
12
+ */
13
+ export declare function isFileResponse(headers: Headers): boolean;
14
+ /**
15
+ * Извлекает имя файла из заголовков
16
+ * @param headers Заголовки ответа
17
+ * @returns Имя файла
18
+ */
19
+ export declare function extractFilenameFromHeaders(headers: Headers): string | undefined;
20
+ /**
21
+ * Извлекает метаданные файла из заголовков
22
+ * @param headers Заголовки ответа
23
+ * @returns Метаданные файла
24
+ */
25
+ export declare function getFileMetadataFromHeaders(headers: Headers): Record<string, any> | undefined;
26
+ /**
27
+ * Создает blob URL для файла
28
+ * @param blob Объект Blob или File
29
+ * @returns URL для доступа к файлу
30
+ */
31
+ export declare function createBlobUrl(blob: Blob): string;
32
+ /**
33
+ * Освобождает blob URL
34
+ * @param url URL для освобождения
35
+ */
36
+ export declare function revokeBlobUrl(url: string): void;
37
+ /**
38
+ * Скачивает файл в браузере
39
+ * @param blob Объект Blob или File
40
+ * @param filename Имя файла
41
+ */
42
+ export declare function downloadBlob(blob: Blob, filename: string): void;
43
+ //# sourceMappingURL=file-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-utils.d.ts","sourceRoot":"","sources":["../../../src/api/utils/file-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEvD;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAoB5F;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAgBxD;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAa/E;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,CAiB5F;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAEhD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAS/D"}
@@ -0,0 +1,102 @@
1
+ import { ResponseFormat } from "../types/api.interface.js";
2
+
3
+
4
+
5
+ /**
6
+ * Получает формат ответа на основе MIME-типа
7
+ * @param contentType MIME-тип контента
8
+ * @returns Формат ответа
9
+ */ function getResponseFormatForMimeType(contentType) {
10
+ const type = contentType.toLowerCase().split(';')[0].trim();
11
+ if (type.includes('application/json')) {
12
+ return ResponseFormat.Json;
13
+ }
14
+ if (type.includes('text/')) {
15
+ return ResponseFormat.Text;
16
+ }
17
+ if (type.includes('multipart/form-data')) {
18
+ return ResponseFormat.FormData;
19
+ }
20
+ if (type.includes('application/octet-stream') || type.includes('application/pdf') || type.includes('image/') || type.includes('audio/') || type.includes('video/')) {
21
+ return ResponseFormat.Blob;
22
+ }
23
+ return undefined;
24
+ }
25
+ /**
26
+ * Проверяет, является ли ответ файлом на основе заголовков
27
+ * @param headers Заголовки ответа
28
+ * @returns true если ответ является файлом
29
+ */ function isFileResponse(headers) {
30
+ const contentType = headers.get('content-type') || '';
31
+ const contentDisposition = headers.get('content-disposition') || '';
32
+ // Проверяем по типу контента
33
+ const isFileContentType = contentType.includes('application/octet-stream') || contentType.includes('application/pdf') || contentType.includes('image/') || contentType.includes('audio/') || contentType.includes('video/');
34
+ // Проверяем по заголовку content-disposition
35
+ const isAttachment = contentDisposition.includes('attachment') || contentDisposition.includes('filename=');
36
+ return isFileContentType || isAttachment;
37
+ }
38
+ /**
39
+ * Извлекает имя файла из заголовков
40
+ * @param headers Заголовки ответа
41
+ * @returns Имя файла
42
+ */ function extractFilenameFromHeaders(headers) {
43
+ const contentDisposition = headers.get('content-disposition');
44
+ if (!contentDisposition) return undefined;
45
+ // Пытаемся извлечь имя файла из content-disposition
46
+ const filenameMatch = contentDisposition.match(/filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/);
47
+ if (filenameMatch && filenameMatch[1]) {
48
+ // Очищаем от кавычек
49
+ return filenameMatch[1].replace(/['"]/g, '').trim();
50
+ }
51
+ return undefined;
52
+ }
53
+ /**
54
+ * Извлекает метаданные файла из заголовков
55
+ * @param headers Заголовки ответа
56
+ * @returns Метаданные файла
57
+ */ function getFileMetadataFromHeaders(headers) {
58
+ const contentType = headers.get('content-type') || '';
59
+ const contentDisposition = headers.get('content-disposition') || '';
60
+ const contentLength = headers.get('content-length');
61
+ if (!isFileResponse(headers)) {
62
+ return undefined;
63
+ }
64
+ const filename = extractFilenameFromHeaders(headers);
65
+ return {
66
+ filename,
67
+ contentType,
68
+ contentDisposition,
69
+ size: contentLength ? parseInt(contentLength, 10) : undefined
70
+ };
71
+ }
72
+ /**
73
+ * Создает blob URL для файла
74
+ * @param blob Объект Blob или File
75
+ * @returns URL для доступа к файлу
76
+ */ function createBlobUrl(blob) {
77
+ return URL.createObjectURL(blob);
78
+ }
79
+ /**
80
+ * Освобождает blob URL
81
+ * @param url URL для освобождения
82
+ */ function revokeBlobUrl(url) {
83
+ URL.revokeObjectURL(url);
84
+ }
85
+ /**
86
+ * Скачивает файл в браузере
87
+ * @param blob Объект Blob или File
88
+ * @param filename Имя файла
89
+ */ function downloadBlob(blob, filename) {
90
+ const url = createBlobUrl(blob);
91
+ const link = document.createElement('a');
92
+ link.href = url;
93
+ link.download = filename;
94
+ document.body.appendChild(link);
95
+ link.click();
96
+ document.body.removeChild(link);
97
+ setTimeout(()=>revokeBlobUrl(url), 100);
98
+ }
99
+
100
+ export { createBlobUrl, downloadBlob, extractFilenameFromHeaders, getFileMetadataFromHeaders, getResponseFormatForMimeType, isFileResponse, revokeBlobUrl };
101
+
102
+ //# sourceMappingURL=file-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/utils/file-utils.js","sources":["../../../src/api/utils/file-utils.ts"],"sourcesContent":["import { ResponseFormat } from '../types/api.interface'\n\n/**\n * Получает формат ответа на основе MIME-типа\n * @param contentType MIME-тип контента\n * @returns Формат ответа\n */\nexport function getResponseFormatForMimeType(contentType: string): ResponseFormat | undefined {\n const type = contentType.toLowerCase().split(';')[0].trim()\n\n if (type.includes('application/json')) {\n return ResponseFormat.Json\n }\n\n if (type.includes('text/')) {\n return ResponseFormat.Text\n }\n\n if (type.includes('multipart/form-data')) {\n return ResponseFormat.FormData\n }\n\n if (type.includes('application/octet-stream') || type.includes('application/pdf') || type.includes('image/') || type.includes('audio/') || type.includes('video/')) {\n return ResponseFormat.Blob\n }\n\n return undefined\n}\n\n/**\n * Проверяет, является ли ответ файлом на основе заголовков\n * @param headers Заголовки ответа\n * @returns true если ответ является файлом\n */\nexport function isFileResponse(headers: Headers): boolean {\n const contentType = headers.get('content-type') || ''\n const contentDisposition = headers.get('content-disposition') || ''\n\n // Проверяем по типу контента\n const isFileContentType =\n contentType.includes('application/octet-stream') ||\n contentType.includes('application/pdf') ||\n contentType.includes('image/') ||\n contentType.includes('audio/') ||\n contentType.includes('video/')\n\n // Проверяем по заголовку content-disposition\n const isAttachment = contentDisposition.includes('attachment') || contentDisposition.includes('filename=')\n\n return isFileContentType || isAttachment\n}\n\n/**\n * Извлекает имя файла из заголовков\n * @param headers Заголовки ответа\n * @returns Имя файла\n */\nexport function extractFilenameFromHeaders(headers: Headers): string | undefined {\n const contentDisposition = headers.get('content-disposition')\n\n if (!contentDisposition) return undefined\n\n // Пытаемся извлечь имя файла из content-disposition\n const filenameMatch = contentDisposition.match(/filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/)\n if (filenameMatch && filenameMatch[1]) {\n // Очищаем от кавычек\n return filenameMatch[1].replace(/['\"]/g, '').trim()\n }\n\n return undefined\n}\n\n/**\n * Извлекает метаданные файла из заголовков\n * @param headers Заголовки ответа\n * @returns Метаданные файла\n */\nexport function getFileMetadataFromHeaders(headers: Headers): Record<string, any> | undefined {\n const contentType = headers.get('content-type') || ''\n const contentDisposition = headers.get('content-disposition') || ''\n const contentLength = headers.get('content-length')\n\n if (!isFileResponse(headers)) {\n return undefined\n }\n\n const filename = extractFilenameFromHeaders(headers)\n\n return {\n filename,\n contentType,\n contentDisposition,\n size: contentLength ? parseInt(contentLength, 10) : undefined,\n }\n}\n\n/**\n * Создает blob URL для файла\n * @param blob Объект Blob или File\n * @returns URL для доступа к файлу\n */\nexport function createBlobUrl(blob: Blob): string {\n return URL.createObjectURL(blob)\n}\n\n/**\n * Освобождает blob URL\n * @param url URL для освобождения\n */\nexport function revokeBlobUrl(url: string): void {\n URL.revokeObjectURL(url)\n}\n\n/**\n * Скачивает файл в браузере\n * @param blob Объект Blob или File\n * @param filename Имя файла\n */\nexport function downloadBlob(blob: Blob, filename: string): void {\n const url = createBlobUrl(blob)\n const link = document.createElement('a')\n link.href = url\n link.download = filename\n document.body.appendChild(link)\n link.click()\n document.body.removeChild(link)\n setTimeout(() => revokeBlobUrl(url), 100)\n}\n"],"names":["ResponseFormat","getResponseFormatForMimeType","contentType","type","undefined","isFileResponse","headers","contentDisposition","isFileContentType","isAttachment","extractFilenameFromHeaders","filenameMatch","getFileMetadataFromHeaders","contentLength","filename","parseInt","createBlobUrl","blob","URL","revokeBlobUrl","url","downloadBlob","link","document","setTimeout"],"mappings":";;;AAAuD;AAEvD;;;;CAIC,GACM,SAASC,4BAA4BA,CAACC,WAAmB;IAC9D,MAAMC,OAAOD,YAAY,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI;IAEzD,IAAIC,KAAK,QAAQ,CAAC,qBAAqB;QACrC,OAAOH,mBAAmB;IAC5B;IAEA,IAAIG,KAAK,QAAQ,CAAC,UAAU;QAC1B,OAAOH,mBAAmB;IAC5B;IAEA,IAAIG,KAAK,QAAQ,CAAC,wBAAwB;QACxC,OAAOH,uBAAuB;IAChC;IAEA,IAAIG,KAAK,QAAQ,CAAC,+BAA+BA,KAAK,QAAQ,CAAC,sBAAsBA,KAAK,QAAQ,CAAC,aAAaA,KAAK,QAAQ,CAAC,aAAaA,KAAK,QAAQ,CAAC,WAAW;QAClK,OAAOH,mBAAmB;IAC5B;IAEA,OAAOI;AACT;AAEA;;;;CAIC,GACM,SAASC,cAAcA,CAACC,OAAgB;IAC7C,MAAMJ,cAAcI,QAAQ,GAAG,CAAC,mBAAmB;IACnD,MAAMC,qBAAqBD,QAAQ,GAAG,CAAC,0BAA0B;IAEjE,6BAA6B;IAC7B,MAAME,oBACJN,YAAY,QAAQ,CAAC,+BACrBA,YAAY,QAAQ,CAAC,sBACrBA,YAAY,QAAQ,CAAC,aACrBA,YAAY,QAAQ,CAAC,aACrBA,YAAY,QAAQ,CAAC;IAEvB,6CAA6C;IAC7C,MAAMO,eAAeF,mBAAmB,QAAQ,CAAC,iBAAiBA,mBAAmB,QAAQ,CAAC;IAE9F,OAAOC,qBAAqBC;AAC9B;AAEA;;;;CAIC,GACM,SAASC,0BAA0BA,CAACJ,OAAgB;IACzD,MAAMC,qBAAqBD,QAAQ,GAAG,CAAC;IAEvC,IAAI,CAACC,oBAAoB,OAAOH;IAEhC,oDAAoD;IACpD,MAAMO,gBAAgBJ,mBAAmB,KAAK,CAAC;IAC/C,IAAII,iBAAiBA,aAAa,CAAC,EAAE,EAAE;QACrC,qBAAqB;QACrB,OAAOA,aAAa,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI;IACnD;IAEA,OAAOP;AACT;AAEA;;;;CAIC,GACM,SAASQ,0BAA0BA,CAACN,OAAgB;IACzD,MAAMJ,cAAcI,QAAQ,GAAG,CAAC,mBAAmB;IACnD,MAAMC,qBAAqBD,QAAQ,GAAG,CAAC,0BAA0B;IACjE,MAAMO,gBAAgBP,QAAQ,GAAG,CAAC;IAElC,IAAI,CAACD,cAAcA,CAACC,UAAU;QAC5B,OAAOF;IACT;IAEA,MAAMU,WAAWJ,0BAA0BA,CAACJ;IAE5C,OAAO;QACLQ;QACAZ;QACAK;QACA,MAAMM,gBAAgBE,SAASF,eAAe,MAAMT;IACtD;AACF;AAEA;;;;CAIC,GACM,SAASY,aAAaA,CAACC,IAAU;IACtC,OAAOC,IAAI,eAAe,CAACD;AAC7B;AAEA;;;CAGC,GACM,SAASE,aAAaA,CAACC,GAAW;IACvCF,IAAI,eAAe,CAACE;AACtB;AAEA;;;;CAIC,GACM,SAASC,YAAYA,CAACJ,IAAU,EAAEH,QAAgB;IACvD,MAAMM,MAAMJ,aAAaA,CAACC;IAC1B,MAAMK,OAAOC,SAAS,aAAa,CAAC;IACpCD,KAAK,IAAI,GAAGF;IACZE,KAAK,QAAQ,GAAGR;IAChBS,SAAS,IAAI,CAAC,WAAW,CAACD;IAC1BA,KAAK,KAAK;IACVC,SAAS,IAAI,CAAC,WAAW,CAACD;IAC1BE,WAAW,IAAML,aAAaA,CAACC,MAAM;AACvC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Создает объект с заголовками для кэширования на основе списка допустимых ключей
3
+ * @param headers Заголовки запроса
4
+ * @param cacheableHeaders Массив ключей заголовков, которые нужно включить в кэш
5
+ * @returns Объект с отфильтрованными заголовками
6
+ */
7
+ export declare function getCacheableHeaders(headers: Headers, cacheableHeaders?: string[]): Record<string, string>;
8
+ //# sourceMappingURL=get-cacheable-headers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-cacheable-headers.d.ts","sourceRoot":"","sources":["../../../src/api/utils/get-cacheable-headers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,gBAAgB,GAAE,MAAM,EAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAgB7G"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Создает объект с заголовками для кэширования на основе списка допустимых ключей
3
+ * @param headers Заголовки запроса
4
+ * @param cacheableHeaders Массив ключей заголовков, которые нужно включить в кэш
5
+ * @returns Объект с отфильтрованными заголовками
6
+ */ function getCacheableHeaders(headers, cacheableHeaders = []) {
7
+ const result = {};
8
+ if (!headers || cacheableHeaders.length === 0) {
9
+ return result;
10
+ }
11
+ // Проходим по всем ключам в cacheableHeaders
12
+ cacheableHeaders.forEach((key)=>{
13
+ // Если заголовок существует, добавляем его в результат
14
+ if (headers.has(key)) {
15
+ result[key] = headers.get(key) || '';
16
+ }
17
+ });
18
+ return result;
19
+ }
20
+
21
+ export { getCacheableHeaders };
22
+
23
+ //# sourceMappingURL=get-cacheable-headers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api/utils/get-cacheable-headers.js","sources":["../../../src/api/utils/get-cacheable-headers.ts"],"sourcesContent":["/**\n * Создает объект с заголовками для кэширования на основе списка допустимых ключей\n * @param headers Заголовки запроса\n * @param cacheableHeaders Массив ключей заголовков, которые нужно включить в кэш\n * @returns Объект с отфильтрованными заголовками\n */\nexport function getCacheableHeaders(headers: Headers, cacheableHeaders: string[] = []): Record<string, string> {\n const result: Record<string, string> = {}\n\n if (!headers || cacheableHeaders.length === 0) {\n return result\n }\n\n // Проходим по всем ключам в cacheableHeaders\n cacheableHeaders.forEach((key) => {\n // Если заголовок существует, добавляем его в результат\n if (headers.has(key)) {\n result[key] = headers.get(key) || ''\n }\n })\n\n return result\n}\n"],"names":["getCacheableHeaders","headers","cacheableHeaders","result","key"],"mappings":"AAAA;;;;;CAKC,GACM,SAASA,mBAAmBA,CAACC,OAAgB,EAAEC,mBAA6B,EAAE;IACnF,MAAMC,SAAiC,CAAC;IAExC,IAAI,CAACF,WAAWC,iBAAiB,MAAM,KAAK,GAAG;QAC7C,OAAOC;IACT;IAEA,6CAA6C;IAC7CD,iBAAiB,OAAO,CAAC,CAACE;QACxB,uDAAuD;QACvD,IAAIH,QAAQ,GAAG,CAACG,MAAM;YACpBD,MAAM,CAACC,IAAI,GAAGH,QAAQ,GAAG,CAACG,QAAQ;QACpC;IACF;IAEA,OAAOD;AACT"}
@@ -0,0 +1,3 @@
1
+ export * from './selector';
2
+ export * from './storage';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA"}
@@ -0,0 +1,7 @@
1
+ export * from "./selector/index.js";
2
+ export * from "./storage/index.js";
3
+
4
+
5
+
6
+
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core/index.js","sources":["../../src/core/index.ts"],"sourcesContent":["export * from './selector'\nexport * from './storage'\n"],"names":[],"mappings":";;AAA0B;AACD"}
@@ -0,0 +1,3 @@
1
+ export type { ISelectorModule, SelectorAPI } from './selector.interface';
2
+ export * from './selector.module';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/selector/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACxE,cAAc,mBAAmB,CAAA"}
@@ -0,0 +1,5 @@
1
+ export * from "./selector.module.js";
2
+
3
+
4
+
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core/selector/index.js","sources":["../../../src/core/selector/index.ts"],"sourcesContent":["export type { ISelectorModule, SelectorAPI } from './selector.interface'\nexport * from './selector.module'\n"],"names":[],"mappings":";AACiC"}