@sima-land/isomorph 9.0.7 → 11.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (530) hide show
  1. package/LICENSE +201 -0
  2. package/dist/cache/types.d.ts +7 -0
  3. package/dist/cache/types.js +3 -0
  4. package/dist/cache/types.js.map +1 -0
  5. package/dist/config/browser.d.ts +6 -0
  6. package/dist/config/browser.js +13 -0
  7. package/dist/config/browser.js.map +1 -0
  8. package/dist/config/index.d.ts +7 -0
  9. package/dist/config/index.js +20 -0
  10. package/dist/config/index.js.map +1 -0
  11. package/dist/config/node.d.ts +6 -0
  12. package/dist/config/node.js +19 -0
  13. package/dist/config/node.js.map +1 -0
  14. package/dist/config/types.d.ts +7 -0
  15. package/dist/config/types.js +3 -0
  16. package/dist/config/types.js.map +1 -0
  17. package/dist/config/utils.d.ts +5 -0
  18. package/dist/config/utils.js +12 -0
  19. package/dist/config/utils.js.map +1 -0
  20. package/dist/container/application.d.ts +25 -0
  21. package/dist/container/application.js +63 -0
  22. package/dist/container/application.js.map +1 -0
  23. package/dist/container/index.d.ts +18 -0
  24. package/dist/container/index.js +74 -0
  25. package/dist/container/index.js.map +1 -0
  26. package/dist/container/types.d.ts +14 -0
  27. package/dist/container/types.js +3 -0
  28. package/dist/container/types.js.map +1 -0
  29. package/dist/error-tracker/browser.d.ts +8 -0
  30. package/dist/error-tracker/browser.js +40 -0
  31. package/dist/error-tracker/browser.js.map +1 -0
  32. package/dist/error-tracker/node.d.ts +8 -0
  33. package/dist/error-tracker/node.js +40 -0
  34. package/dist/error-tracker/node.js.map +1 -0
  35. package/dist/error-tracker/types.d.ts +18 -0
  36. package/dist/error-tracker/types.js +3 -0
  37. package/dist/error-tracker/types.js.map +1 -0
  38. package/dist/error-tracker/utils.d.ts +12 -0
  39. package/dist/error-tracker/utils.js +19 -0
  40. package/dist/error-tracker/utils.js.map +1 -0
  41. package/dist/http-client/middleware/cookie.d.ts +19 -0
  42. package/dist/http-client/middleware/cookie.js +62 -0
  43. package/dist/http-client/middleware/cookie.js.map +1 -0
  44. package/dist/http-client/middleware/tracing.d.ts +32 -0
  45. package/dist/http-client/middleware/tracing.js +67 -0
  46. package/dist/http-client/middleware/tracing.js.map +1 -0
  47. package/dist/http-client/types.d.ts +6 -0
  48. package/dist/http-client/types.js +3 -0
  49. package/dist/http-client/types.js.map +1 -0
  50. package/dist/http-client/utils.d.ts +36 -0
  51. package/dist/http-client/utils.js +49 -0
  52. package/dist/http-client/utils.js.map +1 -0
  53. package/dist/http-server/constants.d.ts +4 -0
  54. package/dist/http-server/constants.js +8 -0
  55. package/dist/http-server/constants.js.map +1 -0
  56. package/dist/http-server/handler/health-check.d.ts +6 -0
  57. package/dist/http-server/handler/health-check.js +15 -0
  58. package/dist/http-server/handler/health-check.js.map +1 -0
  59. package/dist/http-server/middleware/logging.d.ts +10 -0
  60. package/dist/http-server/middleware/logging.js +31 -0
  61. package/dist/http-server/middleware/logging.js.map +1 -0
  62. package/dist/http-server/middleware/metrics.d.ts +23 -0
  63. package/dist/http-server/middleware/metrics.js +60 -0
  64. package/dist/http-server/middleware/metrics.js.map +1 -0
  65. package/dist/http-server/middleware/tracing.d.ts +8 -0
  66. package/dist/http-server/middleware/tracing.js +32 -0
  67. package/dist/http-server/middleware/tracing.js.map +1 -0
  68. package/dist/http-server/types.d.ts +25 -0
  69. package/dist/http-server/types.js +3 -0
  70. package/dist/http-server/types.js.map +1 -0
  71. package/dist/http-server/utils.d.ts +26 -0
  72. package/dist/http-server/utils.js +88 -0
  73. package/dist/http-server/utils.js.map +1 -0
  74. package/dist/logger/handler/console.d.ts +8 -0
  75. package/dist/logger/handler/console.js +36 -0
  76. package/dist/logger/handler/console.js.map +1 -0
  77. package/dist/logger/handler/sentry.d.ts +8 -0
  78. package/dist/logger/handler/sentry.js +36 -0
  79. package/dist/logger/handler/sentry.js.map +1 -0
  80. package/dist/logger/index.d.ts +6 -0
  81. package/dist/logger/index.js +31 -0
  82. package/dist/logger/index.js.map +1 -0
  83. package/dist/logger/types.d.ts +24 -0
  84. package/dist/logger/types.js +3 -0
  85. package/dist/logger/types.js.map +1 -0
  86. package/dist/metrics/constants.d.ts +4 -0
  87. package/dist/metrics/constants.js +8 -0
  88. package/dist/metrics/constants.js.map +1 -0
  89. package/dist/metrics/node.d.ts +18 -0
  90. package/dist/metrics/node.js +74 -0
  91. package/dist/metrics/node.js.map +1 -0
  92. package/dist/preset/index.d.ts +7 -0
  93. package/dist/preset/index.js +23 -0
  94. package/dist/preset/index.js.map +1 -0
  95. package/dist/preset/node/index.d.ts +15 -0
  96. package/dist/preset/node/index.js +90 -0
  97. package/dist/preset/node/index.js.map +1 -0
  98. package/dist/preset/node/response.d.ts +12 -0
  99. package/dist/preset/node/response.js +52 -0
  100. package/dist/preset/node/response.js.map +1 -0
  101. package/dist/preset/types.d.ts +7 -0
  102. package/dist/preset/types.js +3 -0
  103. package/dist/preset/types.js.map +1 -0
  104. package/dist/saga-runner/index.d.ts +8 -0
  105. package/dist/saga-runner/index.js +77 -0
  106. package/dist/saga-runner/index.js.map +1 -0
  107. package/dist/saga-runner/types.d.ts +10 -0
  108. package/dist/saga-runner/types.js +3 -0
  109. package/dist/saga-runner/types.js.map +1 -0
  110. package/dist/tokens.d.ts +40 -0
  111. package/dist/tokens.js +43 -0
  112. package/dist/tokens.js.map +1 -0
  113. package/dist/tracer/node.d.ts +10 -0
  114. package/dist/tracer/node.js +38 -0
  115. package/dist/tracer/node.js.map +1 -0
  116. package/dist/tracer/types.d.ts +2 -0
  117. package/dist/tracer/types.js +3 -0
  118. package/dist/tracer/types.js.map +1 -0
  119. package/dist/utils/browser/analytics/data-layer.d.ts +5 -0
  120. package/dist/utils/browser/analytics/data-layer.js +15 -0
  121. package/dist/utils/browser/analytics/data-layer.js.map +1 -0
  122. package/{helpers/analytics/index.d.ts → dist/utils/browser/analytics/oko.d.ts} +1 -6
  123. package/{helpers/analytics/index.js → dist/utils/browser/analytics/oko.js} +11 -20
  124. package/dist/utils/browser/analytics/oko.js.map +1 -0
  125. package/dist/utils/browser/storage/index.d.ts +4 -0
  126. package/dist/utils/browser/storage/index.js +63 -0
  127. package/dist/utils/browser/storage/index.js.map +1 -0
  128. package/dist/utils/number.d.ts +6 -0
  129. package/dist/utils/number.js +13 -0
  130. package/dist/utils/number.js.map +1 -0
  131. package/dist/utils/react/error-handlers/index.d.ts +38 -0
  132. package/dist/utils/react/error-handlers/index.js +47 -0
  133. package/dist/utils/react/error-handlers/index.js.map +1 -0
  134. package/dist/utils/redux/remote-data.d.ts +23 -0
  135. package/dist/utils/redux/remote-data.js +28 -0
  136. package/dist/utils/redux/remote-data.js.map +1 -0
  137. package/dist/utils/redux-saga/take-chain.d.ts +24 -0
  138. package/dist/utils/redux-saga/take-chain.js +56 -0
  139. package/dist/utils/redux-saga/take-chain.js.map +1 -0
  140. package/dist/utils/webpack/module-federation/index.d.ts +21 -0
  141. package/dist/utils/webpack/module-federation/index.js +74 -0
  142. package/dist/utils/webpack/module-federation/index.js.map +1 -0
  143. package/dist/utils/webpack/module-federation/types.d.ts +26 -0
  144. package/dist/utils/webpack/module-federation/types.js +3 -0
  145. package/dist/utils/webpack/module-federation/types.js.map +1 -0
  146. package/dist/utils/webpack/module-federation/utils.d.ts +15 -0
  147. package/dist/utils/webpack/module-federation/utils.js +36 -0
  148. package/dist/utils/webpack/module-federation/utils.js.map +1 -0
  149. package/package.json +50 -68
  150. package/readme.md +23 -0
  151. package/src/cache/types.ts +7 -0
  152. package/src/config/browser.ts +10 -0
  153. package/src/config/index.ts +18 -0
  154. package/src/config/node.ts +18 -0
  155. package/src/config/types.ts +9 -0
  156. package/src/config/utils.ts +7 -0
  157. package/src/container/application.ts +91 -0
  158. package/src/container/index.ts +79 -0
  159. package/src/container/types.ts +17 -0
  160. package/src/error-tracker/browser.ts +14 -0
  161. package/src/error-tracker/node.ts +14 -0
  162. package/src/error-tracker/types.ts +22 -0
  163. package/src/error-tracker/utils.ts +18 -0
  164. package/src/http-client/middleware/cookie.ts +73 -0
  165. package/src/{helpers/api/middlewares/trace-request-middleware.ts → http-client/middleware/tracing.ts} +28 -35
  166. package/src/http-client/types.ts +8 -0
  167. package/src/http-client/utils.ts +76 -0
  168. package/src/http-server/constants.ts +4 -0
  169. package/src/http-server/handler/health-check.ts +13 -0
  170. package/src/http-server/middleware/logging.ts +34 -0
  171. package/src/http-server/middleware/metrics.ts +87 -0
  172. package/src/http-server/middleware/tracing.ts +35 -0
  173. package/src/http-server/types.ts +29 -0
  174. package/src/http-server/utils.ts +105 -0
  175. package/src/logger/handler/console.ts +35 -0
  176. package/src/logger/handler/sentry.ts +38 -0
  177. package/src/logger/index.ts +31 -0
  178. package/src/logger/types.ts +28 -0
  179. package/src/metrics/constants.ts +4 -0
  180. package/src/metrics/node.ts +54 -0
  181. package/src/preset/index.ts +24 -0
  182. package/src/preset/node/index.ts +101 -0
  183. package/src/preset/node/response.ts +57 -0
  184. package/src/preset/types.ts +9 -0
  185. package/src/saga-runner/index.ts +59 -0
  186. package/src/saga-runner/types.ts +13 -0
  187. package/src/tokens.ts +54 -0
  188. package/src/tracer/node.ts +40 -0
  189. package/src/tracer/types.ts +3 -0
  190. package/src/utils/browser/analytics/__test__/data-layer.test.ts +50 -0
  191. package/src/utils/browser/analytics/__test__/oko.test.tsx +143 -0
  192. package/src/utils/browser/analytics/data-layer.ts +12 -0
  193. package/src/{helpers/analytics/index.ts → utils/browser/analytics/oko.ts} +10 -15
  194. package/src/utils/browser/storage/index.ts +75 -0
  195. package/src/utils/number.ts +8 -0
  196. package/src/utils/react/error-handlers/__test__/__snapshots__/index.test.tsx.snap +27 -0
  197. package/src/utils/react/error-handlers/__test__/index.test.tsx +64 -0
  198. package/src/utils/react/error-handlers/index.tsx +62 -0
  199. package/src/utils/redux/__test__/remote-data.test.ts +50 -0
  200. package/src/utils/redux/remote-data.ts +34 -0
  201. package/src/utils/redux-saga/__test__/take-chain.test.ts +141 -0
  202. package/src/utils/redux-saga/take-chain.ts +65 -0
  203. package/src/utils/webpack/module-federation/__test__/index.test.ts +246 -0
  204. package/src/utils/webpack/module-federation/index.ts +92 -0
  205. package/src/utils/webpack/module-federation/types.ts +44 -0
  206. package/src/utils/webpack/module-federation/utils.ts +43 -0
  207. package/cache/helpers.d.ts +0 -4
  208. package/cache/helpers.js +0 -39
  209. package/cache/helpers.js.map +0 -1
  210. package/cache/local-storage.d.ts +0 -34
  211. package/cache/local-storage.js +0 -90
  212. package/cache/local-storage.js.map +0 -1
  213. package/cache/redis.d.ts +0 -10
  214. package/cache/redis.js +0 -54
  215. package/cache/redis.js.map +0 -1
  216. package/cache/wrap-in-trace.d.ts +0 -8
  217. package/cache/wrap-in-trace.js +0 -68
  218. package/cache/wrap-in-trace.js.map +0 -1
  219. package/config/create.d.ts +0 -8
  220. package/config/create.js +0 -32
  221. package/config/create.js.map +0 -1
  222. package/config/helpers.d.ts +0 -11
  223. package/config/helpers.js +0 -71
  224. package/config/helpers.js.map +0 -1
  225. package/config/validate.d.ts +0 -18
  226. package/config/validate.js +0 -107
  227. package/config/validate.js.map +0 -1
  228. package/container/create-inject.d.ts +0 -7
  229. package/container/create-inject.js +0 -36
  230. package/container/create-inject.js.map +0 -1
  231. package/container/get-dependencies.d.ts +0 -13
  232. package/container/get-dependencies.js +0 -54
  233. package/container/get-dependencies.js.map +0 -1
  234. package/container/index.d.ts +0 -15
  235. package/container/index.js +0 -175
  236. package/container/index.js.map +0 -1
  237. package/container/is-container.d.ts +0 -7
  238. package/container/is-container.js +0 -17
  239. package/container/is-container.js.map +0 -1
  240. package/container/service-not-found-error.d.ts +0 -10
  241. package/container/service-not-found-error.js +0 -18
  242. package/container/service-not-found-error.js.map +0 -1
  243. package/create-proxy/create-proxy-middleware/index.d.ts +0 -16
  244. package/create-proxy/create-proxy-middleware/index.js +0 -47
  245. package/create-proxy/create-proxy-middleware/index.js.map +0 -1
  246. package/create-proxy/index.d.ts +0 -12
  247. package/create-proxy/index.js +0 -25
  248. package/create-proxy/index.js.map +0 -1
  249. package/create-response-sender/index.d.ts +0 -8
  250. package/create-response-sender/index.js +0 -42
  251. package/create-response-sender/index.js.map +0 -1
  252. package/get-dynamic-data/index.d.ts +0 -8
  253. package/get-dynamic-data/index.js +0 -23
  254. package/get-dynamic-data/index.js.map +0 -1
  255. package/graceful-shutdown/index.d.ts +0 -26
  256. package/graceful-shutdown/index.js +0 -87
  257. package/graceful-shutdown/index.js.map +0 -1
  258. package/helpers/add-error-handling/index.d.ts +0 -1
  259. package/helpers/add-error-handling/index.js +0 -42
  260. package/helpers/add-error-handling/index.js.map +0 -1
  261. package/helpers/analytics/index.js.map +0 -1
  262. package/helpers/api/create-enhancer.d.ts +0 -12
  263. package/helpers/api/create-enhancer.js +0 -52
  264. package/helpers/api/create-enhancer.js.map +0 -1
  265. package/helpers/api/create-instance.d.ts +0 -11
  266. package/helpers/api/create-instance.js +0 -39
  267. package/helpers/api/create-instance.js.map +0 -1
  268. package/helpers/api/middlewares/collect-cookie-middleware.d.ts +0 -10
  269. package/helpers/api/middlewares/collect-cookie-middleware.js +0 -39
  270. package/helpers/api/middlewares/collect-cookie-middleware.js.map +0 -1
  271. package/helpers/api/middlewares/count-api-response-time.d.ts +0 -12
  272. package/helpers/api/middlewares/count-api-response-time.js +0 -39
  273. package/helpers/api/middlewares/count-api-response-time.js.map +0 -1
  274. package/helpers/api/middlewares/error-handlers-middlewares.d.ts +0 -5
  275. package/helpers/api/middlewares/error-handlers-middlewares.js +0 -114
  276. package/helpers/api/middlewares/error-handlers-middlewares.js.map +0 -1
  277. package/helpers/api/middlewares/helpers.d.ts +0 -11
  278. package/helpers/api/middlewares/helpers.js +0 -27
  279. package/helpers/api/middlewares/helpers.js.map +0 -1
  280. package/helpers/api/middlewares/pass-headers-middleware.d.ts +0 -3
  281. package/helpers/api/middlewares/pass-headers-middleware.js +0 -27
  282. package/helpers/api/middlewares/pass-headers-middleware.js.map +0 -1
  283. package/helpers/api/middlewares/prepare-request-headers.d.ts +0 -5
  284. package/helpers/api/middlewares/prepare-request-headers.js +0 -20
  285. package/helpers/api/middlewares/prepare-request-headers.js.map +0 -1
  286. package/helpers/api/middlewares/set-http-agents-middleware.d.ts +0 -15
  287. package/helpers/api/middlewares/set-http-agents-middleware.js +0 -34
  288. package/helpers/api/middlewares/set-http-agents-middleware.js.map +0 -1
  289. package/helpers/api/middlewares/stages-trace-middleware.d.ts +0 -17
  290. package/helpers/api/middlewares/stages-trace-middleware.js +0 -57
  291. package/helpers/api/middlewares/stages-trace-middleware.js.map +0 -1
  292. package/helpers/api/middlewares/trace-request-middleware.d.ts +0 -24
  293. package/helpers/api/middlewares/trace-request-middleware.js +0 -69
  294. package/helpers/api/middlewares/trace-request-middleware.js.map +0 -1
  295. package/helpers/api/server-adapter/__fixtures__/fake-keys.d.ts +0 -10
  296. package/helpers/api/server-adapter/__fixtures__/fake-keys.js +0 -61
  297. package/helpers/api/server-adapter/__fixtures__/fake-keys.js.map +0 -1
  298. package/helpers/api/server-adapter/constants.d.ts +0 -5
  299. package/helpers/api/server-adapter/constants.js +0 -16
  300. package/helpers/api/server-adapter/constants.js.map +0 -1
  301. package/helpers/api/server-adapter/helpers.d.ts +0 -26
  302. package/helpers/api/server-adapter/helpers.js +0 -208
  303. package/helpers/api/server-adapter/helpers.js.map +0 -1
  304. package/helpers/api/server-adapter/index.d.ts +0 -10
  305. package/helpers/api/server-adapter/index.js +0 -118
  306. package/helpers/api/server-adapter/index.js.map +0 -1
  307. package/helpers/development/use-dot-env.d.ts +0 -6
  308. package/helpers/development/use-dot-env.js +0 -11
  309. package/helpers/development/use-dot-env.js.map +0 -1
  310. package/helpers/get-params/index.d.ts +0 -4
  311. package/helpers/get-params/index.js +0 -51
  312. package/helpers/get-params/index.js.map +0 -1
  313. package/helpers/http/request-getters.d.ts +0 -5
  314. package/helpers/http/request-getters.js +0 -49
  315. package/helpers/http/request-getters.js.map +0 -1
  316. package/helpers/http/statuses-validator.d.ts +0 -3
  317. package/helpers/http/statuses-validator.js +0 -25
  318. package/helpers/http/statuses-validator.js.map +0 -1
  319. package/helpers/logger/create-pino-instance/index.d.ts +0 -6
  320. package/helpers/logger/create-pino-instance/index.js +0 -39
  321. package/helpers/logger/create-pino-instance/index.js.map +0 -1
  322. package/helpers/logger/format-time/index.d.ts +0 -6
  323. package/helpers/logger/format-time/index.js +0 -9
  324. package/helpers/logger/format-time/index.js.map +0 -1
  325. package/helpers/metrics/index.d.ts +0 -23
  326. package/helpers/metrics/index.js +0 -42
  327. package/helpers/metrics/index.js.map +0 -1
  328. package/helpers/prometheus/index.d.ts +0 -4
  329. package/helpers/prometheus/index.js +0 -13
  330. package/helpers/prometheus/index.js.map +0 -1
  331. package/helpers/prometheus/measure-middleware.d.ts +0 -5
  332. package/helpers/prometheus/measure-middleware.js +0 -69
  333. package/helpers/prometheus/measure-middleware.js.map +0 -1
  334. package/helpers/prometheus/metric-adapter.d.ts +0 -36
  335. package/helpers/prometheus/metric-adapter.js +0 -98
  336. package/helpers/prometheus/metric-adapter.js.map +0 -1
  337. package/helpers/react/error-handlers/index.d.ts +0 -40
  338. package/helpers/react/error-handlers/index.js +0 -52
  339. package/helpers/react/error-handlers/index.js.map +0 -1
  340. package/helpers/redux/constants.d.ts +0 -5
  341. package/helpers/redux/constants.js +0 -14
  342. package/helpers/redux/constants.js.map +0 -1
  343. package/helpers/redux/create-compose-middleware.d.ts +0 -15
  344. package/helpers/redux/create-compose-middleware.js +0 -23
  345. package/helpers/redux/create-compose-middleware.js.map +0 -1
  346. package/helpers/redux/get-dev-compose-creator.d.ts +0 -6
  347. package/helpers/redux/get-dev-compose-creator.js +0 -13
  348. package/helpers/redux/get-dev-compose-creator.js.map +0 -1
  349. package/helpers/redux/prepare-on-ready.d.ts +0 -9
  350. package/helpers/redux/prepare-on-ready.js +0 -16
  351. package/helpers/redux/prepare-on-ready.js.map +0 -1
  352. package/helpers/redux/remote-data.d.ts +0 -40
  353. package/helpers/redux/remote-data.js +0 -91
  354. package/helpers/redux/remote-data.js.map +0 -1
  355. package/helpers/redux/selector/statuses.d.ts +0 -23
  356. package/helpers/redux/selector/statuses.js +0 -34
  357. package/helpers/redux/selector/statuses.js.map +0 -1
  358. package/helpers/redux/wait-on-store-readiness.d.ts +0 -11
  359. package/helpers/redux/wait-on-store-readiness.js +0 -29
  360. package/helpers/redux/wait-on-store-readiness.js.map +0 -1
  361. package/helpers/render/get-react-markup-data.d.ts +0 -14
  362. package/helpers/render/get-react-markup-data.js +0 -20
  363. package/helpers/render/get-react-markup-data.js.map +0 -1
  364. package/helpers/render/index.d.ts +0 -21
  365. package/helpers/render/index.js +0 -72
  366. package/helpers/render/index.js.map +0 -1
  367. package/helpers/render/render-app.d.ts +0 -12
  368. package/helpers/render/render-app.js +0 -12
  369. package/helpers/render/render-app.js.map +0 -1
  370. package/helpers/saga/__fixtures__/do-safe-request.d.ts +0 -43
  371. package/helpers/saga/__fixtures__/do-safe-request.js +0 -50
  372. package/helpers/saga/__fixtures__/do-safe-request.js.map +0 -1
  373. package/helpers/saga/cache-result.d.ts +0 -46
  374. package/helpers/saga/cache-result.js +0 -71
  375. package/helpers/saga/cache-result.js.map +0 -1
  376. package/helpers/saga/create-store.d.ts +0 -20
  377. package/helpers/saga/create-store.js +0 -106
  378. package/helpers/saga/create-store.js.map +0 -1
  379. package/helpers/saga/do-safe-request.d.ts +0 -38
  380. package/helpers/saga/do-safe-request.js +0 -45
  381. package/helpers/saga/do-safe-request.js.map +0 -1
  382. package/helpers/saga/safe-request.d.ts +0 -7
  383. package/helpers/saga/safe-request.js +0 -15
  384. package/helpers/saga/safe-request.js.map +0 -1
  385. package/helpers/saga/take-chain.d.ts +0 -20
  386. package/helpers/saga/take-chain.js +0 -56
  387. package/helpers/saga/take-chain.js.map +0 -1
  388. package/helpers/tracer/create-child-tracing-middleware.d.ts +0 -7
  389. package/helpers/tracer/create-child-tracing-middleware.js +0 -40
  390. package/helpers/tracer/create-child-tracing-middleware.js.map +0 -1
  391. package/helpers/tracer/index.d.ts +0 -24
  392. package/helpers/tracer/index.js +0 -144
  393. package/helpers/tracer/index.js.map +0 -1
  394. package/helpers/utils/check-feature-by-segment.d.ts +0 -2
  395. package/helpers/utils/check-feature-by-segment.js +0 -31
  396. package/helpers/utils/check-feature-by-segment.js.map +0 -1
  397. package/helpers/utils/format-object-keys.d.ts +0 -6
  398. package/helpers/utils/format-object-keys.js +0 -27
  399. package/helpers/utils/format-object-keys.js.map +0 -1
  400. package/helpers/utils/get-ms-from-hrt.d.ts +0 -2
  401. package/helpers/utils/get-ms-from-hrt.js +0 -22
  402. package/helpers/utils/get-ms-from-hrt.js.map +0 -1
  403. package/helpers/utils/is-match-pattern-list.d.ts +0 -8
  404. package/helpers/utils/is-match-pattern-list.js +0 -16
  405. package/helpers/utils/is-match-pattern-list.js.map +0 -1
  406. package/helpers/utils/is-not-empty-array.d.ts +0 -2
  407. package/helpers/utils/is-not-empty-array.js +0 -12
  408. package/helpers/utils/is-not-empty-array.js.map +0 -1
  409. package/helpers/utils/is-not-empty-string.d.ts +0 -2
  410. package/helpers/utils/is-not-empty-string.js +0 -15
  411. package/helpers/utils/is-not-empty-string.js.map +0 -1
  412. package/helpers/utils/is-numeric.d.ts +0 -7
  413. package/helpers/utils/is-numeric.js +0 -16
  414. package/helpers/utils/is-numeric.js.map +0 -1
  415. package/helpers/utils/wrap-in-measure-event.d.ts +0 -9
  416. package/helpers/utils/wrap-in-measure-event.js +0 -50
  417. package/helpers/utils/wrap-in-measure-event.js.map +0 -1
  418. package/logger/create-logger-middleware/index.d.ts +0 -14
  419. package/logger/create-logger-middleware/index.js +0 -41
  420. package/logger/create-logger-middleware/index.js.map +0 -1
  421. package/logger/create-sentry-instance/index.d.ts +0 -29
  422. package/logger/create-sentry-instance/index.js +0 -63
  423. package/logger/create-sentry-instance/index.js.map +0 -1
  424. package/logger/create-sentry-middleware/index.d.ts +0 -14
  425. package/logger/create-sentry-middleware/index.js +0 -19
  426. package/logger/create-sentry-middleware/index.js.map +0 -1
  427. package/logger/handler-creators/index.d.ts +0 -5
  428. package/logger/handler-creators/index.js +0 -41
  429. package/logger/handler-creators/index.js.map +0 -1
  430. package/logger/initialize-sentry-creator/index.d.ts +0 -17
  431. package/logger/initialize-sentry-creator/index.js +0 -35
  432. package/logger/initialize-sentry-creator/index.js.map +0 -1
  433. package/logger/sentry-logger/index.d.ts +0 -9
  434. package/logger/sentry-logger/index.js +0 -36
  435. package/logger/sentry-logger/index.js.map +0 -1
  436. package/module-federation/__example__/webpack-config.example.d.ts +0 -366
  437. package/module-federation/__example__/webpack-config.example.js +0 -51
  438. package/module-federation/__example__/webpack-config.example.js.map +0 -1
  439. package/module-federation/enhanced-module-federation-plugin.d.ts +0 -46
  440. package/module-federation/enhanced-module-federation-plugin.js +0 -72
  441. package/module-federation/enhanced-module-federation-plugin.js.map +0 -1
  442. package/module-federation/utils/index.d.ts +0 -8
  443. package/module-federation/utils/index.js +0 -28
  444. package/module-federation/utils/index.js.map +0 -1
  445. package/observe-middleware/index.d.ts +0 -9
  446. package/observe-middleware/index.js +0 -67
  447. package/observe-middleware/index.js.map +0 -1
  448. package/set-header-middleware/create.d.ts +0 -10
  449. package/set-header-middleware/create.js +0 -16
  450. package/set-header-middleware/create.js.map +0 -1
  451. package/src/cache/helpers.js +0 -32
  452. package/src/cache/local-storage.ts +0 -92
  453. package/src/cache/redis.js +0 -79
  454. package/src/cache/wrap-in-trace.js +0 -57
  455. package/src/config/create.js +0 -33
  456. package/src/config/helpers.js +0 -71
  457. package/src/config/validate.js +0 -114
  458. package/src/container/create-inject.js +0 -32
  459. package/src/container/get-dependencies.js +0 -46
  460. package/src/container/index.js +0 -188
  461. package/src/container/is-container.js +0 -14
  462. package/src/container/service-not-found-error.js +0 -14
  463. package/src/create-proxy/create-proxy-middleware/index.js +0 -47
  464. package/src/create-proxy/index.js +0 -27
  465. package/src/create-response-sender/index.js +0 -48
  466. package/src/get-dynamic-data/index.js +0 -26
  467. package/src/graceful-shutdown/index.js +0 -97
  468. package/src/helpers/add-error-handling/index.js +0 -24
  469. package/src/helpers/api/create-enhancer.js +0 -52
  470. package/src/helpers/api/create-instance.js +0 -42
  471. package/src/helpers/api/middlewares/collect-cookie-middleware.js +0 -27
  472. package/src/helpers/api/middlewares/count-api-response-time.js +0 -31
  473. package/src/helpers/api/middlewares/error-handlers-middlewares.js +0 -124
  474. package/src/helpers/api/middlewares/helpers.js +0 -26
  475. package/src/helpers/api/middlewares/pass-headers-middleware.js +0 -19
  476. package/src/helpers/api/middlewares/prepare-request-headers.js +0 -18
  477. package/src/helpers/api/middlewares/set-http-agents-middleware.js +0 -22
  478. package/src/helpers/api/middlewares/stages-trace-middleware.js +0 -46
  479. package/src/helpers/api/server-adapter/__fixtures__/fake-keys.js +0 -58
  480. package/src/helpers/api/server-adapter/constants.js +0 -12
  481. package/src/helpers/api/server-adapter/helpers.js +0 -244
  482. package/src/helpers/api/server-adapter/index.js +0 -155
  483. package/src/helpers/development/use-dot-env.js +0 -9
  484. package/src/helpers/get-params/index.js +0 -59
  485. package/src/helpers/http/request-getters.js +0 -42
  486. package/src/helpers/http/statuses-validator.js +0 -20
  487. package/src/helpers/logger/create-pino-instance/index.js +0 -41
  488. package/src/helpers/logger/format-time/index.js +0 -6
  489. package/src/helpers/metrics/index.js +0 -40
  490. package/src/helpers/prometheus/index.js +0 -9
  491. package/src/helpers/prometheus/measure-middleware.js +0 -73
  492. package/src/helpers/prometheus/metric-adapter.js +0 -99
  493. package/src/helpers/react/error-handlers/index.tsx +0 -68
  494. package/src/helpers/redux/constants.js +0 -10
  495. package/src/helpers/redux/create-compose-middleware.js +0 -24
  496. package/src/helpers/redux/get-dev-compose-creator.js +0 -9
  497. package/src/helpers/redux/prepare-on-ready.js +0 -16
  498. package/src/helpers/redux/remote-data.js +0 -124
  499. package/src/helpers/redux/selector/statuses.js +0 -30
  500. package/src/helpers/redux/wait-on-store-readiness.js +0 -40
  501. package/src/helpers/render/get-react-markup-data.js +0 -18
  502. package/src/helpers/render/index.js +0 -69
  503. package/src/helpers/render/render-app.js +0 -15
  504. package/src/helpers/saga/__fixtures__/do-safe-request.js +0 -49
  505. package/src/helpers/saga/cache-result.js +0 -77
  506. package/src/helpers/saga/create-store.js +0 -102
  507. package/src/helpers/saga/do-safe-request.js +0 -47
  508. package/src/helpers/saga/safe-request.js +0 -11
  509. package/src/helpers/saga/take-chain.js +0 -53
  510. package/src/helpers/tracer/create-child-tracing-middleware.js +0 -42
  511. package/src/helpers/tracer/index.js +0 -171
  512. package/src/helpers/utils/check-feature-by-segment.js +0 -32
  513. package/src/helpers/utils/format-object-keys.js +0 -23
  514. package/src/helpers/utils/get-ms-from-hrt.js +0 -16
  515. package/src/helpers/utils/is-match-pattern-list.js +0 -13
  516. package/src/helpers/utils/is-not-empty-array.js +0 -8
  517. package/src/helpers/utils/is-not-empty-string.js +0 -11
  518. package/src/helpers/utils/is-numeric.ts +0 -12
  519. package/src/helpers/utils/wrap-in-measure-event.js +0 -35
  520. package/src/logger/create-logger-middleware/index.js +0 -46
  521. package/src/logger/create-sentry-instance/index.js +0 -74
  522. package/src/logger/create-sentry-middleware/index.js +0 -16
  523. package/src/logger/handler-creators/index.js +0 -38
  524. package/src/logger/initialize-sentry-creator/index.js +0 -43
  525. package/src/logger/sentry-logger/index.js +0 -33
  526. package/src/module-federation/__example__/webpack-config.example.js +0 -57
  527. package/src/module-federation/enhanced-module-federation-plugin.js +0 -92
  528. package/src/module-federation/utils/index.js +0 -32
  529. package/src/observe-middleware/index.js +0 -70
  530. package/src/set-header-middleware/create.js +0 -17
@@ -0,0 +1,35 @@
1
+ import { RESPONSE_EVENT } from '../constants';
2
+ import { propagation, ROOT_CONTEXT } from '@opentelemetry/api';
3
+ import type { Tracer } from '../../tracer/types';
4
+ import type { Handler } from 'express';
5
+
6
+ /**
7
+ * Возвращает новый middleware для трассировки стадий входящего запроса.
8
+ * @param tracer Tracer.
9
+ * @return Middleware.
10
+ */
11
+ export function tracingMiddleware(tracer: Tracer): Handler {
12
+ return (req, res, next) => {
13
+ const rootContext = propagation.extract(ROOT_CONTEXT, req.headers);
14
+ const rootSpan = tracer.startSpan('response', undefined, rootContext);
15
+
16
+ res.locals.tracing = {
17
+ rootSpan,
18
+ rootContext,
19
+ };
20
+
21
+ res.once(RESPONSE_EVENT.renderStart, () => {
22
+ res.locals.tracing.renderSpan = tracer.startSpan('render', undefined, rootContext);
23
+ });
24
+
25
+ res.once(RESPONSE_EVENT.renderFinish, () => {
26
+ res.locals.tracing.renderSpan.end();
27
+ });
28
+
29
+ res.once('finish', () => {
30
+ rootSpan.end();
31
+ });
32
+
33
+ next();
34
+ };
35
+ }
@@ -0,0 +1,29 @@
1
+ import type { Request, Response, NextFunction, Handler, ErrorRequestHandler } from 'express';
2
+
3
+ export interface ResponseContext {
4
+ req: Request;
5
+ res: Response;
6
+ next: NextFunction;
7
+ }
8
+
9
+ export interface PageAssets {
10
+ js: string;
11
+ css: string;
12
+ }
13
+
14
+ export interface ConventionalJson {
15
+ markup: string;
16
+ bundle_js: string;
17
+ bundle_css: string;
18
+ critical_js?: string;
19
+ critical_css?: string;
20
+ meta?: any;
21
+ }
22
+
23
+ export interface DefaultMiddleware {
24
+ start: Handler[];
25
+ logging: Handler[];
26
+ tracing: Handler[];
27
+ metrics: Handler[];
28
+ finish: Array<Handler | ErrorRequestHandler>;
29
+ }
@@ -0,0 +1,105 @@
1
+ import type { Request, Response } from 'express';
2
+ import type { ConventionalJson, PageAssets } from './types';
3
+ import { isIP } from 'net';
4
+
5
+ /**
6
+ * Определяет IP входящего запроса.
7
+ * @param req Входящий запрос.
8
+ * @return IP.
9
+ */
10
+ export function getXClientIp(req: Request): string {
11
+ const headerValue =
12
+ req.get('x-client-ip') || req.get('x-forwarded-for') || req.socket.remoteAddress || '';
13
+
14
+ return isIP(headerValue) ? headerValue : '';
15
+ }
16
+
17
+ /**
18
+ * Определяет служебные заголовки по соглашению.
19
+ * @param req Входящий запрос.
20
+ * @return Служебные заголовки.
21
+ */
22
+ export function getServiceHeaders(req: Request): Record<string, string | undefined> {
23
+ const result: Record<string, string | undefined> = {};
24
+
25
+ for (const [key] of Object.entries(req.headers)) {
26
+ if (key.toLowerCase().indexOf('simaland-') === 0) {
27
+ result[key] = req.header(key);
28
+ }
29
+ }
30
+
31
+ return result;
32
+ }
33
+
34
+ /* eslint-disable require-jsdoc, jsdoc/require-jsdoc */
35
+ export class PageResponse {
36
+ private type: 'html' | 'json';
37
+ private html: string;
38
+ private assets: PageAssets;
39
+
40
+ static create() {
41
+ return new PageResponse();
42
+ }
43
+
44
+ static defineFormat(req: Request): PageResponse['type'] {
45
+ let result: PageResponse['type'] = 'html';
46
+
47
+ if ((req.header('accept') || '').toLowerCase().includes('application/json')) {
48
+ result = 'json';
49
+ }
50
+
51
+ return result;
52
+ }
53
+
54
+ constructor() {
55
+ this.type = 'html';
56
+ this.html = '';
57
+ this.assets = { js: '', css: '' };
58
+ }
59
+
60
+ markup(html: string) {
61
+ this.html = html;
62
+ return this;
63
+ }
64
+
65
+ script(url: string) {
66
+ this.assets.js = url;
67
+ return this;
68
+ }
69
+
70
+ style(url: string) {
71
+ this.assets.css = url;
72
+ return this;
73
+ }
74
+
75
+ format(type: PageResponse['type']) {
76
+ this.type = type;
77
+ return this;
78
+ }
79
+
80
+ send(res: Response) {
81
+ switch (this.type) {
82
+ case 'json': {
83
+ const result: ConventionalJson = {
84
+ markup: this.html,
85
+ bundle_js: this.assets.js,
86
+ bundle_css: this.assets.css,
87
+ };
88
+
89
+ res.json(result);
90
+ break;
91
+ }
92
+ case 'html': {
93
+ res.setHeader('simaland-bundle-js', this.assets.js);
94
+ res.setHeader('simaland-bundle-css', this.assets.css);
95
+
96
+ // @todo dev-шаблон?
97
+ res.send(this.html);
98
+ break;
99
+ }
100
+ default:
101
+ throw Error(`Unknown response format ${String(this.type)}`);
102
+ }
103
+ }
104
+ }
105
+ /* eslint-enable require-jsdoc, jsdoc/require-jsdoc */
@@ -0,0 +1,35 @@
1
+ import type { BaseConfig } from '../../config/types';
2
+ import pino from 'pino';
3
+ import pinoPretty from 'pino-pretty';
4
+ import { LoggerEventHandler } from '../types';
5
+
6
+ /**
7
+ * Возвращает новый handler для logger'а для вывода событий в терминал.
8
+ * @param config Конфиг.
9
+ * @return Handler.
10
+ */
11
+ export function createConsoleHandler(config: BaseConfig): LoggerEventHandler {
12
+ const isProd = config.env === 'production';
13
+
14
+ const logger = pino(
15
+ isProd
16
+ ? {
17
+ formatters: {
18
+ // ВАЖНО: для Fluent необходимо наличие поля level: string
19
+ level: label => ({ level: label }),
20
+ },
21
+ }
22
+ : pinoPretty({ colorize: true }),
23
+ );
24
+
25
+ return function (event) {
26
+ switch (event.type) {
27
+ case 'info':
28
+ logger.info(event.data);
29
+ break;
30
+ case 'error':
31
+ logger.error(event.data);
32
+ break;
33
+ }
34
+ };
35
+ }
@@ -0,0 +1,38 @@
1
+ import type { SentryLib } from '../../error-tracker/types';
2
+ import type { LoggerEventHandler } from '../types';
3
+ import { SentryError } from '../../error-tracker/utils';
4
+
5
+ /**
6
+ * Возвращает новый handler для logger'а для отправки событий в Sentry.
7
+ * @param sentry Набор данных для работы с Sentry.
8
+ * @return Handler.
9
+ */
10
+ export function createSentryHandler(sentry: SentryLib): LoggerEventHandler {
11
+ return event => {
12
+ if (event.type === 'error') {
13
+ const error = event.data;
14
+
15
+ if (error instanceof SentryError) {
16
+ const { level, context, extra } = error.data;
17
+
18
+ sentry.withScope(scope => {
19
+ if (level) {
20
+ scope.setLevel(level);
21
+ }
22
+
23
+ if (context) {
24
+ scope.setContext(context.key, context.data);
25
+ }
26
+
27
+ if (extra) {
28
+ scope.setExtra(extra.key, extra.data);
29
+ }
30
+
31
+ sentry.client.captureException(error);
32
+ });
33
+ } else {
34
+ sentry.client.captureException(error);
35
+ }
36
+ }
37
+ };
38
+ }
@@ -0,0 +1,31 @@
1
+ import type { Logger, LoggerEvent, LoggerEventType, LoggerEventHandler } from './types';
2
+
3
+ /**
4
+ * Возвращает новый logger - объект для журналирования событий подобно console.
5
+ * @return Logger.
6
+ */
7
+ export function createLogger(): Logger {
8
+ const handlers: LoggerEventHandler[] = [];
9
+
10
+ // eslint-disable-next-line require-jsdoc, jsdoc/require-jsdoc
11
+ function createMethod(type: LoggerEventType) {
12
+ return function (data: any) {
13
+ const event: LoggerEvent = { type, data };
14
+ for (const handler of handlers) {
15
+ handler(event);
16
+ }
17
+ };
18
+ }
19
+
20
+ return {
21
+ log: createMethod('log'),
22
+ info: createMethod('info'),
23
+ warn: createMethod('warn'),
24
+ error: createMethod('error'),
25
+ debug: createMethod('debug'),
26
+
27
+ subscribe: handler => {
28
+ handlers.push(handler);
29
+ },
30
+ };
31
+ }
@@ -0,0 +1,28 @@
1
+ export type LoggerEventType = 'error' | 'log' | 'info' | 'warn' | 'debug';
2
+
3
+ export interface LoggerEvent {
4
+ type: LoggerEventType;
5
+ data: unknown;
6
+ }
7
+
8
+ export interface LoggerEventHandler {
9
+ (event: LoggerEvent): void;
10
+ }
11
+
12
+ export interface Logger {
13
+ error(data: any): void;
14
+ log(data: any): void;
15
+ info(data: any): void;
16
+ warn(data: any): void;
17
+ debug(data: any): void;
18
+ subscribe(handler: LoggerEventHandler): void;
19
+ }
20
+
21
+ export interface ConventionalFluentInfo {
22
+ version: string;
23
+ latency: number;
24
+ method: string;
25
+ remote_ip: string;
26
+ route: string;
27
+ status: number;
28
+ }
@@ -0,0 +1,4 @@
1
+ export const ConventionalLabels = {
2
+ HTTP_RESPONSE: ['version', 'route', 'code', 'method'],
3
+ SSR: ['version', 'route', 'method'],
4
+ } as const;
@@ -0,0 +1,54 @@
1
+ import express, { Application } from 'express';
2
+ import * as PromClient from 'prom-client';
3
+ import { ConventionalLabels } from './constants';
4
+
5
+ export interface DefaultNodeMetrics {
6
+ requestCount: PromClient.Counter<typeof ConventionalLabels.HTTP_RESPONSE[number]>;
7
+ responseDuration: PromClient.Histogram<typeof ConventionalLabels.HTTP_RESPONSE[number]>;
8
+ renderDuration: PromClient.Histogram<typeof ConventionalLabels.SSR[number]>;
9
+ }
10
+
11
+ /**
12
+ * Возвращает новое express-приложение, настроенное для выдачи информации о метриках.
13
+ * @return Приложение.
14
+ */
15
+ export function createMetricsHttpApp(): Application {
16
+ const app = express();
17
+
18
+ PromClient.collectDefaultMetrics();
19
+
20
+ app.get('/', async function (req, res) {
21
+ const metrics = await PromClient.register.metrics();
22
+
23
+ res.setHeader('Content-Type', PromClient.register.contentType);
24
+ res.send(metrics);
25
+ });
26
+
27
+ return app;
28
+ }
29
+
30
+ /**
31
+ * Возвращает набор готовых метрик по умолчанию для приложений.
32
+ * @return Набор метрик.
33
+ */
34
+ export function createDefaultMetrics(): DefaultNodeMetrics {
35
+ return {
36
+ requestCount: new PromClient.Counter({
37
+ name: 'http_request_count',
38
+ help: 'Incoming HTTP request count',
39
+ labelNames: ConventionalLabels.HTTP_RESPONSE,
40
+ }),
41
+ responseDuration: new PromClient.Histogram({
42
+ name: 'http_response_duration_ms',
43
+ help: 'Duration of incoming HTTP requests in ms',
44
+ labelNames: ConventionalLabels.HTTP_RESPONSE,
45
+ buckets: [30, 100, 200, 500, 1000, 2500, 5000, 10000],
46
+ }),
47
+ renderDuration: new PromClient.Histogram({
48
+ name: 'render_duration_ms',
49
+ help: 'Duration of SSR ms',
50
+ labelNames: ConventionalLabels.SSR,
51
+ buckets: [0.1, 15, 50, 100, 250, 500, 800, 1500],
52
+ }),
53
+ };
54
+ }
@@ -0,0 +1,24 @@
1
+ import type { Application } from '../container/application';
2
+ import type { Provider, Token } from '../container/types';
3
+ import type { Preset, PresetEntry } from './types';
4
+
5
+ /**
6
+ * Возвращает новый "preset" приложения - набор предустановленных компонентов которые можно переопределять.
7
+ * @param defaults Предустановленные зависимости.
8
+ * @return Preset.
9
+ */
10
+ export function createPreset(defaults: PresetEntry[]): Preset {
11
+ const registry = new Map<Token<any>, Provider<any>>(defaults);
12
+
13
+ return {
14
+ override: <T>(token: Token<T>, provider: Provider<T>) => {
15
+ registry.set(token, provider);
16
+ },
17
+
18
+ apply: (container: Application) => {
19
+ for (const [token, provider] of registry) {
20
+ container.bind(token).toProvider(provider);
21
+ }
22
+ },
23
+ };
24
+ }
@@ -0,0 +1,101 @@
1
+ /* eslint-disable require-jsdoc */
2
+ import type { Preset } from '../types';
3
+ import type { Provider } from '../../container/types';
4
+ import type { BaseConfig } from '../../config/types';
5
+ import type { Logger } from '../../logger/types';
6
+ import type { Tracer } from '@opentelemetry/api';
7
+ import type { DefaultMiddleware } from '../../http-server/types';
8
+ import { KnownToken as Token } from '../../tokens';
9
+ import { createPreset } from '..';
10
+ import { createConfigSource } from '../../config/node';
11
+ import { createBaseConfig } from '../../config';
12
+ import { createLogger } from '../../logger';
13
+ import { createTracer } from '../../tracer/node';
14
+ import { createConsoleHandler } from '../../logger/handler/console';
15
+ import { createSentryHandler } from '../../logger/handler/sentry';
16
+ import { createSentryLib } from '../../error-tracker/node';
17
+ import { loggingMiddleware } from '../../http-server/middleware/logging';
18
+ import { tracingMiddleware } from '../../http-server/middleware/tracing';
19
+ import {
20
+ renderMetricsMiddleware,
21
+ responseMetricsMiddleware,
22
+ } from '../../http-server/middleware/metrics';
23
+ import { createDefaultMetrics, createMetricsHttpApp } from '../../metrics/node';
24
+ import { JaegerExporter } from '@opentelemetry/exporter-jaeger';
25
+ import { create } from 'middleware-axios';
26
+ import Express from 'express';
27
+ import { Handlers } from '@sentry/node';
28
+
29
+ /**
30
+ * Возвращает preset с зависимостями по умолчанию для frontend-микросервисов на Node.js.
31
+ * @return Preset.
32
+ */
33
+ export function PresetNode(): Preset {
34
+ return createPreset([
35
+ [Token.Config.source, createConfigSource],
36
+ [Token.Config.base, provideBaseConfig],
37
+ [Token.logger, provideLogger],
38
+ [Token.tracer, provideTracer],
39
+ [Token.Http.Client.factory, () => create],
40
+ [Token.Http.Server.factory, () => Express],
41
+ [Token.Http.Server.Defaults.middleware, provideDefaultMiddleware],
42
+ [Token.Metrics.httpApp, createMetricsHttpApp],
43
+ ]);
44
+ }
45
+
46
+ export const provideBaseConfig: Provider<BaseConfig> = resolve => {
47
+ const source = resolve(Token.Config.source);
48
+
49
+ return createBaseConfig(source);
50
+ };
51
+
52
+ export const provideLogger: Provider<Logger> = resolve => {
53
+ const source = resolve(Token.Config.source);
54
+ const config = resolve(Token.Config.base);
55
+
56
+ const sentry = createSentryLib({
57
+ dsn: source.get('SENTRY_DSN'),
58
+ release: source.get('SENTRY_RELEASE'),
59
+ environment: source.get('SENTRY_ENVIRONMENT'),
60
+ });
61
+
62
+ const logger = createLogger();
63
+ logger.subscribe(createConsoleHandler(config));
64
+ logger.subscribe(createSentryHandler(sentry));
65
+
66
+ return logger;
67
+ };
68
+
69
+ export const provideTracer: Provider<Tracer> = resolve => {
70
+ const source = resolve(Token.Config.source);
71
+
72
+ const exporter = new JaegerExporter({
73
+ endpoint: source.require('JAEGER_ENDPOINT'),
74
+ });
75
+
76
+ return createTracer(resolve(Token.Config.base), exporter);
77
+ };
78
+
79
+ export const provideDefaultMiddleware: Provider<DefaultMiddleware> = resolve => {
80
+ const config = resolve(Token.Config.base);
81
+ const logger = resolve(Token.logger);
82
+ const tracer = resolve(Token.tracer);
83
+
84
+ const metrics = createDefaultMetrics();
85
+
86
+ return {
87
+ start: [Handlers.requestHandler()],
88
+ logging: [loggingMiddleware(config, logger)],
89
+ tracing: [tracingMiddleware(tracer)],
90
+ metrics: [
91
+ responseMetricsMiddleware(config, {
92
+ counter: metrics.requestCount,
93
+ histogram: metrics.responseDuration,
94
+ }),
95
+ renderMetricsMiddleware(config, {
96
+ histogram: metrics.renderDuration,
97
+ }),
98
+ ],
99
+ finish: [Handlers.errorHandler()],
100
+ };
101
+ };
@@ -0,0 +1,57 @@
1
+ /* eslint-disable require-jsdoc */
2
+ import type { Preset } from '../types';
3
+ import type { Provider } from '../../container/types';
4
+ import type { SagaRunner } from '../../saga-runner/types';
5
+ import { KnownToken } from '../../tokens';
6
+ import { createPreset } from '..';
7
+ import { renderToString } from 'react-dom/server';
8
+ import { createSagaRunner } from '../../saga-runner';
9
+ import { RESPONSE_EVENT } from '../../http-server/constants';
10
+ import { PageResponse } from '../../http-server/utils';
11
+
12
+ /**
13
+ * Возвращает preset с зависимостями по умолчанию для работы в рамках ответа на http-запрос.
14
+ * @return Preset.
15
+ */
16
+ export function PresetResponse(): Preset {
17
+ return createPreset([
18
+ [KnownToken.Response.sagaRunner, provideSagaRunner],
19
+ [KnownToken.Response.render, provideRender],
20
+ [KnownToken.Response.main, provideMain],
21
+ ]);
22
+ }
23
+
24
+ export const provideSagaRunner: Provider<SagaRunner> = resolve => {
25
+ const logger = resolve(KnownToken.logger);
26
+ return createSagaRunner(logger);
27
+ };
28
+
29
+ export const provideRender: Provider<(el: JSX.Element) => string | Promise<string>> = resolve => {
30
+ const { res } = resolve(KnownToken.Response.context);
31
+
32
+ return function render(element: JSX.Element): string {
33
+ res.emit(RESPONSE_EVENT.renderStart);
34
+
35
+ const result = renderToString(element);
36
+
37
+ res.emit(RESPONSE_EVENT.renderFinish);
38
+
39
+ return result;
40
+ };
41
+ };
42
+
43
+ export const provideMain: Provider<() => void> = resolve => {
44
+ const context = resolve(KnownToken.Response.context);
45
+ const assets = resolve(KnownToken.Response.assets);
46
+ const prepare = resolve(KnownToken.Response.prepare);
47
+ const render = resolve(KnownToken.Response.render);
48
+
49
+ return async function main() {
50
+ PageResponse.create()
51
+ .markup(await render(await prepare()))
52
+ .script(assets.js)
53
+ .style(assets.css)
54
+ .format(PageResponse.defineFormat(context.req))
55
+ .send(context.res);
56
+ };
57
+ };
@@ -0,0 +1,9 @@
1
+ import type { Application } from '../container/application';
2
+ import type { Token, Provider } from '../container/types';
3
+
4
+ export type PresetEntry<T = any> = [Token<T>, Provider<T>];
5
+
6
+ export interface Preset {
7
+ override: <T>(token: Token<T>, provider: Provider<T>) => void;
8
+ apply: (application: Application) => void;
9
+ }
@@ -0,0 +1,59 @@
1
+ import type { Store } from '@reduxjs/toolkit';
2
+ import type { Logger } from '../logger/types';
3
+ import type { SagaRunner } from './types';
4
+ import createSagaMiddleware, { Saga, END } from 'redux-saga';
5
+ import { SentryError } from '../error-tracker/utils';
6
+
7
+ /**
8
+ * Возвращает новый runner для redux-saga.
9
+ * @param logger Logger.
10
+ * @return Runner.
11
+ */
12
+ export function createSagaRunner(logger: Logger): SagaRunner {
13
+ const middleware = createSagaMiddleware({
14
+ onError: (error, { sagaStack }) => {
15
+ logger.error(
16
+ new SentryError(error.message, {
17
+ extra: { key: 'Saga stack', data: sagaStack },
18
+ }),
19
+ );
20
+ },
21
+ });
22
+
23
+ return {
24
+ middleware,
25
+
26
+ // eslint-disable-next-line require-jsdoc, jsdoc/require-jsdoc
27
+ prepare(store: Store, { timeout }: { timeout?: number } = {}) {
28
+ return {
29
+ // eslint-disable-next-line require-jsdoc, jsdoc/require-jsdoc
30
+ async run<S extends Saga>(saga: S, ...args: Parameters<S>) {
31
+ let ready = false;
32
+
33
+ await Promise.race([
34
+ // ждем пока сага выполнится
35
+ middleware
36
+ .run(saga, ...args)
37
+ .toPromise()
38
+ .then(() => {
39
+ ready = true;
40
+ }),
41
+
42
+ // если сага не выполнилась за положенное время - прерываем
43
+ typeof timeout === 'number' &&
44
+ Number.isFinite(timeout) &&
45
+ new Promise<void>(resolve => {
46
+ setTimeout(() => {
47
+ if (!ready) {
48
+ logger.error(Error('Сага прервана по таймауту'));
49
+ store.dispatch(END);
50
+ }
51
+ resolve();
52
+ }, timeout);
53
+ }),
54
+ ]);
55
+ },
56
+ };
57
+ },
58
+ };
59
+ }
@@ -0,0 +1,13 @@
1
+ import type { Saga, SagaMiddleware } from 'redux-saga';
2
+ import type { Store } from '@reduxjs/toolkit';
3
+
4
+ export interface SagaRunner {
5
+ middleware: SagaMiddleware<any>;
6
+
7
+ prepare: (
8
+ store: Store,
9
+ options?: { timeout?: number },
10
+ ) => {
11
+ run: <S extends Saga>(saga: S, ...args: Parameters<S>) => Promise<void>;
12
+ };
13
+ }