@sima-land/isomorph 11.0.0-alpha.4 → 11.0.0-alpha.40

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 (691) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +25 -0
  3. package/cache/package.json +6 -0
  4. package/config/package.json +6 -0
  5. package/di/package.json +6 -0
  6. package/dist/cjs/cache/index.js +6 -0
  7. package/dist/cjs/cache/index.js.map +1 -0
  8. package/dist/cjs/cache/types.js +6 -0
  9. package/dist/cjs/cache/types.js.map +1 -0
  10. package/dist/cjs/config/base.js +22 -0
  11. package/dist/cjs/config/base.js.map +1 -0
  12. package/dist/cjs/config/index.js +20 -0
  13. package/dist/cjs/config/index.js.map +1 -0
  14. package/dist/cjs/config/source.js +25 -0
  15. package/dist/cjs/config/source.js.map +1 -0
  16. package/dist/cjs/config/types.js +6 -0
  17. package/dist/cjs/config/types.js.map +1 -0
  18. package/dist/cjs/di/application.js +106 -0
  19. package/dist/cjs/di/application.js.map +1 -0
  20. package/dist/cjs/di/container.js +55 -0
  21. package/dist/cjs/di/container.js.map +1 -0
  22. package/dist/cjs/di/errors.js +65 -0
  23. package/dist/cjs/di/errors.js.map +1 -0
  24. package/dist/cjs/di/index.js +59 -0
  25. package/dist/cjs/di/index.js.map +1 -0
  26. package/dist/cjs/di/preset.js +32 -0
  27. package/dist/cjs/di/preset.js.map +1 -0
  28. package/dist/cjs/di/token.js +44 -0
  29. package/dist/cjs/di/token.js.map +1 -0
  30. package/dist/cjs/di/types.js +6 -0
  31. package/dist/cjs/di/types.js.map +1 -0
  32. package/dist/cjs/http/errors.js +47 -0
  33. package/dist/cjs/http/errors.js.map +1 -0
  34. package/dist/cjs/http/index.js +63 -0
  35. package/dist/cjs/http/index.js.map +1 -0
  36. package/dist/cjs/http/types.js +6 -0
  37. package/dist/cjs/http/types.js.map +1 -0
  38. package/dist/cjs/log/errors.js +35 -0
  39. package/dist/cjs/log/errors.js.map +1 -0
  40. package/dist/cjs/log/handler/pino.js +31 -0
  41. package/dist/cjs/log/handler/pino.js.map +1 -0
  42. package/dist/cjs/log/handler/sentry.js +57 -0
  43. package/dist/cjs/log/handler/sentry.js.map +1 -0
  44. package/dist/cjs/log/index.js +26 -0
  45. package/dist/cjs/log/index.js.map +1 -0
  46. package/dist/cjs/log/logger.js +35 -0
  47. package/dist/cjs/log/logger.js.map +1 -0
  48. package/dist/cjs/log/types.js +6 -0
  49. package/dist/cjs/log/types.js.map +1 -0
  50. package/dist/cjs/package.json +5 -0
  51. package/dist/cjs/preset/isomorphic/constants.js +14 -0
  52. package/dist/cjs/preset/isomorphic/constants.js.map +1 -0
  53. package/dist/cjs/preset/isomorphic/index.js +6 -0
  54. package/dist/cjs/preset/isomorphic/index.js.map +1 -0
  55. package/dist/cjs/preset/isomorphic/providers/index.js +42 -0
  56. package/dist/cjs/preset/isomorphic/providers/index.js.map +1 -0
  57. package/dist/cjs/preset/isomorphic/types.js +6 -0
  58. package/dist/cjs/preset/isomorphic/types.js.map +1 -0
  59. package/dist/cjs/preset/isomorphic/utils/index.js +322 -0
  60. package/dist/cjs/preset/isomorphic/utils/index.js.map +1 -0
  61. package/dist/cjs/preset/node/handler/index.js +52 -0
  62. package/dist/cjs/preset/node/handler/index.js.map +1 -0
  63. package/dist/cjs/preset/node/handler/providers/index.js +212 -0
  64. package/dist/cjs/preset/node/handler/providers/index.js.map +1 -0
  65. package/dist/cjs/preset/node/handler/utils/index.js +132 -0
  66. package/dist/cjs/preset/node/handler/utils/index.js.map +1 -0
  67. package/dist/cjs/preset/node/index.js +26 -0
  68. package/dist/cjs/preset/node/index.js.map +1 -0
  69. package/dist/cjs/preset/node/node/index.js +61 -0
  70. package/dist/cjs/preset/node/node/index.js.map +1 -0
  71. package/dist/cjs/preset/node/node/providers/index.js +403 -0
  72. package/dist/cjs/preset/node/node/providers/index.js.map +1 -0
  73. package/dist/cjs/preset/node/node/utils/http-client/index.js +122 -0
  74. package/dist/cjs/preset/node/node/utils/http-client/index.js.map +1 -0
  75. package/dist/cjs/preset/node/node/utils/http-server/index.js +18 -0
  76. package/dist/cjs/preset/node/node/utils/http-server/index.js.map +1 -0
  77. package/dist/cjs/preset/node/node/utils/index.js +20 -0
  78. package/dist/cjs/preset/node/node/utils/index.js.map +1 -0
  79. package/dist/cjs/preset/node/types.js +6 -0
  80. package/dist/cjs/preset/node/types.js.map +1 -0
  81. package/dist/cjs/preset/web/index.js +34 -0
  82. package/dist/cjs/preset/web/index.js.map +1 -0
  83. package/dist/cjs/preset/web/providers/index.js +94 -0
  84. package/dist/cjs/preset/web/providers/index.js.map +1 -0
  85. package/dist/cjs/tokens.js +86 -0
  86. package/dist/cjs/tokens.js.map +1 -0
  87. package/dist/cjs/utils/axios/index.js +40 -0
  88. package/dist/cjs/utils/axios/index.js.map +1 -0
  89. package/dist/cjs/utils/axios/middleware/cookie.js +28 -0
  90. package/dist/cjs/utils/axios/middleware/cookie.js.map +1 -0
  91. package/dist/cjs/utils/axios/middleware/log.js +37 -0
  92. package/dist/cjs/utils/axios/middleware/log.js.map +1 -0
  93. package/dist/cjs/utils/axios/sauce/index.js +57 -0
  94. package/dist/cjs/utils/axios/sauce/index.js.map +1 -0
  95. package/dist/cjs/utils/axios/utils/index.js +30 -0
  96. package/dist/cjs/utils/axios/utils/index.js.map +1 -0
  97. package/dist/cjs/utils/express/handler/health-check.js +19 -0
  98. package/dist/cjs/utils/express/handler/health-check.js.map +1 -0
  99. package/dist/cjs/utils/express/index.js +20 -0
  100. package/dist/cjs/utils/express/index.js.map +1 -0
  101. package/dist/cjs/utils/express/utils/index.js +22 -0
  102. package/dist/cjs/utils/express/utils/index.js.map +1 -0
  103. package/dist/cjs/utils/function.js +44 -0
  104. package/dist/cjs/utils/function.js.map +1 -0
  105. package/dist/cjs/utils/index.js +20 -0
  106. package/dist/cjs/utils/index.js.map +1 -0
  107. package/{utils/number.js → dist/cjs/utils/math.js} +7 -5
  108. package/dist/cjs/utils/math.js.map +1 -0
  109. package/dist/cjs/utils/react/error-handlers/index.js +80 -0
  110. package/dist/cjs/utils/react/error-handlers/index.js.map +1 -0
  111. package/dist/cjs/utils/react/index.js +19 -0
  112. package/dist/cjs/utils/react/index.js.map +1 -0
  113. package/dist/cjs/utils/redux/index.js +19 -0
  114. package/dist/cjs/utils/redux/index.js.map +1 -0
  115. package/dist/cjs/utils/redux/remote-data.js +118 -0
  116. package/dist/cjs/utils/redux/remote-data.js.map +1 -0
  117. package/dist/cjs/utils/redux-saga/index.js +20 -0
  118. package/dist/cjs/utils/redux-saga/index.js.map +1 -0
  119. package/dist/cjs/utils/redux-saga/middleware.js +149 -0
  120. package/dist/cjs/utils/redux-saga/middleware.js.map +1 -0
  121. package/dist/cjs/utils/redux-saga/take-chain.js +66 -0
  122. package/dist/cjs/utils/redux-saga/take-chain.js.map +1 -0
  123. package/dist/cjs/utils/redux-saga/types.js +6 -0
  124. package/dist/cjs/utils/redux-saga/types.js.map +1 -0
  125. package/dist/cjs/utils/ssr/index.js +73 -0
  126. package/dist/cjs/utils/ssr/index.js.map +1 -0
  127. package/dist/cjs/utils/web/analytics/data-layer.js +20 -0
  128. package/dist/cjs/utils/web/analytics/data-layer.js.map +1 -0
  129. package/dist/cjs/utils/web/analytics/index.js +20 -0
  130. package/dist/cjs/utils/web/analytics/index.js.map +1 -0
  131. package/dist/cjs/utils/web/analytics/oko.js +20 -0
  132. package/dist/cjs/utils/web/analytics/oko.js.map +1 -0
  133. package/dist/cjs/utils/web/storage/index.js +75 -0
  134. package/dist/cjs/utils/web/storage/index.js.map +1 -0
  135. package/dist/cjs/utils/webpack/env/index.js +96 -0
  136. package/dist/cjs/utils/webpack/env/index.js.map +1 -0
  137. package/dist/cjs/utils/webpack/env/types.js +6 -0
  138. package/dist/cjs/utils/webpack/env/types.js.map +1 -0
  139. package/dist/cjs/utils/webpack/env/utils.js +55 -0
  140. package/dist/cjs/utils/webpack/env/utils.js.map +1 -0
  141. package/dist/cjs/utils/webpack/index.js +20 -0
  142. package/dist/cjs/utils/webpack/index.js.map +1 -0
  143. package/dist/cjs/utils/webpack/module-federation/index.js +110 -0
  144. package/dist/cjs/utils/webpack/module-federation/index.js.map +1 -0
  145. package/dist/cjs/utils/webpack/module-federation/types.js +6 -0
  146. package/dist/cjs/utils/webpack/module-federation/types.js.map +1 -0
  147. package/dist/cjs/utils/webpack/module-federation/utils.js +87 -0
  148. package/dist/cjs/utils/webpack/module-federation/utils.js.map +1 -0
  149. package/dist/esm/cache/index.js +2 -0
  150. package/dist/esm/cache/index.js.map +1 -0
  151. package/dist/esm/cache/types.js +2 -0
  152. package/dist/esm/cache/types.js.map +1 -0
  153. package/dist/esm/config/base.js +16 -0
  154. package/dist/esm/config/base.js.map +1 -0
  155. package/dist/esm/config/index.js +3 -0
  156. package/dist/esm/config/index.js.map +1 -0
  157. package/dist/esm/config/source.js +19 -0
  158. package/dist/esm/config/source.js.map +1 -0
  159. package/dist/esm/config/types.js +2 -0
  160. package/dist/esm/config/types.js.map +1 -0
  161. package/dist/esm/di/application.js +100 -0
  162. package/dist/esm/di/application.js.map +1 -0
  163. package/dist/esm/di/container.js +49 -0
  164. package/dist/esm/di/container.js.map +1 -0
  165. package/dist/esm/di/errors.js +56 -0
  166. package/dist/esm/di/errors.js.map +1 -0
  167. package/dist/esm/di/index.js +6 -0
  168. package/dist/esm/di/index.js.map +1 -0
  169. package/dist/esm/di/preset.js +26 -0
  170. package/dist/esm/di/preset.js.map +1 -0
  171. package/dist/esm/di/token.js +38 -0
  172. package/dist/esm/di/token.js.map +1 -0
  173. package/dist/esm/di/types.js +2 -0
  174. package/dist/esm/di/types.js.map +1 -0
  175. package/dist/esm/http/errors.js +39 -0
  176. package/dist/esm/http/errors.js.map +1 -0
  177. package/dist/esm/http/index.js +4 -0
  178. package/dist/esm/http/index.js.map +1 -0
  179. package/dist/esm/http/types.js +2 -0
  180. package/dist/esm/http/types.js.map +1 -0
  181. package/dist/esm/log/errors.js +27 -0
  182. package/dist/esm/log/errors.js.map +1 -0
  183. package/dist/esm/log/handler/pino.js +25 -0
  184. package/dist/esm/log/handler/pino.js.map +1 -0
  185. package/dist/esm/log/handler/sentry.js +52 -0
  186. package/dist/esm/log/handler/sentry.js.map +1 -0
  187. package/dist/esm/log/index.js +3 -0
  188. package/dist/esm/log/index.js.map +1 -0
  189. package/dist/esm/log/logger.js +29 -0
  190. package/dist/esm/log/logger.js.map +1 -0
  191. package/dist/esm/log/types.js +2 -0
  192. package/dist/esm/log/types.js.map +1 -0
  193. package/dist/esm/package.json +5 -0
  194. package/dist/esm/preset/isomorphic/constants.js +8 -0
  195. package/dist/esm/preset/isomorphic/constants.js.map +1 -0
  196. package/dist/esm/preset/isomorphic/index.js +2 -0
  197. package/dist/esm/preset/isomorphic/index.js.map +1 -0
  198. package/dist/esm/preset/isomorphic/providers/index.js +35 -0
  199. package/dist/esm/preset/isomorphic/providers/index.js.map +1 -0
  200. package/dist/esm/preset/isomorphic/types.js +2 -0
  201. package/dist/esm/preset/isomorphic/types.js.map +1 -0
  202. package/dist/esm/preset/isomorphic/utils/index.js +309 -0
  203. package/dist/esm/preset/isomorphic/utils/index.js.map +1 -0
  204. package/dist/esm/preset/node/handler/index.js +42 -0
  205. package/dist/esm/preset/node/handler/index.js.map +1 -0
  206. package/dist/esm/preset/node/handler/providers/index.js +194 -0
  207. package/dist/esm/preset/node/handler/providers/index.js.map +1 -0
  208. package/dist/esm/preset/node/handler/utils/index.js +113 -0
  209. package/dist/esm/preset/node/handler/utils/index.js.map +1 -0
  210. package/dist/esm/preset/node/index.js +3 -0
  211. package/dist/esm/preset/node/index.js.map +1 -0
  212. package/dist/esm/preset/node/node/index.js +56 -0
  213. package/dist/esm/preset/node/node/index.js.map +1 -0
  214. package/dist/esm/preset/node/node/providers/index.js +378 -0
  215. package/dist/esm/preset/node/node/providers/index.js.map +1 -0
  216. package/dist/esm/preset/node/node/utils/http-client/index.js +114 -0
  217. package/dist/esm/preset/node/node/utils/http-client/index.js.map +1 -0
  218. package/dist/esm/preset/node/node/utils/http-server/index.js +12 -0
  219. package/dist/esm/preset/node/node/utils/http-server/index.js.map +1 -0
  220. package/dist/esm/preset/node/node/utils/index.js +3 -0
  221. package/dist/esm/preset/node/node/utils/index.js.map +1 -0
  222. package/dist/esm/preset/node/types.js +2 -0
  223. package/dist/esm/preset/node/types.js.map +1 -0
  224. package/dist/esm/preset/web/index.js +29 -0
  225. package/dist/esm/preset/web/index.js.map +1 -0
  226. package/dist/esm/preset/web/providers/index.js +85 -0
  227. package/dist/esm/preset/web/providers/index.js.map +1 -0
  228. package/dist/esm/tokens.js +81 -0
  229. package/dist/esm/tokens.js.map +1 -0
  230. package/dist/esm/utils/axios/index.js +5 -0
  231. package/dist/esm/utils/axios/index.js.map +1 -0
  232. package/dist/esm/utils/axios/middleware/cookie.js +22 -0
  233. package/dist/esm/utils/axios/middleware/cookie.js.map +1 -0
  234. package/dist/esm/utils/axios/middleware/log.js +31 -0
  235. package/dist/esm/utils/axios/middleware/log.js.map +1 -0
  236. package/dist/esm/utils/axios/sauce/index.js +50 -0
  237. package/dist/esm/utils/axios/sauce/index.js.map +1 -0
  238. package/dist/esm/utils/axios/utils/index.js +24 -0
  239. package/dist/esm/utils/axios/utils/index.js.map +1 -0
  240. package/dist/esm/utils/express/handler/health-check.js +13 -0
  241. package/dist/esm/utils/express/handler/health-check.js.map +1 -0
  242. package/dist/esm/utils/express/index.js +3 -0
  243. package/dist/esm/utils/express/index.js.map +1 -0
  244. package/dist/esm/utils/express/utils/index.js +16 -0
  245. package/dist/esm/utils/express/utils/index.js.map +1 -0
  246. package/dist/esm/utils/function.js +38 -0
  247. package/dist/esm/utils/function.js.map +1 -0
  248. package/dist/esm/utils/index.js +3 -0
  249. package/dist/esm/utils/index.js.map +1 -0
  250. package/dist/esm/utils/math.js +9 -0
  251. package/dist/esm/utils/math.js.map +1 -0
  252. package/dist/esm/utils/react/error-handlers/index.js +69 -0
  253. package/dist/esm/utils/react/error-handlers/index.js.map +1 -0
  254. package/dist/esm/utils/react/index.js +3 -0
  255. package/dist/esm/utils/react/index.js.map +1 -0
  256. package/dist/esm/utils/redux/index.js +3 -0
  257. package/dist/esm/utils/redux/index.js.map +1 -0
  258. package/dist/esm/utils/redux/remote-data.js +108 -0
  259. package/dist/esm/utils/redux/remote-data.js.map +1 -0
  260. package/dist/esm/utils/redux-saga/index.js +3 -0
  261. package/dist/esm/utils/redux-saga/index.js.map +1 -0
  262. package/dist/esm/utils/redux-saga/middleware.js +143 -0
  263. package/dist/esm/utils/redux-saga/middleware.js.map +1 -0
  264. package/dist/esm/utils/redux-saga/take-chain.js +59 -0
  265. package/dist/esm/utils/redux-saga/take-chain.js.map +1 -0
  266. package/dist/esm/utils/redux-saga/types.js +2 -0
  267. package/dist/esm/utils/redux-saga/types.js.map +1 -0
  268. package/dist/esm/utils/ssr/index.js +66 -0
  269. package/dist/esm/utils/ssr/index.js.map +1 -0
  270. package/dist/esm/utils/web/analytics/data-layer.js +14 -0
  271. package/dist/esm/utils/web/analytics/data-layer.js.map +1 -0
  272. package/dist/esm/utils/web/analytics/index.js +3 -0
  273. package/dist/esm/utils/web/analytics/index.js.map +1 -0
  274. package/dist/esm/utils/web/analytics/oko.js +14 -0
  275. package/dist/esm/utils/web/analytics/oko.js.map +1 -0
  276. package/dist/esm/utils/web/storage/index.js +69 -0
  277. package/dist/esm/utils/web/storage/index.js.map +1 -0
  278. package/dist/esm/utils/webpack/env/index.js +89 -0
  279. package/dist/esm/utils/webpack/env/index.js.map +1 -0
  280. package/dist/esm/utils/webpack/env/types.js +2 -0
  281. package/dist/esm/utils/webpack/env/types.js.map +1 -0
  282. package/dist/esm/utils/webpack/env/utils.js +48 -0
  283. package/dist/esm/utils/webpack/env/utils.js.map +1 -0
  284. package/dist/esm/utils/webpack/index.js +4 -0
  285. package/dist/esm/utils/webpack/index.js.map +1 -0
  286. package/dist/esm/utils/webpack/module-federation/index.js +96 -0
  287. package/dist/esm/utils/webpack/module-federation/index.js.map +1 -0
  288. package/dist/esm/utils/webpack/module-federation/types.js +2 -0
  289. package/dist/esm/utils/webpack/module-federation/types.js.map +1 -0
  290. package/dist/esm/utils/webpack/module-federation/utils.js +80 -0
  291. package/dist/esm/utils/webpack/module-federation/utils.js.map +1 -0
  292. package/dist/types/cache/index.d.ts +2 -0
  293. package/dist/types/cache/index.d.ts.map +1 -0
  294. package/dist/types/cache/types.d.ts +31 -0
  295. package/dist/types/cache/types.d.ts.map +1 -0
  296. package/{config → dist/types/config}/base.d.ts +3 -2
  297. package/dist/types/config/base.d.ts.map +1 -0
  298. package/dist/types/config/index.d.ts +4 -0
  299. package/dist/types/config/index.d.ts.map +1 -0
  300. package/dist/types/config/source.d.ts +8 -0
  301. package/dist/types/config/source.d.ts.map +1 -0
  302. package/dist/types/config/types.d.ts +21 -0
  303. package/dist/types/config/types.d.ts.map +1 -0
  304. package/{di → dist/types/di}/application.d.ts +6 -1
  305. package/dist/types/di/application.d.ts.map +1 -0
  306. package/{di → dist/types/di}/container.d.ts +1 -0
  307. package/dist/types/di/container.d.ts.map +1 -0
  308. package/dist/types/di/errors.d.ts +36 -0
  309. package/dist/types/di/errors.d.ts.map +1 -0
  310. package/dist/types/di/index.d.ts +7 -0
  311. package/dist/types/di/index.d.ts.map +1 -0
  312. package/dist/types/di/preset.d.ts +10 -0
  313. package/dist/types/di/preset.d.ts.map +1 -0
  314. package/{di → dist/types/di}/token.d.ts +1 -0
  315. package/dist/types/di/token.d.ts.map +1 -0
  316. package/dist/types/di/types.d.ts +87 -0
  317. package/dist/types/di/types.d.ts.map +1 -0
  318. package/dist/types/http/errors.d.ts +29 -0
  319. package/dist/types/http/errors.d.ts.map +1 -0
  320. package/dist/types/http/index.d.ts +5 -0
  321. package/dist/types/http/index.d.ts.map +1 -0
  322. package/dist/types/http/types.d.ts +3 -0
  323. package/dist/types/http/types.d.ts.map +1 -0
  324. package/dist/types/log/errors.d.ts +24 -0
  325. package/dist/types/log/errors.d.ts.map +1 -0
  326. package/dist/types/log/handler/pino.d.ts +9 -0
  327. package/dist/types/log/handler/pino.d.ts.map +1 -0
  328. package/dist/types/log/handler/sentry.d.ts +9 -0
  329. package/dist/types/log/handler/sentry.d.ts.map +1 -0
  330. package/dist/types/log/index.d.ts +4 -0
  331. package/dist/types/log/index.d.ts.map +1 -0
  332. package/{logger/index.d.ts → dist/types/log/logger.d.ts} +1 -0
  333. package/dist/types/log/logger.d.ts.map +1 -0
  334. package/dist/types/log/types.d.ts +65 -0
  335. package/dist/types/log/types.d.ts.map +1 -0
  336. package/dist/types/preset/isomorphic/constants.d.ts +8 -0
  337. package/dist/types/preset/isomorphic/constants.d.ts.map +1 -0
  338. package/dist/types/preset/isomorphic/index.d.ts +2 -0
  339. package/dist/types/preset/isomorphic/index.d.ts.map +1 -0
  340. package/dist/types/preset/isomorphic/providers/index.d.ts +23 -0
  341. package/dist/types/preset/isomorphic/providers/index.d.ts.map +1 -0
  342. package/dist/types/preset/isomorphic/types.d.ts +35 -0
  343. package/dist/types/preset/isomorphic/types.d.ts.map +1 -0
  344. package/dist/types/preset/isomorphic/utils/index.d.ts +119 -0
  345. package/dist/types/preset/isomorphic/utils/index.d.ts.map +1 -0
  346. package/dist/types/preset/node/handler/index.d.ts +11 -0
  347. package/dist/types/preset/node/handler/index.d.ts.map +1 -0
  348. package/dist/types/preset/node/handler/providers/index.d.ts +36 -0
  349. package/dist/types/preset/node/handler/providers/index.d.ts.map +1 -0
  350. package/dist/types/preset/node/handler/utils/index.d.ts +47 -0
  351. package/dist/types/preset/node/handler/utils/index.d.ts.map +1 -0
  352. package/dist/types/preset/node/index.d.ts +4 -0
  353. package/dist/types/preset/node/index.d.ts.map +1 -0
  354. package/dist/types/preset/node/node/index.d.ts +9 -0
  355. package/dist/types/preset/node/node/index.d.ts.map +1 -0
  356. package/dist/types/preset/node/node/providers/index.d.ts +113 -0
  357. package/dist/types/preset/node/node/providers/index.d.ts.map +1 -0
  358. package/{http-client/middleware/tracing.d.ts → dist/types/preset/node/node/utils/http-client/index.d.ts} +13 -3
  359. package/dist/types/preset/node/node/utils/http-client/index.d.ts.map +1 -0
  360. package/dist/types/preset/node/node/utils/http-server/index.d.ts +8 -0
  361. package/dist/types/preset/node/node/utils/http-server/index.d.ts.map +1 -0
  362. package/dist/types/preset/node/node/utils/index.d.ts +3 -0
  363. package/dist/types/preset/node/node/utils/index.d.ts.map +1 -0
  364. package/dist/types/preset/node/types.d.ts +10 -0
  365. package/dist/types/preset/node/types.d.ts.map +1 -0
  366. package/dist/types/preset/web/index.d.ts +9 -0
  367. package/dist/types/preset/web/index.d.ts.map +1 -0
  368. package/dist/types/preset/web/providers/index.d.ts +36 -0
  369. package/dist/types/preset/web/providers/index.d.ts.map +1 -0
  370. package/dist/types/tokens.d.ts +83 -0
  371. package/dist/types/tokens.d.ts.map +1 -0
  372. package/dist/types/utils/axios/index.d.ts +5 -0
  373. package/dist/types/utils/axios/index.d.ts.map +1 -0
  374. package/dist/types/utils/axios/middleware/cookie.d.ts +9 -0
  375. package/dist/types/utils/axios/middleware/cookie.d.ts.map +1 -0
  376. package/dist/types/utils/axios/middleware/log.d.ts +28 -0
  377. package/dist/types/utils/axios/middleware/log.d.ts.map +1 -0
  378. package/dist/types/utils/axios/sauce/index.d.ts +43 -0
  379. package/dist/types/utils/axios/sauce/index.d.ts.map +1 -0
  380. package/dist/types/utils/axios/utils/index.d.ts +10 -0
  381. package/dist/types/utils/axios/utils/index.d.ts.map +1 -0
  382. package/dist/types/utils/express/handler/health-check.d.ts +7 -0
  383. package/dist/types/utils/express/handler/health-check.d.ts.map +1 -0
  384. package/dist/types/utils/express/index.d.ts +3 -0
  385. package/dist/types/utils/express/index.d.ts.map +1 -0
  386. package/dist/types/utils/express/utils/index.d.ts +8 -0
  387. package/dist/types/utils/express/utils/index.d.ts.map +1 -0
  388. package/dist/types/utils/function.d.ts +29 -0
  389. package/dist/types/utils/function.d.ts.map +1 -0
  390. package/dist/types/utils/index.d.ts +3 -0
  391. package/dist/types/utils/index.d.ts.map +1 -0
  392. package/{utils/number.d.ts → dist/types/utils/math.d.ts} +1 -0
  393. package/dist/types/utils/math.d.ts.map +1 -0
  394. package/dist/types/utils/react/error-handlers/index.d.ts +42 -0
  395. package/dist/types/utils/react/error-handlers/index.d.ts.map +1 -0
  396. package/dist/types/utils/react/index.d.ts +3 -0
  397. package/dist/types/utils/react/index.d.ts.map +1 -0
  398. package/dist/types/utils/redux/index.d.ts +4 -0
  399. package/dist/types/utils/redux/index.d.ts.map +1 -0
  400. package/dist/types/utils/redux/remote-data.d.ts +86 -0
  401. package/dist/types/utils/redux/remote-data.d.ts.map +1 -0
  402. package/dist/types/utils/redux-saga/index.d.ts +4 -0
  403. package/dist/types/utils/redux-saga/index.d.ts.map +1 -0
  404. package/dist/types/utils/redux-saga/middleware.d.ts +9 -0
  405. package/dist/types/utils/redux-saga/middleware.d.ts.map +1 -0
  406. package/{utils → dist/types/utils}/redux-saga/take-chain.d.ts +3 -0
  407. package/dist/types/utils/redux-saga/take-chain.d.ts.map +1 -0
  408. package/dist/types/utils/redux-saga/types.d.ts +37 -0
  409. package/dist/types/utils/redux-saga/types.d.ts.map +1 -0
  410. package/dist/types/utils/ssr/index.d.ts +42 -0
  411. package/dist/types/utils/ssr/index.d.ts.map +1 -0
  412. package/dist/types/utils/web/analytics/data-layer.d.ts +6 -0
  413. package/dist/types/utils/web/analytics/data-layer.d.ts.map +1 -0
  414. package/dist/types/utils/web/analytics/index.d.ts +3 -0
  415. package/dist/types/utils/web/analytics/index.d.ts.map +1 -0
  416. package/dist/types/utils/web/analytics/oko.d.ts +7 -0
  417. package/dist/types/utils/web/analytics/oko.d.ts.map +1 -0
  418. package/dist/types/utils/web/storage/index.d.ts +14 -0
  419. package/dist/types/utils/web/storage/index.d.ts.map +1 -0
  420. package/dist/types/utils/webpack/env/index.d.ts +19 -0
  421. package/dist/types/utils/webpack/env/index.d.ts.map +1 -0
  422. package/dist/types/utils/webpack/env/types.d.ts +12 -0
  423. package/dist/types/utils/webpack/env/types.d.ts.map +1 -0
  424. package/dist/types/utils/webpack/env/utils.d.ts +16 -0
  425. package/dist/types/utils/webpack/env/utils.d.ts.map +1 -0
  426. package/dist/types/utils/webpack/index.d.ts +7 -0
  427. package/dist/types/utils/webpack/index.d.ts.map +1 -0
  428. package/{utils → dist/types/utils}/webpack/module-federation/index.d.ts +10 -3
  429. package/dist/types/utils/webpack/module-federation/index.d.ts.map +1 -0
  430. package/{utils → dist/types/utils}/webpack/module-federation/types.d.ts +12 -3
  431. package/dist/types/utils/webpack/module-federation/types.d.ts.map +1 -0
  432. package/{utils → dist/types/utils}/webpack/module-federation/utils.d.ts +7 -0
  433. package/dist/types/utils/webpack/module-federation/utils.d.ts.map +1 -0
  434. package/http/package.json +6 -0
  435. package/log/package.json +6 -0
  436. package/package.json +232 -48
  437. package/preset/isomorphic/package.json +6 -0
  438. package/preset/isomorphic/providers/package.json +6 -0
  439. package/preset/isomorphic/utils/package.json +6 -0
  440. package/preset/node/handler/providers/package.json +6 -0
  441. package/preset/node/handler/utils/package.json +6 -0
  442. package/preset/node/node/providers/package.json +6 -0
  443. package/preset/node/node/utils/package.json +6 -0
  444. package/preset/node/package.json +6 -0
  445. package/preset/web/package.json +6 -0
  446. package/preset/web/providers/package.json +6 -0
  447. package/src/cache/index.ts +1 -0
  448. package/src/cache/types.ts +34 -0
  449. package/src/config/base.ts +18 -0
  450. package/src/config/index.ts +3 -0
  451. package/src/config/source.ts +23 -0
  452. package/src/config/types.ts +25 -0
  453. package/src/di/__test__/application.test.ts +258 -0
  454. package/src/di/__test__/container.test.ts +103 -0
  455. package/src/di/__test__/errors.test.ts +56 -0
  456. package/src/di/__test__/preset.test.ts +23 -0
  457. package/src/di/__test__/token.test.ts +25 -0
  458. package/src/di/application.ts +126 -0
  459. package/src/di/container.ts +60 -0
  460. package/src/di/errors.ts +59 -0
  461. package/{di/index.d.ts → src/di/index.ts} +2 -2
  462. package/src/di/preset.ts +32 -0
  463. package/src/di/token.ts +41 -0
  464. package/src/di/types.ts +105 -0
  465. package/src/http/__test__/errors.test.ts +35 -0
  466. package/src/http/errors.ts +42 -0
  467. package/src/http/index.ts +14 -0
  468. package/src/http/types.ts +8 -0
  469. package/src/log/__test__/errors.test.ts +13 -0
  470. package/src/log/__test__/logger.test.ts +24 -0
  471. package/src/log/errors.ts +33 -0
  472. package/src/log/handler/pino.ts +27 -0
  473. package/src/log/handler/sentry.ts +57 -0
  474. package/src/log/index.ts +12 -0
  475. package/src/log/logger.ts +30 -0
  476. package/src/log/types.ts +76 -0
  477. package/src/preset/isomorphic/constants.ts +7 -0
  478. package/src/preset/isomorphic/index.ts +7 -0
  479. package/src/preset/isomorphic/providers/index.ts +40 -0
  480. package/src/preset/isomorphic/types.ts +37 -0
  481. package/src/preset/isomorphic/utils/__test__/index.test.ts +541 -0
  482. package/src/preset/isomorphic/utils/index.ts +349 -0
  483. package/src/preset/node/handler/index.ts +46 -0
  484. package/src/preset/node/handler/providers/index.tsx +214 -0
  485. package/src/preset/node/handler/utils/index.tsx +110 -0
  486. package/src/preset/node/index.ts +3 -0
  487. package/src/preset/node/node/index.ts +73 -0
  488. package/src/preset/node/node/providers/index.ts +434 -0
  489. package/src/preset/node/node/utils/http-client/__test__/index.test.ts +232 -0
  490. package/src/preset/node/node/utils/http-client/index.ts +129 -0
  491. package/src/preset/node/node/utils/http-server/index.ts +17 -0
  492. package/src/preset/node/node/utils/index.ts +2 -0
  493. package/src/preset/node/types.ts +10 -0
  494. package/src/preset/web/index.ts +40 -0
  495. package/src/preset/web/providers/index.ts +108 -0
  496. package/src/tokens.ts +108 -0
  497. package/src/utils/axios/index.ts +12 -0
  498. package/src/utils/axios/middleware/__test__/cookie.test.ts +94 -0
  499. package/src/utils/axios/middleware/__test__/log.test.ts +121 -0
  500. package/src/utils/axios/middleware/cookie.ts +26 -0
  501. package/src/utils/axios/middleware/log.ts +52 -0
  502. package/src/utils/axios/sauce/index.ts +76 -0
  503. package/src/utils/axios/utils/__test__/index.test.ts +89 -0
  504. package/src/utils/axios/utils/index.ts +26 -0
  505. package/src/utils/express/handler/health-check.ts +13 -0
  506. package/src/utils/express/index.ts +2 -0
  507. package/src/utils/express/utils/index.ts +18 -0
  508. package/src/utils/function.ts +57 -0
  509. package/src/utils/index.ts +2 -0
  510. package/src/utils/math.ts +8 -0
  511. package/src/utils/react/error-handlers/__test__/__snapshots__/index.test.tsx.snap +27 -0
  512. package/src/utils/react/error-handlers/__test__/index.test.tsx +63 -0
  513. package/src/utils/react/error-handlers/index.tsx +68 -0
  514. package/src/utils/react/index.ts +3 -0
  515. package/src/utils/redux/__test__/remote-data.test.ts +172 -0
  516. package/src/utils/redux/index.ts +4 -0
  517. package/src/utils/redux/remote-data.ts +138 -0
  518. package/src/utils/redux-saga/__test__/take-chain.test.ts +141 -0
  519. package/src/utils/redux-saga/index.ts +3 -0
  520. package/src/utils/redux-saga/middleware.ts +168 -0
  521. package/src/utils/redux-saga/take-chain.ts +67 -0
  522. package/src/utils/redux-saga/types.ts +43 -0
  523. package/src/utils/ssr/index.tsx +78 -0
  524. package/src/utils/web/analytics/__test__/data-layer.test.ts +50 -0
  525. package/src/utils/web/analytics/__test__/oko.test.ts +50 -0
  526. package/src/utils/web/analytics/data-layer.ts +12 -0
  527. package/src/utils/web/analytics/index.ts +2 -0
  528. package/src/utils/web/analytics/oko.ts +14 -0
  529. package/src/utils/web/storage/index.ts +84 -0
  530. package/src/utils/webpack/env/index.ts +91 -0
  531. package/src/utils/webpack/env/types.ts +14 -0
  532. package/src/utils/webpack/env/utils.ts +53 -0
  533. package/src/utils/webpack/index.ts +7 -0
  534. package/src/utils/webpack/module-federation/__test__/__snapshots__/utils.test.ts.snap +124 -0
  535. package/src/utils/webpack/module-federation/__test__/index.test.ts +311 -0
  536. package/src/utils/webpack/module-federation/__test__/utils.test.ts +28 -0
  537. package/src/utils/webpack/module-federation/index.ts +102 -0
  538. package/src/utils/webpack/module-federation/types.ts +54 -0
  539. package/src/utils/webpack/module-federation/utils.ts +104 -0
  540. package/utils/axios/package.json +6 -0
  541. package/utils/express/package.json +6 -0
  542. package/utils/package.json +6 -0
  543. package/utils/react/package.json +6 -0
  544. package/utils/redux/package.json +6 -0
  545. package/utils/redux-saga/package.json +6 -0
  546. package/utils/ssr/package.json +6 -0
  547. package/utils/web/analytics/package.json +6 -0
  548. package/utils/webpack/package.json +6 -0
  549. package/cache/types.d.ts +0 -7
  550. package/cache/types.js +0 -3
  551. package/cache/types.js.map +0 -1
  552. package/config/base.js +0 -20
  553. package/config/base.js.map +0 -1
  554. package/config/browser.d.ts +0 -6
  555. package/config/browser.js +0 -13
  556. package/config/browser.js.map +0 -1
  557. package/config/node.d.ts +0 -6
  558. package/config/node.js +0 -19
  559. package/config/node.js.map +0 -1
  560. package/config/types.d.ts +0 -7
  561. package/config/types.js +0 -3
  562. package/config/types.js.map +0 -1
  563. package/config/utils.d.ts +0 -5
  564. package/config/utils.js +0 -12
  565. package/config/utils.js.map +0 -1
  566. package/di/application.js +0 -71
  567. package/di/application.js.map +0 -1
  568. package/di/container.js +0 -49
  569. package/di/container.js.map +0 -1
  570. package/di/errors.d.ts +0 -21
  571. package/di/errors.js +0 -33
  572. package/di/errors.js.map +0 -1
  573. package/di/index.js +0 -16
  574. package/di/index.js.map +0 -1
  575. package/di/preset.d.ts +0 -9
  576. package/di/preset.js +0 -25
  577. package/di/preset.js.map +0 -1
  578. package/di/token.js +0 -17
  579. package/di/token.js.map +0 -1
  580. package/di/types.d.ts +0 -32
  581. package/di/types.js +0 -3
  582. package/di/types.js.map +0 -1
  583. package/error-tracker/browser.d.ts +0 -8
  584. package/error-tracker/browser.js +0 -40
  585. package/error-tracker/browser.js.map +0 -1
  586. package/error-tracker/node.d.ts +0 -8
  587. package/error-tracker/node.js +0 -40
  588. package/error-tracker/node.js.map +0 -1
  589. package/error-tracker/types.d.ts +0 -18
  590. package/error-tracker/types.js +0 -3
  591. package/error-tracker/types.js.map +0 -1
  592. package/error-tracker/utils.d.ts +0 -12
  593. package/error-tracker/utils.js +0 -19
  594. package/error-tracker/utils.js.map +0 -1
  595. package/http-client/middleware/cookie.d.ts +0 -19
  596. package/http-client/middleware/cookie.js +0 -62
  597. package/http-client/middleware/cookie.js.map +0 -1
  598. package/http-client/middleware/tracing.js +0 -67
  599. package/http-client/middleware/tracing.js.map +0 -1
  600. package/http-client/sauce/index.d.ts +0 -27
  601. package/http-client/sauce/index.js +0 -33
  602. package/http-client/sauce/index.js.map +0 -1
  603. package/http-client/types.d.ts +0 -6
  604. package/http-client/types.js +0 -3
  605. package/http-client/types.js.map +0 -1
  606. package/http-client/utils.d.ts +0 -9
  607. package/http-client/utils.js +0 -20
  608. package/http-client/utils.js.map +0 -1
  609. package/http-server/constants.d.ts +0 -4
  610. package/http-server/constants.js +0 -8
  611. package/http-server/constants.js.map +0 -1
  612. package/http-server/handler/health-check.d.ts +0 -6
  613. package/http-server/handler/health-check.js +0 -15
  614. package/http-server/handler/health-check.js.map +0 -1
  615. package/http-server/middleware/logging.d.ts +0 -10
  616. package/http-server/middleware/logging.js +0 -31
  617. package/http-server/middleware/logging.js.map +0 -1
  618. package/http-server/middleware/metrics.d.ts +0 -23
  619. package/http-server/middleware/metrics.js +0 -60
  620. package/http-server/middleware/metrics.js.map +0 -1
  621. package/http-server/middleware/tracing.d.ts +0 -14
  622. package/http-server/middleware/tracing.js +0 -51
  623. package/http-server/middleware/tracing.js.map +0 -1
  624. package/http-server/template/index.d.ts +0 -1
  625. package/http-server/template/index.js +0 -36
  626. package/http-server/template/index.js.map +0 -1
  627. package/http-server/types.d.ts +0 -33
  628. package/http-server/types.js +0 -3
  629. package/http-server/types.js.map +0 -1
  630. package/http-server/utils.d.ts +0 -30
  631. package/http-server/utils.js +0 -100
  632. package/http-server/utils.js.map +0 -1
  633. package/logger/handler/console.d.ts +0 -8
  634. package/logger/handler/console.js +0 -36
  635. package/logger/handler/console.js.map +0 -1
  636. package/logger/handler/sentry.d.ts +0 -8
  637. package/logger/handler/sentry.js +0 -36
  638. package/logger/handler/sentry.js.map +0 -1
  639. package/logger/index.js +0 -31
  640. package/logger/index.js.map +0 -1
  641. package/logger/types.d.ts +0 -24
  642. package/logger/types.js +0 -3
  643. package/logger/types.js.map +0 -1
  644. package/metrics/constants.d.ts +0 -4
  645. package/metrics/constants.js +0 -8
  646. package/metrics/constants.js.map +0 -1
  647. package/metrics/node.d.ts +0 -18
  648. package/metrics/node.js +0 -74
  649. package/metrics/node.js.map +0 -1
  650. package/preset/node/index.d.ts +0 -19
  651. package/preset/node/index.js +0 -121
  652. package/preset/node/index.js.map +0 -1
  653. package/preset/node/response.d.ts +0 -15
  654. package/preset/node/response.js +0 -77
  655. package/preset/node/response.js.map +0 -1
  656. package/saga-runner/index.d.ts +0 -8
  657. package/saga-runner/index.js +0 -79
  658. package/saga-runner/index.js.map +0 -1
  659. package/saga-runner/types.d.ts +0 -10
  660. package/saga-runner/types.js +0 -3
  661. package/saga-runner/types.js.map +0 -1
  662. package/tokens.d.ts +0 -48
  663. package/tokens.js +0 -49
  664. package/tokens.js.map +0 -1
  665. package/tracing/utils.d.ts +0 -9
  666. package/tracing/utils.js +0 -22
  667. package/tracing/utils.js.map +0 -1
  668. package/utils/browser/analytics/data-layer.d.ts +0 -5
  669. package/utils/browser/analytics/data-layer.js +0 -15
  670. package/utils/browser/analytics/data-layer.js.map +0 -1
  671. package/utils/browser/analytics/oko.d.ts +0 -12
  672. package/utils/browser/analytics/oko.js +0 -39
  673. package/utils/browser/analytics/oko.js.map +0 -1
  674. package/utils/browser/storage/index.d.ts +0 -4
  675. package/utils/browser/storage/index.js +0 -63
  676. package/utils/browser/storage/index.js.map +0 -1
  677. package/utils/number.js.map +0 -1
  678. package/utils/react/error-handlers/index.d.ts +0 -38
  679. package/utils/react/error-handlers/index.js +0 -47
  680. package/utils/react/error-handlers/index.js.map +0 -1
  681. package/utils/redux/remote-data.d.ts +0 -23
  682. package/utils/redux/remote-data.js +0 -28
  683. package/utils/redux/remote-data.js.map +0 -1
  684. package/utils/redux-saga/take-chain.js +0 -56
  685. package/utils/redux-saga/take-chain.js.map +0 -1
  686. package/utils/webpack/module-federation/index.js +0 -74
  687. package/utils/webpack/module-federation/index.js.map +0 -1
  688. package/utils/webpack/module-federation/types.js +0 -3
  689. package/utils/webpack/module-federation/types.js.map +0 -1
  690. package/utils/webpack/module-federation/utils.js +0 -36
  691. package/utils/webpack/module-federation/utils.js.map +0 -1
@@ -0,0 +1,349 @@
1
+ import { SeverityLevel } from '@sentry/browser';
2
+ import Axios, { AxiosRequestConfig } from 'axios';
3
+ import type { Middleware } from 'middleware-axios';
4
+ import type { StrictMap } from '../types';
5
+ import type { ConfigSource } from '../../../config/types';
6
+ import { Logger, Breadcrumb, DetailedError } from '../../../log';
7
+ import {
8
+ SharedData,
9
+ DoneSharedData,
10
+ FailSharedData,
11
+ LogMiddlewareHandler,
12
+ } from '../../../utils/axios/middleware/log';
13
+ import { applyAxiosDefaults } from '../../../utils/axios/utils';
14
+ import {
15
+ SagaErrorInfo,
16
+ SagaInterruptInfo,
17
+ SagaMiddlewareHandler,
18
+ } from '../../../utils/redux-saga/types';
19
+
20
+ /** Реализация пула хостов. */
21
+ export class HttpApiHostPool<Key extends string> implements StrictMap<Key> {
22
+ private map: Record<Key, string>;
23
+ private source: ConfigSource;
24
+
25
+ /**
26
+ * Конструктор.
27
+ * @param map Карта "Название api >> Название переменной среды с хостом api".
28
+ * @param source Источник конфигурации.
29
+ */
30
+ constructor(map: Record<Key, string>, source: ConfigSource) {
31
+ this.map = map;
32
+ this.source = source;
33
+ }
34
+
35
+ /** @inheritDoc */
36
+ get(key: Key): string {
37
+ const variableName = this.map[key];
38
+
39
+ if (!variableName) {
40
+ throw Error(`Known HTTP API not found by key "${key}"`);
41
+ }
42
+
43
+ // "лениво" берём переменную, именно в момент вызова (чтобы не заставлять указывать в сервисах все переменные разом)
44
+ return this.source.require(variableName);
45
+ }
46
+ }
47
+
48
+ /**
49
+ * Возвращает уровень на основе статуса ответа.
50
+ * @param status Статус HTTP-ответа.
51
+ * @return Уровень.
52
+ */
53
+ export function severityFromStatus(status: unknown): SeverityLevel {
54
+ let result: SeverityLevel;
55
+
56
+ if (typeof status === 'number') {
57
+ switch (true) {
58
+ case status >= 200 && status <= 299:
59
+ result = 'info';
60
+ break;
61
+ case status >= 300 && status <= 499:
62
+ result = 'warning';
63
+ break;
64
+ default:
65
+ result = 'error';
66
+ }
67
+ } else {
68
+ result = 'error';
69
+ }
70
+
71
+ return result;
72
+ }
73
+
74
+ /**
75
+ * Обработчик для промежуточного слоя логирования исходящих http-запросов.
76
+ * Отправляет хлебные крошки и данные ошибки, пригодные для Sentry.
77
+ */
78
+ export class HttpClientLogging implements LogMiddlewareHandler {
79
+ protected logger: Logger;
80
+
81
+ protected readonly requestInfo: ReturnType<typeof applyAxiosDefaults> & {
82
+ readyURL: string;
83
+ };
84
+
85
+ /**
86
+ * Конструктор.
87
+ * @param logger Logger.
88
+ * @param data Данные запроса.
89
+ */
90
+ constructor(logger: Logger, data: SharedData) {
91
+ const config = applyAxiosDefaults(data.config, data.defaults);
92
+
93
+ this.logger = logger;
94
+
95
+ this.requestInfo = {
96
+ ...config,
97
+ readyURL: displayUrl(config.baseURL, config.url),
98
+ };
99
+ }
100
+
101
+ /**
102
+ * Отправит хлебные крошки перед запросом.
103
+ */
104
+ beforeRequest() {
105
+ const { readyURL, method, params } = this.requestInfo;
106
+
107
+ this.logger.info(
108
+ new Breadcrumb({
109
+ category: 'http.request',
110
+ type: 'http',
111
+ data: {
112
+ url: readyURL,
113
+ method,
114
+ params,
115
+ },
116
+ level: 'info',
117
+ }),
118
+ );
119
+ }
120
+
121
+ /**
122
+ * Отправит хлебные крошки после запроса.
123
+ * @param data Данные ответа.
124
+ */
125
+ afterResponse({ response }: DoneSharedData) {
126
+ const { readyURL, method, params } = this.requestInfo;
127
+
128
+ this.logger.info(
129
+ new Breadcrumb({
130
+ category: 'http.response',
131
+ type: 'http',
132
+ data: {
133
+ url: readyURL,
134
+ method,
135
+ status_code: response.status,
136
+ params,
137
+ },
138
+ level: 'info',
139
+ }),
140
+ );
141
+ }
142
+
143
+ /**
144
+ * Отправит данные ошибки при перехвате.
145
+ * @param data Данные запроса.
146
+ */
147
+ onCatch({ error }: FailSharedData) {
148
+ if (Axios.isAxiosError(error)) {
149
+ const { requestInfo } = this;
150
+ const statusCode = error.response?.status || 'UNKNOWN';
151
+
152
+ // @todo выяснить: нужно ли нам отправлять ответы с кодом <500 в Sentry на уровне всех команд
153
+ // если да то можно добавить метод в духе errorStatusFilter(s => s !== 422)
154
+ this.logger.error(
155
+ new DetailedError(
156
+ `HTTP request failed, status code: ${statusCode}, error message: ${error.message}`,
157
+ {
158
+ level: severityFromStatus(error.response?.status),
159
+ context: [
160
+ {
161
+ key: 'Request details',
162
+ data: {
163
+ url: requestInfo.url,
164
+ baseURL: requestInfo.baseURL,
165
+ method: requestInfo.method,
166
+ headers: requestInfo.headers,
167
+ data: requestInfo.data,
168
+ params: requestInfo.params,
169
+ },
170
+ },
171
+ {
172
+ key: 'Response details',
173
+ data: {
174
+ data: error.response?.data,
175
+
176
+ // копируем так как в Sentry падает ошибка: **non-serializable** (TypeError: Object.getPrototypeOf(...) is null)
177
+ headers: { ...error.response?.headers },
178
+
179
+ error: error.toJSON(),
180
+ },
181
+ },
182
+ ],
183
+ },
184
+ ),
185
+ );
186
+
187
+ if (typeof statusCode === 'number') {
188
+ this.logger.info(
189
+ new Breadcrumb({
190
+ category: 'http.response',
191
+ type: 'http',
192
+ data: {
193
+ url: requestInfo.readyURL,
194
+ method: requestInfo.method,
195
+ status_code: statusCode,
196
+ params: requestInfo.params,
197
+ },
198
+ level: 'error',
199
+ }),
200
+ );
201
+ }
202
+ } else {
203
+ this.logger.error(error);
204
+ }
205
+ }
206
+ }
207
+
208
+ /**
209
+ * Лог событий запуска и выполнения redux-saga.
210
+ */
211
+ export class SagaLogging implements SagaMiddlewareHandler {
212
+ protected logger: Logger;
213
+
214
+ /**
215
+ * @param logger Logger.
216
+ */
217
+ constructor(logger: Logger) {
218
+ this.logger = logger;
219
+ }
220
+
221
+ /**
222
+ * При получении ошибки выполнения саги передаст ее логгеру ее с данными стека в extra.
223
+ * @param error Ошибка.
224
+ * @param info Инфо выполнения саги.
225
+ */
226
+ onSagaError(error: Error, info: SagaErrorInfo) {
227
+ this.logger.error(
228
+ new DetailedError(error.message, {
229
+ extra: {
230
+ key: 'Saga stack',
231
+ data: info.sagaStack,
232
+ },
233
+ }),
234
+ );
235
+ }
236
+
237
+ /**
238
+ * При получении ошибки запуска саги передаст ее логгеру.
239
+ * @param error Ошибка.
240
+ */
241
+ onConfigError(error: Error) {
242
+ this.logger.error(error);
243
+ }
244
+
245
+ /**
246
+ * При прерывании саги передаст информацию логгеру как ошибку.
247
+ * @param info Инфо прерывания саги.
248
+ */
249
+ onTimeoutInterrupt({ timeout }: SagaInterruptInfo) {
250
+ this.logger.error(
251
+ new DetailedError(`Сага прервана по таймауту (${timeout}мс)`, {
252
+ level: 'warning',
253
+ }),
254
+ );
255
+ }
256
+ }
257
+
258
+ /** Работа с HTTP-статусами по соглашению. */
259
+ export abstract class HttpStatus {
260
+ /**
261
+ * Определяет, является ли переданный статус успешным.
262
+ * @param status Статус.
263
+ * @return Признак.
264
+ */
265
+ static isOk(status: unknown): boolean {
266
+ return typeof status === 'number' && status === 200;
267
+ }
268
+
269
+ /**
270
+ * Определяет, является ли переданный статус успешным POST.
271
+ * @param status Статус.
272
+ * @return Признак.
273
+ */
274
+ static isPostOk(status: unknown): boolean {
275
+ return typeof status === 'number' && status === 201;
276
+ }
277
+
278
+ /**
279
+ * Определяет, является ли переданный статус успешным DELETE.
280
+ * @param status Статус.
281
+ * @return Признак.
282
+ */
283
+ static isDeleteOk(status: unknown): boolean {
284
+ return typeof status === 'number' && (status === 204 || status === 200);
285
+ }
286
+
287
+ /**
288
+ * Возвращает новый промежуточный слой для валидации статуса HTTP-ответа.
289
+ * Валидация применяется только если в конфиге запроса не указан validateStatus.
290
+ * @return Промежуточный слой.
291
+ */
292
+ static axiosMiddleware(): Middleware<unknown> {
293
+ return async (config, next, defaults) => {
294
+ if (config.validateStatus !== undefined || defaults.validateStatus !== undefined) {
295
+ // если validateStatus указан явно то не применяем валидацию по умолчанию
296
+ await next(config);
297
+ } else {
298
+ let validateStatus: AxiosRequestConfig['validateStatus'] = null;
299
+
300
+ switch (config.method?.toLowerCase()) {
301
+ case 'get':
302
+ case 'put':
303
+ case undefined:
304
+ validateStatus = HttpStatus.isOk;
305
+ break;
306
+ case 'post':
307
+ validateStatus = HttpStatus.isPostOk;
308
+ break;
309
+ case 'delete':
310
+ validateStatus = HttpStatus.isDeleteOk;
311
+ break;
312
+ }
313
+
314
+ await next({ ...config, validateStatus });
315
+ }
316
+ };
317
+ }
318
+ }
319
+
320
+ /**
321
+ * Объединяет значения опций baseURL и url (axios) в одну строку для логирования.
322
+ * @param baseURL Опция baseURL.
323
+ * @param url Опция url.
324
+ * @return Отображение. Не является валидным URL.
325
+ */
326
+ export function displayUrl(
327
+ baseURL: AxiosRequestConfig['baseURL'] = '',
328
+ url: AxiosRequestConfig['url'] = '',
329
+ ) {
330
+ let result: string;
331
+
332
+ switch (true) {
333
+ case Boolean(baseURL && url):
334
+ result = `${baseURL.replace(/\/$/, '')}/${url.replace(/^\//, '')}`;
335
+ break;
336
+ case Boolean(baseURL) && !url:
337
+ result = baseURL;
338
+ break;
339
+ case !baseURL && Boolean(url):
340
+ result = url;
341
+ break;
342
+ case !baseURL && !url:
343
+ default:
344
+ result = '[empty]';
345
+ break;
346
+ }
347
+
348
+ return result;
349
+ }
@@ -0,0 +1,46 @@
1
+ import { Preset, createPreset } from '../../../di';
2
+ import { KnownToken } from '../../../tokens';
3
+ import { provideSagaMiddleware, provideHttpClientLogHandler } from '../../isomorphic/providers';
4
+ import { PresetTuner } from '../../isomorphic/types';
5
+ import {
6
+ provideHttpClientFactory,
7
+ provideHandlerMain,
8
+ provideSpecificParams,
9
+ providePageHelmet,
10
+ providePageRender,
11
+ } from './providers';
12
+ import { SpecificExtras } from './utils';
13
+
14
+ /**
15
+ * Возвращает preset с зависимостями по умолчанию для работы в рамках ответа на http-запрос.
16
+ * @param customize Получит функцию с помощью которой можно переопределить предустановленные провайдеры.
17
+ * @todo Возможно стоит переименовать в PresetPageHandler.
18
+ * @return Preset.
19
+ */
20
+ export function PresetHandler(customize?: PresetTuner): Preset {
21
+ // ВАЖНО: используем .set() вместо аргумента defaults функции createPreset из-за скорости
22
+ const preset = createPreset();
23
+
24
+ // saga
25
+ preset.set(KnownToken.sagaMiddleware, provideSagaMiddleware);
26
+
27
+ // http client
28
+ preset.set(KnownToken.Http.Client.factory, provideHttpClientFactory);
29
+ preset.set(KnownToken.Http.Client.Middleware.Log.handler, provideHttpClientLogHandler);
30
+
31
+ // http handler
32
+ preset.set(KnownToken.Http.Handler.main, provideHandlerMain);
33
+ preset.set(KnownToken.Http.Handler.Request.specificParams, provideSpecificParams);
34
+ preset.set(KnownToken.Http.Handler.Response.specificExtras, () => new SpecificExtras());
35
+ preset.set(KnownToken.Http.Handler.Page.assets, () => ({ js: '', css: '' }));
36
+ preset.set(KnownToken.Http.Handler.Page.helmet, providePageHelmet);
37
+ preset.set(KnownToken.Http.Handler.Page.render, providePageRender);
38
+
39
+ if (customize) {
40
+ customize({ override: preset.set.bind(preset) });
41
+ }
42
+
43
+ return preset;
44
+ }
45
+
46
+ export { HandlerProvider } from './utils';
@@ -0,0 +1,214 @@
1
+ import { ResponseError, createCookieStore } from '../../../../http';
2
+ import { Resolve } from '../../../../di';
3
+ import { KnownToken } from '../../../../tokens';
4
+ import { getRequestHeaders, tracingMiddleware } from '../../node/utils/http-client';
5
+ import { CreateAxiosDefaults } from 'axios';
6
+ import { create } from 'middleware-axios';
7
+ import { HttpStatus } from '../../../isomorphic/utils';
8
+ import { cookieMiddleware, logMiddleware } from '../../../../utils/axios';
9
+ import { RESPONSE_EVENT_TYPE } from '../../../isomorphic/constants';
10
+ import { ConventionalJson } from '../../../isomorphic/types';
11
+ import { Fragment } from 'react';
12
+ import { HelmetContext, RegularHelmet, getResponseFormat } from '../utils';
13
+ import { renderToString } from 'react-dom/server';
14
+
15
+ /**
16
+ * Провайдер фабрики http-клиентов.
17
+ * @param resolve Функция для получения зависимости по токену.
18
+ * @return Фабрика.
19
+ */
20
+ export function provideHttpClientFactory(resolve: Resolve) {
21
+ // @todo а что если привести все зависимости к виду:
22
+ // const getAppConfig = resolve.lazy(KnownToken.Config.base);
23
+
24
+ const appConfig = resolve(KnownToken.Config.base);
25
+ const tracer = resolve(KnownToken.Tracing.tracer);
26
+ const context = resolve(KnownToken.Http.Handler.context);
27
+ const logHandler = resolve(KnownToken.Http.Client.Middleware.Log.handler);
28
+
29
+ // @todo добавить при необходимости (но тогда в логе будет значительно больше ошибок)
30
+ // можно не отсылать ошибки из клиента если ответ от сервера уже ушел (writableEnded)
31
+ // const controller = new AbortController();
32
+ // context.res.on('finish', () => {
33
+ // controller.abort();
34
+ // });
35
+
36
+ // ВАЖНО: для всех клиентов в рамках обработчика должно быть одно хранилище cookie
37
+ const cookieStore = createCookieStore(context.req.header('cookie'));
38
+
39
+ cookieStore.subscribe(() => {
40
+ if (!context.res.writableEnded) {
41
+ context.res.setHeader('cookie', cookieStore.getCookies());
42
+ }
43
+ });
44
+
45
+ const defaultHeaders = getRequestHeaders(appConfig, context.req);
46
+
47
+ return (config: CreateAxiosDefaults = {}) => {
48
+ const client = create({
49
+ ...config,
50
+ headers: {
51
+ ...defaultHeaders,
52
+
53
+ // @todo убрать as any
54
+ ...(config.headers as any),
55
+ },
56
+ });
57
+
58
+ client.use(HttpStatus.axiosMiddleware());
59
+ client.use(tracingMiddleware(tracer, context.res.locals.tracing.rootContext));
60
+ client.use(logMiddleware(logHandler));
61
+ client.use(cookieMiddleware(cookieStore));
62
+
63
+ return client;
64
+ };
65
+ }
66
+
67
+ /**
68
+ * Провайдер главной функции обработчика входящего http-запроса.
69
+ * @param resolve Функция для получения зависимости по токену.
70
+ * @return Главная функция.
71
+ */
72
+ export function provideHandlerMain(resolve: Resolve): VoidFunction {
73
+ const config = resolve(KnownToken.Config.base);
74
+ const logger = resolve(KnownToken.logger);
75
+ const assetsInit = resolve(KnownToken.Http.Handler.Page.assets);
76
+ const render = resolve(KnownToken.Http.Handler.Page.render);
77
+ const extras = resolve(KnownToken.Http.Handler.Response.specificExtras);
78
+ const Helmet = resolve(KnownToken.Http.Handler.Page.helmet);
79
+ const { req, res } = resolve(KnownToken.Http.Handler.context);
80
+
81
+ const getAssets = typeof assetsInit === 'function' ? assetsInit : () => assetsInit;
82
+
83
+ /**
84
+ * Рендер JSX-элемента в строку.
85
+ * @param element Элемент.
86
+ * @return Строка.
87
+ */
88
+ const elementToString = (element: JSX.Element) => {
89
+ res.emit(RESPONSE_EVENT_TYPE.renderStart);
90
+ const result = renderToString(element);
91
+ res.emit(RESPONSE_EVENT_TYPE.renderFinish);
92
+
93
+ return result;
94
+ };
95
+
96
+ return async () => {
97
+ try {
98
+ const assets = await getAssets();
99
+ const meta = extras.getMeta();
100
+
101
+ const jsx = (
102
+ <HelmetContext.Provider value={{ title: config.appName, assets }}>
103
+ <Helmet>{await render()}</Helmet>
104
+ </HelmetContext.Provider>
105
+ );
106
+
107
+ switch (getResponseFormat(req)) {
108
+ case 'html': {
109
+ res.setHeader('simaland-bundle-js', assets.js);
110
+ res.setHeader('simaland-bundle-css', assets.css);
111
+
112
+ if (assets.criticalJs) {
113
+ res.setHeader('simaland-critical-js', assets.criticalJs);
114
+ }
115
+
116
+ if (assets.criticalCss) {
117
+ res.setHeader('simaland-critical-css', assets.criticalCss);
118
+ }
119
+
120
+ if (meta) {
121
+ res.setHeader('simaland-meta', JSON.stringify(meta));
122
+ }
123
+
124
+ // ВАЖНО: DOCTYPE обязательно нужен так как влияет на то как браузер будет парсить html/css
125
+ // ВАЖНО: DOCTYPE нужен только когда отдаем полноценную страницу
126
+ if (config.env === 'development') {
127
+ res.send(`<!DOCTYPE html>${elementToString(jsx)}`);
128
+ } else {
129
+ res.send(elementToString(jsx));
130
+ }
131
+ break;
132
+ }
133
+
134
+ case 'json': {
135
+ res.json({
136
+ markup: elementToString(jsx),
137
+ bundle_js: assets.js,
138
+ bundle_css: assets.css,
139
+ critical_js: assets.criticalJs,
140
+ critical_css: assets.criticalCss,
141
+ meta,
142
+ } satisfies ConventionalJson);
143
+ break;
144
+ }
145
+ }
146
+ } catch (error) {
147
+ let message;
148
+ let statusCode = 500; // по умолчанию, если на этапе подготовки страницы что-то не так, отдаем 500
149
+
150
+ if (error instanceof Error) {
151
+ message = error.message;
152
+
153
+ if (error instanceof ResponseError) {
154
+ statusCode = error.statusCode;
155
+ }
156
+ } else {
157
+ message = String(error);
158
+ }
159
+
160
+ res.status(statusCode).send(message);
161
+ logger.error(error);
162
+ }
163
+ };
164
+ }
165
+
166
+ /**
167
+ * Провайдер render-функции.
168
+ * @return Render-Функция.
169
+ */
170
+ export function providePageRender() {
171
+ return () => (
172
+ <>
173
+ <h1>Hello, world!</h1>
174
+ <p>This is a stub page. Define the render component in your handler</p>
175
+ </>
176
+ );
177
+ }
178
+
179
+ /**
180
+ * Провайдер helmet-компонента. Этот компонент является контейнером для результата render-функции.
181
+ * @param resolve Функция для получения зависимости по токену.
182
+ * @return Helmet-компонент.
183
+ */
184
+ export function providePageHelmet(resolve: Resolve) {
185
+ const config = resolve(KnownToken.Config.base);
186
+ const { req } = resolve(KnownToken.Http.Handler.context);
187
+
188
+ return config.env === 'development' && getResponseFormat(req) === 'html'
189
+ ? RegularHelmet
190
+ : Fragment;
191
+ }
192
+
193
+ /**
194
+ * Провайдер специфичных параметров, которые frontend-микросервис будет получать в запросе.
195
+ * @param resolve Функция для получения зависимости по токену.
196
+ * @return Параметры.
197
+ */
198
+ export function provideSpecificParams(resolve: Resolve): Record<string, unknown> {
199
+ const context = resolve(KnownToken.Http.Handler.context);
200
+
201
+ try {
202
+ const headerValue = context.req.header('simaland-params');
203
+
204
+ /**
205
+ * Node.js переводит в ASCII.
206
+ * @see {https://github.com/nodejs/node/issues/17390}
207
+ */
208
+ const processedValue = headerValue ? Buffer.from(headerValue, 'binary').toString('utf8') : '';
209
+
210
+ return processedValue ? JSON.parse(processedValue) : {};
211
+ } catch {
212
+ return {};
213
+ }
214
+ }