@sima-land/isomorph 10.1.0 → 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 (531) 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/{browser → dist/utils/browser}/analytics/data-layer.d.ts +0 -0
  120. package/{browser → dist/utils/browser}/analytics/data-layer.js +1 -2
  121. package/dist/utils/browser/analytics/data-layer.js.map +1 -0
  122. package/{browser → dist/utils/browser}/analytics/oko.d.ts +0 -0
  123. package/{browser → dist/utils/browser}/analytics/oko.js +6 -7
  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 +49 -63
  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/{browser → utils/browser}/analytics/data-layer.ts +0 -0
  193. package/src/{browser → utils/browser}/analytics/oko.ts +6 -4
  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/browser/analytics/data-layer.js.map +0 -1
  208. package/browser/analytics/oko.js.map +0 -1
  209. package/cache/helpers.d.ts +0 -4
  210. package/cache/helpers.js +0 -39
  211. package/cache/helpers.js.map +0 -1
  212. package/cache/local-storage.d.ts +0 -34
  213. package/cache/local-storage.js +0 -90
  214. package/cache/local-storage.js.map +0 -1
  215. package/cache/redis.d.ts +0 -10
  216. package/cache/redis.js +0 -54
  217. package/cache/redis.js.map +0 -1
  218. package/cache/wrap-in-trace.d.ts +0 -8
  219. package/cache/wrap-in-trace.js +0 -68
  220. package/cache/wrap-in-trace.js.map +0 -1
  221. package/config/create.d.ts +0 -8
  222. package/config/create.js +0 -32
  223. package/config/create.js.map +0 -1
  224. package/config/helpers.d.ts +0 -11
  225. package/config/helpers.js +0 -71
  226. package/config/helpers.js.map +0 -1
  227. package/config/validate.d.ts +0 -18
  228. package/config/validate.js +0 -107
  229. package/config/validate.js.map +0 -1
  230. package/container/create-inject.d.ts +0 -7
  231. package/container/create-inject.js +0 -36
  232. package/container/create-inject.js.map +0 -1
  233. package/container/get-dependencies.d.ts +0 -13
  234. package/container/get-dependencies.js +0 -54
  235. package/container/get-dependencies.js.map +0 -1
  236. package/container/index.d.ts +0 -15
  237. package/container/index.js +0 -175
  238. package/container/index.js.map +0 -1
  239. package/container/is-container.d.ts +0 -7
  240. package/container/is-container.js +0 -17
  241. package/container/is-container.js.map +0 -1
  242. package/container/service-not-found-error.d.ts +0 -10
  243. package/container/service-not-found-error.js +0 -18
  244. package/container/service-not-found-error.js.map +0 -1
  245. package/create-proxy/create-proxy-middleware/index.d.ts +0 -16
  246. package/create-proxy/create-proxy-middleware/index.js +0 -47
  247. package/create-proxy/create-proxy-middleware/index.js.map +0 -1
  248. package/create-proxy/index.d.ts +0 -12
  249. package/create-proxy/index.js +0 -25
  250. package/create-proxy/index.js.map +0 -1
  251. package/create-response-sender/index.d.ts +0 -8
  252. package/create-response-sender/index.js +0 -42
  253. package/create-response-sender/index.js.map +0 -1
  254. package/get-dynamic-data/index.d.ts +0 -8
  255. package/get-dynamic-data/index.js +0 -23
  256. package/get-dynamic-data/index.js.map +0 -1
  257. package/graceful-shutdown/index.d.ts +0 -26
  258. package/graceful-shutdown/index.js +0 -87
  259. package/graceful-shutdown/index.js.map +0 -1
  260. package/helpers/add-error-handling/index.d.ts +0 -1
  261. package/helpers/add-error-handling/index.js +0 -42
  262. package/helpers/add-error-handling/index.js.map +0 -1
  263. package/helpers/api/create-enhancer.d.ts +0 -12
  264. package/helpers/api/create-enhancer.js +0 -52
  265. package/helpers/api/create-enhancer.js.map +0 -1
  266. package/helpers/api/create-instance.d.ts +0 -11
  267. package/helpers/api/create-instance.js +0 -39
  268. package/helpers/api/create-instance.js.map +0 -1
  269. package/helpers/api/middlewares/collect-cookie-middleware.d.ts +0 -10
  270. package/helpers/api/middlewares/collect-cookie-middleware.js +0 -39
  271. package/helpers/api/middlewares/collect-cookie-middleware.js.map +0 -1
  272. package/helpers/api/middlewares/count-api-response-time.d.ts +0 -12
  273. package/helpers/api/middlewares/count-api-response-time.js +0 -39
  274. package/helpers/api/middlewares/count-api-response-time.js.map +0 -1
  275. package/helpers/api/middlewares/error-handlers-middlewares.d.ts +0 -5
  276. package/helpers/api/middlewares/error-handlers-middlewares.js +0 -114
  277. package/helpers/api/middlewares/error-handlers-middlewares.js.map +0 -1
  278. package/helpers/api/middlewares/helpers.d.ts +0 -11
  279. package/helpers/api/middlewares/helpers.js +0 -27
  280. package/helpers/api/middlewares/helpers.js.map +0 -1
  281. package/helpers/api/middlewares/pass-headers-middleware.d.ts +0 -3
  282. package/helpers/api/middlewares/pass-headers-middleware.js +0 -27
  283. package/helpers/api/middlewares/pass-headers-middleware.js.map +0 -1
  284. package/helpers/api/middlewares/prepare-request-headers.d.ts +0 -5
  285. package/helpers/api/middlewares/prepare-request-headers.js +0 -20
  286. package/helpers/api/middlewares/prepare-request-headers.js.map +0 -1
  287. package/helpers/api/middlewares/set-http-agents-middleware.d.ts +0 -15
  288. package/helpers/api/middlewares/set-http-agents-middleware.js +0 -34
  289. package/helpers/api/middlewares/set-http-agents-middleware.js.map +0 -1
  290. package/helpers/api/middlewares/stages-trace-middleware.d.ts +0 -17
  291. package/helpers/api/middlewares/stages-trace-middleware.js +0 -57
  292. package/helpers/api/middlewares/stages-trace-middleware.js.map +0 -1
  293. package/helpers/api/middlewares/trace-request-middleware.d.ts +0 -24
  294. package/helpers/api/middlewares/trace-request-middleware.js +0 -69
  295. package/helpers/api/middlewares/trace-request-middleware.js.map +0 -1
  296. package/helpers/api/server-adapter/__fixtures__/fake-keys.d.ts +0 -10
  297. package/helpers/api/server-adapter/__fixtures__/fake-keys.js +0 -61
  298. package/helpers/api/server-adapter/__fixtures__/fake-keys.js.map +0 -1
  299. package/helpers/api/server-adapter/constants.d.ts +0 -5
  300. package/helpers/api/server-adapter/constants.js +0 -16
  301. package/helpers/api/server-adapter/constants.js.map +0 -1
  302. package/helpers/api/server-adapter/helpers.d.ts +0 -26
  303. package/helpers/api/server-adapter/helpers.js +0 -208
  304. package/helpers/api/server-adapter/helpers.js.map +0 -1
  305. package/helpers/api/server-adapter/index.d.ts +0 -10
  306. package/helpers/api/server-adapter/index.js +0 -118
  307. package/helpers/api/server-adapter/index.js.map +0 -1
  308. package/helpers/development/use-dot-env.d.ts +0 -6
  309. package/helpers/development/use-dot-env.js +0 -11
  310. package/helpers/development/use-dot-env.js.map +0 -1
  311. package/helpers/get-params/index.d.ts +0 -4
  312. package/helpers/get-params/index.js +0 -51
  313. package/helpers/get-params/index.js.map +0 -1
  314. package/helpers/http/request-getters.d.ts +0 -5
  315. package/helpers/http/request-getters.js +0 -49
  316. package/helpers/http/request-getters.js.map +0 -1
  317. package/helpers/http/statuses-validator.d.ts +0 -3
  318. package/helpers/http/statuses-validator.js +0 -25
  319. package/helpers/http/statuses-validator.js.map +0 -1
  320. package/helpers/logger/create-pino-instance/index.d.ts +0 -6
  321. package/helpers/logger/create-pino-instance/index.js +0 -39
  322. package/helpers/logger/create-pino-instance/index.js.map +0 -1
  323. package/helpers/logger/format-time/index.d.ts +0 -6
  324. package/helpers/logger/format-time/index.js +0 -9
  325. package/helpers/logger/format-time/index.js.map +0 -1
  326. package/helpers/metrics/index.d.ts +0 -23
  327. package/helpers/metrics/index.js +0 -42
  328. package/helpers/metrics/index.js.map +0 -1
  329. package/helpers/prometheus/index.d.ts +0 -4
  330. package/helpers/prometheus/index.js +0 -13
  331. package/helpers/prometheus/index.js.map +0 -1
  332. package/helpers/prometheus/measure-middleware.d.ts +0 -5
  333. package/helpers/prometheus/measure-middleware.js +0 -69
  334. package/helpers/prometheus/measure-middleware.js.map +0 -1
  335. package/helpers/prometheus/metric-adapter.d.ts +0 -36
  336. package/helpers/prometheus/metric-adapter.js +0 -98
  337. package/helpers/prometheus/metric-adapter.js.map +0 -1
  338. package/helpers/react/error-handlers/index.d.ts +0 -40
  339. package/helpers/react/error-handlers/index.js +0 -52
  340. package/helpers/react/error-handlers/index.js.map +0 -1
  341. package/helpers/redux/constants.d.ts +0 -5
  342. package/helpers/redux/constants.js +0 -14
  343. package/helpers/redux/constants.js.map +0 -1
  344. package/helpers/redux/create-compose-middleware.d.ts +0 -15
  345. package/helpers/redux/create-compose-middleware.js +0 -23
  346. package/helpers/redux/create-compose-middleware.js.map +0 -1
  347. package/helpers/redux/get-dev-compose-creator.d.ts +0 -6
  348. package/helpers/redux/get-dev-compose-creator.js +0 -13
  349. package/helpers/redux/get-dev-compose-creator.js.map +0 -1
  350. package/helpers/redux/prepare-on-ready.d.ts +0 -9
  351. package/helpers/redux/prepare-on-ready.js +0 -16
  352. package/helpers/redux/prepare-on-ready.js.map +0 -1
  353. package/helpers/redux/remote-data.d.ts +0 -40
  354. package/helpers/redux/remote-data.js +0 -91
  355. package/helpers/redux/remote-data.js.map +0 -1
  356. package/helpers/redux/selector/statuses.d.ts +0 -23
  357. package/helpers/redux/selector/statuses.js +0 -34
  358. package/helpers/redux/selector/statuses.js.map +0 -1
  359. package/helpers/redux/wait-on-store-readiness.d.ts +0 -11
  360. package/helpers/redux/wait-on-store-readiness.js +0 -29
  361. package/helpers/redux/wait-on-store-readiness.js.map +0 -1
  362. package/helpers/render/get-react-markup-data.d.ts +0 -14
  363. package/helpers/render/get-react-markup-data.js +0 -20
  364. package/helpers/render/get-react-markup-data.js.map +0 -1
  365. package/helpers/render/index.d.ts +0 -21
  366. package/helpers/render/index.js +0 -72
  367. package/helpers/render/index.js.map +0 -1
  368. package/helpers/render/render-app.d.ts +0 -12
  369. package/helpers/render/render-app.js +0 -12
  370. package/helpers/render/render-app.js.map +0 -1
  371. package/helpers/saga/__fixtures__/do-safe-request.d.ts +0 -43
  372. package/helpers/saga/__fixtures__/do-safe-request.js +0 -50
  373. package/helpers/saga/__fixtures__/do-safe-request.js.map +0 -1
  374. package/helpers/saga/cache-result.d.ts +0 -46
  375. package/helpers/saga/cache-result.js +0 -71
  376. package/helpers/saga/cache-result.js.map +0 -1
  377. package/helpers/saga/create-store.d.ts +0 -20
  378. package/helpers/saga/create-store.js +0 -106
  379. package/helpers/saga/create-store.js.map +0 -1
  380. package/helpers/saga/do-safe-request.d.ts +0 -38
  381. package/helpers/saga/do-safe-request.js +0 -45
  382. package/helpers/saga/do-safe-request.js.map +0 -1
  383. package/helpers/saga/safe-request.d.ts +0 -7
  384. package/helpers/saga/safe-request.js +0 -15
  385. package/helpers/saga/safe-request.js.map +0 -1
  386. package/helpers/saga/take-chain.d.ts +0 -20
  387. package/helpers/saga/take-chain.js +0 -56
  388. package/helpers/saga/take-chain.js.map +0 -1
  389. package/helpers/tracer/create-child-tracing-middleware.d.ts +0 -7
  390. package/helpers/tracer/create-child-tracing-middleware.js +0 -40
  391. package/helpers/tracer/create-child-tracing-middleware.js.map +0 -1
  392. package/helpers/tracer/index.d.ts +0 -24
  393. package/helpers/tracer/index.js +0 -144
  394. package/helpers/tracer/index.js.map +0 -1
  395. package/helpers/utils/check-feature-by-segment.d.ts +0 -2
  396. package/helpers/utils/check-feature-by-segment.js +0 -31
  397. package/helpers/utils/check-feature-by-segment.js.map +0 -1
  398. package/helpers/utils/format-object-keys.d.ts +0 -6
  399. package/helpers/utils/format-object-keys.js +0 -27
  400. package/helpers/utils/format-object-keys.js.map +0 -1
  401. package/helpers/utils/get-ms-from-hrt.d.ts +0 -2
  402. package/helpers/utils/get-ms-from-hrt.js +0 -22
  403. package/helpers/utils/get-ms-from-hrt.js.map +0 -1
  404. package/helpers/utils/is-match-pattern-list.d.ts +0 -8
  405. package/helpers/utils/is-match-pattern-list.js +0 -16
  406. package/helpers/utils/is-match-pattern-list.js.map +0 -1
  407. package/helpers/utils/is-not-empty-array.d.ts +0 -2
  408. package/helpers/utils/is-not-empty-array.js +0 -12
  409. package/helpers/utils/is-not-empty-array.js.map +0 -1
  410. package/helpers/utils/is-not-empty-string.d.ts +0 -2
  411. package/helpers/utils/is-not-empty-string.js +0 -15
  412. package/helpers/utils/is-not-empty-string.js.map +0 -1
  413. package/helpers/utils/is-numeric.d.ts +0 -7
  414. package/helpers/utils/is-numeric.js +0 -16
  415. package/helpers/utils/is-numeric.js.map +0 -1
  416. package/helpers/utils/wrap-in-measure-event.d.ts +0 -9
  417. package/helpers/utils/wrap-in-measure-event.js +0 -50
  418. package/helpers/utils/wrap-in-measure-event.js.map +0 -1
  419. package/logger/create-logger-middleware/index.d.ts +0 -14
  420. package/logger/create-logger-middleware/index.js +0 -41
  421. package/logger/create-logger-middleware/index.js.map +0 -1
  422. package/logger/create-sentry-instance/index.d.ts +0 -29
  423. package/logger/create-sentry-instance/index.js +0 -63
  424. package/logger/create-sentry-instance/index.js.map +0 -1
  425. package/logger/create-sentry-middleware/index.d.ts +0 -14
  426. package/logger/create-sentry-middleware/index.js +0 -19
  427. package/logger/create-sentry-middleware/index.js.map +0 -1
  428. package/logger/handler-creators/index.d.ts +0 -5
  429. package/logger/handler-creators/index.js +0 -41
  430. package/logger/handler-creators/index.js.map +0 -1
  431. package/logger/initialize-sentry-creator/index.d.ts +0 -17
  432. package/logger/initialize-sentry-creator/index.js +0 -35
  433. package/logger/initialize-sentry-creator/index.js.map +0 -1
  434. package/logger/sentry-logger/index.d.ts +0 -9
  435. package/logger/sentry-logger/index.js +0 -36
  436. package/logger/sentry-logger/index.js.map +0 -1
  437. package/module-federation/__example__/webpack-config.example.d.ts +0 -366
  438. package/module-federation/__example__/webpack-config.example.js +0 -58
  439. package/module-federation/__example__/webpack-config.example.js.map +0 -1
  440. package/module-federation/enhanced-module-federation-plugin.d.ts +0 -69
  441. package/module-federation/enhanced-module-federation-plugin.js +0 -97
  442. package/module-federation/enhanced-module-federation-plugin.js.map +0 -1
  443. package/module-federation/utils/index.d.ts +0 -16
  444. package/module-federation/utils/index.js +0 -33
  445. package/module-federation/utils/index.js.map +0 -1
  446. package/observe-middleware/index.d.ts +0 -9
  447. package/observe-middleware/index.js +0 -67
  448. package/observe-middleware/index.js.map +0 -1
  449. package/set-header-middleware/create.d.ts +0 -10
  450. package/set-header-middleware/create.js +0 -16
  451. package/set-header-middleware/create.js.map +0 -1
  452. package/src/cache/helpers.js +0 -32
  453. package/src/cache/local-storage.ts +0 -92
  454. package/src/cache/redis.js +0 -79
  455. package/src/cache/wrap-in-trace.js +0 -57
  456. package/src/config/create.js +0 -33
  457. package/src/config/helpers.js +0 -71
  458. package/src/config/validate.js +0 -114
  459. package/src/container/create-inject.js +0 -32
  460. package/src/container/get-dependencies.js +0 -46
  461. package/src/container/index.js +0 -188
  462. package/src/container/is-container.js +0 -14
  463. package/src/container/service-not-found-error.js +0 -14
  464. package/src/create-proxy/create-proxy-middleware/index.js +0 -47
  465. package/src/create-proxy/index.js +0 -27
  466. package/src/create-response-sender/index.js +0 -48
  467. package/src/get-dynamic-data/index.js +0 -26
  468. package/src/graceful-shutdown/index.js +0 -97
  469. package/src/helpers/add-error-handling/index.js +0 -24
  470. package/src/helpers/api/create-enhancer.js +0 -52
  471. package/src/helpers/api/create-instance.js +0 -42
  472. package/src/helpers/api/middlewares/collect-cookie-middleware.js +0 -27
  473. package/src/helpers/api/middlewares/count-api-response-time.js +0 -31
  474. package/src/helpers/api/middlewares/error-handlers-middlewares.js +0 -124
  475. package/src/helpers/api/middlewares/helpers.js +0 -26
  476. package/src/helpers/api/middlewares/pass-headers-middleware.js +0 -19
  477. package/src/helpers/api/middlewares/prepare-request-headers.js +0 -18
  478. package/src/helpers/api/middlewares/set-http-agents-middleware.js +0 -22
  479. package/src/helpers/api/middlewares/stages-trace-middleware.js +0 -46
  480. package/src/helpers/api/server-adapter/__fixtures__/fake-keys.js +0 -58
  481. package/src/helpers/api/server-adapter/constants.js +0 -12
  482. package/src/helpers/api/server-adapter/helpers.js +0 -244
  483. package/src/helpers/api/server-adapter/index.js +0 -155
  484. package/src/helpers/development/use-dot-env.js +0 -9
  485. package/src/helpers/get-params/index.js +0 -59
  486. package/src/helpers/http/request-getters.js +0 -42
  487. package/src/helpers/http/statuses-validator.js +0 -20
  488. package/src/helpers/logger/create-pino-instance/index.js +0 -41
  489. package/src/helpers/logger/format-time/index.js +0 -6
  490. package/src/helpers/metrics/index.js +0 -40
  491. package/src/helpers/prometheus/index.js +0 -9
  492. package/src/helpers/prometheus/measure-middleware.js +0 -73
  493. package/src/helpers/prometheus/metric-adapter.js +0 -99
  494. package/src/helpers/react/error-handlers/index.tsx +0 -68
  495. package/src/helpers/redux/constants.js +0 -10
  496. package/src/helpers/redux/create-compose-middleware.js +0 -24
  497. package/src/helpers/redux/get-dev-compose-creator.js +0 -9
  498. package/src/helpers/redux/prepare-on-ready.js +0 -16
  499. package/src/helpers/redux/remote-data.js +0 -124
  500. package/src/helpers/redux/selector/statuses.js +0 -30
  501. package/src/helpers/redux/wait-on-store-readiness.js +0 -40
  502. package/src/helpers/render/get-react-markup-data.js +0 -18
  503. package/src/helpers/render/index.js +0 -69
  504. package/src/helpers/render/render-app.js +0 -15
  505. package/src/helpers/saga/__fixtures__/do-safe-request.js +0 -49
  506. package/src/helpers/saga/cache-result.js +0 -77
  507. package/src/helpers/saga/create-store.js +0 -102
  508. package/src/helpers/saga/do-safe-request.js +0 -47
  509. package/src/helpers/saga/safe-request.js +0 -11
  510. package/src/helpers/saga/take-chain.js +0 -53
  511. package/src/helpers/tracer/create-child-tracing-middleware.js +0 -42
  512. package/src/helpers/tracer/index.js +0 -171
  513. package/src/helpers/utils/check-feature-by-segment.js +0 -32
  514. package/src/helpers/utils/format-object-keys.js +0 -23
  515. package/src/helpers/utils/get-ms-from-hrt.js +0 -16
  516. package/src/helpers/utils/is-match-pattern-list.js +0 -13
  517. package/src/helpers/utils/is-not-empty-array.js +0 -8
  518. package/src/helpers/utils/is-not-empty-string.js +0 -11
  519. package/src/helpers/utils/is-numeric.ts +0 -12
  520. package/src/helpers/utils/wrap-in-measure-event.js +0 -35
  521. package/src/logger/create-logger-middleware/index.js +0 -46
  522. package/src/logger/create-sentry-instance/index.js +0 -74
  523. package/src/logger/create-sentry-middleware/index.js +0 -16
  524. package/src/logger/handler-creators/index.js +0 -38
  525. package/src/logger/initialize-sentry-creator/index.js +0 -43
  526. package/src/logger/sentry-logger/index.js +0 -33
  527. package/src/module-federation/__example__/webpack-config.example.js +0 -64
  528. package/src/module-federation/enhanced-module-federation-plugin.js +0 -119
  529. package/src/module-federation/utils/index.js +0 -39
  530. package/src/observe-middleware/index.js +0 -70
  531. package/src/set-header-middleware/create.js +0 -17
@@ -0,0 +1,50 @@
1
+ import { dataLayerPush } from '../data-layer';
2
+
3
+ describe('dataLayerPush', () => {
4
+ beforeAll(() => {
5
+ (window as any).dataLayer = {
6
+ checkContext: () => 123,
7
+
8
+ push: jest.fn(function (this: any, data) {
9
+ // имитируем реальную работу window.dataLayer.push: в процессе удаляет data.n
10
+ delete data.n;
11
+
12
+ // имитируем реальную работу window.dataLayer.push: в процессе вызывает другие методы с this
13
+ this.checkContext();
14
+ }),
15
+ };
16
+ });
17
+
18
+ afterAll(() => {
19
+ delete (window as any).dataLayer;
20
+ });
21
+
22
+ it('should handle window.dataLayer.push mutates object argument', () => {
23
+ const testData = {
24
+ n: 'test-event',
25
+ prop1: 1,
26
+ prop2: 2,
27
+ };
28
+
29
+ expect((window as any).dataLayer.push).toBeCalledTimes(0);
30
+
31
+ dataLayerPush(testData);
32
+
33
+ expect((window as any).dataLayer.push).toBeCalledTimes(1);
34
+ expect((window as any).dataLayer.push.mock.calls[0][0]).toEqual({
35
+ prop1: 1,
36
+ prop2: 2,
37
+ });
38
+ expect(testData).toEqual({
39
+ n: 'test-event',
40
+ prop1: 1,
41
+ prop2: 2,
42
+ });
43
+ });
44
+
45
+ it('should handle window.dataLayer.push absence', () => {
46
+ delete (window as any).dataLayer;
47
+
48
+ expect(() => dataLayerPush({ n: 'test-123' })).not.toThrow();
49
+ });
50
+ });
@@ -0,0 +1,143 @@
1
+ import React, { createElement } from 'react';
2
+ import { render } from 'react-dom';
3
+ import { act, Simulate } from 'react-dom/test-utils';
4
+ import { okoPush, useOkoPush } from '../oko';
5
+
6
+ describe('useOkoPush', () => {
7
+ const TestComponent = ({ prop }: any) => {
8
+ const fn = useOkoPush({
9
+ n: 'test-event',
10
+ prop,
11
+ });
12
+
13
+ return createElement('div', { 'data-testid': 'test-block', onClick: fn });
14
+ };
15
+
16
+ beforeAll(() => {
17
+ (window as any).oko = {
18
+ push: jest.fn(),
19
+ };
20
+ });
21
+
22
+ afterAll(() => {
23
+ delete (window as any).oko;
24
+ });
25
+
26
+ it('should call', () => {
27
+ const container = document.createElement('div');
28
+
29
+ document.body.append(container);
30
+
31
+ render(<TestComponent prop={123} />, container);
32
+
33
+ expect((window as any).oko.push).toHaveBeenCalledTimes(0);
34
+
35
+ act(() => {
36
+ Simulate.click(container.querySelector('[data-testid="test-block"]') as HTMLElement);
37
+ });
38
+
39
+ expect((window as any).oko.push).toHaveBeenCalledTimes(1);
40
+ expect((window as any).oko.push).toHaveBeenCalledWith({
41
+ n: 'test-event',
42
+ prop: 123,
43
+ });
44
+ });
45
+
46
+ it('should throw error', async () => {
47
+ const container = document.createElement('div');
48
+
49
+ document.body.append(container);
50
+
51
+ render(<TestComponent prop={1} />, container);
52
+
53
+ const renderWithError = () => {
54
+ render(<TestComponent prop={2} />, container);
55
+ };
56
+
57
+ expect(renderWithError).toThrow(
58
+ Error(
59
+ [
60
+ 'useAnalytics: Данные для аналитики изменились.',
61
+ 'Если необходимо использовать динамические данные, вынесите логику из React-компонента.',
62
+ ].join('\n'),
63
+ ),
64
+ );
65
+ });
66
+
67
+ it('should do not throw for complex object structure', () => {
68
+ const ComplexTest = () => {
69
+ const fn = useOkoPush({
70
+ n: 'custom',
71
+ category: 'balance_goods',
72
+ custom_str: ['minus'],
73
+ });
74
+
75
+ return <div data-testid='test-block' onClick={fn} />;
76
+ };
77
+
78
+ const container = document.createElement('div');
79
+
80
+ document.body.append(container);
81
+
82
+ act(() => {
83
+ render(<ComplexTest />, container);
84
+ });
85
+
86
+ const secondRender = () => {
87
+ act(() => {
88
+ render(<ComplexTest />, container);
89
+ });
90
+ };
91
+
92
+ expect(secondRender).not.toThrow();
93
+ });
94
+ });
95
+
96
+ describe('okoPush', () => {
97
+ beforeAll(() => {
98
+ (window as any).oko = {
99
+ checkContext: () => 123,
100
+
101
+ push: jest.fn(function (this: any, data) {
102
+ // имитируем реальную работу window.oko.push: в процессе удаляет data.n
103
+ delete data.n;
104
+
105
+ // имитируем реальную работу window.oko.push: в процессе вызывает другие методы с this
106
+ this.checkContext();
107
+ }),
108
+ };
109
+ });
110
+
111
+ afterAll(() => {
112
+ delete (window as any).oko;
113
+ });
114
+
115
+ it('should handle window.oko.push mutates object argument', () => {
116
+ const testData = {
117
+ n: 'test-event',
118
+ prop1: 1,
119
+ prop2: 2,
120
+ };
121
+
122
+ expect((window as any).oko.push).toBeCalledTimes(0);
123
+
124
+ okoPush(testData);
125
+
126
+ expect((window as any).oko.push).toBeCalledTimes(1);
127
+ expect((window as any).oko.push.mock.calls[0][0]).toEqual({
128
+ prop1: 1,
129
+ prop2: 2,
130
+ });
131
+ expect(testData).toEqual({
132
+ n: 'test-event',
133
+ prop1: 1,
134
+ prop2: 2,
135
+ });
136
+ });
137
+
138
+ it('should handle window.oko.push absence', () => {
139
+ delete (window as any).oko;
140
+
141
+ expect(() => okoPush({ n: 'test-123' })).not.toThrow();
142
+ });
143
+ });
@@ -32,10 +32,12 @@ export const useOkoPush = (data: OkoEvent) => {
32
32
  }
33
33
 
34
34
  if (!isEqual(data, dataRef.current)) {
35
- throw Error([
36
- 'useAnalytics: Данные для аналитики изменились.',
37
- 'Если необходимо использовать динамические данные, вынесите логику из React-компонента.',
38
- ].join('\n'));
35
+ throw Error(
36
+ [
37
+ 'useAnalytics: Данные для аналитики изменились.',
38
+ 'Если необходимо использовать динамические данные, вынесите логику из React-компонента.',
39
+ ].join('\n'),
40
+ );
39
41
  }
40
42
 
41
43
  return fnRef.current;
@@ -0,0 +1,75 @@
1
+ /* eslint-disable require-jsdoc, jsdoc/require-jsdoc */
2
+
3
+ export interface StorageUtils
4
+ extends Pick<Storage, 'clear' | 'getItem' | 'key' | 'removeItem' | 'setItem' | 'length'> {
5
+ isAvailable: () => boolean;
6
+ }
7
+
8
+ export function createStorageUtils(getStorage: () => Storage): StorageUtils {
9
+ function isAvailable(): boolean {
10
+ try {
11
+ const testKey = `local_storage_test_key::${Date.now()}`;
12
+
13
+ getStorage().setItem(testKey, testKey);
14
+ getStorage().removeItem(testKey);
15
+
16
+ return true;
17
+ } catch {
18
+ return false;
19
+ }
20
+ }
21
+
22
+ function clear(): void {
23
+ if (isAvailable()) {
24
+ getStorage().clear();
25
+ }
26
+ }
27
+
28
+ function getItem(name: string): string | null {
29
+ if (isAvailable()) {
30
+ return getStorage().getItem(name);
31
+ }
32
+
33
+ return null;
34
+ }
35
+
36
+ function key(index: number): string | null {
37
+ if (isAvailable()) {
38
+ return getStorage().key(index);
39
+ }
40
+ return null;
41
+ }
42
+
43
+ function removeItem(name: string): void {
44
+ if (isAvailable()) {
45
+ getStorage().removeItem(name);
46
+ }
47
+ }
48
+
49
+ function setItem(name: string, value: string): void {
50
+ if (isAvailable()) {
51
+ getStorage().setItem(name, value);
52
+ }
53
+ }
54
+
55
+ function length(): number {
56
+ if (isAvailable()) {
57
+ return getStorage().length;
58
+ }
59
+
60
+ return 0;
61
+ }
62
+
63
+ return {
64
+ isAvailable,
65
+
66
+ clear,
67
+ getItem,
68
+ key,
69
+ removeItem,
70
+ setItem,
71
+ get length() {
72
+ return length();
73
+ },
74
+ };
75
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Переводит наносекунды в миллисекунды.
3
+ * @param nanoseconds Наносекунды.
4
+ * @return Миллисекунды.
5
+ */
6
+ export function toMilliseconds(nanoseconds: bigint): number {
7
+ return Number(nanoseconds / 1000000n);
8
+ }
@@ -0,0 +1,27 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`ErrorBoundary should call captureException 1`] = `<div />`;
4
+
5
+ exports[`ErrorBoundary should render children component 1`] = `
6
+ <div>
7
+ <div>
8
+ Normal component
9
+ </div>
10
+ </div>
11
+ `;
12
+
13
+ exports[`ErrorBoundary should render fallback component 1`] = `
14
+ <div>
15
+ <div>
16
+ Fallback
17
+ </div>
18
+ </div>
19
+ `;
20
+
21
+ exports[`SafeSuspense should render with props 1`] = `
22
+ <div>
23
+ <div>
24
+ Normal component
25
+ </div>
26
+ </div>
27
+ `;
@@ -0,0 +1,64 @@
1
+ import React from 'react';
2
+ import { render } from '@testing-library/react';
3
+ import { ErrorBoundary, SafeSuspense } from '..';
4
+
5
+ describe('ErrorBoundary', () => {
6
+ const error = new Error('Test error');
7
+
8
+ const FailedComponent = () => {
9
+ throw error;
10
+ };
11
+
12
+ it('should render children component', () => {
13
+ const { container } = render(
14
+ <ErrorBoundary fallback={null}>
15
+ <div>Normal component</div>
16
+ </ErrorBoundary>,
17
+ );
18
+
19
+ expect(container.textContent).toContain('Normal component');
20
+ expect(container).toMatchSnapshot();
21
+ });
22
+
23
+ it('should render fallback component', () => {
24
+ const { container } = render(
25
+ <ErrorBoundary fallback={<div>Fallback</div>}>
26
+ <>
27
+ <div>Normal component</div>
28
+ <FailedComponent />
29
+ </>
30
+ </ErrorBoundary>,
31
+ );
32
+
33
+ expect(container.textContent).toContain('Fallback');
34
+ expect(container).toMatchSnapshot();
35
+ });
36
+
37
+ it('should call captureException', () => {
38
+ const handlerException = jest.fn();
39
+
40
+ const { container } = render(
41
+ <ErrorBoundary fallback={null} onError={handlerException}>
42
+ <>
43
+ <div>Normal component</div>
44
+ <FailedComponent />
45
+ </>
46
+ </ErrorBoundary>,
47
+ );
48
+
49
+ expect(handlerException).toBeCalledWith(error, { componentStack: expect.any(String) });
50
+ expect(container).toMatchSnapshot();
51
+ });
52
+ });
53
+
54
+ describe('SafeSuspense', () => {
55
+ it('should render with props', () => {
56
+ const { container } = render(
57
+ <SafeSuspense fallback={<div>Fallback</div>} onError={jest.fn()}>
58
+ <div>Normal component</div>
59
+ </SafeSuspense>,
60
+ );
61
+
62
+ expect(container).toMatchSnapshot();
63
+ });
64
+ });
@@ -0,0 +1,62 @@
1
+ import React from 'react';
2
+
3
+ export interface Props {
4
+ /** Дочерний компонент. */
5
+ children: NonNullable<React.ReactNode> | null;
6
+
7
+ /** Запасной элемент, если возникла ошибка. */
8
+ fallback: NonNullable<React.ReactNode> | null;
9
+
10
+ /** Функция для логирования ошибки. */
11
+ onError?: (error: Error, errorInfo: React.ErrorInfo) => void;
12
+ }
13
+
14
+ /**
15
+ * Обработчик ошибок в React-компонентах.
16
+ */
17
+ export class ErrorBoundary extends React.Component<Props, { hasError: boolean }> {
18
+ /**
19
+ * @param props Свойства.
20
+ */
21
+ constructor(props: Props) {
22
+ super(props);
23
+
24
+ this.state = { hasError: false };
25
+ }
26
+
27
+ /** @inheritdoc */
28
+ static getDerivedStateFromError() {
29
+ return { hasError: true };
30
+ }
31
+
32
+ /** @inheritdoc */
33
+ componentDidCatch(error: Error, errorInfo: React.ErrorInfo) {
34
+ const { onError } = this.props;
35
+
36
+ onError?.(error, errorInfo);
37
+ }
38
+
39
+ /**
40
+ * Рендер.
41
+ * @return Дочерний элемент либо запасное значение.
42
+ */
43
+ render() {
44
+ const { children, fallback } = this.props;
45
+
46
+ return this.state.hasError ? fallback : children;
47
+ }
48
+ }
49
+
50
+ /**
51
+ * Обертка над Suspense c перехватом ошибок.
52
+ * @todo Возможно этот компонент не нужен...
53
+ * @param props Свойства.
54
+ * @return Элемент.
55
+ */
56
+ export const SafeSuspense = ({ children, fallback, onError }: Props) => (
57
+ <React.Suspense fallback={fallback}>
58
+ <ErrorBoundary fallback={fallback} onError={onError}>
59
+ {children}
60
+ </ErrorBoundary>
61
+ </React.Suspense>
62
+ );
@@ -0,0 +1,50 @@
1
+ import { createSlice } from '@reduxjs/toolkit';
2
+ import { createRemoteDataReducers, RemoteDataState, STATUS } from '../remote-data';
3
+
4
+ interface TestState extends RemoteDataState<number, string> {
5
+ foo: 'bar';
6
+ }
7
+
8
+ describe('createGenericSlice', () => {
9
+ const initialState: TestState = {
10
+ data: 0,
11
+ error: '',
12
+ status: STATUS.initial,
13
+ foo: 'bar',
14
+ };
15
+
16
+ const { reducer, actions } = createSlice({
17
+ name: 'user',
18
+ initialState,
19
+ reducers: createRemoteDataReducers<TestState>(),
20
+ });
21
+
22
+ it('should handle request action', () => {
23
+ const actual = reducer(initialState, actions.request());
24
+
25
+ expect(actual).toEqual({
26
+ ...initialState,
27
+ status: STATUS.fetching,
28
+ });
29
+ });
30
+
31
+ it('should handle success action', () => {
32
+ const actual = reducer(initialState, actions.success(234));
33
+
34
+ expect(actual).toEqual({
35
+ ...initialState,
36
+ data: 234,
37
+ status: STATUS.success,
38
+ });
39
+ });
40
+
41
+ it('should handle failure action', () => {
42
+ const actual = reducer(initialState, actions.failure('error message here'));
43
+
44
+ expect(actual).toEqual({
45
+ ...initialState,
46
+ error: 'error message here',
47
+ status: STATUS.failure,
48
+ });
49
+ });
50
+ });
@@ -0,0 +1,34 @@
1
+ import type { PayloadAction, Draft } from '@reduxjs/toolkit';
2
+
3
+ export type Status = 'initial' | 'fetching' | 'success' | 'failure';
4
+
5
+ export interface RemoteDataState<TData, TError> {
6
+ data: TData;
7
+ error: TError;
8
+ status: Status;
9
+ }
10
+
11
+ export const STATUS: Record<Status, Status> = {
12
+ initial: 'initial',
13
+ fetching: 'fetching',
14
+ success: 'success',
15
+ failure: 'failure',
16
+ };
17
+
18
+ /**
19
+ * Возвращает набор обработчиков для работы с удаленными данными.
20
+ * @return Набор.
21
+ */
22
+ export const createRemoteDataReducers = <S extends RemoteDataState<any, any>>() => ({
23
+ request: (state: Draft<S>) => {
24
+ state.status = STATUS.fetching;
25
+ },
26
+ success: (state: Draft<S>, action: PayloadAction<S['data']>) => {
27
+ state.data = action.payload;
28
+ state.status = STATUS.success;
29
+ },
30
+ failure: (state: Draft<S>, action: PayloadAction<S['error']>) => {
31
+ state.error = action.payload;
32
+ state.status = STATUS.failure;
33
+ },
34
+ });
@@ -0,0 +1,141 @@
1
+ import { delay, fork, put, race, take } from 'redux-saga/effects';
2
+ import { generateTakeChain, putDelayed, takeChain } from '../take-chain';
3
+
4
+ const SettlementTypes = {
5
+ UPDATE: 'settlement',
6
+ REMOVE: 'settlement',
7
+ };
8
+
9
+ describe('takeChain', () => {
10
+ beforeEach(() => {
11
+ jest.spyOn(Date, 'now').mockImplementation(() => 123);
12
+ });
13
+
14
+ const testTypes = [SettlementTypes.UPDATE, SettlementTypes.REMOVE];
15
+ const timeout = 100;
16
+ const testTask = jest.fn();
17
+ const deps: [string, number] = ['John', 23];
18
+
19
+ it('generateTakeChain few actions', () => {
20
+ const gen = generateTakeChain(timeout, testTypes, testTask, deps);
21
+
22
+ expect(gen.next().value).toEqual(take(testTypes));
23
+
24
+ expect(gen.next({ type: SettlementTypes.REMOVE.toString() }).value).toEqual(
25
+ fork(putDelayed, timeout, { type: 'BREAK_123' }),
26
+ );
27
+
28
+ expect(gen.next().value).toEqual(
29
+ race({
30
+ action: take(testTypes),
31
+ canceled: take('BREAK_123'),
32
+ }),
33
+ );
34
+ expect(
35
+ gen.next({
36
+ action: { type: SettlementTypes.UPDATE.toString() },
37
+ canceled: { type: 'BREAK_123' },
38
+ }).value,
39
+ ).toEqual(
40
+ fork(testTask, ...deps, [
41
+ { type: SettlementTypes.REMOVE.toString() },
42
+ { type: SettlementTypes.UPDATE.toString() },
43
+ ]),
44
+ );
45
+ expect(gen.next()).toBeTruthy();
46
+ });
47
+
48
+ it('generateTakeChain one action', () => {
49
+ const gen = generateTakeChain(timeout, testTypes, testTask, deps);
50
+
51
+ expect(gen.next().value).toEqual(take(testTypes));
52
+
53
+ expect(gen.next({ type: 'settlement/REMOVE' }).value).toEqual(
54
+ fork(putDelayed, timeout, { type: 'BREAK_123' }),
55
+ );
56
+
57
+ expect(gen.next().value).toEqual(
58
+ race({
59
+ action: take(testTypes),
60
+ canceled: take('BREAK_123'),
61
+ }),
62
+ );
63
+ expect(
64
+ gen.next({
65
+ action: undefined,
66
+ canceled: { type: 'BREAK_123' },
67
+ }).value,
68
+ ).toEqual(fork(testTask, ...deps, [{ type: 'settlement/REMOVE' }]));
69
+ expect(gen.next()).toBeTruthy();
70
+ });
71
+
72
+ it('generateTakeChain without canceled', () => {
73
+ const gen = generateTakeChain(timeout, testTypes, testTask, deps);
74
+
75
+ expect(gen.next().value).toEqual(take(testTypes));
76
+
77
+ expect(gen.next({ type: 'settlement/REMOVE' }).value).toEqual(
78
+ fork(putDelayed, timeout, { type: 'BREAK_123' }),
79
+ );
80
+
81
+ expect(gen.next().value).toEqual(
82
+ race({
83
+ action: take(testTypes),
84
+ canceled: take('BREAK_123'),
85
+ }),
86
+ );
87
+ expect(
88
+ gen.next({
89
+ action: undefined,
90
+ canceled: undefined,
91
+ }).value,
92
+ ).toBeTruthy();
93
+ });
94
+
95
+ it('generateTakeChain when puts all actions and have not canceled', () => {
96
+ const gen = generateTakeChain(timeout, testTypes, testTask, deps);
97
+
98
+ expect(gen.next().value).toEqual(take(testTypes));
99
+
100
+ expect(gen.next({ type: SettlementTypes.REMOVE.toString() }).value).toEqual(
101
+ fork(putDelayed, timeout, { type: 'BREAK_123' }),
102
+ );
103
+
104
+ expect(gen.next().value).toEqual(
105
+ race({
106
+ action: take(testTypes),
107
+ canceled: take('BREAK_123'),
108
+ }),
109
+ );
110
+
111
+ expect(
112
+ gen.next({
113
+ action: { type: SettlementTypes.UPDATE.toString() },
114
+ canceled: undefined,
115
+ }).value,
116
+ ).toEqual(
117
+ fork(testTask, ...deps, [
118
+ { type: SettlementTypes.REMOVE.toString() },
119
+ { type: SettlementTypes.UPDATE.toString() },
120
+ ]),
121
+ );
122
+ expect(gen.next()).toBeTruthy();
123
+ });
124
+
125
+ it('should fork generateTakeChain', () => {
126
+ const fakeTakeChain = takeChain(timeout, testTypes, testTask, ...deps);
127
+
128
+ expect(fakeTakeChain).toEqual(fork(generateTakeChain, timeout, testTypes, testTask, deps));
129
+ });
130
+ });
131
+
132
+ describe('putDelayed', () => {
133
+ it('should works properly', () => {
134
+ const gen = putDelayed(10, { type: 'test' });
135
+
136
+ expect(gen.next().value).toEqual(delay(10));
137
+ expect(gen.next().value).toEqual(put({ type: 'test' }));
138
+
139
+ expect(gen.next()).toBeTruthy();
140
+ });
141
+ });