@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,110 @@
1
+ import { ReactNode, createContext, useContext } from 'react';
2
+ import { PageAssets } from '../../../isomorphic/types';
3
+ import { Handler, Request } from 'express';
4
+ import { Application, CURRENT_APP, Resolve } from '../../../../di';
5
+ import { KnownToken } from '../../../../tokens';
6
+
7
+ export const HelmetContext = createContext<{ title?: string; assets?: PageAssets }>({});
8
+
9
+ const resetCSS = `
10
+ * {
11
+ box-sizing: border-box;
12
+ }
13
+ body {
14
+ font-family: -apple-system,BlinkMacSystemFont,'Source Sans Pro',"Segoe UI",Roboto,"Helvetica Neue",Ubuntu,Arial,sans-serif;
15
+ margin: 0;
16
+ }
17
+ `;
18
+
19
+ /**
20
+ * Простой Helmet-компонент.
21
+ * Выведет html, head и body.
22
+ * @param props Свойства.
23
+ * @return Элемент.
24
+ */
25
+ export function RegularHelmet({ children }: { children?: ReactNode }) {
26
+ const { title, assets } = useContext(HelmetContext);
27
+
28
+ return (
29
+ <html>
30
+ <head>
31
+ <meta charSet='UTF-8' />
32
+ <meta httpEquiv='X-UA-Compatible' content='IE=edge' />
33
+ <meta name='viewport' content='width=device-width, initial-scale=1' />
34
+ <title>{title ?? 'Document'}</title>
35
+ <link
36
+ href='https://fonts.googleapis.com/css2?family=Source+Sans+Pro:ital,wght@0,200;0,300;0,400;0,600;0,700;0,900;1,200;1,300;1,400;1,600;1,700;1,900&amp;display=swap'
37
+ rel='stylesheet'
38
+ />
39
+ <style dangerouslySetInnerHTML={{ __html: resetCSS }} />
40
+
41
+ {assets?.criticalCss && <link rel='stylesheet' href={assets.criticalCss} />}
42
+ {assets?.css && <link rel='stylesheet' href={assets.css} />}
43
+ {assets?.criticalJs && <script src={assets.criticalJs} />}
44
+ </head>
45
+ <body>
46
+ {children}
47
+ {assets?.js && <script src={assets.js} />}
48
+ </body>
49
+ </html>
50
+ );
51
+ }
52
+
53
+ /**
54
+ * Специфичные для наших микросервисов дополнительные данные ответа.
55
+ */
56
+ export class SpecificExtras {
57
+ private _meta: any;
58
+
59
+ /**
60
+ * Установит мета-данные.
61
+ * @param meta Данные.
62
+ * @return Контекст.
63
+ */
64
+ setMeta(meta: any): this {
65
+ this._meta = meta;
66
+ return this;
67
+ }
68
+
69
+ /**
70
+ * Вернет установленные мета-данные.
71
+ * @return Данные.
72
+ */
73
+ getMeta(): unknown {
74
+ return this._meta;
75
+ }
76
+ }
77
+
78
+ /**
79
+ * Определит формат ответа.
80
+ * @param req Запрос.
81
+ * @return Формат.
82
+ */
83
+ export function getResponseFormat(req: Request): 'html' | 'json' {
84
+ let result: 'html' | 'json' = 'html';
85
+
86
+ if ((req.header('accept') || '').toLowerCase().includes('application/json')) {
87
+ result = 'json';
88
+ }
89
+
90
+ return result;
91
+ }
92
+
93
+ /**
94
+ * Возвращает express-handler, создающий дочернее di-приложение при запросе.
95
+ * @param getApp Должна вернуть di-приложения запроса.
96
+ * @return Обработчик.
97
+ */
98
+ export function HandlerProvider(getApp: () => Application) {
99
+ return function provider(resolve: Resolve): Handler {
100
+ const parent = resolve(CURRENT_APP);
101
+
102
+ return function handler(req, res, next) {
103
+ const app = getApp();
104
+
105
+ app.attach(parent);
106
+ app.bind(KnownToken.Http.Handler.context).toValue({ req, res, next });
107
+ app.get(KnownToken.Http.Handler.main)();
108
+ };
109
+ };
110
+ }
@@ -0,0 +1,3 @@
1
+ export type { HandlerContext } from './types';
2
+ export { PresetNode } from './node';
3
+ export { PresetHandler, HandlerProvider } from './handler';
@@ -0,0 +1,73 @@
1
+ import { KnownToken } from '../../../tokens';
2
+ import { provideBaseConfig } from '../../isomorphic/providers';
3
+ import { Preset, createPreset } from '../../../di';
4
+ import { PresetTuner } from '../../isomorphic/types';
5
+ import { healthCheck } from '../../../utils/express/handler/health-check';
6
+ import {
7
+ provideConfigSource,
8
+ provideHttpClientFactory,
9
+ provideHttpServerErrorMiddleware,
10
+ provideHttpServerFactory,
11
+ provideHttpServerLogMiddleware,
12
+ provideHttpServerMetricsMiddleware,
13
+ provideHttpServerRequestMiddleware,
14
+ provideHttpServerTracingMiddleware,
15
+ provideKnownHttpApiHosts,
16
+ provideLogger,
17
+ provideMetricsHttpApp,
18
+ provideSpanExporter,
19
+ provideSsrBridgeServerSide,
20
+ provideTracer,
21
+ provideTracerProvider,
22
+ provideTracerProviderResource,
23
+ } from './providers';
24
+
25
+ /**
26
+ * Возвращает preset с зависимостями по умолчанию для frontend-микросервисов на Node.js.
27
+ * @param customize Получит функцию с помощью которой можно переопределить предустановленные провайдеры.
28
+ * @return Preset.
29
+ */
30
+ export function PresetNode(customize?: PresetTuner): Preset {
31
+ // ВАЖНО: используем .set() вместо аргумента defaults функции createPreset из-за скорости
32
+ const preset = createPreset();
33
+
34
+ // config
35
+ preset.set(KnownToken.Config.source, provideConfigSource);
36
+ preset.set(KnownToken.Config.base, provideBaseConfig);
37
+
38
+ // log
39
+ preset.set(KnownToken.logger, provideLogger);
40
+
41
+ // tracing
42
+ preset.set(KnownToken.Tracing.tracer, provideTracer);
43
+ preset.set(KnownToken.Tracing.spanExporter, provideSpanExporter);
44
+ preset.set(KnownToken.Tracing.tracerProvider, provideTracerProvider);
45
+ preset.set(KnownToken.Tracing.tracerProviderResource, provideTracerProviderResource);
46
+
47
+ // metrics
48
+ preset.set(KnownToken.Metrics.httpApp, provideMetricsHttpApp);
49
+
50
+ // http client
51
+ preset.set(KnownToken.Http.Client.factory, provideHttpClientFactory);
52
+
53
+ // http server
54
+ preset.set(KnownToken.Http.Server.factory, provideHttpServerFactory);
55
+ preset.set(KnownToken.Http.Server.Handlers.healthCheck, healthCheck);
56
+ preset.set(KnownToken.Http.Server.Middleware.request, provideHttpServerRequestMiddleware);
57
+ preset.set(KnownToken.Http.Server.Middleware.log, provideHttpServerLogMiddleware);
58
+ preset.set(KnownToken.Http.Server.Middleware.metrics, provideHttpServerMetricsMiddleware);
59
+ preset.set(KnownToken.Http.Server.Middleware.tracing, provideHttpServerTracingMiddleware);
60
+ preset.set(KnownToken.Http.Server.Middleware.error, provideHttpServerErrorMiddleware);
61
+
62
+ // http api
63
+ preset.set(KnownToken.Http.Api.knownHosts, provideKnownHttpApiHosts);
64
+
65
+ // ssr bridge
66
+ preset.set(KnownToken.SsrBridge.serverSide, provideSsrBridgeServerSide);
67
+
68
+ if (customize) {
69
+ customize({ override: preset.set.bind(preset) });
70
+ }
71
+
72
+ return preset;
73
+ }
@@ -0,0 +1,434 @@
1
+ import type { ConventionalFluentInfo, Logger, LogHandler } from '../../../../log/types';
2
+ import { BridgeServerSide, SsrBridge } from '../../../../utils/ssr';
3
+ import { ConfigSource, createConfigSource } from '../../../../config';
4
+ import { createLogger } from '../../../../log';
5
+ import { createPinoHandler } from '../../../../log/handler/pino';
6
+ import { createSentryHandler } from '../../../../log/handler/sentry';
7
+ import { HttpApiHostPool } from '../../../isomorphic/utils';
8
+ import { KnownToken } from '../../../../tokens';
9
+ import { Resolve } from '../../../../di';
10
+ import { StrictMap, KnownHttpApiKey } from '../../../isomorphic/types';
11
+ import { toMilliseconds } from '../../../../utils';
12
+ import { RESPONSE_EVENT_TYPE } from '../../../isomorphic/constants';
13
+ import { getClientIp } from '../utils/http-server';
14
+
15
+ // Node.js specific packages
16
+ import os from 'node:os';
17
+ import path from 'node:path';
18
+
19
+ // Node.js libraries (not isomorphic)
20
+ import { config as applyDotenv } from 'dotenv';
21
+ import { init, getCurrentHub, Handlers } from '@sentry/node';
22
+ import * as PromClient from 'prom-client';
23
+ import Express, { Application, ErrorRequestHandler, Handler, Request, Response } from 'express';
24
+ import pino from 'pino';
25
+ import PinoPretty from 'pino-pretty';
26
+
27
+ // opentelemetry
28
+ import { propagation, ROOT_CONTEXT, trace, type Tracer } from '@opentelemetry/api';
29
+ import {
30
+ BasicTracerProvider,
31
+ BatchSpanProcessor,
32
+ SpanExporter,
33
+ } from '@opentelemetry/sdk-trace-base';
34
+ import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
35
+ import { JaegerPropagator } from '@opentelemetry/propagator-jaeger';
36
+ import { NodeTracerProvider } from '@opentelemetry/sdk-trace-node';
37
+ import { Resource } from '@opentelemetry/resources';
38
+ import { SemanticResourceAttributes } from '@opentelemetry/semantic-conventions';
39
+ import { create } from 'middleware-axios';
40
+
41
+ /**
42
+ * Провайдер источника конфигурации.
43
+ * @return Источник конфигурации.
44
+ */
45
+ export function provideConfigSource(): ConfigSource {
46
+ const envName = process.env.NODE_ENV;
47
+
48
+ // подключаем соответствующий среде файл со значениями по умолчанию
49
+ if (envName) {
50
+ applyDotenv({ path: path.resolve(process.cwd(), `./.env.${envName}`) });
51
+ }
52
+
53
+ return createConfigSource(process.env);
54
+ }
55
+
56
+ /**
57
+ * Провайдер Logger'а.
58
+ * @param resolve Функция для получения зависимости по токену.
59
+ * @return Logger.
60
+ */
61
+ export function provideLogger(resolve: Resolve): Logger {
62
+ const logger = createLogger();
63
+
64
+ // @todo возможно надо придумать как не давать вызывать провайдеры внутри провайдеров
65
+ logger.subscribe(providePinoHandler(resolve));
66
+ logger.subscribe(provideSentryHandler(resolve));
67
+
68
+ return logger;
69
+ }
70
+
71
+ /**
72
+ * Провайдер обработчика логирования для Sentry.
73
+ * @param resolve Функция для получения зависимости по токену.
74
+ * @return Обработчик.
75
+ */
76
+ export function provideSentryHandler(resolve: Resolve): LogHandler {
77
+ const source = resolve(KnownToken.Config.source);
78
+
79
+ // экспериментально пробуем не использовать вручную созданный клиент
80
+ init({
81
+ dsn: source.require('SENTRY_DSN'),
82
+ release: source.require('SENTRY_RELEASE'),
83
+ environment: source.require('SENTRY_ENVIRONMENT'),
84
+ });
85
+
86
+ // ВАЖНО: передаем функцию чтобы брать текущий hub в момент вызова метода logger'а
87
+ // это нужно чтобы хлебные крошки в ошибках Sentry группировались по запросам
88
+ return createSentryHandler(getCurrentHub);
89
+ }
90
+
91
+ /**
92
+ * Провайдер обработчика логирования для Pino.
93
+ * @param resolve Функция для получения зависимости по токену.
94
+ * @return Обработчик.
95
+ */
96
+ export function providePinoHandler(resolve: Resolve): LogHandler {
97
+ const config = resolve(KnownToken.Config.base);
98
+
99
+ const pinoLogger = pino(
100
+ config.env === 'production'
101
+ ? {
102
+ formatters: {
103
+ // ВАЖНО: для Fluent необходимо наличие поля level: string
104
+ level: label => ({ level: label }),
105
+ },
106
+ }
107
+ : PinoPretty({
108
+ colorize: true,
109
+ translateTime: 'yyyy-mm-dd HH:MM:ss.l o',
110
+ }),
111
+ );
112
+
113
+ return createPinoHandler(pinoLogger);
114
+ }
115
+
116
+ /**
117
+ * Провайдер объекта Tracer.
118
+ * @param resolve Функция для получения зависимости по токену.
119
+ * @return Tracer.
120
+ */
121
+ export function provideTracer(resolve: Resolve): Tracer {
122
+ const config = resolve(KnownToken.Config.base);
123
+ const provider = resolve(KnownToken.Tracing.tracerProvider);
124
+
125
+ return provider.getTracer(config.appName, config.appVersion);
126
+ }
127
+
128
+ /**
129
+ * Провайдер объекта SpanExporter.
130
+ * @param resolve Функция для получения зависимости по токену.
131
+ * @return SpanExporter.
132
+ */
133
+ export function provideSpanExporter(resolve: Resolve): SpanExporter {
134
+ const source = resolve(KnownToken.Config.source);
135
+
136
+ return new OTLPTraceExporter({
137
+ url: source.require('JAEGER_AGENT_URL'),
138
+ });
139
+ }
140
+
141
+ /**
142
+ * Провайдер объекта BasicTracerProvider.
143
+ * @param resolve Функция для получения зависимости по токену.
144
+ * @return BasicTracerProvider.
145
+ */
146
+ export function provideTracerProvider(resolve: Resolve): BasicTracerProvider {
147
+ const exporter = resolve(KnownToken.Tracing.spanExporter);
148
+ const resource = resolve(KnownToken.Tracing.tracerProviderResource);
149
+
150
+ const provider = new NodeTracerProvider({ resource });
151
+
152
+ provider.addSpanProcessor(new BatchSpanProcessor(exporter));
153
+ provider.register({ propagator: new JaegerPropagator() });
154
+
155
+ return provider;
156
+ }
157
+
158
+ /**
159
+ * Провайдер объекта Resource.
160
+ * @param resolve Функция для получения зависимости по токену.
161
+ * @return Resource.
162
+ */
163
+ export function provideTracerProviderResource(resolve: Resolve): Resource {
164
+ const config = resolve(KnownToken.Config.base);
165
+
166
+ return new Resource({
167
+ [SemanticResourceAttributes.HOST_NAME]: os.hostname(),
168
+ [SemanticResourceAttributes.SERVICE_NAME]: config.appName,
169
+ [SemanticResourceAttributes.SERVICE_VERSION]: config.appVersion,
170
+ [SemanticResourceAttributes.DEPLOYMENT_ENVIRONMENT]: config.env,
171
+ });
172
+ }
173
+
174
+ /**
175
+ * Провайдер фабрики http-клиентов.
176
+ * @return Фабрика.
177
+ */
178
+ export function provideHttpClientFactory() {
179
+ return create;
180
+ }
181
+
182
+ /**
183
+ * Провайдер фабрики http-серверов.
184
+ * @return Фабрика.
185
+ */
186
+ export function provideHttpServerFactory() {
187
+ return Express;
188
+ }
189
+
190
+ /**
191
+ * Провайдер промежуточного слоя учета входящих http-запросов.
192
+ * @return Промежуточный слой.
193
+ */
194
+ export function provideHttpServerRequestMiddleware(): Handler {
195
+ return Handlers.requestHandler();
196
+ }
197
+
198
+ /**
199
+ * Провайдер промежуточного слоя логирования входящих http-запросов.
200
+ * @param resolve Функция для получения зависимости по токену.
201
+ * @return Промежуточный слой.
202
+ */
203
+ export function provideHttpServerLogMiddleware(resolve: Resolve): Handler {
204
+ const config = resolve(KnownToken.Config.base);
205
+ const logger = resolve(KnownToken.logger);
206
+
207
+ return (req, res, next) => {
208
+ const start = process.hrtime.bigint();
209
+ const remoteIp = getClientIp(req) ?? '';
210
+
211
+ const startMsg: Omit<ConventionalFluentInfo, 'latency' | 'status'> & { type: string } = {
212
+ type: 'http.request[incoming]',
213
+ version: config.appVersion,
214
+ route: req.originalUrl,
215
+ method: req.method,
216
+ remote_ip: remoteIp,
217
+ };
218
+
219
+ logger.info(startMsg);
220
+
221
+ res.once('finish', () => {
222
+ const finish = process.hrtime.bigint();
223
+
224
+ const finishMsg: ConventionalFluentInfo & { type: string } = {
225
+ type: 'http.response[outgoing]',
226
+ version: config.appVersion,
227
+ route: req.originalUrl,
228
+ method: req.method,
229
+ status: res.statusCode,
230
+ remote_ip: remoteIp,
231
+ latency: toMilliseconds(finish - start),
232
+ };
233
+
234
+ logger.info(finishMsg);
235
+ });
236
+
237
+ next();
238
+ };
239
+ }
240
+
241
+ /**
242
+ * Провайдер промежуточного слоя сбора метрик входящих http-запросов.
243
+ * @param resolve Функция для получения зависимости по токену.
244
+ * @return Промежуточный слой.
245
+ */
246
+ export function provideHttpServerMetricsMiddleware(resolve: Resolve): Handler {
247
+ const config = resolve(KnownToken.Config.base);
248
+
249
+ const ConventionalLabels = {
250
+ HTTP_RESPONSE: ['version', 'route', 'code', 'method'],
251
+ SSR: ['version', 'route', 'method'],
252
+ } as const;
253
+
254
+ const requestCount = new PromClient.Counter({
255
+ name: 'http_request_count',
256
+ help: 'Incoming HTTP request count',
257
+ labelNames: ConventionalLabels.HTTP_RESPONSE,
258
+ });
259
+
260
+ const responseDuration = new PromClient.Histogram({
261
+ name: 'http_response_duration_ms',
262
+ help: 'Duration of incoming HTTP requests in ms',
263
+ labelNames: ConventionalLabels.HTTP_RESPONSE,
264
+ buckets: [30, 100, 200, 500, 1000, 2500, 5000, 10000],
265
+ });
266
+
267
+ const renderDuration = new PromClient.Histogram({
268
+ name: 'render_duration_ms',
269
+ help: 'Duration of SSR ms',
270
+ labelNames: ConventionalLabels.SSR,
271
+ buckets: [0.1, 15, 50, 100, 250, 500, 800, 1500],
272
+ });
273
+
274
+ /**
275
+ * Функция формирования labels.
276
+ * @param req Request.
277
+ * @param res Response.
278
+ * @return Labels.
279
+ */
280
+ const getLabels = (
281
+ req: Request,
282
+ res: Response,
283
+ ): Record<(typeof ConventionalLabels.HTTP_RESPONSE)[number], string | number> => ({
284
+ version: config.appVersion,
285
+ route: req.baseUrl + req.path,
286
+ code: res.statusCode,
287
+ method: req.method,
288
+ });
289
+
290
+ return (req, res, next) => {
291
+ const responseStart = process.hrtime.bigint();
292
+
293
+ requestCount.inc(getLabels(req, res), 1);
294
+
295
+ res.once(RESPONSE_EVENT_TYPE.renderStart, () => {
296
+ const renderStart = process.hrtime.bigint();
297
+
298
+ res.once(RESPONSE_EVENT_TYPE.renderFinish, () => {
299
+ const renderFinish = process.hrtime.bigint();
300
+
301
+ renderDuration.observe(
302
+ {
303
+ version: config.appVersion,
304
+ method: req.method,
305
+ route: req.baseUrl + req.path,
306
+ },
307
+ toMilliseconds(renderFinish - renderStart),
308
+ );
309
+ });
310
+ });
311
+
312
+ res.once('finish', () => {
313
+ const responseFinish = process.hrtime.bigint();
314
+
315
+ responseDuration.observe(getLabels(req, res), toMilliseconds(responseFinish - responseStart));
316
+ });
317
+
318
+ next();
319
+ };
320
+ }
321
+
322
+ /**
323
+ * Провайдер промежуточного слоя трассировки входящих http-запросов.
324
+ * @param resolve Функция для получения зависимости по токену.
325
+ * @return Промежуточный слой.
326
+ */
327
+ export function provideHttpServerTracingMiddleware(resolve: Resolve): Handler {
328
+ const tracer = resolve(KnownToken.Tracing.tracer);
329
+
330
+ /**
331
+ * Возвращает набор стандартных атрибутов для спана.
332
+ * @param req Входящий http-запрос.
333
+ * @return Атрибуты.
334
+ */
335
+ const getConventionalRequestAttrs = (req: Request): Record<string, string | undefined> => {
336
+ const result: Record<string, string | undefined> = {
337
+ 'request.path': req.originalUrl,
338
+ };
339
+
340
+ for (const headerName in req.headers) {
341
+ if (headerName.toLowerCase().startsWith('simaland-')) {
342
+ result[headerName] = req.header(headerName);
343
+ }
344
+ }
345
+
346
+ return result;
347
+ };
348
+
349
+ return (req, res, next) => {
350
+ const externalContext = propagation.extract(ROOT_CONTEXT, req.headers);
351
+ const rootSpan = tracer.startSpan('response', undefined, externalContext);
352
+
353
+ rootSpan.setAttributes(getConventionalRequestAttrs(req));
354
+
355
+ const rootContext = trace.setSpan(externalContext, rootSpan);
356
+
357
+ res.locals.tracing = {
358
+ rootSpan,
359
+ rootContext,
360
+ renderSpan: null,
361
+ };
362
+
363
+ res.once(RESPONSE_EVENT_TYPE.renderStart, () => {
364
+ res.locals.tracing.renderSpan = tracer.startSpan('render', undefined, rootContext);
365
+
366
+ res.once(RESPONSE_EVENT_TYPE.renderFinish, () => {
367
+ res.locals.tracing.renderSpan.end();
368
+ });
369
+ });
370
+
371
+ res.once('finish', () => {
372
+ rootSpan.end();
373
+ });
374
+
375
+ next();
376
+ };
377
+ }
378
+
379
+ /**
380
+ * Провайдер промежуточного слоя обработки ошибок в рамках ответ на http-запросы.
381
+ * @return Промежуточный слой.
382
+ */
383
+ export function provideHttpServerErrorMiddleware(): ErrorRequestHandler {
384
+ return Handlers.errorHandler();
385
+ }
386
+
387
+ /**
388
+ * Провайдер серверной части "моста" для передачи данных между сервером и клиентом.
389
+ * @param resolve Функция для получения зависимости по токену.
390
+ * @return Серверная часть "моста".
391
+ */
392
+ export function provideSsrBridgeServerSide(resolve: Resolve): BridgeServerSide {
393
+ const config = resolve(KnownToken.Config.base);
394
+
395
+ return SsrBridge.prepare(config.appName);
396
+ }
397
+
398
+ /**
399
+ * Провайдер известных http-хостов.
400
+ * @param resolve Функция для получения зависимости по токену.
401
+ * @return Пул известных http-хостов.
402
+ */
403
+ export function provideKnownHttpApiHosts(resolve: Resolve): StrictMap<KnownHttpApiKey> {
404
+ const source = resolve(KnownToken.Config.source);
405
+
406
+ return new HttpApiHostPool(
407
+ {
408
+ ilium: 'API_URL_ILIUM',
409
+ simaV3: 'API_URL_SIMALAND_V3',
410
+ simaV4: 'API_URL_SIMALAND_V4',
411
+ simaV6: 'API_URL_SIMALAND_V6',
412
+ },
413
+ source,
414
+ );
415
+ }
416
+
417
+ /**
418
+ * Провайдер express-приложения метрик.
419
+ * @return Пул известных http-хостов.
420
+ */
421
+ export function provideMetricsHttpApp(): Application {
422
+ PromClient.collectDefaultMetrics();
423
+
424
+ const app = Express();
425
+
426
+ app.get('/', async function (req, res) {
427
+ const metrics = await PromClient.register.metrics();
428
+
429
+ res.setHeader('Content-Type', PromClient.register.contentType);
430
+ res.send(metrics);
431
+ });
432
+
433
+ return app;
434
+ }