@sima-land/isomorph 11.0.0-alpha.72 → 11.0.0-alpha.73
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.
- package/dist/cjs/package.json +16 -20
- package/dist/cjs/preset/isomorphic/types.js.map +1 -1
- package/dist/cjs/preset/node/index.js.map +1 -1
- package/dist/cjs/preset/node/utils/axios-tracing-middleware.js +13 -3
- package/dist/cjs/preset/node/utils/axios-tracing-middleware.js.map +1 -1
- package/dist/cjs/preset/node/utils/telemetry.js +19 -0
- package/dist/cjs/preset/node/utils/telemetry.js.map +1 -1
- package/dist/cjs/preset/server/types.js.map +1 -1
- package/dist/cjs/utils/redux/remote-data.js +9 -17
- package/dist/cjs/utils/redux/remote-data.js.map +1 -1
- package/dist/cjs/utils/selectors/create-curried-selector.js +2 -14
- package/dist/cjs/utils/selectors/create-curried-selector.js.map +1 -1
- package/dist/esm/package.json +16 -20
- package/dist/esm/preset/isomorphic/types.js.map +1 -1
- package/dist/esm/preset/node/index.js.map +1 -1
- package/dist/esm/preset/node/utils/axios-tracing-middleware.js +15 -5
- package/dist/esm/preset/node/utils/axios-tracing-middleware.js.map +1 -1
- package/dist/esm/preset/node/utils/telemetry.js +19 -1
- package/dist/esm/preset/node/utils/telemetry.js.map +1 -1
- package/dist/esm/preset/node-handler/providers/handler-main.js +7 -4
- package/dist/esm/preset/node-handler/providers/handler-main.js.map +1 -1
- package/dist/esm/preset/server/providers/page-render.js +8 -2
- package/dist/esm/preset/server/providers/page-render.js.map +1 -1
- package/dist/esm/preset/server/types.js.map +1 -1
- package/dist/esm/preset/server/utils/regular-helmet.js +35 -27
- package/dist/esm/preset/server/utils/regular-helmet.js.map +1 -1
- package/dist/esm/utils/react/error-handlers/index.js +11 -8
- package/dist/esm/utils/react/error-handlers/index.js.map +1 -1
- package/dist/esm/utils/redux/remote-data.js +5 -11
- package/dist/esm/utils/redux/remote-data.js.map +1 -1
- package/dist/esm/utils/selectors/create-curried-selector.js +2 -15
- package/dist/esm/utils/selectors/create-curried-selector.js.map +1 -1
- package/dist/esm/utils/ssr/index.js +2 -3
- package/dist/esm/utils/ssr/index.js.map +1 -1
- package/dist/types/preset/isomorphic/types.d.ts.map +1 -1
- package/dist/types/preset/node/index.d.ts.map +1 -1
- package/dist/types/preset/node/utils/axios-tracing-middleware.d.ts +1 -0
- package/dist/types/preset/node/utils/axios-tracing-middleware.d.ts.map +1 -1
- package/dist/types/preset/node/utils/telemetry.d.ts +6 -0
- package/dist/types/preset/node/utils/telemetry.d.ts.map +1 -1
- package/dist/types/preset/server/providers/page-helmet.d.ts +1 -3
- package/dist/types/preset/server/providers/page-helmet.d.ts.map +1 -1
- package/dist/types/preset/server/providers/page-render.d.ts +1 -1
- package/dist/types/preset/server/providers/page-render.d.ts.map +1 -1
- package/dist/types/preset/server/types.d.ts +1 -0
- package/dist/types/preset/server/types.d.ts.map +1 -1
- package/dist/types/preset/server/utils/regular-helmet.d.ts +1 -1
- package/dist/types/preset/server/utils/regular-helmet.d.ts.map +1 -1
- package/dist/types/utils/react/error-handlers/index.d.ts +2 -2
- package/dist/types/utils/react/error-handlers/index.d.ts.map +1 -1
- package/dist/types/utils/redux/remote-data.d.ts +103 -23
- package/dist/types/utils/redux/remote-data.d.ts.map +1 -1
- package/dist/types/utils/redux-saga/take-chain.d.ts +1 -1
- package/dist/types/utils/redux-saga/take-chain.d.ts.map +1 -1
- package/dist/types/utils/selectors/create-curried-selector.d.ts +6 -16
- package/dist/types/utils/selectors/create-curried-selector.d.ts.map +1 -1
- package/dist/types/utils/ssr/index.d.ts +1 -1
- package/dist/types/utils/ssr/index.d.ts.map +1 -1
- package/package.json +43 -43
package/dist/cjs/package.json
CHANGED
|
@@ -3,36 +3,32 @@
|
|
|
3
3
|
"name": "@sima-land/isomorph",
|
|
4
4
|
"version": "0.0.0",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@humanwhocodes/env": "4.0.1",
|
|
6
|
+
"@humanwhocodes/env": "^4.0.1",
|
|
7
7
|
"@krutoo/fetch-tools": "^0.1.1",
|
|
8
8
|
"@opentelemetry/api": "^1.9.1",
|
|
9
|
-
"@opentelemetry/exporter-
|
|
10
|
-
"@opentelemetry/
|
|
11
|
-
"@opentelemetry/
|
|
12
|
-
"@opentelemetry/sdk-
|
|
13
|
-
"@opentelemetry/
|
|
14
|
-
"@
|
|
15
|
-
"@
|
|
16
|
-
"@sentry/browser": "^10.39.0",
|
|
17
|
-
"@sentry/node": "^10.39.0",
|
|
9
|
+
"@opentelemetry/exporter-trace-otlp-grpc": "^0.221.0",
|
|
10
|
+
"@opentelemetry/resources": "^2.10.0",
|
|
11
|
+
"@opentelemetry/sdk-trace-base": "^2.10.0",
|
|
12
|
+
"@opentelemetry/sdk-trace-node": "^2.10.0",
|
|
13
|
+
"@opentelemetry/semantic-conventions": "^1.43.0",
|
|
14
|
+
"@sentry/browser": "10.47.0",
|
|
15
|
+
"@sentry/node": "10.47.0",
|
|
18
16
|
"accepts": "^1.3.8",
|
|
19
|
-
"dotenv": "^17.
|
|
17
|
+
"dotenv": "^17.4.2",
|
|
20
18
|
"express": "^5.2.1",
|
|
21
|
-
"http-proxy-middleware": "^
|
|
19
|
+
"http-proxy-middleware": "^4.2.0",
|
|
22
20
|
"jsesc": "^3.1.0",
|
|
23
21
|
"middleware-axios": "^3.0.0",
|
|
24
22
|
"pino": "^10.3.1",
|
|
25
23
|
"pino-pretty": "^13.1.3",
|
|
26
24
|
"prom-client": "^15.1.3",
|
|
27
|
-
"
|
|
28
|
-
"webpack": "^5.105.2"
|
|
25
|
+
"webpack": "^5.108.4"
|
|
29
26
|
},
|
|
30
27
|
"peerDependencies": {
|
|
31
|
-
"@reduxjs/toolkit": "
|
|
32
|
-
"axios": "1.
|
|
33
|
-
"react": "^18.0",
|
|
34
|
-
"react-dom": "^18.0",
|
|
35
|
-
"
|
|
36
|
-
"redux-saga": "1.5.0"
|
|
28
|
+
"@reduxjs/toolkit": "^2.0.0",
|
|
29
|
+
"axios": "^1.18.1",
|
|
30
|
+
"react": "^18.0 || ^19.0",
|
|
31
|
+
"react-dom": "^18.0 || ^19.0",
|
|
32
|
+
"redux-saga": "^1.5.0"
|
|
37
33
|
}
|
|
38
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../../../src/preset/isomorphic/types.ts"],"sourcesContent":["import type { Provider, Token } from '../../di';\n\nexport interface PresetTuner {\n (tools: { override: <T>(token: Token<T>, provider: Provider<T>) => void }): void;\n}\n\nexport type KnownHttpApiKey =\n
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../../../src/preset/isomorphic/types.ts"],"sourcesContent":["import type { Provider, Token } from '../../di';\n\nexport interface PresetTuner {\n (tools: { override: <T>(token: Token<T>, provider: Provider<T>) => void }): void;\n}\n\nexport type KnownHttpApiKey =\n 'ilium' | 'simaV3' | 'simaV4' | 'simaV6' | 'chponkiV2' | 'shuttle' | 'fileDispatcher';\n\n/**\n * Строгая версия Map без возможности добавлять/удалять.\n */\nexport interface StrictMap<Key extends string> {\n /** Возвращает значение по ключу. */\n get(key: Key): string;\n}\n\n/**\n * Внутренний интерфейс для хранения ссылок на ассеты.\n */\nexport interface PageAssets {\n js: string;\n css: string;\n criticalJs?: string;\n criticalCss?: string;\n}\n\n/**\n * Структура ответа от frontend-микросервиса в формате JSON по соглашению.\n */\nexport interface ConventionalJson {\n markup: string;\n bundle_js: string;\n bundle_css: string;\n critical_js?: string;\n critical_css?: string;\n meta?: any;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_tokens","require","_axiosFactory","_fetch","_baseConfig","_di","_healthCheck","_configSource","_expressErrorMiddleware","_expressFactory","_expressLogMiddleware","_expressMetricsMiddleware","_expressRequestMiddleware","_expressTracingMiddleware","_knownHttpApiHosts","_logger","_metricsExpressApp","_telemetryTracer","_telemetryTracerSpanExporter","_ssrBridgeServerSide","_telemetryTracerProvider","_telemetryTracerResource","_mainExpressApp","_publicEnvs","_getClientIp","_getForwardedHeaders","_getPageResponseFormat","_handlerProvider","PresetNode","customize","preset","createPreset","set","KnownToken","Config","source","provideConfigSource","base","provideBaseConfig","publicEnvs","providePublicEnvs","logger","provideLogger","Tracing","tracer","provideTracer","spanExporter","provideSpanExporter","provider","provideTracingProvider","resource","provideTracingResource","Metrics","expressApp","provideMetricsExpressApp","Http","fetch","provideFetch","Fetch","middleware","Serve","Proxy","config","Axios","factory","provideAxiosFactory","Express","app","provideMainExpressApp","pageRoutes","serviceRoutes","resolve","Handlers","healthCheck","Middleware","request","log","metrics","tracing","endMiddleware","error","provideExpressFactory","provideExpressRequestMiddleware","provideExpressLogMiddleware","provideExpressMetricsMiddleware","provideExpressTracingMiddleware","provideExpressErrorMiddleware","Api","knownHosts","provideKnownHttpApiHosts","SsrBridge","serverSide","provideSsrBridgeServerSide","override","bind"],"sources":["../../../../src/preset/node/index.ts"],"sourcesContent":["import { KnownToken } from '../../tokens';\nimport { provideAxiosFactory } from '../isomorphic/providers/axios-factory';\nimport { provideFetch } from '../isomorphic/providers/fetch';\nimport { provideBaseConfig } from '../isomorphic/providers/base-config';\nimport { Preset, createPreset } from '../../di';\nimport { PresetTuner } from '../isomorphic/types';\nimport { healthCheck } from '../../utils/express/handler/health-check';\nimport { provideConfigSource } from './providers/config-source';\nimport { provideExpressErrorMiddleware } from './providers/express-error-middleware';\nimport { provideExpressFactory } from './providers/express-factory';\nimport { provideExpressLogMiddleware } from './providers/express-log-middleware';\nimport { provideExpressMetricsMiddleware } from './providers/express-metrics-middleware';\nimport { provideExpressRequestMiddleware } from './providers/express-request-middleware';\nimport { provideExpressTracingMiddleware } from './providers/express-tracing-middleware';\nimport { provideKnownHttpApiHosts } from '../server/providers/known-http-api-hosts';\nimport { provideLogger } from './providers/logger';\nimport { provideMetricsExpressApp } from './providers/metrics-express-app';\nimport { provideTracer } from './providers/telemetry-tracer';\nimport { provideSpanExporter } from './providers/telemetry-tracer-span-exporter';\nimport { provideSsrBridgeServerSide } from '../server/providers/ssr-bridge-server-side';\nimport { provideTracingProvider } from './providers/telemetry-tracer-provider';\nimport { provideTracingResource } from './providers/telemetry-tracer-resource';\nimport { provideMainExpressApp } from './providers/main-express-app';\nimport { ExpressRouteList } from './types';\nimport { providePublicEnvs } from './providers/public-envs';\n\n/**\n * Возвращает preset с зависимостями по умолчанию для frontend-микросервисов на Node.js.\n * @param customize Получит функцию с помощью которой можно переопределить предустановленные провайдеры.\n * @return Preset.\n */\nexport function PresetNode(customize?: PresetTuner): Preset {\n // ВАЖНО: используем .set() вместо аргумента defaults функции createPreset из-за скорости\n const preset = createPreset();\n\n // config\n preset.set(KnownToken.Config.source, provideConfigSource);\n preset.set(KnownToken.Config.base, provideBaseConfig);\n preset.set(KnownToken.Config.publicEnvs, providePublicEnvs);\n\n // log\n preset.set(KnownToken.logger, provideLogger);\n\n // tracing\n preset.set(KnownToken.Tracing.tracer, provideTracer);\n preset.set(KnownToken.Tracing.spanExporter, provideSpanExporter);\n preset.set(KnownToken.Tracing.provider, provideTracingProvider);\n preset.set(KnownToken.Tracing.resource, provideTracingResource);\n\n // metrics\n preset.set(KnownToken.Metrics.expressApp, provideMetricsExpressApp);\n\n // fetch\n preset.set(KnownToken.Http.fetch, provideFetch);\n preset.set(KnownToken.Http.Fetch.middleware, () => []);\n preset.set(KnownToken.Http.Serve.Proxy.config, () => null);\n\n // axios\n preset.set(KnownToken.Axios.factory, provideAxiosFactory);\n preset.set(KnownToken.Axios.middleware, () => []);\n\n // express\n preset.set(KnownToken.Express.app, provideMainExpressApp);\n preset.set(KnownToken.Express.pageRoutes, () => []);\n preset.set(\n KnownToken.Express.serviceRoutes,\n (resolve): ExpressRouteList => [\n ['/healthcheck', resolve(KnownToken.Express.Handlers.healthCheck)],\n ],\n );\n preset.set(KnownToken.Express.middleware, resolve => [\n resolve(KnownToken.Express.Middleware.request),\n resolve(KnownToken.Express.Middleware.log),\n resolve(KnownToken.Express.Middleware.metrics),\n resolve(KnownToken.Express.Middleware.tracing),\n ]);\n preset.set(KnownToken.Express.endMiddleware, resolve => [\n resolve(KnownToken.Express.Middleware.error),\n ]);\n preset.set(KnownToken.Express.factory, provideExpressFactory);\n preset.set(KnownToken.Express.Handlers.healthCheck, healthCheck);\n preset.set(KnownToken.Express.Middleware.request, provideExpressRequestMiddleware);\n preset.set(KnownToken.Express.Middleware.log, provideExpressLogMiddleware);\n preset.set(KnownToken.Express.Middleware.metrics, provideExpressMetricsMiddleware);\n preset.set(KnownToken.Express.Middleware.tracing, provideExpressTracingMiddleware);\n preset.set(KnownToken.Express.Middleware.error, provideExpressErrorMiddleware);\n\n // http api\n preset.set(KnownToken.Http.Api.knownHosts, provideKnownHttpApiHosts);\n\n // ssr bridge\n preset.set(KnownToken.SsrBridge.serverSide, provideSsrBridgeServerSide);\n\n if (customize) {\n customize({ override: preset.set.bind(preset) });\n }\n\n return preset;\n}\n\nexport type { ExpressHandlerContext, ExpressRouteList } from './types';\n\n// доступные утилиты\nexport { getClientIp } from './utils/get-client-ip';\nexport { getForwardedHeaders } from './utils/get-forwarded-headers';\nexport { getPageResponseFormat } from './utils/get-page-response-format';\nexport { HandlerProvider } from './utils/handler-provider';\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["_tokens","require","_axiosFactory","_fetch","_baseConfig","_di","_healthCheck","_configSource","_expressErrorMiddleware","_expressFactory","_expressLogMiddleware","_expressMetricsMiddleware","_expressRequestMiddleware","_expressTracingMiddleware","_knownHttpApiHosts","_logger","_metricsExpressApp","_telemetryTracer","_telemetryTracerSpanExporter","_ssrBridgeServerSide","_telemetryTracerProvider","_telemetryTracerResource","_mainExpressApp","_publicEnvs","_getClientIp","_getForwardedHeaders","_getPageResponseFormat","_handlerProvider","PresetNode","customize","preset","createPreset","set","KnownToken","Config","source","provideConfigSource","base","provideBaseConfig","publicEnvs","providePublicEnvs","logger","provideLogger","Tracing","tracer","provideTracer","spanExporter","provideSpanExporter","provider","provideTracingProvider","resource","provideTracingResource","Metrics","expressApp","provideMetricsExpressApp","Http","fetch","provideFetch","Fetch","middleware","Serve","Proxy","config","Axios","factory","provideAxiosFactory","Express","app","provideMainExpressApp","pageRoutes","serviceRoutes","resolve","Handlers","healthCheck","Middleware","request","log","metrics","tracing","endMiddleware","error","provideExpressFactory","provideExpressRequestMiddleware","provideExpressLogMiddleware","provideExpressMetricsMiddleware","provideExpressTracingMiddleware","provideExpressErrorMiddleware","Api","knownHosts","provideKnownHttpApiHosts","SsrBridge","serverSide","provideSsrBridgeServerSide","override","bind"],"sources":["../../../../src/preset/node/index.ts"],"sourcesContent":["import { KnownToken } from '../../tokens';\nimport { provideAxiosFactory } from '../isomorphic/providers/axios-factory';\nimport { provideFetch } from '../isomorphic/providers/fetch';\nimport { provideBaseConfig } from '../isomorphic/providers/base-config';\nimport { Preset, createPreset } from '../../di';\nimport { PresetTuner } from '../isomorphic/types';\nimport { healthCheck } from '../../utils/express/handler/health-check';\nimport { provideConfigSource } from './providers/config-source';\nimport { provideExpressErrorMiddleware } from './providers/express-error-middleware';\nimport { provideExpressFactory } from './providers/express-factory';\nimport { provideExpressLogMiddleware } from './providers/express-log-middleware';\nimport { provideExpressMetricsMiddleware } from './providers/express-metrics-middleware';\nimport { provideExpressRequestMiddleware } from './providers/express-request-middleware';\nimport { provideExpressTracingMiddleware } from './providers/express-tracing-middleware';\nimport { provideKnownHttpApiHosts } from '../server/providers/known-http-api-hosts';\nimport { provideLogger } from './providers/logger';\nimport { provideMetricsExpressApp } from './providers/metrics-express-app';\nimport { provideTracer } from './providers/telemetry-tracer';\nimport { provideSpanExporter } from './providers/telemetry-tracer-span-exporter';\nimport { provideSsrBridgeServerSide } from '../server/providers/ssr-bridge-server-side';\nimport { provideTracingProvider } from './providers/telemetry-tracer-provider';\nimport { provideTracingResource } from './providers/telemetry-tracer-resource';\nimport { provideMainExpressApp } from './providers/main-express-app';\nimport { ExpressRouteList } from './types';\nimport { providePublicEnvs } from './providers/public-envs';\n\n/**\n * Возвращает preset с зависимостями по умолчанию для frontend-микросервисов на Node.js.\n * @param customize Получит функцию с помощью которой можно переопределить предустановленные провайдеры.\n * @return Preset.\n */\nexport function PresetNode(customize?: PresetTuner): Preset {\n // ВАЖНО: используем .set() вместо аргумента defaults функции createPreset из-за скорости\n const preset = createPreset();\n\n // config\n preset.set(KnownToken.Config.source, provideConfigSource);\n preset.set(KnownToken.Config.base, provideBaseConfig);\n preset.set(KnownToken.Config.publicEnvs, providePublicEnvs);\n\n // log\n preset.set(KnownToken.logger, provideLogger);\n\n // tracing\n preset.set(KnownToken.Tracing.tracer, provideTracer);\n preset.set(KnownToken.Tracing.spanExporter, provideSpanExporter);\n preset.set(KnownToken.Tracing.provider, provideTracingProvider);\n preset.set(KnownToken.Tracing.resource, provideTracingResource);\n\n // metrics\n preset.set(KnownToken.Metrics.expressApp, provideMetricsExpressApp);\n\n // fetch\n preset.set(KnownToken.Http.fetch, provideFetch);\n preset.set(KnownToken.Http.Fetch.middleware, () => []);\n preset.set(KnownToken.Http.Serve.Proxy.config, () => null);\n\n // axios\n preset.set(KnownToken.Axios.factory, provideAxiosFactory);\n preset.set(KnownToken.Axios.middleware, () => []);\n\n // express\n preset.set(KnownToken.Express.app, provideMainExpressApp);\n preset.set(KnownToken.Express.pageRoutes, () => []);\n preset.set(KnownToken.Express.serviceRoutes, (resolve): ExpressRouteList => [\n ['/healthcheck', resolve(KnownToken.Express.Handlers.healthCheck)],\n ]);\n preset.set(KnownToken.Express.middleware, resolve => [\n resolve(KnownToken.Express.Middleware.request),\n resolve(KnownToken.Express.Middleware.log),\n resolve(KnownToken.Express.Middleware.metrics),\n resolve(KnownToken.Express.Middleware.tracing),\n ]);\n preset.set(KnownToken.Express.endMiddleware, resolve => [\n resolve(KnownToken.Express.Middleware.error),\n ]);\n preset.set(KnownToken.Express.factory, provideExpressFactory);\n preset.set(KnownToken.Express.Handlers.healthCheck, healthCheck);\n preset.set(KnownToken.Express.Middleware.request, provideExpressRequestMiddleware);\n preset.set(KnownToken.Express.Middleware.log, provideExpressLogMiddleware);\n preset.set(KnownToken.Express.Middleware.metrics, provideExpressMetricsMiddleware);\n preset.set(KnownToken.Express.Middleware.tracing, provideExpressTracingMiddleware);\n preset.set(KnownToken.Express.Middleware.error, provideExpressErrorMiddleware);\n\n // http api\n preset.set(KnownToken.Http.Api.knownHosts, provideKnownHttpApiHosts);\n\n // ssr bridge\n preset.set(KnownToken.SsrBridge.serverSide, provideSsrBridgeServerSide);\n\n if (customize) {\n customize({ override: preset.set.bind(preset) });\n }\n\n return preset;\n}\n\nexport type { ExpressHandlerContext, ExpressRouteList } from './types';\n\n// доступные утилиты\nexport { getClientIp } from './utils/get-client-ip';\nexport { getForwardedHeaders } from './utils/get-forwarded-headers';\nexport { getPageResponseFormat } from './utils/get-page-response-format';\nexport { HandlerProvider } from './utils/handler-provider';\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -19,13 +19,15 @@ function axiosTracingMiddleware(tracer, rootContext) {
|
|
|
19
19
|
return async function trace(config, next, defaults) {
|
|
20
20
|
const {
|
|
21
21
|
method,
|
|
22
|
-
urlStr
|
|
22
|
+
urlStr,
|
|
23
|
+
params
|
|
23
24
|
} = getRequestInfo(config, defaults);
|
|
24
25
|
const url = new URL(urlStr);
|
|
25
26
|
const span = tracer.startSpan(`axios ${method} ${url}`, undefined, rootContext);
|
|
26
27
|
span.setAttributes({
|
|
27
28
|
[_incubating.ATTR_URL_FULL]: url.href,
|
|
28
29
|
[_incubating.ATTR_HTTP_REQUEST_METHOD]: method,
|
|
30
|
+
...(0, _telemetry.getUrlQueryAttributes)(params),
|
|
29
31
|
...(0, _telemetry.getSemanticHeaders)({
|
|
30
32
|
// @todo непонятно как доставать заголовки из defaults потому что там на одном уровне заголовки и таблицы заголовков
|
|
31
33
|
...defaults.headers.common,
|
|
@@ -34,12 +36,18 @@ function axiosTracingMiddleware(tracer, rootContext) {
|
|
|
34
36
|
})
|
|
35
37
|
});
|
|
36
38
|
try {
|
|
37
|
-
await next(config);
|
|
39
|
+
const response = await next(config);
|
|
40
|
+
span.setAttributes({
|
|
41
|
+
[_incubating.ATTR_HTTP_RESPONSE_STATUS_CODE]: response.status
|
|
42
|
+
});
|
|
38
43
|
} catch (error) {
|
|
39
44
|
span.setStatus({
|
|
40
45
|
code: _api.SpanStatusCode.ERROR,
|
|
41
46
|
message: 'HTTP Request failed'
|
|
42
47
|
});
|
|
48
|
+
span.setAttributes({
|
|
49
|
+
[_incubating.ATTR_HTTP_RESPONSE_STATUS_CODE]: error.status
|
|
50
|
+
});
|
|
43
51
|
span.end();
|
|
44
52
|
|
|
45
53
|
// не прячем ошибку
|
|
@@ -58,9 +66,11 @@ function axiosTracingMiddleware(tracer, rootContext) {
|
|
|
58
66
|
function getRequestInfo(config, defaults) {
|
|
59
67
|
const method = (config.method || 'GET').toUpperCase();
|
|
60
68
|
const baseURL = config.baseURL || defaults.baseURL || '';
|
|
69
|
+
const params = config.params || new URLSearchParams();
|
|
61
70
|
return {
|
|
62
71
|
method,
|
|
63
|
-
urlStr: (0, _displayUrl.displayUrl)(baseURL, config.url || defaults.url || '')
|
|
72
|
+
urlStr: (0, _displayUrl.displayUrl)(baseURL, config.url || defaults.url || ''),
|
|
73
|
+
params
|
|
64
74
|
};
|
|
65
75
|
}
|
|
66
76
|
//# sourceMappingURL=axios-tracing-middleware.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axios-tracing-middleware.js","names":["_api","require","_incubating","_displayUrl","_telemetry","axiosTracingMiddleware","tracer","rootContext","trace","config","next","defaults","method","urlStr","getRequestInfo","url","URL","span","startSpan","undefined","setAttributes","ATTR_URL_FULL","href","ATTR_HTTP_REQUEST_METHOD","getSemanticHeaders","headers","common","toLowerCase","error","setStatus","code","SpanStatusCode","ERROR","message","end","toUpperCase","baseURL","displayUrl"],"sources":["../../../../../src/preset/node/utils/axios-tracing-middleware.ts"],"sourcesContent":["import type { AxiosInstance, AxiosRequestConfig, HeadersDefaults } from 'axios';\nimport type { Middleware } from 'middleware-axios';\nimport { Context, Tracer, SpanStatusCode } from '@opentelemetry/api';\nimport {\n ATTR_HTTP_REQUEST_METHOD,\n ATTR_URL_FULL,\n} from '@opentelemetry/semantic-conventions/incubating';\nimport { displayUrl } from '../../isomorphic/utils/display-url';\nimport { getSemanticHeaders } from './telemetry';\n\n/**\n * Возвращает новый middleware для трассировки исходящих запросов.\n * @param tracer Трейсер.\n * @param rootContext Контекст.\n * @return Middleware.\n */\nexport function axiosTracingMiddleware(tracer: Tracer, rootContext: Context): Middleware<any> {\n return async function trace(config, next, defaults) {\n const { method, urlStr } = getRequestInfo(config, defaults);\n const url = new URL(urlStr);\n const span = tracer.startSpan(`axios ${method} ${url}`, undefined, rootContext);\n\n span.setAttributes({\n [ATTR_URL_FULL]: url.href,\n [ATTR_HTTP_REQUEST_METHOD]: method,\n ...getSemanticHeaders({\n // @todo непонятно как доставать заголовки из defaults потому что там на одном уровне заголовки и таблицы заголовков\n ...defaults.headers.common,\n ...defaults.headers[method.toLowerCase() as keyof HeadersDefaults],\n ...config.headers,\n }),\n });\n\n try {\n await next(config);\n } catch (error) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: 'HTTP Request failed',\n });\n\n span.end();\n\n // не прячем ошибку\n throw error;\n }\n\n span.end();\n };\n}\n\n/**\n * Формирует базовые данные запроса.\n * @param config Axios-конфиг запроса.\n * @param defaults Базовый конфиг экземпляра Axios.\n * @return Базовые данные запроса.\n */\nexport function getRequestInfo(\n config: AxiosRequestConfig,\n defaults: AxiosInstance['defaults'],\n): {\n method: string;\n urlStr: string;\n} {\n const method = (config.method || 'GET').toUpperCase();\n const baseURL = config.baseURL || defaults.baseURL || '';\n\n return {\n method,\n urlStr: displayUrl(baseURL, config.url || defaults.url || ''),\n };\n}\n"],"mappings":";;;;;;;AAEA,IAAAA,IAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;
|
|
1
|
+
{"version":3,"file":"axios-tracing-middleware.js","names":["_api","require","_incubating","_displayUrl","_telemetry","axiosTracingMiddleware","tracer","rootContext","trace","config","next","defaults","method","urlStr","params","getRequestInfo","url","URL","span","startSpan","undefined","setAttributes","ATTR_URL_FULL","href","ATTR_HTTP_REQUEST_METHOD","getUrlQueryAttributes","getSemanticHeaders","headers","common","toLowerCase","response","ATTR_HTTP_RESPONSE_STATUS_CODE","status","error","setStatus","code","SpanStatusCode","ERROR","message","end","toUpperCase","baseURL","URLSearchParams","displayUrl"],"sources":["../../../../../src/preset/node/utils/axios-tracing-middleware.ts"],"sourcesContent":["import type { AxiosInstance, AxiosRequestConfig, HeadersDefaults } from 'axios';\nimport type { Middleware } from 'middleware-axios';\nimport { Context, Tracer, SpanStatusCode } from '@opentelemetry/api';\nimport {\n ATTR_HTTP_REQUEST_METHOD,\n ATTR_HTTP_RESPONSE_STATUS_CODE,\n ATTR_URL_FULL,\n} from '@opentelemetry/semantic-conventions/incubating';\nimport { displayUrl } from '../../isomorphic/utils/display-url';\nimport { getSemanticHeaders, getUrlQueryAttributes } from './telemetry';\n\n/**\n * Возвращает новый middleware для трассировки исходящих запросов.\n * @param tracer Трейсер.\n * @param rootContext Контекст.\n * @return Middleware.\n */\nexport function axiosTracingMiddleware(tracer: Tracer, rootContext: Context): Middleware<any> {\n return async function trace(config, next, defaults) {\n const { method, urlStr, params } = getRequestInfo(config, defaults);\n const url = new URL(urlStr);\n const span = tracer.startSpan(`axios ${method} ${url}`, undefined, rootContext);\n\n span.setAttributes({\n [ATTR_URL_FULL]: url.href,\n [ATTR_HTTP_REQUEST_METHOD]: method,\n ...getUrlQueryAttributes(params),\n ...getSemanticHeaders({\n // @todo непонятно как доставать заголовки из defaults потому что там на одном уровне заголовки и таблицы заголовков\n ...defaults.headers.common,\n ...defaults.headers[method.toLowerCase() as keyof HeadersDefaults],\n ...config.headers,\n }),\n });\n\n try {\n const response = await next(config);\n span.setAttributes({\n [ATTR_HTTP_RESPONSE_STATUS_CODE]: response.status,\n });\n } catch (error) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: 'HTTP Request failed',\n });\n span.setAttributes({\n [ATTR_HTTP_RESPONSE_STATUS_CODE]: (error as any).status,\n });\n\n span.end();\n\n // не прячем ошибку\n throw error;\n }\n\n span.end();\n };\n}\n\n/**\n * Формирует базовые данные запроса.\n * @param config Axios-конфиг запроса.\n * @param defaults Базовый конфиг экземпляра Axios.\n * @return Базовые данные запроса.\n */\nexport function getRequestInfo(\n config: AxiosRequestConfig,\n defaults: AxiosInstance['defaults'],\n): {\n method: string;\n urlStr: string;\n params: URLSearchParams;\n} {\n const method = (config.method || 'GET').toUpperCase();\n const baseURL = config.baseURL || defaults.baseURL || '';\n const params: URLSearchParams = config.params || new URLSearchParams();\n\n return {\n method,\n urlStr: displayUrl(baseURL, config.url || defaults.url || ''),\n params,\n };\n}\n"],"mappings":";;;;;;;AAEA,IAAAA,IAAA,GAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AAKA,IAAAE,WAAA,GAAAF,OAAA;AACA,IAAAG,UAAA,GAAAH,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASI,sBAAsBA,CAACC,MAAc,EAAEC,WAAoB,EAAmB;EAC5F,OAAO,eAAeC,KAAKA,CAACC,MAAM,EAAEC,IAAI,EAAEC,QAAQ,EAAE;IAClD,MAAM;MAAEC,MAAM;MAAEC,MAAM;MAAEC;IAAO,CAAC,GAAGC,cAAc,CAACN,MAAM,EAAEE,QAAQ,CAAC;IACnE,MAAMK,GAAG,GAAG,IAAIC,GAAG,CAACJ,MAAM,CAAC;IAC3B,MAAMK,IAAI,GAAGZ,MAAM,CAACa,SAAS,CAAC,SAASP,MAAM,IAAII,GAAG,EAAE,EAAEI,SAAS,EAAEb,WAAW,CAAC;IAE/EW,IAAI,CAACG,aAAa,CAAC;MACjB,CAACC,yBAAa,GAAGN,GAAG,CAACO,IAAI;MACzB,CAACC,oCAAwB,GAAGZ,MAAM;MAClC,GAAG,IAAAa,gCAAqB,EAACX,MAAM,CAAC;MAChC,GAAG,IAAAY,6BAAkB,EAAC;QACpB;QACA,GAAGf,QAAQ,CAACgB,OAAO,CAACC,MAAM;QAC1B,GAAGjB,QAAQ,CAACgB,OAAO,CAACf,MAAM,CAACiB,WAAW,CAAC,CAAC,CAA0B;QAClE,GAAGpB,MAAM,CAACkB;MACZ,CAAC;IACH,CAAC,CAAC;IAEF,IAAI;MACF,MAAMG,QAAQ,GAAG,MAAMpB,IAAI,CAACD,MAAM,CAAC;MACnCS,IAAI,CAACG,aAAa,CAAC;QACjB,CAACU,0CAA8B,GAAGD,QAAQ,CAACE;MAC7C,CAAC,CAAC;IACJ,CAAC,CAAC,OAAOC,KAAK,EAAE;MACdf,IAAI,CAACgB,SAAS,CAAC;QACbC,IAAI,EAAEC,mBAAc,CAACC,KAAK;QAC1BC,OAAO,EAAE;MACX,CAAC,CAAC;MACFpB,IAAI,CAACG,aAAa,CAAC;QACjB,CAACU,0CAA8B,GAAIE,KAAK,CAASD;MACnD,CAAC,CAAC;MAEFd,IAAI,CAACqB,GAAG,CAAC,CAAC;;MAEV;MACA,MAAMN,KAAK;IACb;IAEAf,IAAI,CAACqB,GAAG,CAAC,CAAC;EACZ,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASxB,cAAcA,CAC5BN,MAA0B,EAC1BE,QAAmC,EAKnC;EACA,MAAMC,MAAM,GAAG,CAACH,MAAM,CAACG,MAAM,IAAI,KAAK,EAAE4B,WAAW,CAAC,CAAC;EACrD,MAAMC,OAAO,GAAGhC,MAAM,CAACgC,OAAO,IAAI9B,QAAQ,CAAC8B,OAAO,IAAI,EAAE;EACxD,MAAM3B,MAAuB,GAAGL,MAAM,CAACK,MAAM,IAAI,IAAI4B,eAAe,CAAC,CAAC;EAEtE,OAAO;IACL9B,MAAM;IACNC,MAAM,EAAE,IAAA8B,sBAAU,EAACF,OAAO,EAAEhC,MAAM,CAACO,GAAG,IAAIL,QAAQ,CAACK,GAAG,IAAI,EAAE,CAAC;IAC7DF;EACF,CAAC;AACH","ignoreList":[]}
|
|
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.getSemanticHeaders = getSemanticHeaders;
|
|
7
|
+
exports.getUrlQueryAttributes = getUrlQueryAttributes;
|
|
7
8
|
var _semanticConventions = require("@opentelemetry/semantic-conventions");
|
|
8
9
|
/**
|
|
9
10
|
* Формирует данные заголовков согласно семантике.
|
|
@@ -20,4 +21,22 @@ function getSemanticHeaders(headers) {
|
|
|
20
21
|
}, {});
|
|
21
22
|
return Object.keys(result).length ? result : null;
|
|
22
23
|
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Формирует данные параметров запроса.
|
|
27
|
+
* @param params Объект URLSearchParams c параметрами запроса.
|
|
28
|
+
* @return Данные параметров запроса.
|
|
29
|
+
*/
|
|
30
|
+
function getUrlQueryAttributes(params) {
|
|
31
|
+
const urlParams = {};
|
|
32
|
+
for (const [param, value] of params.entries()) {
|
|
33
|
+
const currentKey = `${_semanticConventions.ATTR_URL_QUERY}.${param}`;
|
|
34
|
+
if (urlParams[currentKey]) {
|
|
35
|
+
urlParams[currentKey] = `${urlParams[currentKey]},${value}`;
|
|
36
|
+
} else {
|
|
37
|
+
urlParams[currentKey] = value;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return urlParams;
|
|
41
|
+
}
|
|
23
42
|
//# sourceMappingURL=telemetry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.js","names":["_semanticConventions","require","getSemanticHeaders","headers","result","Object","entries","reduce","acc","key","value","ATTR_HTTP_REQUEST_HEADER","keys","length"],"sources":["../../../../../src/preset/node/utils/telemetry.ts"],"sourcesContent":["import { ATTR_HTTP_REQUEST_HEADER } from '@opentelemetry/semantic-conventions';\n\n/**\n * Формирует данные заголовков согласно семантике.\n * @todo Возможно стоит убрать cookie/Cookie.\n * @param headers Объект заголовков запроса.\n * @return Данные заголовков.\n */\nexport function getSemanticHeaders(headers: Record<string, any>): Record<string, string> | null {\n const result = Object.entries(headers).reduce<Record<string, string>>((acc, [key, value]) => {\n if (value || typeof value === 'number') {\n acc[ATTR_HTTP_REQUEST_HEADER(key)] = value;\n }\n return acc;\n }, {});\n\n return Object.keys(result).length ? result : null;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"telemetry.js","names":["_semanticConventions","require","getSemanticHeaders","headers","result","Object","entries","reduce","acc","key","value","ATTR_HTTP_REQUEST_HEADER","keys","length","getUrlQueryAttributes","params","urlParams","param","currentKey","ATTR_URL_QUERY"],"sources":["../../../../../src/preset/node/utils/telemetry.ts"],"sourcesContent":["import { ATTR_HTTP_REQUEST_HEADER, ATTR_URL_QUERY } from '@opentelemetry/semantic-conventions';\n\n/**\n * Формирует данные заголовков согласно семантике.\n * @todo Возможно стоит убрать cookie/Cookie.\n * @param headers Объект заголовков запроса.\n * @return Данные заголовков.\n */\nexport function getSemanticHeaders(headers: Record<string, any>): Record<string, string> | null {\n const result = Object.entries(headers).reduce<Record<string, string>>((acc, [key, value]) => {\n if (value || typeof value === 'number') {\n acc[ATTR_HTTP_REQUEST_HEADER(key)] = value;\n }\n return acc;\n }, {});\n\n return Object.keys(result).length ? result : null;\n}\n\n/**\n * Формирует данные параметров запроса.\n * @param params Объект URLSearchParams c параметрами запроса.\n * @return Данные параметров запроса.\n */\nexport function getUrlQueryAttributes(params: URLSearchParams): Record<string, string> {\n const urlParams: Record<string, string> = {};\n for (const [param, value] of params.entries()) {\n const currentKey = `${ATTR_URL_QUERY}.${param}`;\n if (urlParams[currentKey]) {\n urlParams[currentKey] = `${urlParams[currentKey]},${value}`;\n } else {\n urlParams[currentKey] = value;\n }\n }\n return urlParams;\n}\n"],"mappings":";;;;;;;AAAA,IAAAA,oBAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,kBAAkBA,CAACC,OAA4B,EAAiC;EAC9F,MAAMC,MAAM,GAAGC,MAAM,CAACC,OAAO,CAACH,OAAO,CAAC,CAACI,MAAM,CAAyB,CAACC,GAAG,EAAE,CAACC,GAAG,EAAEC,KAAK,CAAC,KAAK;IAC3F,IAAIA,KAAK,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;MACtCF,GAAG,CAAC,IAAAG,6CAAwB,EAACF,GAAG,CAAC,CAAC,GAAGC,KAAK;IAC5C;IACA,OAAOF,GAAG;EACZ,CAAC,EAAE,CAAC,CAAC,CAAC;EAEN,OAAOH,MAAM,CAACO,IAAI,CAACR,MAAM,CAAC,CAACS,MAAM,GAAGT,MAAM,GAAG,IAAI;AACnD;;AAEA;AACA;AACA;AACA;AACA;AACO,SAASU,qBAAqBA,CAACC,MAAuB,EAA0B;EACrF,MAAMC,SAAiC,GAAG,CAAC,CAAC;EAC5C,KAAK,MAAM,CAACC,KAAK,EAAEP,KAAK,CAAC,IAAIK,MAAM,CAACT,OAAO,CAAC,CAAC,EAAE;IAC7C,MAAMY,UAAU,GAAG,GAAGC,mCAAc,IAAIF,KAAK,EAAE;IAC/C,IAAID,SAAS,CAACE,UAAU,CAAC,EAAE;MACzBF,SAAS,CAACE,UAAU,CAAC,GAAG,GAAGF,SAAS,CAACE,UAAU,CAAC,IAAIR,KAAK,EAAE;IAC7D,CAAC,MAAM;MACLM,SAAS,CAACE,UAAU,CAAC,GAAGR,KAAK;IAC/B;EACF;EACA,OAAOM,SAAS;AAClB","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../../../src/preset/server/types.ts"],"sourcesContent":["import type { PageAssets } from '../isomorphic';\n\n/**\n * На сервере между промежуточными слоями надо обмениваться данными поэтому появился такой интерфейс.\n * Возможно в будущем он перейдет в `@krutoo/fetch-tools`.\n */\nexport interface ServerHandlerContext {\n events: EventTarget;\n}\n\nexport interface ServerHandler {\n (request: Request, context: ServerHandlerContext): Response | Promise<Response>;\n}\n\nexport interface ServerEnhancer {\n (request: ServerHandler): ServerHandler;\n}\n\nexport interface ServerMiddleware {\n (\n request: Request,\n next: (req: Request, ctx?: ServerHandlerContext) => Response | Promise<Response>,\n context: ServerHandlerContext,\n ): Response | Promise<Response>;\n}\n\nexport interface PageResponseFormatResult {\n body: string;\n headers: Headers;\n}\n\nexport interface PageResponseFormatter {\n (\n jsx: JSX.Element,\n assets: PageAssets,\n ): PageResponseFormatResult | Promise<PageResponseFormatResult>;\n}\n\nexport interface RenderToString {\n (jsx: JSX.Element): string | Promise<string>;\n}\n\nexport interface RouteInfo {\n method: 'all' | 'get' | 'post' | 'put' | 'delete' | 'patch' | 'options' | 'head';\n path: string;\n}\n\nexport type RouteList = Array<[string | RouteInfo, ServerHandler]>;\n"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../../../src/preset/server/types.ts"],"sourcesContent":["import type { JSX } from 'react';\nimport type { PageAssets } from '../isomorphic';\n\n/**\n * На сервере между промежуточными слоями надо обмениваться данными поэтому появился такой интерфейс.\n * Возможно в будущем он перейдет в `@krutoo/fetch-tools`.\n */\nexport interface ServerHandlerContext {\n events: EventTarget;\n}\n\nexport interface ServerHandler {\n (request: Request, context: ServerHandlerContext): Response | Promise<Response>;\n}\n\nexport interface ServerEnhancer {\n (request: ServerHandler): ServerHandler;\n}\n\nexport interface ServerMiddleware {\n (\n request: Request,\n next: (req: Request, ctx?: ServerHandlerContext) => Response | Promise<Response>,\n context: ServerHandlerContext,\n ): Response | Promise<Response>;\n}\n\nexport interface PageResponseFormatResult {\n body: string;\n headers: Headers;\n}\n\nexport interface PageResponseFormatter {\n (\n jsx: JSX.Element,\n assets: PageAssets,\n ): PageResponseFormatResult | Promise<PageResponseFormatResult>;\n}\n\nexport interface RenderToString {\n (jsx: JSX.Element): string | Promise<string>;\n}\n\nexport interface RouteInfo {\n method: 'all' | 'get' | 'post' | 'put' | 'delete' | 'patch' | 'options' | 'head';\n path: string;\n}\n\nexport type RouteList = Array<[string | RouteInfo, ServerHandler]>;\n"],"mappings":"","ignoreList":[]}
|
|
@@ -4,17 +4,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.STATUS = exports.RemoteData = void 0;
|
|
7
|
-
var
|
|
8
|
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
7
|
+
var _toolkit = require("@reduxjs/toolkit");
|
|
9
8
|
/* eslint-disable jsdoc/require-jsdoc */
|
|
10
9
|
|
|
11
|
-
// @todo "* as" сделано для работы в Node.js ESM но есть подозрение что на tree shaking плохо скажется
|
|
12
|
-
|
|
13
|
-
const {
|
|
14
|
-
createAction,
|
|
15
|
-
createSelector
|
|
16
|
-
} = redux;
|
|
17
|
-
|
|
18
10
|
/**
|
|
19
11
|
* Статус загрузки данных.
|
|
20
12
|
*/
|
|
@@ -46,9 +38,9 @@ class RemoteData {
|
|
|
46
38
|
*/
|
|
47
39
|
static createActions(name) {
|
|
48
40
|
return {
|
|
49
|
-
request: createAction(`${name}/request`),
|
|
50
|
-
success: createAction(`${name}/success`),
|
|
51
|
-
failure: createAction(`${name}/failure`)
|
|
41
|
+
request: (0, _toolkit.createAction)(`${name}/request`),
|
|
42
|
+
success: (0, _toolkit.createAction)(`${name}/success`),
|
|
43
|
+
failure: (0, _toolkit.createAction)(`${name}/failure`)
|
|
52
44
|
};
|
|
53
45
|
}
|
|
54
46
|
|
|
@@ -107,11 +99,11 @@ class RemoteData {
|
|
|
107
99
|
*/
|
|
108
100
|
static createSelectors(selectRoot) {
|
|
109
101
|
return {
|
|
110
|
-
isInitial: createSelector(selectRoot, state => state.status ===
|
|
111
|
-
isFetching: createSelector(selectRoot, state => state.status ===
|
|
112
|
-
isSuccess: createSelector(selectRoot, state => state.status ===
|
|
113
|
-
isFailed: createSelector(selectRoot, state => state.status ===
|
|
114
|
-
wasFetched: createSelector(selectRoot, state => (state.fetchCount ?? 0) > 0)
|
|
102
|
+
isInitial: (0, _toolkit.createSelector)(selectRoot, state => state.status === STATUS.initial),
|
|
103
|
+
isFetching: (0, _toolkit.createSelector)(selectRoot, state => state.status === STATUS.fetching),
|
|
104
|
+
isSuccess: (0, _toolkit.createSelector)(selectRoot, state => state.status === STATUS.success),
|
|
105
|
+
isFailed: (0, _toolkit.createSelector)(selectRoot, state => state.status === STATUS.failure),
|
|
106
|
+
wasFetched: (0, _toolkit.createSelector)(selectRoot, state => (state.fetchCount ?? 0) > 0)
|
|
115
107
|
};
|
|
116
108
|
}
|
|
117
109
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-data.js","names":["
|
|
1
|
+
{"version":3,"file":"remote-data.js","names":["_toolkit","require","STATUS","exports","initial","fetching","success","failure","RemoteData","createActions","name","request","createAction","createHandlers","state","_action","status","action","data","payload","fetchCount","error","applyHandlers","actions","builder","handlers","addCase","type","createSelectors","selectRoot","isInitial","createSelector","isFetching","isSuccess","isFailed","wasFetched"],"sources":["../../../../src/utils/redux/remote-data.ts"],"sourcesContent":["/* eslint-disable jsdoc/require-jsdoc */\nimport {\n createAction,\n createSelector,\n type ActionReducerMapBuilder,\n type Draft,\n type PayloadAction,\n type PayloadActionCreator,\n} from '@reduxjs/toolkit';\n\ninterface RemoteDataActions<TData, TError = unknown, TPayload = void> {\n request: PayloadActionCreator<TPayload, string>;\n success: PayloadActionCreator<TData, string>;\n failure: 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 = {\n initial: 'initial',\n fetching: 'fetching',\n success: 'success',\n failure: 'failure',\n} as const satisfies Record<Status, Status>;\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 TPayload = void,\n >() {\n // ВАЖНО: не используем возможности immer здесь чтобы набор можно было использовать без immer.\n return {\n request(\n state: S | Draft<S>,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _action: PayloadAction<TPayload>,\n ): S | Draft<S> {\n return {\n ...state,\n status: STATUS.fetching,\n };\n },\n\n success(state: S | Draft<S>, action: PayloadAction<TData>): S | 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 | Draft<S>, action: PayloadAction<TError>): S | 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, S extends RemoteDataState<TData, TError>, TPayload>(\n actions: RemoteDataActions<TData, TError, TPayload>,\n builder: Pick<ActionReducerMapBuilder<S>, 'addCase'>,\n ): void {\n const handlers = RemoteData.createHandlers<TData, TError, S, TPayload>();\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 === STATUS.initial),\n isFetching: createSelector(selectRoot, state => state.status === STATUS.fetching),\n isSuccess: createSelector(selectRoot, state => state.status === STATUS.success),\n isFailed: createSelector(selectRoot, state => state.status === STATUS.failure),\n wasFetched: createSelector(selectRoot, state => (state.fetchCount ?? 0) > 0),\n } as const;\n }\n}\n"],"mappings":";;;;;;AACA,IAAAA,QAAA,GAAAC,OAAA;AADA;;AAgBA;AACA;AACA;;AAGA;AACA;AACA;;AAeA;AACA;AACA;AACO,MAAMC,MAAM,GAAAC,OAAA,CAAAD,MAAA,GAAG;EACpBE,OAAO,EAAE,SAAS;EAClBC,QAAQ,EAAE,UAAU;EACpBC,OAAO,EAAE,SAAS;EAClBC,OAAO,EAAE;AACX,CAA2C;;AAE3C;AACO,MAAeC,UAAU,CAAC;EAC/B,WAAWN,MAAMA,CAAA,EAAG;IAClB,OAAOA,MAAM;EACf;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOO,aAAaA,CAClBC,IAAY,EACgC;IAC5C,OAAO;MACLC,OAAO,EAAE,IAAAC,qBAAY,EAAW,GAAGF,IAAI,UAAU,CAAC;MAClDJ,OAAO,EAAE,IAAAM,qBAAY,EAAQ,GAAGF,IAAI,UAAU,CAAC;MAC/CH,OAAO,EAAE,IAAAK,qBAAY,EAAS,GAAGF,IAAI,UAAU;IACjD,CAAC;EACH;;EAEA;AACF;AACA;AACA;EACE,OAAOG,cAAcA,CAAA,EAKjB;IACF;IACA,OAAO;MACLF,OAAOA,CACLG,KAAmB;MACnB;MACAC,OAAgC,EAClB;QACd,OAAO;UACL,GAAGD,KAAK;UACRE,MAAM,EAAEd,MAAM,CAACG;QACjB,CAAC;MACH,CAAC;MAEDC,OAAOA,CAACQ,KAAmB,EAAEG,MAA4B,EAAgB;QACvE,OAAO;UACL,GAAGH,KAAK;UACRI,IAAI,EAAED,MAAM,CAACE,OAAO;UACpBH,MAAM,EAAEd,MAAM,CAACI,OAAO;UACtBc,UAAU,EAAE,CAACN,KAAK,CAACM,UAAU,IAAI,CAAC,IAAI;QACxC,CAAC;MACH,CAAC;MAEDb,OAAOA,CAACO,KAAmB,EAAEG,MAA6B,EAAgB;QACxE,OAAO;UACL,GAAGH,KAAK;UACRO,KAAK,EAAEJ,MAAM,CAACE,OAAO;UACrBH,MAAM,EAAEd,MAAM,CAACK,OAAO;UACtBa,UAAU,EAAE,CAACN,KAAK,CAACM,UAAU,IAAI,CAAC,IAAI;QACxC,CAAC;MACH;IACF,CAAC;EACH;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOE,aAAaA,CAClBC,OAAmD,EACnDC,OAAoD,EAC9C;IACN,MAAMC,QAAQ,GAAGjB,UAAU,CAACK,cAAc,CAA6B,CAAC;;IAExE;IACAW,OAAO,CAACE,OAAO,CAACH,OAAO,CAACZ,OAAO,CAACgB,IAAI,EAAEF,QAAQ,CAACd,OAAO,CAAC;IACvDa,OAAO,CAACE,OAAO,CAACH,OAAO,CAACjB,OAAO,CAACqB,IAAI,EAAEF,QAAQ,CAACnB,OAAO,CAAC;IACvDkB,OAAO,CAACE,OAAO,CAACH,OAAO,CAAChB,OAAO,CAACoB,IAAI,EAAEF,QAAQ,CAAClB,OAAO,CAAC;EACzD;;EAEA;AACF;AACA;AACA;AACA;EACE,OAAOqB,eAAeA,CACpBC,UAA0B,EAC1B;IACA,OAAO;MACLC,SAAS,EAAE,IAAAC,uBAAc,EAACF,UAAU,EAAEf,KAAK,IAAIA,KAAK,CAACE,MAAM,KAAKd,MAAM,CAACE,OAAO,CAAC;MAC/E4B,UAAU,EAAE,IAAAD,uBAAc,EAACF,UAAU,EAAEf,KAAK,IAAIA,KAAK,CAACE,MAAM,KAAKd,MAAM,CAACG,QAAQ,CAAC;MACjF4B,SAAS,EAAE,IAAAF,uBAAc,EAACF,UAAU,EAAEf,KAAK,IAAIA,KAAK,CAACE,MAAM,KAAKd,MAAM,CAACI,OAAO,CAAC;MAC/E4B,QAAQ,EAAE,IAAAH,uBAAc,EAACF,UAAU,EAAEf,KAAK,IAAIA,KAAK,CAACE,MAAM,KAAKd,MAAM,CAACK,OAAO,CAAC;MAC9E4B,UAAU,EAAE,IAAAJ,uBAAc,EAACF,UAAU,EAAEf,KAAK,IAAI,CAACA,KAAK,CAACM,UAAU,IAAI,CAAC,IAAI,CAAC;IAC7E,CAAC;EACH;AACF;AAACjB,OAAA,CAAAK,UAAA,GAAAA,UAAA","ignoreList":[]}
|
|
@@ -4,19 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.createCurriedSelector = void 0;
|
|
7
|
-
var
|
|
8
|
-
var _reactRedux = require("react-redux");
|
|
9
|
-
/**
|
|
10
|
-
* Опции для включения внутреннего кэша,
|
|
11
|
-
* чтобы селектор с параметрами запоминал вычисления при смене значения параметра.
|
|
12
|
-
*/
|
|
13
|
-
const MEMOIZE_OPTIONS = {
|
|
14
|
-
equalityCheck: _reactRedux.shallowEqual,
|
|
15
|
-
resultEqualityCheck: _reactRedux.shallowEqual,
|
|
16
|
-
maxSize: 10
|
|
17
|
-
};
|
|
18
|
-
const createCashedSelector = (0, _reselect.createSelectorCreator)(_reselect.defaultMemoize, MEMOIZE_OPTIONS);
|
|
19
|
-
|
|
7
|
+
var _toolkit = require("@reduxjs/toolkit");
|
|
20
8
|
/**
|
|
21
9
|
* Возвращает каррированную версию селектора.
|
|
22
10
|
* По мотивам https://reselect.js.org/FAQ#how-can-i-make-a-curried-selector.
|
|
@@ -36,6 +24,6 @@ const currySelector = selector => {
|
|
|
36
24
|
* По мотивам https://reselect.js.org/FAQ#how-can-i-make-a-curried-selector.
|
|
37
25
|
* @inheritdoc
|
|
38
26
|
*/
|
|
39
|
-
const createCurriedSelector = (...args) => currySelector(
|
|
27
|
+
const createCurriedSelector = (...args) => currySelector((0, _toolkit.createSelector)(...args));
|
|
40
28
|
exports.createCurriedSelector = createCurriedSelector;
|
|
41
29
|
//# sourceMappingURL=create-curried-selector.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-curried-selector.js","names":["
|
|
1
|
+
{"version":3,"file":"create-curried-selector.js","names":["_toolkit","require","currySelector","selector","curriedSelector","args","state","Object","assign","uncurried","createCurriedSelector","createSelector","exports"],"sources":["../../../../src/utils/selectors/create-curried-selector.ts"],"sourcesContent":["import { createSelector, Selector } from '@reduxjs/toolkit';\n\ntype CurriedSelectorFrom<F> = F extends (state: infer State, ...args: infer Params) => infer R\n ? ((...args: Params) => (state: State) => R) & F & { uncurried: F }\n : never;\n\n/**\n * Возвращает каррированную версию селектора.\n * По мотивам https://reselect.js.org/FAQ#how-can-i-make-a-curried-selector.\n * @param selector Исходный селектор.\n * @return Каррированный селектор.\n */\nconst currySelector = <S extends (...args: any[]) => any>(selector: S) => {\n /** @inheritdoc */\n const curriedSelector =\n (...args: any[]) =>\n (state: any) =>\n selector(state, ...args);\n return Object.assign(curriedSelector, selector, { uncurried: selector });\n};\n\n/**\n * Тот же createSelector, но возвращает каррированный селектор с кэшем параметров.\n * По мотивам https://reselect.js.org/FAQ#how-can-i-make-a-curried-selector.\n * @inheritdoc\n */\nexport const createCurriedSelector = <InputSelectors extends Selector[], Result>(\n ...args: Parameters<typeof createSelector<InputSelectors, Result>>\n): CurriedSelectorFrom<ReturnType<typeof createSelector<InputSelectors, Result>>> =>\n currySelector(createSelector(...args));\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAMA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,aAAa,GAAuCC,QAAW,IAAK;EACxE;EACA,MAAMC,eAAe,GACnBA,CAAC,GAAGC,IAAW,KACdC,KAAU,IACTH,QAAQ,CAACG,KAAK,EAAE,GAAGD,IAAI,CAAC;EAC5B,OAAOE,MAAM,CAACC,MAAM,CAACJ,eAAe,EAAED,QAAQ,EAAE;IAAEM,SAAS,EAAEN;EAAS,CAAC,CAAC;AAC1E,CAAC;;AAED;AACA;AACA;AACA;AACA;AACO,MAAMO,qBAAqB,GAAGA,CACnC,GAAGL,IAA+D,KAElEH,aAAa,CAAC,IAAAS,uBAAc,EAAC,GAAGN,IAAI,CAAC,CAAC;AAACO,OAAA,CAAAF,qBAAA,GAAAA,qBAAA","ignoreList":[]}
|
package/dist/esm/package.json
CHANGED
|
@@ -3,36 +3,32 @@
|
|
|
3
3
|
"name": "@sima-land/isomorph",
|
|
4
4
|
"version": "0.0.0",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@humanwhocodes/env": "4.0.1",
|
|
6
|
+
"@humanwhocodes/env": "^4.0.1",
|
|
7
7
|
"@krutoo/fetch-tools": "^0.1.1",
|
|
8
8
|
"@opentelemetry/api": "^1.9.1",
|
|
9
|
-
"@opentelemetry/exporter-
|
|
10
|
-
"@opentelemetry/
|
|
11
|
-
"@opentelemetry/
|
|
12
|
-
"@opentelemetry/sdk-
|
|
13
|
-
"@opentelemetry/
|
|
14
|
-
"@
|
|
15
|
-
"@
|
|
16
|
-
"@sentry/browser": "^10.39.0",
|
|
17
|
-
"@sentry/node": "^10.39.0",
|
|
9
|
+
"@opentelemetry/exporter-trace-otlp-grpc": "^0.221.0",
|
|
10
|
+
"@opentelemetry/resources": "^2.10.0",
|
|
11
|
+
"@opentelemetry/sdk-trace-base": "^2.10.0",
|
|
12
|
+
"@opentelemetry/sdk-trace-node": "^2.10.0",
|
|
13
|
+
"@opentelemetry/semantic-conventions": "^1.43.0",
|
|
14
|
+
"@sentry/browser": "10.47.0",
|
|
15
|
+
"@sentry/node": "10.47.0",
|
|
18
16
|
"accepts": "^1.3.8",
|
|
19
|
-
"dotenv": "^17.
|
|
17
|
+
"dotenv": "^17.4.2",
|
|
20
18
|
"express": "^5.2.1",
|
|
21
|
-
"http-proxy-middleware": "^
|
|
19
|
+
"http-proxy-middleware": "^4.2.0",
|
|
22
20
|
"jsesc": "^3.1.0",
|
|
23
21
|
"middleware-axios": "^3.0.0",
|
|
24
22
|
"pino": "^10.3.1",
|
|
25
23
|
"pino-pretty": "^13.1.3",
|
|
26
24
|
"prom-client": "^15.1.3",
|
|
27
|
-
"
|
|
28
|
-
"webpack": "^5.105.2"
|
|
25
|
+
"webpack": "^5.108.4"
|
|
29
26
|
},
|
|
30
27
|
"peerDependencies": {
|
|
31
|
-
"@reduxjs/toolkit": "
|
|
32
|
-
"axios": "1.
|
|
33
|
-
"react": "^18.0",
|
|
34
|
-
"react-dom": "^18.0",
|
|
35
|
-
"
|
|
36
|
-
"redux-saga": "1.5.0"
|
|
28
|
+
"@reduxjs/toolkit": "^2.0.0",
|
|
29
|
+
"axios": "^1.18.1",
|
|
30
|
+
"react": "^18.0 || ^19.0",
|
|
31
|
+
"react-dom": "^18.0 || ^19.0",
|
|
32
|
+
"redux-saga": "^1.5.0"
|
|
37
33
|
}
|
|
38
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../../../src/preset/isomorphic/types.ts"],"sourcesContent":["import type { Provider, Token } from '../../di';\n\nexport interface PresetTuner {\n (tools: { override: <T>(token: Token<T>, provider: Provider<T>) => void }): void;\n}\n\nexport type KnownHttpApiKey =\n
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../../../src/preset/isomorphic/types.ts"],"sourcesContent":["import type { Provider, Token } from '../../di';\n\nexport interface PresetTuner {\n (tools: { override: <T>(token: Token<T>, provider: Provider<T>) => void }): void;\n}\n\nexport type KnownHttpApiKey =\n 'ilium' | 'simaV3' | 'simaV4' | 'simaV6' | 'chponkiV2' | 'shuttle' | 'fileDispatcher';\n\n/**\n * Строгая версия Map без возможности добавлять/удалять.\n */\nexport interface StrictMap<Key extends string> {\n /** Возвращает значение по ключу. */\n get(key: Key): string;\n}\n\n/**\n * Внутренний интерфейс для хранения ссылок на ассеты.\n */\nexport interface PageAssets {\n js: string;\n css: string;\n criticalJs?: string;\n criticalCss?: string;\n}\n\n/**\n * Структура ответа от frontend-микросервиса в формате JSON по соглашению.\n */\nexport interface ConventionalJson {\n markup: string;\n bundle_js: string;\n bundle_css: string;\n critical_js?: string;\n critical_css?: string;\n meta?: any;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["KnownToken","provideAxiosFactory","provideFetch","provideBaseConfig","createPreset","healthCheck","provideConfigSource","provideExpressErrorMiddleware","provideExpressFactory","provideExpressLogMiddleware","provideExpressMetricsMiddleware","provideExpressRequestMiddleware","provideExpressTracingMiddleware","provideKnownHttpApiHosts","provideLogger","provideMetricsExpressApp","provideTracer","provideSpanExporter","provideSsrBridgeServerSide","provideTracingProvider","provideTracingResource","provideMainExpressApp","providePublicEnvs","PresetNode","customize","preset","set","Config","source","base","publicEnvs","logger","Tracing","tracer","spanExporter","provider","resource","Metrics","expressApp","Http","fetch","Fetch","middleware","Serve","Proxy","config","Axios","factory","Express","app","pageRoutes","serviceRoutes","resolve","Handlers","Middleware","request","log","metrics","tracing","endMiddleware","error","Api","knownHosts","SsrBridge","serverSide","override","bind","getClientIp","getForwardedHeaders","getPageResponseFormat","HandlerProvider"],"sources":["../../../../src/preset/node/index.ts"],"sourcesContent":["import { KnownToken } from '../../tokens';\nimport { provideAxiosFactory } from '../isomorphic/providers/axios-factory';\nimport { provideFetch } from '../isomorphic/providers/fetch';\nimport { provideBaseConfig } from '../isomorphic/providers/base-config';\nimport { Preset, createPreset } from '../../di';\nimport { PresetTuner } from '../isomorphic/types';\nimport { healthCheck } from '../../utils/express/handler/health-check';\nimport { provideConfigSource } from './providers/config-source';\nimport { provideExpressErrorMiddleware } from './providers/express-error-middleware';\nimport { provideExpressFactory } from './providers/express-factory';\nimport { provideExpressLogMiddleware } from './providers/express-log-middleware';\nimport { provideExpressMetricsMiddleware } from './providers/express-metrics-middleware';\nimport { provideExpressRequestMiddleware } from './providers/express-request-middleware';\nimport { provideExpressTracingMiddleware } from './providers/express-tracing-middleware';\nimport { provideKnownHttpApiHosts } from '../server/providers/known-http-api-hosts';\nimport { provideLogger } from './providers/logger';\nimport { provideMetricsExpressApp } from './providers/metrics-express-app';\nimport { provideTracer } from './providers/telemetry-tracer';\nimport { provideSpanExporter } from './providers/telemetry-tracer-span-exporter';\nimport { provideSsrBridgeServerSide } from '../server/providers/ssr-bridge-server-side';\nimport { provideTracingProvider } from './providers/telemetry-tracer-provider';\nimport { provideTracingResource } from './providers/telemetry-tracer-resource';\nimport { provideMainExpressApp } from './providers/main-express-app';\nimport { ExpressRouteList } from './types';\nimport { providePublicEnvs } from './providers/public-envs';\n\n/**\n * Возвращает preset с зависимостями по умолчанию для frontend-микросервисов на Node.js.\n * @param customize Получит функцию с помощью которой можно переопределить предустановленные провайдеры.\n * @return Preset.\n */\nexport function PresetNode(customize?: PresetTuner): Preset {\n // ВАЖНО: используем .set() вместо аргумента defaults функции createPreset из-за скорости\n const preset = createPreset();\n\n // config\n preset.set(KnownToken.Config.source, provideConfigSource);\n preset.set(KnownToken.Config.base, provideBaseConfig);\n preset.set(KnownToken.Config.publicEnvs, providePublicEnvs);\n\n // log\n preset.set(KnownToken.logger, provideLogger);\n\n // tracing\n preset.set(KnownToken.Tracing.tracer, provideTracer);\n preset.set(KnownToken.Tracing.spanExporter, provideSpanExporter);\n preset.set(KnownToken.Tracing.provider, provideTracingProvider);\n preset.set(KnownToken.Tracing.resource, provideTracingResource);\n\n // metrics\n preset.set(KnownToken.Metrics.expressApp, provideMetricsExpressApp);\n\n // fetch\n preset.set(KnownToken.Http.fetch, provideFetch);\n preset.set(KnownToken.Http.Fetch.middleware, () => []);\n preset.set(KnownToken.Http.Serve.Proxy.config, () => null);\n\n // axios\n preset.set(KnownToken.Axios.factory, provideAxiosFactory);\n preset.set(KnownToken.Axios.middleware, () => []);\n\n // express\n preset.set(KnownToken.Express.app, provideMainExpressApp);\n preset.set(KnownToken.Express.pageRoutes, () => []);\n preset.set(\n KnownToken.Express.serviceRoutes,\n (resolve): ExpressRouteList => [\n ['/healthcheck', resolve(KnownToken.Express.Handlers.healthCheck)],\n ],\n );\n preset.set(KnownToken.Express.middleware, resolve => [\n resolve(KnownToken.Express.Middleware.request),\n resolve(KnownToken.Express.Middleware.log),\n resolve(KnownToken.Express.Middleware.metrics),\n resolve(KnownToken.Express.Middleware.tracing),\n ]);\n preset.set(KnownToken.Express.endMiddleware, resolve => [\n resolve(KnownToken.Express.Middleware.error),\n ]);\n preset.set(KnownToken.Express.factory, provideExpressFactory);\n preset.set(KnownToken.Express.Handlers.healthCheck, healthCheck);\n preset.set(KnownToken.Express.Middleware.request, provideExpressRequestMiddleware);\n preset.set(KnownToken.Express.Middleware.log, provideExpressLogMiddleware);\n preset.set(KnownToken.Express.Middleware.metrics, provideExpressMetricsMiddleware);\n preset.set(KnownToken.Express.Middleware.tracing, provideExpressTracingMiddleware);\n preset.set(KnownToken.Express.Middleware.error, provideExpressErrorMiddleware);\n\n // http api\n preset.set(KnownToken.Http.Api.knownHosts, provideKnownHttpApiHosts);\n\n // ssr bridge\n preset.set(KnownToken.SsrBridge.serverSide, provideSsrBridgeServerSide);\n\n if (customize) {\n customize({ override: preset.set.bind(preset) });\n }\n\n return preset;\n}\n\nexport type { ExpressHandlerContext, ExpressRouteList } from './types';\n\n// доступные утилиты\nexport { getClientIp } from './utils/get-client-ip';\nexport { getForwardedHeaders } from './utils/get-forwarded-headers';\nexport { getPageResponseFormat } from './utils/get-page-response-format';\nexport { HandlerProvider } from './utils/handler-provider';\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["KnownToken","provideAxiosFactory","provideFetch","provideBaseConfig","createPreset","healthCheck","provideConfigSource","provideExpressErrorMiddleware","provideExpressFactory","provideExpressLogMiddleware","provideExpressMetricsMiddleware","provideExpressRequestMiddleware","provideExpressTracingMiddleware","provideKnownHttpApiHosts","provideLogger","provideMetricsExpressApp","provideTracer","provideSpanExporter","provideSsrBridgeServerSide","provideTracingProvider","provideTracingResource","provideMainExpressApp","providePublicEnvs","PresetNode","customize","preset","set","Config","source","base","publicEnvs","logger","Tracing","tracer","spanExporter","provider","resource","Metrics","expressApp","Http","fetch","Fetch","middleware","Serve","Proxy","config","Axios","factory","Express","app","pageRoutes","serviceRoutes","resolve","Handlers","Middleware","request","log","metrics","tracing","endMiddleware","error","Api","knownHosts","SsrBridge","serverSide","override","bind","getClientIp","getForwardedHeaders","getPageResponseFormat","HandlerProvider"],"sources":["../../../../src/preset/node/index.ts"],"sourcesContent":["import { KnownToken } from '../../tokens';\nimport { provideAxiosFactory } from '../isomorphic/providers/axios-factory';\nimport { provideFetch } from '../isomorphic/providers/fetch';\nimport { provideBaseConfig } from '../isomorphic/providers/base-config';\nimport { Preset, createPreset } from '../../di';\nimport { PresetTuner } from '../isomorphic/types';\nimport { healthCheck } from '../../utils/express/handler/health-check';\nimport { provideConfigSource } from './providers/config-source';\nimport { provideExpressErrorMiddleware } from './providers/express-error-middleware';\nimport { provideExpressFactory } from './providers/express-factory';\nimport { provideExpressLogMiddleware } from './providers/express-log-middleware';\nimport { provideExpressMetricsMiddleware } from './providers/express-metrics-middleware';\nimport { provideExpressRequestMiddleware } from './providers/express-request-middleware';\nimport { provideExpressTracingMiddleware } from './providers/express-tracing-middleware';\nimport { provideKnownHttpApiHosts } from '../server/providers/known-http-api-hosts';\nimport { provideLogger } from './providers/logger';\nimport { provideMetricsExpressApp } from './providers/metrics-express-app';\nimport { provideTracer } from './providers/telemetry-tracer';\nimport { provideSpanExporter } from './providers/telemetry-tracer-span-exporter';\nimport { provideSsrBridgeServerSide } from '../server/providers/ssr-bridge-server-side';\nimport { provideTracingProvider } from './providers/telemetry-tracer-provider';\nimport { provideTracingResource } from './providers/telemetry-tracer-resource';\nimport { provideMainExpressApp } from './providers/main-express-app';\nimport { ExpressRouteList } from './types';\nimport { providePublicEnvs } from './providers/public-envs';\n\n/**\n * Возвращает preset с зависимостями по умолчанию для frontend-микросервисов на Node.js.\n * @param customize Получит функцию с помощью которой можно переопределить предустановленные провайдеры.\n * @return Preset.\n */\nexport function PresetNode(customize?: PresetTuner): Preset {\n // ВАЖНО: используем .set() вместо аргумента defaults функции createPreset из-за скорости\n const preset = createPreset();\n\n // config\n preset.set(KnownToken.Config.source, provideConfigSource);\n preset.set(KnownToken.Config.base, provideBaseConfig);\n preset.set(KnownToken.Config.publicEnvs, providePublicEnvs);\n\n // log\n preset.set(KnownToken.logger, provideLogger);\n\n // tracing\n preset.set(KnownToken.Tracing.tracer, provideTracer);\n preset.set(KnownToken.Tracing.spanExporter, provideSpanExporter);\n preset.set(KnownToken.Tracing.provider, provideTracingProvider);\n preset.set(KnownToken.Tracing.resource, provideTracingResource);\n\n // metrics\n preset.set(KnownToken.Metrics.expressApp, provideMetricsExpressApp);\n\n // fetch\n preset.set(KnownToken.Http.fetch, provideFetch);\n preset.set(KnownToken.Http.Fetch.middleware, () => []);\n preset.set(KnownToken.Http.Serve.Proxy.config, () => null);\n\n // axios\n preset.set(KnownToken.Axios.factory, provideAxiosFactory);\n preset.set(KnownToken.Axios.middleware, () => []);\n\n // express\n preset.set(KnownToken.Express.app, provideMainExpressApp);\n preset.set(KnownToken.Express.pageRoutes, () => []);\n preset.set(KnownToken.Express.serviceRoutes, (resolve): ExpressRouteList => [\n ['/healthcheck', resolve(KnownToken.Express.Handlers.healthCheck)],\n ]);\n preset.set(KnownToken.Express.middleware, resolve => [\n resolve(KnownToken.Express.Middleware.request),\n resolve(KnownToken.Express.Middleware.log),\n resolve(KnownToken.Express.Middleware.metrics),\n resolve(KnownToken.Express.Middleware.tracing),\n ]);\n preset.set(KnownToken.Express.endMiddleware, resolve => [\n resolve(KnownToken.Express.Middleware.error),\n ]);\n preset.set(KnownToken.Express.factory, provideExpressFactory);\n preset.set(KnownToken.Express.Handlers.healthCheck, healthCheck);\n preset.set(KnownToken.Express.Middleware.request, provideExpressRequestMiddleware);\n preset.set(KnownToken.Express.Middleware.log, provideExpressLogMiddleware);\n preset.set(KnownToken.Express.Middleware.metrics, provideExpressMetricsMiddleware);\n preset.set(KnownToken.Express.Middleware.tracing, provideExpressTracingMiddleware);\n preset.set(KnownToken.Express.Middleware.error, provideExpressErrorMiddleware);\n\n // http api\n preset.set(KnownToken.Http.Api.knownHosts, provideKnownHttpApiHosts);\n\n // ssr bridge\n preset.set(KnownToken.SsrBridge.serverSide, provideSsrBridgeServerSide);\n\n if (customize) {\n customize({ override: preset.set.bind(preset) });\n }\n\n return preset;\n}\n\nexport type { ExpressHandlerContext, ExpressRouteList } from './types';\n\n// доступные утилиты\nexport { getClientIp } from './utils/get-client-ip';\nexport { getForwardedHeaders } from './utils/get-forwarded-headers';\nexport { getPageResponseFormat } from './utils/get-page-response-format';\nexport { HandlerProvider } from './utils/handler-provider';\n"],"mappings":"AAAA,SAASA,UAAU,QAAQ,iBAAc;AACzC,SAASC,mBAAmB,QAAQ,0CAAuC;AAC3E,SAASC,YAAY,QAAQ,kCAA+B;AAC5D,SAASC,iBAAiB,QAAQ,wCAAqC;AACvE,SAAiBC,YAAY,QAAQ,qBAAU;AAE/C,SAASC,WAAW,QAAQ,6CAA0C;AACtE,SAASC,mBAAmB,QAAQ,8BAA2B;AAC/D,SAASC,6BAA6B,QAAQ,yCAAsC;AACpF,SAASC,qBAAqB,QAAQ,gCAA6B;AACnE,SAASC,2BAA2B,QAAQ,uCAAoC;AAChF,SAASC,+BAA+B,QAAQ,2CAAwC;AACxF,SAASC,+BAA+B,QAAQ,2CAAwC;AACxF,SAASC,+BAA+B,QAAQ,2CAAwC;AACxF,SAASC,wBAAwB,QAAQ,6CAA0C;AACnF,SAASC,aAAa,QAAQ,uBAAoB;AAClD,SAASC,wBAAwB,QAAQ,oCAAiC;AAC1E,SAASC,aAAa,QAAQ,iCAA8B;AAC5D,SAASC,mBAAmB,QAAQ,+CAA4C;AAChF,SAASC,0BAA0B,QAAQ,+CAA4C;AACvF,SAASC,sBAAsB,QAAQ,0CAAuC;AAC9E,SAASC,sBAAsB,QAAQ,0CAAuC;AAC9E,SAASC,qBAAqB,QAAQ,iCAA8B;AAEpE,SAASC,iBAAiB,QAAQ,4BAAyB;;AAE3D;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,UAAUA,CAACC,SAAuB,EAAU;EAC1D;EACA,MAAMC,MAAM,GAAGrB,YAAY,CAAC,CAAC;;EAE7B;EACAqB,MAAM,CAACC,GAAG,CAAC1B,UAAU,CAAC2B,MAAM,CAACC,MAAM,EAAEtB,mBAAmB,CAAC;EACzDmB,MAAM,CAACC,GAAG,CAAC1B,UAAU,CAAC2B,MAAM,CAACE,IAAI,EAAE1B,iBAAiB,CAAC;EACrDsB,MAAM,CAACC,GAAG,CAAC1B,UAAU,CAAC2B,MAAM,CAACG,UAAU,EAAER,iBAAiB,CAAC;;EAE3D;EACAG,MAAM,CAACC,GAAG,CAAC1B,UAAU,CAAC+B,MAAM,EAAEjB,aAAa,CAAC;;EAE5C;EACAW,MAAM,CAACC,GAAG,CAAC1B,UAAU,CAACgC,OAAO,CAACC,MAAM,EAAEjB,aAAa,CAAC;EACpDS,MAAM,CAACC,GAAG,CAAC1B,UAAU,CAACgC,OAAO,CAACE,YAAY,EAAEjB,mBAAmB,CAAC;EAChEQ,MAAM,CAACC,GAAG,CAAC1B,UAAU,CAACgC,OAAO,CAACG,QAAQ,EAAEhB,sBAAsB,CAAC;EAC/DM,MAAM,CAACC,GAAG,CAAC1B,UAAU,CAACgC,OAAO,CAACI,QAAQ,EAAEhB,sBAAsB,CAAC;;EAE/D;EACAK,MAAM,CAACC,GAAG,CAAC1B,UAAU,CAACqC,OAAO,CAACC,UAAU,EAAEvB,wBAAwB,CAAC;;EAEnE;EACAU,MAAM,CAACC,GAAG,CAAC1B,UAAU,CAACuC,IAAI,CAACC,KAAK,EAAEtC,YAAY,CAAC;EAC/CuB,MAAM,CAACC,GAAG,CAAC1B,UAAU,CAACuC,IAAI,CAACE,KAAK,CAACC,UAAU,EAAE,MAAM,EAAE,CAAC;EACtDjB,MAAM,CAACC,GAAG,CAAC1B,UAAU,CAACuC,IAAI,CAACI,KAAK,CAACC,KAAK,CAACC,MAAM,EAAE,MAAM,IAAI,CAAC;;EAE1D;EACApB,MAAM,CAACC,GAAG,CAAC1B,UAAU,CAAC8C,KAAK,CAACC,OAAO,EAAE9C,mBAAmB,CAAC;EACzDwB,MAAM,CAACC,GAAG,CAAC1B,UAAU,CAAC8C,KAAK,CAACJ,UAAU,EAAE,MAAM,EAAE,CAAC;;EAEjD;EACAjB,MAAM,CAACC,GAAG,CAAC1B,UAAU,CAACgD,OAAO,CAACC,GAAG,EAAE5B,qBAAqB,CAAC;EACzDI,MAAM,CAACC,GAAG,CAAC1B,UAAU,CAACgD,OAAO,CAACE,UAAU,EAAE,MAAM,EAAE,CAAC;EACnDzB,MAAM,CAACC,GAAG,CAAC1B,UAAU,CAACgD,OAAO,CAACG,aAAa,EAAGC,OAAO,IAAuB,CAC1E,CAAC,cAAc,EAAEA,OAAO,CAACpD,UAAU,CAACgD,OAAO,CAACK,QAAQ,CAAChD,WAAW,CAAC,CAAC,CACnE,CAAC;EACFoB,MAAM,CAACC,GAAG,CAAC1B,UAAU,CAACgD,OAAO,CAACN,UAAU,EAAEU,OAAO,IAAI,CACnDA,OAAO,CAACpD,UAAU,CAACgD,OAAO,CAACM,UAAU,CAACC,OAAO,CAAC,EAC9CH,OAAO,CAACpD,UAAU,CAACgD,OAAO,CAACM,UAAU,CAACE,GAAG,CAAC,EAC1CJ,OAAO,CAACpD,UAAU,CAACgD,OAAO,CAACM,UAAU,CAACG,OAAO,CAAC,EAC9CL,OAAO,CAACpD,UAAU,CAACgD,OAAO,CAACM,UAAU,CAACI,OAAO,CAAC,CAC/C,CAAC;EACFjC,MAAM,CAACC,GAAG,CAAC1B,UAAU,CAACgD,OAAO,CAACW,aAAa,EAAEP,OAAO,IAAI,CACtDA,OAAO,CAACpD,UAAU,CAACgD,OAAO,CAACM,UAAU,CAACM,KAAK,CAAC,CAC7C,CAAC;EACFnC,MAAM,CAACC,GAAG,CAAC1B,UAAU,CAACgD,OAAO,CAACD,OAAO,EAAEvC,qBAAqB,CAAC;EAC7DiB,MAAM,CAACC,GAAG,CAAC1B,UAAU,CAACgD,OAAO,CAACK,QAAQ,CAAChD,WAAW,EAAEA,WAAW,CAAC;EAChEoB,MAAM,CAACC,GAAG,CAAC1B,UAAU,CAACgD,OAAO,CAACM,UAAU,CAACC,OAAO,EAAE5C,+BAA+B,CAAC;EAClFc,MAAM,CAACC,GAAG,CAAC1B,UAAU,CAACgD,OAAO,CAACM,UAAU,CAACE,GAAG,EAAE/C,2BAA2B,CAAC;EAC1EgB,MAAM,CAACC,GAAG,CAAC1B,UAAU,CAACgD,OAAO,CAACM,UAAU,CAACG,OAAO,EAAE/C,+BAA+B,CAAC;EAClFe,MAAM,CAACC,GAAG,CAAC1B,UAAU,CAACgD,OAAO,CAACM,UAAU,CAACI,OAAO,EAAE9C,+BAA+B,CAAC;EAClFa,MAAM,CAACC,GAAG,CAAC1B,UAAU,CAACgD,OAAO,CAACM,UAAU,CAACM,KAAK,EAAErD,6BAA6B,CAAC;;EAE9E;EACAkB,MAAM,CAACC,GAAG,CAAC1B,UAAU,CAACuC,IAAI,CAACsB,GAAG,CAACC,UAAU,EAAEjD,wBAAwB,CAAC;;EAEpE;EACAY,MAAM,CAACC,GAAG,CAAC1B,UAAU,CAAC+D,SAAS,CAACC,UAAU,EAAE9C,0BAA0B,CAAC;EAEvE,IAAIM,SAAS,EAAE;IACbA,SAAS,CAAC;MAAEyC,QAAQ,EAAExC,MAAM,CAACC,GAAG,CAACwC,IAAI,CAACzC,MAAM;IAAE,CAAC,CAAC;EAClD;EAEA,OAAOA,MAAM;AACf;AAIA;AACA,SAAS0C,WAAW,QAAQ,0BAAuB;AACnD,SAASC,mBAAmB,QAAQ,kCAA+B;AACnE,SAASC,qBAAqB,QAAQ,qCAAkC;AACxE,SAASC,eAAe,QAAQ,6BAA0B","ignoreList":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { SpanStatusCode } from '@opentelemetry/api';
|
|
2
|
-
import { ATTR_HTTP_REQUEST_METHOD, ATTR_URL_FULL } from '@opentelemetry/semantic-conventions/incubating';
|
|
2
|
+
import { ATTR_HTTP_REQUEST_METHOD, ATTR_HTTP_RESPONSE_STATUS_CODE, ATTR_URL_FULL } from '@opentelemetry/semantic-conventions/incubating';
|
|
3
3
|
import { displayUrl } from "../../isomorphic/utils/display-url.js";
|
|
4
|
-
import { getSemanticHeaders } from "./telemetry.js";
|
|
4
|
+
import { getSemanticHeaders, getUrlQueryAttributes } from "./telemetry.js";
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* Возвращает новый middleware для трассировки исходящих запросов.
|
|
@@ -13,13 +13,15 @@ export function axiosTracingMiddleware(tracer, rootContext) {
|
|
|
13
13
|
return async function trace(config, next, defaults) {
|
|
14
14
|
const {
|
|
15
15
|
method,
|
|
16
|
-
urlStr
|
|
16
|
+
urlStr,
|
|
17
|
+
params
|
|
17
18
|
} = getRequestInfo(config, defaults);
|
|
18
19
|
const url = new URL(urlStr);
|
|
19
20
|
const span = tracer.startSpan(`axios ${method} ${url}`, undefined, rootContext);
|
|
20
21
|
span.setAttributes({
|
|
21
22
|
[ATTR_URL_FULL]: url.href,
|
|
22
23
|
[ATTR_HTTP_REQUEST_METHOD]: method,
|
|
24
|
+
...getUrlQueryAttributes(params),
|
|
23
25
|
...getSemanticHeaders({
|
|
24
26
|
// @todo непонятно как доставать заголовки из defaults потому что там на одном уровне заголовки и таблицы заголовков
|
|
25
27
|
...defaults.headers.common,
|
|
@@ -28,12 +30,18 @@ export function axiosTracingMiddleware(tracer, rootContext) {
|
|
|
28
30
|
})
|
|
29
31
|
});
|
|
30
32
|
try {
|
|
31
|
-
await next(config);
|
|
33
|
+
const response = await next(config);
|
|
34
|
+
span.setAttributes({
|
|
35
|
+
[ATTR_HTTP_RESPONSE_STATUS_CODE]: response.status
|
|
36
|
+
});
|
|
32
37
|
} catch (error) {
|
|
33
38
|
span.setStatus({
|
|
34
39
|
code: SpanStatusCode.ERROR,
|
|
35
40
|
message: 'HTTP Request failed'
|
|
36
41
|
});
|
|
42
|
+
span.setAttributes({
|
|
43
|
+
[ATTR_HTTP_RESPONSE_STATUS_CODE]: error.status
|
|
44
|
+
});
|
|
37
45
|
span.end();
|
|
38
46
|
|
|
39
47
|
// не прячем ошибку
|
|
@@ -52,9 +60,11 @@ export function axiosTracingMiddleware(tracer, rootContext) {
|
|
|
52
60
|
export function getRequestInfo(config, defaults) {
|
|
53
61
|
const method = (config.method || 'GET').toUpperCase();
|
|
54
62
|
const baseURL = config.baseURL || defaults.baseURL || '';
|
|
63
|
+
const params = config.params || new URLSearchParams();
|
|
55
64
|
return {
|
|
56
65
|
method,
|
|
57
|
-
urlStr: displayUrl(baseURL, config.url || defaults.url || '')
|
|
66
|
+
urlStr: displayUrl(baseURL, config.url || defaults.url || ''),
|
|
67
|
+
params
|
|
58
68
|
};
|
|
59
69
|
}
|
|
60
70
|
//# sourceMappingURL=axios-tracing-middleware.js.map
|