@sima-land/isomorph 11.0.0-alpha.39 → 11.0.0-alpha.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/cache/package.json +6 -1
  2. package/config/package.json +6 -1
  3. package/di/package.json +6 -1
  4. package/dist/cjs/package.json +5 -1
  5. package/dist/cjs/preset/node/handler/providers/index.js +1 -1
  6. package/dist/cjs/preset/node/handler/providers/index.js.map +1 -1
  7. package/dist/cjs/preset/node/node/utils/http-client/index.js.map +1 -1
  8. package/dist/cjs/preset/web/providers/index.js +1 -1
  9. package/dist/cjs/preset/web/providers/index.js.map +1 -1
  10. package/dist/cjs/tokens.js.map +1 -1
  11. package/dist/esm/package.json +5 -1
  12. package/dist/esm/preset/node/handler/providers/index.js +1 -1
  13. package/dist/esm/preset/node/handler/providers/index.js.map +1 -1
  14. package/dist/esm/preset/node/node/utils/http-client/index.js.map +1 -1
  15. package/dist/esm/preset/web/providers/index.js +1 -1
  16. package/dist/esm/preset/web/providers/index.js.map +1 -1
  17. package/dist/esm/tokens.js.map +1 -1
  18. package/dist/types/preset/node/node/utils/http-client/index.d.ts +1 -1
  19. package/dist/types/preset/node/node/utils/http-client/index.d.ts.map +1 -1
  20. package/dist/types/preset/web/providers/index.d.ts.map +1 -1
  21. package/dist/types/tokens.d.ts +1 -1
  22. package/dist/types/tokens.d.ts.map +1 -1
  23. package/http/package.json +6 -1
  24. package/log/package.json +6 -1
  25. package/package.json +3 -3
  26. package/preset/isomorphic/package.json +6 -1
  27. package/preset/isomorphic/providers/package.json +6 -1
  28. package/preset/isomorphic/utils/package.json +6 -1
  29. package/preset/node/handler/providers/package.json +6 -1
  30. package/preset/node/handler/utils/package.json +6 -1
  31. package/preset/node/node/providers/package.json +6 -1
  32. package/preset/node/node/utils/package.json +6 -1
  33. package/preset/node/package.json +6 -1
  34. package/preset/web/package.json +6 -1
  35. package/preset/web/providers/package.json +6 -1
  36. package/src/preset/node/handler/providers/index.tsx +1 -1
  37. package/src/preset/node/node/utils/http-client/index.ts +1 -1
  38. package/src/preset/web/providers/index.ts +1 -1
  39. package/src/tokens.ts +1 -1
  40. package/utils/axios/package.json +6 -1
  41. package/utils/express/package.json +6 -1
  42. package/utils/package.json +6 -1
  43. package/utils/react/package.json +6 -1
  44. package/utils/redux/package.json +6 -1
  45. package/utils/redux-saga/package.json +6 -1
  46. package/utils/ssr/package.json +6 -1
  47. package/utils/web/analytics/package.json +6 -1
  48. package/utils/webpack/package.json +6 -1
@@ -1 +1,6 @@
1
- {"name":"@sima-land/isomorph/cache","types":"../dist/types/cache/index.d.ts","main":"../dist/cjs/cache/index.js","module":"../dist/esm/cache/index.js"}
1
+ {
2
+ "name": "@sima-land/isomorph/cache",
3
+ "types": "../dist/types/cache/index.d.ts",
4
+ "main": "../dist/cjs/cache/index.js",
5
+ "module": "../dist/esm/cache/index.js"
6
+ }
@@ -1 +1,6 @@
1
- {"name":"@sima-land/isomorph/config","types":"../dist/types/config/index.d.ts","main":"../dist/cjs/config/index.js","module":"../dist/esm/config/index.js"}
1
+ {
2
+ "name": "@sima-land/isomorph/config",
3
+ "types": "../dist/types/config/index.d.ts",
4
+ "main": "../dist/cjs/config/index.js",
5
+ "module": "../dist/esm/config/index.js"
6
+ }
package/di/package.json CHANGED
@@ -1 +1,6 @@
1
- {"name":"@sima-land/isomorph/di","types":"../dist/types/di/index.d.ts","main":"../dist/cjs/di/index.js","module":"../dist/esm/di/index.js"}
1
+ {
2
+ "name": "@sima-land/isomorph/di",
3
+ "types": "../dist/types/di/index.d.ts",
4
+ "main": "../dist/cjs/di/index.js",
5
+ "module": "../dist/esm/di/index.js"
6
+ }
@@ -1 +1,5 @@
1
- { "type": "commonjs" }
1
+ {
2
+ "name": "@sima-land/isomorph",
3
+ "version": "11.0.0-alpha.40",
4
+ "type": "commonjs"
5
+ }
@@ -94,7 +94,7 @@ function provideHandlerMain(resolve) {
94
94
  res.emit(_constants.RESPONSE_EVENT_TYPE.renderFinish);
95
95
  return result;
96
96
  };
97
- return async function main() {
97
+ return async () => {
98
98
  try {
99
99
  const assets = await getAssets();
100
100
  const meta = extras.getMeta();
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_http","require","_tokens","_httpClient","_middlewareAxios","_utils","_axios","_constants","_react","_utils2","_server","_jsxRuntime","provideHttpClientFactory","resolve","appConfig","KnownToken","Config","base","tracer","Tracing","context","Http","Handler","logHandler","Client","Middleware","Log","handler","cookieStore","createCookieStore","req","header","subscribe","res","writableEnded","setHeader","getCookies","defaultHeaders","getRequestHeaders","config","client","create","headers","use","HttpStatus","axiosMiddleware","tracingMiddleware","locals","tracing","rootContext","logMiddleware","cookieMiddleware","provideHandlerMain","logger","assetsInit","Page","assets","render","extras","Response","specificExtras","Helmet","helmet","getAssets","elementToString","element","emit","RESPONSE_EVENT_TYPE","renderStart","result","renderToString","renderFinish","main","meta","getMeta","jsx","HelmetContext","Provider","value","title","appName","children","getResponseFormat","js","css","criticalJs","criticalCss","JSON","stringify","env","send","json","markup","bundle_js","bundle_css","critical_js","critical_css","error","message","statusCode","Error","ResponseError","String","status","providePageRender","jsxs","Fragment","providePageHelmet","RegularHelmet","provideSpecificParams","headerValue","processedValue","Buffer","from","toString","parse"],"sources":["../../../../../../src/preset/node/handler/providers/index.tsx"],"sourcesContent":["import { ResponseError, createCookieStore } from '../../../../http';\nimport { Resolve } from '../../../../di';\nimport { KnownToken } from '../../../../tokens';\nimport { getRequestHeaders, tracingMiddleware } from '../../node/utils/http-client';\nimport { CreateAxiosDefaults } from 'axios';\nimport { create } from 'middleware-axios';\nimport { HttpStatus } from '../../../isomorphic/utils';\nimport { cookieMiddleware, logMiddleware } from '../../../../utils/axios';\nimport { RESPONSE_EVENT_TYPE } from '../../../isomorphic/constants';\nimport { ConventionalJson } from '../../../isomorphic/types';\nimport { Fragment } from 'react';\nimport { HelmetContext, RegularHelmet, getResponseFormat } from '../utils';\nimport { renderToString } from 'react-dom/server';\n\n/**\n * Провайдер фабрики http-клиентов.\n * @param resolve Функция для получения зависимости по токену.\n * @return Фабрика.\n */\nexport function provideHttpClientFactory(resolve: Resolve) {\n // @todo а что если привести все зависимости к виду:\n // const getAppConfig = resolve.lazy(KnownToken.Config.base);\n\n const appConfig = resolve(KnownToken.Config.base);\n const tracer = resolve(KnownToken.Tracing.tracer);\n const context = resolve(KnownToken.Http.Handler.context);\n const logHandler = resolve(KnownToken.Http.Client.Middleware.Log.handler);\n\n // @todo добавить при необходимости (но тогда в логе будет значительно больше ошибок)\n // можно не отсылать ошибки из клиента если ответ от сервера уже ушел (writableEnded)\n // const controller = new AbortController();\n // context.res.on('finish', () => {\n // controller.abort();\n // });\n\n // ВАЖНО: для всех клиентов в рамках обработчика должно быть одно хранилище cookie\n const cookieStore = createCookieStore(context.req.header('cookie'));\n\n cookieStore.subscribe(() => {\n if (!context.res.writableEnded) {\n context.res.setHeader('cookie', cookieStore.getCookies());\n }\n });\n\n const defaultHeaders = getRequestHeaders(appConfig, context.req);\n\n return (config: CreateAxiosDefaults = {}) => {\n const client = create({\n ...config,\n headers: {\n ...defaultHeaders,\n\n // @todo убрать as any\n ...(config.headers as any),\n },\n });\n\n client.use(HttpStatus.axiosMiddleware());\n client.use(tracingMiddleware(tracer, context.res.locals.tracing.rootContext));\n client.use(logMiddleware(logHandler));\n client.use(cookieMiddleware(cookieStore));\n\n return client;\n };\n}\n\n/**\n * Провайдер главной функции обработчика входящего http-запроса.\n * @param resolve Функция для получения зависимости по токену.\n * @return Главная функция.\n */\nexport function provideHandlerMain(resolve: Resolve): VoidFunction {\n const config = resolve(KnownToken.Config.base);\n const logger = resolve(KnownToken.logger);\n const assetsInit = resolve(KnownToken.Http.Handler.Page.assets);\n const render = resolve(KnownToken.Http.Handler.Page.render);\n const extras = resolve(KnownToken.Http.Handler.Response.specificExtras);\n const Helmet = resolve(KnownToken.Http.Handler.Page.helmet);\n const { req, res } = resolve(KnownToken.Http.Handler.context);\n\n const getAssets = typeof assetsInit === 'function' ? assetsInit : () => assetsInit;\n\n /**\n * Рендер JSX-элемента в строку.\n * @param element Элемент.\n * @return Строка.\n */\n const elementToString = (element: JSX.Element) => {\n res.emit(RESPONSE_EVENT_TYPE.renderStart);\n const result = renderToString(element);\n res.emit(RESPONSE_EVENT_TYPE.renderFinish);\n\n return result;\n };\n\n return async function main() {\n try {\n const assets = await getAssets();\n const meta = extras.getMeta();\n\n const jsx = (\n <HelmetContext.Provider value={{ title: config.appName, assets }}>\n <Helmet>{await render()}</Helmet>\n </HelmetContext.Provider>\n );\n\n switch (getResponseFormat(req)) {\n case 'html': {\n res.setHeader('simaland-bundle-js', assets.js);\n res.setHeader('simaland-bundle-css', assets.css);\n\n if (assets.criticalJs) {\n res.setHeader('simaland-critical-js', assets.criticalJs);\n }\n\n if (assets.criticalCss) {\n res.setHeader('simaland-critical-css', assets.criticalCss);\n }\n\n if (meta) {\n res.setHeader('simaland-meta', JSON.stringify(meta));\n }\n\n // ВАЖНО: DOCTYPE обязательно нужен так как влияет на то как браузер будет парсить html/css\n // ВАЖНО: DOCTYPE нужен только когда отдаем полноценную страницу\n if (config.env === 'development') {\n res.send(`<!DOCTYPE html>${elementToString(jsx)}`);\n } else {\n res.send(elementToString(jsx));\n }\n break;\n }\n\n case 'json': {\n res.json({\n markup: elementToString(jsx),\n bundle_js: assets.js,\n bundle_css: assets.css,\n critical_js: assets.criticalJs,\n critical_css: assets.criticalCss,\n meta,\n } satisfies ConventionalJson);\n break;\n }\n }\n } catch (error) {\n let message;\n let statusCode = 500; // по умолчанию, если на этапе подготовки страницы что-то не так, отдаем 500\n\n if (error instanceof Error) {\n message = error.message;\n\n if (error instanceof ResponseError) {\n statusCode = error.statusCode;\n }\n } else {\n message = String(error);\n }\n\n res.status(statusCode).send(message);\n logger.error(error);\n }\n };\n}\n\n/**\n * Провайдер render-функции.\n * @return Render-Функция.\n */\nexport function providePageRender() {\n return () => (\n <>\n <h1>Hello, world!</h1>\n <p>This is a stub page. Define the render component in your handler</p>\n </>\n );\n}\n\n/**\n * Провайдер helmet-компонента. Этот компонент является контейнером для результата render-функции.\n * @param resolve Функция для получения зависимости по токену.\n * @return Helmet-компонент.\n */\nexport function providePageHelmet(resolve: Resolve) {\n const config = resolve(KnownToken.Config.base);\n const { req } = resolve(KnownToken.Http.Handler.context);\n\n return config.env === 'development' && getResponseFormat(req) === 'html'\n ? RegularHelmet\n : Fragment;\n}\n\n/**\n * Провайдер специфичных параметров, которые frontend-микросервис будет получать в запросе.\n * @param resolve Функция для получения зависимости по токену.\n * @return Параметры.\n */\nexport function provideSpecificParams(resolve: Resolve): Record<string, unknown> {\n const context = resolve(KnownToken.Http.Handler.context);\n\n try {\n const headerValue = context.req.header('simaland-params');\n\n /**\n * Node.js переводит в ASCII.\n * @see {https://github.com/nodejs/node/issues/17390}\n */\n const processedValue = headerValue ? Buffer.from(headerValue, 'binary').toString('utf8') : '';\n\n return processedValue ? JSON.parse(processedValue) : {};\n } catch {\n return {};\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["_http","require","_tokens","_httpClient","_middlewareAxios","_utils","_axios","_constants","_react","_utils2","_server","_jsxRuntime","provideHttpClientFactory","resolve","appConfig","KnownToken","Config","base","tracer","Tracing","context","Http","Handler","logHandler","Client","Middleware","Log","handler","cookieStore","createCookieStore","req","header","subscribe","res","writableEnded","setHeader","getCookies","defaultHeaders","getRequestHeaders","config","client","create","headers","use","HttpStatus","axiosMiddleware","tracingMiddleware","locals","tracing","rootContext","logMiddleware","cookieMiddleware","provideHandlerMain","logger","assetsInit","Page","assets","render","extras","Response","specificExtras","Helmet","helmet","getAssets","elementToString","element","emit","RESPONSE_EVENT_TYPE","renderStart","result","renderToString","renderFinish","meta","getMeta","jsx","HelmetContext","Provider","value","title","appName","children","getResponseFormat","js","css","criticalJs","criticalCss","JSON","stringify","env","send","json","markup","bundle_js","bundle_css","critical_js","critical_css","error","message","statusCode","Error","ResponseError","String","status","providePageRender","jsxs","Fragment","providePageHelmet","RegularHelmet","provideSpecificParams","headerValue","processedValue","Buffer","from","toString","parse"],"sources":["../../../../../../src/preset/node/handler/providers/index.tsx"],"sourcesContent":["import { ResponseError, createCookieStore } from '../../../../http';\nimport { Resolve } from '../../../../di';\nimport { KnownToken } from '../../../../tokens';\nimport { getRequestHeaders, tracingMiddleware } from '../../node/utils/http-client';\nimport { CreateAxiosDefaults } from 'axios';\nimport { create } from 'middleware-axios';\nimport { HttpStatus } from '../../../isomorphic/utils';\nimport { cookieMiddleware, logMiddleware } from '../../../../utils/axios';\nimport { RESPONSE_EVENT_TYPE } from '../../../isomorphic/constants';\nimport { ConventionalJson } from '../../../isomorphic/types';\nimport { Fragment } from 'react';\nimport { HelmetContext, RegularHelmet, getResponseFormat } from '../utils';\nimport { renderToString } from 'react-dom/server';\n\n/**\n * Провайдер фабрики http-клиентов.\n * @param resolve Функция для получения зависимости по токену.\n * @return Фабрика.\n */\nexport function provideHttpClientFactory(resolve: Resolve) {\n // @todo а что если привести все зависимости к виду:\n // const getAppConfig = resolve.lazy(KnownToken.Config.base);\n\n const appConfig = resolve(KnownToken.Config.base);\n const tracer = resolve(KnownToken.Tracing.tracer);\n const context = resolve(KnownToken.Http.Handler.context);\n const logHandler = resolve(KnownToken.Http.Client.Middleware.Log.handler);\n\n // @todo добавить при необходимости (но тогда в логе будет значительно больше ошибок)\n // можно не отсылать ошибки из клиента если ответ от сервера уже ушел (writableEnded)\n // const controller = new AbortController();\n // context.res.on('finish', () => {\n // controller.abort();\n // });\n\n // ВАЖНО: для всех клиентов в рамках обработчика должно быть одно хранилище cookie\n const cookieStore = createCookieStore(context.req.header('cookie'));\n\n cookieStore.subscribe(() => {\n if (!context.res.writableEnded) {\n context.res.setHeader('cookie', cookieStore.getCookies());\n }\n });\n\n const defaultHeaders = getRequestHeaders(appConfig, context.req);\n\n return (config: CreateAxiosDefaults = {}) => {\n const client = create({\n ...config,\n headers: {\n ...defaultHeaders,\n\n // @todo убрать as any\n ...(config.headers as any),\n },\n });\n\n client.use(HttpStatus.axiosMiddleware());\n client.use(tracingMiddleware(tracer, context.res.locals.tracing.rootContext));\n client.use(logMiddleware(logHandler));\n client.use(cookieMiddleware(cookieStore));\n\n return client;\n };\n}\n\n/**\n * Провайдер главной функции обработчика входящего http-запроса.\n * @param resolve Функция для получения зависимости по токену.\n * @return Главная функция.\n */\nexport function provideHandlerMain(resolve: Resolve): VoidFunction {\n const config = resolve(KnownToken.Config.base);\n const logger = resolve(KnownToken.logger);\n const assetsInit = resolve(KnownToken.Http.Handler.Page.assets);\n const render = resolve(KnownToken.Http.Handler.Page.render);\n const extras = resolve(KnownToken.Http.Handler.Response.specificExtras);\n const Helmet = resolve(KnownToken.Http.Handler.Page.helmet);\n const { req, res } = resolve(KnownToken.Http.Handler.context);\n\n const getAssets = typeof assetsInit === 'function' ? assetsInit : () => assetsInit;\n\n /**\n * Рендер JSX-элемента в строку.\n * @param element Элемент.\n * @return Строка.\n */\n const elementToString = (element: JSX.Element) => {\n res.emit(RESPONSE_EVENT_TYPE.renderStart);\n const result = renderToString(element);\n res.emit(RESPONSE_EVENT_TYPE.renderFinish);\n\n return result;\n };\n\n return async () => {\n try {\n const assets = await getAssets();\n const meta = extras.getMeta();\n\n const jsx = (\n <HelmetContext.Provider value={{ title: config.appName, assets }}>\n <Helmet>{await render()}</Helmet>\n </HelmetContext.Provider>\n );\n\n switch (getResponseFormat(req)) {\n case 'html': {\n res.setHeader('simaland-bundle-js', assets.js);\n res.setHeader('simaland-bundle-css', assets.css);\n\n if (assets.criticalJs) {\n res.setHeader('simaland-critical-js', assets.criticalJs);\n }\n\n if (assets.criticalCss) {\n res.setHeader('simaland-critical-css', assets.criticalCss);\n }\n\n if (meta) {\n res.setHeader('simaland-meta', JSON.stringify(meta));\n }\n\n // ВАЖНО: DOCTYPE обязательно нужен так как влияет на то как браузер будет парсить html/css\n // ВАЖНО: DOCTYPE нужен только когда отдаем полноценную страницу\n if (config.env === 'development') {\n res.send(`<!DOCTYPE html>${elementToString(jsx)}`);\n } else {\n res.send(elementToString(jsx));\n }\n break;\n }\n\n case 'json': {\n res.json({\n markup: elementToString(jsx),\n bundle_js: assets.js,\n bundle_css: assets.css,\n critical_js: assets.criticalJs,\n critical_css: assets.criticalCss,\n meta,\n } satisfies ConventionalJson);\n break;\n }\n }\n } catch (error) {\n let message;\n let statusCode = 500; // по умолчанию, если на этапе подготовки страницы что-то не так, отдаем 500\n\n if (error instanceof Error) {\n message = error.message;\n\n if (error instanceof ResponseError) {\n statusCode = error.statusCode;\n }\n } else {\n message = String(error);\n }\n\n res.status(statusCode).send(message);\n logger.error(error);\n }\n };\n}\n\n/**\n * Провайдер render-функции.\n * @return Render-Функция.\n */\nexport function providePageRender() {\n return () => (\n <>\n <h1>Hello, world!</h1>\n <p>This is a stub page. Define the render component in your handler</p>\n </>\n );\n}\n\n/**\n * Провайдер helmet-компонента. Этот компонент является контейнером для результата render-функции.\n * @param resolve Функция для получения зависимости по токену.\n * @return Helmet-компонент.\n */\nexport function providePageHelmet(resolve: Resolve) {\n const config = resolve(KnownToken.Config.base);\n const { req } = resolve(KnownToken.Http.Handler.context);\n\n return config.env === 'development' && getResponseFormat(req) === 'html'\n ? RegularHelmet\n : Fragment;\n}\n\n/**\n * Провайдер специфичных параметров, которые frontend-микросервис будет получать в запросе.\n * @param resolve Функция для получения зависимости по токену.\n * @return Параметры.\n */\nexport function provideSpecificParams(resolve: Resolve): Record<string, unknown> {\n const context = resolve(KnownToken.Http.Handler.context);\n\n try {\n const headerValue = context.req.header('simaland-params');\n\n /**\n * Node.js переводит в ASCII.\n * @see {https://github.com/nodejs/node/issues/17390}\n */\n const processedValue = headerValue ? Buffer.from(headerValue, 'binary').toString('utf8') : '';\n\n return processedValue ? JSON.parse(processedValue) : {};\n } catch {\n return {};\n }\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_api","require","_semanticConventions","_httpServer","_utils","tracingMiddleware","tracer","rootContext","trace","config","next","defaults","method","url","foundId","getRequestInfo","span","startSpan","undefined","setAttributes","SemanticAttributes","HTTP_URL","HTTP_METHOD","JSON","stringify","params","headers","toLowerCase","error","setStatus","code","SpanStatusCode","ERROR","message","end","toUpperCase","baseURL","hideFirstId","displayUrl","found","exec","replace","Number","getRequestHeaders","request","result","appName","appVersion","clientIp","getClientIp","cookie","get","Cookie","key","Object","keys","value","header","indexOf"],"sources":["../../../../../../../src/preset/node/node/utils/http-client/index.ts"],"sourcesContent":["import type { AxiosDefaults, AxiosRequestConfig } from 'axios';\nimport type { Middleware } from 'middleware-axios';\nimport { Context, Tracer, SpanStatusCode } from '@opentelemetry/api';\nimport { SemanticAttributes } from '@opentelemetry/semantic-conventions';\nimport { BaseConfig } from '../../../../../config';\nimport { Request } from 'express';\nimport { getClientIp } from '../http-server';\nimport { displayUrl } from '../../../../isomorphic/utils';\n\n/**\n * Возвращает новый middleware для трассировки исходящих запросов.\n * @param tracer Трейсер.\n * @param rootContext Контекст.\n * @return Middleware.\n */\nexport function tracingMiddleware(tracer: Tracer, rootContext: Context): Middleware<any> {\n return async function trace(config, next, defaults) {\n const { method, url, foundId } = getRequestInfo(config, defaults);\n const span = tracer.startSpan(`HTTP ${method} ${url}`, undefined, rootContext);\n\n span.setAttributes({\n [SemanticAttributes.HTTP_URL]: url,\n [SemanticAttributes.HTTP_METHOD]: method,\n 'request.params': JSON.stringify({\n ...defaults.params,\n ...config.params,\n }),\n 'request.headers': JSON.stringify({\n ...defaults.headers[method.toLowerCase() as 'get'],\n ...config.headers,\n }),\n\n // если нашли id - добавляем в теги\n ...(foundId && { 'request.id': foundId }),\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 * Заменяет первое найденное число в url на \"{id}\", возвращая его в результате.\n * @param config Axios-конфиг запроса.\n * @param defaults Базовый конфиг экземпляра Axios.\n * @return Базовые данные запроса.\n */\nexport function getRequestInfo(\n config: AxiosRequestConfig,\n defaults: AxiosDefaults,\n): {\n method: string;\n url: string;\n foundId?: number;\n} {\n const method = (config.method || 'GET').toUpperCase();\n const baseURL = config.baseURL || defaults.baseURL || '';\n\n // ВАЖНО: абстрагируем id только в url игнорируя baseURL\n const [url, foundId] = hideFirstId(config.url || defaults.url || '');\n\n return {\n method,\n url: displayUrl(baseURL, url),\n foundId,\n };\n}\n\n/**\n * Преобразует строку вида:\n * \"/api/v2/something/123456/some-bff/123456\"\n * в строку вида:\n * \"/api/v2/something/{id}/some-bff/123456\"\n * и возвращает кортеж с этой строкой и вырезанным числом в случае если оно найдено.\n * @param url Url.\n * @return Кортеж со строкой и результатом поиска числа.\n */\nexport function hideFirstId(url: string): [string, number | undefined] {\n const found = /\\d{2,}/.exec(url);\n\n return found ? [url.replace(found[0], '{id}'), Number(found[0])] : [url, undefined];\n}\n\n/**\n * Формирует заголовки для исходящих запросов с сервера по соглашению.\n * @param config Конфиг.\n * @param request Входящий запрос.\n * @return Заголовки для исходящих запросов.\n */\nexport function getRequestHeaders(config: BaseConfig, request: Request): Record<string, string> {\n const result: Record<string, string> = {\n 'User-Agent': `simaland-${config.appName}/${config.appVersion}`,\n };\n\n const clientIp = getClientIp(request);\n if (clientIp) {\n result['X-Client-Ip'] = clientIp;\n }\n\n const cookie = request.get('cookie');\n if (cookie) {\n result.Cookie = cookie;\n }\n\n // добавляем специфичные заголовки\n for (const key of Object.keys(request.headers)) {\n const value = request.header(key);\n\n if (key.toLowerCase().indexOf('simaland-') === 0 && value) {\n result[key] = value;\n }\n }\n\n return result;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["_api","require","_semanticConventions","_httpServer","_utils","tracingMiddleware","tracer","rootContext","trace","config","next","defaults","method","url","foundId","getRequestInfo","span","startSpan","undefined","setAttributes","SemanticAttributes","HTTP_URL","HTTP_METHOD","JSON","stringify","params","headers","toLowerCase","error","setStatus","code","SpanStatusCode","ERROR","message","end","toUpperCase","baseURL","hideFirstId","displayUrl","found","exec","replace","Number","getRequestHeaders","request","result","appName","appVersion","clientIp","getClientIp","cookie","get","Cookie","key","Object","keys","value","header","indexOf"],"sources":["../../../../../../../src/preset/node/node/utils/http-client/index.ts"],"sourcesContent":["import type { AxiosDefaults, AxiosRequestConfig } from 'axios';\nimport type { Middleware } from 'middleware-axios';\nimport type { Request } from 'express';\nimport { Context, Tracer, SpanStatusCode } from '@opentelemetry/api';\nimport { SemanticAttributes } from '@opentelemetry/semantic-conventions';\nimport { BaseConfig } from '../../../../../config';\nimport { getClientIp } from '../http-server';\nimport { displayUrl } from '../../../../isomorphic/utils';\n\n/**\n * Возвращает новый middleware для трассировки исходящих запросов.\n * @param tracer Трейсер.\n * @param rootContext Контекст.\n * @return Middleware.\n */\nexport function tracingMiddleware(tracer: Tracer, rootContext: Context): Middleware<any> {\n return async function trace(config, next, defaults) {\n const { method, url, foundId } = getRequestInfo(config, defaults);\n const span = tracer.startSpan(`HTTP ${method} ${url}`, undefined, rootContext);\n\n span.setAttributes({\n [SemanticAttributes.HTTP_URL]: url,\n [SemanticAttributes.HTTP_METHOD]: method,\n 'request.params': JSON.stringify({\n ...defaults.params,\n ...config.params,\n }),\n 'request.headers': JSON.stringify({\n ...defaults.headers[method.toLowerCase() as 'get'],\n ...config.headers,\n }),\n\n // если нашли id - добавляем в теги\n ...(foundId && { 'request.id': foundId }),\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 * Заменяет первое найденное число в url на \"{id}\", возвращая его в результате.\n * @param config Axios-конфиг запроса.\n * @param defaults Базовый конфиг экземпляра Axios.\n * @return Базовые данные запроса.\n */\nexport function getRequestInfo(\n config: AxiosRequestConfig,\n defaults: AxiosDefaults,\n): {\n method: string;\n url: string;\n foundId?: number;\n} {\n const method = (config.method || 'GET').toUpperCase();\n const baseURL = config.baseURL || defaults.baseURL || '';\n\n // ВАЖНО: абстрагируем id только в url игнорируя baseURL\n const [url, foundId] = hideFirstId(config.url || defaults.url || '');\n\n return {\n method,\n url: displayUrl(baseURL, url),\n foundId,\n };\n}\n\n/**\n * Преобразует строку вида:\n * \"/api/v2/something/123456/some-bff/123456\"\n * в строку вида:\n * \"/api/v2/something/{id}/some-bff/123456\"\n * и возвращает кортеж с этой строкой и вырезанным числом в случае если оно найдено.\n * @param url Url.\n * @return Кортеж со строкой и результатом поиска числа.\n */\nexport function hideFirstId(url: string): [string, number | undefined] {\n const found = /\\d{2,}/.exec(url);\n\n return found ? [url.replace(found[0], '{id}'), Number(found[0])] : [url, undefined];\n}\n\n/**\n * Формирует заголовки для исходящих запросов с сервера по соглашению.\n * @param config Конфиг.\n * @param request Входящий запрос.\n * @return Заголовки для исходящих запросов.\n */\nexport function getRequestHeaders(config: BaseConfig, request: Request): Record<string, string> {\n const result: Record<string, string> = {\n 'User-Agent': `simaland-${config.appName}/${config.appVersion}`,\n };\n\n const clientIp = getClientIp(request);\n if (clientIp) {\n result['X-Client-Ip'] = clientIp;\n }\n\n const cookie = request.get('cookie');\n if (cookie) {\n result.Cookie = cookie;\n }\n\n // добавляем специфичные заголовки\n for (const key of Object.keys(request.headers)) {\n const value = request.header(key);\n\n if (key.toLowerCase().indexOf('simaland-') === 0 && value) {\n result[key] = value;\n }\n }\n\n return result;\n}\n"],"mappings":"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"}
@@ -83,7 +83,7 @@ function provideKnownHttpApiHosts(resolve) {
83
83
  */
84
84
  function provideHttpClientFactory(resolve) {
85
85
  const logHandler = resolve(_tokens.KnownToken.Http.Client.Middleware.Log.handler);
86
- return function createHttpClient(config = {}) {
86
+ return (config = {}) => {
87
87
  // @todo убрать as any
88
88
  const client = (0, _middlewareAxios.create)(config);
89
89
  client.use(_utils.HttpStatus.axiosMiddleware());
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_browser","require","_config","_log","_tokens","_sentry","_ssr","_utils","_middlewareAxios","_axios","provideConfigSource","process","env","createConfigSource","provideLogger","resolve","source","KnownToken","Config","client","BrowserClient","transport","makeFetchTransport","stackParser","defaultStackParser","dsn","release","environment","integrations","defaultIntegrations","hub","Hub","setTag","window","location","href","logger","createLogger","subscribe","createSentryHandler","provideBridgeClientSide","config","base","SsrBridge","appName","provideKnownHttpApiHosts","HttpApiHostPool","ilium","simaV3","simaV4","simaV6","provideHttpClientFactory","logHandler","Http","Client","Middleware","Log","handler","createHttpClient","create","use","HttpStatus","axiosMiddleware","logMiddleware"],"sources":["../../../../../src/preset/web/providers/index.ts"],"sourcesContent":["import {\n BrowserClient,\n Hub,\n defaultIntegrations,\n defaultStackParser,\n makeFetchTransport,\n} from '@sentry/browser';\nimport { ConfigSource, createConfigSource } from '../../../config';\nimport { Resolve } from '../../../di';\nimport { Logger, createLogger } from '../../../log';\nimport { KnownToken } from '../../../tokens';\nimport { createSentryHandler } from '../../../log/handler/sentry';\nimport { BridgeClientSide, SsrBridge } from '../../../utils/ssr';\nimport { KnownHttpApiKey, StrictMap } from '../../isomorphic/types';\nimport { HttpApiHostPool, HttpStatus } from '../../isomorphic/utils';\nimport { CreateAxiosDefaults } from 'axios';\nimport { create } from 'middleware-axios';\nimport { logMiddleware } from '../../../utils/axios';\n\n/**\n * Провайдер источника конфигурации.\n * @return Источник конфигурации.\n */\nexport function provideConfigSource(): ConfigSource {\n // ВАЖНО: по умолчанию рассчитываем на process.env который предоставляется сборщиком (например webpack)\n if (typeof process !== 'undefined' && process.env) {\n return createConfigSource(process.env);\n }\n\n return createConfigSource({});\n}\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\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 return logger;\n}\n\n/**\n * Провайдер клиентской части \"моста\" для передачи данных между сервером и клиентом.\n * @param resolve Функция для получения зависимости по токену.\n * @return Клиентская часть \"моста\".\n */\nexport function provideBridgeClientSide(resolve: Resolve): BridgeClientSide<unknown> {\n const config = resolve(KnownToken.Config.base);\n\n return SsrBridge.resolve(config.appName);\n}\n\n/**\n * Провайдер известных http-хостов.\n * @param resolve Функция для получения зависимости по токену.\n * @return Пул известных http-хостов.\n */\nexport function provideKnownHttpApiHosts(resolve: Resolve): StrictMap<KnownHttpApiKey> {\n const source = resolve(KnownToken.Config.source);\n\n return new HttpApiHostPool<KnownHttpApiKey>(\n {\n ilium: 'PUBLIC_API_URL_ILIUM',\n simaV3: 'PUBLIC_API_URL_SIMALAND_V3',\n simaV4: 'PUBLIC_API_URL_SIMALAND_V4',\n simaV6: 'PUBLIC_API_URL_SIMALAND_V6',\n },\n source,\n );\n}\n\n/**\n * Провайдер фабрики http-клиентов.\n * @param resolve Функция для получения зависимости по токену.\n * @return Фабрика.\n */\nexport function provideHttpClientFactory(resolve: Resolve) {\n const logHandler = resolve(KnownToken.Http.Client.Middleware.Log.handler);\n\n return function createHttpClient(config: CreateAxiosDefaults = {}) {\n // @todo убрать as any\n const client = create(config as any);\n\n client.use(HttpStatus.axiosMiddleware());\n client.use(logMiddleware(logHandler));\n\n return client;\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["_browser","require","_config","_log","_tokens","_sentry","_ssr","_utils","_middlewareAxios","_axios","provideConfigSource","process","env","createConfigSource","provideLogger","resolve","source","KnownToken","Config","client","BrowserClient","transport","makeFetchTransport","stackParser","defaultStackParser","dsn","release","environment","integrations","defaultIntegrations","hub","Hub","setTag","window","location","href","logger","createLogger","subscribe","createSentryHandler","provideBridgeClientSide","config","base","SsrBridge","appName","provideKnownHttpApiHosts","HttpApiHostPool","ilium","simaV3","simaV4","simaV6","provideHttpClientFactory","logHandler","Http","Client","Middleware","Log","handler","create","use","HttpStatus","axiosMiddleware","logMiddleware"],"sources":["../../../../../src/preset/web/providers/index.ts"],"sourcesContent":["import {\n BrowserClient,\n Hub,\n defaultIntegrations,\n defaultStackParser,\n makeFetchTransport,\n} from '@sentry/browser';\nimport { ConfigSource, createConfigSource } from '../../../config';\nimport { Resolve } from '../../../di';\nimport { Logger, createLogger } from '../../../log';\nimport { KnownToken } from '../../../tokens';\nimport { createSentryHandler } from '../../../log/handler/sentry';\nimport { BridgeClientSide, SsrBridge } from '../../../utils/ssr';\nimport { KnownHttpApiKey, StrictMap } from '../../isomorphic/types';\nimport { HttpApiHostPool, HttpStatus } from '../../isomorphic/utils';\nimport { CreateAxiosDefaults } from 'axios';\nimport { create } from 'middleware-axios';\nimport { logMiddleware } from '../../../utils/axios';\n\n/**\n * Провайдер источника конфигурации.\n * @return Источник конфигурации.\n */\nexport function provideConfigSource(): ConfigSource {\n // ВАЖНО: по умолчанию рассчитываем на process.env который предоставляется сборщиком (например webpack)\n if (typeof process !== 'undefined' && process.env) {\n return createConfigSource(process.env);\n }\n\n return createConfigSource({});\n}\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\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 return logger;\n}\n\n/**\n * Провайдер клиентской части \"моста\" для передачи данных между сервером и клиентом.\n * @param resolve Функция для получения зависимости по токену.\n * @return Клиентская часть \"моста\".\n */\nexport function provideBridgeClientSide(resolve: Resolve): BridgeClientSide<unknown> {\n const config = resolve(KnownToken.Config.base);\n\n return SsrBridge.resolve(config.appName);\n}\n\n/**\n * Провайдер известных http-хостов.\n * @param resolve Функция для получения зависимости по токену.\n * @return Пул известных http-хостов.\n */\nexport function provideKnownHttpApiHosts(resolve: Resolve): StrictMap<KnownHttpApiKey> {\n const source = resolve(KnownToken.Config.source);\n\n return new HttpApiHostPool<KnownHttpApiKey>(\n {\n ilium: 'PUBLIC_API_URL_ILIUM',\n simaV3: 'PUBLIC_API_URL_SIMALAND_V3',\n simaV4: 'PUBLIC_API_URL_SIMALAND_V4',\n simaV6: 'PUBLIC_API_URL_SIMALAND_V6',\n },\n source,\n );\n}\n\n/**\n * Провайдер фабрики http-клиентов.\n * @param resolve Функция для получения зависимости по токену.\n * @return Фабрика.\n */\nexport function provideHttpClientFactory(resolve: Resolve) {\n const logHandler = resolve(KnownToken.Http.Client.Middleware.Log.handler);\n\n return (config: CreateAxiosDefaults = {}) => {\n // @todo убрать as any\n const client = create(config as any);\n\n client.use(HttpStatus.axiosMiddleware());\n client.use(logMiddleware(logHandler));\n\n return client;\n };\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tokens.js","names":["_di","require","KnownToken","exports","Config","source","createToken","base","cache","logger","sagaMiddleware","Tracing","tracer","spanExporter","tracerProvider","tracerProviderResource","Metrics","httpApp","Http","Api","knownHosts","Client","factory","Middleware","Log","handler","Server","Handlers","healthCheck","request","log","tracing","metrics","error","Handler","main","context","Request","specificParams","Response","specificExtras","Page","assets","helmet","render","SsrBridge","clientSide","serverSide"],"sources":["../../src/tokens.ts"],"sourcesContent":["import { createToken } from './di';\n\n// ВАЖНО: чтобы токенами можно было пользоваться независимо от среды исполнения - импортировать надо только типы\nimport type * as express from 'express';\nimport type { ConfigSource, BaseConfig } from './config/types';\nimport type { Logger } from './log/types';\nimport type { Cache } from './cache/types';\nimport type { LogMiddlewareHandlerInit } from './utils/axios/middleware/log';\nimport type { SagaExtendedMiddleware } from './utils/redux-saga';\nimport type { BridgeClientSide, BridgeServerSide } from './utils/ssr';\nimport type { Tracer } from '@opentelemetry/api';\nimport type { BasicTracerProvider, SpanExporter } from '@opentelemetry/sdk-trace-base';\nimport type { Resource } from '@opentelemetry/resources';\nimport type { ElementType, ReactNode } from 'react';\nimport type { KnownHttpApiKey, PageAssets, StrictMap } from './preset/isomorphic/types';\nimport type { HandlerContext } from './preset/node/types';\nimport type { SpecificExtras } from './preset/node/handler/utils';\nimport type { CreateAxiosDefaults } from 'axios';\nimport type { AxiosInstanceWrapper } from 'middleware-axios';\n\nexport const KnownToken = {\n // config\n Config: {\n source: createToken<ConfigSource>('config/source'),\n base: createToken<BaseConfig>('config/base'),\n },\n\n // cache\n cache: createToken<Cache>('cache'),\n\n // log\n logger: createToken<Logger>('logger'),\n\n // saga runner\n // @todo переименовать в Redux.Middleware.saga?\n sagaMiddleware: createToken<SagaExtendedMiddleware>('saga-middleware'),\n\n // tracing\n Tracing: {\n tracer: createToken<Tracer>('tracing/tracer'),\n spanExporter: createToken<SpanExporter>('tracing/span-exporter'),\n tracerProvider: createToken<BasicTracerProvider>('tracing/tracer-provider'),\n\n // @todo перенести в KnownToken.Telemetry.Resource?\n tracerProviderResource: createToken<Resource>('tracing/resource'),\n },\n\n // metrics\n Metrics: {\n httpApp: createToken<express.Application>('metrics/http-app'),\n },\n\n // http\n Http: {\n Api: {\n knownHosts: createToken<StrictMap<KnownHttpApiKey>>('http/api/known-hosts'),\n },\n\n // @todo переименовать в Axios?\n Client: {\n factory:\n createToken<(defaults?: CreateAxiosDefaults) => AxiosInstanceWrapper>('client/factory'),\n Middleware: {\n Log: {\n handler: createToken<LogMiddlewareHandlerInit>('log/handler'),\n },\n },\n },\n\n // @todo переименовать в Express?\n Server: {\n factory: createToken<() => express.Application>('server/factory'),\n Handlers: {\n healthCheck: createToken<express.Handler>('handler/health-check'),\n },\n Middleware: {\n request: createToken<express.Handler>('middleware/request'),\n log: createToken<express.Handler>('middleware/log'),\n tracing: createToken<express.Handler>('middleware/tracing'),\n metrics: createToken<express.Handler>('middleware/metrics'),\n error: createToken<express.ErrorRequestHandler>('middleware/error'),\n },\n },\n\n // @todo переименовать в ExpressHandler?\n Handler: {\n main: createToken<() => void>('handler/main'),\n context: createToken<HandlerContext>('handler/context'),\n Request: {\n specificParams: createToken<Record<string, unknown>>('request/specific-params'),\n },\n Response: {\n specificExtras: createToken<SpecificExtras>('response/specific-extras'),\n },\n Page: {\n assets: createToken<PageAssets | (() => PageAssets | Promise<PageAssets>)>('page/assets'),\n helmet: createToken<ElementType<{ children: ReactNode }>>('page/helmet'),\n render: createToken<() => JSX.Element | Promise<JSX.Element>>('page/render'),\n },\n },\n },\n\n // SSR\n SsrBridge: {\n clientSide: createToken<BridgeClientSide<unknown>>('ssr-bridge/client-side'),\n serverSide: createToken<BridgeServerSide>('ssr-bridge/server-side'),\n },\n} as const;\n"],"mappings":";;;;;;AAAA,IAAAA,GAAA,GAAAC,OAAA;AAEA;;AAkBO,MAAMC,UAAU,GAAAC,OAAA,CAAAD,UAAA,GAAG;EACxB;EACAE,MAAM,EAAE;IACNC,MAAM,EAAE,IAAAC,eAAW,EAAe,eAAe,CAAC;IAClDC,IAAI,EAAE,IAAAD,eAAW,EAAa,aAAa;EAC7C,CAAC;EAED;EACAE,KAAK,EAAE,IAAAF,eAAW,EAAQ,OAAO,CAAC;EAElC;EACAG,MAAM,EAAE,IAAAH,eAAW,EAAS,QAAQ,CAAC;EAErC;EACA;EACAI,cAAc,EAAE,IAAAJ,eAAW,EAAyB,iBAAiB,CAAC;EAEtE;EACAK,OAAO,EAAE;IACPC,MAAM,EAAE,IAAAN,eAAW,EAAS,gBAAgB,CAAC;IAC7CO,YAAY,EAAE,IAAAP,eAAW,EAAe,uBAAuB,CAAC;IAChEQ,cAAc,EAAE,IAAAR,eAAW,EAAsB,yBAAyB,CAAC;IAE3E;IACAS,sBAAsB,EAAE,IAAAT,eAAW,EAAW,kBAAkB;EAClE,CAAC;EAED;EACAU,OAAO,EAAE;IACPC,OAAO,EAAE,IAAAX,eAAW,EAAsB,kBAAkB;EAC9D,CAAC;EAED;EACAY,IAAI,EAAE;IACJC,GAAG,EAAE;MACHC,UAAU,EAAE,IAAAd,eAAW,EAA6B,sBAAsB;IAC5E,CAAC;IAED;IACAe,MAAM,EAAE;MACNC,OAAO,EACL,IAAAhB,eAAW,EAA2D,gBAAgB,CAAC;MACzFiB,UAAU,EAAE;QACVC,GAAG,EAAE;UACHC,OAAO,EAAE,IAAAnB,eAAW,EAA2B,aAAa;QAC9D;MACF;IACF,CAAC;IAED;IACAoB,MAAM,EAAE;MACNJ,OAAO,EAAE,IAAAhB,eAAW,EAA4B,gBAAgB,CAAC;MACjEqB,QAAQ,EAAE;QACRC,WAAW,EAAE,IAAAtB,eAAW,EAAkB,sBAAsB;MAClE,CAAC;MACDiB,UAAU,EAAE;QACVM,OAAO,EAAE,IAAAvB,eAAW,EAAkB,oBAAoB,CAAC;QAC3DwB,GAAG,EAAE,IAAAxB,eAAW,EAAkB,gBAAgB,CAAC;QACnDyB,OAAO,EAAE,IAAAzB,eAAW,EAAkB,oBAAoB,CAAC;QAC3D0B,OAAO,EAAE,IAAA1B,eAAW,EAAkB,oBAAoB,CAAC;QAC3D2B,KAAK,EAAE,IAAA3B,eAAW,EAA8B,kBAAkB;MACpE;IACF,CAAC;IAED;IACA4B,OAAO,EAAE;MACPC,IAAI,EAAE,IAAA7B,eAAW,EAAa,cAAc,CAAC;MAC7C8B,OAAO,EAAE,IAAA9B,eAAW,EAAiB,iBAAiB,CAAC;MACvD+B,OAAO,EAAE;QACPC,cAAc,EAAE,IAAAhC,eAAW,EAA0B,yBAAyB;MAChF,CAAC;MACDiC,QAAQ,EAAE;QACRC,cAAc,EAAE,IAAAlC,eAAW,EAAiB,0BAA0B;MACxE,CAAC;MACDmC,IAAI,EAAE;QACJC,MAAM,EAAE,IAAApC,eAAW,EAAwD,aAAa,CAAC;QACzFqC,MAAM,EAAE,IAAArC,eAAW,EAAuC,aAAa,CAAC;QACxEsC,MAAM,EAAE,IAAAtC,eAAW,EAA2C,aAAa;MAC7E;IACF;EACF,CAAC;EAED;EACAuC,SAAS,EAAE;IACTC,UAAU,EAAE,IAAAxC,eAAW,EAA4B,wBAAwB,CAAC;IAC5EyC,UAAU,EAAE,IAAAzC,eAAW,EAAmB,wBAAwB;EACpE;AACF,CAAU"}
1
+ {"version":3,"file":"tokens.js","names":["_di","require","KnownToken","exports","Config","source","createToken","base","cache","logger","sagaMiddleware","Tracing","tracer","spanExporter","tracerProvider","tracerProviderResource","Metrics","httpApp","Http","Api","knownHosts","Client","factory","Middleware","Log","handler","Server","Handlers","healthCheck","request","log","tracing","metrics","error","Handler","main","context","Request","specificParams","Response","specificExtras","Page","assets","helmet","render","SsrBridge","clientSide","serverSide"],"sources":["../../src/tokens.ts"],"sourcesContent":["import { createToken } from './di';\n\n// ВАЖНО: чтобы токенами можно было пользоваться независимо от среды исполнения - импортировать надо только типы\nimport type * as express from 'express';\nimport type { ConfigSource, BaseConfig } from './config/types';\nimport type { Logger } from './log/types';\nimport type { Cache } from './cache/types';\nimport type { LogMiddlewareHandlerInit } from './utils/axios/middleware/log';\nimport type { SagaExtendedMiddleware } from './utils/redux-saga';\nimport type { BridgeClientSide, BridgeServerSide } from './utils/ssr';\nimport type { Tracer } from '@opentelemetry/api';\nimport type { BasicTracerProvider, SpanExporter } from '@opentelemetry/sdk-trace-base';\nimport type { Resource } from '@opentelemetry/resources';\nimport type { ElementType, ReactNode } from 'react';\nimport type { KnownHttpApiKey, PageAssets, StrictMap } from './preset/isomorphic/types';\nimport type { HandlerContext } from './preset/node/types';\nimport type { SpecificExtras } from './preset/node/handler/utils';\nimport type { CreateAxiosDefaults } from 'axios';\nimport type { AxiosInstanceWrapper } from 'middleware-axios';\n\nexport const KnownToken = {\n // config\n Config: {\n source: createToken<ConfigSource>('config/source'),\n base: createToken<BaseConfig>('config/base'),\n },\n\n // cache\n cache: createToken<Cache>('cache'),\n\n // log\n logger: createToken<Logger>('logger'),\n\n // saga runner\n // @todo переименовать в Redux.Middleware.saga?\n sagaMiddleware: createToken<SagaExtendedMiddleware>('saga-middleware'),\n\n // tracing\n Tracing: {\n tracer: createToken<Tracer>('tracing/tracer'),\n spanExporter: createToken<SpanExporter>('tracing/span-exporter'),\n tracerProvider: createToken<BasicTracerProvider>('tracing/tracer-provider'),\n\n // @todo перенести в KnownToken.Telemetry.Resource?\n tracerProviderResource: createToken<Resource>('tracing/resource'),\n },\n\n // metrics\n Metrics: {\n httpApp: createToken<express.Application>('metrics/http-app'),\n },\n\n // http\n Http: {\n Api: {\n knownHosts: createToken<StrictMap<KnownHttpApiKey>>('http/api/known-hosts'),\n },\n\n // @todo переименовать в Axios?\n Client: {\n factory:\n createToken<(config?: CreateAxiosDefaults) => AxiosInstanceWrapper>('client/factory'),\n Middleware: {\n Log: {\n handler: createToken<LogMiddlewareHandlerInit>('log/handler'),\n },\n },\n },\n\n // @todo переименовать в Express?\n Server: {\n factory: createToken<() => express.Application>('server/factory'),\n Handlers: {\n healthCheck: createToken<express.Handler>('handler/health-check'),\n },\n Middleware: {\n request: createToken<express.Handler>('middleware/request'),\n log: createToken<express.Handler>('middleware/log'),\n tracing: createToken<express.Handler>('middleware/tracing'),\n metrics: createToken<express.Handler>('middleware/metrics'),\n error: createToken<express.ErrorRequestHandler>('middleware/error'),\n },\n },\n\n // @todo переименовать в ExpressHandler?\n Handler: {\n main: createToken<() => void>('handler/main'),\n context: createToken<HandlerContext>('handler/context'),\n Request: {\n specificParams: createToken<Record<string, unknown>>('request/specific-params'),\n },\n Response: {\n specificExtras: createToken<SpecificExtras>('response/specific-extras'),\n },\n Page: {\n assets: createToken<PageAssets | (() => PageAssets | Promise<PageAssets>)>('page/assets'),\n helmet: createToken<ElementType<{ children: ReactNode }>>('page/helmet'),\n render: createToken<() => JSX.Element | Promise<JSX.Element>>('page/render'),\n },\n },\n },\n\n // SSR\n SsrBridge: {\n clientSide: createToken<BridgeClientSide<unknown>>('ssr-bridge/client-side'),\n serverSide: createToken<BridgeServerSide>('ssr-bridge/server-side'),\n },\n} as const;\n"],"mappings":";;;;;;AAAA,IAAAA,GAAA,GAAAC,OAAA;AAEA;;AAkBO,MAAMC,UAAU,GAAAC,OAAA,CAAAD,UAAA,GAAG;EACxB;EACAE,MAAM,EAAE;IACNC,MAAM,EAAE,IAAAC,eAAW,EAAe,eAAe,CAAC;IAClDC,IAAI,EAAE,IAAAD,eAAW,EAAa,aAAa;EAC7C,CAAC;EAED;EACAE,KAAK,EAAE,IAAAF,eAAW,EAAQ,OAAO,CAAC;EAElC;EACAG,MAAM,EAAE,IAAAH,eAAW,EAAS,QAAQ,CAAC;EAErC;EACA;EACAI,cAAc,EAAE,IAAAJ,eAAW,EAAyB,iBAAiB,CAAC;EAEtE;EACAK,OAAO,EAAE;IACPC,MAAM,EAAE,IAAAN,eAAW,EAAS,gBAAgB,CAAC;IAC7CO,YAAY,EAAE,IAAAP,eAAW,EAAe,uBAAuB,CAAC;IAChEQ,cAAc,EAAE,IAAAR,eAAW,EAAsB,yBAAyB,CAAC;IAE3E;IACAS,sBAAsB,EAAE,IAAAT,eAAW,EAAW,kBAAkB;EAClE,CAAC;EAED;EACAU,OAAO,EAAE;IACPC,OAAO,EAAE,IAAAX,eAAW,EAAsB,kBAAkB;EAC9D,CAAC;EAED;EACAY,IAAI,EAAE;IACJC,GAAG,EAAE;MACHC,UAAU,EAAE,IAAAd,eAAW,EAA6B,sBAAsB;IAC5E,CAAC;IAED;IACAe,MAAM,EAAE;MACNC,OAAO,EACL,IAAAhB,eAAW,EAAyD,gBAAgB,CAAC;MACvFiB,UAAU,EAAE;QACVC,GAAG,EAAE;UACHC,OAAO,EAAE,IAAAnB,eAAW,EAA2B,aAAa;QAC9D;MACF;IACF,CAAC;IAED;IACAoB,MAAM,EAAE;MACNJ,OAAO,EAAE,IAAAhB,eAAW,EAA4B,gBAAgB,CAAC;MACjEqB,QAAQ,EAAE;QACRC,WAAW,EAAE,IAAAtB,eAAW,EAAkB,sBAAsB;MAClE,CAAC;MACDiB,UAAU,EAAE;QACVM,OAAO,EAAE,IAAAvB,eAAW,EAAkB,oBAAoB,CAAC;QAC3DwB,GAAG,EAAE,IAAAxB,eAAW,EAAkB,gBAAgB,CAAC;QACnDyB,OAAO,EAAE,IAAAzB,eAAW,EAAkB,oBAAoB,CAAC;QAC3D0B,OAAO,EAAE,IAAA1B,eAAW,EAAkB,oBAAoB,CAAC;QAC3D2B,KAAK,EAAE,IAAA3B,eAAW,EAA8B,kBAAkB;MACpE;IACF,CAAC;IAED;IACA4B,OAAO,EAAE;MACPC,IAAI,EAAE,IAAA7B,eAAW,EAAa,cAAc,CAAC;MAC7C8B,OAAO,EAAE,IAAA9B,eAAW,EAAiB,iBAAiB,CAAC;MACvD+B,OAAO,EAAE;QACPC,cAAc,EAAE,IAAAhC,eAAW,EAA0B,yBAAyB;MAChF,CAAC;MACDiC,QAAQ,EAAE;QACRC,cAAc,EAAE,IAAAlC,eAAW,EAAiB,0BAA0B;MACxE,CAAC;MACDmC,IAAI,EAAE;QACJC,MAAM,EAAE,IAAApC,eAAW,EAAwD,aAAa,CAAC;QACzFqC,MAAM,EAAE,IAAArC,eAAW,EAAuC,aAAa,CAAC;QACxEsC,MAAM,EAAE,IAAAtC,eAAW,EAA2C,aAAa;MAC7E;IACF;EACF,CAAC;EAED;EACAuC,SAAS,EAAE;IACTC,UAAU,EAAE,IAAAxC,eAAW,EAA4B,wBAAwB,CAAC;IAC5EyC,UAAU,EAAE,IAAAzC,eAAW,EAAmB,wBAAwB;EACpE;AACF,CAAU"}
@@ -1 +1,5 @@
1
- { "type": "module" }
1
+ {
2
+ "name": "@sima-land/isomorph",
3
+ "version": "11.0.0-alpha.40",
4
+ "type": "module"
5
+ }
@@ -85,7 +85,7 @@ export function provideHandlerMain(resolve) {
85
85
  res.emit(RESPONSE_EVENT_TYPE.renderFinish);
86
86
  return result;
87
87
  };
88
- return async function main() {
88
+ return async () => {
89
89
  try {
90
90
  const assets = await getAssets();
91
91
  const meta = extras.getMeta();
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["ResponseError","createCookieStore","KnownToken","getRequestHeaders","tracingMiddleware","create","HttpStatus","cookieMiddleware","logMiddleware","RESPONSE_EVENT_TYPE","Fragment","HelmetContext","RegularHelmet","getResponseFormat","renderToString","provideHttpClientFactory","resolve","appConfig","Config","base","tracer","Tracing","context","Http","Handler","logHandler","Client","Middleware","Log","handler","cookieStore","req","header","subscribe","res","writableEnded","setHeader","getCookies","defaultHeaders","config","client","headers","use","axiosMiddleware","locals","tracing","rootContext","provideHandlerMain","logger","assetsInit","Page","assets","render","extras","Response","specificExtras","Helmet","helmet","getAssets","elementToString","element","emit","renderStart","result","renderFinish","main","meta","getMeta","jsx","React","createElement","Provider","value","title","appName","js","css","criticalJs","criticalCss","JSON","stringify","env","send","json","markup","bundle_js","bundle_css","critical_js","critical_css","error","message","statusCode","Error","String","status","providePageRender","providePageHelmet","provideSpecificParams","headerValue","processedValue","Buffer","from","toString","parse"],"sources":["../../../../../../src/preset/node/handler/providers/index.tsx"],"sourcesContent":["import { ResponseError, createCookieStore } from '../../../../http';\nimport { Resolve } from '../../../../di';\nimport { KnownToken } from '../../../../tokens';\nimport { getRequestHeaders, tracingMiddleware } from '../../node/utils/http-client';\nimport { CreateAxiosDefaults } from 'axios';\nimport { create } from 'middleware-axios';\nimport { HttpStatus } from '../../../isomorphic/utils';\nimport { cookieMiddleware, logMiddleware } from '../../../../utils/axios';\nimport { RESPONSE_EVENT_TYPE } from '../../../isomorphic/constants';\nimport { ConventionalJson } from '../../../isomorphic/types';\nimport { Fragment } from 'react';\nimport { HelmetContext, RegularHelmet, getResponseFormat } from '../utils';\nimport { renderToString } from 'react-dom/server';\n\n/**\n * Провайдер фабрики http-клиентов.\n * @param resolve Функция для получения зависимости по токену.\n * @return Фабрика.\n */\nexport function provideHttpClientFactory(resolve: Resolve) {\n // @todo а что если привести все зависимости к виду:\n // const getAppConfig = resolve.lazy(KnownToken.Config.base);\n\n const appConfig = resolve(KnownToken.Config.base);\n const tracer = resolve(KnownToken.Tracing.tracer);\n const context = resolve(KnownToken.Http.Handler.context);\n const logHandler = resolve(KnownToken.Http.Client.Middleware.Log.handler);\n\n // @todo добавить при необходимости (но тогда в логе будет значительно больше ошибок)\n // можно не отсылать ошибки из клиента если ответ от сервера уже ушел (writableEnded)\n // const controller = new AbortController();\n // context.res.on('finish', () => {\n // controller.abort();\n // });\n\n // ВАЖНО: для всех клиентов в рамках обработчика должно быть одно хранилище cookie\n const cookieStore = createCookieStore(context.req.header('cookie'));\n\n cookieStore.subscribe(() => {\n if (!context.res.writableEnded) {\n context.res.setHeader('cookie', cookieStore.getCookies());\n }\n });\n\n const defaultHeaders = getRequestHeaders(appConfig, context.req);\n\n return (config: CreateAxiosDefaults = {}) => {\n const client = create({\n ...config,\n headers: {\n ...defaultHeaders,\n\n // @todo убрать as any\n ...(config.headers as any),\n },\n });\n\n client.use(HttpStatus.axiosMiddleware());\n client.use(tracingMiddleware(tracer, context.res.locals.tracing.rootContext));\n client.use(logMiddleware(logHandler));\n client.use(cookieMiddleware(cookieStore));\n\n return client;\n };\n}\n\n/**\n * Провайдер главной функции обработчика входящего http-запроса.\n * @param resolve Функция для получения зависимости по токену.\n * @return Главная функция.\n */\nexport function provideHandlerMain(resolve: Resolve): VoidFunction {\n const config = resolve(KnownToken.Config.base);\n const logger = resolve(KnownToken.logger);\n const assetsInit = resolve(KnownToken.Http.Handler.Page.assets);\n const render = resolve(KnownToken.Http.Handler.Page.render);\n const extras = resolve(KnownToken.Http.Handler.Response.specificExtras);\n const Helmet = resolve(KnownToken.Http.Handler.Page.helmet);\n const { req, res } = resolve(KnownToken.Http.Handler.context);\n\n const getAssets = typeof assetsInit === 'function' ? assetsInit : () => assetsInit;\n\n /**\n * Рендер JSX-элемента в строку.\n * @param element Элемент.\n * @return Строка.\n */\n const elementToString = (element: JSX.Element) => {\n res.emit(RESPONSE_EVENT_TYPE.renderStart);\n const result = renderToString(element);\n res.emit(RESPONSE_EVENT_TYPE.renderFinish);\n\n return result;\n };\n\n return async function main() {\n try {\n const assets = await getAssets();\n const meta = extras.getMeta();\n\n const jsx = (\n <HelmetContext.Provider value={{ title: config.appName, assets }}>\n <Helmet>{await render()}</Helmet>\n </HelmetContext.Provider>\n );\n\n switch (getResponseFormat(req)) {\n case 'html': {\n res.setHeader('simaland-bundle-js', assets.js);\n res.setHeader('simaland-bundle-css', assets.css);\n\n if (assets.criticalJs) {\n res.setHeader('simaland-critical-js', assets.criticalJs);\n }\n\n if (assets.criticalCss) {\n res.setHeader('simaland-critical-css', assets.criticalCss);\n }\n\n if (meta) {\n res.setHeader('simaland-meta', JSON.stringify(meta));\n }\n\n // ВАЖНО: DOCTYPE обязательно нужен так как влияет на то как браузер будет парсить html/css\n // ВАЖНО: DOCTYPE нужен только когда отдаем полноценную страницу\n if (config.env === 'development') {\n res.send(`<!DOCTYPE html>${elementToString(jsx)}`);\n } else {\n res.send(elementToString(jsx));\n }\n break;\n }\n\n case 'json': {\n res.json({\n markup: elementToString(jsx),\n bundle_js: assets.js,\n bundle_css: assets.css,\n critical_js: assets.criticalJs,\n critical_css: assets.criticalCss,\n meta,\n } satisfies ConventionalJson);\n break;\n }\n }\n } catch (error) {\n let message;\n let statusCode = 500; // по умолчанию, если на этапе подготовки страницы что-то не так, отдаем 500\n\n if (error instanceof Error) {\n message = error.message;\n\n if (error instanceof ResponseError) {\n statusCode = error.statusCode;\n }\n } else {\n message = String(error);\n }\n\n res.status(statusCode).send(message);\n logger.error(error);\n }\n };\n}\n\n/**\n * Провайдер render-функции.\n * @return Render-Функция.\n */\nexport function providePageRender() {\n return () => (\n <>\n <h1>Hello, world!</h1>\n <p>This is a stub page. Define the render component in your handler</p>\n </>\n );\n}\n\n/**\n * Провайдер helmet-компонента. Этот компонент является контейнером для результата render-функции.\n * @param resolve Функция для получения зависимости по токену.\n * @return Helmet-компонент.\n */\nexport function providePageHelmet(resolve: Resolve) {\n const config = resolve(KnownToken.Config.base);\n const { req } = resolve(KnownToken.Http.Handler.context);\n\n return config.env === 'development' && getResponseFormat(req) === 'html'\n ? RegularHelmet\n : Fragment;\n}\n\n/**\n * Провайдер специфичных параметров, которые frontend-микросервис будет получать в запросе.\n * @param resolve Функция для получения зависимости по токену.\n * @return Параметры.\n */\nexport function provideSpecificParams(resolve: Resolve): Record<string, unknown> {\n const context = resolve(KnownToken.Http.Handler.context);\n\n try {\n const headerValue = context.req.header('simaland-params');\n\n /**\n * Node.js переводит в ASCII.\n * @see {https://github.com/nodejs/node/issues/17390}\n */\n const processedValue = headerValue ? Buffer.from(headerValue, 'binary').toString('utf8') : '';\n\n return processedValue ? JSON.parse(processedValue) : {};\n } catch {\n return {};\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["ResponseError","createCookieStore","KnownToken","getRequestHeaders","tracingMiddleware","create","HttpStatus","cookieMiddleware","logMiddleware","RESPONSE_EVENT_TYPE","Fragment","HelmetContext","RegularHelmet","getResponseFormat","renderToString","provideHttpClientFactory","resolve","appConfig","Config","base","tracer","Tracing","context","Http","Handler","logHandler","Client","Middleware","Log","handler","cookieStore","req","header","subscribe","res","writableEnded","setHeader","getCookies","defaultHeaders","config","client","headers","use","axiosMiddleware","locals","tracing","rootContext","provideHandlerMain","logger","assetsInit","Page","assets","render","extras","Response","specificExtras","Helmet","helmet","getAssets","elementToString","element","emit","renderStart","result","renderFinish","meta","getMeta","jsx","React","createElement","Provider","value","title","appName","js","css","criticalJs","criticalCss","JSON","stringify","env","send","json","markup","bundle_js","bundle_css","critical_js","critical_css","error","message","statusCode","Error","String","status","providePageRender","providePageHelmet","provideSpecificParams","headerValue","processedValue","Buffer","from","toString","parse"],"sources":["../../../../../../src/preset/node/handler/providers/index.tsx"],"sourcesContent":["import { ResponseError, createCookieStore } from '../../../../http';\nimport { Resolve } from '../../../../di';\nimport { KnownToken } from '../../../../tokens';\nimport { getRequestHeaders, tracingMiddleware } from '../../node/utils/http-client';\nimport { CreateAxiosDefaults } from 'axios';\nimport { create } from 'middleware-axios';\nimport { HttpStatus } from '../../../isomorphic/utils';\nimport { cookieMiddleware, logMiddleware } from '../../../../utils/axios';\nimport { RESPONSE_EVENT_TYPE } from '../../../isomorphic/constants';\nimport { ConventionalJson } from '../../../isomorphic/types';\nimport { Fragment } from 'react';\nimport { HelmetContext, RegularHelmet, getResponseFormat } from '../utils';\nimport { renderToString } from 'react-dom/server';\n\n/**\n * Провайдер фабрики http-клиентов.\n * @param resolve Функция для получения зависимости по токену.\n * @return Фабрика.\n */\nexport function provideHttpClientFactory(resolve: Resolve) {\n // @todo а что если привести все зависимости к виду:\n // const getAppConfig = resolve.lazy(KnownToken.Config.base);\n\n const appConfig = resolve(KnownToken.Config.base);\n const tracer = resolve(KnownToken.Tracing.tracer);\n const context = resolve(KnownToken.Http.Handler.context);\n const logHandler = resolve(KnownToken.Http.Client.Middleware.Log.handler);\n\n // @todo добавить при необходимости (но тогда в логе будет значительно больше ошибок)\n // можно не отсылать ошибки из клиента если ответ от сервера уже ушел (writableEnded)\n // const controller = new AbortController();\n // context.res.on('finish', () => {\n // controller.abort();\n // });\n\n // ВАЖНО: для всех клиентов в рамках обработчика должно быть одно хранилище cookie\n const cookieStore = createCookieStore(context.req.header('cookie'));\n\n cookieStore.subscribe(() => {\n if (!context.res.writableEnded) {\n context.res.setHeader('cookie', cookieStore.getCookies());\n }\n });\n\n const defaultHeaders = getRequestHeaders(appConfig, context.req);\n\n return (config: CreateAxiosDefaults = {}) => {\n const client = create({\n ...config,\n headers: {\n ...defaultHeaders,\n\n // @todo убрать as any\n ...(config.headers as any),\n },\n });\n\n client.use(HttpStatus.axiosMiddleware());\n client.use(tracingMiddleware(tracer, context.res.locals.tracing.rootContext));\n client.use(logMiddleware(logHandler));\n client.use(cookieMiddleware(cookieStore));\n\n return client;\n };\n}\n\n/**\n * Провайдер главной функции обработчика входящего http-запроса.\n * @param resolve Функция для получения зависимости по токену.\n * @return Главная функция.\n */\nexport function provideHandlerMain(resolve: Resolve): VoidFunction {\n const config = resolve(KnownToken.Config.base);\n const logger = resolve(KnownToken.logger);\n const assetsInit = resolve(KnownToken.Http.Handler.Page.assets);\n const render = resolve(KnownToken.Http.Handler.Page.render);\n const extras = resolve(KnownToken.Http.Handler.Response.specificExtras);\n const Helmet = resolve(KnownToken.Http.Handler.Page.helmet);\n const { req, res } = resolve(KnownToken.Http.Handler.context);\n\n const getAssets = typeof assetsInit === 'function' ? assetsInit : () => assetsInit;\n\n /**\n * Рендер JSX-элемента в строку.\n * @param element Элемент.\n * @return Строка.\n */\n const elementToString = (element: JSX.Element) => {\n res.emit(RESPONSE_EVENT_TYPE.renderStart);\n const result = renderToString(element);\n res.emit(RESPONSE_EVENT_TYPE.renderFinish);\n\n return result;\n };\n\n return async () => {\n try {\n const assets = await getAssets();\n const meta = extras.getMeta();\n\n const jsx = (\n <HelmetContext.Provider value={{ title: config.appName, assets }}>\n <Helmet>{await render()}</Helmet>\n </HelmetContext.Provider>\n );\n\n switch (getResponseFormat(req)) {\n case 'html': {\n res.setHeader('simaland-bundle-js', assets.js);\n res.setHeader('simaland-bundle-css', assets.css);\n\n if (assets.criticalJs) {\n res.setHeader('simaland-critical-js', assets.criticalJs);\n }\n\n if (assets.criticalCss) {\n res.setHeader('simaland-critical-css', assets.criticalCss);\n }\n\n if (meta) {\n res.setHeader('simaland-meta', JSON.stringify(meta));\n }\n\n // ВАЖНО: DOCTYPE обязательно нужен так как влияет на то как браузер будет парсить html/css\n // ВАЖНО: DOCTYPE нужен только когда отдаем полноценную страницу\n if (config.env === 'development') {\n res.send(`<!DOCTYPE html>${elementToString(jsx)}`);\n } else {\n res.send(elementToString(jsx));\n }\n break;\n }\n\n case 'json': {\n res.json({\n markup: elementToString(jsx),\n bundle_js: assets.js,\n bundle_css: assets.css,\n critical_js: assets.criticalJs,\n critical_css: assets.criticalCss,\n meta,\n } satisfies ConventionalJson);\n break;\n }\n }\n } catch (error) {\n let message;\n let statusCode = 500; // по умолчанию, если на этапе подготовки страницы что-то не так, отдаем 500\n\n if (error instanceof Error) {\n message = error.message;\n\n if (error instanceof ResponseError) {\n statusCode = error.statusCode;\n }\n } else {\n message = String(error);\n }\n\n res.status(statusCode).send(message);\n logger.error(error);\n }\n };\n}\n\n/**\n * Провайдер render-функции.\n * @return Render-Функция.\n */\nexport function providePageRender() {\n return () => (\n <>\n <h1>Hello, world!</h1>\n <p>This is a stub page. Define the render component in your handler</p>\n </>\n );\n}\n\n/**\n * Провайдер helmet-компонента. Этот компонент является контейнером для результата render-функции.\n * @param resolve Функция для получения зависимости по токену.\n * @return Helmet-компонент.\n */\nexport function providePageHelmet(resolve: Resolve) {\n const config = resolve(KnownToken.Config.base);\n const { req } = resolve(KnownToken.Http.Handler.context);\n\n return config.env === 'development' && getResponseFormat(req) === 'html'\n ? RegularHelmet\n : Fragment;\n}\n\n/**\n * Провайдер специфичных параметров, которые frontend-микросервис будет получать в запросе.\n * @param resolve Функция для получения зависимости по токену.\n * @return Параметры.\n */\nexport function provideSpecificParams(resolve: Resolve): Record<string, unknown> {\n const context = resolve(KnownToken.Http.Handler.context);\n\n try {\n const headerValue = context.req.header('simaland-params');\n\n /**\n * Node.js переводит в ASCII.\n * @see {https://github.com/nodejs/node/issues/17390}\n */\n const processedValue = headerValue ? Buffer.from(headerValue, 'binary').toString('utf8') : '';\n\n return processedValue ? JSON.parse(processedValue) : {};\n } catch {\n return {};\n }\n}\n"],"mappings":"AAAA,SAASA,aAAa,EAAEC,iBAAiB,QAAQ,6BAAkB;AAEnE,SAASC,UAAU,QAAQ,uBAAoB;AAC/C,SAASC,iBAAiB,EAAEC,iBAAiB,QAAQ,yCAA8B;AAEnF,SAASC,MAAM,QAAQ,kBAAkB;AACzC,SAASC,UAAU,QAAQ,sCAA2B;AACtD,SAASC,gBAAgB,EAAEC,aAAa,QAAQ,oCAAyB;AACzE,SAASC,mBAAmB,QAAQ,kCAA+B;AAEnE,SAASC,QAAQ,QAAQ,OAAO;AAChC,SAASC,aAAa,EAAEC,aAAa,EAAEC,iBAAiB,QAAQ,qBAAU;AAC1E,SAASC,cAAc,QAAQ,kBAAkB;;AAEjD;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,wBAAwBA,CAACC,OAAgB,EAAE;EACzD;EACA;;EAEA,MAAMC,SAAS,GAAGD,OAAO,CAACd,UAAU,CAACgB,MAAM,CAACC,IAAI,CAAC;EACjD,MAAMC,MAAM,GAAGJ,OAAO,CAACd,UAAU,CAACmB,OAAO,CAACD,MAAM,CAAC;EACjD,MAAME,OAAO,GAAGN,OAAO,CAACd,UAAU,CAACqB,IAAI,CAACC,OAAO,CAACF,OAAO,CAAC;EACxD,MAAMG,UAAU,GAAGT,OAAO,CAACd,UAAU,CAACqB,IAAI,CAACG,MAAM,CAACC,UAAU,CAACC,GAAG,CAACC,OAAO,CAAC;;EAEzE;EACA;EACA;EACA;EACA;EACA;;EAEA;EACA,MAAMC,WAAW,GAAG7B,iBAAiB,CAACqB,OAAO,CAACS,GAAG,CAACC,MAAM,CAAC,QAAQ,CAAC,CAAC;EAEnEF,WAAW,CAACG,SAAS,CAAC,MAAM;IAC1B,IAAI,CAACX,OAAO,CAACY,GAAG,CAACC,aAAa,EAAE;MAC9Bb,OAAO,CAACY,GAAG,CAACE,SAAS,CAAC,QAAQ,EAAEN,WAAW,CAACO,UAAU,CAAC,CAAC,CAAC;IAC3D;EACF,CAAC,CAAC;EAEF,MAAMC,cAAc,GAAGnC,iBAAiB,CAACc,SAAS,EAAEK,OAAO,CAACS,GAAG,CAAC;EAEhE,OAAO,CAACQ,MAA2B,GAAG,CAAC,CAAC,KAAK;IAC3C,MAAMC,MAAM,GAAGnC,MAAM,CAAC;MACpB,GAAGkC,MAAM;MACTE,OAAO,EAAE;QACP,GAAGH,cAAc;QAEjB;QACA,GAAIC,MAAM,CAACE;MACb;IACF,CAAC,CAAC;IAEFD,MAAM,CAACE,GAAG,CAACpC,UAAU,CAACqC,eAAe,CAAC,CAAC,CAAC;IACxCH,MAAM,CAACE,GAAG,CAACtC,iBAAiB,CAACgB,MAAM,EAAEE,OAAO,CAACY,GAAG,CAACU,MAAM,CAACC,OAAO,CAACC,WAAW,CAAC,CAAC;IAC7EN,MAAM,CAACE,GAAG,CAAClC,aAAa,CAACiB,UAAU,CAAC,CAAC;IACrCe,MAAM,CAACE,GAAG,CAACnC,gBAAgB,CAACuB,WAAW,CAAC,CAAC;IAEzC,OAAOU,MAAM;EACf,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASO,kBAAkBA,CAAC/B,OAAgB,EAAgB;EACjE,MAAMuB,MAAM,GAAGvB,OAAO,CAACd,UAAU,CAACgB,MAAM,CAACC,IAAI,CAAC;EAC9C,MAAM6B,MAAM,GAAGhC,OAAO,CAACd,UAAU,CAAC8C,MAAM,CAAC;EACzC,MAAMC,UAAU,GAAGjC,OAAO,CAACd,UAAU,CAACqB,IAAI,CAACC,OAAO,CAAC0B,IAAI,CAACC,MAAM,CAAC;EAC/D,MAAMC,MAAM,GAAGpC,OAAO,CAACd,UAAU,CAACqB,IAAI,CAACC,OAAO,CAAC0B,IAAI,CAACE,MAAM,CAAC;EAC3D,MAAMC,MAAM,GAAGrC,OAAO,CAACd,UAAU,CAACqB,IAAI,CAACC,OAAO,CAAC8B,QAAQ,CAACC,cAAc,CAAC;EACvE,MAAMC,MAAM,GAAGxC,OAAO,CAACd,UAAU,CAACqB,IAAI,CAACC,OAAO,CAAC0B,IAAI,CAACO,MAAM,CAAC;EAC3D,MAAM;IAAE1B,GAAG;IAAEG;EAAI,CAAC,GAAGlB,OAAO,CAACd,UAAU,CAACqB,IAAI,CAACC,OAAO,CAACF,OAAO,CAAC;EAE7D,MAAMoC,SAAS,GAAG,OAAOT,UAAU,KAAK,UAAU,GAAGA,UAAU,GAAG,MAAMA,UAAU;;EAElF;AACF;AACA;AACA;AACA;EACE,MAAMU,eAAe,GAAIC,OAAoB,IAAK;IAChD1B,GAAG,CAAC2B,IAAI,CAACpD,mBAAmB,CAACqD,WAAW,CAAC;IACzC,MAAMC,MAAM,GAAGjD,cAAc,CAAC8C,OAAO,CAAC;IACtC1B,GAAG,CAAC2B,IAAI,CAACpD,mBAAmB,CAACuD,YAAY,CAAC;IAE1C,OAAOD,MAAM;EACf,CAAC;EAED,OAAO,YAAY;IACjB,IAAI;MACF,MAAMZ,MAAM,GAAG,MAAMO,SAAS,CAAC,CAAC;MAChC,MAAMO,IAAI,GAAGZ,MAAM,CAACa,OAAO,CAAC,CAAC;MAE7B,MAAMC,GAAG,gBACPC,KAAA,CAAAC,aAAA,CAAC1D,aAAa,CAAC2D,QAAQ;QAACC,KAAK,EAAE;UAAEC,KAAK,EAAEjC,MAAM,CAACkC,OAAO;UAAEtB;QAAO;MAAE,gBAC/DiB,KAAA,CAAAC,aAAA,CAACb,MAAM,QAAE,MAAMJ,MAAM,CAAC,CAAU,CACV,CACzB;MAED,QAAQvC,iBAAiB,CAACkB,GAAG,CAAC;QAC5B,KAAK,MAAM;UAAE;YACXG,GAAG,CAACE,SAAS,CAAC,oBAAoB,EAAEe,MAAM,CAACuB,EAAE,CAAC;YAC9CxC,GAAG,CAACE,SAAS,CAAC,qBAAqB,EAAEe,MAAM,CAACwB,GAAG,CAAC;YAEhD,IAAIxB,MAAM,CAACyB,UAAU,EAAE;cACrB1C,GAAG,CAACE,SAAS,CAAC,sBAAsB,EAAEe,MAAM,CAACyB,UAAU,CAAC;YAC1D;YAEA,IAAIzB,MAAM,CAAC0B,WAAW,EAAE;cACtB3C,GAAG,CAACE,SAAS,CAAC,uBAAuB,EAAEe,MAAM,CAAC0B,WAAW,CAAC;YAC5D;YAEA,IAAIZ,IAAI,EAAE;cACR/B,GAAG,CAACE,SAAS,CAAC,eAAe,EAAE0C,IAAI,CAACC,SAAS,CAACd,IAAI,CAAC,CAAC;YACtD;;YAEA;YACA;YACA,IAAI1B,MAAM,CAACyC,GAAG,KAAK,aAAa,EAAE;cAChC9C,GAAG,CAAC+C,IAAI,CAAE,kBAAiBtB,eAAe,CAACQ,GAAG,CAAE,EAAC,CAAC;YACpD,CAAC,MAAM;cACLjC,GAAG,CAAC+C,IAAI,CAACtB,eAAe,CAACQ,GAAG,CAAC,CAAC;YAChC;YACA;UACF;QAEA,KAAK,MAAM;UAAE;YACXjC,GAAG,CAACgD,IAAI,CAAC;cACPC,MAAM,EAAExB,eAAe,CAACQ,GAAG,CAAC;cAC5BiB,SAAS,EAAEjC,MAAM,CAACuB,EAAE;cACpBW,UAAU,EAAElC,MAAM,CAACwB,GAAG;cACtBW,WAAW,EAAEnC,MAAM,CAACyB,UAAU;cAC9BW,YAAY,EAAEpC,MAAM,CAAC0B,WAAW;cAChCZ;YACF,CAA4B,CAAC;YAC7B;UACF;MACF;IACF,CAAC,CAAC,OAAOuB,KAAK,EAAE;MACd,IAAIC,OAAO;MACX,IAAIC,UAAU,GAAG,GAAG,CAAC,CAAC;;MAEtB,IAAIF,KAAK,YAAYG,KAAK,EAAE;QAC1BF,OAAO,GAAGD,KAAK,CAACC,OAAO;QAEvB,IAAID,KAAK,YAAYxF,aAAa,EAAE;UAClC0F,UAAU,GAAGF,KAAK,CAACE,UAAU;QAC/B;MACF,CAAC,MAAM;QACLD,OAAO,GAAGG,MAAM,CAACJ,KAAK,CAAC;MACzB;MAEAtD,GAAG,CAAC2D,MAAM,CAACH,UAAU,CAAC,CAACT,IAAI,CAACQ,OAAO,CAAC;MACpCzC,MAAM,CAACwC,KAAK,CAACA,KAAK,CAAC;IACrB;EACF,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASM,iBAAiBA,CAAA,EAAG;EAClC,OAAO,mBACL1B,KAAA,CAAAC,aAAA,CAAAD,KAAA,CAAA1D,QAAA,qBACE0D,KAAA,CAAAC,aAAA,aAAI,eAAiB,CAAC,eACtBD,KAAA,CAAAC,aAAA,YAAG,kEAAmE,CACtE,CACH;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAAS0B,iBAAiBA,CAAC/E,OAAgB,EAAE;EAClD,MAAMuB,MAAM,GAAGvB,OAAO,CAACd,UAAU,CAACgB,MAAM,CAACC,IAAI,CAAC;EAC9C,MAAM;IAAEY;EAAI,CAAC,GAAGf,OAAO,CAACd,UAAU,CAACqB,IAAI,CAACC,OAAO,CAACF,OAAO,CAAC;EAExD,OAAOiB,MAAM,CAACyC,GAAG,KAAK,aAAa,IAAInE,iBAAiB,CAACkB,GAAG,CAAC,KAAK,MAAM,GACpEnB,aAAa,GACbF,QAAQ;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASsF,qBAAqBA,CAAChF,OAAgB,EAA2B;EAC/E,MAAMM,OAAO,GAAGN,OAAO,CAACd,UAAU,CAACqB,IAAI,CAACC,OAAO,CAACF,OAAO,CAAC;EAExD,IAAI;IACF,MAAM2E,WAAW,GAAG3E,OAAO,CAACS,GAAG,CAACC,MAAM,CAAC,iBAAiB,CAAC;;IAEzD;AACJ;AACA;AACA;IACI,MAAMkE,cAAc,GAAGD,WAAW,GAAGE,MAAM,CAACC,IAAI,CAACH,WAAW,EAAE,QAAQ,CAAC,CAACI,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE;IAE7F,OAAOH,cAAc,GAAGpB,IAAI,CAACwB,KAAK,CAACJ,cAAc,CAAC,GAAG,CAAC,CAAC;EACzD,CAAC,CAAC,MAAM;IACN,OAAO,CAAC,CAAC;EACX;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["SpanStatusCode","SemanticAttributes","getClientIp","displayUrl","tracingMiddleware","tracer","rootContext","trace","config","next","defaults","method","url","foundId","getRequestInfo","span","startSpan","undefined","setAttributes","HTTP_URL","HTTP_METHOD","JSON","stringify","params","headers","toLowerCase","error","setStatus","code","ERROR","message","end","toUpperCase","baseURL","hideFirstId","found","exec","replace","Number","getRequestHeaders","request","result","appName","appVersion","clientIp","cookie","get","Cookie","key","Object","keys","value","header","indexOf"],"sources":["../../../../../../../src/preset/node/node/utils/http-client/index.ts"],"sourcesContent":["import type { AxiosDefaults, AxiosRequestConfig } from 'axios';\nimport type { Middleware } from 'middleware-axios';\nimport { Context, Tracer, SpanStatusCode } from '@opentelemetry/api';\nimport { SemanticAttributes } from '@opentelemetry/semantic-conventions';\nimport { BaseConfig } from '../../../../../config';\nimport { Request } from 'express';\nimport { getClientIp } from '../http-server';\nimport { displayUrl } from '../../../../isomorphic/utils';\n\n/**\n * Возвращает новый middleware для трассировки исходящих запросов.\n * @param tracer Трейсер.\n * @param rootContext Контекст.\n * @return Middleware.\n */\nexport function tracingMiddleware(tracer: Tracer, rootContext: Context): Middleware<any> {\n return async function trace(config, next, defaults) {\n const { method, url, foundId } = getRequestInfo(config, defaults);\n const span = tracer.startSpan(`HTTP ${method} ${url}`, undefined, rootContext);\n\n span.setAttributes({\n [SemanticAttributes.HTTP_URL]: url,\n [SemanticAttributes.HTTP_METHOD]: method,\n 'request.params': JSON.stringify({\n ...defaults.params,\n ...config.params,\n }),\n 'request.headers': JSON.stringify({\n ...defaults.headers[method.toLowerCase() as 'get'],\n ...config.headers,\n }),\n\n // если нашли id - добавляем в теги\n ...(foundId && { 'request.id': foundId }),\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 * Заменяет первое найденное число в url на \"{id}\", возвращая его в результате.\n * @param config Axios-конфиг запроса.\n * @param defaults Базовый конфиг экземпляра Axios.\n * @return Базовые данные запроса.\n */\nexport function getRequestInfo(\n config: AxiosRequestConfig,\n defaults: AxiosDefaults,\n): {\n method: string;\n url: string;\n foundId?: number;\n} {\n const method = (config.method || 'GET').toUpperCase();\n const baseURL = config.baseURL || defaults.baseURL || '';\n\n // ВАЖНО: абстрагируем id только в url игнорируя baseURL\n const [url, foundId] = hideFirstId(config.url || defaults.url || '');\n\n return {\n method,\n url: displayUrl(baseURL, url),\n foundId,\n };\n}\n\n/**\n * Преобразует строку вида:\n * \"/api/v2/something/123456/some-bff/123456\"\n * в строку вида:\n * \"/api/v2/something/{id}/some-bff/123456\"\n * и возвращает кортеж с этой строкой и вырезанным числом в случае если оно найдено.\n * @param url Url.\n * @return Кортеж со строкой и результатом поиска числа.\n */\nexport function hideFirstId(url: string): [string, number | undefined] {\n const found = /\\d{2,}/.exec(url);\n\n return found ? [url.replace(found[0], '{id}'), Number(found[0])] : [url, undefined];\n}\n\n/**\n * Формирует заголовки для исходящих запросов с сервера по соглашению.\n * @param config Конфиг.\n * @param request Входящий запрос.\n * @return Заголовки для исходящих запросов.\n */\nexport function getRequestHeaders(config: BaseConfig, request: Request): Record<string, string> {\n const result: Record<string, string> = {\n 'User-Agent': `simaland-${config.appName}/${config.appVersion}`,\n };\n\n const clientIp = getClientIp(request);\n if (clientIp) {\n result['X-Client-Ip'] = clientIp;\n }\n\n const cookie = request.get('cookie');\n if (cookie) {\n result.Cookie = cookie;\n }\n\n // добавляем специфичные заголовки\n for (const key of Object.keys(request.headers)) {\n const value = request.header(key);\n\n if (key.toLowerCase().indexOf('simaland-') === 0 && value) {\n result[key] = value;\n }\n }\n\n return result;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["SpanStatusCode","SemanticAttributes","getClientIp","displayUrl","tracingMiddleware","tracer","rootContext","trace","config","next","defaults","method","url","foundId","getRequestInfo","span","startSpan","undefined","setAttributes","HTTP_URL","HTTP_METHOD","JSON","stringify","params","headers","toLowerCase","error","setStatus","code","ERROR","message","end","toUpperCase","baseURL","hideFirstId","found","exec","replace","Number","getRequestHeaders","request","result","appName","appVersion","clientIp","cookie","get","Cookie","key","Object","keys","value","header","indexOf"],"sources":["../../../../../../../src/preset/node/node/utils/http-client/index.ts"],"sourcesContent":["import type { AxiosDefaults, AxiosRequestConfig } from 'axios';\nimport type { Middleware } from 'middleware-axios';\nimport type { Request } from 'express';\nimport { Context, Tracer, SpanStatusCode } from '@opentelemetry/api';\nimport { SemanticAttributes } from '@opentelemetry/semantic-conventions';\nimport { BaseConfig } from '../../../../../config';\nimport { getClientIp } from '../http-server';\nimport { displayUrl } from '../../../../isomorphic/utils';\n\n/**\n * Возвращает новый middleware для трассировки исходящих запросов.\n * @param tracer Трейсер.\n * @param rootContext Контекст.\n * @return Middleware.\n */\nexport function tracingMiddleware(tracer: Tracer, rootContext: Context): Middleware<any> {\n return async function trace(config, next, defaults) {\n const { method, url, foundId } = getRequestInfo(config, defaults);\n const span = tracer.startSpan(`HTTP ${method} ${url}`, undefined, rootContext);\n\n span.setAttributes({\n [SemanticAttributes.HTTP_URL]: url,\n [SemanticAttributes.HTTP_METHOD]: method,\n 'request.params': JSON.stringify({\n ...defaults.params,\n ...config.params,\n }),\n 'request.headers': JSON.stringify({\n ...defaults.headers[method.toLowerCase() as 'get'],\n ...config.headers,\n }),\n\n // если нашли id - добавляем в теги\n ...(foundId && { 'request.id': foundId }),\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 * Заменяет первое найденное число в url на \"{id}\", возвращая его в результате.\n * @param config Axios-конфиг запроса.\n * @param defaults Базовый конфиг экземпляра Axios.\n * @return Базовые данные запроса.\n */\nexport function getRequestInfo(\n config: AxiosRequestConfig,\n defaults: AxiosDefaults,\n): {\n method: string;\n url: string;\n foundId?: number;\n} {\n const method = (config.method || 'GET').toUpperCase();\n const baseURL = config.baseURL || defaults.baseURL || '';\n\n // ВАЖНО: абстрагируем id только в url игнорируя baseURL\n const [url, foundId] = hideFirstId(config.url || defaults.url || '');\n\n return {\n method,\n url: displayUrl(baseURL, url),\n foundId,\n };\n}\n\n/**\n * Преобразует строку вида:\n * \"/api/v2/something/123456/some-bff/123456\"\n * в строку вида:\n * \"/api/v2/something/{id}/some-bff/123456\"\n * и возвращает кортеж с этой строкой и вырезанным числом в случае если оно найдено.\n * @param url Url.\n * @return Кортеж со строкой и результатом поиска числа.\n */\nexport function hideFirstId(url: string): [string, number | undefined] {\n const found = /\\d{2,}/.exec(url);\n\n return found ? [url.replace(found[0], '{id}'), Number(found[0])] : [url, undefined];\n}\n\n/**\n * Формирует заголовки для исходящих запросов с сервера по соглашению.\n * @param config Конфиг.\n * @param request Входящий запрос.\n * @return Заголовки для исходящих запросов.\n */\nexport function getRequestHeaders(config: BaseConfig, request: Request): Record<string, string> {\n const result: Record<string, string> = {\n 'User-Agent': `simaland-${config.appName}/${config.appVersion}`,\n };\n\n const clientIp = getClientIp(request);\n if (clientIp) {\n result['X-Client-Ip'] = clientIp;\n }\n\n const cookie = request.get('cookie');\n if (cookie) {\n result.Cookie = cookie;\n }\n\n // добавляем специфичные заголовки\n for (const key of Object.keys(request.headers)) {\n const value = request.header(key);\n\n if (key.toLowerCase().indexOf('simaland-') === 0 && value) {\n result[key] = value;\n }\n }\n\n return result;\n}\n"],"mappings":"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"}
@@ -74,7 +74,7 @@ export function provideKnownHttpApiHosts(resolve) {
74
74
  */
75
75
  export function provideHttpClientFactory(resolve) {
76
76
  const logHandler = resolve(KnownToken.Http.Client.Middleware.Log.handler);
77
- return function createHttpClient(config = {}) {
77
+ return (config = {}) => {
78
78
  // @todo убрать as any
79
79
  const client = create(config);
80
80
  client.use(HttpStatus.axiosMiddleware());
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["BrowserClient","Hub","defaultIntegrations","defaultStackParser","makeFetchTransport","createConfigSource","createLogger","KnownToken","createSentryHandler","SsrBridge","HttpApiHostPool","HttpStatus","create","logMiddleware","provideConfigSource","process","env","provideLogger","resolve","source","Config","client","transport","stackParser","dsn","require","release","environment","integrations","hub","setTag","window","location","href","logger","subscribe","provideBridgeClientSide","config","base","appName","provideKnownHttpApiHosts","ilium","simaV3","simaV4","simaV6","provideHttpClientFactory","logHandler","Http","Client","Middleware","Log","handler","createHttpClient","use","axiosMiddleware"],"sources":["../../../../../src/preset/web/providers/index.ts"],"sourcesContent":["import {\n BrowserClient,\n Hub,\n defaultIntegrations,\n defaultStackParser,\n makeFetchTransport,\n} from '@sentry/browser';\nimport { ConfigSource, createConfigSource } from '../../../config';\nimport { Resolve } from '../../../di';\nimport { Logger, createLogger } from '../../../log';\nimport { KnownToken } from '../../../tokens';\nimport { createSentryHandler } from '../../../log/handler/sentry';\nimport { BridgeClientSide, SsrBridge } from '../../../utils/ssr';\nimport { KnownHttpApiKey, StrictMap } from '../../isomorphic/types';\nimport { HttpApiHostPool, HttpStatus } from '../../isomorphic/utils';\nimport { CreateAxiosDefaults } from 'axios';\nimport { create } from 'middleware-axios';\nimport { logMiddleware } from '../../../utils/axios';\n\n/**\n * Провайдер источника конфигурации.\n * @return Источник конфигурации.\n */\nexport function provideConfigSource(): ConfigSource {\n // ВАЖНО: по умолчанию рассчитываем на process.env который предоставляется сборщиком (например webpack)\n if (typeof process !== 'undefined' && process.env) {\n return createConfigSource(process.env);\n }\n\n return createConfigSource({});\n}\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\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 return logger;\n}\n\n/**\n * Провайдер клиентской части \"моста\" для передачи данных между сервером и клиентом.\n * @param resolve Функция для получения зависимости по токену.\n * @return Клиентская часть \"моста\".\n */\nexport function provideBridgeClientSide(resolve: Resolve): BridgeClientSide<unknown> {\n const config = resolve(KnownToken.Config.base);\n\n return SsrBridge.resolve(config.appName);\n}\n\n/**\n * Провайдер известных http-хостов.\n * @param resolve Функция для получения зависимости по токену.\n * @return Пул известных http-хостов.\n */\nexport function provideKnownHttpApiHosts(resolve: Resolve): StrictMap<KnownHttpApiKey> {\n const source = resolve(KnownToken.Config.source);\n\n return new HttpApiHostPool<KnownHttpApiKey>(\n {\n ilium: 'PUBLIC_API_URL_ILIUM',\n simaV3: 'PUBLIC_API_URL_SIMALAND_V3',\n simaV4: 'PUBLIC_API_URL_SIMALAND_V4',\n simaV6: 'PUBLIC_API_URL_SIMALAND_V6',\n },\n source,\n );\n}\n\n/**\n * Провайдер фабрики http-клиентов.\n * @param resolve Функция для получения зависимости по токену.\n * @return Фабрика.\n */\nexport function provideHttpClientFactory(resolve: Resolve) {\n const logHandler = resolve(KnownToken.Http.Client.Middleware.Log.handler);\n\n return function createHttpClient(config: CreateAxiosDefaults = {}) {\n // @todo убрать as any\n const client = create(config as any);\n\n client.use(HttpStatus.axiosMiddleware());\n client.use(logMiddleware(logHandler));\n\n return client;\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["BrowserClient","Hub","defaultIntegrations","defaultStackParser","makeFetchTransport","createConfigSource","createLogger","KnownToken","createSentryHandler","SsrBridge","HttpApiHostPool","HttpStatus","create","logMiddleware","provideConfigSource","process","env","provideLogger","resolve","source","Config","client","transport","stackParser","dsn","require","release","environment","integrations","hub","setTag","window","location","href","logger","subscribe","provideBridgeClientSide","config","base","appName","provideKnownHttpApiHosts","ilium","simaV3","simaV4","simaV6","provideHttpClientFactory","logHandler","Http","Client","Middleware","Log","handler","use","axiosMiddleware"],"sources":["../../../../../src/preset/web/providers/index.ts"],"sourcesContent":["import {\n BrowserClient,\n Hub,\n defaultIntegrations,\n defaultStackParser,\n makeFetchTransport,\n} from '@sentry/browser';\nimport { ConfigSource, createConfigSource } from '../../../config';\nimport { Resolve } from '../../../di';\nimport { Logger, createLogger } from '../../../log';\nimport { KnownToken } from '../../../tokens';\nimport { createSentryHandler } from '../../../log/handler/sentry';\nimport { BridgeClientSide, SsrBridge } from '../../../utils/ssr';\nimport { KnownHttpApiKey, StrictMap } from '../../isomorphic/types';\nimport { HttpApiHostPool, HttpStatus } from '../../isomorphic/utils';\nimport { CreateAxiosDefaults } from 'axios';\nimport { create } from 'middleware-axios';\nimport { logMiddleware } from '../../../utils/axios';\n\n/**\n * Провайдер источника конфигурации.\n * @return Источник конфигурации.\n */\nexport function provideConfigSource(): ConfigSource {\n // ВАЖНО: по умолчанию рассчитываем на process.env который предоставляется сборщиком (например webpack)\n if (typeof process !== 'undefined' && process.env) {\n return createConfigSource(process.env);\n }\n\n return createConfigSource({});\n}\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\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 return logger;\n}\n\n/**\n * Провайдер клиентской части \"моста\" для передачи данных между сервером и клиентом.\n * @param resolve Функция для получения зависимости по токену.\n * @return Клиентская часть \"моста\".\n */\nexport function provideBridgeClientSide(resolve: Resolve): BridgeClientSide<unknown> {\n const config = resolve(KnownToken.Config.base);\n\n return SsrBridge.resolve(config.appName);\n}\n\n/**\n * Провайдер известных http-хостов.\n * @param resolve Функция для получения зависимости по токену.\n * @return Пул известных http-хостов.\n */\nexport function provideKnownHttpApiHosts(resolve: Resolve): StrictMap<KnownHttpApiKey> {\n const source = resolve(KnownToken.Config.source);\n\n return new HttpApiHostPool<KnownHttpApiKey>(\n {\n ilium: 'PUBLIC_API_URL_ILIUM',\n simaV3: 'PUBLIC_API_URL_SIMALAND_V3',\n simaV4: 'PUBLIC_API_URL_SIMALAND_V4',\n simaV6: 'PUBLIC_API_URL_SIMALAND_V6',\n },\n source,\n );\n}\n\n/**\n * Провайдер фабрики http-клиентов.\n * @param resolve Функция для получения зависимости по токену.\n * @return Фабрика.\n */\nexport function provideHttpClientFactory(resolve: Resolve) {\n const logHandler = resolve(KnownToken.Http.Client.Middleware.Log.handler);\n\n return (config: CreateAxiosDefaults = {}) => {\n // @todo убрать as any\n const client = create(config as any);\n\n client.use(HttpStatus.axiosMiddleware());\n client.use(logMiddleware(logHandler));\n\n return client;\n };\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tokens.js","names":["createToken","KnownToken","Config","source","base","cache","logger","sagaMiddleware","Tracing","tracer","spanExporter","tracerProvider","tracerProviderResource","Metrics","httpApp","Http","Api","knownHosts","Client","factory","Middleware","Log","handler","Server","Handlers","healthCheck","request","log","tracing","metrics","error","Handler","main","context","Request","specificParams","Response","specificExtras","Page","assets","helmet","render","SsrBridge","clientSide","serverSide"],"sources":["../../src/tokens.ts"],"sourcesContent":["import { createToken } from './di';\n\n// ВАЖНО: чтобы токенами можно было пользоваться независимо от среды исполнения - импортировать надо только типы\nimport type * as express from 'express';\nimport type { ConfigSource, BaseConfig } from './config/types';\nimport type { Logger } from './log/types';\nimport type { Cache } from './cache/types';\nimport type { LogMiddlewareHandlerInit } from './utils/axios/middleware/log';\nimport type { SagaExtendedMiddleware } from './utils/redux-saga';\nimport type { BridgeClientSide, BridgeServerSide } from './utils/ssr';\nimport type { Tracer } from '@opentelemetry/api';\nimport type { BasicTracerProvider, SpanExporter } from '@opentelemetry/sdk-trace-base';\nimport type { Resource } from '@opentelemetry/resources';\nimport type { ElementType, ReactNode } from 'react';\nimport type { KnownHttpApiKey, PageAssets, StrictMap } from './preset/isomorphic/types';\nimport type { HandlerContext } from './preset/node/types';\nimport type { SpecificExtras } from './preset/node/handler/utils';\nimport type { CreateAxiosDefaults } from 'axios';\nimport type { AxiosInstanceWrapper } from 'middleware-axios';\n\nexport const KnownToken = {\n // config\n Config: {\n source: createToken<ConfigSource>('config/source'),\n base: createToken<BaseConfig>('config/base'),\n },\n\n // cache\n cache: createToken<Cache>('cache'),\n\n // log\n logger: createToken<Logger>('logger'),\n\n // saga runner\n // @todo переименовать в Redux.Middleware.saga?\n sagaMiddleware: createToken<SagaExtendedMiddleware>('saga-middleware'),\n\n // tracing\n Tracing: {\n tracer: createToken<Tracer>('tracing/tracer'),\n spanExporter: createToken<SpanExporter>('tracing/span-exporter'),\n tracerProvider: createToken<BasicTracerProvider>('tracing/tracer-provider'),\n\n // @todo перенести в KnownToken.Telemetry.Resource?\n tracerProviderResource: createToken<Resource>('tracing/resource'),\n },\n\n // metrics\n Metrics: {\n httpApp: createToken<express.Application>('metrics/http-app'),\n },\n\n // http\n Http: {\n Api: {\n knownHosts: createToken<StrictMap<KnownHttpApiKey>>('http/api/known-hosts'),\n },\n\n // @todo переименовать в Axios?\n Client: {\n factory:\n createToken<(defaults?: CreateAxiosDefaults) => AxiosInstanceWrapper>('client/factory'),\n Middleware: {\n Log: {\n handler: createToken<LogMiddlewareHandlerInit>('log/handler'),\n },\n },\n },\n\n // @todo переименовать в Express?\n Server: {\n factory: createToken<() => express.Application>('server/factory'),\n Handlers: {\n healthCheck: createToken<express.Handler>('handler/health-check'),\n },\n Middleware: {\n request: createToken<express.Handler>('middleware/request'),\n log: createToken<express.Handler>('middleware/log'),\n tracing: createToken<express.Handler>('middleware/tracing'),\n metrics: createToken<express.Handler>('middleware/metrics'),\n error: createToken<express.ErrorRequestHandler>('middleware/error'),\n },\n },\n\n // @todo переименовать в ExpressHandler?\n Handler: {\n main: createToken<() => void>('handler/main'),\n context: createToken<HandlerContext>('handler/context'),\n Request: {\n specificParams: createToken<Record<string, unknown>>('request/specific-params'),\n },\n Response: {\n specificExtras: createToken<SpecificExtras>('response/specific-extras'),\n },\n Page: {\n assets: createToken<PageAssets | (() => PageAssets | Promise<PageAssets>)>('page/assets'),\n helmet: createToken<ElementType<{ children: ReactNode }>>('page/helmet'),\n render: createToken<() => JSX.Element | Promise<JSX.Element>>('page/render'),\n },\n },\n },\n\n // SSR\n SsrBridge: {\n clientSide: createToken<BridgeClientSide<unknown>>('ssr-bridge/client-side'),\n serverSide: createToken<BridgeServerSide>('ssr-bridge/server-side'),\n },\n} as const;\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,eAAM;;AAElC;;AAkBA,OAAO,MAAMC,UAAU,GAAG;EACxB;EACAC,MAAM,EAAE;IACNC,MAAM,EAAEH,WAAW,CAAe,eAAe,CAAC;IAClDI,IAAI,EAAEJ,WAAW,CAAa,aAAa;EAC7C,CAAC;EAED;EACAK,KAAK,EAAEL,WAAW,CAAQ,OAAO,CAAC;EAElC;EACAM,MAAM,EAAEN,WAAW,CAAS,QAAQ,CAAC;EAErC;EACA;EACAO,cAAc,EAAEP,WAAW,CAAyB,iBAAiB,CAAC;EAEtE;EACAQ,OAAO,EAAE;IACPC,MAAM,EAAET,WAAW,CAAS,gBAAgB,CAAC;IAC7CU,YAAY,EAAEV,WAAW,CAAe,uBAAuB,CAAC;IAChEW,cAAc,EAAEX,WAAW,CAAsB,yBAAyB,CAAC;IAE3E;IACAY,sBAAsB,EAAEZ,WAAW,CAAW,kBAAkB;EAClE,CAAC;EAED;EACAa,OAAO,EAAE;IACPC,OAAO,EAAEd,WAAW,CAAsB,kBAAkB;EAC9D,CAAC;EAED;EACAe,IAAI,EAAE;IACJC,GAAG,EAAE;MACHC,UAAU,EAAEjB,WAAW,CAA6B,sBAAsB;IAC5E,CAAC;IAED;IACAkB,MAAM,EAAE;MACNC,OAAO,EACLnB,WAAW,CAA2D,gBAAgB,CAAC;MACzFoB,UAAU,EAAE;QACVC,GAAG,EAAE;UACHC,OAAO,EAAEtB,WAAW,CAA2B,aAAa;QAC9D;MACF;IACF,CAAC;IAED;IACAuB,MAAM,EAAE;MACNJ,OAAO,EAAEnB,WAAW,CAA4B,gBAAgB,CAAC;MACjEwB,QAAQ,EAAE;QACRC,WAAW,EAAEzB,WAAW,CAAkB,sBAAsB;MAClE,CAAC;MACDoB,UAAU,EAAE;QACVM,OAAO,EAAE1B,WAAW,CAAkB,oBAAoB,CAAC;QAC3D2B,GAAG,EAAE3B,WAAW,CAAkB,gBAAgB,CAAC;QACnD4B,OAAO,EAAE5B,WAAW,CAAkB,oBAAoB,CAAC;QAC3D6B,OAAO,EAAE7B,WAAW,CAAkB,oBAAoB,CAAC;QAC3D8B,KAAK,EAAE9B,WAAW,CAA8B,kBAAkB;MACpE;IACF,CAAC;IAED;IACA+B,OAAO,EAAE;MACPC,IAAI,EAAEhC,WAAW,CAAa,cAAc,CAAC;MAC7CiC,OAAO,EAAEjC,WAAW,CAAiB,iBAAiB,CAAC;MACvDkC,OAAO,EAAE;QACPC,cAAc,EAAEnC,WAAW,CAA0B,yBAAyB;MAChF,CAAC;MACDoC,QAAQ,EAAE;QACRC,cAAc,EAAErC,WAAW,CAAiB,0BAA0B;MACxE,CAAC;MACDsC,IAAI,EAAE;QACJC,MAAM,EAAEvC,WAAW,CAAwD,aAAa,CAAC;QACzFwC,MAAM,EAAExC,WAAW,CAAuC,aAAa,CAAC;QACxEyC,MAAM,EAAEzC,WAAW,CAA2C,aAAa;MAC7E;IACF;EACF,CAAC;EAED;EACA0C,SAAS,EAAE;IACTC,UAAU,EAAE3C,WAAW,CAA4B,wBAAwB,CAAC;IAC5E4C,UAAU,EAAE5C,WAAW,CAAmB,wBAAwB;EACpE;AACF,CAAU"}
1
+ {"version":3,"file":"tokens.js","names":["createToken","KnownToken","Config","source","base","cache","logger","sagaMiddleware","Tracing","tracer","spanExporter","tracerProvider","tracerProviderResource","Metrics","httpApp","Http","Api","knownHosts","Client","factory","Middleware","Log","handler","Server","Handlers","healthCheck","request","log","tracing","metrics","error","Handler","main","context","Request","specificParams","Response","specificExtras","Page","assets","helmet","render","SsrBridge","clientSide","serverSide"],"sources":["../../src/tokens.ts"],"sourcesContent":["import { createToken } from './di';\n\n// ВАЖНО: чтобы токенами можно было пользоваться независимо от среды исполнения - импортировать надо только типы\nimport type * as express from 'express';\nimport type { ConfigSource, BaseConfig } from './config/types';\nimport type { Logger } from './log/types';\nimport type { Cache } from './cache/types';\nimport type { LogMiddlewareHandlerInit } from './utils/axios/middleware/log';\nimport type { SagaExtendedMiddleware } from './utils/redux-saga';\nimport type { BridgeClientSide, BridgeServerSide } from './utils/ssr';\nimport type { Tracer } from '@opentelemetry/api';\nimport type { BasicTracerProvider, SpanExporter } from '@opentelemetry/sdk-trace-base';\nimport type { Resource } from '@opentelemetry/resources';\nimport type { ElementType, ReactNode } from 'react';\nimport type { KnownHttpApiKey, PageAssets, StrictMap } from './preset/isomorphic/types';\nimport type { HandlerContext } from './preset/node/types';\nimport type { SpecificExtras } from './preset/node/handler/utils';\nimport type { CreateAxiosDefaults } from 'axios';\nimport type { AxiosInstanceWrapper } from 'middleware-axios';\n\nexport const KnownToken = {\n // config\n Config: {\n source: createToken<ConfigSource>('config/source'),\n base: createToken<BaseConfig>('config/base'),\n },\n\n // cache\n cache: createToken<Cache>('cache'),\n\n // log\n logger: createToken<Logger>('logger'),\n\n // saga runner\n // @todo переименовать в Redux.Middleware.saga?\n sagaMiddleware: createToken<SagaExtendedMiddleware>('saga-middleware'),\n\n // tracing\n Tracing: {\n tracer: createToken<Tracer>('tracing/tracer'),\n spanExporter: createToken<SpanExporter>('tracing/span-exporter'),\n tracerProvider: createToken<BasicTracerProvider>('tracing/tracer-provider'),\n\n // @todo перенести в KnownToken.Telemetry.Resource?\n tracerProviderResource: createToken<Resource>('tracing/resource'),\n },\n\n // metrics\n Metrics: {\n httpApp: createToken<express.Application>('metrics/http-app'),\n },\n\n // http\n Http: {\n Api: {\n knownHosts: createToken<StrictMap<KnownHttpApiKey>>('http/api/known-hosts'),\n },\n\n // @todo переименовать в Axios?\n Client: {\n factory:\n createToken<(config?: CreateAxiosDefaults) => AxiosInstanceWrapper>('client/factory'),\n Middleware: {\n Log: {\n handler: createToken<LogMiddlewareHandlerInit>('log/handler'),\n },\n },\n },\n\n // @todo переименовать в Express?\n Server: {\n factory: createToken<() => express.Application>('server/factory'),\n Handlers: {\n healthCheck: createToken<express.Handler>('handler/health-check'),\n },\n Middleware: {\n request: createToken<express.Handler>('middleware/request'),\n log: createToken<express.Handler>('middleware/log'),\n tracing: createToken<express.Handler>('middleware/tracing'),\n metrics: createToken<express.Handler>('middleware/metrics'),\n error: createToken<express.ErrorRequestHandler>('middleware/error'),\n },\n },\n\n // @todo переименовать в ExpressHandler?\n Handler: {\n main: createToken<() => void>('handler/main'),\n context: createToken<HandlerContext>('handler/context'),\n Request: {\n specificParams: createToken<Record<string, unknown>>('request/specific-params'),\n },\n Response: {\n specificExtras: createToken<SpecificExtras>('response/specific-extras'),\n },\n Page: {\n assets: createToken<PageAssets | (() => PageAssets | Promise<PageAssets>)>('page/assets'),\n helmet: createToken<ElementType<{ children: ReactNode }>>('page/helmet'),\n render: createToken<() => JSX.Element | Promise<JSX.Element>>('page/render'),\n },\n },\n },\n\n // SSR\n SsrBridge: {\n clientSide: createToken<BridgeClientSide<unknown>>('ssr-bridge/client-side'),\n serverSide: createToken<BridgeServerSide>('ssr-bridge/server-side'),\n },\n} as const;\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,eAAM;;AAElC;;AAkBA,OAAO,MAAMC,UAAU,GAAG;EACxB;EACAC,MAAM,EAAE;IACNC,MAAM,EAAEH,WAAW,CAAe,eAAe,CAAC;IAClDI,IAAI,EAAEJ,WAAW,CAAa,aAAa;EAC7C,CAAC;EAED;EACAK,KAAK,EAAEL,WAAW,CAAQ,OAAO,CAAC;EAElC;EACAM,MAAM,EAAEN,WAAW,CAAS,QAAQ,CAAC;EAErC;EACA;EACAO,cAAc,EAAEP,WAAW,CAAyB,iBAAiB,CAAC;EAEtE;EACAQ,OAAO,EAAE;IACPC,MAAM,EAAET,WAAW,CAAS,gBAAgB,CAAC;IAC7CU,YAAY,EAAEV,WAAW,CAAe,uBAAuB,CAAC;IAChEW,cAAc,EAAEX,WAAW,CAAsB,yBAAyB,CAAC;IAE3E;IACAY,sBAAsB,EAAEZ,WAAW,CAAW,kBAAkB;EAClE,CAAC;EAED;EACAa,OAAO,EAAE;IACPC,OAAO,EAAEd,WAAW,CAAsB,kBAAkB;EAC9D,CAAC;EAED;EACAe,IAAI,EAAE;IACJC,GAAG,EAAE;MACHC,UAAU,EAAEjB,WAAW,CAA6B,sBAAsB;IAC5E,CAAC;IAED;IACAkB,MAAM,EAAE;MACNC,OAAO,EACLnB,WAAW,CAAyD,gBAAgB,CAAC;MACvFoB,UAAU,EAAE;QACVC,GAAG,EAAE;UACHC,OAAO,EAAEtB,WAAW,CAA2B,aAAa;QAC9D;MACF;IACF,CAAC;IAED;IACAuB,MAAM,EAAE;MACNJ,OAAO,EAAEnB,WAAW,CAA4B,gBAAgB,CAAC;MACjEwB,QAAQ,EAAE;QACRC,WAAW,EAAEzB,WAAW,CAAkB,sBAAsB;MAClE,CAAC;MACDoB,UAAU,EAAE;QACVM,OAAO,EAAE1B,WAAW,CAAkB,oBAAoB,CAAC;QAC3D2B,GAAG,EAAE3B,WAAW,CAAkB,gBAAgB,CAAC;QACnD4B,OAAO,EAAE5B,WAAW,CAAkB,oBAAoB,CAAC;QAC3D6B,OAAO,EAAE7B,WAAW,CAAkB,oBAAoB,CAAC;QAC3D8B,KAAK,EAAE9B,WAAW,CAA8B,kBAAkB;MACpE;IACF,CAAC;IAED;IACA+B,OAAO,EAAE;MACPC,IAAI,EAAEhC,WAAW,CAAa,cAAc,CAAC;MAC7CiC,OAAO,EAAEjC,WAAW,CAAiB,iBAAiB,CAAC;MACvDkC,OAAO,EAAE;QACPC,cAAc,EAAEnC,WAAW,CAA0B,yBAAyB;MAChF,CAAC;MACDoC,QAAQ,EAAE;QACRC,cAAc,EAAErC,WAAW,CAAiB,0BAA0B;MACxE,CAAC;MACDsC,IAAI,EAAE;QACJC,MAAM,EAAEvC,WAAW,CAAwD,aAAa,CAAC;QACzFwC,MAAM,EAAExC,WAAW,CAAuC,aAAa,CAAC;QACxEyC,MAAM,EAAEzC,WAAW,CAA2C,aAAa;MAC7E;IACF;EACF,CAAC;EAED;EACA0C,SAAS,EAAE;IACTC,UAAU,EAAE3C,WAAW,CAA4B,wBAAwB,CAAC;IAC5E4C,UAAU,EAAE5C,WAAW,CAAmB,wBAAwB;EACpE;AACF,CAAU"}
@@ -1,8 +1,8 @@
1
1
  import type { AxiosDefaults, AxiosRequestConfig } from 'axios';
2
2
  import type { Middleware } from 'middleware-axios';
3
+ import type { Request } from 'express';
3
4
  import { Context, Tracer } from '@opentelemetry/api';
4
5
  import { BaseConfig } from '../../../../../config';
5
- import { Request } from 'express';
6
6
  /**
7
7
  * Возвращает новый middleware для трассировки исходящих запросов.
8
8
  * @param tracer Трейсер.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/preset/node/node/utils/http-client/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAkB,MAAM,oBAAoB,CAAC;AAErE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAIlC;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAqCvF;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,aAAa,GACtB;IACD,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAYA;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAIrE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAyB9F"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/preset/node/node/utils/http-client/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAkB,MAAM,oBAAoB,CAAC;AAErE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAInD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,CAqCvF;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,aAAa,GACtB;IACD,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAYA;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAIrE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAyB9F"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/preset/web/providers/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAsB,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,MAAM,EAAgB,MAAM,cAAc,CAAC;AAGpD,OAAO,EAAE,gBAAgB,EAAa,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAI5C;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,YAAY,CAOlD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAqBtD;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAInF;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC,eAAe,CAAC,CAYrF;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,aAGd,mBAAmB,qDAS7D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/preset/web/providers/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAsB,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,MAAM,EAAgB,MAAM,cAAc,CAAC;AAGpD,OAAO,EAAE,gBAAgB,EAAa,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAI5C;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,YAAY,CAOlD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAqBtD;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAInF;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC,eAAe,CAAC,CAYrF;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,aAGvC,mBAAmB,qDASpC"}
@@ -37,7 +37,7 @@ export declare const KnownToken: {
37
37
  readonly knownHosts: import("./di").Token<StrictMap<KnownHttpApiKey>>;
38
38
  };
39
39
  readonly Client: {
40
- readonly factory: import("./di").Token<(defaults?: CreateAxiosDefaults) => AxiosInstanceWrapper>;
40
+ readonly factory: import("./di").Token<(config?: CreateAxiosDefaults) => AxiosInstanceWrapper>;
41
41
  readonly Middleware: {
42
42
  readonly Log: {
43
43
  readonly handler: import("./di").Token<LogMiddlewareHandlerInit>;
@@ -1 +1 @@
1
- {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/tokens.ts"],"names":[],"mappings":";AAGA,OAAO,KAAK,KAAK,OAAO,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAgB,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AACvF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACxF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;+DAyCS,mBAAmB,KAAK,oBAAoB;;;;;;;;yDAU3C,QAAQ,WAAW;;;;;;;;;;;;;sDAetB,IAAI;;;;;;;;;0EASc,UAAU,GAAG,QAAQ,UAAU,CAAC;;8BAC5B,SAAS;;4DAC3B,WAAW,GAAG,QAAQ,WAAW,CAAC;;;;;;;;CAU1D,CAAC"}
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/tokens.ts"],"names":[],"mappings":";AAGA,OAAO,KAAK,KAAK,OAAO,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAgB,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AACvF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACxF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AACjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE7D,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;6DAyCO,mBAAmB,KAAK,oBAAoB;;;;;;;;yDAUzC,QAAQ,WAAW;;;;;;;;;;;;;sDAetB,IAAI;;;;;;;;;0EASc,UAAU,GAAG,QAAQ,UAAU,CAAC;;8BAC5B,SAAS;;4DAC3B,WAAW,GAAG,QAAQ,WAAW,CAAC;;;;;;;;CAU1D,CAAC"}
package/http/package.json CHANGED
@@ -1 +1,6 @@
1
- {"name":"@sima-land/isomorph/http","types":"../dist/types/http/index.d.ts","main":"../dist/cjs/http/index.js","module":"../dist/esm/http/index.js"}
1
+ {
2
+ "name": "@sima-land/isomorph/http",
3
+ "types": "../dist/types/http/index.d.ts",
4
+ "main": "../dist/cjs/http/index.js",
5
+ "module": "../dist/esm/http/index.js"
6
+ }
package/log/package.json CHANGED
@@ -1 +1,6 @@
1
- {"name":"@sima-land/isomorph/log","types":"../dist/types/log/index.d.ts","main":"../dist/cjs/log/index.js","module":"../dist/esm/log/index.js"}
1
+ {
2
+ "name": "@sima-land/isomorph/log",
3
+ "types": "../dist/types/log/index.d.ts",
4
+ "main": "../dist/cjs/log/index.js",
5
+ "module": "../dist/esm/log/index.js"
6
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sima-land/isomorph",
3
- "version": "11.0.0-alpha.39",
3
+ "version": "11.0.0-alpha.40",
4
4
  "description": "Tiny framework for fast start frontend microservices",
5
5
  "author": "www.sima-land.ru team",
6
6
  "license": "Apache-2.0",
@@ -182,8 +182,8 @@
182
182
  "scripts": {
183
183
  "type-check": "tsc -p . --noEmit",
184
184
  "build:before": "rm -rf dist cache config di http log preset utils",
185
- "build:esm": "babel src --config-file ./babel.config.esm.js -d dist/esm --source-maps --extensions '.ts,.tsx' --ignore='**/__test__/**/*' --ignore='**/*.d.ts' && echo '{ \"type\": \"module\" }' > dist/esm/package.json",
186
- "build:cjs": "babel src --config-file ./babel.config.cjs.js -d dist/cjs --source-maps --extensions '.ts,.tsx' --ignore='**/__test__/**/*' --ignore='**/*.d.ts' && echo '{ \"type\": \"commonjs\" }' > dist/cjs/package.json",
185
+ "build:esm": "babel src --config-file ./babel.config.esm.js -d dist/esm --source-maps --extensions '.ts,.tsx' --ignore='**/__test__/**/*' --ignore='**/*.d.ts' && node scripts/make-pkg-esm.mjs",
186
+ "build:cjs": "babel src --config-file ./babel.config.cjs.js -d dist/cjs --source-maps --extensions '.ts,.tsx' --ignore='**/__test__/**/*' --ignore='**/*.d.ts' && node scripts/make-pkg-cjs.mjs",
187
187
  "build:types": "tsc --project tsconfig.types.json",
188
188
  "post-build-esm": "node scripts/post-build-esm.mjs",
189
189
  "post-build-pkg": "node scripts/post-build-pkg.mjs",
@@ -1 +1,6 @@
1
- {"name":"@sima-land/isomorph/preset/isomorphic","types":"../../dist/types/preset/isomorphic/index.d.ts","main":"../../dist/cjs/preset/isomorphic/index.js","module":"../../dist/esm/preset/isomorphic/index.js"}
1
+ {
2
+ "name": "@sima-land/isomorph/preset/isomorphic",
3
+ "types": "../../dist/types/preset/isomorphic/index.d.ts",
4
+ "main": "../../dist/cjs/preset/isomorphic/index.js",
5
+ "module": "../../dist/esm/preset/isomorphic/index.js"
6
+ }
@@ -1 +1,6 @@
1
- {"name":"@sima-land/isomorph/preset/isomorphic/providers","types":"../../../dist/types/preset/isomorphic/providers/index.d.ts","main":"../../../dist/cjs/preset/isomorphic/providers/index.js","module":"../../../dist/esm/preset/isomorphic/providers/index.js"}
1
+ {
2
+ "name": "@sima-land/isomorph/preset/isomorphic/providers",
3
+ "types": "../../../dist/types/preset/isomorphic/providers/index.d.ts",
4
+ "main": "../../../dist/cjs/preset/isomorphic/providers/index.js",
5
+ "module": "../../../dist/esm/preset/isomorphic/providers/index.js"
6
+ }
@@ -1 +1,6 @@
1
- {"name":"@sima-land/isomorph/preset/isomorphic/utils","types":"../../../dist/types/preset/isomorphic/utils/index.d.ts","main":"../../../dist/cjs/preset/isomorphic/utils/index.js","module":"../../../dist/esm/preset/isomorphic/utils/index.js"}
1
+ {
2
+ "name": "@sima-land/isomorph/preset/isomorphic/utils",
3
+ "types": "../../../dist/types/preset/isomorphic/utils/index.d.ts",
4
+ "main": "../../../dist/cjs/preset/isomorphic/utils/index.js",
5
+ "module": "../../../dist/esm/preset/isomorphic/utils/index.js"
6
+ }
@@ -1 +1,6 @@
1
- {"name":"@sima-land/isomorph/preset/node/handler/providers","types":"../../../../dist/types/preset/node/handler/providers/index.d.ts","main":"../../../../dist/cjs/preset/node/handler/providers/index.js","module":"../../../../dist/esm/preset/node/handler/providers/index.js"}
1
+ {
2
+ "name": "@sima-land/isomorph/preset/node/handler/providers",
3
+ "types": "../../../../dist/types/preset/node/handler/providers/index.d.ts",
4
+ "main": "../../../../dist/cjs/preset/node/handler/providers/index.js",
5
+ "module": "../../../../dist/esm/preset/node/handler/providers/index.js"
6
+ }
@@ -1 +1,6 @@
1
- {"name":"@sima-land/isomorph/preset/node/handler/utils","types":"../../../../dist/types/preset/node/handler/utils/index.d.ts","main":"../../../../dist/cjs/preset/node/handler/utils/index.js","module":"../../../../dist/esm/preset/node/handler/utils/index.js"}
1
+ {
2
+ "name": "@sima-land/isomorph/preset/node/handler/utils",
3
+ "types": "../../../../dist/types/preset/node/handler/utils/index.d.ts",
4
+ "main": "../../../../dist/cjs/preset/node/handler/utils/index.js",
5
+ "module": "../../../../dist/esm/preset/node/handler/utils/index.js"
6
+ }
@@ -1 +1,6 @@
1
- {"name":"@sima-land/isomorph/preset/node/node/providers","types":"../../../../dist/types/preset/node/node/providers/index.d.ts","main":"../../../../dist/cjs/preset/node/node/providers/index.js","module":"../../../../dist/esm/preset/node/node/providers/index.js"}
1
+ {
2
+ "name": "@sima-land/isomorph/preset/node/node/providers",
3
+ "types": "../../../../dist/types/preset/node/node/providers/index.d.ts",
4
+ "main": "../../../../dist/cjs/preset/node/node/providers/index.js",
5
+ "module": "../../../../dist/esm/preset/node/node/providers/index.js"
6
+ }
@@ -1 +1,6 @@
1
- {"name":"@sima-land/isomorph/preset/node/node/utils","types":"../../../../dist/types/preset/node/node/utils/index.d.ts","main":"../../../../dist/cjs/preset/node/node/utils/index.js","module":"../../../../dist/esm/preset/node/node/utils/index.js"}
1
+ {
2
+ "name": "@sima-land/isomorph/preset/node/node/utils",
3
+ "types": "../../../../dist/types/preset/node/node/utils/index.d.ts",
4
+ "main": "../../../../dist/cjs/preset/node/node/utils/index.js",
5
+ "module": "../../../../dist/esm/preset/node/node/utils/index.js"
6
+ }
@@ -1 +1,6 @@
1
- {"name":"@sima-land/isomorph/preset/node","types":"../../dist/types/preset/node/index.d.ts","main":"../../dist/cjs/preset/node/index.js","module":"../../dist/esm/preset/node/index.js"}
1
+ {
2
+ "name": "@sima-land/isomorph/preset/node",
3
+ "types": "../../dist/types/preset/node/index.d.ts",
4
+ "main": "../../dist/cjs/preset/node/index.js",
5
+ "module": "../../dist/esm/preset/node/index.js"
6
+ }
@@ -1 +1,6 @@
1
- {"name":"@sima-land/isomorph/preset/web","types":"../../dist/types/preset/web/index.d.ts","main":"../../dist/cjs/preset/web/index.js","module":"../../dist/esm/preset/web/index.js"}
1
+ {
2
+ "name": "@sima-land/isomorph/preset/web",
3
+ "types": "../../dist/types/preset/web/index.d.ts",
4
+ "main": "../../dist/cjs/preset/web/index.js",
5
+ "module": "../../dist/esm/preset/web/index.js"
6
+ }
@@ -1 +1,6 @@
1
- {"name":"@sima-land/isomorph/preset/web/providers","types":"../../../dist/types/preset/web/providers/index.d.ts","main":"../../../dist/cjs/preset/web/providers/index.js","module":"../../../dist/esm/preset/web/providers/index.js"}
1
+ {
2
+ "name": "@sima-land/isomorph/preset/web/providers",
3
+ "types": "../../../dist/types/preset/web/providers/index.d.ts",
4
+ "main": "../../../dist/cjs/preset/web/providers/index.js",
5
+ "module": "../../../dist/esm/preset/web/providers/index.js"
6
+ }
@@ -93,7 +93,7 @@ export function provideHandlerMain(resolve: Resolve): VoidFunction {
93
93
  return result;
94
94
  };
95
95
 
96
- return async function main() {
96
+ return async () => {
97
97
  try {
98
98
  const assets = await getAssets();
99
99
  const meta = extras.getMeta();
@@ -1,9 +1,9 @@
1
1
  import type { AxiosDefaults, AxiosRequestConfig } from 'axios';
2
2
  import type { Middleware } from 'middleware-axios';
3
+ import type { Request } from 'express';
3
4
  import { Context, Tracer, SpanStatusCode } from '@opentelemetry/api';
4
5
  import { SemanticAttributes } from '@opentelemetry/semantic-conventions';
5
6
  import { BaseConfig } from '../../../../../config';
6
- import { Request } from 'express';
7
7
  import { getClientIp } from '../http-server';
8
8
  import { displayUrl } from '../../../../isomorphic/utils';
9
9
 
@@ -96,7 +96,7 @@ export function provideKnownHttpApiHosts(resolve: Resolve): StrictMap<KnownHttpA
96
96
  export function provideHttpClientFactory(resolve: Resolve) {
97
97
  const logHandler = resolve(KnownToken.Http.Client.Middleware.Log.handler);
98
98
 
99
- return function createHttpClient(config: CreateAxiosDefaults = {}) {
99
+ return (config: CreateAxiosDefaults = {}) => {
100
100
  // @todo убрать as any
101
101
  const client = create(config as any);
102
102
 
package/src/tokens.ts CHANGED
@@ -59,7 +59,7 @@ export const KnownToken = {
59
59
  // @todo переименовать в Axios?
60
60
  Client: {
61
61
  factory:
62
- createToken<(defaults?: CreateAxiosDefaults) => AxiosInstanceWrapper>('client/factory'),
62
+ createToken<(config?: CreateAxiosDefaults) => AxiosInstanceWrapper>('client/factory'),
63
63
  Middleware: {
64
64
  Log: {
65
65
  handler: createToken<LogMiddlewareHandlerInit>('log/handler'),
@@ -1 +1,6 @@
1
- {"name":"@sima-land/isomorph/utils/axios","types":"../../dist/types/utils/axios/index.d.ts","main":"../../dist/cjs/utils/axios/index.js","module":"../../dist/esm/utils/axios/index.js"}
1
+ {
2
+ "name": "@sima-land/isomorph/utils/axios",
3
+ "types": "../../dist/types/utils/axios/index.d.ts",
4
+ "main": "../../dist/cjs/utils/axios/index.js",
5
+ "module": "../../dist/esm/utils/axios/index.js"
6
+ }
@@ -1 +1,6 @@
1
- {"name":"@sima-land/isomorph/utils/express","types":"../../dist/types/utils/express/index.d.ts","main":"../../dist/cjs/utils/express/index.js","module":"../../dist/esm/utils/express/index.js"}
1
+ {
2
+ "name": "@sima-land/isomorph/utils/express",
3
+ "types": "../../dist/types/utils/express/index.d.ts",
4
+ "main": "../../dist/cjs/utils/express/index.js",
5
+ "module": "../../dist/esm/utils/express/index.js"
6
+ }
@@ -1 +1,6 @@
1
- {"name":"@sima-land/isomorph/utils","types":"../dist/types/utils/index.d.ts","main":"../dist/cjs/utils/index.js","module":"../dist/esm/utils/index.js"}
1
+ {
2
+ "name": "@sima-land/isomorph/utils",
3
+ "types": "../dist/types/utils/index.d.ts",
4
+ "main": "../dist/cjs/utils/index.js",
5
+ "module": "../dist/esm/utils/index.js"
6
+ }
@@ -1 +1,6 @@
1
- {"name":"@sima-land/isomorph/utils/react","types":"../../dist/types/utils/react/index.d.ts","main":"../../dist/cjs/utils/react/index.js","module":"../../dist/esm/utils/react/index.js"}
1
+ {
2
+ "name": "@sima-land/isomorph/utils/react",
3
+ "types": "../../dist/types/utils/react/index.d.ts",
4
+ "main": "../../dist/cjs/utils/react/index.js",
5
+ "module": "../../dist/esm/utils/react/index.js"
6
+ }
@@ -1 +1,6 @@
1
- {"name":"@sima-land/isomorph/utils/redux","types":"../../dist/types/utils/redux/index.d.ts","main":"../../dist/cjs/utils/redux/index.js","module":"../../dist/esm/utils/redux/index.js"}
1
+ {
2
+ "name": "@sima-land/isomorph/utils/redux",
3
+ "types": "../../dist/types/utils/redux/index.d.ts",
4
+ "main": "../../dist/cjs/utils/redux/index.js",
5
+ "module": "../../dist/esm/utils/redux/index.js"
6
+ }
@@ -1 +1,6 @@
1
- {"name":"@sima-land/isomorph/utils/redux-saga","types":"../../dist/types/utils/redux-saga/index.d.ts","main":"../../dist/cjs/utils/redux-saga/index.js","module":"../../dist/esm/utils/redux-saga/index.js"}
1
+ {
2
+ "name": "@sima-land/isomorph/utils/redux-saga",
3
+ "types": "../../dist/types/utils/redux-saga/index.d.ts",
4
+ "main": "../../dist/cjs/utils/redux-saga/index.js",
5
+ "module": "../../dist/esm/utils/redux-saga/index.js"
6
+ }
@@ -1 +1,6 @@
1
- {"name":"@sima-land/isomorph/utils/ssr","types":"../../dist/types/utils/ssr/index.d.ts","main":"../../dist/cjs/utils/ssr/index.js","module":"../../dist/esm/utils/ssr/index.js"}
1
+ {
2
+ "name": "@sima-land/isomorph/utils/ssr",
3
+ "types": "../../dist/types/utils/ssr/index.d.ts",
4
+ "main": "../../dist/cjs/utils/ssr/index.js",
5
+ "module": "../../dist/esm/utils/ssr/index.js"
6
+ }
@@ -1 +1,6 @@
1
- {"name":"@sima-land/isomorph/utils/web/analytics","types":"../../../dist/types/utils/web/analytics/index.d.ts","main":"../../../dist/cjs/utils/web/analytics/index.js","module":"../../../dist/esm/utils/web/analytics/index.js"}
1
+ {
2
+ "name": "@sima-land/isomorph/utils/web/analytics",
3
+ "types": "../../../dist/types/utils/web/analytics/index.d.ts",
4
+ "main": "../../../dist/cjs/utils/web/analytics/index.js",
5
+ "module": "../../../dist/esm/utils/web/analytics/index.js"
6
+ }
@@ -1 +1,6 @@
1
- {"name":"@sima-land/isomorph/utils/webpack","types":"../../dist/types/utils/webpack/index.d.ts","main":"../../dist/cjs/utils/webpack/index.js","module":"../../dist/esm/utils/webpack/index.js"}
1
+ {
2
+ "name": "@sima-land/isomorph/utils/webpack",
3
+ "types": "../../dist/types/utils/webpack/index.d.ts",
4
+ "main": "../../dist/cjs/utils/webpack/index.js",
5
+ "module": "../../dist/esm/utils/webpack/index.js"
6
+ }