@sima-land/isomorph 11.0.0-alpha.50 → 11.0.0-alpha.52

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 (129) hide show
  1. package/dist/cjs/di/application.js +1 -1
  2. package/dist/cjs/di/application.js.map +1 -1
  3. package/dist/cjs/di/container.js +1 -1
  4. package/dist/cjs/di/container.js.map +1 -1
  5. package/dist/cjs/di/preset.js +1 -1
  6. package/dist/cjs/di/preset.js.map +1 -1
  7. package/dist/cjs/http/utils.js +16 -4
  8. package/dist/cjs/http/utils.js.map +1 -1
  9. package/dist/cjs/log/handler/sentry.js +18 -22
  10. package/dist/cjs/log/handler/sentry.js.map +1 -1
  11. package/dist/cjs/log/index.js +14 -0
  12. package/dist/cjs/log/index.js.map +1 -1
  13. package/dist/cjs/log/logger.js +1 -1
  14. package/dist/cjs/log/logger.js.map +1 -1
  15. package/dist/cjs/package.json +16 -16
  16. package/dist/cjs/preset/bun/providers/config-source.js +1 -1
  17. package/dist/cjs/preset/bun/providers/config-source.js.map +1 -1
  18. package/dist/cjs/preset/bun/providers/log-handler-sentry.js +5 -3
  19. package/dist/cjs/preset/bun/providers/log-handler-sentry.js.map +1 -1
  20. package/dist/cjs/preset/bun/providers/logger.js +1 -1
  21. package/dist/cjs/preset/bun/providers/logger.js.map +1 -1
  22. package/dist/cjs/preset/bun/providers/serve-metrics.js +1 -1
  23. package/dist/cjs/preset/bun/providers/serve-metrics.js.map +1 -1
  24. package/dist/cjs/preset/bun/providers/serve-middleware.js +2 -2
  25. package/dist/cjs/preset/bun/providers/serve-middleware.js.map +1 -1
  26. package/dist/cjs/preset/bun/providers/service-routes.js +1 -1
  27. package/dist/cjs/preset/bun/providers/service-routes.js.map +1 -1
  28. package/dist/cjs/preset/bun-handler/index.js +0 -2
  29. package/dist/cjs/preset/bun-handler/index.js.map +1 -1
  30. package/dist/cjs/preset/bun-handler/providers/fetch-middleware.js +1 -1
  31. package/dist/cjs/preset/bun-handler/providers/fetch-middleware.js.map +1 -1
  32. package/dist/cjs/preset/bun-handler/providers/handler-main.js +1 -1
  33. package/dist/cjs/preset/bun-handler/providers/handler-main.js.map +1 -1
  34. package/dist/cjs/preset/bun-handler/providers/specific-params.js +1 -1
  35. package/dist/cjs/preset/bun-handler/providers/specific-params.js.map +1 -1
  36. package/dist/cjs/preset/node/providers/express-error-middleware.js +1 -1
  37. package/dist/cjs/preset/node/providers/express-error-middleware.js.map +1 -1
  38. package/dist/cjs/preset/node/providers/express-request-middleware.js +6 -1
  39. package/dist/cjs/preset/node/providers/express-request-middleware.js.map +1 -1
  40. package/dist/cjs/preset/node/providers/log-handler-sentry.js +11 -7
  41. package/dist/cjs/preset/node/providers/log-handler-sentry.js.map +1 -1
  42. package/dist/cjs/preset/node/providers/main-express-app.js +1 -3
  43. package/dist/cjs/preset/node/providers/main-express-app.js.map +1 -1
  44. package/dist/cjs/preset/server/providers/fetch-middleware.js +1 -1
  45. package/dist/cjs/preset/server/providers/fetch-middleware.js.map +1 -1
  46. package/dist/cjs/preset/server/providers/serve.js +1 -1
  47. package/dist/cjs/preset/server/providers/serve.js.map +1 -1
  48. package/dist/cjs/preset/web/providers/logger.js +9 -6
  49. package/dist/cjs/preset/web/providers/logger.js.map +1 -1
  50. package/dist/cjs/utils/redux/remote-data.js +1 -1
  51. package/dist/cjs/utils/redux/remote-data.js.map +1 -1
  52. package/dist/cjs/utils/redux-saga/middleware.js +1 -1
  53. package/dist/cjs/utils/redux-saga/middleware.js.map +1 -1
  54. package/dist/cjs/utils/web/storage/index.js +1 -1
  55. package/dist/cjs/utils/web/storage/index.js.map +1 -1
  56. package/dist/cjs/utils/webpack/index.js +6 -0
  57. package/dist/cjs/utils/webpack/index.js.map +1 -1
  58. package/dist/esm/di/application.js +1 -1
  59. package/dist/esm/di/application.js.map +1 -1
  60. package/dist/esm/di/container.js +1 -1
  61. package/dist/esm/di/container.js.map +1 -1
  62. package/dist/esm/di/preset.js +1 -1
  63. package/dist/esm/di/preset.js.map +1 -1
  64. package/dist/esm/http/utils.js +16 -4
  65. package/dist/esm/http/utils.js.map +1 -1
  66. package/dist/esm/log/handler/sentry.js +18 -22
  67. package/dist/esm/log/handler/sentry.js.map +1 -1
  68. package/dist/esm/log/index.js +2 -0
  69. package/dist/esm/log/index.js.map +1 -1
  70. package/dist/esm/log/logger.js +1 -1
  71. package/dist/esm/log/logger.js.map +1 -1
  72. package/dist/esm/package.json +16 -16
  73. package/dist/esm/preset/bun/providers/config-source.js +1 -1
  74. package/dist/esm/preset/bun/providers/config-source.js.map +1 -1
  75. package/dist/esm/preset/bun/providers/log-handler-sentry.js +6 -4
  76. package/dist/esm/preset/bun/providers/log-handler-sentry.js.map +1 -1
  77. package/dist/esm/preset/bun/providers/logger.js +1 -1
  78. package/dist/esm/preset/bun/providers/logger.js.map +1 -1
  79. package/dist/esm/preset/bun/providers/serve-metrics.js +1 -1
  80. package/dist/esm/preset/bun/providers/serve-metrics.js.map +1 -1
  81. package/dist/esm/preset/bun/providers/serve-middleware.js +3 -3
  82. package/dist/esm/preset/bun/providers/serve-middleware.js.map +1 -1
  83. package/dist/esm/preset/bun/providers/service-routes.js +1 -1
  84. package/dist/esm/preset/bun/providers/service-routes.js.map +1 -1
  85. package/dist/esm/preset/bun-handler/index.js +0 -1
  86. package/dist/esm/preset/bun-handler/index.js.map +1 -1
  87. package/dist/esm/preset/bun-handler/providers/fetch-middleware.js +1 -1
  88. package/dist/esm/preset/bun-handler/providers/fetch-middleware.js.map +1 -1
  89. package/dist/esm/preset/bun-handler/providers/handler-main.js +1 -1
  90. package/dist/esm/preset/bun-handler/providers/handler-main.js.map +1 -1
  91. package/dist/esm/preset/bun-handler/providers/specific-params.js +1 -1
  92. package/dist/esm/preset/bun-handler/providers/specific-params.js.map +1 -1
  93. package/dist/esm/preset/node/providers/express-error-middleware.js +2 -3
  94. package/dist/esm/preset/node/providers/express-error-middleware.js.map +1 -1
  95. package/dist/esm/preset/node/providers/express-request-middleware.js +7 -3
  96. package/dist/esm/preset/node/providers/express-request-middleware.js.map +1 -1
  97. package/dist/esm/preset/node/providers/log-handler-sentry.js +11 -5
  98. package/dist/esm/preset/node/providers/log-handler-sentry.js.map +1 -1
  99. package/dist/esm/preset/node/providers/main-express-app.js +1 -3
  100. package/dist/esm/preset/node/providers/main-express-app.js.map +1 -1
  101. package/dist/esm/preset/server/providers/fetch-middleware.js +1 -1
  102. package/dist/esm/preset/server/providers/fetch-middleware.js.map +1 -1
  103. package/dist/esm/preset/server/providers/serve.js +1 -1
  104. package/dist/esm/preset/server/providers/serve.js.map +1 -1
  105. package/dist/esm/preset/web/providers/logger.js +10 -7
  106. package/dist/esm/preset/web/providers/logger.js.map +1 -1
  107. package/dist/esm/utils/redux/remote-data.js +1 -1
  108. package/dist/esm/utils/redux/remote-data.js.map +1 -1
  109. package/dist/esm/utils/redux-saga/middleware.js +1 -1
  110. package/dist/esm/utils/redux-saga/middleware.js.map +1 -1
  111. package/dist/esm/utils/web/storage/index.js +1 -1
  112. package/dist/esm/utils/web/storage/index.js.map +1 -1
  113. package/dist/esm/utils/webpack/index.js +2 -3
  114. package/dist/esm/utils/webpack/index.js.map +1 -1
  115. package/dist/types/http/utils.d.ts.map +1 -1
  116. package/dist/types/log/handler/sentry.d.ts +3 -3
  117. package/dist/types/log/handler/sentry.d.ts.map +1 -1
  118. package/dist/types/log/index.d.ts +2 -0
  119. package/dist/types/log/index.d.ts.map +1 -1
  120. package/dist/types/preset/bun/providers/log-handler-sentry.d.ts.map +1 -1
  121. package/dist/types/preset/bun-handler/index.d.ts.map +1 -1
  122. package/dist/types/preset/node/providers/express-error-middleware.d.ts.map +1 -1
  123. package/dist/types/preset/node/providers/express-request-middleware.d.ts.map +1 -1
  124. package/dist/types/preset/node/providers/log-handler-sentry.d.ts.map +1 -1
  125. package/dist/types/preset/node/providers/main-express-app.d.ts.map +1 -1
  126. package/dist/types/preset/web/providers/logger.d.ts.map +1 -1
  127. package/dist/types/utils/webpack/index.d.ts +4 -6
  128. package/dist/types/utils/webpack/index.d.ts.map +1 -1
  129. package/package.json +21 -21
@@ -1,10 +1,14 @@
1
- import { Handlers } from '@sentry/node';
2
-
1
+ import { withIsolationScope } from '@sentry/node';
3
2
  /**
4
3
  * Провайдер промежуточного слоя учета входящих http-запросов.
5
4
  * @return Промежуточный слой.
6
5
  */
7
6
  export function provideExpressRequestMiddleware() {
8
- return Handlers.requestHandler();
7
+ // https://github.com/getsentry/sentry-javascript/discussions/9618#discussioncomment-9950984
8
+ return (req, res, next) => {
9
+ withIsolationScope(() => {
10
+ next();
11
+ });
12
+ };
9
13
  }
10
14
  //# sourceMappingURL=express-request-middleware.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"express-request-middleware.js","names":["Handlers","provideExpressRequestMiddleware","requestHandler"],"sources":["../../../../../src/preset/node/providers/express-request-middleware.ts"],"sourcesContent":["import type express from 'express';\nimport { Handlers } from '@sentry/node';\n\n/**\n * Провайдер промежуточного слоя учета входящих http-запросов.\n * @return Промежуточный слой.\n */\nexport function provideExpressRequestMiddleware(): express.Handler {\n return Handlers.requestHandler();\n}\n"],"mappings":"AACA,SAASA,QAAQ,QAAQ,cAAc;;AAEvC;AACA;AACA;AACA;AACA,OAAO,SAASC,+BAA+BA,CAAA,EAAoB;EACjE,OAAOD,QAAQ,CAACE,cAAc,CAAC,CAAC;AAClC"}
1
+ {"version":3,"file":"express-request-middleware.js","names":["withIsolationScope","provideExpressRequestMiddleware","req","res","next"],"sources":["../../../../../src/preset/node/providers/express-request-middleware.ts"],"sourcesContent":["import { withIsolationScope } from '@sentry/node';\nimport type express from 'express';\n\n/**\n * Провайдер промежуточного слоя учета входящих http-запросов.\n * @return Промежуточный слой.\n */\nexport function provideExpressRequestMiddleware(): express.Handler {\n // https://github.com/getsentry/sentry-javascript/discussions/9618#discussioncomment-9950984\n return (req, res, next) => {\n withIsolationScope(() => {\n next();\n });\n };\n}\n"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,cAAc;AAGjD;AACA;AACA;AACA;AACA,OAAO,SAASC,+BAA+BA,CAAA,EAAoB;EACjE;EACA,OAAO,CAACC,GAAG,EAAEC,GAAG,EAAEC,IAAI,KAAK;IACzBJ,kBAAkB,CAAC,MAAM;MACvBI,IAAI,CAAC,CAAC;IACR,CAAC,CAAC;EACJ,CAAC;AACH"}
@@ -1,4 +1,4 @@
1
- import * as Sentry from '@sentry/node';
1
+ import { init, getDefaultIntegrations, getCurrentScope } from '@sentry/node';
2
2
  import { createSentryHandler } from "../../../log/handler/sentry.js";
3
3
  import { KnownToken } from "../../../tokens.js";
4
4
 
@@ -11,14 +11,20 @@ export function provideLogHandlerSentry(resolve) {
11
11
  const source = resolve(KnownToken.Config.source);
12
12
 
13
13
  // экспериментально пробуем не использовать вручную созданный клиент
14
- Sentry.init({
14
+ init({
15
15
  dsn: source.require('SENTRY_DSN'),
16
16
  release: source.require('SENTRY_RELEASE'),
17
- environment: source.require('SENTRY_ENVIRONMENT')
17
+ environment: source.require('SENTRY_ENVIRONMENT'),
18
+ tracesSampleRate: Number(source.get('SENTRY_TRACES_SAMPLE_RATE', 0)),
19
+ profilesSampleRate: Number(source.get('SENTRY_TRACES_SAMPLE_RATE', 0)),
20
+ integrations: [...getDefaultIntegrations({})]
21
+
22
+ // ВАЖНО: данная опция ломает группировку ошибок, активировать при необэодимости связать компоненты OTEL с Sentry
23
+ // skipOpenTelemetrySetup: true,
18
24
  });
19
25
 
20
- // ВАЖНО: передаем функцию чтобы брать текущий hub в момент вызова метода logger'а
26
+ // ВАЖНО: передаем функцию чтобы брать текущий scope в момент вызова метода logger'а
21
27
  // это нужно чтобы хлебные крошки в ошибках Sentry группировались по запросам
22
- return createSentryHandler(Sentry.getCurrentHub);
28
+ return createSentryHandler(getCurrentScope);
23
29
  }
24
30
  //# sourceMappingURL=log-handler-sentry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"log-handler-sentry.js","names":["Sentry","createSentryHandler","KnownToken","provideLogHandlerSentry","resolve","source","Config","init","dsn","require","release","environment","getCurrentHub"],"sources":["../../../../../src/preset/node/providers/log-handler-sentry.ts"],"sourcesContent":["import * as Sentry from '@sentry/node';\nimport { Resolve } from '../../../di';\nimport { LogHandler } from '../../../log';\nimport { createSentryHandler } from '../../../log/handler/sentry';\nimport { KnownToken } from '../../../tokens';\n\n/**\n * Провайдер обработчика логирования для Sentry.\n * @param resolve Функция для получения зависимости по токену.\n * @return Обработчик.\n */\nexport function provideLogHandlerSentry(resolve: Resolve): LogHandler {\n const source = resolve(KnownToken.Config.source);\n\n // экспериментально пробуем не использовать вручную созданный клиент\n Sentry.init({\n dsn: source.require('SENTRY_DSN'),\n release: source.require('SENTRY_RELEASE'),\n environment: source.require('SENTRY_ENVIRONMENT'),\n });\n\n // ВАЖНО: передаем функцию чтобы брать текущий hub в момент вызова метода logger'а\n // это нужно чтобы хлебные крошки в ошибках Sentry группировались по запросам\n return createSentryHandler(Sentry.getCurrentHub);\n}\n"],"mappings":"AAAA,OAAO,KAAKA,MAAM,MAAM,cAAc;AAGtC,SAASC,mBAAmB,QAAQ,gCAA6B;AACjE,SAASC,UAAU,QAAQ,oBAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,uBAAuBA,CAACC,OAAgB,EAAc;EACpE,MAAMC,MAAM,GAAGD,OAAO,CAACF,UAAU,CAACI,MAAM,CAACD,MAAM,CAAC;;EAEhD;EACAL,MAAM,CAACO,IAAI,CAAC;IACVC,GAAG,EAAEH,MAAM,CAACI,OAAO,CAAC,YAAY,CAAC;IACjCC,OAAO,EAAEL,MAAM,CAACI,OAAO,CAAC,gBAAgB,CAAC;IACzCE,WAAW,EAAEN,MAAM,CAACI,OAAO,CAAC,oBAAoB;EAClD,CAAC,CAAC;;EAEF;EACA;EACA,OAAOR,mBAAmB,CAACD,MAAM,CAACY,aAAa,CAAC;AAClD"}
1
+ {"version":3,"file":"log-handler-sentry.js","names":["init","getDefaultIntegrations","getCurrentScope","createSentryHandler","KnownToken","provideLogHandlerSentry","resolve","source","Config","dsn","require","release","environment","tracesSampleRate","Number","get","profilesSampleRate","integrations"],"sources":["../../../../../src/preset/node/providers/log-handler-sentry.ts"],"sourcesContent":["import { init, getDefaultIntegrations, getCurrentScope } from '@sentry/node';\nimport { Resolve } from '../../../di';\nimport { LogHandler } from '../../../log';\nimport { createSentryHandler } from '../../../log/handler/sentry';\nimport { KnownToken } from '../../../tokens';\n\n/**\n * Провайдер обработчика логирования для Sentry.\n * @param resolve Функция для получения зависимости по токену.\n * @return Обработчик.\n */\nexport function provideLogHandlerSentry(resolve: Resolve): LogHandler {\n const source = resolve(KnownToken.Config.source);\n\n // экспериментально пробуем не использовать вручную созданный клиент\n init({\n dsn: source.require('SENTRY_DSN'),\n release: source.require('SENTRY_RELEASE'),\n environment: source.require('SENTRY_ENVIRONMENT'),\n tracesSampleRate: Number(source.get('SENTRY_TRACES_SAMPLE_RATE', 0)),\n profilesSampleRate: Number(source.get('SENTRY_TRACES_SAMPLE_RATE', 0)),\n integrations: [...getDefaultIntegrations({})],\n\n // ВАЖНО: данная опция ломает группировку ошибок, активировать при необэодимости связать компоненты OTEL с Sentry\n // skipOpenTelemetrySetup: true,\n });\n\n // ВАЖНО: передаем функцию чтобы брать текущий scope в момент вызова метода logger'а\n // это нужно чтобы хлебные крошки в ошибках Sentry группировались по запросам\n return createSentryHandler(getCurrentScope);\n}\n"],"mappings":"AAAA,SAASA,IAAI,EAAEC,sBAAsB,EAAEC,eAAe,QAAQ,cAAc;AAG5E,SAASC,mBAAmB,QAAQ,gCAA6B;AACjE,SAASC,UAAU,QAAQ,oBAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,uBAAuBA,CAACC,OAAgB,EAAc;EACpE,MAAMC,MAAM,GAAGD,OAAO,CAACF,UAAU,CAACI,MAAM,CAACD,MAAM,CAAC;;EAEhD;EACAP,IAAI,CAAC;IACHS,GAAG,EAAEF,MAAM,CAACG,OAAO,CAAC,YAAY,CAAC;IACjCC,OAAO,EAAEJ,MAAM,CAACG,OAAO,CAAC,gBAAgB,CAAC;IACzCE,WAAW,EAAEL,MAAM,CAACG,OAAO,CAAC,oBAAoB,CAAC;IACjDG,gBAAgB,EAAEC,MAAM,CAACP,MAAM,CAACQ,GAAG,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAC;IACpEC,kBAAkB,EAAEF,MAAM,CAACP,MAAM,CAACQ,GAAG,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAC;IACtEE,YAAY,EAAE,CAAC,GAAGhB,sBAAsB,CAAC,CAAC,CAAC,CAAC;;IAE5C;IACA;EACF,CAAC,CAAC;;EAEF;EACA;EACA,OAAOE,mBAAmB,CAACD,eAAe,CAAC;AAC7C"}
@@ -52,9 +52,7 @@ export function provideMainExpressApp(resolve) {
52
52
  for (const [routePath, routeHandler] of pageRoutes) {
53
53
  const path = typeof routePath === 'string' ? routePath : routePath.path;
54
54
  const method = typeof routePath === 'string' ? 'get' : routePath.method;
55
- app.use(path, middleware);
56
- app[method](path, routeHandler);
57
- app.use(path, endMiddleware);
55
+ app[method](path, middleware, routeHandler, endMiddleware);
58
56
  }
59
57
 
60
58
  // служебные маршруты (к ним не применяются промежуточные слои)
@@ -1 +1 @@
1
- {"version":3,"file":"main-express-app.js","names":["KnownToken","express","createProxyMiddleware","provideMainExpressApp","resolve","config","Config","base","pageRoutes","Express","serviceRoutes","middleware","endMiddleware","proxyConfig","Http","Serve","Proxy","app","env","proxyConfigs","Array","isArray","target","filter","pathRewrite","Error","proxyPaths","proxyMiddleware","changeOrigin","use","req","res","next","some","proxyPath","path","startsWith","routePath","routeHandler","method"],"sources":["../../../../../src/preset/node/providers/main-express-app.ts"],"sourcesContent":["import type { Resolve } from '../../../di';\nimport { KnownToken } from '../../../tokens';\nimport express from 'express';\nimport { createProxyMiddleware } from 'http-proxy-middleware';\n\n/**\n * Провайдер основного express-приложения.\n * @param resolve Функция для получения зависимости по токену.\n * @return Основное express-приложение.\n */\nexport function provideMainExpressApp(resolve: Resolve): express.Application {\n const config = resolve(KnownToken.Config.base);\n const pageRoutes = resolve(KnownToken.Express.pageRoutes);\n const serviceRoutes = resolve(KnownToken.Express.serviceRoutes);\n const middleware = resolve(KnownToken.Express.middleware);\n const endMiddleware = resolve(KnownToken.Express.endMiddleware);\n const proxyConfig = resolve(KnownToken.Http.Serve.Proxy.config);\n\n const app = express();\n\n if (config.env === 'development' && proxyConfig) {\n const proxyConfigs = Array.isArray(proxyConfig) ? proxyConfig : [proxyConfig];\n\n for (const { target, filter, pathRewrite } of proxyConfigs) {\n // ВАЖНО: так как не можем предоставить web-интерфейс Request бросаем ошибку\n if (typeof filter === 'function') {\n throw new Error('Currently function is not supported for proxy \"filter\"');\n }\n\n const proxyPaths = Array.isArray(filter) ? filter : [filter];\n\n const proxyMiddleware = createProxyMiddleware({\n target,\n changeOrigin: true,\n pathRewrite,\n\n // ВАЖНО: не используем pathFilter тк если в проекте есть webpack-dev-server,\n // он тащит за собой http-proxy-middleware@2 который не поддерживает pathFilter\n // pathFilter: inputPath => proxyPaths.some(proxyPath => inputPath.startsWith(proxyPath)),\n });\n\n app.use((req, res, next) => {\n // ВАЖНО: поскольку не используем pathFilter - фильтруем запросы проверкой\n if (proxyPaths.some(proxyPath => req.path.startsWith(proxyPath))) {\n proxyMiddleware(req, res, next);\n } else {\n next();\n }\n });\n }\n }\n\n // маршруты страниц\n for (const [routePath, routeHandler] of pageRoutes) {\n const path = typeof routePath === 'string' ? routePath : routePath.path;\n const method = typeof routePath === 'string' ? 'get' : routePath.method;\n\n app.use(path, middleware);\n app[method](path, routeHandler);\n app.use(path, endMiddleware);\n }\n\n // служебные маршруты (к ним не применяются промежуточные слои)\n for (const [routePath, routeHandler] of serviceRoutes) {\n const path = typeof routePath === 'string' ? routePath : routePath.path;\n const method = typeof routePath === 'string' ? 'get' : routePath.method;\n\n app[method](path, routeHandler);\n }\n\n // @todo также добавить apiRoutes?\n return app;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"main-express-app.js","names":["KnownToken","express","createProxyMiddleware","provideMainExpressApp","resolve","config","Config","base","pageRoutes","Express","serviceRoutes","middleware","endMiddleware","proxyConfig","Http","Serve","Proxy","app","env","proxyConfigs","Array","isArray","target","filter","pathRewrite","Error","proxyPaths","proxyMiddleware","changeOrigin","use","req","res","next","some","proxyPath","path","startsWith","routePath","routeHandler","method"],"sources":["../../../../../src/preset/node/providers/main-express-app.ts"],"sourcesContent":["import type { Resolve } from '../../../di';\nimport { KnownToken } from '../../../tokens';\nimport express from 'express';\nimport { createProxyMiddleware } from 'http-proxy-middleware';\n\n/**\n * Провайдер основного express-приложения.\n * @param resolve Функция для получения зависимости по токену.\n * @return Основное express-приложение.\n */\nexport function provideMainExpressApp(resolve: Resolve): express.Application {\n const config = resolve(KnownToken.Config.base);\n const pageRoutes = resolve(KnownToken.Express.pageRoutes);\n const serviceRoutes = resolve(KnownToken.Express.serviceRoutes);\n const middleware = resolve(KnownToken.Express.middleware);\n const endMiddleware = resolve(KnownToken.Express.endMiddleware);\n const proxyConfig = resolve(KnownToken.Http.Serve.Proxy.config);\n\n const app = express();\n\n if (config.env === 'development' && proxyConfig) {\n const proxyConfigs = Array.isArray(proxyConfig) ? proxyConfig : [proxyConfig];\n\n for (const { target, filter, pathRewrite } of proxyConfigs) {\n // ВАЖНО: так как не можем предоставить web-интерфейс Request бросаем ошибку\n if (typeof filter === 'function') {\n throw new Error('Currently function is not supported for proxy \"filter\"');\n }\n\n const proxyPaths = Array.isArray(filter) ? filter : [filter];\n\n const proxyMiddleware = createProxyMiddleware({\n target,\n changeOrigin: true,\n pathRewrite,\n\n // ВАЖНО: не используем pathFilter тк если в проекте есть webpack-dev-server,\n // он тащит за собой http-proxy-middleware@2 который не поддерживает pathFilter\n // pathFilter: inputPath => proxyPaths.some(proxyPath => inputPath.startsWith(proxyPath)),\n });\n\n app.use((req, res, next) => {\n // ВАЖНО: поскольку не используем pathFilter - фильтруем запросы проверкой\n if (proxyPaths.some(proxyPath => req.path.startsWith(proxyPath))) {\n proxyMiddleware(req, res, next);\n } else {\n next();\n }\n });\n }\n }\n\n // маршруты страниц\n for (const [routePath, routeHandler] of pageRoutes) {\n const path = typeof routePath === 'string' ? routePath : routePath.path;\n const method = typeof routePath === 'string' ? 'get' : routePath.method;\n\n app[method](path, middleware, routeHandler, endMiddleware);\n }\n\n // служебные маршруты (к ним не применяются промежуточные слои)\n for (const [routePath, routeHandler] of serviceRoutes) {\n const path = typeof routePath === 'string' ? routePath : routePath.path;\n const method = typeof routePath === 'string' ? 'get' : routePath.method;\n\n app[method](path, routeHandler);\n }\n\n // @todo также добавить apiRoutes?\n return app;\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /* eslint-disable require-jsdoc, jsdoc/require-jsdoc */
1
+ /* eslint-disable jsdoc/require-jsdoc */
2
2
 
3
3
  export function provideFetchMiddleware() {
4
4
  // @todo добавить логирование ошибок?
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-middleware.js","names":["provideFetchMiddleware"],"sources":["../../../../../src/preset/server/providers/fetch-middleware.ts"],"sourcesContent":["/* eslint-disable require-jsdoc, jsdoc/require-jsdoc */\nimport { Middleware } from '../../../http';\n\nexport function provideFetchMiddleware(): Middleware[] {\n // @todo добавить логирование ошибок?\n return [];\n}\n"],"mappings":"AAAA;;AAGA,OAAO,SAASA,sBAAsBA,CAAA,EAAiB;EACrD;EACA,OAAO,EAAE;AACX"}
1
+ {"version":3,"file":"fetch-middleware.js","names":["provideFetchMiddleware"],"sources":["../../../../../src/preset/server/providers/fetch-middleware.ts"],"sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\nimport { Middleware } from '../../../http';\n\nexport function provideFetchMiddleware(): Middleware[] {\n // @todo добавить логирование ошибок?\n return [];\n}\n"],"mappings":"AAAA;;AAGA,OAAO,SAASA,sBAAsBA,CAAA,EAAiB;EACrD;EACA,OAAO,EAAE;AACX"}
@@ -1,4 +1,4 @@
1
- /* eslint-disable require-jsdoc, jsdoc/require-jsdoc */
1
+ /* eslint-disable jsdoc/require-jsdoc */
2
2
 
3
3
  import { KnownToken } from "../../../tokens.js";
4
4
  import { proxy } from "./../../../http/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"serve.js","names":["KnownToken","proxy","router","applyMiddleware","applyServerMiddleware","provideServe","resolve","config","Config","base","pageRoutes","Http","Serve","serviceRoutes","middleware","proxyConfig","Proxy","enhance","env","Array","isArray","map","identity","builder","pattern","handler","path","method","pageHandler","request","events","EventTarget","build","value"],"sources":["../../../../../src/preset/server/providers/serve.ts"],"sourcesContent":["/* eslint-disable require-jsdoc, jsdoc/require-jsdoc */\nimport { Resolve } from '../../../di';\nimport { KnownToken } from '../../../tokens';\nimport { Handler, proxy } from '../../../http';\nimport { router, applyMiddleware } from '@krutoo/fetch-tools';\nimport { applyServerMiddleware } from '../utils/apply-server-middleware';\n\nexport function provideServe(resolve: Resolve): Handler {\n const config = resolve(KnownToken.Config.base);\n const pageRoutes = resolve(KnownToken.Http.Serve.pageRoutes);\n const serviceRoutes = resolve(KnownToken.Http.Serve.serviceRoutes);\n const middleware = resolve(KnownToken.Http.Serve.middleware);\n const proxyConfig = resolve(KnownToken.Http.Serve.Proxy.config);\n\n const enhance =\n config.env === 'development' && proxyConfig\n ? applyMiddleware(\n ...(Array.isArray(proxyConfig) ? proxyConfig.map(proxy) : [proxy(proxyConfig)]),\n )\n : identity;\n\n const builder = router.builder();\n\n // маршруты с промежуточными слоями\n for (const [pattern, handler] of pageRoutes) {\n const path = typeof pattern === 'string' ? pattern : pattern.path;\n const method = typeof pattern === 'string' ? 'get' : pattern.method;\n const pageHandler = applyServerMiddleware(...middleware)(handler);\n\n builder[method](path, request => pageHandler(request, { events: new EventTarget() }));\n }\n\n // служебные маршруты (к ним не применяются промежуточные слои)\n for (const [pattern, handler] of serviceRoutes) {\n const path = typeof pattern === 'string' ? pattern : pattern.path;\n const method = typeof pattern === 'string' ? 'get' : pattern.method;\n\n builder[method](path, request => handler(request, { events: new EventTarget() }));\n }\n\n // @todo также добавить apiRoutes?\n return enhance(builder.build());\n}\n\nfunction identity<T>(value: T): T {\n return value;\n}\n"],"mappings":"AAAA;;AAEA,SAASA,UAAU,QAAQ,oBAAiB;AAC5C,SAAkBC,KAAK,QAAQ,0BAAe;AAC9C,SAASC,MAAM,EAAEC,eAAe,QAAQ,qBAAqB;AAC7D,SAASC,qBAAqB,QAAQ,qCAAkC;AAExE,OAAO,SAASC,YAAYA,CAACC,OAAgB,EAAW;EACtD,MAAMC,MAAM,GAAGD,OAAO,CAACN,UAAU,CAACQ,MAAM,CAACC,IAAI,CAAC;EAC9C,MAAMC,UAAU,GAAGJ,OAAO,CAACN,UAAU,CAACW,IAAI,CAACC,KAAK,CAACF,UAAU,CAAC;EAC5D,MAAMG,aAAa,GAAGP,OAAO,CAACN,UAAU,CAACW,IAAI,CAACC,KAAK,CAACC,aAAa,CAAC;EAClE,MAAMC,UAAU,GAAGR,OAAO,CAACN,UAAU,CAACW,IAAI,CAACC,KAAK,CAACE,UAAU,CAAC;EAC5D,MAAMC,WAAW,GAAGT,OAAO,CAACN,UAAU,CAACW,IAAI,CAACC,KAAK,CAACI,KAAK,CAACT,MAAM,CAAC;EAE/D,MAAMU,OAAO,GACXV,MAAM,CAACW,GAAG,KAAK,aAAa,IAAIH,WAAW,GACvCZ,eAAe,CACb,IAAIgB,KAAK,CAACC,OAAO,CAACL,WAAW,CAAC,GAAGA,WAAW,CAACM,GAAG,CAACpB,KAAK,CAAC,GAAG,CAACA,KAAK,CAACc,WAAW,CAAC,CAAC,CAChF,CAAC,GACDO,QAAQ;EAEd,MAAMC,OAAO,GAAGrB,MAAM,CAACqB,OAAO,CAAC,CAAC;;EAEhC;EACA,KAAK,MAAM,CAACC,OAAO,EAAEC,OAAO,CAAC,IAAIf,UAAU,EAAE;IAC3C,MAAMgB,IAAI,GAAG,OAAOF,OAAO,KAAK,QAAQ,GAAGA,OAAO,GAAGA,OAAO,CAACE,IAAI;IACjE,MAAMC,MAAM,GAAG,OAAOH,OAAO,KAAK,QAAQ,GAAG,KAAK,GAAGA,OAAO,CAACG,MAAM;IACnE,MAAMC,WAAW,GAAGxB,qBAAqB,CAAC,GAAGU,UAAU,CAAC,CAACW,OAAO,CAAC;IAEjEF,OAAO,CAACI,MAAM,CAAC,CAACD,IAAI,EAAEG,OAAO,IAAID,WAAW,CAACC,OAAO,EAAE;MAAEC,MAAM,EAAE,IAAIC,WAAW,CAAC;IAAE,CAAC,CAAC,CAAC;EACvF;;EAEA;EACA,KAAK,MAAM,CAACP,OAAO,EAAEC,OAAO,CAAC,IAAIZ,aAAa,EAAE;IAC9C,MAAMa,IAAI,GAAG,OAAOF,OAAO,KAAK,QAAQ,GAAGA,OAAO,GAAGA,OAAO,CAACE,IAAI;IACjE,MAAMC,MAAM,GAAG,OAAOH,OAAO,KAAK,QAAQ,GAAG,KAAK,GAAGA,OAAO,CAACG,MAAM;IAEnEJ,OAAO,CAACI,MAAM,CAAC,CAACD,IAAI,EAAEG,OAAO,IAAIJ,OAAO,CAACI,OAAO,EAAE;MAAEC,MAAM,EAAE,IAAIC,WAAW,CAAC;IAAE,CAAC,CAAC,CAAC;EACnF;;EAEA;EACA,OAAOd,OAAO,CAACM,OAAO,CAACS,KAAK,CAAC,CAAC,CAAC;AACjC;AAEA,SAASV,QAAQA,CAAIW,KAAQ,EAAK;EAChC,OAAOA,KAAK;AACd"}
1
+ {"version":3,"file":"serve.js","names":["KnownToken","proxy","router","applyMiddleware","applyServerMiddleware","provideServe","resolve","config","Config","base","pageRoutes","Http","Serve","serviceRoutes","middleware","proxyConfig","Proxy","enhance","env","Array","isArray","map","identity","builder","pattern","handler","path","method","pageHandler","request","events","EventTarget","build","value"],"sources":["../../../../../src/preset/server/providers/serve.ts"],"sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\nimport { Resolve } from '../../../di';\nimport { KnownToken } from '../../../tokens';\nimport { Handler, proxy } from '../../../http';\nimport { router, applyMiddleware } from '@krutoo/fetch-tools';\nimport { applyServerMiddleware } from '../utils/apply-server-middleware';\n\nexport function provideServe(resolve: Resolve): Handler {\n const config = resolve(KnownToken.Config.base);\n const pageRoutes = resolve(KnownToken.Http.Serve.pageRoutes);\n const serviceRoutes = resolve(KnownToken.Http.Serve.serviceRoutes);\n const middleware = resolve(KnownToken.Http.Serve.middleware);\n const proxyConfig = resolve(KnownToken.Http.Serve.Proxy.config);\n\n const enhance =\n config.env === 'development' && proxyConfig\n ? applyMiddleware(\n ...(Array.isArray(proxyConfig) ? proxyConfig.map(proxy) : [proxy(proxyConfig)]),\n )\n : identity;\n\n const builder = router.builder();\n\n // маршруты с промежуточными слоями\n for (const [pattern, handler] of pageRoutes) {\n const path = typeof pattern === 'string' ? pattern : pattern.path;\n const method = typeof pattern === 'string' ? 'get' : pattern.method;\n const pageHandler = applyServerMiddleware(...middleware)(handler);\n\n builder[method](path, request => pageHandler(request, { events: new EventTarget() }));\n }\n\n // служебные маршруты (к ним не применяются промежуточные слои)\n for (const [pattern, handler] of serviceRoutes) {\n const path = typeof pattern === 'string' ? pattern : pattern.path;\n const method = typeof pattern === 'string' ? 'get' : pattern.method;\n\n builder[method](path, request => handler(request, { events: new EventTarget() }));\n }\n\n // @todo также добавить apiRoutes?\n return enhance(builder.build());\n}\n\nfunction identity<T>(value: T): T {\n return value;\n}\n"],"mappings":"AAAA;;AAEA,SAASA,UAAU,QAAQ,oBAAiB;AAC5C,SAAkBC,KAAK,QAAQ,0BAAe;AAC9C,SAASC,MAAM,EAAEC,eAAe,QAAQ,qBAAqB;AAC7D,SAASC,qBAAqB,QAAQ,qCAAkC;AAExE,OAAO,SAASC,YAAYA,CAACC,OAAgB,EAAW;EACtD,MAAMC,MAAM,GAAGD,OAAO,CAACN,UAAU,CAACQ,MAAM,CAACC,IAAI,CAAC;EAC9C,MAAMC,UAAU,GAAGJ,OAAO,CAACN,UAAU,CAACW,IAAI,CAACC,KAAK,CAACF,UAAU,CAAC;EAC5D,MAAMG,aAAa,GAAGP,OAAO,CAACN,UAAU,CAACW,IAAI,CAACC,KAAK,CAACC,aAAa,CAAC;EAClE,MAAMC,UAAU,GAAGR,OAAO,CAACN,UAAU,CAACW,IAAI,CAACC,KAAK,CAACE,UAAU,CAAC;EAC5D,MAAMC,WAAW,GAAGT,OAAO,CAACN,UAAU,CAACW,IAAI,CAACC,KAAK,CAACI,KAAK,CAACT,MAAM,CAAC;EAE/D,MAAMU,OAAO,GACXV,MAAM,CAACW,GAAG,KAAK,aAAa,IAAIH,WAAW,GACvCZ,eAAe,CACb,IAAIgB,KAAK,CAACC,OAAO,CAACL,WAAW,CAAC,GAAGA,WAAW,CAACM,GAAG,CAACpB,KAAK,CAAC,GAAG,CAACA,KAAK,CAACc,WAAW,CAAC,CAAC,CAChF,CAAC,GACDO,QAAQ;EAEd,MAAMC,OAAO,GAAGrB,MAAM,CAACqB,OAAO,CAAC,CAAC;;EAEhC;EACA,KAAK,MAAM,CAACC,OAAO,EAAEC,OAAO,CAAC,IAAIf,UAAU,EAAE;IAC3C,MAAMgB,IAAI,GAAG,OAAOF,OAAO,KAAK,QAAQ,GAAGA,OAAO,GAAGA,OAAO,CAACE,IAAI;IACjE,MAAMC,MAAM,GAAG,OAAOH,OAAO,KAAK,QAAQ,GAAG,KAAK,GAAGA,OAAO,CAACG,MAAM;IACnE,MAAMC,WAAW,GAAGxB,qBAAqB,CAAC,GAAGU,UAAU,CAAC,CAACW,OAAO,CAAC;IAEjEF,OAAO,CAACI,MAAM,CAAC,CAACD,IAAI,EAAEG,OAAO,IAAID,WAAW,CAACC,OAAO,EAAE;MAAEC,MAAM,EAAE,IAAIC,WAAW,CAAC;IAAE,CAAC,CAAC,CAAC;EACvF;;EAEA;EACA,KAAK,MAAM,CAACP,OAAO,EAAEC,OAAO,CAAC,IAAIZ,aAAa,EAAE;IAC9C,MAAMa,IAAI,GAAG,OAAOF,OAAO,KAAK,QAAQ,GAAGA,OAAO,GAAGA,OAAO,CAACE,IAAI;IACjE,MAAMC,MAAM,GAAG,OAAOH,OAAO,KAAK,QAAQ,GAAG,KAAK,GAAGA,OAAO,CAACG,MAAM;IAEnEJ,OAAO,CAACI,MAAM,CAAC,CAACD,IAAI,EAAEG,OAAO,IAAIJ,OAAO,CAACI,OAAO,EAAE;MAAEC,MAAM,EAAE,IAAIC,WAAW,CAAC;IAAE,CAAC,CAAC,CAAC;EACnF;;EAEA;EACA,OAAOd,OAAO,CAACM,OAAO,CAACS,KAAK,CAAC,CAAC,CAAC;AACjC;AAEA,SAASV,QAAQA,CAAIW,KAAQ,EAAK;EAChC,OAAOA,KAAK;AACd"}
@@ -1,4 +1,4 @@
1
- import { BrowserClient, Hub, defaultIntegrations, defaultStackParser, makeFetchTransport } from '@sentry/browser';
1
+ import { Scope, BrowserClient, getDefaultIntegrations, defaultStackParser, makeFetchTransport } from '@sentry/browser';
2
2
  import { createLogger } from "./../../../log/index.js";
3
3
  import { KnownToken } from "../../../tokens.js";
4
4
  import { createSentryHandler } from "../../../log/handler/sentry.js";
@@ -12,17 +12,20 @@ export function provideLogger(resolve) {
12
12
  const source = resolve(KnownToken.Config.source);
13
13
  const config = resolve(KnownToken.Config.base);
14
14
  const client = new BrowserClient({
15
- transport: makeFetchTransport,
16
- stackParser: defaultStackParser,
17
15
  dsn: source.require('PUBLIC_SENTRY_DSN'),
18
16
  release: source.require('SENTRY_RELEASE'),
19
17
  environment: source.require('PUBLIC_SENTRY_ENVIRONMENT'),
20
- integrations: [...defaultIntegrations]
18
+ tracesSampleRate: Number(source.get('SENTRY_TRACES_SAMPLE_RATE', 0)),
19
+ profilesSampleRate: Number(source.get('SENTRY_TRACES_SAMPLE_RATE', 0)),
20
+ transport: makeFetchTransport,
21
+ stackParser: defaultStackParser,
22
+ integrations: [...getDefaultIntegrations({})]
21
23
  });
22
- const hub = new Hub(client);
23
- hub.setTag('url', window.location.href);
24
+ const scope = new Scope();
25
+ scope.setTag('url', window.location.href);
26
+ scope.setClient(client);
24
27
  const logger = createLogger();
25
- logger.subscribe(createSentryHandler(hub));
28
+ logger.subscribe(createSentryHandler(scope));
26
29
  if (config.env === 'development') {
27
30
  logger.subscribe(event => {
28
31
  switch (event.type) {
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","names":["BrowserClient","Hub","defaultIntegrations","defaultStackParser","makeFetchTransport","createLogger","KnownToken","createSentryHandler","provideLogger","resolve","source","Config","config","base","client","transport","stackParser","dsn","require","release","environment","integrations","hub","setTag","window","location","href","logger","subscribe","env","event","type","console","debug","data","error"],"sources":["../../../../../src/preset/web/providers/logger.ts"],"sourcesContent":["import {\n BrowserClient,\n Hub,\n defaultIntegrations,\n defaultStackParser,\n makeFetchTransport,\n} from '@sentry/browser';\nimport { Resolve } from '../../../di';\nimport { Logger, createLogger } from '../../../log';\nimport { KnownToken } from '../../../tokens';\nimport { createSentryHandler } from '../../../log/handler/sentry';\n\n/**\n * Провайдер Logger'а.\n * @param resolve Функция для получения зависимости по токену.\n * @return Logger.\n */\nexport function provideLogger(resolve: Resolve): Logger {\n const source = resolve(KnownToken.Config.source);\n const config = resolve(KnownToken.Config.base);\n\n const client = new BrowserClient({\n transport: makeFetchTransport,\n stackParser: defaultStackParser,\n dsn: source.require('PUBLIC_SENTRY_DSN'),\n release: source.require('SENTRY_RELEASE'),\n environment: source.require('PUBLIC_SENTRY_ENVIRONMENT'),\n integrations: [...defaultIntegrations],\n });\n\n const hub = new Hub(client);\n\n hub.setTag('url', window.location.href);\n\n const logger = createLogger();\n\n logger.subscribe(createSentryHandler(hub));\n\n if (config.env === 'development') {\n logger.subscribe(event => {\n switch (event.type) {\n case 'debug':\n // eslint-disable-next-line no-console\n console.debug(event.data);\n break;\n case 'error':\n // eslint-disable-next-line no-console\n console.error(event.data);\n break;\n }\n });\n }\n\n return logger;\n}\n"],"mappings":"AAAA,SACEA,aAAa,EACbC,GAAG,EACHC,mBAAmB,EACnBC,kBAAkB,EAClBC,kBAAkB,QACb,iBAAiB;AAExB,SAAiBC,YAAY,QAAQ,yBAAc;AACnD,SAASC,UAAU,QAAQ,oBAAiB;AAC5C,SAASC,mBAAmB,QAAQ,gCAA6B;;AAEjE;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,aAAaA,CAACC,OAAgB,EAAU;EACtD,MAAMC,MAAM,GAAGD,OAAO,CAACH,UAAU,CAACK,MAAM,CAACD,MAAM,CAAC;EAChD,MAAME,MAAM,GAAGH,OAAO,CAACH,UAAU,CAACK,MAAM,CAACE,IAAI,CAAC;EAE9C,MAAMC,MAAM,GAAG,IAAId,aAAa,CAAC;IAC/Be,SAAS,EAAEX,kBAAkB;IAC7BY,WAAW,EAAEb,kBAAkB;IAC/Bc,GAAG,EAAEP,MAAM,CAACQ,OAAO,CAAC,mBAAmB,CAAC;IACxCC,OAAO,EAAET,MAAM,CAACQ,OAAO,CAAC,gBAAgB,CAAC;IACzCE,WAAW,EAAEV,MAAM,CAACQ,OAAO,CAAC,2BAA2B,CAAC;IACxDG,YAAY,EAAE,CAAC,GAAGnB,mBAAmB;EACvC,CAAC,CAAC;EAEF,MAAMoB,GAAG,GAAG,IAAIrB,GAAG,CAACa,MAAM,CAAC;EAE3BQ,GAAG,CAACC,MAAM,CAAC,KAAK,EAAEC,MAAM,CAACC,QAAQ,CAACC,IAAI,CAAC;EAEvC,MAAMC,MAAM,GAAGtB,YAAY,CAAC,CAAC;EAE7BsB,MAAM,CAACC,SAAS,CAACrB,mBAAmB,CAACe,GAAG,CAAC,CAAC;EAE1C,IAAIV,MAAM,CAACiB,GAAG,KAAK,aAAa,EAAE;IAChCF,MAAM,CAACC,SAAS,CAACE,KAAK,IAAI;MACxB,QAAQA,KAAK,CAACC,IAAI;QAChB,KAAK,OAAO;UACV;UACAC,OAAO,CAACC,KAAK,CAACH,KAAK,CAACI,IAAI,CAAC;UACzB;QACF,KAAK,OAAO;UACV;UACAF,OAAO,CAACG,KAAK,CAACL,KAAK,CAACI,IAAI,CAAC;UACzB;MACJ;IACF,CAAC,CAAC;EACJ;EAEA,OAAOP,MAAM;AACf"}
1
+ {"version":3,"file":"logger.js","names":["Scope","BrowserClient","getDefaultIntegrations","defaultStackParser","makeFetchTransport","createLogger","KnownToken","createSentryHandler","provideLogger","resolve","source","Config","config","base","client","dsn","require","release","environment","tracesSampleRate","Number","get","profilesSampleRate","transport","stackParser","integrations","scope","setTag","window","location","href","setClient","logger","subscribe","env","event","type","console","debug","data","error"],"sources":["../../../../../src/preset/web/providers/logger.ts"],"sourcesContent":["import {\n Scope,\n BrowserClient,\n getDefaultIntegrations,\n defaultStackParser,\n makeFetchTransport,\n} from '@sentry/browser';\nimport { Resolve } from '../../../di';\nimport { Logger, createLogger } from '../../../log';\nimport { KnownToken } from '../../../tokens';\nimport { createSentryHandler } from '../../../log/handler/sentry';\n\n/**\n * Провайдер Logger'а.\n * @param resolve Функция для получения зависимости по токену.\n * @return Logger.\n */\nexport function provideLogger(resolve: Resolve): Logger {\n const source = resolve(KnownToken.Config.source);\n const config = resolve(KnownToken.Config.base);\n\n const client = new BrowserClient({\n dsn: source.require('PUBLIC_SENTRY_DSN'),\n release: source.require('SENTRY_RELEASE'),\n environment: source.require('PUBLIC_SENTRY_ENVIRONMENT'),\n tracesSampleRate: Number(source.get('SENTRY_TRACES_SAMPLE_RATE', 0)),\n profilesSampleRate: Number(source.get('SENTRY_TRACES_SAMPLE_RATE', 0)),\n transport: makeFetchTransport,\n stackParser: defaultStackParser,\n integrations: [...getDefaultIntegrations({})],\n });\n\n const scope = new Scope();\n\n scope.setTag('url', window.location.href);\n scope.setClient(client);\n\n const logger = createLogger();\n\n logger.subscribe(createSentryHandler(scope));\n\n if (config.env === 'development') {\n logger.subscribe(event => {\n switch (event.type) {\n case 'debug':\n // eslint-disable-next-line no-console\n console.debug(event.data);\n break;\n case 'error':\n // eslint-disable-next-line no-console\n console.error(event.data);\n break;\n }\n });\n }\n\n return logger;\n}\n"],"mappings":"AAAA,SACEA,KAAK,EACLC,aAAa,EACbC,sBAAsB,EACtBC,kBAAkB,EAClBC,kBAAkB,QACb,iBAAiB;AAExB,SAAiBC,YAAY,QAAQ,yBAAc;AACnD,SAASC,UAAU,QAAQ,oBAAiB;AAC5C,SAASC,mBAAmB,QAAQ,gCAA6B;;AAEjE;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,aAAaA,CAACC,OAAgB,EAAU;EACtD,MAAMC,MAAM,GAAGD,OAAO,CAACH,UAAU,CAACK,MAAM,CAACD,MAAM,CAAC;EAChD,MAAME,MAAM,GAAGH,OAAO,CAACH,UAAU,CAACK,MAAM,CAACE,IAAI,CAAC;EAE9C,MAAMC,MAAM,GAAG,IAAIb,aAAa,CAAC;IAC/Bc,GAAG,EAAEL,MAAM,CAACM,OAAO,CAAC,mBAAmB,CAAC;IACxCC,OAAO,EAAEP,MAAM,CAACM,OAAO,CAAC,gBAAgB,CAAC;IACzCE,WAAW,EAAER,MAAM,CAACM,OAAO,CAAC,2BAA2B,CAAC;IACxDG,gBAAgB,EAAEC,MAAM,CAACV,MAAM,CAACW,GAAG,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAC;IACpEC,kBAAkB,EAAEF,MAAM,CAACV,MAAM,CAACW,GAAG,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAC;IACtEE,SAAS,EAAEnB,kBAAkB;IAC7BoB,WAAW,EAAErB,kBAAkB;IAC/BsB,YAAY,EAAE,CAAC,GAAGvB,sBAAsB,CAAC,CAAC,CAAC,CAAC;EAC9C,CAAC,CAAC;EAEF,MAAMwB,KAAK,GAAG,IAAI1B,KAAK,CAAC,CAAC;EAEzB0B,KAAK,CAACC,MAAM,CAAC,KAAK,EAAEC,MAAM,CAACC,QAAQ,CAACC,IAAI,CAAC;EACzCJ,KAAK,CAACK,SAAS,CAACjB,MAAM,CAAC;EAEvB,MAAMkB,MAAM,GAAG3B,YAAY,CAAC,CAAC;EAE7B2B,MAAM,CAACC,SAAS,CAAC1B,mBAAmB,CAACmB,KAAK,CAAC,CAAC;EAE5C,IAAId,MAAM,CAACsB,GAAG,KAAK,aAAa,EAAE;IAChCF,MAAM,CAACC,SAAS,CAACE,KAAK,IAAI;MACxB,QAAQA,KAAK,CAACC,IAAI;QAChB,KAAK,OAAO;UACV;UACAC,OAAO,CAACC,KAAK,CAACH,KAAK,CAACI,IAAI,CAAC;UACzB;QACF,KAAK,OAAO;UACV;UACAF,OAAO,CAACG,KAAK,CAACL,KAAK,CAACI,IAAI,CAAC;UACzB;MACJ;IACF,CAAC,CAAC;EACJ;EAEA,OAAOP,MAAM;AACf"}
@@ -1,4 +1,4 @@
1
- /* eslint-disable require-jsdoc */
1
+ /* eslint-disable jsdoc/require-jsdoc */
2
2
 
3
3
  // @todo "* as" сделано для работы в Node.js ESM но есть подозрение что на tree shaking плохо скажется
4
4
  import * as redux from '@reduxjs/toolkit';
@@ -1 +1 @@
1
- {"version":3,"file":"remote-data.js","names":["redux","createAction","createSelector","STATUS","initial","fetching","success","failure","RemoteData","createActions","name","request","createHandlers","state","status","action","data","payload","fetchCount","error","applyHandlers","actions","builder","handlers","addCase","type","createSelectors","selectRoot","isInitial","isFetching","isSuccess","isFailed","wasFetched"],"sources":["../../../../src/utils/redux/remote-data.ts"],"sourcesContent":["/* eslint-disable require-jsdoc */\n\n// @todo \"* as\" сделано для работы в Node.js ESM но есть подозрение что на tree shaking плохо скажется\nimport * as redux from '@reduxjs/toolkit';\n\nconst { createAction, createSelector } = redux;\n\ninterface RemoteDataActions<TData, TError = unknown, TPayload = void> {\n request: redux.PayloadActionCreator<TPayload, string>;\n success: redux.PayloadActionCreator<TData, string>;\n failure: redux.PayloadActionCreator<TError, string>;\n}\n\n/**\n * Статус загрузки данных.\n */\nexport type Status = 'initial' | 'fetching' | 'success' | 'failure';\n\n/**\n * Базовая структура хранилища удаленных данных.\n */\nexport interface RemoteDataState<TData, TError> {\n /** Загружаемые данные. */\n readonly data: TData;\n\n /** Данные ошибки запроса. */\n readonly error: TError;\n\n /** Статус загрузки данных. */\n readonly status: Status;\n\n /** Количество запросов. */\n readonly fetchCount?: number;\n}\n\n/**\n * Возможные статусы загрузки данных.\n */\nexport const STATUS: Record<Status, Status> = {\n initial: 'initial',\n fetching: 'fetching',\n success: 'success',\n failure: 'failure',\n} as const;\n\n/** Работа с удаленными данными. */\nexport abstract class RemoteData {\n static get STATUS() {\n return STATUS;\n }\n\n /**\n * Возвращает action'ы для работы с удаленными данными.\n * @param name Префикс имён.\n * @return Набор.\n */\n static createActions<TData = never, TError = never, TPayload = void>(\n name: string,\n ): RemoteDataActions<TData, TError, TPayload> {\n return {\n request: createAction<TPayload>(`${name}/request`),\n success: createAction<TData>(`${name}/success`),\n failure: createAction<TError>(`${name}/failure`),\n } as const;\n }\n\n /**\n * Возвращает набор обработчиков для работы с удаленными данными.\n * @return Набор.\n */\n static createHandlers<\n TData,\n TError,\n S extends RemoteDataState<TData, TError> = RemoteDataState<TData, TError>,\n >() {\n // ВАЖНО: не используем возможности immer здесь чтобы набор можно было использовать без immer.\n return {\n request(state: S | redux.Draft<S>): S | redux.Draft<S> {\n return {\n ...state,\n status: STATUS.fetching,\n };\n },\n\n success(state: S | redux.Draft<S>, action: redux.PayloadAction<TData>): S | redux.Draft<S> {\n return {\n ...state,\n data: action.payload,\n status: STATUS.success,\n fetchCount: (state.fetchCount ?? 0) + 1,\n };\n },\n\n failure(state: S | redux.Draft<S>, action: redux.PayloadAction<TError>): S | redux.Draft<S> {\n return {\n ...state,\n error: action.payload,\n status: STATUS.failure,\n fetchCount: (state.fetchCount ?? 0) + 1,\n };\n },\n } as const;\n }\n\n /**\n * Применяет обработчики для работы с удаленными данными.\n * @param actions Набор action'ов.\n * @param builder Builder.\n */\n static applyHandlers<TData, TError>(\n actions: RemoteDataActions<TData, TError, any | never>,\n builder: Pick<redux.ActionReducerMapBuilder<RemoteDataState<TData, TError>>, 'addCase'>,\n ): void {\n const handlers = RemoteData.createHandlers<TData, TError>();\n\n // @todo разобраться с проблемой когда убираешь \".type\"\n builder.addCase(actions.request.type, handlers.request);\n builder.addCase(actions.success.type, handlers.success);\n builder.addCase(actions.failure.type, handlers.failure);\n }\n\n /**\n * Возвращает новый набор селекторов данных.\n * @param selectRoot Функция получения состояния.\n * @return Набор селекторов.\n */\n static createSelectors<S extends RemoteDataState<unknown, unknown>, R = unknown>(\n selectRoot: (root: R) => S,\n ) {\n return {\n isInitial: createSelector(selectRoot, state => state.status === 'initial'),\n isFetching: createSelector(selectRoot, state => state.status === 'fetching'),\n isSuccess: createSelector(selectRoot, state => state.status === 'success'),\n isFailed: createSelector(selectRoot, state => state.status === 'failure'),\n wasFetched: createSelector(selectRoot, state => (state.fetchCount ?? 0) > 0),\n } as const;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"remote-data.js","names":["redux","createAction","createSelector","STATUS","initial","fetching","success","failure","RemoteData","createActions","name","request","createHandlers","state","status","action","data","payload","fetchCount","error","applyHandlers","actions","builder","handlers","addCase","type","createSelectors","selectRoot","isInitial","isFetching","isSuccess","isFailed","wasFetched"],"sources":["../../../../src/utils/redux/remote-data.ts"],"sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\n\n// @todo \"* as\" сделано для работы в Node.js ESM но есть подозрение что на tree shaking плохо скажется\nimport * as redux from '@reduxjs/toolkit';\n\nconst { createAction, createSelector } = redux;\n\ninterface RemoteDataActions<TData, TError = unknown, TPayload = void> {\n request: redux.PayloadActionCreator<TPayload, string>;\n success: redux.PayloadActionCreator<TData, string>;\n failure: redux.PayloadActionCreator<TError, string>;\n}\n\n/**\n * Статус загрузки данных.\n */\nexport type Status = 'initial' | 'fetching' | 'success' | 'failure';\n\n/**\n * Базовая структура хранилища удаленных данных.\n */\nexport interface RemoteDataState<TData, TError> {\n /** Загружаемые данные. */\n readonly data: TData;\n\n /** Данные ошибки запроса. */\n readonly error: TError;\n\n /** Статус загрузки данных. */\n readonly status: Status;\n\n /** Количество запросов. */\n readonly fetchCount?: number;\n}\n\n/**\n * Возможные статусы загрузки данных.\n */\nexport const STATUS: Record<Status, Status> = {\n initial: 'initial',\n fetching: 'fetching',\n success: 'success',\n failure: 'failure',\n} as const;\n\n/** Работа с удаленными данными. */\nexport abstract class RemoteData {\n static get STATUS() {\n return STATUS;\n }\n\n /**\n * Возвращает action'ы для работы с удаленными данными.\n * @param name Префикс имён.\n * @return Набор.\n */\n static createActions<TData = never, TError = never, TPayload = void>(\n name: string,\n ): RemoteDataActions<TData, TError, TPayload> {\n return {\n request: createAction<TPayload>(`${name}/request`),\n success: createAction<TData>(`${name}/success`),\n failure: createAction<TError>(`${name}/failure`),\n } as const;\n }\n\n /**\n * Возвращает набор обработчиков для работы с удаленными данными.\n * @return Набор.\n */\n static createHandlers<\n TData,\n TError,\n S extends RemoteDataState<TData, TError> = RemoteDataState<TData, TError>,\n >() {\n // ВАЖНО: не используем возможности immer здесь чтобы набор можно было использовать без immer.\n return {\n request(state: S | redux.Draft<S>): S | redux.Draft<S> {\n return {\n ...state,\n status: STATUS.fetching,\n };\n },\n\n success(state: S | redux.Draft<S>, action: redux.PayloadAction<TData>): S | redux.Draft<S> {\n return {\n ...state,\n data: action.payload,\n status: STATUS.success,\n fetchCount: (state.fetchCount ?? 0) + 1,\n };\n },\n\n failure(state: S | redux.Draft<S>, action: redux.PayloadAction<TError>): S | redux.Draft<S> {\n return {\n ...state,\n error: action.payload,\n status: STATUS.failure,\n fetchCount: (state.fetchCount ?? 0) + 1,\n };\n },\n } as const;\n }\n\n /**\n * Применяет обработчики для работы с удаленными данными.\n * @param actions Набор action'ов.\n * @param builder Builder.\n */\n static applyHandlers<TData, TError>(\n actions: RemoteDataActions<TData, TError, any | never>,\n builder: Pick<redux.ActionReducerMapBuilder<RemoteDataState<TData, TError>>, 'addCase'>,\n ): void {\n const handlers = RemoteData.createHandlers<TData, TError>();\n\n // @todo разобраться с проблемой когда убираешь \".type\"\n builder.addCase(actions.request.type, handlers.request);\n builder.addCase(actions.success.type, handlers.success);\n builder.addCase(actions.failure.type, handlers.failure);\n }\n\n /**\n * Возвращает новый набор селекторов данных.\n * @param selectRoot Функция получения состояния.\n * @return Набор селекторов.\n */\n static createSelectors<S extends RemoteDataState<unknown, unknown>, R = unknown>(\n selectRoot: (root: R) => S,\n ) {\n return {\n isInitial: createSelector(selectRoot, state => state.status === 'initial'),\n isFetching: createSelector(selectRoot, state => state.status === 'fetching'),\n isSuccess: createSelector(selectRoot, state => state.status === 'success'),\n isFailed: createSelector(selectRoot, state => state.status === 'failure'),\n wasFetched: createSelector(selectRoot, state => (state.fetchCount ?? 0) > 0),\n } as const;\n }\n}\n"],"mappings":"AAAA;;AAEA;AACA,OAAO,KAAKA,KAAK,MAAM,kBAAkB;AAEzC,MAAM;EAAEC,YAAY;EAAEC;AAAe,CAAC,GAAGF,KAAK;;AAQ9C;AACA;AACA;;AAGA;AACA;AACA;;AAeA;AACA;AACA;AACA,OAAO,MAAMG,MAA8B,GAAG;EAC5CC,OAAO,EAAE,SAAS;EAClBC,QAAQ,EAAE,UAAU;EACpBC,OAAO,EAAE,SAAS;EAClBC,OAAO,EAAE;AACX,CAAU;;AAEV;AACA,OAAO,MAAeC,UAAU,CAAC;EAC/B,WAAWL,MAAMA,CAAA,EAAG;IAClB,OAAOA,MAAM;EACf;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOM,aAAaA,CAClBC,IAAY,EACgC;IAC5C,OAAO;MACLC,OAAO,EAAEV,YAAY,CAAY,GAAES,IAAK,UAAS,CAAC;MAClDJ,OAAO,EAAEL,YAAY,CAAS,GAAES,IAAK,UAAS,CAAC;MAC/CH,OAAO,EAAEN,YAAY,CAAU,GAAES,IAAK,UAAS;IACjD,CAAC;EACH;;EAEA;AACF;AACA;AACA;EACE,OAAOE,cAAcA,CAAA,EAIjB;IACF;IACA,OAAO;MACLD,OAAOA,CAACE,KAAyB,EAAsB;QACrD,OAAO;UACL,GAAGA,KAAK;UACRC,MAAM,EAAEX,MAAM,CAACE;QACjB,CAAC;MACH,CAAC;MAEDC,OAAOA,CAACO,KAAyB,EAAEE,MAAkC,EAAsB;QACzF,OAAO;UACL,GAAGF,KAAK;UACRG,IAAI,EAAED,MAAM,CAACE,OAAO;UACpBH,MAAM,EAAEX,MAAM,CAACG,OAAO;UACtBY,UAAU,EAAE,CAACL,KAAK,CAACK,UAAU,IAAI,CAAC,IAAI;QACxC,CAAC;MACH,CAAC;MAEDX,OAAOA,CAACM,KAAyB,EAAEE,MAAmC,EAAsB;QAC1F,OAAO;UACL,GAAGF,KAAK;UACRM,KAAK,EAAEJ,MAAM,CAACE,OAAO;UACrBH,MAAM,EAAEX,MAAM,CAACI,OAAO;UACtBW,UAAU,EAAE,CAACL,KAAK,CAACK,UAAU,IAAI,CAAC,IAAI;QACxC,CAAC;MACH;IACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOE,aAAaA,CAClBC,OAAsD,EACtDC,OAAuF,EACjF;IACN,MAAMC,QAAQ,GAAGf,UAAU,CAACI,cAAc,CAAgB,CAAC;;IAE3D;IACAU,OAAO,CAACE,OAAO,CAACH,OAAO,CAACV,OAAO,CAACc,IAAI,EAAEF,QAAQ,CAACZ,OAAO,CAAC;IACvDW,OAAO,CAACE,OAAO,CAACH,OAAO,CAACf,OAAO,CAACmB,IAAI,EAAEF,QAAQ,CAACjB,OAAO,CAAC;IACvDgB,OAAO,CAACE,OAAO,CAACH,OAAO,CAACd,OAAO,CAACkB,IAAI,EAAEF,QAAQ,CAAChB,OAAO,CAAC;EACzD;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOmB,eAAeA,CACpBC,UAA0B,EAC1B;IACA,OAAO;MACLC,SAAS,EAAE1B,cAAc,CAACyB,UAAU,EAAEd,KAAK,IAAIA,KAAK,CAACC,MAAM,KAAK,SAAS,CAAC;MAC1Ee,UAAU,EAAE3B,cAAc,CAACyB,UAAU,EAAEd,KAAK,IAAIA,KAAK,CAACC,MAAM,KAAK,UAAU,CAAC;MAC5EgB,SAAS,EAAE5B,cAAc,CAACyB,UAAU,EAAEd,KAAK,IAAIA,KAAK,CAACC,MAAM,KAAK,SAAS,CAAC;MAC1EiB,QAAQ,EAAE7B,cAAc,CAACyB,UAAU,EAAEd,KAAK,IAAIA,KAAK,CAACC,MAAM,KAAK,SAAS,CAAC;MACzEkB,UAAU,EAAE9B,cAAc,CAACyB,UAAU,EAAEd,KAAK,IAAI,CAACA,KAAK,CAACK,UAAU,IAAI,CAAC,IAAI,CAAC;IAC7E,CAAC;EACH;AACF"}
@@ -1,4 +1,4 @@
1
- /* eslint-disable require-jsdoc, jsdoc/require-jsdoc */
1
+ /* eslint-disable jsdoc/require-jsdoc */
2
2
 
3
3
  import createSagaMiddleware, { END } from 'redux-saga';
4
4
  import { call, cancel, delay, fork, race } from 'redux-saga/effects';
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.js","names":["createSagaMiddleware","END","call","cancel","delay","fork","race","createSagaExtendedMiddleware","handler","MiddlewareControl","toMiddleware","constructor","sagaMiddleware","onError","error","info","onSagaError","middleware","api","timeout","milliseconds","config","configInterrupt","run","saga","args","interruptTimeout","interruptStrategy","strategy","Number","isFinite","runWithBreakTask","runWithBreakMiddleware","toPromise","data","result","runWithTimeLimit","done","onTimeoutInterrupt","Error","onConfigError","promises","ready","timerId","push","then","finally","undefined","clearTimeout","Promise","resolve","setTimeout","dispatch","task","needCancel","taskResult","SagaCancelSignal","value","name"],"sources":["../../../../src/utils/redux-saga/middleware.ts"],"sourcesContent":["/* eslint-disable require-jsdoc, jsdoc/require-jsdoc */\nimport { MiddlewareAPI } from '@reduxjs/toolkit';\nimport {\n SagaExtendedMiddleware,\n SagaInterruptConfig,\n SagaMiddlewareHandler,\n SagaTimeoutRunData,\n} from './types';\nimport createSagaMiddleware, { END, Saga, Task, SagaMiddleware } from 'redux-saga';\nimport { call, cancel, delay, fork, race } from 'redux-saga/effects';\n\n/**\n * Возвращает расширенную версию SagaMiddleware.\n * @param handler Обработчик событий.\n * @return Middleware.\n */\nfunction createSagaExtendedMiddleware(handler: SagaMiddlewareHandler): SagaExtendedMiddleware {\n return new MiddlewareControl(handler).toMiddleware();\n}\n\nclass MiddlewareControl {\n private api?: MiddlewareAPI;\n private interruptTimeout?: number;\n private interruptStrategy?: SagaInterruptConfig['strategy'];\n private handler: SagaMiddlewareHandler;\n private sagaMiddleware: SagaMiddleware;\n\n constructor(handler: SagaMiddlewareHandler) {\n this.handler = handler;\n\n this.sagaMiddleware = createSagaMiddleware({\n onError: (error, info) => {\n handler.onSagaError(error, info);\n },\n });\n }\n\n toMiddleware(): SagaExtendedMiddleware {\n const middleware: SagaExtendedMiddleware = api => {\n this.api = api;\n return this.sagaMiddleware(api);\n };\n\n middleware.timeout = (milliseconds, config) => {\n this.configInterrupt(milliseconds, config);\n return middleware;\n };\n\n middleware.run = async (saga, ...args) => {\n await this.run(saga, ...args);\n };\n\n return middleware;\n }\n\n private configInterrupt(milliseconds: number, config?: SagaInterruptConfig) {\n this.interruptTimeout = milliseconds;\n this.interruptStrategy = config?.strategy ?? 'cancel-task';\n }\n\n private async run<S extends Saga>(saga: S, ...args: Parameters<S>): Promise<void> {\n const { interruptTimeout } = this;\n\n if (typeof interruptTimeout === 'number' && Number.isFinite(interruptTimeout)) {\n switch (this.interruptStrategy) {\n case 'cancel-task':\n await this.runWithBreakTask({ saga, args, timeout: interruptTimeout });\n return;\n case 'dispatch-end':\n await this.runWithBreakMiddleware({ saga, args, timeout: interruptTimeout });\n return;\n }\n }\n\n await this.sagaMiddleware.run(saga, ...args).toPromise();\n }\n\n private async runWithBreakTask<S extends Saga>(data: SagaTimeoutRunData<S>): Promise<void> {\n const result: Either<unknown, unknown> = await this.sagaMiddleware\n .run(runWithTimeLimit, data)\n .toPromise();\n\n if (!result.done) {\n this.handler.onTimeoutInterrupt({ timeout: data.timeout });\n }\n }\n\n private async runWithBreakMiddleware<S extends Saga>(data: SagaTimeoutRunData<S>): Promise<void> {\n const { saga, args, timeout } = data;\n const { api } = this;\n\n if (!api) {\n const error = new Error('Middleware is not applied to the store');\n\n this.handler.onConfigError(error);\n\n throw error;\n }\n\n const promises: Promise<void>[] = [];\n\n let ready = false;\n let timerId: ReturnType<typeof setTimeout>;\n\n promises.push(\n this.sagaMiddleware\n .run(saga, ...args)\n .toPromise()\n .then(() => {\n ready = true;\n })\n .finally(() => {\n // вне зависимости от результата отключаем таймер если он есть\n timerId !== undefined && clearTimeout(timerId);\n }),\n );\n\n promises.push(\n new Promise<void>(resolve => {\n timerId = setTimeout(() => {\n if (!ready) {\n this.handler.onTimeoutInterrupt({ timeout });\n api.dispatch(END);\n }\n\n resolve();\n }, timeout);\n }),\n );\n\n await Promise.race(promises);\n }\n}\n\nfunction* runWithTimeLimit<S extends Saga>(\n data: SagaTimeoutRunData<S>,\n): Generator<any, Either<SagaCancelSignal, ReturnType<S>>, any> {\n const { saga, args, timeout } = data;\n const task: Task = yield fork(saga, ...args);\n\n const [needCancel, taskResult]: [boolean, ReturnType<S>] = yield race([\n delay(timeout, true),\n call(() => task.toPromise()),\n ]);\n\n if (needCancel) {\n yield cancel(task);\n\n // ВАЖНО: если делать throw ... - ошибка попадет в onError (createSagaMiddleware)\n // чтобы не логировать лишний раз возвращаем значение\n return { done: false, error: new SagaCancelSignal() };\n } else {\n return { done: true, value: taskResult };\n }\n}\n\n// @todo в будущем можно заменить все ожидаемые исключения (только внутри фреймворка) на этот тип\ntype Either<E, V> = { done: false; error: E } | { done: true; value: V };\n\nclass SagaCancelSignal {\n name: string;\n\n constructor() {\n this.name = 'SagaCancelSignal';\n }\n}\n\nexport { createSagaExtendedMiddleware as createSagaMiddleware };\n"],"mappings":"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"}
1
+ {"version":3,"file":"middleware.js","names":["createSagaMiddleware","END","call","cancel","delay","fork","race","createSagaExtendedMiddleware","handler","MiddlewareControl","toMiddleware","constructor","sagaMiddleware","onError","error","info","onSagaError","middleware","api","timeout","milliseconds","config","configInterrupt","run","saga","args","interruptTimeout","interruptStrategy","strategy","Number","isFinite","runWithBreakTask","runWithBreakMiddleware","toPromise","data","result","runWithTimeLimit","done","onTimeoutInterrupt","Error","onConfigError","promises","ready","timerId","push","then","finally","undefined","clearTimeout","Promise","resolve","setTimeout","dispatch","task","needCancel","taskResult","SagaCancelSignal","value","name"],"sources":["../../../../src/utils/redux-saga/middleware.ts"],"sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\nimport { MiddlewareAPI } from '@reduxjs/toolkit';\nimport {\n SagaExtendedMiddleware,\n SagaInterruptConfig,\n SagaMiddlewareHandler,\n SagaTimeoutRunData,\n} from './types';\nimport createSagaMiddleware, { END, Saga, Task, SagaMiddleware } from 'redux-saga';\nimport { call, cancel, delay, fork, race } from 'redux-saga/effects';\n\n/**\n * Возвращает расширенную версию SagaMiddleware.\n * @param handler Обработчик событий.\n * @return Middleware.\n */\nfunction createSagaExtendedMiddleware(handler: SagaMiddlewareHandler): SagaExtendedMiddleware {\n return new MiddlewareControl(handler).toMiddleware();\n}\n\nclass MiddlewareControl {\n private api?: MiddlewareAPI;\n private interruptTimeout?: number;\n private interruptStrategy?: SagaInterruptConfig['strategy'];\n private handler: SagaMiddlewareHandler;\n private sagaMiddleware: SagaMiddleware;\n\n constructor(handler: SagaMiddlewareHandler) {\n this.handler = handler;\n\n this.sagaMiddleware = createSagaMiddleware({\n onError: (error, info) => {\n handler.onSagaError(error, info);\n },\n });\n }\n\n toMiddleware(): SagaExtendedMiddleware {\n const middleware: SagaExtendedMiddleware = api => {\n this.api = api;\n return this.sagaMiddleware(api);\n };\n\n middleware.timeout = (milliseconds, config) => {\n this.configInterrupt(milliseconds, config);\n return middleware;\n };\n\n middleware.run = async (saga, ...args) => {\n await this.run(saga, ...args);\n };\n\n return middleware;\n }\n\n private configInterrupt(milliseconds: number, config?: SagaInterruptConfig) {\n this.interruptTimeout = milliseconds;\n this.interruptStrategy = config?.strategy ?? 'cancel-task';\n }\n\n private async run<S extends Saga>(saga: S, ...args: Parameters<S>): Promise<void> {\n const { interruptTimeout } = this;\n\n if (typeof interruptTimeout === 'number' && Number.isFinite(interruptTimeout)) {\n switch (this.interruptStrategy) {\n case 'cancel-task':\n await this.runWithBreakTask({ saga, args, timeout: interruptTimeout });\n return;\n case 'dispatch-end':\n await this.runWithBreakMiddleware({ saga, args, timeout: interruptTimeout });\n return;\n }\n }\n\n await this.sagaMiddleware.run(saga, ...args).toPromise();\n }\n\n private async runWithBreakTask<S extends Saga>(data: SagaTimeoutRunData<S>): Promise<void> {\n const result: Either<unknown, unknown> = await this.sagaMiddleware\n .run(runWithTimeLimit, data)\n .toPromise();\n\n if (!result.done) {\n this.handler.onTimeoutInterrupt({ timeout: data.timeout });\n }\n }\n\n private async runWithBreakMiddleware<S extends Saga>(data: SagaTimeoutRunData<S>): Promise<void> {\n const { saga, args, timeout } = data;\n const { api } = this;\n\n if (!api) {\n const error = new Error('Middleware is not applied to the store');\n\n this.handler.onConfigError(error);\n\n throw error;\n }\n\n const promises: Promise<void>[] = [];\n\n let ready = false;\n let timerId: ReturnType<typeof setTimeout>;\n\n promises.push(\n this.sagaMiddleware\n .run(saga, ...args)\n .toPromise()\n .then(() => {\n ready = true;\n })\n .finally(() => {\n // вне зависимости от результата отключаем таймер если он есть\n timerId !== undefined && clearTimeout(timerId);\n }),\n );\n\n promises.push(\n new Promise<void>(resolve => {\n timerId = setTimeout(() => {\n if (!ready) {\n this.handler.onTimeoutInterrupt({ timeout });\n api.dispatch(END);\n }\n\n resolve();\n }, timeout);\n }),\n );\n\n await Promise.race(promises);\n }\n}\n\nfunction* runWithTimeLimit<S extends Saga>(\n data: SagaTimeoutRunData<S>,\n): Generator<any, Either<SagaCancelSignal, ReturnType<S>>, any> {\n const { saga, args, timeout } = data;\n const task: Task = yield fork(saga, ...args);\n\n const [needCancel, taskResult]: [boolean, ReturnType<S>] = yield race([\n delay(timeout, true),\n call(() => task.toPromise()),\n ]);\n\n if (needCancel) {\n yield cancel(task);\n\n // ВАЖНО: если делать throw ... - ошибка попадет в onError (createSagaMiddleware)\n // чтобы не логировать лишний раз возвращаем значение\n return { done: false, error: new SagaCancelSignal() };\n } else {\n return { done: true, value: taskResult };\n }\n}\n\n// @todo в будущем можно заменить все ожидаемые исключения (только внутри фреймворка) на этот тип\ntype Either<E, V> = { done: false; error: E } | { done: true; value: V };\n\nclass SagaCancelSignal {\n name: string;\n\n constructor() {\n this.name = 'SagaCancelSignal';\n }\n}\n\nexport { createSagaExtendedMiddleware as createSagaMiddleware };\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /* eslint-disable require-jsdoc, jsdoc/require-jsdoc */
1
+ /* eslint-disable jsdoc/require-jsdoc */
2
2
 
3
3
  /**
4
4
  * Интерфейс объекта-обертки для безопасной работы с WebStorage.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["createSafeStorage","getStorage","isAvailable","testKey","Date","now","setItem","removeItem","clear","getItem","name","key","index","value","getLength","length"],"sources":["../../../../../src/utils/web/storage/index.ts"],"sourcesContent":["/* eslint-disable require-jsdoc, jsdoc/require-jsdoc */\n\n/**\n * Интерфейс объекта-обертки для безопасной работы с WebStorage.\n */\nexport interface SafeStorage extends Storage {\n isAvailable: () => boolean;\n}\n\n/**\n * Возвращает объект для безопасной работы с браузерным хранилищем (LocalStorage, SessionStorage).\n * @param getStorage Функция, которая должна вернуть целевое хранилище.\n * @return Объект-обертка для безопасной работы с браузерным хранилищем.\n */\nexport function createSafeStorage(getStorage: () => Storage): SafeStorage {\n const isAvailable = (): boolean => {\n try {\n const testKey = `storage_test_key::${Date.now()}`;\n\n getStorage().setItem(testKey, testKey);\n getStorage().removeItem(testKey);\n\n return true;\n } catch {\n return false;\n }\n };\n\n const clear = (): void => {\n if (isAvailable()) {\n getStorage().clear();\n }\n };\n\n const getItem = (name: string): string | null => {\n if (isAvailable()) {\n return getStorage().getItem(name);\n }\n\n return null;\n };\n\n const key = (index: number): string | null => {\n if (isAvailable()) {\n return getStorage().key(index);\n }\n\n return null;\n };\n\n const removeItem = (name: string): void => {\n if (isAvailable()) {\n getStorage().removeItem(name);\n }\n };\n\n const setItem = (name: string, value: string): void => {\n if (isAvailable()) {\n getStorage().setItem(name, value);\n }\n };\n\n const getLength = (): number => {\n if (isAvailable()) {\n return getStorage().length;\n }\n\n return 0;\n };\n\n return {\n isAvailable,\n\n clear,\n getItem,\n key,\n removeItem,\n setItem,\n get length() {\n return getLength();\n },\n };\n}\n"],"mappings":"AAAA;;AAEA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,iBAAiBA,CAACC,UAAyB,EAAe;EACxE,MAAMC,WAAW,GAAGA,CAAA,KAAe;IACjC,IAAI;MACF,MAAMC,OAAO,GAAI,qBAAoBC,IAAI,CAACC,GAAG,CAAC,CAAE,EAAC;MAEjDJ,UAAU,CAAC,CAAC,CAACK,OAAO,CAACH,OAAO,EAAEA,OAAO,CAAC;MACtCF,UAAU,CAAC,CAAC,CAACM,UAAU,CAACJ,OAAO,CAAC;MAEhC,OAAO,IAAI;IACb,CAAC,CAAC,MAAM;MACN,OAAO,KAAK;IACd;EACF,CAAC;EAED,MAAMK,KAAK,GAAGA,CAAA,KAAY;IACxB,IAAIN,WAAW,CAAC,CAAC,EAAE;MACjBD,UAAU,CAAC,CAAC,CAACO,KAAK,CAAC,CAAC;IACtB;EACF,CAAC;EAED,MAAMC,OAAO,GAAIC,IAAY,IAAoB;IAC/C,IAAIR,WAAW,CAAC,CAAC,EAAE;MACjB,OAAOD,UAAU,CAAC,CAAC,CAACQ,OAAO,CAACC,IAAI,CAAC;IACnC;IAEA,OAAO,IAAI;EACb,CAAC;EAED,MAAMC,GAAG,GAAIC,KAAa,IAAoB;IAC5C,IAAIV,WAAW,CAAC,CAAC,EAAE;MACjB,OAAOD,UAAU,CAAC,CAAC,CAACU,GAAG,CAACC,KAAK,CAAC;IAChC;IAEA,OAAO,IAAI;EACb,CAAC;EAED,MAAML,UAAU,GAAIG,IAAY,IAAW;IACzC,IAAIR,WAAW,CAAC,CAAC,EAAE;MACjBD,UAAU,CAAC,CAAC,CAACM,UAAU,CAACG,IAAI,CAAC;IAC/B;EACF,CAAC;EAED,MAAMJ,OAAO,GAAGA,CAACI,IAAY,EAAEG,KAAa,KAAW;IACrD,IAAIX,WAAW,CAAC,CAAC,EAAE;MACjBD,UAAU,CAAC,CAAC,CAACK,OAAO,CAACI,IAAI,EAAEG,KAAK,CAAC;IACnC;EACF,CAAC;EAED,MAAMC,SAAS,GAAGA,CAAA,KAAc;IAC9B,IAAIZ,WAAW,CAAC,CAAC,EAAE;MACjB,OAAOD,UAAU,CAAC,CAAC,CAACc,MAAM;IAC5B;IAEA,OAAO,CAAC;EACV,CAAC;EAED,OAAO;IACLb,WAAW;IAEXM,KAAK;IACLC,OAAO;IACPE,GAAG;IACHJ,UAAU;IACVD,OAAO;IACP,IAAIS,MAAMA,CAAA,EAAG;MACX,OAAOD,SAAS,CAAC,CAAC;IACpB;EACF,CAAC;AACH"}
1
+ {"version":3,"file":"index.js","names":["createSafeStorage","getStorage","isAvailable","testKey","Date","now","setItem","removeItem","clear","getItem","name","key","index","value","getLength","length"],"sources":["../../../../../src/utils/web/storage/index.ts"],"sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\n\n/**\n * Интерфейс объекта-обертки для безопасной работы с WebStorage.\n */\nexport interface SafeStorage extends Storage {\n isAvailable: () => boolean;\n}\n\n/**\n * Возвращает объект для безопасной работы с браузерным хранилищем (LocalStorage, SessionStorage).\n * @param getStorage Функция, которая должна вернуть целевое хранилище.\n * @return Объект-обертка для безопасной работы с браузерным хранилищем.\n */\nexport function createSafeStorage(getStorage: () => Storage): SafeStorage {\n const isAvailable = (): boolean => {\n try {\n const testKey = `storage_test_key::${Date.now()}`;\n\n getStorage().setItem(testKey, testKey);\n getStorage().removeItem(testKey);\n\n return true;\n } catch {\n return false;\n }\n };\n\n const clear = (): void => {\n if (isAvailable()) {\n getStorage().clear();\n }\n };\n\n const getItem = (name: string): string | null => {\n if (isAvailable()) {\n return getStorage().getItem(name);\n }\n\n return null;\n };\n\n const key = (index: number): string | null => {\n if (isAvailable()) {\n return getStorage().key(index);\n }\n\n return null;\n };\n\n const removeItem = (name: string): void => {\n if (isAvailable()) {\n getStorage().removeItem(name);\n }\n };\n\n const setItem = (name: string, value: string): void => {\n if (isAvailable()) {\n getStorage().setItem(name, value);\n }\n };\n\n const getLength = (): number => {\n if (isAvailable()) {\n return getStorage().length;\n }\n\n return 0;\n };\n\n return {\n isAvailable,\n\n clear,\n getItem,\n key,\n removeItem,\n setItem,\n get length() {\n return getLength();\n },\n };\n}\n"],"mappings":"AAAA;;AAEA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,iBAAiBA,CAACC,UAAyB,EAAe;EACxE,MAAMC,WAAW,GAAGA,CAAA,KAAe;IACjC,IAAI;MACF,MAAMC,OAAO,GAAI,qBAAoBC,IAAI,CAACC,GAAG,CAAC,CAAE,EAAC;MAEjDJ,UAAU,CAAC,CAAC,CAACK,OAAO,CAACH,OAAO,EAAEA,OAAO,CAAC;MACtCF,UAAU,CAAC,CAAC,CAACM,UAAU,CAACJ,OAAO,CAAC;MAEhC,OAAO,IAAI;IACb,CAAC,CAAC,MAAM;MACN,OAAO,KAAK;IACd;EACF,CAAC;EAED,MAAMK,KAAK,GAAGA,CAAA,KAAY;IACxB,IAAIN,WAAW,CAAC,CAAC,EAAE;MACjBD,UAAU,CAAC,CAAC,CAACO,KAAK,CAAC,CAAC;IACtB;EACF,CAAC;EAED,MAAMC,OAAO,GAAIC,IAAY,IAAoB;IAC/C,IAAIR,WAAW,CAAC,CAAC,EAAE;MACjB,OAAOD,UAAU,CAAC,CAAC,CAACQ,OAAO,CAACC,IAAI,CAAC;IACnC;IAEA,OAAO,IAAI;EACb,CAAC;EAED,MAAMC,GAAG,GAAIC,KAAa,IAAoB;IAC5C,IAAIV,WAAW,CAAC,CAAC,EAAE;MACjB,OAAOD,UAAU,CAAC,CAAC,CAACU,GAAG,CAACC,KAAK,CAAC;IAChC;IAEA,OAAO,IAAI;EACb,CAAC;EAED,MAAML,UAAU,GAAIG,IAAY,IAAW;IACzC,IAAIR,WAAW,CAAC,CAAC,EAAE;MACjBD,UAAU,CAAC,CAAC,CAACM,UAAU,CAACG,IAAI,CAAC;IAC/B;EACF,CAAC;EAED,MAAMJ,OAAO,GAAGA,CAACI,IAAY,EAAEG,KAAa,KAAW;IACrD,IAAIX,WAAW,CAAC,CAAC,EAAE;MACjBD,UAAU,CAAC,CAAC,CAACK,OAAO,CAACI,IAAI,EAAEG,KAAK,CAAC;IACnC;EACF,CAAC;EAED,MAAMC,SAAS,GAAGA,CAAA,KAAc;IAC9B,IAAIZ,WAAW,CAAC,CAAC,EAAE;MACjB,OAAOD,UAAU,CAAC,CAAC,CAACc,MAAM;IAC5B;IAEA,OAAO,CAAC;EACV,CAAC;EAED,OAAO;IACLb,WAAW;IAEXM,KAAK;IACLC,OAAO;IACPE,GAAG;IACHJ,UAAU;IACVD,OAAO;IACP,IAAIS,MAAMA,CAAA,EAAG;MACX,OAAOD,SAAS,CAAC,CAAC;IACpB;EACF,CAAC;AACH"}
@@ -1,4 +1,3 @@
1
- import { EnvPlugin } from "./env/index.js";
2
- import { ModuleFederationPlugin } from "./module-federation/index.js";
3
- export { EnvPlugin, ModuleFederationPlugin };
1
+ export { EnvPlugin } from "./env/index.js";
2
+ export { ModuleFederationPlugin, DEFAULT_SHARED } from "./module-federation/index.js";
4
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["EnvPlugin","ModuleFederationPlugin"],"sources":["../../../../src/utils/webpack/index.ts"],"sourcesContent":["import { EnvPlugin } from './env';\nimport { EnvPluginOptions } from './env/types';\nimport { ModuleFederationPlugin } from './module-federation';\nimport { ModuleFederationPluginOptions } from './module-federation/types';\n\nexport type { EnvPluginOptions, ModuleFederationPluginOptions };\nexport { EnvPlugin, ModuleFederationPlugin };\n"],"mappings":"AAAA,SAASA,SAAS,QAAQ,gBAAO;AAEjC,SAASC,sBAAsB,QAAQ,8BAAqB;AAI5D,SAASD,SAAS,EAAEC,sBAAsB"}
1
+ {"version":3,"file":"index.js","names":["EnvPlugin","ModuleFederationPlugin","DEFAULT_SHARED"],"sources":["../../../../src/utils/webpack/index.ts"],"sourcesContent":["export type { EnvPluginOptions } from './env/types';\nexport type { ModuleFederationPluginOptions } from './module-federation/types';\nexport { EnvPlugin } from './env';\nexport { ModuleFederationPlugin, DEFAULT_SHARED } from './module-federation';\n"],"mappings":"AAEA,SAASA,SAAS,QAAQ,gBAAO;AACjC,SAASC,sBAAsB,EAAEC,cAAc,QAAQ,8BAAqB"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/http/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE/E;;GAEG;AACH,eAAO,MAAM,SAAS;IACpB;;;;OAIG;8BACY,GAAG,UAAU,mBAAmB,KAAG,IAAI;IAgBtD;;;;;OAKG;+BACa,MAAM,GAAG,GAAG,UAAU,mBAAmB,KAAG,GAAG;IAQ/D;;;;OAIG;kCACgB,MAAM,GAAG,GAAG,KAAG,GAAG;IAQrC;;;;;OAKG;;QAID,mBAAmB;gCACI,QAAQ;+BAGZ,QAAQ,yDAqBX,OAAO;CAMjB,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/http/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE/E;;GAEG;AACH,eAAO,MAAM,SAAS;IACpB;;;;OAIG;8BACY,GAAG,UAAU,mBAAmB,KAAG,IAAI;IAgBtD;;;;;OAKG;+BACa,MAAM,GAAG,GAAG,UAAU,mBAAmB,KAAG,GAAG;IAQ/D;;;;OAIG;kCACgB,MAAM,GAAG,GAAG,KAAG,GAAG;IAQrC;;;;;OAKG;;QAID,mBAAmB;gCACI,QAAQ;+BAaZ,QAAQ,yDAuBX,OAAO;CAMjB,CAAC"}
@@ -1,9 +1,9 @@
1
1
  import type { LogHandler } from '../types';
2
- import type { Hub } from '@sentry/types';
2
+ import type { Scope } from '@sentry/types';
3
3
  /**
4
4
  * Возвращает новый handler для logger'а для отправки событий в Sentry.
5
- * @param hubInit Sentry Hub или функция которая его вернёт.
5
+ * @param scopeInit Sentry Hub или функция которая его вернёт.
6
6
  * @return Handler.
7
7
  */
8
- export declare function createSentryHandler(hubInit: Hub | (() => Hub)): LogHandler;
8
+ export declare function createSentryHandler(scopeInit: Scope | (() => Scope)): LogHandler;
9
9
  //# sourceMappingURL=sentry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sentry.d.ts","sourceRoot":"","sources":["../../../../src/log/handler/sentry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAGzC;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,UAAU,CA+C1E"}
1
+ {"version":3,"file":"sentry.d.ts","sourceRoot":"","sources":["../../../../src/log/handler/sentry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAG3C;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,KAAK,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,UAAU,CA2ChF"}
@@ -1,4 +1,6 @@
1
1
  export type { Logger, LogEvent, LogLevel, LogHandler, ErrorDetails, BreadcrumbDetails, ContextData, } from './types';
2
2
  export { createLogger } from './logger';
3
3
  export { DetailedError, Breadcrumb } from './errors';
4
+ export { createPinoHandler } from './handler/pino';
5
+ export { createSentryHandler } from './handler/sentry';
4
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/log/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,WAAW,GACZ,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/log/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,WAAW,GACZ,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"log-handler-sentry.d.ts","sourceRoot":"","sources":["../../../../../src/preset/bun/providers/log-handler-sentry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAKtC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,qCAYvD"}
1
+ {"version":3,"file":"log-handler-sentry.d.ts","sourceRoot":"","sources":["../../../../../src/preset/bun/providers/log-handler-sentry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAKtC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,qCAcvD"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/preset/bun-handler/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAgB5C;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,WAAW,6BA6BvD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/preset/bun-handler/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAgB5C;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,WAAW,6BA6BvD"}
@@ -1 +1 @@
1
- {"version":3,"file":"express-error-middleware.d.ts","sourceRoot":"","sources":["../../../../../src/preset/node/providers/express-error-middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAGnC;;;GAGG;AACH,wBAAgB,6BAA6B,IAAI,OAAO,CAAC,mBAAmB,CAE3E"}
1
+ {"version":3,"file":"express-error-middleware.d.ts","sourceRoot":"","sources":["../../../../../src/preset/node/providers/express-error-middleware.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAEnC;;;GAGG;AACH,wBAAgB,6BAA6B,IAAI,OAAO,CAAC,mBAAmB,CAE3E"}
@@ -1 +1 @@
1
- {"version":3,"file":"express-request-middleware.d.ts","sourceRoot":"","sources":["../../../../../src/preset/node/providers/express-request-middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAGnC;;;GAGG;AACH,wBAAgB,+BAA+B,IAAI,OAAO,CAAC,OAAO,CAEjE"}
1
+ {"version":3,"file":"express-request-middleware.d.ts","sourceRoot":"","sources":["../../../../../src/preset/node/providers/express-request-middleware.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAEnC;;;GAGG;AACH,wBAAgB,+BAA+B,IAAI,OAAO,CAAC,OAAO,CAOjE"}
@@ -1 +1 @@
1
- {"version":3,"file":"log-handler-sentry.d.ts","sourceRoot":"","sources":["../../../../../src/preset/node/providers/log-handler-sentry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI1C;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAapE"}
1
+ {"version":3,"file":"log-handler-sentry.d.ts","sourceRoot":"","sources":["../../../../../src/preset/node/providers/log-handler-sentry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI1C;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,UAAU,CAmBpE"}
@@ -1 +1 @@
1
- {"version":3,"file":"main-express-app.d.ts","sourceRoot":"","sources":["../../../../../src/preset/node/providers/main-express-app.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,OAAO,MAAM,SAAS,CAAC;AAG9B;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CA8D3E"}
1
+ {"version":3,"file":"main-express-app.d.ts","sourceRoot":"","sources":["../../../../../src/preset/node/providers/main-express-app.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,OAAO,MAAM,SAAS,CAAC;AAG9B;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CA4D3E"}
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../../../src/preset/web/providers/logger.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,MAAM,EAAgB,MAAM,cAAc,CAAC;AAIpD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAqCtD"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../../../src/preset/web/providers/logger.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,MAAM,EAAgB,MAAM,cAAc,CAAC;AAIpD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAwCtD"}
@@ -1,7 +1,5 @@
1
- import { EnvPlugin } from './env';
2
- import { EnvPluginOptions } from './env/types';
3
- import { ModuleFederationPlugin } from './module-federation';
4
- import { ModuleFederationPluginOptions } from './module-federation/types';
5
- export type { EnvPluginOptions, ModuleFederationPluginOptions };
6
- export { EnvPlugin, ModuleFederationPlugin };
1
+ export type { EnvPluginOptions } from './env/types';
2
+ export type { ModuleFederationPluginOptions } from './module-federation/types';
3
+ export { EnvPlugin } from './env';
4
+ export { ModuleFederationPlugin, DEFAULT_SHARED } from './module-federation';
7
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/webpack/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAE1E,YAAY,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/utils/webpack/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,YAAY,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sima-land/isomorph",
3
- "version": "11.0.0-alpha.50",
3
+ "version": "11.0.0-alpha.52",
4
4
  "description": "Tiny framework for fast start frontend microservices",
5
5
  "author": "www.sima-land.ru team",
6
6
  "license": "Apache-2.0",
@@ -15,7 +15,7 @@
15
15
  "build:types": "tsc --project tsconfig.types.json",
16
16
  "post-build-esm": "node scripts/post-build-esm.mjs",
17
17
  "build": "npm run build:before && npm run build:esm && npm run build:cjs && npm run build:types && npm run post-build-esm",
18
- "lint": "eslint --cache ./src --ext .js,.jsx,.ts,.tsx",
18
+ "lint": "eslint src",
19
19
  "test": "jest"
20
20
  },
21
21
  "devDependencies": {
@@ -24,7 +24,7 @@
24
24
  "@babel/preset-env": "^7.22.5",
25
25
  "@babel/preset-react": "^7.22.5",
26
26
  "@babel/preset-typescript": "^7.22.5",
27
- "@sima-land/linters": "^4.0.0",
27
+ "@sima-land/linters": "^5.0.0",
28
28
  "@testing-library/react": "^14.0.0",
29
29
  "@types/accepts": "^1.3.7",
30
30
  "@types/express": "^4.17.17",
@@ -35,36 +35,36 @@
35
35
  "@types/webpack": "^5.28.1",
36
36
  "babel-jest": "^29.5.0",
37
37
  "bun-types": "^1.0.12",
38
- "eslint": "^8.53.0",
38
+ "eslint": "^9.9.0",
39
39
  "fs-extra": "^11.1.1",
40
- "husky": "^8.0.3",
40
+ "husky": "^9.1.5",
41
41
  "jest": "^28.1.3",
42
42
  "jest-environment-jsdom": "^28.1.3",
43
- "prettier": "^3.0.3",
43
+ "prettier": "^3.3.3",
44
44
  "typescript": "^5.3.2",
45
45
  "whatwg-fetch": "^3.6.17"
46
46
  },
47
47
  "dependencies": {
48
48
  "@humanwhocodes/env": "^3.0.5",
49
49
  "@krutoo/fetch-tools": "^0.0.16",
50
- "@opentelemetry/api": "^1.4.1",
51
- "@opentelemetry/exporter-prometheus": "^0.38.0",
52
- "@opentelemetry/exporter-trace-otlp-http": "^0.39.1",
53
- "@opentelemetry/propagator-jaeger": "^1.12.0",
54
- "@opentelemetry/resources": "^1.12.0",
55
- "@opentelemetry/sdk-metrics": "^1.12.0",
56
- "@opentelemetry/sdk-trace-base": "^1.12.0",
57
- "@opentelemetry/sdk-trace-node": "^1.12.0",
58
- "@opentelemetry/semantic-conventions": "^1.12.0",
59
- "@sentry/browser": "^7.81.0",
60
- "@sentry/bun": "^7.81.0",
61
- "@sentry/node": "^7.81.0",
50
+ "@opentelemetry/api": "^1.9.0",
51
+ "@opentelemetry/exporter-prometheus": "^0.52.1",
52
+ "@opentelemetry/exporter-trace-otlp-http": "^0.52.1",
53
+ "@opentelemetry/propagator-jaeger": "^1.25.1",
54
+ "@opentelemetry/resources": "^1.25.1",
55
+ "@opentelemetry/sdk-metrics": "^1.25.1",
56
+ "@opentelemetry/sdk-trace-base": "^1.25.1",
57
+ "@opentelemetry/sdk-trace-node": "^1.25.1",
58
+ "@opentelemetry/semantic-conventions": "^1.25.1",
59
+ "@sentry/browser": "^8.13.0",
60
+ "@sentry/bun": "^8.13.0",
61
+ "@sentry/node": "^8.13.0",
62
62
  "accepts": "^1.3.8",
63
63
  "dotenv": "^16.3.1",
64
- "express": "^4.18.2",
64
+ "express": "^4.21.0",
65
65
  "http-proxy-middleware": "^3.0.0",
66
66
  "jsesc": "^3.0.2",
67
- "middleware-axios": "^2.1.6",
67
+ "middleware-axios": "^3.0.0",
68
68
  "pino": "^8.14.1",
69
69
  "pino-pretty": "^9.1.1",
70
70
  "prom-client": "^14.2.0",
@@ -72,7 +72,7 @@
72
72
  },
73
73
  "peerDependencies": {
74
74
  "@reduxjs/toolkit": "^1.9.5",
75
- "axios": "^1.6.7",
75
+ "axios": "^1.7.4",
76
76
  "react": "^17.0 || ^18.0",
77
77
  "react-dom": "^17.0 || ^18.0",
78
78
  "react-redux": "^8.0.5",