@sima-land/isomorph 11.0.0-alpha.62 → 11.0.0-alpha.63

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 (317) hide show
  1. package/dist/cjs/cache/index.js.map +1 -1
  2. package/dist/cjs/cache/types.js.map +1 -1
  3. package/dist/cjs/config/base.js.map +1 -1
  4. package/dist/cjs/config/index.js.map +1 -1
  5. package/dist/cjs/config/source.js.map +1 -1
  6. package/dist/cjs/config/types.js.map +1 -1
  7. package/dist/cjs/di/application.js.map +1 -1
  8. package/dist/cjs/di/container.js.map +1 -1
  9. package/dist/cjs/di/errors.js.map +1 -1
  10. package/dist/cjs/di/index.js.map +1 -1
  11. package/dist/cjs/di/preset.js.map +1 -1
  12. package/dist/cjs/di/token.js.map +1 -1
  13. package/dist/cjs/di/types.js.map +1 -1
  14. package/dist/cjs/http/errors.js.map +1 -1
  15. package/dist/cjs/http/index.js.map +1 -1
  16. package/dist/cjs/http/types.js.map +1 -1
  17. package/dist/cjs/http/utils.js.map +1 -1
  18. package/dist/cjs/log/errors.js.map +1 -1
  19. package/dist/cjs/log/handler/pino.js.map +1 -1
  20. package/dist/cjs/log/handler/sentry.js.map +1 -1
  21. package/dist/cjs/log/index.js.map +1 -1
  22. package/dist/cjs/log/logger.js.map +1 -1
  23. package/dist/cjs/log/types.js.map +1 -1
  24. package/dist/cjs/package.json +23 -23
  25. package/dist/cjs/preset/isomorphic/index.js.map +1 -1
  26. package/dist/cjs/preset/isomorphic/providers/abort-controller.js.map +1 -1
  27. package/dist/cjs/preset/isomorphic/providers/axios-factory.js.map +1 -1
  28. package/dist/cjs/preset/isomorphic/providers/axios-log-handler.js.map +1 -1
  29. package/dist/cjs/preset/isomorphic/providers/base-config.js.map +1 -1
  30. package/dist/cjs/preset/isomorphic/providers/fetch.js.map +1 -1
  31. package/dist/cjs/preset/isomorphic/providers/redux-middleware-saga.js.map +1 -1
  32. package/dist/cjs/preset/isomorphic/types.js.map +1 -1
  33. package/dist/cjs/preset/isomorphic/utils/axios-logging.js.map +1 -1
  34. package/dist/cjs/preset/isomorphic/utils/disableable.js.map +1 -1
  35. package/dist/cjs/preset/isomorphic/utils/display-url.js.map +1 -1
  36. package/dist/cjs/preset/isomorphic/utils/fetch-logging.js.map +1 -1
  37. package/dist/cjs/preset/isomorphic/utils/get-fetch-error-logging.js.map +1 -1
  38. package/dist/cjs/preset/isomorphic/utils/get-fetch-extra-aborting.js.map +1 -1
  39. package/dist/cjs/preset/isomorphic/utils/get-fetch-logging.js.map +1 -1
  40. package/dist/cjs/preset/isomorphic/utils/http-api-host-pool.js.map +1 -1
  41. package/dist/cjs/preset/isomorphic/utils/http-status.js.map +1 -1
  42. package/dist/cjs/preset/isomorphic/utils/saga-logging.js.map +1 -1
  43. package/dist/cjs/preset/isomorphic/utils/severity-from-status.js.map +1 -1
  44. package/dist/cjs/preset/node/index.js.map +1 -1
  45. package/dist/cjs/preset/node/providers/config-source.js.map +1 -1
  46. package/dist/cjs/preset/node/providers/express-error-middleware.js.map +1 -1
  47. package/dist/cjs/preset/node/providers/express-factory.js.map +1 -1
  48. package/dist/cjs/preset/node/providers/express-log-middleware.js.map +1 -1
  49. package/dist/cjs/preset/node/providers/express-metrics-middleware.js.map +1 -1
  50. package/dist/cjs/preset/node/providers/express-request-middleware.js.map +1 -1
  51. package/dist/cjs/preset/node/providers/express-tracing-middleware.js.map +1 -1
  52. package/dist/cjs/preset/node/providers/log-handler-pino.js.map +1 -1
  53. package/dist/cjs/preset/node/providers/log-handler-sentry.js.map +1 -1
  54. package/dist/cjs/preset/node/providers/logger.js.map +1 -1
  55. package/dist/cjs/preset/node/providers/main-express-app.js +0 -1
  56. package/dist/cjs/preset/node/providers/main-express-app.js.map +1 -1
  57. package/dist/cjs/preset/node/providers/metrics-express-app.js.map +1 -1
  58. package/dist/cjs/preset/node/providers/public-envs.js.map +1 -1
  59. package/dist/cjs/preset/node/providers/telemetry-tracer-provider.js.map +1 -1
  60. package/dist/cjs/preset/node/providers/telemetry-tracer-resource.js.map +1 -1
  61. package/dist/cjs/preset/node/providers/telemetry-tracer-span-exporter.js.map +1 -1
  62. package/dist/cjs/preset/node/providers/telemetry-tracer.js.map +1 -1
  63. package/dist/cjs/preset/node/types.js.map +1 -1
  64. package/dist/cjs/preset/node/utils/axios-tracing-middleware.js.map +1 -1
  65. package/dist/cjs/preset/node/utils/emitter-as-target.js.map +1 -1
  66. package/dist/cjs/preset/node/utils/get-client-ip.js.map +1 -1
  67. package/dist/cjs/preset/node/utils/get-fetch-tracing.js.map +1 -1
  68. package/dist/cjs/preset/node/utils/get-forwarded-headers.js.map +1 -1
  69. package/dist/cjs/preset/node/utils/get-handler-metrics.js.map +1 -1
  70. package/dist/cjs/preset/node/utils/get-page-response-format.js.map +1 -1
  71. package/dist/cjs/preset/node/utils/get-serve-measuring.js.map +1 -1
  72. package/dist/cjs/preset/node/utils/handler-provider.js.map +1 -1
  73. package/dist/cjs/preset/node/utils/telemetry.js.map +1 -1
  74. package/dist/cjs/preset/node-handler/index.js.map +1 -1
  75. package/dist/cjs/preset/node-handler/providers/accepts-type.js.map +1 -1
  76. package/dist/cjs/preset/node-handler/providers/axios-log-handler.js.map +1 -1
  77. package/dist/cjs/preset/node-handler/providers/axios-middleware.js.map +1 -1
  78. package/dist/cjs/preset/node-handler/providers/fetch-middleware.js.map +1 -1
  79. package/dist/cjs/preset/node-handler/providers/handler-main.js.map +1 -1
  80. package/dist/cjs/preset/node-handler/providers/response-events.js.map +1 -1
  81. package/dist/cjs/preset/node-handler/providers/specific-params.js.map +1 -1
  82. package/dist/cjs/preset/server/constants.js.map +1 -1
  83. package/dist/cjs/preset/server/index.js.map +1 -1
  84. package/dist/cjs/preset/server/providers/element-to-string.js.map +1 -1
  85. package/dist/cjs/preset/server/providers/fetch-log-handler.js.map +1 -1
  86. package/dist/cjs/preset/server/providers/fetch-middleware.js.map +1 -1
  87. package/dist/cjs/preset/server/providers/format-page-response.js.map +1 -1
  88. package/dist/cjs/preset/server/providers/known-http-api-hosts.js.map +1 -1
  89. package/dist/cjs/preset/server/providers/page-helmet.js.map +1 -1
  90. package/dist/cjs/preset/server/providers/page-render.js.map +1 -1
  91. package/dist/cjs/preset/server/providers/response-events.js.map +1 -1
  92. package/dist/cjs/preset/server/providers/serve.js +2 -1
  93. package/dist/cjs/preset/server/providers/serve.js.map +1 -1
  94. package/dist/cjs/preset/server/providers/ssr-bridge-server-side.js.map +1 -1
  95. package/dist/cjs/preset/server/types.js.map +1 -1
  96. package/dist/cjs/preset/server/utils/apply-server-middleware.js.map +1 -1
  97. package/dist/cjs/preset/server/utils/format-handler-error.js.map +1 -1
  98. package/dist/cjs/preset/server/utils/get-client-ip.js.map +1 -1
  99. package/dist/cjs/preset/server/utils/get-forwarded-headers.js.map +1 -1
  100. package/dist/cjs/preset/server/utils/get-health-check.js.map +1 -1
  101. package/dist/cjs/preset/server/utils/get-page-response-format.js.map +1 -1
  102. package/dist/cjs/preset/server/utils/get-serve-error-logging.js.map +1 -1
  103. package/dist/cjs/preset/server/utils/get-serve-logging.js.map +1 -1
  104. package/dist/cjs/preset/server/utils/handler-provider.js.map +1 -1
  105. package/dist/cjs/preset/server/utils/regular-helmet.js.map +1 -1
  106. package/dist/cjs/preset/server/utils/specific-extras.js.map +1 -1
  107. package/dist/cjs/preset/web/index.js.map +1 -1
  108. package/dist/cjs/preset/web/providers/axios-middleware.js.map +1 -1
  109. package/dist/cjs/preset/web/providers/config-source.js.map +1 -1
  110. package/dist/cjs/preset/web/providers/fetch-middleware.js.map +1 -1
  111. package/dist/cjs/preset/web/providers/known-http-api-hosts.js.map +1 -1
  112. package/dist/cjs/preset/web/providers/logger.js.map +1 -1
  113. package/dist/cjs/preset/web/providers/ssr-bridge-client-side.js.map +1 -1
  114. package/dist/cjs/tokens.js.map +1 -1
  115. package/dist/cjs/utils/axios/index.js.map +1 -1
  116. package/dist/cjs/utils/axios/middleware/log.js.map +1 -1
  117. package/dist/cjs/utils/axios/sauce/index.js.map +1 -1
  118. package/dist/cjs/utils/axios/utils/index.js.map +1 -1
  119. package/dist/cjs/utils/express/handler/health-check.js.map +1 -1
  120. package/dist/cjs/utils/express/index.js.map +1 -1
  121. package/dist/cjs/utils/express/utils/index.js.map +1 -1
  122. package/dist/cjs/utils/function.js.map +1 -1
  123. package/dist/cjs/utils/index.js.map +1 -1
  124. package/dist/cjs/utils/math.js.map +1 -1
  125. package/dist/cjs/utils/react/error-handlers/index.js.map +1 -1
  126. package/dist/cjs/utils/react/index.js.map +1 -1
  127. package/dist/cjs/utils/redux/index.js.map +1 -1
  128. package/dist/cjs/utils/redux/remote-data.js.map +1 -1
  129. package/dist/cjs/utils/redux-saga/index.js.map +1 -1
  130. package/dist/cjs/utils/redux-saga/middleware.js.map +1 -1
  131. package/dist/cjs/utils/redux-saga/take-chain.js.map +1 -1
  132. package/dist/cjs/utils/redux-saga/types.js.map +1 -1
  133. package/dist/cjs/utils/selectors/create-curried-selector.js.map +1 -1
  134. package/dist/cjs/utils/ssr/index.js.map +1 -1
  135. package/dist/cjs/utils/web/analytics/data-layer.js.map +1 -1
  136. package/dist/cjs/utils/web/analytics/index.js.map +1 -1
  137. package/dist/cjs/utils/web/analytics/oko.js.map +1 -1
  138. package/dist/cjs/utils/web/storage/index.js.map +1 -1
  139. package/dist/cjs/utils/webpack/env/index.js.map +1 -1
  140. package/dist/cjs/utils/webpack/env/types.js.map +1 -1
  141. package/dist/cjs/utils/webpack/env/utils.js.map +1 -1
  142. package/dist/cjs/utils/webpack/index.js.map +1 -1
  143. package/dist/cjs/utils/webpack/module-federation/index.js.map +1 -1
  144. package/dist/cjs/utils/webpack/module-federation/types.js.map +1 -1
  145. package/dist/cjs/utils/webpack/module-federation/utils.js.map +1 -1
  146. package/dist/esm/cache/index.js.map +1 -1
  147. package/dist/esm/cache/types.js.map +1 -1
  148. package/dist/esm/config/base.js.map +1 -1
  149. package/dist/esm/config/index.js.map +1 -1
  150. package/dist/esm/config/source.js.map +1 -1
  151. package/dist/esm/config/types.js.map +1 -1
  152. package/dist/esm/di/application.js.map +1 -1
  153. package/dist/esm/di/container.js.map +1 -1
  154. package/dist/esm/di/errors.js.map +1 -1
  155. package/dist/esm/di/index.js.map +1 -1
  156. package/dist/esm/di/preset.js.map +1 -1
  157. package/dist/esm/di/token.js.map +1 -1
  158. package/dist/esm/di/types.js.map +1 -1
  159. package/dist/esm/http/errors.js.map +1 -1
  160. package/dist/esm/http/index.js.map +1 -1
  161. package/dist/esm/http/types.js.map +1 -1
  162. package/dist/esm/http/utils.js.map +1 -1
  163. package/dist/esm/log/errors.js.map +1 -1
  164. package/dist/esm/log/handler/pino.js.map +1 -1
  165. package/dist/esm/log/handler/sentry.js.map +1 -1
  166. package/dist/esm/log/index.js.map +1 -1
  167. package/dist/esm/log/logger.js.map +1 -1
  168. package/dist/esm/log/types.js.map +1 -1
  169. package/dist/esm/package.json +23 -23
  170. package/dist/esm/preset/isomorphic/index.js.map +1 -1
  171. package/dist/esm/preset/isomorphic/providers/abort-controller.js.map +1 -1
  172. package/dist/esm/preset/isomorphic/providers/axios-factory.js.map +1 -1
  173. package/dist/esm/preset/isomorphic/providers/axios-log-handler.js.map +1 -1
  174. package/dist/esm/preset/isomorphic/providers/base-config.js.map +1 -1
  175. package/dist/esm/preset/isomorphic/providers/fetch.js.map +1 -1
  176. package/dist/esm/preset/isomorphic/providers/redux-middleware-saga.js.map +1 -1
  177. package/dist/esm/preset/isomorphic/types.js.map +1 -1
  178. package/dist/esm/preset/isomorphic/utils/axios-logging.js.map +1 -1
  179. package/dist/esm/preset/isomorphic/utils/disableable.js.map +1 -1
  180. package/dist/esm/preset/isomorphic/utils/display-url.js.map +1 -1
  181. package/dist/esm/preset/isomorphic/utils/fetch-logging.js.map +1 -1
  182. package/dist/esm/preset/isomorphic/utils/get-fetch-error-logging.js.map +1 -1
  183. package/dist/esm/preset/isomorphic/utils/get-fetch-extra-aborting.js.map +1 -1
  184. package/dist/esm/preset/isomorphic/utils/get-fetch-logging.js.map +1 -1
  185. package/dist/esm/preset/isomorphic/utils/http-api-host-pool.js.map +1 -1
  186. package/dist/esm/preset/isomorphic/utils/http-status.js.map +1 -1
  187. package/dist/esm/preset/isomorphic/utils/saga-logging.js.map +1 -1
  188. package/dist/esm/preset/isomorphic/utils/severity-from-status.js.map +1 -1
  189. package/dist/esm/preset/node/index.js.map +1 -1
  190. package/dist/esm/preset/node/providers/config-source.js.map +1 -1
  191. package/dist/esm/preset/node/providers/express-error-middleware.js.map +1 -1
  192. package/dist/esm/preset/node/providers/express-factory.js.map +1 -1
  193. package/dist/esm/preset/node/providers/express-log-middleware.js.map +1 -1
  194. package/dist/esm/preset/node/providers/express-metrics-middleware.js.map +1 -1
  195. package/dist/esm/preset/node/providers/express-request-middleware.js.map +1 -1
  196. package/dist/esm/preset/node/providers/express-tracing-middleware.js.map +1 -1
  197. package/dist/esm/preset/node/providers/log-handler-pino.js.map +1 -1
  198. package/dist/esm/preset/node/providers/log-handler-sentry.js.map +1 -1
  199. package/dist/esm/preset/node/providers/logger.js.map +1 -1
  200. package/dist/esm/preset/node/providers/main-express-app.js +0 -1
  201. package/dist/esm/preset/node/providers/main-express-app.js.map +1 -1
  202. package/dist/esm/preset/node/providers/metrics-express-app.js.map +1 -1
  203. package/dist/esm/preset/node/providers/public-envs.js.map +1 -1
  204. package/dist/esm/preset/node/providers/telemetry-tracer-provider.js +1 -1
  205. package/dist/esm/preset/node/providers/telemetry-tracer-provider.js.map +1 -1
  206. package/dist/esm/preset/node/providers/telemetry-tracer-resource.js.map +1 -1
  207. package/dist/esm/preset/node/providers/telemetry-tracer-span-exporter.js.map +1 -1
  208. package/dist/esm/preset/node/providers/telemetry-tracer.js.map +1 -1
  209. package/dist/esm/preset/node/types.js.map +1 -1
  210. package/dist/esm/preset/node/utils/axios-tracing-middleware.js.map +1 -1
  211. package/dist/esm/preset/node/utils/emitter-as-target.js.map +1 -1
  212. package/dist/esm/preset/node/utils/get-client-ip.js.map +1 -1
  213. package/dist/esm/preset/node/utils/get-fetch-tracing.js.map +1 -1
  214. package/dist/esm/preset/node/utils/get-forwarded-headers.js.map +1 -1
  215. package/dist/esm/preset/node/utils/get-handler-metrics.js.map +1 -1
  216. package/dist/esm/preset/node/utils/get-page-response-format.js.map +1 -1
  217. package/dist/esm/preset/node/utils/get-serve-measuring.js.map +1 -1
  218. package/dist/esm/preset/node/utils/handler-provider.js.map +1 -1
  219. package/dist/esm/preset/node/utils/telemetry.js.map +1 -1
  220. package/dist/esm/preset/node-handler/index.js.map +1 -1
  221. package/dist/esm/preset/node-handler/providers/accepts-type.js.map +1 -1
  222. package/dist/esm/preset/node-handler/providers/axios-log-handler.js.map +1 -1
  223. package/dist/esm/preset/node-handler/providers/axios-middleware.js.map +1 -1
  224. package/dist/esm/preset/node-handler/providers/fetch-middleware.js.map +1 -1
  225. package/dist/esm/preset/node-handler/providers/handler-main.js.map +1 -1
  226. package/dist/esm/preset/node-handler/providers/response-events.js.map +1 -1
  227. package/dist/esm/preset/node-handler/providers/specific-params.js.map +1 -1
  228. package/dist/esm/preset/server/constants.js.map +1 -1
  229. package/dist/esm/preset/server/index.js.map +1 -1
  230. package/dist/esm/preset/server/providers/element-to-string.js.map +1 -1
  231. package/dist/esm/preset/server/providers/fetch-log-handler.js.map +1 -1
  232. package/dist/esm/preset/server/providers/fetch-middleware.js.map +1 -1
  233. package/dist/esm/preset/server/providers/format-page-response.js.map +1 -1
  234. package/dist/esm/preset/server/providers/known-http-api-hosts.js.map +1 -1
  235. package/dist/esm/preset/server/providers/page-helmet.js.map +1 -1
  236. package/dist/esm/preset/server/providers/page-render.js.map +1 -1
  237. package/dist/esm/preset/server/providers/response-events.js.map +1 -1
  238. package/dist/esm/preset/server/providers/serve.js +2 -1
  239. package/dist/esm/preset/server/providers/serve.js.map +1 -1
  240. package/dist/esm/preset/server/providers/ssr-bridge-server-side.js.map +1 -1
  241. package/dist/esm/preset/server/types.js.map +1 -1
  242. package/dist/esm/preset/server/utils/apply-server-middleware.js.map +1 -1
  243. package/dist/esm/preset/server/utils/format-handler-error.js.map +1 -1
  244. package/dist/esm/preset/server/utils/get-client-ip.js.map +1 -1
  245. package/dist/esm/preset/server/utils/get-forwarded-headers.js.map +1 -1
  246. package/dist/esm/preset/server/utils/get-health-check.js.map +1 -1
  247. package/dist/esm/preset/server/utils/get-page-response-format.js.map +1 -1
  248. package/dist/esm/preset/server/utils/get-serve-error-logging.js.map +1 -1
  249. package/dist/esm/preset/server/utils/get-serve-logging.js.map +1 -1
  250. package/dist/esm/preset/server/utils/handler-provider.js.map +1 -1
  251. package/dist/esm/preset/server/utils/regular-helmet.js.map +1 -1
  252. package/dist/esm/preset/server/utils/specific-extras.js.map +1 -1
  253. package/dist/esm/preset/web/index.js.map +1 -1
  254. package/dist/esm/preset/web/providers/axios-middleware.js.map +1 -1
  255. package/dist/esm/preset/web/providers/config-source.js.map +1 -1
  256. package/dist/esm/preset/web/providers/fetch-middleware.js.map +1 -1
  257. package/dist/esm/preset/web/providers/known-http-api-hosts.js.map +1 -1
  258. package/dist/esm/preset/web/providers/logger.js.map +1 -1
  259. package/dist/esm/preset/web/providers/ssr-bridge-client-side.js.map +1 -1
  260. package/dist/esm/tokens.js.map +1 -1
  261. package/dist/esm/utils/axios/index.js.map +1 -1
  262. package/dist/esm/utils/axios/middleware/log.js.map +1 -1
  263. package/dist/esm/utils/axios/sauce/index.js.map +1 -1
  264. package/dist/esm/utils/axios/utils/index.js.map +1 -1
  265. package/dist/esm/utils/express/handler/health-check.js.map +1 -1
  266. package/dist/esm/utils/express/index.js.map +1 -1
  267. package/dist/esm/utils/express/utils/index.js.map +1 -1
  268. package/dist/esm/utils/function.js.map +1 -1
  269. package/dist/esm/utils/index.js.map +1 -1
  270. package/dist/esm/utils/math.js.map +1 -1
  271. package/dist/esm/utils/react/error-handlers/index.js.map +1 -1
  272. package/dist/esm/utils/react/index.js.map +1 -1
  273. package/dist/esm/utils/redux/index.js.map +1 -1
  274. package/dist/esm/utils/redux/remote-data.js.map +1 -1
  275. package/dist/esm/utils/redux-saga/index.js.map +1 -1
  276. package/dist/esm/utils/redux-saga/middleware.js.map +1 -1
  277. package/dist/esm/utils/redux-saga/take-chain.js.map +1 -1
  278. package/dist/esm/utils/redux-saga/types.js.map +1 -1
  279. package/dist/esm/utils/selectors/create-curried-selector.js.map +1 -1
  280. package/dist/esm/utils/ssr/index.js.map +1 -1
  281. package/dist/esm/utils/web/analytics/data-layer.js.map +1 -1
  282. package/dist/esm/utils/web/analytics/index.js.map +1 -1
  283. package/dist/esm/utils/web/analytics/oko.js.map +1 -1
  284. package/dist/esm/utils/web/storage/index.js.map +1 -1
  285. package/dist/esm/utils/webpack/env/index.js.map +1 -1
  286. package/dist/esm/utils/webpack/env/types.js.map +1 -1
  287. package/dist/esm/utils/webpack/env/utils.js.map +1 -1
  288. package/dist/esm/utils/webpack/index.js.map +1 -1
  289. package/dist/esm/utils/webpack/module-federation/index.js.map +1 -1
  290. package/dist/esm/utils/webpack/module-federation/types.js.map +1 -1
  291. package/dist/esm/utils/webpack/module-federation/utils.js.map +1 -1
  292. package/dist/types/http/utils.d.ts +1 -1
  293. package/dist/types/http/utils.d.ts.map +1 -1
  294. package/dist/types/log/types.d.ts +7 -7
  295. package/dist/types/log/types.d.ts.map +1 -1
  296. package/dist/types/preset/isomorphic/providers/axios-factory.d.ts.map +1 -1
  297. package/dist/types/preset/node/providers/telemetry-tracer-provider.d.ts +2 -2
  298. package/dist/types/preset/node/providers/telemetry-tracer-provider.d.ts.map +1 -1
  299. package/dist/types/preset/node/utils/emitter-as-target.d.ts +0 -1
  300. package/dist/types/preset/node/utils/emitter-as-target.d.ts.map +1 -1
  301. package/dist/types/preset/node/utils/get-handler-metrics.d.ts +3 -3
  302. package/dist/types/preset/server/providers/page-helmet.d.ts +1 -2
  303. package/dist/types/preset/server/providers/page-helmet.d.ts.map +1 -1
  304. package/dist/types/preset/server/providers/serve.d.ts.map +1 -1
  305. package/dist/types/preset/server/types.d.ts +0 -1
  306. package/dist/types/preset/server/types.d.ts.map +1 -1
  307. package/dist/types/preset/server/utils/regular-helmet.d.ts +2 -2
  308. package/dist/types/preset/server/utils/regular-helmet.d.ts.map +1 -1
  309. package/dist/types/tokens.d.ts +0 -1
  310. package/dist/types/tokens.d.ts.map +1 -1
  311. package/dist/types/utils/index.d.ts.map +1 -1
  312. package/dist/types/utils/redux/remote-data.d.ts +13 -3
  313. package/dist/types/utils/redux/remote-data.d.ts.map +1 -1
  314. package/dist/types/utils/selectors/create-curried-selector.d.ts +2 -2
  315. package/dist/types/utils/selectors/create-curried-selector.d.ts.map +1 -1
  316. package/dist/types/utils/ssr/index.d.ts.map +1 -1
  317. package/package.json +55 -52
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["axios","safetyAsync","sauce","instance","request","formatResultInfo","get","delete","head","options","post","put","patch","info","ok","data","result","status","isAxiosError","error","response","undefined"],"sources":["../../../../../src/utils/axios/sauce/index.ts"],"sourcesContent":["import axios, { AxiosInstance, AxiosResponse } from 'axios';\nimport { safetyAsync, SafetyInfo } from '../..';\nimport type { AxiosInstanceWrapper, MethodName } from 'middleware-axios';\n\n// @todo передавать заголовки ответа\nexport type SauceResponse<T = any> =\n | {\n ok: true;\n status: number;\n data: T;\n }\n | {\n ok: false;\n status?: unknown; // unknown так как не факт что упали именно по статусу, например может быть exception\n data?: unknown; // иногда хочется узнать, что прислал сервер вместе с ошибкой (например 422)\n error: any;\n };\n\nexport interface SauceMethod<K extends MethodName | 'request'> {\n <T>(...args: Parameters<(AxiosInstance | AxiosInstanceWrapper)[K]>): Promise<SauceResponse<T>>;\n}\n\n/**\n * Обёртка над экземпляром axios.\n * Все методы возвращают promise, который никогда переходят в состояние rejected.\n */\nexport interface Sauce {\n readonly request: SauceMethod<'request'>;\n readonly get: SauceMethod<'get'>;\n readonly delete: SauceMethod<'delete'>;\n readonly head: SauceMethod<'head'>;\n readonly options: SauceMethod<'options'>;\n readonly post: SauceMethod<'post'>;\n readonly put: SauceMethod<'put'>;\n readonly patch: SauceMethod<'patch'>;\n}\n\n/**\n * Оборачивает экземпляр axios. Все методы обертки возвращают promise, которые никогда не попадают в состояние rejected.\n * @param instance Экземпляр axios или AxiosInstanceWrapper.\n * @return Обертка.\n */\nexport function sauce(instance: AxiosInstance | AxiosInstanceWrapper): Sauce {\n return {\n request: safetyAsync(instance.request, formatResultInfo),\n get: safetyAsync(instance.get, formatResultInfo),\n delete: safetyAsync(instance.delete, formatResultInfo),\n head: safetyAsync(instance.head, formatResultInfo),\n options: safetyAsync(instance.options, formatResultInfo),\n post: safetyAsync(instance.post, formatResultInfo),\n put: safetyAsync(instance.put, formatResultInfo),\n patch: safetyAsync(instance.patch, formatResultInfo),\n };\n}\n\n/**\n * Функция форматирования результата, используемая в sauce.\n * @param info Результат вызова метода экземпляра axios.\n * @return Отформатированный ответ.\n */\nexport function formatResultInfo<T>(info: SafetyInfo<AxiosResponse<T>>): SauceResponse<T> {\n if (info.ok) {\n return {\n ok: true,\n data: info.result.data,\n status: info.result.status,\n };\n } else {\n return {\n ok: false,\n data: axios.isAxiosError(info.error) ? info.error.response?.data : undefined,\n status: axios.isAxiosError(info.error) ? info.error.response?.status : undefined,\n error: info.error,\n };\n }\n}\n"],"mappings":"AAAA,OAAOA,KAAK,MAAwC,OAAO;AAC3D,SAASC,WAAW,QAAoB,kBAAO;;AAG/C;;AAkBA;AACA;AACA;AACA;;AAYA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,KAAKA,CAACC,QAA8C,EAAS;EAC3E,OAAO;IACLC,OAAO,EAAEH,WAAW,CAACE,QAAQ,CAACC,OAAO,EAAEC,gBAAgB,CAAC;IACxDC,GAAG,EAAEL,WAAW,CAACE,QAAQ,CAACG,GAAG,EAAED,gBAAgB,CAAC;IAChDE,MAAM,EAAEN,WAAW,CAACE,QAAQ,CAACI,MAAM,EAAEF,gBAAgB,CAAC;IACtDG,IAAI,EAAEP,WAAW,CAACE,QAAQ,CAACK,IAAI,EAAEH,gBAAgB,CAAC;IAClDI,OAAO,EAAER,WAAW,CAACE,QAAQ,CAACM,OAAO,EAAEJ,gBAAgB,CAAC;IACxDK,IAAI,EAAET,WAAW,CAACE,QAAQ,CAACO,IAAI,EAAEL,gBAAgB,CAAC;IAClDM,GAAG,EAAEV,WAAW,CAACE,QAAQ,CAACQ,GAAG,EAAEN,gBAAgB,CAAC;IAChDO,KAAK,EAAEX,WAAW,CAACE,QAAQ,CAACS,KAAK,EAAEP,gBAAgB;EACrD,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,gBAAgBA,CAAIQ,IAAkC,EAAoB;EACxF,IAAIA,IAAI,CAACC,EAAE,EAAE;IACX,OAAO;MACLA,EAAE,EAAE,IAAI;MACRC,IAAI,EAAEF,IAAI,CAACG,MAAM,CAACD,IAAI;MACtBE,MAAM,EAAEJ,IAAI,CAACG,MAAM,CAACC;IACtB,CAAC;EACH,CAAC,MAAM;IACL,OAAO;MACLH,EAAE,EAAE,KAAK;MACTC,IAAI,EAAEf,KAAK,CAACkB,YAAY,CAACL,IAAI,CAACM,KAAK,CAAC,GAAGN,IAAI,CAACM,KAAK,CAACC,QAAQ,EAAEL,IAAI,GAAGM,SAAS;MAC5EJ,MAAM,EAAEjB,KAAK,CAACkB,YAAY,CAACL,IAAI,CAACM,KAAK,CAAC,GAAGN,IAAI,CAACM,KAAK,CAACC,QAAQ,EAAEH,MAAM,GAAGI,SAAS;MAChFF,KAAK,EAAEN,IAAI,CAACM;IACd,CAAC;EACH;AACF"}
1
+ {"version":3,"file":"index.js","names":["axios","safetyAsync","sauce","instance","request","formatResultInfo","get","delete","head","options","post","put","patch","info","ok","data","result","status","isAxiosError","error","response","undefined"],"sources":["../../../../../src/utils/axios/sauce/index.ts"],"sourcesContent":["import axios, { AxiosInstance, AxiosResponse } from 'axios';\nimport { safetyAsync, SafetyInfo } from '../..';\nimport type { AxiosInstanceWrapper, MethodName } from 'middleware-axios';\n\n// @todo передавать заголовки ответа\nexport type SauceResponse<T = any> =\n | {\n ok: true;\n status: number;\n data: T;\n }\n | {\n ok: false;\n status?: unknown; // unknown так как не факт что упали именно по статусу, например может быть exception\n data?: unknown; // иногда хочется узнать, что прислал сервер вместе с ошибкой (например 422)\n error: any;\n };\n\nexport interface SauceMethod<K extends MethodName | 'request'> {\n <T>(...args: Parameters<(AxiosInstance | AxiosInstanceWrapper)[K]>): Promise<SauceResponse<T>>;\n}\n\n/**\n * Обёртка над экземпляром axios.\n * Все методы возвращают promise, который никогда переходят в состояние rejected.\n */\nexport interface Sauce {\n readonly request: SauceMethod<'request'>;\n readonly get: SauceMethod<'get'>;\n readonly delete: SauceMethod<'delete'>;\n readonly head: SauceMethod<'head'>;\n readonly options: SauceMethod<'options'>;\n readonly post: SauceMethod<'post'>;\n readonly put: SauceMethod<'put'>;\n readonly patch: SauceMethod<'patch'>;\n}\n\n/**\n * Оборачивает экземпляр axios. Все методы обертки возвращают promise, которые никогда не попадают в состояние rejected.\n * @param instance Экземпляр axios или AxiosInstanceWrapper.\n * @return Обертка.\n */\nexport function sauce(instance: AxiosInstance | AxiosInstanceWrapper): Sauce {\n return {\n request: safetyAsync(instance.request, formatResultInfo),\n get: safetyAsync(instance.get, formatResultInfo),\n delete: safetyAsync(instance.delete, formatResultInfo),\n head: safetyAsync(instance.head, formatResultInfo),\n options: safetyAsync(instance.options, formatResultInfo),\n post: safetyAsync(instance.post, formatResultInfo),\n put: safetyAsync(instance.put, formatResultInfo),\n patch: safetyAsync(instance.patch, formatResultInfo),\n };\n}\n\n/**\n * Функция форматирования результата, используемая в sauce.\n * @param info Результат вызова метода экземпляра axios.\n * @return Отформатированный ответ.\n */\nexport function formatResultInfo<T>(info: SafetyInfo<AxiosResponse<T>>): SauceResponse<T> {\n if (info.ok) {\n return {\n ok: true,\n data: info.result.data,\n status: info.result.status,\n };\n } else {\n return {\n ok: false,\n data: axios.isAxiosError(info.error) ? info.error.response?.data : undefined,\n status: axios.isAxiosError(info.error) ? info.error.response?.status : undefined,\n error: info.error,\n };\n }\n}\n"],"mappings":"AAAA,OAAOA,KAAK,MAAwC,OAAO;AAC3D,SAASC,WAAW,QAAoB,kBAAO;;AAG/C;;AAkBA;AACA;AACA;AACA;;AAYA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,KAAKA,CAACC,QAA8C,EAAS;EAC3E,OAAO;IACLC,OAAO,EAAEH,WAAW,CAACE,QAAQ,CAACC,OAAO,EAAEC,gBAAgB,CAAC;IACxDC,GAAG,EAAEL,WAAW,CAACE,QAAQ,CAACG,GAAG,EAAED,gBAAgB,CAAC;IAChDE,MAAM,EAAEN,WAAW,CAACE,QAAQ,CAACI,MAAM,EAAEF,gBAAgB,CAAC;IACtDG,IAAI,EAAEP,WAAW,CAACE,QAAQ,CAACK,IAAI,EAAEH,gBAAgB,CAAC;IAClDI,OAAO,EAAER,WAAW,CAACE,QAAQ,CAACM,OAAO,EAAEJ,gBAAgB,CAAC;IACxDK,IAAI,EAAET,WAAW,CAACE,QAAQ,CAACO,IAAI,EAAEL,gBAAgB,CAAC;IAClDM,GAAG,EAAEV,WAAW,CAACE,QAAQ,CAACQ,GAAG,EAAEN,gBAAgB,CAAC;IAChDO,KAAK,EAAEX,WAAW,CAACE,QAAQ,CAACS,KAAK,EAAEP,gBAAgB;EACrD,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,gBAAgBA,CAAIQ,IAAkC,EAAoB;EACxF,IAAIA,IAAI,CAACC,EAAE,EAAE;IACX,OAAO;MACLA,EAAE,EAAE,IAAI;MACRC,IAAI,EAAEF,IAAI,CAACG,MAAM,CAACD,IAAI;MACtBE,MAAM,EAAEJ,IAAI,CAACG,MAAM,CAACC;IACtB,CAAC;EACH,CAAC,MAAM;IACL,OAAO;MACLH,EAAE,EAAE,KAAK;MACTC,IAAI,EAAEf,KAAK,CAACkB,YAAY,CAACL,IAAI,CAACM,KAAK,CAAC,GAAGN,IAAI,CAACM,KAAK,CAACC,QAAQ,EAAEL,IAAI,GAAGM,SAAS;MAC5EJ,MAAM,EAAEjB,KAAK,CAACkB,YAAY,CAACL,IAAI,CAACM,KAAK,CAAC,GAAGN,IAAI,CAACM,KAAK,CAACC,QAAQ,EAAEH,MAAM,GAAGI,SAAS;MAChFF,KAAK,EAAEN,IAAI,CAACM;IACd,CAAC;EACH;AACF","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["applyAxiosDefaults","config","defaults","headers","headersDefaults","restDefaults","method","toLowerCase"],"sources":["../../../../../src/utils/axios/utils/index.ts"],"sourcesContent":["import type { AxiosDefaults, AxiosRequestConfig } from 'axios';\n\n/**\n * Сливает в один объект конфиг и настройки по умолчанию.\n * @param config Конфигурация запроса.\n * @param defaults Настройки по умолчанию для экземпляра axios.\n * @return Уточненная итоговая конфигурация.\n * @todo Было бы круто заменить на axios/core/mergeConfig (https://github.com/axios/axios/blob/v1.x/lib/core/mergeConfig.js).\n */\nexport function applyAxiosDefaults(\n config: AxiosRequestConfig,\n defaults: AxiosDefaults,\n): Omit<AxiosRequestConfig, 'method'> & Pick<Required<AxiosRequestConfig>, 'method'> {\n const { headers: headersDefaults, ...restDefaults } = defaults;\n const method = config.method || defaults.method || 'get';\n\n return {\n method,\n ...restDefaults,\n ...config,\n headers: {\n ...headersDefaults[method.toLowerCase() as keyof typeof defaults.headers],\n ...config.headers,\n },\n };\n}\n"],"mappings":"AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,kBAAkBA,CAChCC,MAA0B,EAC1BC,QAAuB,EAC4D;EACnF,MAAM;IAAEC,OAAO,EAAEC,eAAe;IAAE,GAAGC;EAAa,CAAC,GAAGH,QAAQ;EAC9D,MAAMI,MAAM,GAAGL,MAAM,CAACK,MAAM,IAAIJ,QAAQ,CAACI,MAAM,IAAI,KAAK;EAExD,OAAO;IACLA,MAAM;IACN,GAAGD,YAAY;IACf,GAAGJ,MAAM;IACTE,OAAO,EAAE;MACP,GAAGC,eAAe,CAACE,MAAM,CAACC,WAAW,CAAC,CAAC,CAAkC;MACzE,GAAGN,MAAM,CAACE;IACZ;EACF,CAAC;AACH"}
1
+ {"version":3,"file":"index.js","names":["applyAxiosDefaults","config","defaults","headers","headersDefaults","restDefaults","method","toLowerCase"],"sources":["../../../../../src/utils/axios/utils/index.ts"],"sourcesContent":["import type { AxiosDefaults, AxiosRequestConfig } from 'axios';\n\n/**\n * Сливает в один объект конфиг и настройки по умолчанию.\n * @param config Конфигурация запроса.\n * @param defaults Настройки по умолчанию для экземпляра axios.\n * @return Уточненная итоговая конфигурация.\n * @todo Было бы круто заменить на axios/core/mergeConfig (https://github.com/axios/axios/blob/v1.x/lib/core/mergeConfig.js).\n */\nexport function applyAxiosDefaults(\n config: AxiosRequestConfig,\n defaults: AxiosDefaults,\n): Omit<AxiosRequestConfig, 'method'> & Pick<Required<AxiosRequestConfig>, 'method'> {\n const { headers: headersDefaults, ...restDefaults } = defaults;\n const method = config.method || defaults.method || 'get';\n\n return {\n method,\n ...restDefaults,\n ...config,\n headers: {\n ...headersDefaults[method.toLowerCase() as keyof typeof defaults.headers],\n ...config.headers,\n },\n };\n}\n"],"mappings":"AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,kBAAkBA,CAChCC,MAA0B,EAC1BC,QAAuB,EAC4D;EACnF,MAAM;IAAEC,OAAO,EAAEC,eAAe;IAAE,GAAGC;EAAa,CAAC,GAAGH,QAAQ;EAC9D,MAAMI,MAAM,GAAGL,MAAM,CAACK,MAAM,IAAIJ,QAAQ,CAACI,MAAM,IAAI,KAAK;EAExD,OAAO;IACLA,MAAM;IACN,GAAGD,YAAY;IACf,GAAGJ,MAAM;IACTE,OAAO,EAAE;MACP,GAAGC,eAAe,CAACE,MAAM,CAACC,WAAW,CAAC,CAAC,CAAkC;MACzE,GAAGN,MAAM,CAACE;IACZ;EACF,CAAC;AACH","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"health-check.js","names":["healthCheck","startTime","Date","now","req","res","json","uptime"],"sources":["../../../../../src/utils/express/handler/health-check.ts"],"sourcesContent":["import type express from 'express';\n\n/**\n * Возвращает обработчик, отвечающий данными о времени работы приложения.\n * @return Обработчик http-запроса.\n */\nexport function healthCheck(): express.Handler {\n const startTime = Date.now();\n\n return (req, res) => {\n res.json({ uptime: Date.now() - startTime });\n };\n}\n"],"mappings":"AAEA;AACA;AACA;AACA;AACA,OAAO,SAASA,WAAWA,CAAA,EAAoB;EAC7C,MAAMC,SAAS,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;EAE5B,OAAO,CAACC,GAAG,EAAEC,GAAG,KAAK;IACnBA,GAAG,CAACC,IAAI,CAAC;MAAEC,MAAM,EAAEL,IAAI,CAACC,GAAG,CAAC,CAAC,GAAGF;IAAU,CAAC,CAAC;EAC9C,CAAC;AACH"}
1
+ {"version":3,"file":"health-check.js","names":["healthCheck","startTime","Date","now","req","res","json","uptime"],"sources":["../../../../../src/utils/express/handler/health-check.ts"],"sourcesContent":["import type express from 'express';\n\n/**\n * Возвращает обработчик, отвечающий данными о времени работы приложения.\n * @return Обработчик http-запроса.\n */\nexport function healthCheck(): express.Handler {\n const startTime = Date.now();\n\n return (req, res) => {\n res.json({ uptime: Date.now() - startTime });\n };\n}\n"],"mappings":"AAEA;AACA;AACA;AACA;AACA,OAAO,SAASA,WAAWA,CAAA,EAAoB;EAC7C,MAAMC,SAAS,GAAGC,IAAI,CAACC,GAAG,CAAC,CAAC;EAE5B,OAAO,CAACC,GAAG,EAAEC,GAAG,KAAK;IACnBA,GAAG,CAACC,IAAI,CAAC;MAAEC,MAAM,EAAEL,IAAI,CAACC,GAAG,CAAC,CAAC,GAAGF;IAAU,CAAC,CAAC;EAC9C,CAAC;AACH","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["healthCheck","composeMiddleware"],"sources":["../../../../src/utils/express/index.ts"],"sourcesContent":["export { healthCheck } from './handler/health-check';\nexport { composeMiddleware } from './utils';\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,2BAAwB;AACpD,SAASC,iBAAiB,QAAQ,kBAAS"}
1
+ {"version":3,"file":"index.js","names":["healthCheck","composeMiddleware"],"sources":["../../../../src/utils/express/index.ts"],"sourcesContent":["export { healthCheck } from './handler/health-check';\nexport { composeMiddleware } from './utils';\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,2BAAwB;AACpD,SAASC,iBAAiB,QAAQ,kBAAS","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["composeMiddleware","list","reduce","a","b","req","res","next","err"],"sources":["../../../../../src/utils/express/utils/index.ts"],"sourcesContent":["import type express from 'express';\n\n/**\n * Объединяет промежуточные слои в один.\n * @param list Промежуточные слои.\n * @return Промежуточный слой.\n */\nexport function composeMiddleware(list: express.Handler[]): express.Handler {\n return list.reduce((a, b) => (req, res, next) => {\n a(req, res, err => {\n if (err) {\n return next(err);\n }\n\n b(req, res, next);\n });\n });\n}\n"],"mappings":"AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,iBAAiBA,CAACC,IAAuB,EAAmB;EAC1E,OAAOA,IAAI,CAACC,MAAM,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAK,CAACC,GAAG,EAAEC,GAAG,EAAEC,IAAI,KAAK;IAC/CJ,CAAC,CAACE,GAAG,EAAEC,GAAG,EAAEE,GAAG,IAAI;MACjB,IAAIA,GAAG,EAAE;QACP,OAAOD,IAAI,CAACC,GAAG,CAAC;MAClB;MAEAJ,CAAC,CAACC,GAAG,EAAEC,GAAG,EAAEC,IAAI,CAAC;IACnB,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ"}
1
+ {"version":3,"file":"index.js","names":["composeMiddleware","list","reduce","a","b","req","res","next","err"],"sources":["../../../../../src/utils/express/utils/index.ts"],"sourcesContent":["import type express from 'express';\n\n/**\n * Объединяет промежуточные слои в один.\n * @param list Промежуточные слои.\n * @return Промежуточный слой.\n */\nexport function composeMiddleware(list: express.Handler[]): express.Handler {\n return list.reduce((a, b) => (req, res, next) => {\n a(req, res, err => {\n if (err) {\n return next(err);\n }\n\n b(req, res, next);\n });\n });\n}\n"],"mappings":"AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,iBAAiBA,CAACC,IAAuB,EAAmB;EAC1E,OAAOA,IAAI,CAACC,MAAM,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAK,CAACC,GAAG,EAAEC,GAAG,EAAEC,IAAI,KAAK;IAC/CJ,CAAC,CAACE,GAAG,EAAEC,GAAG,EAAEE,GAAG,IAAI;MACjB,IAAIA,GAAG,EAAE;QACP,OAAOD,IAAI,CAACC,GAAG,CAAC;MAClB;MAEAJ,CAAC,CAACC,GAAG,EAAEC,GAAG,EAAEC,IAAI,CAAC;IACnB,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"function.js","names":["safetyAsync","fn","format","value","safetyWrapper","args","ok","result","error"],"sources":["../../../src/utils/function.ts"],"sourcesContent":["interface SafetyDoneInfo<T> {\n ok: true;\n result: T;\n}\n\ninterface SafetyFailInfo {\n ok: false;\n error: unknown;\n}\n\nexport type SafetyInfo<T> = SafetyDoneInfo<T> | SafetyFailInfo;\n\ninterface SafetyFormatter<T, F> {\n (info: SafetyInfo<T>): F | Promise<F>;\n}\n\n/**\n * Возвращает функцию, результатом которой является promise, который никогда не переходит в состояние rejected.\n * При перехвате исключения результат будет содержать ошибку.\n * @param fn Оборачиваемая функция.\n * @return Функция.\n */\nexport function safetyAsync<T, P extends any[]>(\n fn: (...args: P) => Promise<T>,\n): (...args: P) => Promise<SafetyInfo<T>>;\n\n/**\n * Возвращает функцию, результатом которой является promise, который никогда не переходит в состояние rejected.\n * При перехвате исключения результат будет содержать ошибку.\n * @param fn Оборачиваемая функция.\n * @param format Получив базовую информацию об ответе должна вернуть отформатированную информацию.\n * @return Функция.\n */\nexport function safetyAsync<T, P extends any[], F>(\n fn: (...args: P) => Promise<T>,\n format: SafetyFormatter<T, F>,\n): (...args: P) => Promise<F>;\n\n/**\n * Возвращает функцию, результатом которой является promise, который никогда не переходит в состояние rejected.\n * При перехвате исключения результат будет содержать ошибку.\n * @param fn Оборачиваемая функция.\n * @param format Получив базовую информацию об ответе должна вернуть отформатированную информацию.\n * @return Функция.\n */\nexport function safetyAsync<T, P extends any[], F>(\n fn: (...args: P) => Promise<T>,\n format: SafetyFormatter<T, F> = value => value as F,\n): (...args: P) => Promise<F> {\n return async function safetyWrapper(...args: P) {\n try {\n return format({ ok: true, result: await fn(...args) });\n } catch (error) {\n return format({ ok: false, error });\n }\n };\n}\n"],"mappings":"AAgBA;AACA;AACA;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,WAAWA,CACzBC,EAA8B,EAC9BC,MAA6B,GAAGC,KAAK,IAAIA,KAAU,EACvB;EAC5B,OAAO,eAAeC,aAAaA,CAAC,GAAGC,IAAO,EAAE;IAC9C,IAAI;MACF,OAAOH,MAAM,CAAC;QAAEI,EAAE,EAAE,IAAI;QAAEC,MAAM,EAAE,MAAMN,EAAE,CAAC,GAAGI,IAAI;MAAE,CAAC,CAAC;IACxD,CAAC,CAAC,OAAOG,KAAK,EAAE;MACd,OAAON,MAAM,CAAC;QAAEI,EAAE,EAAE,KAAK;QAAEE;MAAM,CAAC,CAAC;IACrC;EACF,CAAC;AACH"}
1
+ {"version":3,"file":"function.js","names":["safetyAsync","fn","format","value","safetyWrapper","args","ok","result","error"],"sources":["../../../src/utils/function.ts"],"sourcesContent":["interface SafetyDoneInfo<T> {\n ok: true;\n result: T;\n}\n\ninterface SafetyFailInfo {\n ok: false;\n error: unknown;\n}\n\nexport type SafetyInfo<T> = SafetyDoneInfo<T> | SafetyFailInfo;\n\ninterface SafetyFormatter<T, F> {\n (info: SafetyInfo<T>): F | Promise<F>;\n}\n\n/**\n * Возвращает функцию, результатом которой является promise, который никогда не переходит в состояние rejected.\n * При перехвате исключения результат будет содержать ошибку.\n * @param fn Оборачиваемая функция.\n * @return Функция.\n */\nexport function safetyAsync<T, P extends any[]>(\n fn: (...args: P) => Promise<T>,\n): (...args: P) => Promise<SafetyInfo<T>>;\n\n/**\n * Возвращает функцию, результатом которой является promise, который никогда не переходит в состояние rejected.\n * При перехвате исключения результат будет содержать ошибку.\n * @param fn Оборачиваемая функция.\n * @param format Получив базовую информацию об ответе должна вернуть отформатированную информацию.\n * @return Функция.\n */\nexport function safetyAsync<T, P extends any[], F>(\n fn: (...args: P) => Promise<T>,\n format: SafetyFormatter<T, F>,\n): (...args: P) => Promise<F>;\n\n/**\n * Возвращает функцию, результатом которой является promise, который никогда не переходит в состояние rejected.\n * При перехвате исключения результат будет содержать ошибку.\n * @param fn Оборачиваемая функция.\n * @param format Получив базовую информацию об ответе должна вернуть отформатированную информацию.\n * @return Функция.\n */\nexport function safetyAsync<T, P extends any[], F>(\n fn: (...args: P) => Promise<T>,\n format: SafetyFormatter<T, F> = value => value as F,\n): (...args: P) => Promise<F> {\n return async function safetyWrapper(...args: P) {\n try {\n return format({ ok: true, result: await fn(...args) });\n } catch (error) {\n return format({ ok: false, error });\n }\n };\n}\n"],"mappings":"AAgBA;AACA;AACA;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,WAAWA,CACzBC,EAA8B,EAC9BC,MAA6B,GAAGC,KAAK,IAAIA,KAAU,EACvB;EAC5B,OAAO,eAAeC,aAAaA,CAAC,GAAGC,IAAO,EAAE;IAC9C,IAAI;MACF,OAAOH,MAAM,CAAC;QAAEI,EAAE,EAAE,IAAI;QAAEC,MAAM,EAAE,MAAMN,EAAE,CAAC,GAAGI,IAAI;MAAE,CAAC,CAAC;IACxD,CAAC,CAAC,OAAOG,KAAK,EAAE;MACd,OAAON,MAAM,CAAC;QAAEI,EAAE,EAAE,KAAK;QAAEE;MAAM,CAAC,CAAC;IACrC;EACF,CAAC;AACH","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["safetyAsync","toMilliseconds","createCurriedSelector"],"sources":["../../../src/utils/index.ts"],"sourcesContent":["export { safetyAsync, type SafetyInfo } from './function';\nexport { toMilliseconds } from './math';\nexport { createCurriedSelector } from './selectors/create-curried-selector'\n"],"mappings":"AAAA,SAASA,WAAW,QAAyB,eAAY;AACzD,SAASC,cAAc,QAAQ,WAAQ;AACvC,SAASC,qBAAqB,QAAQ,wCAAqC"}
1
+ {"version":3,"file":"index.js","names":["safetyAsync","toMilliseconds","createCurriedSelector"],"sources":["../../../src/utils/index.ts"],"sourcesContent":["export { safetyAsync, type SafetyInfo } from './function';\nexport { toMilliseconds } from './math';\nexport { createCurriedSelector } from './selectors/create-curried-selector';\n"],"mappings":"AAAA,SAASA,WAAW,QAAyB,eAAY;AACzD,SAASC,cAAc,QAAQ,WAAQ;AACvC,SAASC,qBAAqB,QAAQ,wCAAqC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"math.js","names":["toMilliseconds","nanoseconds","Number"],"sources":["../../../src/utils/math.ts"],"sourcesContent":["/**\n * Переводит наносекунды в миллисекунды.\n * @param nanoseconds Наносекунды.\n * @return Миллисекунды.\n */\nexport function toMilliseconds(nanoseconds: bigint): number {\n return Number(nanoseconds / 1000000n);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,cAAcA,CAACC,WAAmB,EAAU;EAC1D,OAAOC,MAAM,CAACD,WAAW,GAAG,QAAQ,CAAC;AACvC"}
1
+ {"version":3,"file":"math.js","names":["toMilliseconds","nanoseconds","Number"],"sources":["../../../src/utils/math.ts"],"sourcesContent":["/**\n * Переводит наносекунды в миллисекунды.\n * @param nanoseconds Наносекунды.\n * @return Миллисекунды.\n */\nexport function toMilliseconds(nanoseconds: bigint): number {\n return Number(nanoseconds / 1000000n);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,cAAcA,CAACC,WAAmB,EAAU;EAC1D,OAAOC,MAAM,CAACD,WAAW,GAAG,QAAQ,CAAC;AACvC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["Component","Suspense","ErrorBoundary","constructor","props","state","hasError","getDerivedStateFromError","componentDidCatch","error","errorInfo","onError","render","children","fallback","React","createElement","Fragment","SafeSuspense"],"sources":["../../../../../src/utils/react/error-handlers/index.tsx"],"sourcesContent":["import { Component, ErrorInfo, ReactNode, Suspense } from 'react';\n\n/**\n * Опции компонентов ErrorBoundary и SafeSuspense.\n */\nexport interface Props {\n /** Дочерний элемент. */\n children: NonNullable<ReactNode> | null;\n\n /** Содержимое, которое будет выведено если возникла ошибка. */\n fallback: NonNullable<ReactNode> | null;\n\n /** Функция для логирования ошибок. */\n onError?: (error: Error, errorInfo: ErrorInfo) => void;\n}\n\n/**\n * Компонент-предохранитель. Обработчик ошибок в React-компонентах.\n */\nexport class ErrorBoundary extends Component<Props, { hasError: boolean }> {\n /**\n * @param props Свойства.\n */\n constructor(props: Props) {\n super(props);\n\n this.state = { hasError: false };\n }\n\n /** @inheritDoc */\n static getDerivedStateFromError() {\n return { hasError: true };\n }\n\n /** @inheritDoc */\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n // @todo добавить возможность брать onError из специального контекста (это упростит передачу из di-контейнера)\n const { onError } = this.props;\n\n onError?.(error, errorInfo);\n }\n\n /**\n * Рендер.\n * @return Дочерний элемент либо запасное значение.\n */\n render() {\n const { children, fallback } = this.props;\n\n return <>{this.state.hasError ? fallback : children}</>;\n }\n}\n\n/**\n * Обертка над Suspense c перехватом ошибок.\n * @todo Возможно этот компонент не нужен...\n * @param props Свойства.\n * @return Элемент.\n */\nexport function SafeSuspense({ children, fallback, onError }: Props) {\n return (\n <Suspense fallback={fallback}>\n <ErrorBoundary fallback={fallback} onError={onError}>\n {children}\n </ErrorBoundary>\n </Suspense>\n );\n}\n"],"mappings":"AAAA,SAASA,SAAS,EAAwBC,QAAQ,QAAQ,OAAO;;AAEjE;AACA;AACA;;AAYA;AACA;AACA;AACA,OAAO,MAAMC,aAAa,SAASF,SAAS,CAA+B;EACzE;AACF;AACA;EACEG,WAAWA,CAACC,KAAY,EAAE;IACxB,KAAK,CAACA,KAAK,CAAC;IAEZ,IAAI,CAACC,KAAK,GAAG;MAAEC,QAAQ,EAAE;IAAM,CAAC;EAClC;;EAEA;EACA,OAAOC,wBAAwBA,CAAA,EAAG;IAChC,OAAO;MAAED,QAAQ,EAAE;IAAK,CAAC;EAC3B;;EAEA;EACAE,iBAAiBA,CAACC,KAAY,EAAEC,SAAoB,EAAE;IACpD;IACA,MAAM;MAAEC;IAAQ,CAAC,GAAG,IAAI,CAACP,KAAK;IAE9BO,OAAO,GAAGF,KAAK,EAAEC,SAAS,CAAC;EAC7B;;EAEA;AACF;AACA;AACA;EACEE,MAAMA,CAAA,EAAG;IACP,MAAM;MAAEC,QAAQ;MAAEC;IAAS,CAAC,GAAG,IAAI,CAACV,KAAK;IAEzC,oBAAOW,KAAA,CAAAC,aAAA,CAAAD,KAAA,CAAAE,QAAA,QAAG,IAAI,CAACZ,KAAK,CAACC,QAAQ,GAAGQ,QAAQ,GAAGD,QAAW,CAAC;EACzD;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASK,YAAYA,CAAC;EAAEL,QAAQ;EAAEC,QAAQ;EAAEH;AAAe,CAAC,EAAE;EACnE,oBACEI,KAAA,CAAAC,aAAA,CAACf,QAAQ;IAACa,QAAQ,EAAEA;EAAS,gBAC3BC,KAAA,CAAAC,aAAA,CAACd,aAAa;IAACY,QAAQ,EAAEA,QAAS;IAACH,OAAO,EAAEA;EAAQ,GACjDE,QACY,CACP,CAAC;AAEf"}
1
+ {"version":3,"file":"index.js","names":["Component","Suspense","ErrorBoundary","constructor","props","state","hasError","getDerivedStateFromError","componentDidCatch","error","errorInfo","onError","render","children","fallback","React","createElement","Fragment","SafeSuspense"],"sources":["../../../../../src/utils/react/error-handlers/index.tsx"],"sourcesContent":["import { Component, ErrorInfo, ReactNode, Suspense } from 'react';\n\n/**\n * Опции компонентов ErrorBoundary и SafeSuspense.\n */\nexport interface Props {\n /** Дочерний элемент. */\n children: NonNullable<ReactNode> | null;\n\n /** Содержимое, которое будет выведено если возникла ошибка. */\n fallback: NonNullable<ReactNode> | null;\n\n /** Функция для логирования ошибок. */\n onError?: (error: Error, errorInfo: ErrorInfo) => void;\n}\n\n/**\n * Компонент-предохранитель. Обработчик ошибок в React-компонентах.\n */\nexport class ErrorBoundary extends Component<Props, { hasError: boolean }> {\n /**\n * @param props Свойства.\n */\n constructor(props: Props) {\n super(props);\n\n this.state = { hasError: false };\n }\n\n /** @inheritDoc */\n static getDerivedStateFromError() {\n return { hasError: true };\n }\n\n /** @inheritDoc */\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n // @todo добавить возможность брать onError из специального контекста (это упростит передачу из di-контейнера)\n const { onError } = this.props;\n\n onError?.(error, errorInfo);\n }\n\n /**\n * Рендер.\n * @return Дочерний элемент либо запасное значение.\n */\n render() {\n const { children, fallback } = this.props;\n\n return <>{this.state.hasError ? fallback : children}</>;\n }\n}\n\n/**\n * Обертка над Suspense c перехватом ошибок.\n * @todo Возможно этот компонент не нужен...\n * @param props Свойства.\n * @return Элемент.\n */\nexport function SafeSuspense({ children, fallback, onError }: Props) {\n return (\n <Suspense fallback={fallback}>\n <ErrorBoundary fallback={fallback} onError={onError}>\n {children}\n </ErrorBoundary>\n </Suspense>\n );\n}\n"],"mappings":"AAAA,SAASA,SAAS,EAAwBC,QAAQ,QAAQ,OAAO;;AAEjE;AACA;AACA;;AAYA;AACA;AACA;AACA,OAAO,MAAMC,aAAa,SAASF,SAAS,CAA+B;EACzE;AACF;AACA;EACEG,WAAWA,CAACC,KAAY,EAAE;IACxB,KAAK,CAACA,KAAK,CAAC;IAEZ,IAAI,CAACC,KAAK,GAAG;MAAEC,QAAQ,EAAE;IAAM,CAAC;EAClC;;EAEA;EACA,OAAOC,wBAAwBA,CAAA,EAAG;IAChC,OAAO;MAAED,QAAQ,EAAE;IAAK,CAAC;EAC3B;;EAEA;EACAE,iBAAiBA,CAACC,KAAY,EAAEC,SAAoB,EAAE;IACpD;IACA,MAAM;MAAEC;IAAQ,CAAC,GAAG,IAAI,CAACP,KAAK;IAE9BO,OAAO,GAAGF,KAAK,EAAEC,SAAS,CAAC;EAC7B;;EAEA;AACF;AACA;AACA;EACEE,MAAMA,CAAA,EAAG;IACP,MAAM;MAAEC,QAAQ;MAAEC;IAAS,CAAC,GAAG,IAAI,CAACV,KAAK;IAEzC,oBAAOW,KAAA,CAAAC,aAAA,CAAAD,KAAA,CAAAE,QAAA,QAAG,IAAI,CAACZ,KAAK,CAACC,QAAQ,GAAGQ,QAAQ,GAAGD,QAAW,CAAC;EACzD;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASK,YAAYA,CAAC;EAAEL,QAAQ;EAAEC,QAAQ;EAAEH;AAAe,CAAC,EAAE;EACnE,oBACEI,KAAA,CAAAC,aAAA,CAACf,QAAQ;IAACa,QAAQ,EAAEA;EAAS,gBAC3BC,KAAA,CAAAC,aAAA,CAACd,aAAa;IAACY,QAAQ,EAAEA,QAAS;IAACH,OAAO,EAAEA;EAAQ,GACjDE,QACY,CACP,CAAC;AAEf","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["ErrorBoundary","SafeSuspense"],"sources":["../../../../src/utils/react/index.ts"],"sourcesContent":["import { ErrorBoundary, SafeSuspense } from './error-handlers';\n\nexport { ErrorBoundary, SafeSuspense };\n"],"mappings":"AAAA,SAASA,aAAa,EAAEC,YAAY,QAAQ,2BAAkB;AAE9D,SAASD,aAAa,EAAEC,YAAY"}
1
+ {"version":3,"file":"index.js","names":["ErrorBoundary","SafeSuspense"],"sources":["../../../../src/utils/react/index.ts"],"sourcesContent":["import { ErrorBoundary, SafeSuspense } from './error-handlers';\n\nexport { ErrorBoundary, SafeSuspense };\n"],"mappings":"AAAA,SAASA,aAAa,EAAEC,YAAY,QAAQ,2BAAkB;AAE9D,SAASD,aAAa,EAAEC,YAAY","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["STATUS","RemoteData"],"sources":["../../../../src/utils/redux/index.ts"],"sourcesContent":["import { Status, RemoteDataState, STATUS, RemoteData } from './remote-data';\n\nexport type { Status, RemoteDataState };\nexport { STATUS, RemoteData };\n"],"mappings":"AAAA,SAAkCA,MAAM,EAAEC,UAAU,QAAQ,kBAAe;AAG3E,SAASD,MAAM,EAAEC,UAAU"}
1
+ {"version":3,"file":"index.js","names":["STATUS","RemoteData"],"sources":["../../../../src/utils/redux/index.ts"],"sourcesContent":["import { Status, RemoteDataState, STATUS, RemoteData } from './remote-data';\n\nexport type { Status, RemoteDataState };\nexport { STATUS, RemoteData };\n"],"mappings":"AAAA,SAAkCA,MAAM,EAAEC,UAAU,QAAQ,kBAAe;AAG3E,SAASD,MAAM,EAAEC,UAAU","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"remote-data.js","names":["redux","createAction","createSelector","STATUS","initial","fetching","success","failure","RemoteData","createActions","name","request","createHandlers","state","status","action","data","payload","fetchCount","error","applyHandlers","actions","builder","handlers","addCase","type","createSelectors","selectRoot","isInitial","isFetching","isSuccess","isFailed","wasFetched"],"sources":["../../../../src/utils/redux/remote-data.ts"],"sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\n\n// @todo \"* as\" сделано для работы в Node.js ESM но есть подозрение что на tree shaking плохо скажется\nimport * as redux from '@reduxjs/toolkit';\n\nconst { createAction, createSelector } = redux;\n\ninterface RemoteDataActions<TData, TError = unknown, TPayload = void> {\n request: redux.PayloadActionCreator<TPayload, string>;\n success: redux.PayloadActionCreator<TData, string>;\n failure: redux.PayloadActionCreator<TError, string>;\n}\n\n/**\n * Статус загрузки данных.\n */\nexport type Status = 'initial' | 'fetching' | 'success' | 'failure';\n\n/**\n * Базовая структура хранилища удаленных данных.\n */\nexport interface RemoteDataState<TData, TError> {\n /** Загружаемые данные. */\n readonly data: TData;\n\n /** Данные ошибки запроса. */\n readonly error: TError;\n\n /** Статус загрузки данных. */\n readonly status: Status;\n\n /** Количество запросов. */\n readonly fetchCount?: number;\n}\n\n/**\n * Возможные статусы загрузки данных.\n */\nexport const STATUS: Record<Status, Status> = {\n initial: 'initial',\n fetching: 'fetching',\n success: 'success',\n failure: 'failure',\n} as const;\n\n/** Работа с удаленными данными. */\nexport abstract class RemoteData {\n static get STATUS() {\n return STATUS;\n }\n\n /**\n * Возвращает action'ы для работы с удаленными данными.\n * @param name Префикс имён.\n * @return Набор.\n */\n static createActions<TData = never, TError = never, TPayload = void>(\n name: string,\n ): RemoteDataActions<TData, TError, TPayload> {\n return {\n request: createAction<TPayload>(`${name}/request`),\n success: createAction<TData>(`${name}/success`),\n failure: createAction<TError>(`${name}/failure`),\n } as const;\n }\n\n /**\n * Возвращает набор обработчиков для работы с удаленными данными.\n * @return Набор.\n */\n static createHandlers<\n TData,\n TError,\n S extends RemoteDataState<TData, TError> = RemoteDataState<TData, TError>,\n >() {\n // ВАЖНО: не используем возможности immer здесь чтобы набор можно было использовать без immer.\n return {\n request(state: S | redux.Draft<S>): S | redux.Draft<S> {\n return {\n ...state,\n status: STATUS.fetching,\n };\n },\n\n success(state: S | redux.Draft<S>, action: redux.PayloadAction<TData>): S | redux.Draft<S> {\n return {\n ...state,\n data: action.payload,\n status: STATUS.success,\n fetchCount: (state.fetchCount ?? 0) + 1,\n };\n },\n\n failure(state: S | redux.Draft<S>, action: redux.PayloadAction<TError>): S | redux.Draft<S> {\n return {\n ...state,\n error: action.payload,\n status: STATUS.failure,\n fetchCount: (state.fetchCount ?? 0) + 1,\n };\n },\n } as const;\n }\n\n /**\n * Применяет обработчики для работы с удаленными данными.\n * @param actions Набор action'ов.\n * @param builder Builder.\n */\n static applyHandlers<TData, TError>(\n actions: RemoteDataActions<TData, TError, any | never>,\n builder: Pick<redux.ActionReducerMapBuilder<RemoteDataState<TData, TError>>, 'addCase'>,\n ): void {\n const handlers = RemoteData.createHandlers<TData, TError>();\n\n // @todo разобраться с проблемой когда убираешь \".type\"\n builder.addCase(actions.request.type, handlers.request);\n builder.addCase(actions.success.type, handlers.success);\n builder.addCase(actions.failure.type, handlers.failure);\n }\n\n /**\n * Возвращает новый набор селекторов данных.\n * @param selectRoot Функция получения состояния.\n * @return Набор селекторов.\n */\n static createSelectors<S extends RemoteDataState<unknown, unknown>, R = unknown>(\n selectRoot: (root: R) => S,\n ) {\n return {\n isInitial: createSelector(selectRoot, state => state.status === 'initial'),\n isFetching: createSelector(selectRoot, state => state.status === 'fetching'),\n isSuccess: createSelector(selectRoot, state => state.status === 'success'),\n isFailed: createSelector(selectRoot, state => state.status === 'failure'),\n wasFetched: createSelector(selectRoot, state => (state.fetchCount ?? 0) > 0),\n } as const;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"remote-data.js","names":["redux","createAction","createSelector","STATUS","initial","fetching","success","failure","RemoteData","createActions","name","request","createHandlers","state","status","action","data","payload","fetchCount","error","applyHandlers","actions","builder","handlers","addCase","type","createSelectors","selectRoot","isInitial","isFetching","isSuccess","isFailed","wasFetched"],"sources":["../../../../src/utils/redux/remote-data.ts"],"sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\n\n// @todo \"* as\" сделано для работы в Node.js ESM но есть подозрение что на tree shaking плохо скажется\nimport * as redux from '@reduxjs/toolkit';\n\nconst { createAction, createSelector } = redux;\n\ninterface RemoteDataActions<TData, TError = unknown, TPayload = void> {\n request: redux.PayloadActionCreator<TPayload, string>;\n success: redux.PayloadActionCreator<TData, string>;\n failure: redux.PayloadActionCreator<TError, string>;\n}\n\n/**\n * Статус загрузки данных.\n */\nexport type Status = 'initial' | 'fetching' | 'success' | 'failure';\n\n/**\n * Базовая структура хранилища удаленных данных.\n */\nexport interface RemoteDataState<TData, TError> {\n /** Загружаемые данные. */\n readonly data: TData;\n\n /** Данные ошибки запроса. */\n readonly error: TError;\n\n /** Статус загрузки данных. */\n readonly status: Status;\n\n /** Количество запросов. */\n readonly fetchCount?: number;\n}\n\n/**\n * Возможные статусы загрузки данных.\n */\nexport const STATUS = {\n initial: 'initial',\n fetching: 'fetching',\n success: 'success',\n failure: 'failure',\n} as const satisfies Record<Status, Status>;\n\n/** Работа с удаленными данными. */\nexport abstract class RemoteData {\n static get STATUS() {\n return STATUS;\n }\n\n /**\n * Возвращает action'ы для работы с удаленными данными.\n * @param name Префикс имён.\n * @return Набор.\n */\n static createActions<TData = never, TError = never, TPayload = void>(\n name: string,\n ): RemoteDataActions<TData, TError, TPayload> {\n return {\n request: createAction<TPayload>(`${name}/request`),\n success: createAction<TData>(`${name}/success`),\n failure: createAction<TError>(`${name}/failure`),\n } as const;\n }\n\n /**\n * Возвращает набор обработчиков для работы с удаленными данными.\n * @return Набор.\n */\n static createHandlers<\n TData,\n TError,\n S extends RemoteDataState<TData, TError> = RemoteDataState<TData, TError>,\n >() {\n // ВАЖНО: не используем возможности immer здесь чтобы набор можно было использовать без immer.\n return {\n request(state: S | redux.Draft<S>): S | redux.Draft<S> {\n return {\n ...state,\n status: STATUS.fetching,\n };\n },\n\n success(state: S | redux.Draft<S>, action: redux.PayloadAction<TData>): S | redux.Draft<S> {\n return {\n ...state,\n data: action.payload,\n status: STATUS.success,\n fetchCount: (state.fetchCount ?? 0) + 1,\n };\n },\n\n failure(state: S | redux.Draft<S>, action: redux.PayloadAction<TError>): S | redux.Draft<S> {\n return {\n ...state,\n error: action.payload,\n status: STATUS.failure,\n fetchCount: (state.fetchCount ?? 0) + 1,\n };\n },\n } as const;\n }\n\n /**\n * Применяет обработчики для работы с удаленными данными.\n * @param actions Набор action'ов.\n * @param builder Builder.\n */\n static applyHandlers<TData, TError, S extends RemoteDataState<TData, TError>>(\n actions: RemoteDataActions<TData, TError, any | never>,\n builder: Pick<redux.ActionReducerMapBuilder<S>, 'addCase'>,\n ): void {\n const handlers = RemoteData.createHandlers<TData, TError, S>();\n\n // @todo разобраться с проблемой когда убираешь \".type\"\n builder.addCase(actions.request.type, handlers.request);\n builder.addCase(actions.success.type, handlers.success);\n builder.addCase(actions.failure.type, handlers.failure);\n }\n\n /**\n * Возвращает новый набор селекторов данных.\n * @param selectRoot Функция получения состояния.\n * @return Набор селекторов.\n */\n static createSelectors<S extends RemoteDataState<unknown, unknown>, R = unknown>(\n selectRoot: (root: R) => S,\n ) {\n return {\n isInitial: createSelector(selectRoot, state => state.status === 'initial'),\n isFetching: createSelector(selectRoot, state => state.status === 'fetching'),\n isSuccess: createSelector(selectRoot, state => state.status === 'success'),\n isFailed: createSelector(selectRoot, state => state.status === 'failure'),\n wasFetched: createSelector(selectRoot, state => (state.fetchCount ?? 0) > 0),\n } as const;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["takeChain","createSagaMiddleware"],"sources":["../../../../src/utils/redux-saga/index.ts"],"sourcesContent":["export type { SagaExtendedMiddleware, SagaMiddlewareHandler } from './types';\nexport { takeChain } from './take-chain';\nexport { createSagaMiddleware } from './middleware';\n"],"mappings":"AACA,SAASA,SAAS,QAAQ,iBAAc;AACxC,SAASC,oBAAoB,QAAQ,iBAAc"}
1
+ {"version":3,"file":"index.js","names":["takeChain","createSagaMiddleware"],"sources":["../../../../src/utils/redux-saga/index.ts"],"sourcesContent":["export type { SagaExtendedMiddleware, SagaMiddlewareHandler } from './types';\nexport { takeChain } from './take-chain';\nexport { createSagaMiddleware } from './middleware';\n"],"mappings":"AACA,SAASA,SAAS,QAAQ,iBAAc;AACxC,SAASC,oBAAoB,QAAQ,iBAAc","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.js","names":["createSagaMiddleware","END","call","cancel","delay","fork","race","createSagaExtendedMiddleware","handler","MiddlewareControl","toMiddleware","constructor","sagaMiddleware","onError","error","info","onSagaError","middleware","api","timeout","milliseconds","config","configInterrupt","run","saga","args","interruptTimeout","interruptStrategy","strategy","Number","isFinite","runWithBreakTask","runWithBreakMiddleware","toPromise","data","result","runWithTimeLimit","done","onTimeoutInterrupt","Error","onConfigError","promises","ready","timerId","push","then","finally","undefined","clearTimeout","Promise","resolve","setTimeout","dispatch","task","needCancel","taskResult","SagaCancelSignal","value","name"],"sources":["../../../../src/utils/redux-saga/middleware.ts"],"sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\nimport { MiddlewareAPI } from '@reduxjs/toolkit';\nimport {\n SagaExtendedMiddleware,\n SagaInterruptConfig,\n SagaMiddlewareHandler,\n SagaTimeoutRunData,\n} from './types';\nimport createSagaMiddleware, { END, Saga, Task, SagaMiddleware } from 'redux-saga';\nimport { call, cancel, delay, fork, race } from 'redux-saga/effects';\n\n/**\n * Возвращает расширенную версию SagaMiddleware.\n * @param handler Обработчик событий.\n * @return Middleware.\n */\nfunction createSagaExtendedMiddleware(handler: SagaMiddlewareHandler): SagaExtendedMiddleware {\n return new MiddlewareControl(handler).toMiddleware();\n}\n\nclass MiddlewareControl {\n private api?: MiddlewareAPI;\n private interruptTimeout?: number;\n private interruptStrategy?: SagaInterruptConfig['strategy'];\n private handler: SagaMiddlewareHandler;\n private sagaMiddleware: SagaMiddleware;\n\n constructor(handler: SagaMiddlewareHandler) {\n this.handler = handler;\n\n this.sagaMiddleware = createSagaMiddleware({\n onError: (error, info) => {\n handler.onSagaError(error, info);\n },\n });\n }\n\n toMiddleware(): SagaExtendedMiddleware {\n const middleware: SagaExtendedMiddleware = api => {\n this.api = api;\n return this.sagaMiddleware(api);\n };\n\n middleware.timeout = (milliseconds, config) => {\n this.configInterrupt(milliseconds, config);\n return middleware;\n };\n\n middleware.run = async (saga, ...args) => {\n await this.run(saga, ...args);\n };\n\n return middleware;\n }\n\n private configInterrupt(milliseconds: number, config?: SagaInterruptConfig) {\n this.interruptTimeout = milliseconds;\n this.interruptStrategy = config?.strategy ?? 'cancel-task';\n }\n\n private async run<S extends Saga>(saga: S, ...args: Parameters<S>): Promise<void> {\n const { interruptTimeout } = this;\n\n if (typeof interruptTimeout === 'number' && Number.isFinite(interruptTimeout)) {\n switch (this.interruptStrategy) {\n case 'cancel-task':\n await this.runWithBreakTask({ saga, args, timeout: interruptTimeout });\n return;\n case 'dispatch-end':\n await this.runWithBreakMiddleware({ saga, args, timeout: interruptTimeout });\n return;\n }\n }\n\n await this.sagaMiddleware.run(saga, ...args).toPromise();\n }\n\n private async runWithBreakTask<S extends Saga>(data: SagaTimeoutRunData<S>): Promise<void> {\n const result: Either<unknown, unknown> = await this.sagaMiddleware\n .run(runWithTimeLimit, data)\n .toPromise();\n\n if (!result.done) {\n this.handler.onTimeoutInterrupt({ timeout: data.timeout });\n }\n }\n\n private async runWithBreakMiddleware<S extends Saga>(data: SagaTimeoutRunData<S>): Promise<void> {\n const { saga, args, timeout } = data;\n const { api } = this;\n\n if (!api) {\n const error = new Error('Middleware is not applied to the store');\n\n this.handler.onConfigError(error);\n\n throw error;\n }\n\n const promises: Promise<void>[] = [];\n\n let ready = false;\n let timerId: ReturnType<typeof setTimeout>;\n\n promises.push(\n this.sagaMiddleware\n .run(saga, ...args)\n .toPromise()\n .then(() => {\n ready = true;\n })\n .finally(() => {\n // вне зависимости от результата отключаем таймер если он есть\n timerId !== undefined && clearTimeout(timerId);\n }),\n );\n\n promises.push(\n new Promise<void>(resolve => {\n timerId = setTimeout(() => {\n if (!ready) {\n this.handler.onTimeoutInterrupt({ timeout });\n api.dispatch(END);\n }\n\n resolve();\n }, timeout);\n }),\n );\n\n await Promise.race(promises);\n }\n}\n\nfunction* runWithTimeLimit<S extends Saga>(\n data: SagaTimeoutRunData<S>,\n): Generator<any, Either<SagaCancelSignal, ReturnType<S>>, any> {\n const { saga, args, timeout } = data;\n const task: Task = yield fork(saga, ...args);\n\n const [needCancel, taskResult]: [boolean, ReturnType<S>] = yield race([\n delay(timeout, true),\n call(() => task.toPromise()),\n ]);\n\n if (needCancel) {\n yield cancel(task);\n\n // ВАЖНО: если делать throw ... - ошибка попадет в onError (createSagaMiddleware)\n // чтобы не логировать лишний раз возвращаем значение\n return { done: false, error: new SagaCancelSignal() };\n } else {\n return { done: true, value: taskResult };\n }\n}\n\n// @todo в будущем можно заменить все ожидаемые исключения (только внутри фреймворка) на этот тип\ntype Either<E, V> = { done: false; error: E } | { done: true; value: V };\n\nclass SagaCancelSignal {\n name: string;\n\n constructor() {\n this.name = 'SagaCancelSignal';\n }\n}\n\nexport { createSagaExtendedMiddleware as createSagaMiddleware };\n"],"mappings":"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"}
1
+ {"version":3,"file":"middleware.js","names":["createSagaMiddleware","END","call","cancel","delay","fork","race","createSagaExtendedMiddleware","handler","MiddlewareControl","toMiddleware","constructor","sagaMiddleware","onError","error","info","onSagaError","middleware","api","timeout","milliseconds","config","configInterrupt","run","saga","args","interruptTimeout","interruptStrategy","strategy","Number","isFinite","runWithBreakTask","runWithBreakMiddleware","toPromise","data","result","runWithTimeLimit","done","onTimeoutInterrupt","Error","onConfigError","promises","ready","timerId","push","then","finally","undefined","clearTimeout","Promise","resolve","setTimeout","dispatch","task","needCancel","taskResult","SagaCancelSignal","value","name"],"sources":["../../../../src/utils/redux-saga/middleware.ts"],"sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\nimport { MiddlewareAPI } from '@reduxjs/toolkit';\nimport {\n SagaExtendedMiddleware,\n SagaInterruptConfig,\n SagaMiddlewareHandler,\n SagaTimeoutRunData,\n} from './types';\nimport createSagaMiddleware, { END, Saga, Task, SagaMiddleware } from 'redux-saga';\nimport { call, cancel, delay, fork, race } from 'redux-saga/effects';\n\n/**\n * Возвращает расширенную версию SagaMiddleware.\n * @param handler Обработчик событий.\n * @return Middleware.\n */\nfunction createSagaExtendedMiddleware(handler: SagaMiddlewareHandler): SagaExtendedMiddleware {\n return new MiddlewareControl(handler).toMiddleware();\n}\n\nclass MiddlewareControl {\n private api?: MiddlewareAPI;\n private interruptTimeout?: number;\n private interruptStrategy?: SagaInterruptConfig['strategy'];\n private handler: SagaMiddlewareHandler;\n private sagaMiddleware: SagaMiddleware;\n\n constructor(handler: SagaMiddlewareHandler) {\n this.handler = handler;\n\n this.sagaMiddleware = createSagaMiddleware({\n onError: (error, info) => {\n handler.onSagaError(error, info);\n },\n });\n }\n\n toMiddleware(): SagaExtendedMiddleware {\n const middleware: SagaExtendedMiddleware = api => {\n this.api = api;\n return this.sagaMiddleware(api);\n };\n\n middleware.timeout = (milliseconds, config) => {\n this.configInterrupt(milliseconds, config);\n return middleware;\n };\n\n middleware.run = async (saga, ...args) => {\n await this.run(saga, ...args);\n };\n\n return middleware;\n }\n\n private configInterrupt(milliseconds: number, config?: SagaInterruptConfig) {\n this.interruptTimeout = milliseconds;\n this.interruptStrategy = config?.strategy ?? 'cancel-task';\n }\n\n private async run<S extends Saga>(saga: S, ...args: Parameters<S>): Promise<void> {\n const { interruptTimeout } = this;\n\n if (typeof interruptTimeout === 'number' && Number.isFinite(interruptTimeout)) {\n switch (this.interruptStrategy) {\n case 'cancel-task':\n await this.runWithBreakTask({ saga, args, timeout: interruptTimeout });\n return;\n case 'dispatch-end':\n await this.runWithBreakMiddleware({ saga, args, timeout: interruptTimeout });\n return;\n }\n }\n\n await this.sagaMiddleware.run(saga, ...args).toPromise();\n }\n\n private async runWithBreakTask<S extends Saga>(data: SagaTimeoutRunData<S>): Promise<void> {\n const result: Either<unknown, unknown> = await this.sagaMiddleware\n .run(runWithTimeLimit, data)\n .toPromise();\n\n if (!result.done) {\n this.handler.onTimeoutInterrupt({ timeout: data.timeout });\n }\n }\n\n private async runWithBreakMiddleware<S extends Saga>(data: SagaTimeoutRunData<S>): Promise<void> {\n const { saga, args, timeout } = data;\n const { api } = this;\n\n if (!api) {\n const error = new Error('Middleware is not applied to the store');\n\n this.handler.onConfigError(error);\n\n throw error;\n }\n\n const promises: Promise<void>[] = [];\n\n let ready = false;\n let timerId: ReturnType<typeof setTimeout>;\n\n promises.push(\n this.sagaMiddleware\n .run(saga, ...args)\n .toPromise()\n .then(() => {\n ready = true;\n })\n .finally(() => {\n // вне зависимости от результата отключаем таймер если он есть\n timerId !== undefined && clearTimeout(timerId);\n }),\n );\n\n promises.push(\n new Promise<void>(resolve => {\n timerId = setTimeout(() => {\n if (!ready) {\n this.handler.onTimeoutInterrupt({ timeout });\n api.dispatch(END);\n }\n\n resolve();\n }, timeout);\n }),\n );\n\n await Promise.race(promises);\n }\n}\n\nfunction* runWithTimeLimit<S extends Saga>(\n data: SagaTimeoutRunData<S>,\n): Generator<any, Either<SagaCancelSignal, ReturnType<S>>, any> {\n const { saga, args, timeout } = data;\n const task: Task = yield fork(saga, ...args);\n\n const [needCancel, taskResult]: [boolean, ReturnType<S>] = yield race([\n delay(timeout, true),\n call(() => task.toPromise()),\n ]);\n\n if (needCancel) {\n yield cancel(task);\n\n // ВАЖНО: если делать throw ... - ошибка попадет в onError (createSagaMiddleware)\n // чтобы не логировать лишний раз возвращаем значение\n return { done: false, error: new SagaCancelSignal() };\n } else {\n return { done: true, value: taskResult };\n }\n}\n\n// @todo в будущем можно заменить все ожидаемые исключения (только внутри фреймворка) на этот тип\ntype Either<E, V> = { done: false; error: E } | { done: true; value: V };\n\nclass SagaCancelSignal {\n name: string;\n\n constructor() {\n this.name = 'SagaCancelSignal';\n }\n}\n\nexport { createSagaExtendedMiddleware as createSagaMiddleware };\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"take-chain.js","names":["delay","fork","put","race","take","takeChain","timeout","types","task","deps","generateTakeChain","breakAction","type","Date","now","firstAction","collectedActions","putDelayed","action","canceled","push","every","some","someAction"],"sources":["../../../../src/utils/redux-saga/take-chain.ts"],"sourcesContent":["import { Action } from '@reduxjs/toolkit';\nimport { delay, fork, put, race, take } from 'redux-saga/effects';\n\n/**\n * Накапливает экшены и генерирует эффект по таймауту.\n * @param timeout Время задержки в мс.\n * @param types Массив с типами ожидаемых экшенов.\n * @param task Генератор.\n * @param deps Аргументы для генератора.\n * @return Эффект.\n */\nexport function takeChain<\n Deps extends any[],\n Task extends (...someArgs: [...Deps, Action[]]) => any,\n>(timeout: number, types: string[], task: Task, ...deps: Deps) {\n return fork(generateTakeChain as any, timeout, types, task, deps);\n}\n\n/**\n * Генерирует эффект по таймауту.\n * @internal\n * @param timeout Время задержки в мс.\n * @param types Массив с типами ожидаемых экшенов.\n * @param task Генератор.\n * @param deps Аргументы для генератора.\n */\nexport function* generateTakeChain<\n Deps extends any[],\n Task extends (...someArgs: [...Deps, Action[]]) => any,\n>(timeout: number, types: string[], task: Task, deps: Deps): Generator<any, void, any> {\n while (true) {\n const breakAction: Action = { type: `BREAK_${Date.now()}` };\n const firstAction: Action = yield take(types);\n const collectedActions = [firstAction];\n\n yield fork(putDelayed, timeout, breakAction);\n\n while (true) {\n const { action, canceled } = yield race({\n action: take(types),\n canceled: take(breakAction.type),\n });\n\n action && collectedActions.push(action);\n\n if (\n canceled ||\n types.every(type => collectedActions.some(someAction => someAction.type === type))\n ) {\n // @todo убрать \"as any\"\n yield fork(task as any, ...deps, collectedActions);\n break;\n }\n }\n }\n}\n\n/**\n * Вызывает экшен с заданной задержкой.\n * @internal\n * @param timeout Время задержки в мс.\n * @param action Тип экшена.\n */\nexport function* putDelayed(timeout: number, action: Action) {\n yield delay(timeout);\n yield put(action);\n}\n"],"mappings":"AACA,SAASA,KAAK,EAAEC,IAAI,EAAEC,GAAG,EAAEC,IAAI,EAAEC,IAAI,QAAQ,oBAAoB;;AAEjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,SAASA,CAGvBC,OAAe,EAAEC,KAAe,EAAEC,IAAU,EAAE,GAAGC,IAAU,EAAE;EAC7D,OAAOR,IAAI,CAACS,iBAAiB,EAASJ,OAAO,EAAEC,KAAK,EAAEC,IAAI,EAAEC,IAAI,CAAC;AACnE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,UAAUC,iBAAiBA,CAGhCJ,OAAe,EAAEC,KAAe,EAAEC,IAAU,EAAEC,IAAU,EAA6B;EACrF,OAAO,IAAI,EAAE;IACX,MAAME,WAAmB,GAAG;MAAEC,IAAI,EAAG,SAAQC,IAAI,CAACC,GAAG,CAAC,CAAE;IAAE,CAAC;IAC3D,MAAMC,WAAmB,GAAG,MAAMX,IAAI,CAACG,KAAK,CAAC;IAC7C,MAAMS,gBAAgB,GAAG,CAACD,WAAW,CAAC;IAEtC,MAAMd,IAAI,CAACgB,UAAU,EAAEX,OAAO,EAAEK,WAAW,CAAC;IAE5C,OAAO,IAAI,EAAE;MACX,MAAM;QAAEO,MAAM;QAAEC;MAAS,CAAC,GAAG,MAAMhB,IAAI,CAAC;QACtCe,MAAM,EAAEd,IAAI,CAACG,KAAK,CAAC;QACnBY,QAAQ,EAAEf,IAAI,CAACO,WAAW,CAACC,IAAI;MACjC,CAAC,CAAC;MAEFM,MAAM,IAAIF,gBAAgB,CAACI,IAAI,CAACF,MAAM,CAAC;MAEvC,IACEC,QAAQ,IACRZ,KAAK,CAACc,KAAK,CAACT,IAAI,IAAII,gBAAgB,CAACM,IAAI,CAACC,UAAU,IAAIA,UAAU,CAACX,IAAI,KAAKA,IAAI,CAAC,CAAC,EAClF;QACA;QACA,MAAMX,IAAI,CAACO,IAAI,EAAS,GAAGC,IAAI,EAAEO,gBAAgB,CAAC;QAClD;MACF;IACF;EACF;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,UAAUC,UAAUA,CAACX,OAAe,EAAEY,MAAc,EAAE;EAC3D,MAAMlB,KAAK,CAACM,OAAO,CAAC;EACpB,MAAMJ,GAAG,CAACgB,MAAM,CAAC;AACnB"}
1
+ {"version":3,"file":"take-chain.js","names":["delay","fork","put","race","take","takeChain","timeout","types","task","deps","generateTakeChain","breakAction","type","Date","now","firstAction","collectedActions","putDelayed","action","canceled","push","every","some","someAction"],"sources":["../../../../src/utils/redux-saga/take-chain.ts"],"sourcesContent":["import { Action } from '@reduxjs/toolkit';\nimport { delay, fork, put, race, take } from 'redux-saga/effects';\n\n/**\n * Накапливает экшены и генерирует эффект по таймауту.\n * @param timeout Время задержки в мс.\n * @param types Массив с типами ожидаемых экшенов.\n * @param task Генератор.\n * @param deps Аргументы для генератора.\n * @return Эффект.\n */\nexport function takeChain<\n Deps extends any[],\n Task extends (...someArgs: [...Deps, Action[]]) => any,\n>(timeout: number, types: string[], task: Task, ...deps: Deps) {\n return fork(generateTakeChain as any, timeout, types, task, deps);\n}\n\n/**\n * Генерирует эффект по таймауту.\n * @internal\n * @param timeout Время задержки в мс.\n * @param types Массив с типами ожидаемых экшенов.\n * @param task Генератор.\n * @param deps Аргументы для генератора.\n */\nexport function* generateTakeChain<\n Deps extends any[],\n Task extends (...someArgs: [...Deps, Action[]]) => any,\n>(timeout: number, types: string[], task: Task, deps: Deps): Generator<any, void, any> {\n while (true) {\n const breakAction: Action = { type: `BREAK_${Date.now()}` };\n const firstAction: Action = yield take(types);\n const collectedActions = [firstAction];\n\n yield fork(putDelayed, timeout, breakAction);\n\n while (true) {\n const { action, canceled } = yield race({\n action: take(types),\n canceled: take(breakAction.type),\n });\n\n action && collectedActions.push(action);\n\n if (\n canceled ||\n types.every(type => collectedActions.some(someAction => someAction.type === type))\n ) {\n // @todo убрать \"as any\"\n yield fork(task as any, ...deps, collectedActions);\n break;\n }\n }\n }\n}\n\n/**\n * Вызывает экшен с заданной задержкой.\n * @internal\n * @param timeout Время задержки в мс.\n * @param action Тип экшена.\n */\nexport function* putDelayed(timeout: number, action: Action) {\n yield delay(timeout);\n yield put(action);\n}\n"],"mappings":"AACA,SAASA,KAAK,EAAEC,IAAI,EAAEC,GAAG,EAAEC,IAAI,EAAEC,IAAI,QAAQ,oBAAoB;;AAEjE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,SAASA,CAGvBC,OAAe,EAAEC,KAAe,EAAEC,IAAU,EAAE,GAAGC,IAAU,EAAE;EAC7D,OAAOR,IAAI,CAACS,iBAAiB,EAASJ,OAAO,EAAEC,KAAK,EAAEC,IAAI,EAAEC,IAAI,CAAC;AACnE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,UAAUC,iBAAiBA,CAGhCJ,OAAe,EAAEC,KAAe,EAAEC,IAAU,EAAEC,IAAU,EAA6B;EACrF,OAAO,IAAI,EAAE;IACX,MAAME,WAAmB,GAAG;MAAEC,IAAI,EAAE,SAASC,IAAI,CAACC,GAAG,CAAC,CAAC;IAAG,CAAC;IAC3D,MAAMC,WAAmB,GAAG,MAAMX,IAAI,CAACG,KAAK,CAAC;IAC7C,MAAMS,gBAAgB,GAAG,CAACD,WAAW,CAAC;IAEtC,MAAMd,IAAI,CAACgB,UAAU,EAAEX,OAAO,EAAEK,WAAW,CAAC;IAE5C,OAAO,IAAI,EAAE;MACX,MAAM;QAAEO,MAAM;QAAEC;MAAS,CAAC,GAAG,MAAMhB,IAAI,CAAC;QACtCe,MAAM,EAAEd,IAAI,CAACG,KAAK,CAAC;QACnBY,QAAQ,EAAEf,IAAI,CAACO,WAAW,CAACC,IAAI;MACjC,CAAC,CAAC;MAEFM,MAAM,IAAIF,gBAAgB,CAACI,IAAI,CAACF,MAAM,CAAC;MAEvC,IACEC,QAAQ,IACRZ,KAAK,CAACc,KAAK,CAACT,IAAI,IAAII,gBAAgB,CAACM,IAAI,CAACC,UAAU,IAAIA,UAAU,CAACX,IAAI,KAAKA,IAAI,CAAC,CAAC,EAClF;QACA;QACA,MAAMX,IAAI,CAACO,IAAI,EAAS,GAAGC,IAAI,EAAEO,gBAAgB,CAAC;QAClD;MACF;IACF;EACF;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,UAAUC,UAAUA,CAACX,OAAe,EAAEY,MAAc,EAAE;EAC3D,MAAMlB,KAAK,CAACM,OAAO,CAAC;EACpB,MAAMJ,GAAG,CAACgB,MAAM,CAAC;AACnB","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../../src/utils/redux-saga/types.ts"],"sourcesContent":["import type { Middleware } from '@reduxjs/toolkit';\nimport type { Saga, SagaMiddlewareOptions } from 'redux-saga';\n\n/** Опции остановки redux-saga. */\nexport interface SagaInterruptConfig {\n strategy?: 'dispatch-end' | 'cancel-task';\n}\n\n/** Информация, которая приходит вторым аргументом в обработчик ошибки SagaMiddleware. */\nexport type SagaErrorInfo = Parameters<Required<SagaMiddlewareOptions>['onError']>[1];\n\n/** Информация об остановке redux-saga. */\nexport interface SagaInterruptInfo {\n timeout: number;\n}\n\n/** Опции запуска redux-saga с остановкой по таймауту. */\nexport interface SagaTimeoutRunData<S extends Saga> {\n saga: S;\n args: Parameters<S>;\n timeout: number;\n}\n\n/** Кастомная версия SagaMiddleware. */\nexport interface SagaExtendedMiddleware extends Middleware {\n /**\n * Установить временное ограничение работы саги.\n * Если сага не успела выполнится до истечения этого ограничения она будет принудительно завершена.\n */\n timeout(milliseconds: number, config?: SagaInterruptConfig): this;\n\n /**\n * Запускает сагу.\n */\n run: <S extends Saga>(saga: S, ...args: Parameters<S>) => Promise<void>;\n}\n\n/** Обработчик событий SagaExtendedMiddleware. */\nexport interface SagaMiddlewareHandler {\n onSagaError(error: Error, errorInfo: SagaErrorInfo): Promise<void> | void;\n onConfigError(error: Error): Promise<void> | void;\n onTimeoutInterrupt(info: SagaInterruptInfo): Promise<void> | void;\n}\n"],"mappings":""}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../../src/utils/redux-saga/types.ts"],"sourcesContent":["import type { Middleware } from '@reduxjs/toolkit';\nimport type { Saga, SagaMiddlewareOptions } from 'redux-saga';\n\n/** Опции остановки redux-saga. */\nexport interface SagaInterruptConfig {\n strategy?: 'dispatch-end' | 'cancel-task';\n}\n\n/** Информация, которая приходит вторым аргументом в обработчик ошибки SagaMiddleware. */\nexport type SagaErrorInfo = Parameters<Required<SagaMiddlewareOptions>['onError']>[1];\n\n/** Информация об остановке redux-saga. */\nexport interface SagaInterruptInfo {\n timeout: number;\n}\n\n/** Опции запуска redux-saga с остановкой по таймауту. */\nexport interface SagaTimeoutRunData<S extends Saga> {\n saga: S;\n args: Parameters<S>;\n timeout: number;\n}\n\n/** Кастомная версия SagaMiddleware. */\nexport interface SagaExtendedMiddleware extends Middleware {\n /**\n * Установить временное ограничение работы саги.\n * Если сага не успела выполнится до истечения этого ограничения она будет принудительно завершена.\n */\n timeout(milliseconds: number, config?: SagaInterruptConfig): this;\n\n /**\n * Запускает сагу.\n */\n run: <S extends Saga>(saga: S, ...args: Parameters<S>) => Promise<void>;\n}\n\n/** Обработчик событий SagaExtendedMiddleware. */\nexport interface SagaMiddlewareHandler {\n onSagaError(error: Error, errorInfo: SagaErrorInfo): Promise<void> | void;\n onConfigError(error: Error): Promise<void> | void;\n onTimeoutInterrupt(info: SagaInterruptInfo): Promise<void> | void;\n}\n"],"mappings":"","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"create-curried-selector.js","names":["createSelectorCreator","defaultMemoize","shallowEqual","MEMOIZE_OPTIONS","equalityCheck","resultEqualityCheck","maxSize","createCashedSelector","currySelector","selector","curriedSelector","args","state","Object","assign","uncurried","createCurriedSelector"],"sources":["../../../../src/utils/selectors/create-curried-selector.ts"],"sourcesContent":["import {\n createSelectorCreator,\n defaultMemoize,\n createSelector,\n Selector,\n GetStateFromSelectors,\n GetParamsFromSelectors,\n} from 'reselect';\nimport { shallowEqual } from 'react-redux';\n\n/**\n * Опции для включения внутреннего кэша,\n * чтобы селектор с параметрами запоминал вычисления при смене значения параметра.\n */\nconst MEMOIZE_OPTIONS = {\n equalityCheck: shallowEqual,\n resultEqualityCheck: shallowEqual,\n maxSize: 10,\n};\n\nconst createCashedSelector = createSelectorCreator(defaultMemoize, MEMOIZE_OPTIONS);\n\n/**\n * Возвращает каррированную версию селектора.\n * По мотивам https://reselect.js.org/FAQ#how-can-i-make-a-curried-selector.\n * @param selector Исходный селектор.\n * @return Каррированный селектор.\n */\nconst currySelector = <\n State extends GetStateFromSelectors<InputSelectors>,\n Result,\n Params extends GetParamsFromSelectors<InputSelectors>,\n InputSelectors extends Selector[],\n AdditionalFields,\n>(\n selector: ReturnType<typeof createSelector<InputSelectors, Result>> & AdditionalFields,\n) => {\n /** @inheritdoc */\n const curriedSelector =\n (...args: Params) =>\n (state: State) =>\n selector(state, ...args);\n return Object.assign(curriedSelector, selector, { uncurried: selector });\n};\n\n/**\n * Тот же createSelector, но возвращает каррированный селектор с кэшем параметров.\n * По мотивам https://reselect.js.org/FAQ#how-can-i-make-a-curried-selector.\n * @inheritdoc\n */\nexport const createCurriedSelector = <InputSelectors extends Selector[], Result>(\n ...args: Parameters<typeof createSelector<InputSelectors, Result>>\n) => currySelector(createCashedSelector(...args));\n"],"mappings":"AAAA,SACEA,qBAAqB,EACrBC,cAAc,QAKT,UAAU;AACjB,SAASC,YAAY,QAAQ,aAAa;;AAE1C;AACA;AACA;AACA;AACA,MAAMC,eAAe,GAAG;EACtBC,aAAa,EAAEF,YAAY;EAC3BG,mBAAmB,EAAEH,YAAY;EACjCI,OAAO,EAAE;AACX,CAAC;AAED,MAAMC,oBAAoB,GAAGP,qBAAqB,CAACC,cAAc,EAAEE,eAAe,CAAC;;AAEnF;AACA;AACA;AACA;AACA;AACA;AACA,MAAMK,aAAa,GAOjBC,QAAsF,IACnF;EACH;EACA,MAAMC,eAAe,GACnBA,CAAC,GAAGC,IAAY,KACfC,KAAY,IACXH,QAAQ,CAACG,KAAK,EAAE,GAAGD,IAAI,CAAC;EAC5B,OAAOE,MAAM,CAACC,MAAM,CAACJ,eAAe,EAAED,QAAQ,EAAE;IAAEM,SAAS,EAAEN;EAAS,CAAC,CAAC;AAC1E,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMO,qBAAqB,GAAGA,CACnC,GAAGL,IAA+D,KAC/DH,aAAa,CAACD,oBAAoB,CAAC,GAAGI,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"create-curried-selector.js","names":["createSelectorCreator","defaultMemoize","shallowEqual","MEMOIZE_OPTIONS","equalityCheck","resultEqualityCheck","maxSize","createCashedSelector","currySelector","selector","curriedSelector","args","state","Object","assign","uncurried","createCurriedSelector"],"sources":["../../../../src/utils/selectors/create-curried-selector.ts"],"sourcesContent":["import {\n createSelectorCreator,\n defaultMemoize,\n createSelector,\n Selector,\n GetStateFromSelectors,\n GetParamsFromSelectors,\n} from 'reselect';\nimport { shallowEqual } from 'react-redux';\n\n/**\n * Опции для включения внутреннего кэша,\n * чтобы селектор с параметрами запоминал вычисления при смене значения параметра.\n */\nconst MEMOIZE_OPTIONS = {\n equalityCheck: shallowEqual,\n resultEqualityCheck: shallowEqual,\n maxSize: 10,\n};\n\nconst createCashedSelector = createSelectorCreator(defaultMemoize, MEMOIZE_OPTIONS);\n\n/**\n * Возвращает каррированную версию селектора.\n * По мотивам https://reselect.js.org/FAQ#how-can-i-make-a-curried-selector.\n * @param selector Исходный селектор.\n * @return Каррированный селектор.\n */\nconst currySelector = <\n State extends GetStateFromSelectors<InputSelectors>,\n Result,\n Params extends GetParamsFromSelectors<InputSelectors>,\n InputSelectors extends Selector[],\n AdditionalFields,\n>(\n selector: ReturnType<typeof createSelector<InputSelectors, Result>> & AdditionalFields,\n) => {\n /** @inheritdoc */\n const curriedSelector =\n (...args: Params) =>\n (state: State) =>\n selector(state, ...args);\n return Object.assign(curriedSelector, selector, { uncurried: selector });\n};\n\n/**\n * Тот же createSelector, но возвращает каррированный селектор с кэшем параметров.\n * По мотивам https://reselect.js.org/FAQ#how-can-i-make-a-curried-selector.\n * @inheritdoc\n */\nexport const createCurriedSelector = <InputSelectors extends Selector[], Result>(\n ...args: Parameters<typeof createSelector<InputSelectors, Result>>\n) => currySelector(createCashedSelector(...args));\n"],"mappings":"AAAA,SACEA,qBAAqB,EACrBC,cAAc,QAKT,UAAU;AACjB,SAASC,YAAY,QAAQ,aAAa;;AAE1C;AACA;AACA;AACA;AACA,MAAMC,eAAe,GAAG;EACtBC,aAAa,EAAEF,YAAY;EAC3BG,mBAAmB,EAAEH,YAAY;EACjCI,OAAO,EAAE;AACX,CAAC;AAED,MAAMC,oBAAoB,GAAGP,qBAAqB,CAACC,cAAc,EAAEE,eAAe,CAAC;;AAEnF;AACA;AACA;AACA;AACA;AACA;AACA,MAAMK,aAAa,GAOjBC,QAAsF,IACnF;EACH;EACA,MAAMC,eAAe,GACnBA,CAAC,GAAGC,IAAY,KACfC,KAAY,IACXH,QAAQ,CAACG,KAAK,EAAE,GAAGD,IAAI,CAAC;EAC5B,OAAOE,MAAM,CAACC,MAAM,CAACJ,eAAe,EAAED,QAAQ,EAAE;IAAEM,SAAS,EAAEN;EAAS,CAAC,CAAC;AAC1E,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMO,qBAAqB,GAAGA,CACnC,GAAGL,IAA+D,KAC/DH,aAAa,CAACD,oBAAoB,CAAC,GAAGI,IAAI,CAAC,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["jsesc","SsrBridge","prepare","serviceKey","rootElementId","serverDataKey","publicEnvsKey","resolve","rootElement","document","getElementById","serverSideData","window","Error","GlobalDataScript","property","value","json","JSON","stringify","isScriptContext","React","createElement","dangerouslySetInnerHTML","__html"],"sources":["../../../../src/utils/ssr/index.tsx"],"sourcesContent":["import jsesc from 'jsesc';\n\n/**\n * Данные для SSR, сформированные на сервере.\n */\nexport interface BridgeServerSide {\n rootElementId: string;\n serverDataKey: string;\n publicEnvsKey: string;\n}\n\n/**\n * Данные для SSR, доступные на стороне клиента (в браузере).\n */\nexport interface BridgeClientSide<T> {\n rootElement: HTMLElement;\n serverSideData: T;\n}\n\n/**\n * Набор методов для связывания серверного и клиентского приложений.\n */\nexport const SsrBridge = {\n /**\n * Вызывается на сервере.\n * @param serviceKey Идентификатор корневого элемента.\n * @return Идентификатор корневого элемента и ключ для глобальной переменной.\n */\n prepare(serviceKey: string): BridgeServerSide {\n return {\n rootElementId: `${serviceKey}__root`,\n serverDataKey: `${serviceKey}__serverData`,\n publicEnvsKey: `${serviceKey}__envs`,\n };\n },\n\n /**\n * Вызывается на клиенте.\n * @param serviceKey Идентификатор корневого элемента.\n * @return Корневой элемент и начальное состояние.\n */\n resolve<T = any>(serviceKey: string): BridgeClientSide<T> {\n const rootElement = document.getElementById(`${serviceKey}__root`);\n const serverSideData = (window as any)[`${serviceKey}__serverData`];\n\n if (!rootElement) {\n throw Error('SSR: Не был найден корневой элемент');\n }\n\n return { rootElement, serverSideData };\n },\n} as const;\n\n/**\n * Скрипт, формирующий глобально доступные на странице данные.\n * @todo Перенести в utils/react.\n * @param props Свойства.\n * @return Элемент.\n */\nexport function GlobalDataScript({\n property,\n value,\n}: {\n property: string;\n value: Record<any, any>;\n}) {\n const json = jsesc(JSON.stringify(value), {\n json: true,\n isScriptContext: true,\n });\n\n return (\n <script\n dangerouslySetInnerHTML={{\n // @todo возможно стоит также экранировать символы в \"property\"\n __html: `window[\"${property}\"] = JSON.parse(${json});`,\n }}\n />\n );\n}\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;;AAEzB;AACA;AACA;;AAOA;AACA;AACA;;AAMA;AACA;AACA;AACA,OAAO,MAAMC,SAAS,GAAG;EACvB;AACF;AACA;AACA;AACA;EACEC,OAAOA,CAACC,UAAkB,EAAoB;IAC5C,OAAO;MACLC,aAAa,EAAG,GAAED,UAAW,QAAO;MACpCE,aAAa,EAAG,GAAEF,UAAW,cAAa;MAC1CG,aAAa,EAAG,GAAEH,UAAW;IAC/B,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEI,OAAOA,CAAUJ,UAAkB,EAAuB;IACxD,MAAMK,WAAW,GAAGC,QAAQ,CAACC,cAAc,CAAE,GAAEP,UAAW,QAAO,CAAC;IAClE,MAAMQ,cAAc,GAAIC,MAAM,CAAU,GAAET,UAAW,cAAa,CAAC;IAEnE,IAAI,CAACK,WAAW,EAAE;MAChB,MAAMK,KAAK,CAAC,qCAAqC,CAAC;IACpD;IAEA,OAAO;MAAEL,WAAW;MAAEG;IAAe,CAAC;EACxC;AACF,CAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,gBAAgBA,CAAC;EAC/BC,QAAQ;EACRC;AAIF,CAAC,EAAE;EACD,MAAMC,IAAI,GAAGjB,KAAK,CAACkB,IAAI,CAACC,SAAS,CAACH,KAAK,CAAC,EAAE;IACxCC,IAAI,EAAE,IAAI;IACVG,eAAe,EAAE;EACnB,CAAC,CAAC;EAEF,oBACEC,KAAA,CAAAC,aAAA;IACEC,uBAAuB,EAAE;MACvB;MACAC,MAAM,EAAG,WAAUT,QAAS,mBAAkBE,IAAK;IACrD;EAAE,CACH,CAAC;AAEN"}
1
+ {"version":3,"file":"index.js","names":["jsesc","SsrBridge","prepare","serviceKey","rootElementId","serverDataKey","publicEnvsKey","resolve","rootElement","document","getElementById","serverSideData","window","Error","GlobalDataScript","property","value","json","JSON","stringify","isScriptContext","React","createElement","dangerouslySetInnerHTML","__html"],"sources":["../../../../src/utils/ssr/index.tsx"],"sourcesContent":["import jsesc from 'jsesc';\n\n/**\n * Данные для SSR, сформированные на сервере.\n */\nexport interface BridgeServerSide {\n rootElementId: string;\n serverDataKey: string;\n publicEnvsKey: string;\n}\n\n/**\n * Данные для SSR, доступные на стороне клиента (в браузере).\n */\nexport interface BridgeClientSide<T> {\n rootElement: HTMLElement;\n serverSideData: T;\n}\n\n/**\n * Набор методов для связывания серверного и клиентского приложений.\n */\nexport const SsrBridge = {\n /**\n * Вызывается на сервере.\n * @param serviceKey Идентификатор корневого элемента.\n * @return Идентификатор корневого элемента и ключ для глобальной переменной.\n */\n prepare(serviceKey: string): BridgeServerSide {\n return {\n rootElementId: `${serviceKey}__root`,\n serverDataKey: `${serviceKey}__serverData`,\n publicEnvsKey: `${serviceKey}__envs`,\n };\n },\n\n /**\n * Вызывается на клиенте.\n * @param serviceKey Идентификатор корневого элемента.\n * @return Корневой элемент и начальное состояние.\n */\n resolve<T = any>(serviceKey: string): BridgeClientSide<T> {\n const rootElement = document.getElementById(`${serviceKey}__root`);\n const serverSideData = (window as any)[`${serviceKey}__serverData`];\n\n if (!rootElement) {\n throw Error('SSR: Не был найден корневой элемент');\n }\n\n return { rootElement, serverSideData };\n },\n} as const;\n\n/**\n * Скрипт, формирующий глобально доступные на странице данные.\n * @todo Перенести в utils/react.\n * @param props Свойства.\n * @return Элемент.\n */\nexport function GlobalDataScript({\n property,\n value,\n}: {\n property: string;\n value: Record<any, any>;\n}) {\n const json = jsesc(JSON.stringify(value), {\n json: true,\n isScriptContext: true,\n });\n\n return (\n <script\n dangerouslySetInnerHTML={{\n // @todo возможно стоит также экранировать символы в \"property\"\n __html: `window[\"${property}\"] = JSON.parse(${json});`,\n }}\n />\n );\n}\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;;AAEzB;AACA;AACA;;AAOA;AACA;AACA;;AAMA;AACA;AACA;AACA,OAAO,MAAMC,SAAS,GAAG;EACvB;AACF;AACA;AACA;AACA;EACEC,OAAOA,CAACC,UAAkB,EAAoB;IAC5C,OAAO;MACLC,aAAa,EAAE,GAAGD,UAAU,QAAQ;MACpCE,aAAa,EAAE,GAAGF,UAAU,cAAc;MAC1CG,aAAa,EAAE,GAAGH,UAAU;IAC9B,CAAC;EACH,CAAC;EAED;AACF;AACA;AACA;AACA;EACEI,OAAOA,CAAUJ,UAAkB,EAAuB;IACxD,MAAMK,WAAW,GAAGC,QAAQ,CAACC,cAAc,CAAC,GAAGP,UAAU,QAAQ,CAAC;IAClE,MAAMQ,cAAc,GAAIC,MAAM,CAAS,GAAGT,UAAU,cAAc,CAAC;IAEnE,IAAI,CAACK,WAAW,EAAE;MAChB,MAAMK,KAAK,CAAC,qCAAqC,CAAC;IACpD;IAEA,OAAO;MAAEL,WAAW;MAAEG;IAAe,CAAC;EACxC;AACF,CAAU;;AAEV;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,gBAAgBA,CAAC;EAC/BC,QAAQ;EACRC;AAIF,CAAC,EAAE;EACD,MAAMC,IAAI,GAAGjB,KAAK,CAACkB,IAAI,CAACC,SAAS,CAACH,KAAK,CAAC,EAAE;IACxCC,IAAI,EAAE,IAAI;IACVG,eAAe,EAAE;EACnB,CAAC,CAAC;EAEF,oBACEC,KAAA,CAAAC,aAAA;IACEC,uBAAuB,EAAE;MACvB;MACAC,MAAM,EAAE,WAAWT,QAAQ,mBAAmBE,IAAI;IACpD;EAAE,CACH,CAAC;AAEN","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"data-layer.js","names":["dataLayerPush","eventData","target","window","dataLayer","push"],"sources":["../../../../../src/utils/web/analytics/data-layer.ts"],"sourcesContent":["/**\n * Отправка аналитики в dataLayer.\n * @param eventData Данные события для отправки.\n */\nexport function dataLayerPush(eventData: Record<string, any>): void {\n const target: any = window;\n\n if (typeof target.dataLayer?.push === 'function') {\n // копируем объект так как window.dataLayer.push может менять аргумент в процессе работы\n target.dataLayer.push({ ...eventData });\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA,OAAO,SAASA,aAAaA,CAACC,SAA8B,EAAQ;EAClE,MAAMC,MAAW,GAAGC,MAAM;EAE1B,IAAI,OAAOD,MAAM,CAACE,SAAS,EAAEC,IAAI,KAAK,UAAU,EAAE;IAChD;IACAH,MAAM,CAACE,SAAS,CAACC,IAAI,CAAC;MAAE,GAAGJ;IAAU,CAAC,CAAC;EACzC;AACF"}
1
+ {"version":3,"file":"data-layer.js","names":["dataLayerPush","eventData","target","window","dataLayer","push"],"sources":["../../../../../src/utils/web/analytics/data-layer.ts"],"sourcesContent":["/**\n * Отправка аналитики в dataLayer.\n * @param eventData Данные события для отправки.\n */\nexport function dataLayerPush(eventData: Record<string, any>): void {\n const target: any = window;\n\n if (typeof target.dataLayer?.push === 'function') {\n // копируем объект так как window.dataLayer.push может менять аргумент в процессе работы\n target.dataLayer.push({ ...eventData });\n }\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA,OAAO,SAASA,aAAaA,CAACC,SAA8B,EAAQ;EAClE,MAAMC,MAAW,GAAGC,MAAM;EAE1B,IAAI,OAAOD,MAAM,CAACE,SAAS,EAAEC,IAAI,KAAK,UAAU,EAAE;IAChD;IACAH,MAAM,CAACE,SAAS,CAACC,IAAI,CAAC;MAAE,GAAGJ;IAAU,CAAC,CAAC;EACzC;AACF","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["dataLayerPush","okoPush"],"sources":["../../../../../src/utils/web/analytics/index.ts"],"sourcesContent":["export { dataLayerPush } from './data-layer';\nexport { type OkoEvent, okoPush } from './oko';\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,iBAAc;AAC5C,SAAwBC,OAAO,QAAQ,UAAO"}
1
+ {"version":3,"file":"index.js","names":["dataLayerPush","okoPush"],"sources":["../../../../../src/utils/web/analytics/index.ts"],"sourcesContent":["export { dataLayerPush } from './data-layer';\nexport { type OkoEvent, okoPush } from './oko';\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,iBAAc;AAC5C,SAAwBC,OAAO,QAAQ,UAAO","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"oko.js","names":["okoPush","eventData","target","window","oko","push"],"sources":["../../../../../src/utils/web/analytics/oko.ts"],"sourcesContent":["export type OkoEvent = Record<string, any>;\n\n/**\n * Получив объект события, запустит его отправку в ОКО (если на странице есть ОКО).\n * @param eventData Данные события для отправки.\n */\nexport function okoPush(eventData: OkoEvent): void {\n const target: any = window;\n\n if (typeof target.oko?.push === 'function') {\n // копируем объект так как window.oko.push меняет свой аргумент в процессе выполнения\n target.oko.push({ ...eventData });\n }\n}\n"],"mappings":"AAEA;AACA;AACA;AACA;AACA,OAAO,SAASA,OAAOA,CAACC,SAAmB,EAAQ;EACjD,MAAMC,MAAW,GAAGC,MAAM;EAE1B,IAAI,OAAOD,MAAM,CAACE,GAAG,EAAEC,IAAI,KAAK,UAAU,EAAE;IAC1C;IACAH,MAAM,CAACE,GAAG,CAACC,IAAI,CAAC;MAAE,GAAGJ;IAAU,CAAC,CAAC;EACnC;AACF"}
1
+ {"version":3,"file":"oko.js","names":["okoPush","eventData","target","window","oko","push"],"sources":["../../../../../src/utils/web/analytics/oko.ts"],"sourcesContent":["export type OkoEvent = Record<string, any>;\n\n/**\n * Получив объект события, запустит его отправку в ОКО (если на странице есть ОКО).\n * @param eventData Данные события для отправки.\n */\nexport function okoPush(eventData: OkoEvent): void {\n const target: any = window;\n\n if (typeof target.oko?.push === 'function') {\n // копируем объект так как window.oko.push меняет свой аргумент в процессе выполнения\n target.oko.push({ ...eventData });\n }\n}\n"],"mappings":"AAEA;AACA;AACA;AACA;AACA,OAAO,SAASA,OAAOA,CAACC,SAAmB,EAAQ;EACjD,MAAMC,MAAW,GAAGC,MAAM;EAE1B,IAAI,OAAOD,MAAM,CAACE,GAAG,EAAEC,IAAI,KAAK,UAAU,EAAE;IAC1C;IACAH,MAAM,CAACE,GAAG,CAACC,IAAI,CAAC;MAAE,GAAGJ;IAAU,CAAC,CAAC;EACnC;AACF","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["createSafeStorage","getStorage","isAvailable","testKey","Date","now","setItem","removeItem","clear","getItem","name","key","index","value","getLength","length"],"sources":["../../../../../src/utils/web/storage/index.ts"],"sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\n\n/**\n * Интерфейс объекта-обертки для безопасной работы с WebStorage.\n */\nexport interface SafeStorage extends Storage {\n isAvailable: () => boolean;\n}\n\n/**\n * Возвращает объект для безопасной работы с браузерным хранилищем (LocalStorage, SessionStorage).\n * @param getStorage Функция, которая должна вернуть целевое хранилище.\n * @return Объект-обертка для безопасной работы с браузерным хранилищем.\n */\nexport function createSafeStorage(getStorage: () => Storage): SafeStorage {\n const isAvailable = (): boolean => {\n try {\n const testKey = `storage_test_key::${Date.now()}`;\n\n getStorage().setItem(testKey, testKey);\n getStorage().removeItem(testKey);\n\n return true;\n } catch {\n return false;\n }\n };\n\n const clear = (): void => {\n if (isAvailable()) {\n getStorage().clear();\n }\n };\n\n const getItem = (name: string): string | null => {\n if (isAvailable()) {\n return getStorage().getItem(name);\n }\n\n return null;\n };\n\n const key = (index: number): string | null => {\n if (isAvailable()) {\n return getStorage().key(index);\n }\n\n return null;\n };\n\n const removeItem = (name: string): void => {\n if (isAvailable()) {\n getStorage().removeItem(name);\n }\n };\n\n const setItem = (name: string, value: string): void => {\n if (isAvailable()) {\n getStorage().setItem(name, value);\n }\n };\n\n const getLength = (): number => {\n if (isAvailable()) {\n return getStorage().length;\n }\n\n return 0;\n };\n\n return {\n isAvailable,\n\n clear,\n getItem,\n key,\n removeItem,\n setItem,\n get length() {\n return getLength();\n },\n };\n}\n"],"mappings":"AAAA;;AAEA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,iBAAiBA,CAACC,UAAyB,EAAe;EACxE,MAAMC,WAAW,GAAGA,CAAA,KAAe;IACjC,IAAI;MACF,MAAMC,OAAO,GAAI,qBAAoBC,IAAI,CAACC,GAAG,CAAC,CAAE,EAAC;MAEjDJ,UAAU,CAAC,CAAC,CAACK,OAAO,CAACH,OAAO,EAAEA,OAAO,CAAC;MACtCF,UAAU,CAAC,CAAC,CAACM,UAAU,CAACJ,OAAO,CAAC;MAEhC,OAAO,IAAI;IACb,CAAC,CAAC,MAAM;MACN,OAAO,KAAK;IACd;EACF,CAAC;EAED,MAAMK,KAAK,GAAGA,CAAA,KAAY;IACxB,IAAIN,WAAW,CAAC,CAAC,EAAE;MACjBD,UAAU,CAAC,CAAC,CAACO,KAAK,CAAC,CAAC;IACtB;EACF,CAAC;EAED,MAAMC,OAAO,GAAIC,IAAY,IAAoB;IAC/C,IAAIR,WAAW,CAAC,CAAC,EAAE;MACjB,OAAOD,UAAU,CAAC,CAAC,CAACQ,OAAO,CAACC,IAAI,CAAC;IACnC;IAEA,OAAO,IAAI;EACb,CAAC;EAED,MAAMC,GAAG,GAAIC,KAAa,IAAoB;IAC5C,IAAIV,WAAW,CAAC,CAAC,EAAE;MACjB,OAAOD,UAAU,CAAC,CAAC,CAACU,GAAG,CAACC,KAAK,CAAC;IAChC;IAEA,OAAO,IAAI;EACb,CAAC;EAED,MAAML,UAAU,GAAIG,IAAY,IAAW;IACzC,IAAIR,WAAW,CAAC,CAAC,EAAE;MACjBD,UAAU,CAAC,CAAC,CAACM,UAAU,CAACG,IAAI,CAAC;IAC/B;EACF,CAAC;EAED,MAAMJ,OAAO,GAAGA,CAACI,IAAY,EAAEG,KAAa,KAAW;IACrD,IAAIX,WAAW,CAAC,CAAC,EAAE;MACjBD,UAAU,CAAC,CAAC,CAACK,OAAO,CAACI,IAAI,EAAEG,KAAK,CAAC;IACnC;EACF,CAAC;EAED,MAAMC,SAAS,GAAGA,CAAA,KAAc;IAC9B,IAAIZ,WAAW,CAAC,CAAC,EAAE;MACjB,OAAOD,UAAU,CAAC,CAAC,CAACc,MAAM;IAC5B;IAEA,OAAO,CAAC;EACV,CAAC;EAED,OAAO;IACLb,WAAW;IAEXM,KAAK;IACLC,OAAO;IACPE,GAAG;IACHJ,UAAU;IACVD,OAAO;IACP,IAAIS,MAAMA,CAAA,EAAG;MACX,OAAOD,SAAS,CAAC,CAAC;IACpB;EACF,CAAC;AACH"}
1
+ {"version":3,"file":"index.js","names":["createSafeStorage","getStorage","isAvailable","testKey","Date","now","setItem","removeItem","clear","getItem","name","key","index","value","getLength","length"],"sources":["../../../../../src/utils/web/storage/index.ts"],"sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\n\n/**\n * Интерфейс объекта-обертки для безопасной работы с WebStorage.\n */\nexport interface SafeStorage extends Storage {\n isAvailable: () => boolean;\n}\n\n/**\n * Возвращает объект для безопасной работы с браузерным хранилищем (LocalStorage, SessionStorage).\n * @param getStorage Функция, которая должна вернуть целевое хранилище.\n * @return Объект-обертка для безопасной работы с браузерным хранилищем.\n */\nexport function createSafeStorage(getStorage: () => Storage): SafeStorage {\n const isAvailable = (): boolean => {\n try {\n const testKey = `storage_test_key::${Date.now()}`;\n\n getStorage().setItem(testKey, testKey);\n getStorage().removeItem(testKey);\n\n return true;\n } catch {\n return false;\n }\n };\n\n const clear = (): void => {\n if (isAvailable()) {\n getStorage().clear();\n }\n };\n\n const getItem = (name: string): string | null => {\n if (isAvailable()) {\n return getStorage().getItem(name);\n }\n\n return null;\n };\n\n const key = (index: number): string | null => {\n if (isAvailable()) {\n return getStorage().key(index);\n }\n\n return null;\n };\n\n const removeItem = (name: string): void => {\n if (isAvailable()) {\n getStorage().removeItem(name);\n }\n };\n\n const setItem = (name: string, value: string): void => {\n if (isAvailable()) {\n getStorage().setItem(name, value);\n }\n };\n\n const getLength = (): number => {\n if (isAvailable()) {\n return getStorage().length;\n }\n\n return 0;\n };\n\n return {\n isAvailable,\n\n clear,\n getItem,\n key,\n removeItem,\n setItem,\n get length() {\n return getLength();\n },\n };\n}\n"],"mappings":"AAAA;;AAEA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,iBAAiBA,CAACC,UAAyB,EAAe;EACxE,MAAMC,WAAW,GAAGA,CAAA,KAAe;IACjC,IAAI;MACF,MAAMC,OAAO,GAAG,qBAAqBC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAE;MAEjDJ,UAAU,CAAC,CAAC,CAACK,OAAO,CAACH,OAAO,EAAEA,OAAO,CAAC;MACtCF,UAAU,CAAC,CAAC,CAACM,UAAU,CAACJ,OAAO,CAAC;MAEhC,OAAO,IAAI;IACb,CAAC,CAAC,MAAM;MACN,OAAO,KAAK;IACd;EACF,CAAC;EAED,MAAMK,KAAK,GAAGA,CAAA,KAAY;IACxB,IAAIN,WAAW,CAAC,CAAC,EAAE;MACjBD,UAAU,CAAC,CAAC,CAACO,KAAK,CAAC,CAAC;IACtB;EACF,CAAC;EAED,MAAMC,OAAO,GAAIC,IAAY,IAAoB;IAC/C,IAAIR,WAAW,CAAC,CAAC,EAAE;MACjB,OAAOD,UAAU,CAAC,CAAC,CAACQ,OAAO,CAACC,IAAI,CAAC;IACnC;IAEA,OAAO,IAAI;EACb,CAAC;EAED,MAAMC,GAAG,GAAIC,KAAa,IAAoB;IAC5C,IAAIV,WAAW,CAAC,CAAC,EAAE;MACjB,OAAOD,UAAU,CAAC,CAAC,CAACU,GAAG,CAACC,KAAK,CAAC;IAChC;IAEA,OAAO,IAAI;EACb,CAAC;EAED,MAAML,UAAU,GAAIG,IAAY,IAAW;IACzC,IAAIR,WAAW,CAAC,CAAC,EAAE;MACjBD,UAAU,CAAC,CAAC,CAACM,UAAU,CAACG,IAAI,CAAC;IAC/B;EACF,CAAC;EAED,MAAMJ,OAAO,GAAGA,CAACI,IAAY,EAAEG,KAAa,KAAW;IACrD,IAAIX,WAAW,CAAC,CAAC,EAAE;MACjBD,UAAU,CAAC,CAAC,CAACK,OAAO,CAACI,IAAI,EAAEG,KAAK,CAAC;IACnC;EACF,CAAC;EAED,MAAMC,SAAS,GAAGA,CAAA,KAAc;IAC9B,IAAIZ,WAAW,CAAC,CAAC,EAAE;MACjB,OAAOD,UAAU,CAAC,CAAC,CAACc,MAAM;IAC5B;IAEA,OAAO,CAAC;EACV,CAAC;EAED,OAAO;IACLb,WAAW;IAEXM,KAAK;IACLC,OAAO;IACPE,GAAG;IACHJ,UAAU;IACVD,OAAO;IACP,IAAIS,MAAMA,CAAA,EAAG;MACX,OAAOD,SAAS,CAAC,CAAC;IACpB;EACF,CAAC;AACH","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["defineEnv","asEnvVariables","EnvPlugin","constructor","options","target","dotenvUsage","additional","define","apply","compiler","webpack","env","onError","error","hooks","compilation","tap","warnings","push","WebpackError","String","values","undefined","targetKeys","name","Object","keys","includes","startsWith","DefinePlugin","__ISOMORPH_ENV__","JSON","stringify"],"sources":["../../../../../src/utils/webpack/env/index.ts"],"sourcesContent":["import { defineEnv, asEnvVariables } from './utils';\nimport type { Compiler, WebpackPluginInstance } from 'webpack';\nimport type { EnvPluginOptions } from './types';\n\n/**\n * Плагин для зашивания переменных среды в сборки.\n * В браузерную сборку зашьёт только переменные с префиксом \"PUBLIC_\".\n * ВАЖНО: все зашиваемые переменные будут доступны через глобальный объект __ISOMORPH_ENV__.\n * @deprecated\n */\nexport class EnvPlugin implements WebpackPluginInstance {\n options: Required<EnvPluginOptions>;\n\n /**\n * @param options Опции.\n */\n constructor(options: EnvPluginOptions = {}) {\n this.options = {\n target: options.target ?? 'auto',\n dotenvUsage: options.dotenvUsage ?? true,\n additional: options.additional ?? [],\n define: options.define ?? {},\n };\n }\n\n /**\n * @param compiler Компилятор.\n */\n apply(compiler: Compiler) {\n const { webpack } = compiler;\n\n const env = defineEnv({\n dotenvUsage: this.options.dotenvUsage,\n onError: error => {\n compiler.hooks.compilation.tap('EnvPlugin', compilation => {\n compilation.warnings.push(new webpack.WebpackError(`[EnvPlugin] ${String(error)}`));\n });\n },\n });\n\n let values: Record<string, string | undefined> | null = null;\n let target: string | undefined;\n\n // define target\n if (this.options.target === 'auto') {\n target = typeof compiler.options.target === 'string' ? compiler.options.target : undefined;\n } else {\n target = this.options.target;\n }\n\n // define values based on target\n switch (target) {\n case 'web': {\n const targetKeys = [...this.options.additional, 'NODE_ENV'];\n\n values = { ...this.options.define };\n\n for (const name of Object.keys(env)) {\n if (targetKeys.includes(name) || name.startsWith('PUBLIC_')) {\n values[name] = env[name];\n }\n }\n break;\n }\n case 'node': {\n const targetKeys = [...this.options.additional, 'NODE_ENV'];\n\n values = { ...this.options.define };\n\n for (const name of Object.keys(env)) {\n if (targetKeys.includes(name) || name.startsWith('PUBLIC_')) {\n values[name] = env[name];\n }\n }\n break;\n }\n default: {\n compiler.hooks.compilation.tap('EnvPlugin', compilation => {\n compilation.warnings.push(\n new webpack.WebpackError('[EnvPlugin] Target is unknown, variables will NOT be added'),\n );\n });\n break;\n }\n }\n\n if (values) {\n new webpack.DefinePlugin({ __ISOMORPH_ENV__: JSON.stringify(values) }).apply(compiler);\n new webpack.DefinePlugin(asEnvVariables(values)).apply(compiler);\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["defineEnv","asEnvVariables","EnvPlugin","constructor","options","target","dotenvUsage","additional","define","apply","compiler","webpack","env","onError","error","hooks","compilation","tap","warnings","push","WebpackError","String","values","undefined","targetKeys","name","Object","keys","includes","startsWith","DefinePlugin","__ISOMORPH_ENV__","JSON","stringify"],"sources":["../../../../../src/utils/webpack/env/index.ts"],"sourcesContent":["import { defineEnv, asEnvVariables } from './utils';\nimport type { Compiler, WebpackPluginInstance } from 'webpack';\nimport type { EnvPluginOptions } from './types';\n\n/**\n * Плагин для зашивания переменных среды в сборки.\n * В браузерную сборку зашьёт только переменные с префиксом \"PUBLIC_\".\n * ВАЖНО: все зашиваемые переменные будут доступны через глобальный объект __ISOMORPH_ENV__.\n * @deprecated\n */\nexport class EnvPlugin implements WebpackPluginInstance {\n options: Required<EnvPluginOptions>;\n\n /**\n * @param options Опции.\n */\n constructor(options: EnvPluginOptions = {}) {\n this.options = {\n target: options.target ?? 'auto',\n dotenvUsage: options.dotenvUsage ?? true,\n additional: options.additional ?? [],\n define: options.define ?? {},\n };\n }\n\n /**\n * @param compiler Компилятор.\n */\n apply(compiler: Compiler) {\n const { webpack } = compiler;\n\n const env = defineEnv({\n dotenvUsage: this.options.dotenvUsage,\n onError: error => {\n compiler.hooks.compilation.tap('EnvPlugin', compilation => {\n compilation.warnings.push(new webpack.WebpackError(`[EnvPlugin] ${String(error)}`));\n });\n },\n });\n\n let values: Record<string, string | undefined> | null = null;\n let target: string | undefined;\n\n // define target\n if (this.options.target === 'auto') {\n target = typeof compiler.options.target === 'string' ? compiler.options.target : undefined;\n } else {\n target = this.options.target;\n }\n\n // define values based on target\n switch (target) {\n case 'web': {\n const targetKeys = [...this.options.additional, 'NODE_ENV'];\n\n values = { ...this.options.define };\n\n for (const name of Object.keys(env)) {\n if (targetKeys.includes(name) || name.startsWith('PUBLIC_')) {\n values[name] = env[name];\n }\n }\n break;\n }\n case 'node': {\n const targetKeys = [...this.options.additional, 'NODE_ENV'];\n\n values = { ...this.options.define };\n\n for (const name of Object.keys(env)) {\n if (targetKeys.includes(name) || name.startsWith('PUBLIC_')) {\n values[name] = env[name];\n }\n }\n break;\n }\n default: {\n compiler.hooks.compilation.tap('EnvPlugin', compilation => {\n compilation.warnings.push(\n new webpack.WebpackError('[EnvPlugin] Target is unknown, variables will NOT be added'),\n );\n });\n break;\n }\n }\n\n if (values) {\n new webpack.DefinePlugin({ __ISOMORPH_ENV__: JSON.stringify(values) }).apply(compiler);\n new webpack.DefinePlugin(asEnvVariables(values)).apply(compiler);\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../../../src/utils/webpack/env/types.ts"],"sourcesContent":["/** Опции EnvPlugin. */\nexport interface EnvPluginOptions {\n /** Целевая среда. */\n target?: 'auto' | 'web' | 'node';\n\n /** Нужно ли использоваь .env файлы. */\n dotenvUsage?: boolean;\n\n /** Переменные, зашиваемые из среды запуска. */\n additional?: string[];\n\n /** Переменные определяемые на месте. */\n define?: Record<string, string>;\n}\n"],"mappings":""}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../../../src/utils/webpack/env/types.ts"],"sourcesContent":["/** Опции EnvPlugin. */\nexport interface EnvPluginOptions {\n /** Целевая среда. */\n target?: 'auto' | 'web' | 'node';\n\n /** Нужно ли использоваь .env файлы. */\n dotenvUsage?: boolean;\n\n /** Переменные, зашиваемые из среды запуска. */\n additional?: string[];\n\n /** Переменные определяемые на месте. */\n define?: Record<string, string>;\n}\n"],"mappings":"","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":["fs","path","dotenv","defineEnv","options","result","process","env","dotenvUsage","NODE_ENV","dotenvPath","join","cwd","existsSync","parsed","parse","readFileSync","key","Object","keys","prototype","hasOwnProperty","call","error","onError","asEnvVariables","input","value","entries","JSON","stringify"],"sources":["../../../../../src/utils/webpack/env/utils.ts"],"sourcesContent":["import { EnvPluginOptions } from './types';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport dotenv from 'dotenv';\n\n/**\n * Формирует объект с переменными среды с учетом .env файлов.\n * @param options Опции.\n * @return Объект с переменными среды.\n */\nexport function defineEnv(\n options: Pick<EnvPluginOptions, 'dotenvUsage'> & { onError?: (error: unknown) => void },\n): Record<string, string | undefined> {\n const result = { ...process.env };\n\n if (options.dotenvUsage && process.env.NODE_ENV) {\n try {\n const dotenvPath = path.join(process.cwd(), `.env.${process.env.NODE_ENV}`);\n\n if (fs.existsSync(dotenvPath)) {\n const parsed = dotenv.parse(fs.readFileSync(dotenvPath, 'utf-8'));\n\n // @todo дёрнуть бы эту логику из пакета dotenv, https://github.com/motdotla/dotenv/issues/690\n for (const key of Object.keys(parsed)) {\n if (!Object.prototype.hasOwnProperty.call(result, key)) {\n result[key] = parsed[key];\n }\n }\n }\n } catch (error) {\n options.onError?.(error);\n }\n }\n\n return result;\n}\n\n/**\n * Получив таблицу \"название переменной среды >> значение переменной среды\" вернёт определение для DefinePlugin.\n * @param input Таблица переменных.\n * @return Определение для DefinePlugin.\n */\nexport function asEnvVariables(input: Record<string, string | undefined>): Record<string, string> {\n const result: Record<string, string> = {};\n\n for (const [key, value] of Object.entries(input)) {\n if (key && typeof value === 'string') {\n result[`process.env.${key}`] = JSON.stringify(value);\n }\n }\n\n return result;\n}\n"],"mappings":"AACA,OAAOA,EAAE,MAAM,SAAS;AACxB,OAAOC,IAAI,MAAM,WAAW;AAC5B,OAAOC,MAAM,MAAM,QAAQ;;AAE3B;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,SAASA,CACvBC,OAAuF,EACnD;EACpC,MAAMC,MAAM,GAAG;IAAE,GAAGC,OAAO,CAACC;EAAI,CAAC;EAEjC,IAAIH,OAAO,CAACI,WAAW,IAAIF,OAAO,CAACC,GAAG,CAACE,QAAQ,EAAE;IAC/C,IAAI;MACF,MAAMC,UAAU,GAAGT,IAAI,CAACU,IAAI,CAACL,OAAO,CAACM,GAAG,CAAC,CAAC,EAAG,QAAON,OAAO,CAACC,GAAG,CAACE,QAAS,EAAC,CAAC;MAE3E,IAAIT,EAAE,CAACa,UAAU,CAACH,UAAU,CAAC,EAAE;QAC7B,MAAMI,MAAM,GAAGZ,MAAM,CAACa,KAAK,CAACf,EAAE,CAACgB,YAAY,CAACN,UAAU,EAAE,OAAO,CAAC,CAAC;;QAEjE;QACA,KAAK,MAAMO,GAAG,IAAIC,MAAM,CAACC,IAAI,CAACL,MAAM,CAAC,EAAE;UACrC,IAAI,CAACI,MAAM,CAACE,SAAS,CAACC,cAAc,CAACC,IAAI,CAACjB,MAAM,EAAEY,GAAG,CAAC,EAAE;YACtDZ,MAAM,CAACY,GAAG,CAAC,GAAGH,MAAM,CAACG,GAAG,CAAC;UAC3B;QACF;MACF;IACF,CAAC,CAAC,OAAOM,KAAK,EAAE;MACdnB,OAAO,CAACoB,OAAO,GAAGD,KAAK,CAAC;IAC1B;EACF;EAEA,OAAOlB,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASoB,cAAcA,CAACC,KAAyC,EAA0B;EAChG,MAAMrB,MAA8B,GAAG,CAAC,CAAC;EAEzC,KAAK,MAAM,CAACY,GAAG,EAAEU,KAAK,CAAC,IAAIT,MAAM,CAACU,OAAO,CAACF,KAAK,CAAC,EAAE;IAChD,IAAIT,GAAG,IAAI,OAAOU,KAAK,KAAK,QAAQ,EAAE;MACpCtB,MAAM,CAAE,eAAcY,GAAI,EAAC,CAAC,GAAGY,IAAI,CAACC,SAAS,CAACH,KAAK,CAAC;IACtD;EACF;EAEA,OAAOtB,MAAM;AACf"}
1
+ {"version":3,"file":"utils.js","names":["fs","path","dotenv","defineEnv","options","result","process","env","dotenvUsage","NODE_ENV","dotenvPath","join","cwd","existsSync","parsed","parse","readFileSync","key","Object","keys","prototype","hasOwnProperty","call","error","onError","asEnvVariables","input","value","entries","JSON","stringify"],"sources":["../../../../../src/utils/webpack/env/utils.ts"],"sourcesContent":["import { EnvPluginOptions } from './types';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport dotenv from 'dotenv';\n\n/**\n * Формирует объект с переменными среды с учетом .env файлов.\n * @param options Опции.\n * @return Объект с переменными среды.\n */\nexport function defineEnv(\n options: Pick<EnvPluginOptions, 'dotenvUsage'> & { onError?: (error: unknown) => void },\n): Record<string, string | undefined> {\n const result = { ...process.env };\n\n if (options.dotenvUsage && process.env.NODE_ENV) {\n try {\n const dotenvPath = path.join(process.cwd(), `.env.${process.env.NODE_ENV}`);\n\n if (fs.existsSync(dotenvPath)) {\n const parsed = dotenv.parse(fs.readFileSync(dotenvPath, 'utf-8'));\n\n // @todo дёрнуть бы эту логику из пакета dotenv, https://github.com/motdotla/dotenv/issues/690\n for (const key of Object.keys(parsed)) {\n if (!Object.prototype.hasOwnProperty.call(result, key)) {\n result[key] = parsed[key];\n }\n }\n }\n } catch (error) {\n options.onError?.(error);\n }\n }\n\n return result;\n}\n\n/**\n * Получив таблицу \"название переменной среды >> значение переменной среды\" вернёт определение для DefinePlugin.\n * @param input Таблица переменных.\n * @return Определение для DefinePlugin.\n */\nexport function asEnvVariables(input: Record<string, string | undefined>): Record<string, string> {\n const result: Record<string, string> = {};\n\n for (const [key, value] of Object.entries(input)) {\n if (key && typeof value === 'string') {\n result[`process.env.${key}`] = JSON.stringify(value);\n }\n }\n\n return result;\n}\n"],"mappings":"AACA,OAAOA,EAAE,MAAM,SAAS;AACxB,OAAOC,IAAI,MAAM,WAAW;AAC5B,OAAOC,MAAM,MAAM,QAAQ;;AAE3B;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,SAASA,CACvBC,OAAuF,EACnD;EACpC,MAAMC,MAAM,GAAG;IAAE,GAAGC,OAAO,CAACC;EAAI,CAAC;EAEjC,IAAIH,OAAO,CAACI,WAAW,IAAIF,OAAO,CAACC,GAAG,CAACE,QAAQ,EAAE;IAC/C,IAAI;MACF,MAAMC,UAAU,GAAGT,IAAI,CAACU,IAAI,CAACL,OAAO,CAACM,GAAG,CAAC,CAAC,EAAE,QAAQN,OAAO,CAACC,GAAG,CAACE,QAAQ,EAAE,CAAC;MAE3E,IAAIT,EAAE,CAACa,UAAU,CAACH,UAAU,CAAC,EAAE;QAC7B,MAAMI,MAAM,GAAGZ,MAAM,CAACa,KAAK,CAACf,EAAE,CAACgB,YAAY,CAACN,UAAU,EAAE,OAAO,CAAC,CAAC;;QAEjE;QACA,KAAK,MAAMO,GAAG,IAAIC,MAAM,CAACC,IAAI,CAACL,MAAM,CAAC,EAAE;UACrC,IAAI,CAACI,MAAM,CAACE,SAAS,CAACC,cAAc,CAACC,IAAI,CAACjB,MAAM,EAAEY,GAAG,CAAC,EAAE;YACtDZ,MAAM,CAACY,GAAG,CAAC,GAAGH,MAAM,CAACG,GAAG,CAAC;UAC3B;QACF;MACF;IACF,CAAC,CAAC,OAAOM,KAAK,EAAE;MACdnB,OAAO,CAACoB,OAAO,GAAGD,KAAK,CAAC;IAC1B;EACF;EAEA,OAAOlB,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASoB,cAAcA,CAACC,KAAyC,EAA0B;EAChG,MAAMrB,MAA8B,GAAG,CAAC,CAAC;EAEzC,KAAK,MAAM,CAACY,GAAG,EAAEU,KAAK,CAAC,IAAIT,MAAM,CAACU,OAAO,CAACF,KAAK,CAAC,EAAE;IAChD,IAAIT,GAAG,IAAI,OAAOU,KAAK,KAAK,QAAQ,EAAE;MACpCtB,MAAM,CAAC,eAAeY,GAAG,EAAE,CAAC,GAAGY,IAAI,CAACC,SAAS,CAACH,KAAK,CAAC;IACtD;EACF;EAEA,OAAOtB,MAAM;AACf","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["EnvPlugin","ModuleFederationPlugin","DEFAULT_SHARED"],"sources":["../../../../src/utils/webpack/index.ts"],"sourcesContent":["export type { EnvPluginOptions } from './env/types';\nexport type { ModuleFederationPluginOptions } from './module-federation/types';\nexport { EnvPlugin } from './env';\nexport { ModuleFederationPlugin, DEFAULT_SHARED } from './module-federation';\n"],"mappings":"AAEA,SAASA,SAAS,QAAQ,gBAAO;AACjC,SAASC,sBAAsB,EAAEC,cAAc,QAAQ,8BAAqB"}
1
+ {"version":3,"file":"index.js","names":["EnvPlugin","ModuleFederationPlugin","DEFAULT_SHARED"],"sources":["../../../../src/utils/webpack/index.ts"],"sourcesContent":["export type { EnvPluginOptions } from './env/types';\nexport type { ModuleFederationPluginOptions } from './module-federation/types';\nexport { EnvPlugin } from './env';\nexport { ModuleFederationPlugin, DEFAULT_SHARED } from './module-federation';\n"],"mappings":"AAEA,SAASA,SAAS,QAAQ,gBAAO;AACjC,SAASC,sBAAsB,EAAEC,cAAc,QAAQ,8BAAqB","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["webpack","createExternalConfig","DEFAULT_SHARED","container","WebpackError","LIBRARY_ERROR_TEXT","join","REMOTE_ERROR_TEXT","CustomModuleFederationPlugin","constructor","options","name","remotes","remoteEntriesGlobalKey","containersGlobalKey","value","Object","values","readyOptions","library","type","apply","compiler","shared","restOptions","configuredShared","configuredRemotes","key","entries","serviceName","remoteEntryPath","undefined","external","hooks","environment","tap","ModuleFederationPlugin"],"sources":["../../../../../src/utils/webpack/module-federation/index.ts"],"sourcesContent":["import type { ModuleFederationPluginOptions, ReadyOptions } from './types';\nimport * as webpack from 'webpack';\nimport { createExternalConfig, DEFAULT_SHARED } from './utils';\n\nconst { container, WebpackError } = webpack;\n\n/** @internal */\nexport const LIBRARY_ERROR_TEXT = [\n 'Property \"library\" set internally as \"global\" and not overridden.',\n 'For override global variable name use \"containersGlobalKey\" property.',\n 'For override \"library\" type use ModuleFederationPlugin.',\n].join(' ');\n\n/** @internal */\nexport const REMOTE_ERROR_TEXT = [\n 'The value of the remote element must be a string,',\n 'or an object with field \"name\" for dynamic resolution of \"remoteEntry\".',\n 'Set \"remoteEntryPath\" field to object for a static path to \"remoteEntry\".',\n].join(' ');\n\n/**\n * Создает плагин ModuleFederation с опциями, необходимыми для оркестрации удаленных модулей в браузере.\n */\nclass CustomModuleFederationPlugin {\n /**\n * Проверенные, готовые опции.\n */\n readonly readyOptions: ReadyOptions;\n\n /**\n * @param options Опции.\n * @param options.shared Общие модули. Если не переданы, используются дефолтные модули.\n * Для отключения общих модулей задать false.\n */\n constructor(options: ModuleFederationPluginOptions) {\n const {\n name,\n remotes,\n remoteEntriesGlobalKey = '__RemoteEntriesList__',\n containersGlobalKey = '__FederationContainers__',\n } = options;\n\n if ('library' in options) {\n throw new WebpackError(LIBRARY_ERROR_TEXT);\n }\n\n if (remotes) {\n for (const value of Object.values(remotes)) {\n if (typeof value !== 'string' && !value.name) {\n throw new WebpackError(REMOTE_ERROR_TEXT);\n }\n }\n }\n\n this.readyOptions = {\n ...options,\n remoteEntriesGlobalKey,\n containersGlobalKey,\n library: {\n type: 'global',\n name: [containersGlobalKey, name],\n },\n };\n }\n\n /**\n * @param compiler Компилятор.\n */\n apply(compiler: webpack.Compiler) {\n const { remotes, remoteEntriesGlobalKey, containersGlobalKey, shared, ...restOptions } =\n this.readyOptions;\n\n const configuredShared = shared || DEFAULT_SHARED;\n const configuredRemotes: Record<string, any> = {};\n\n if (remotes) {\n for (const [key, value] of Object.entries(remotes)) {\n const serviceName = typeof value === 'string' ? value : value.name;\n const remoteEntryPath = typeof value === 'string' ? undefined : value.remoteEntryPath;\n\n configuredRemotes[key] = {\n external: createExternalConfig({\n serviceName,\n remoteEntryPath,\n remoteEntriesGlobalKey,\n containersGlobalKey,\n }),\n };\n }\n }\n\n compiler.hooks.environment.tap('[isomorph]ModuleFederationPlugin', () => {\n new container.ModuleFederationPlugin({\n ...(remotes && { remotes: configuredRemotes }),\n ...(shared !== false && { shared: configuredShared }),\n ...restOptions,\n }).apply(compiler);\n });\n }\n}\n\nexport { CustomModuleFederationPlugin as ModuleFederationPlugin, DEFAULT_SHARED };\n"],"mappings":"AACA,OAAO,KAAKA,OAAO,MAAM,SAAS;AAClC,SAASC,oBAAoB,EAAEC,cAAc,QAAQ,YAAS;AAE9D,MAAM;EAAEC,SAAS;EAAEC;AAAa,CAAC,GAAGJ,OAAO;;AAE3C;AACA,OAAO,MAAMK,kBAAkB,GAAG,CAChC,mEAAmE,EACnE,uEAAuE,EACvE,yDAAyD,CAC1D,CAACC,IAAI,CAAC,GAAG,CAAC;;AAEX;AACA,OAAO,MAAMC,iBAAiB,GAAG,CAC/B,mDAAmD,EACnD,yEAAyE,EACzE,2EAA2E,CAC5E,CAACD,IAAI,CAAC,GAAG,CAAC;;AAEX;AACA;AACA;AACA,MAAME,4BAA4B,CAAC;EACjC;AACF;AACA;;EAGE;AACF;AACA;AACA;AACA;EACEC,WAAWA,CAACC,OAAsC,EAAE;IAClD,MAAM;MACJC,IAAI;MACJC,OAAO;MACPC,sBAAsB,GAAG,uBAAuB;MAChDC,mBAAmB,GAAG;IACxB,CAAC,GAAGJ,OAAO;IAEX,IAAI,SAAS,IAAIA,OAAO,EAAE;MACxB,MAAM,IAAIN,YAAY,CAACC,kBAAkB,CAAC;IAC5C;IAEA,IAAIO,OAAO,EAAE;MACX,KAAK,MAAMG,KAAK,IAAIC,MAAM,CAACC,MAAM,CAACL,OAAO,CAAC,EAAE;QAC1C,IAAI,OAAOG,KAAK,KAAK,QAAQ,IAAI,CAACA,KAAK,CAACJ,IAAI,EAAE;UAC5C,MAAM,IAAIP,YAAY,CAACG,iBAAiB,CAAC;QAC3C;MACF;IACF;IAEA,IAAI,CAACW,YAAY,GAAG;MAClB,GAAGR,OAAO;MACVG,sBAAsB;MACtBC,mBAAmB;MACnBK,OAAO,EAAE;QACPC,IAAI,EAAE,QAAQ;QACdT,IAAI,EAAE,CAACG,mBAAmB,EAAEH,IAAI;MAClC;IACF,CAAC;EACH;;EAEA;AACF;AACA;EACEU,KAAKA,CAACC,QAA0B,EAAE;IAChC,MAAM;MAAEV,OAAO;MAAEC,sBAAsB;MAAEC,mBAAmB;MAAES,MAAM;MAAE,GAAGC;IAAY,CAAC,GACpF,IAAI,CAACN,YAAY;IAEnB,MAAMO,gBAAgB,GAAGF,MAAM,IAAIrB,cAAc;IACjD,MAAMwB,iBAAsC,GAAG,CAAC,CAAC;IAEjD,IAAId,OAAO,EAAE;MACX,KAAK,MAAM,CAACe,GAAG,EAAEZ,KAAK,CAAC,IAAIC,MAAM,CAACY,OAAO,CAAChB,OAAO,CAAC,EAAE;QAClD,MAAMiB,WAAW,GAAG,OAAOd,KAAK,KAAK,QAAQ,GAAGA,KAAK,GAAGA,KAAK,CAACJ,IAAI;QAClE,MAAMmB,eAAe,GAAG,OAAOf,KAAK,KAAK,QAAQ,GAAGgB,SAAS,GAAGhB,KAAK,CAACe,eAAe;QAErFJ,iBAAiB,CAACC,GAAG,CAAC,GAAG;UACvBK,QAAQ,EAAE/B,oBAAoB,CAAC;YAC7B4B,WAAW;YACXC,eAAe;YACfjB,sBAAsB;YACtBC;UACF,CAAC;QACH,CAAC;MACH;IACF;IAEAQ,QAAQ,CAACW,KAAK,CAACC,WAAW,CAACC,GAAG,CAAC,kCAAkC,EAAE,MAAM;MACvE,IAAIhC,SAAS,CAACiC,sBAAsB,CAAC;QACnC,IAAIxB,OAAO,IAAI;UAAEA,OAAO,EAAEc;QAAkB,CAAC,CAAC;QAC9C,IAAIH,MAAM,KAAK,KAAK,IAAI;UAAEA,MAAM,EAAEE;QAAiB,CAAC,CAAC;QACrD,GAAGD;MACL,CAAC,CAAC,CAACH,KAAK,CAACC,QAAQ,CAAC;IACpB,CAAC,CAAC;EACJ;AACF;AAEA,SAASd,4BAA4B,IAAI4B,sBAAsB,EAAElC,cAAc"}
1
+ {"version":3,"file":"index.js","names":["webpack","createExternalConfig","DEFAULT_SHARED","container","WebpackError","LIBRARY_ERROR_TEXT","join","REMOTE_ERROR_TEXT","CustomModuleFederationPlugin","constructor","options","name","remotes","remoteEntriesGlobalKey","containersGlobalKey","value","Object","values","readyOptions","library","type","apply","compiler","shared","restOptions","configuredShared","configuredRemotes","key","entries","serviceName","remoteEntryPath","undefined","external","hooks","environment","tap","ModuleFederationPlugin"],"sources":["../../../../../src/utils/webpack/module-federation/index.ts"],"sourcesContent":["import type { ModuleFederationPluginOptions, ReadyOptions } from './types';\nimport * as webpack from 'webpack';\nimport { createExternalConfig, DEFAULT_SHARED } from './utils';\n\nconst { container, WebpackError } = webpack;\n\n/** @internal */\nexport const LIBRARY_ERROR_TEXT = [\n 'Property \"library\" set internally as \"global\" and not overridden.',\n 'For override global variable name use \"containersGlobalKey\" property.',\n 'For override \"library\" type use ModuleFederationPlugin.',\n].join(' ');\n\n/** @internal */\nexport const REMOTE_ERROR_TEXT = [\n 'The value of the remote element must be a string,',\n 'or an object with field \"name\" for dynamic resolution of \"remoteEntry\".',\n 'Set \"remoteEntryPath\" field to object for a static path to \"remoteEntry\".',\n].join(' ');\n\n/**\n * Создает плагин ModuleFederation с опциями, необходимыми для оркестрации удаленных модулей в браузере.\n */\nclass CustomModuleFederationPlugin {\n /**\n * Проверенные, готовые опции.\n */\n readonly readyOptions: ReadyOptions;\n\n /**\n * @param options Опции.\n * @param options.shared Общие модули. Если не переданы, используются дефолтные модули.\n * Для отключения общих модулей задать false.\n */\n constructor(options: ModuleFederationPluginOptions) {\n const {\n name,\n remotes,\n remoteEntriesGlobalKey = '__RemoteEntriesList__',\n containersGlobalKey = '__FederationContainers__',\n } = options;\n\n if ('library' in options) {\n throw new WebpackError(LIBRARY_ERROR_TEXT);\n }\n\n if (remotes) {\n for (const value of Object.values(remotes)) {\n if (typeof value !== 'string' && !value.name) {\n throw new WebpackError(REMOTE_ERROR_TEXT);\n }\n }\n }\n\n this.readyOptions = {\n ...options,\n remoteEntriesGlobalKey,\n containersGlobalKey,\n library: {\n type: 'global',\n name: [containersGlobalKey, name],\n },\n };\n }\n\n /**\n * @param compiler Компилятор.\n */\n apply(compiler: webpack.Compiler) {\n const { remotes, remoteEntriesGlobalKey, containersGlobalKey, shared, ...restOptions } =\n this.readyOptions;\n\n const configuredShared = shared || DEFAULT_SHARED;\n const configuredRemotes: Record<string, any> = {};\n\n if (remotes) {\n for (const [key, value] of Object.entries(remotes)) {\n const serviceName = typeof value === 'string' ? value : value.name;\n const remoteEntryPath = typeof value === 'string' ? undefined : value.remoteEntryPath;\n\n configuredRemotes[key] = {\n external: createExternalConfig({\n serviceName,\n remoteEntryPath,\n remoteEntriesGlobalKey,\n containersGlobalKey,\n }),\n };\n }\n }\n\n compiler.hooks.environment.tap('[isomorph]ModuleFederationPlugin', () => {\n new container.ModuleFederationPlugin({\n ...(remotes && { remotes: configuredRemotes }),\n ...(shared !== false && { shared: configuredShared }),\n ...restOptions,\n }).apply(compiler);\n });\n }\n}\n\nexport { CustomModuleFederationPlugin as ModuleFederationPlugin, DEFAULT_SHARED };\n"],"mappings":"AACA,OAAO,KAAKA,OAAO,MAAM,SAAS;AAClC,SAASC,oBAAoB,EAAEC,cAAc,QAAQ,YAAS;AAE9D,MAAM;EAAEC,SAAS;EAAEC;AAAa,CAAC,GAAGJ,OAAO;;AAE3C;AACA,OAAO,MAAMK,kBAAkB,GAAG,CAChC,mEAAmE,EACnE,uEAAuE,EACvE,yDAAyD,CAC1D,CAACC,IAAI,CAAC,GAAG,CAAC;;AAEX;AACA,OAAO,MAAMC,iBAAiB,GAAG,CAC/B,mDAAmD,EACnD,yEAAyE,EACzE,2EAA2E,CAC5E,CAACD,IAAI,CAAC,GAAG,CAAC;;AAEX;AACA;AACA;AACA,MAAME,4BAA4B,CAAC;EACjC;AACF;AACA;;EAGE;AACF;AACA;AACA;AACA;EACEC,WAAWA,CAACC,OAAsC,EAAE;IAClD,MAAM;MACJC,IAAI;MACJC,OAAO;MACPC,sBAAsB,GAAG,uBAAuB;MAChDC,mBAAmB,GAAG;IACxB,CAAC,GAAGJ,OAAO;IAEX,IAAI,SAAS,IAAIA,OAAO,EAAE;MACxB,MAAM,IAAIN,YAAY,CAACC,kBAAkB,CAAC;IAC5C;IAEA,IAAIO,OAAO,EAAE;MACX,KAAK,MAAMG,KAAK,IAAIC,MAAM,CAACC,MAAM,CAACL,OAAO,CAAC,EAAE;QAC1C,IAAI,OAAOG,KAAK,KAAK,QAAQ,IAAI,CAACA,KAAK,CAACJ,IAAI,EAAE;UAC5C,MAAM,IAAIP,YAAY,CAACG,iBAAiB,CAAC;QAC3C;MACF;IACF;IAEA,IAAI,CAACW,YAAY,GAAG;MAClB,GAAGR,OAAO;MACVG,sBAAsB;MACtBC,mBAAmB;MACnBK,OAAO,EAAE;QACPC,IAAI,EAAE,QAAQ;QACdT,IAAI,EAAE,CAACG,mBAAmB,EAAEH,IAAI;MAClC;IACF,CAAC;EACH;;EAEA;AACF;AACA;EACEU,KAAKA,CAACC,QAA0B,EAAE;IAChC,MAAM;MAAEV,OAAO;MAAEC,sBAAsB;MAAEC,mBAAmB;MAAES,MAAM;MAAE,GAAGC;IAAY,CAAC,GACpF,IAAI,CAACN,YAAY;IAEnB,MAAMO,gBAAgB,GAAGF,MAAM,IAAIrB,cAAc;IACjD,MAAMwB,iBAAsC,GAAG,CAAC,CAAC;IAEjD,IAAId,OAAO,EAAE;MACX,KAAK,MAAM,CAACe,GAAG,EAAEZ,KAAK,CAAC,IAAIC,MAAM,CAACY,OAAO,CAAChB,OAAO,CAAC,EAAE;QAClD,MAAMiB,WAAW,GAAG,OAAOd,KAAK,KAAK,QAAQ,GAAGA,KAAK,GAAGA,KAAK,CAACJ,IAAI;QAClE,MAAMmB,eAAe,GAAG,OAAOf,KAAK,KAAK,QAAQ,GAAGgB,SAAS,GAAGhB,KAAK,CAACe,eAAe;QAErFJ,iBAAiB,CAACC,GAAG,CAAC,GAAG;UACvBK,QAAQ,EAAE/B,oBAAoB,CAAC;YAC7B4B,WAAW;YACXC,eAAe;YACfjB,sBAAsB;YACtBC;UACF,CAAC;QACH,CAAC;MACH;IACF;IAEAQ,QAAQ,CAACW,KAAK,CAACC,WAAW,CAACC,GAAG,CAAC,kCAAkC,EAAE,MAAM;MACvE,IAAIhC,SAAS,CAACiC,sBAAsB,CAAC;QACnC,IAAIxB,OAAO,IAAI;UAAEA,OAAO,EAAEc;QAAkB,CAAC,CAAC;QAC9C,IAAIH,MAAM,KAAK,KAAK,IAAI;UAAEA,MAAM,EAAEE;QAAiB,CAAC,CAAC;QACrD,GAAGD;MACL,CAAC,CAAC,CAACH,KAAK,CAACC,QAAQ,CAAC;IACpB,CAAC,CAAC;EACJ;AACF;AAEA,SAASd,4BAA4B,IAAI4B,sBAAsB,EAAElC,cAAc","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../../../src/utils/webpack/module-federation/types.ts"],"sourcesContent":["import type { container } from 'webpack';\n\n/** @internal */\nexport interface RemoteProperty {\n name: string;\n remoteEntryPath?: string;\n version?: string;\n}\n\n/** @internal */\nexport type OriginalModuleFederationPluginOptions = ConstructorParameters<\n typeof container.ModuleFederationPlugin\n>[0];\n\n/** @internal */\nexport type Shared = OriginalModuleFederationPluginOptions['shared'];\n\n/** @internal */\nexport interface ModuleFederationPluginOptions {\n /** Имя сервиса. */\n name: string;\n\n /** Имя удаленной точки входа. */\n filename?: string;\n\n /** Удаленные сервисы. */\n remotes?: Record<string, string | RemoteProperty>;\n\n /** Предоставляемые сервисы. */\n exposes?: OriginalModuleFederationPluginOptions['exposes'];\n\n /** Общие зависимости. */\n shared?: Shared | false;\n\n /** Ключ свойства в глобальном объекте,в котором хранится карта точек входа в удаленные сервисы. */\n remoteEntriesGlobalKey?: string;\n\n /** Ключ свойства в глобальном объекте, в который добавляются контейнеры удаленных сервисов. */\n containersGlobalKey?: string;\n}\n\n/** @internal */\nexport type ReadyOptions = Omit<\n ModuleFederationPluginOptions,\n 'remoteEntriesGlobalKey' | 'containersGlobalKey'\n> &\n Required<\n Pick<ModuleFederationPluginOptions, 'remoteEntriesGlobalKey' | 'containersGlobalKey'>\n > & {\n library: Required<OriginalModuleFederationPluginOptions>['library'];\n };\n\n/** @internal */\nexport type SharedArray = Extract<Shared, Array<unknown>>;\n"],"mappings":""}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../../../src/utils/webpack/module-federation/types.ts"],"sourcesContent":["import type { container } from 'webpack';\n\n/** @internal */\nexport interface RemoteProperty {\n name: string;\n remoteEntryPath?: string;\n version?: string;\n}\n\n/** @internal */\nexport type OriginalModuleFederationPluginOptions = ConstructorParameters<\n typeof container.ModuleFederationPlugin\n>[0];\n\n/** @internal */\nexport type Shared = OriginalModuleFederationPluginOptions['shared'];\n\n/** @internal */\nexport interface ModuleFederationPluginOptions {\n /** Имя сервиса. */\n name: string;\n\n /** Имя удаленной точки входа. */\n filename?: string;\n\n /** Удаленные сервисы. */\n remotes?: Record<string, string | RemoteProperty>;\n\n /** Предоставляемые сервисы. */\n exposes?: OriginalModuleFederationPluginOptions['exposes'];\n\n /** Общие зависимости. */\n shared?: Shared | false;\n\n /** Ключ свойства в глобальном объекте,в котором хранится карта точек входа в удаленные сервисы. */\n remoteEntriesGlobalKey?: string;\n\n /** Ключ свойства в глобальном объекте, в который добавляются контейнеры удаленных сервисов. */\n containersGlobalKey?: string;\n}\n\n/** @internal */\nexport type ReadyOptions = Omit<\n ModuleFederationPluginOptions,\n 'remoteEntriesGlobalKey' | 'containersGlobalKey'\n> &\n Required<\n Pick<ModuleFederationPluginOptions, 'remoteEntriesGlobalKey' | 'containersGlobalKey'>\n > & {\n library: Required<OriginalModuleFederationPluginOptions>['library'];\n };\n\n/** @internal */\nexport type SharedArray = Extract<Shared, Array<unknown>>;\n"],"mappings":"","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":["createExternalConfig","serviceName","containersGlobalKey","remoteEntriesGlobalKey","remoteEntryPath","DEFAULT_SHARED","react","singleton"],"sources":["../../../../../src/utils/webpack/module-federation/utils.ts"],"sourcesContent":["import type { SharedArray } from './types';\n\n/**\n * Возвращает скрипт инициализации удаленного модуля.\n * @internal\n * @param params Параметры.\n * @param params.serviceName Имя сервиса, содержащего удаленные модули.\n * @param params.containersGlobalKey Глобальная переменная, в которую добавляются удаленные контейнеры.\n * @param params.remoteEntriesGlobalKey Глобальная переменная, в которой хранятся пути к удаленным точкам входа.\n * @param params.remoteEntryPath Путь к remoteEntry, если его не надо получать в runtime.\n * @return Скрипт инициализации.\n */\nexport function createExternalConfig({\n serviceName,\n containersGlobalKey,\n remoteEntriesGlobalKey,\n remoteEntryPath,\n}: {\n serviceName: string;\n remoteEntriesGlobalKey: string;\n containersGlobalKey: string;\n remoteEntryPath?: string;\n}) {\n return `promise new Promise((resolveProxy, rejectProxy) => {\n let installed = false;\n let shareScope;\n \n if (window[\"${remoteEntriesGlobalKey}\"]) {\n const proxy = {\n get(request) {\n return installed\n ? window[\"${containersGlobalKey}\"][\"${serviceName}\"].get(request)\n : new Promise((resolveRequest, rejectRequest) => {\n const scriptElement = document.createElement(\"script\");\n\n scriptElement.onload = () => {\n scriptElement.remove();\n const container = window[\"${containersGlobalKey}\"][\"${serviceName}\"];\n try {\n container.init(shareScope);\n installed = true;\n } catch (e) {}\n resolveRequest(container.get(request));\n };\n \n scriptElement.onerror = () => {\n scriptElement.remove();\n rejectRequest(\n new Error('Failed loading remoteEntry for \"${serviceName}\".')\n );\n };\n \n scriptElement.src = ${\n remoteEntryPath\n ? `'${remoteEntryPath}'`\n : `window['${remoteEntriesGlobalKey}']['${serviceName}']`\n };\n \n scriptElement.async = true;\n document.head.append(scriptElement);\n });\n },\n init(scope) {\n shareScope = scope;\n },\n };\n\n resolveProxy(proxy);\n } else {\n rejectProxy(\n new ReferenceError('Object \"${remoteEntriesGlobalKey}\" unavailable.')\n );\n }\n});`;\n}\n\n/**\n * Перечень общих для всех сервисов зависимостей.\n */\nexport const DEFAULT_SHARED: SharedArray = [\n {\n react: {\n singleton: true,\n },\n 'react-dom': {\n singleton: true,\n },\n },\n\n /* Инжектится транспайлером в [jt]sx для преобразования JSX */\n 'react/jsx-runtime',\n 'react-redux',\n '@reduxjs/toolkit',\n 'redux-saga',\n\n /* Шарим модули, импортируемые из поддиректорий, например `/effects` */\n 'redux-saga/',\n 'classnames',\n /* Шарим модули, импортируемые из поддиректорий, например `/bind` */\n 'classnames/',\n 'axios',\n '@olime/cq-ch',\n '@sentry/browser',\n];\n"],"mappings":"AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,oBAAoBA,CAAC;EACnCC,WAAW;EACXC,mBAAmB;EACnBC,sBAAsB;EACtBC;AAMF,CAAC,EAAE;EACD,OAAQ;AACV;AACA;AACA;AACA,gBAAgBD,sBAAuB;AACvC;AACA;AACA;AACA,sBAAsBD,mBAAoB,OAAMD,WAAY;AAC5D;AACA;AACA;AACA;AACA;AACA,4CAA4CC,mBAAoB,OAAMD,WAAY;AAClF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+DA,WAAY;AAC3E;AACA;AACA;AACA,oCACgBG,eAAe,GACV,IAAGA,eAAgB,GAAE,GACrB,WAAUD,sBAAuB,OAAMF,WAAY,IACzD;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoCE,sBAAuB;AAC3D;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA,OAAO,MAAME,cAA2B,GAAG,CACzC;EACEC,KAAK,EAAE;IACLC,SAAS,EAAE;EACb,CAAC;EACD,WAAW,EAAE;IACXA,SAAS,EAAE;EACb;AACF,CAAC,EAED;AACA,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,YAAY,EAEZ;AACA,aAAa,EACb,YAAY,EACZ;AACA,aAAa,EACb,OAAO,EACP,cAAc,EACd,iBAAiB,CAClB"}
1
+ {"version":3,"file":"utils.js","names":["createExternalConfig","serviceName","containersGlobalKey","remoteEntriesGlobalKey","remoteEntryPath","DEFAULT_SHARED","react","singleton"],"sources":["../../../../../src/utils/webpack/module-federation/utils.ts"],"sourcesContent":["import type { SharedArray } from './types';\n\n/**\n * Возвращает скрипт инициализации удаленного модуля.\n * @internal\n * @param params Параметры.\n * @param params.serviceName Имя сервиса, содержащего удаленные модули.\n * @param params.containersGlobalKey Глобальная переменная, в которую добавляются удаленные контейнеры.\n * @param params.remoteEntriesGlobalKey Глобальная переменная, в которой хранятся пути к удаленным точкам входа.\n * @param params.remoteEntryPath Путь к remoteEntry, если его не надо получать в runtime.\n * @return Скрипт инициализации.\n */\nexport function createExternalConfig({\n serviceName,\n containersGlobalKey,\n remoteEntriesGlobalKey,\n remoteEntryPath,\n}: {\n serviceName: string;\n remoteEntriesGlobalKey: string;\n containersGlobalKey: string;\n remoteEntryPath?: string;\n}) {\n return `promise new Promise((resolveProxy, rejectProxy) => {\n let installed = false;\n let shareScope;\n \n if (window[\"${remoteEntriesGlobalKey}\"]) {\n const proxy = {\n get(request) {\n return installed\n ? window[\"${containersGlobalKey}\"][\"${serviceName}\"].get(request)\n : new Promise((resolveRequest, rejectRequest) => {\n const scriptElement = document.createElement(\"script\");\n\n scriptElement.onload = () => {\n scriptElement.remove();\n const container = window[\"${containersGlobalKey}\"][\"${serviceName}\"];\n try {\n container.init(shareScope);\n installed = true;\n } catch (e) {}\n resolveRequest(container.get(request));\n };\n \n scriptElement.onerror = () => {\n scriptElement.remove();\n rejectRequest(\n new Error('Failed loading remoteEntry for \"${serviceName}\".')\n );\n };\n \n scriptElement.src = ${\n remoteEntryPath\n ? `'${remoteEntryPath}'`\n : `window['${remoteEntriesGlobalKey}']['${serviceName}']`\n };\n \n scriptElement.async = true;\n document.head.append(scriptElement);\n });\n },\n init(scope) {\n shareScope = scope;\n },\n };\n\n resolveProxy(proxy);\n } else {\n rejectProxy(\n new ReferenceError('Object \"${remoteEntriesGlobalKey}\" unavailable.')\n );\n }\n});`;\n}\n\n/**\n * Перечень общих для всех сервисов зависимостей.\n */\nexport const DEFAULT_SHARED: SharedArray = [\n {\n react: {\n singleton: true,\n },\n 'react-dom': {\n singleton: true,\n },\n },\n\n /* Инжектится транспайлером в [jt]sx для преобразования JSX */\n 'react/jsx-runtime',\n 'react-redux',\n '@reduxjs/toolkit',\n 'redux-saga',\n\n /* Шарим модули, импортируемые из поддиректорий, например `/effects` */\n 'redux-saga/',\n 'classnames',\n /* Шарим модули, импортируемые из поддиректорий, например `/bind` */\n 'classnames/',\n 'axios',\n '@olime/cq-ch',\n '@sentry/browser',\n];\n"],"mappings":"AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,oBAAoBA,CAAC;EACnCC,WAAW;EACXC,mBAAmB;EACnBC,sBAAsB;EACtBC;AAMF,CAAC,EAAE;EACD,OAAO;AACT;AACA;AACA;AACA,gBAAgBD,sBAAsB;AACtC;AACA;AACA;AACA,sBAAsBD,mBAAmB,OAAOD,WAAW;AAC3D;AACA;AACA;AACA;AACA;AACA,4CAA4CC,mBAAmB,OAAOD,WAAW;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+DA,WAAW;AAC1E;AACA;AACA;AACA,oCACgBG,eAAe,GACX,IAAIA,eAAe,GAAG,GACtB,WAAWD,sBAAsB,OAAOF,WAAW,IAAI;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCACoCE,sBAAsB;AAC1D;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;AACA,OAAO,MAAME,cAA2B,GAAG,CACzC;EACEC,KAAK,EAAE;IACLC,SAAS,EAAE;EACb,CAAC;EACD,WAAW,EAAE;IACXA,SAAS,EAAE;EACb;AACF,CAAC,EAED;AACA,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,YAAY,EAEZ;AACA,aAAa,EACb,YAAY,EACZ;AACA,aAAa,EACb,OAAO,EACP,cAAc,EACd,iBAAiB,CAClB","ignoreList":[]}
@@ -30,7 +30,7 @@ export declare const FetchUtil: {
30
30
  */
31
31
  readonly eitherResponse: <T = unknown>({ parseBody, }?: {
32
32
  /** Парсер body. */
33
- parseBody?: ((response: Response) => Promise<T>) | undefined;
33
+ parseBody?: (response: Response) => Promise<T>;
34
34
  }) => readonly [(response: Response) => Promise<ResponseDone<T> | ResponseFail<T>>, (error: unknown) => Promise<ResponseFail<T>>];
35
35
  };
36
36
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/http/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE/E;;GAEG;AACH,eAAO,MAAM,SAAS;IACpB;;;;OAIG;8BACY,GAAG,UAAU,mBAAmB,KAAG,IAAI;IAgBtD;;;;;OAKG;+BACa,MAAM,GAAG,GAAG,UAAU,mBAAmB,KAAG,GAAG;IAQ/D;;;;OAIG;kCACgB,MAAM,GAAG,GAAG,KAAG,GAAG;IAQrC;;;;;OAKG;;QAID,mBAAmB;gCACI,QAAQ;+BAaZ,QAAQ,yDAuBX,OAAO;CAMjB,CAAC;AA0BX;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAajE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,CAE5E"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/http/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE/E;;GAEG;AACH,eAAO,MAAM,SAAS;IACpB;;;;OAIG;8BACY,GAAG,UAAU,mBAAmB,KAAG,IAAI;IAgBtD;;;;;OAKG;+BACa,MAAM,GAAG,GAAG,UAAU,mBAAmB,KAAG,GAAG;IAQ/D;;;;OAIG;kCACgB,MAAM,GAAG,GAAG,KAAG,GAAG;IAQrC;;;;;OAKG;8BACY,CAAC,6BAEb;QACD,mBAAmB;QACnB,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;KAChD,0BAYoB,QAAQ,KAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,UAuBxD,OAAO,KAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;CAM5C,CAAC;AA0BX;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAajE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,CAE5E"}
@@ -1,4 +1,4 @@
1
- import type { SeverityLevel, Context, Extra, Breadcrumb } from '@sentry/types';
1
+ import type { SeverityLevel, Context, Breadcrumb } from '@sentry/browser';
2
2
  /**
3
3
  * Тип события.
4
4
  */
@@ -21,11 +21,11 @@ export interface LogHandler {
21
21
  * Поддерживает наиболее распространенные события жизненного цикла программы.
22
22
  */
23
23
  export interface Logger {
24
- error(data: any): void;
25
- log(data: any): void;
26
- info(data: any): void;
27
- warn(data: any): void;
28
- debug(data: any): void;
24
+ error(data: unknown): void;
25
+ log(data: unknown): void;
26
+ info(data: unknown): void;
27
+ warn(data: unknown): void;
28
+ debug(data: unknown): void;
29
29
  subscribe(handler: LogHandler): void;
30
30
  }
31
31
  /**
@@ -43,7 +43,7 @@ export interface ErrorDetails {
43
43
  context?: ContextData | ContextData[];
44
44
  extra?: {
45
45
  key: string;
46
- data: Extra | null;
46
+ data: unknown;
47
47
  };
48
48
  }
49
49
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/log/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE/E;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC;IACvB,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC;IACtB,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC;IACtB,KAAK,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC;IAGvB,SAAS,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,aAAa,CAAC;IAEtB,OAAO,CAAC,EAAE,WAAW,GAAG,WAAW,EAAE,CAAC;IAEtC,KAAK,CAAC,EAAE;QACN,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC;KACpB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC;AAE3C;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/log/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE1E;;GAEG;AACH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,GAAG,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAG3B,SAAS,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAAC;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,aAAa,CAAC;IAEtB,OAAO,CAAC,EAAE,WAAW,GAAG,WAAW,EAAE,CAAC;IAEtC,KAAK,CAAC,EAAE;QACN,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,OAAO,CAAC;KACf,CAAC;CACH;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC;AAE3C;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB"}