Skip to content

Commit

Permalink
#38
Browse files Browse the repository at this point in the history
- preset/web: модуль провайдеров разбит на отдельные модули по провайдерам (patch)
  • Loading branch information
krutoo committed Mar 12, 2024
1 parent 1155dd6 commit 782b8bb
Show file tree
Hide file tree
Showing 8 changed files with 145 additions and 139 deletions.
16 changes: 7 additions & 9 deletions src/preset/web/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,12 @@ import {
provideAxiosLogHandler,
provideReduxMiddlewareSaga,
} from '../isomorphic/providers';
import {
provideConfigSource,
provideLogger,
provideKnownHttpApiHosts,
provideFetchMiddleware,
provideAxiosMiddleware,
provideBridgeClientSide,
} from './providers';
import { provideConfigSource } from './providers/config-source';
import { provideLogger } from './providers/logger';
import { provideKnownHttpApiHosts } from './providers/known-http-api-hosts';
import { provideFetchMiddleware } from './providers/fetch-middleware';
import { provideAxiosMiddleware } from './providers/axios-middleware';
import { provideSsrBridgeClientSide } from './providers/ssr-bridge-client-side';

/**
* Возвращает preset с зависимостями для frontend-микросервисов в браузере.
Expand All @@ -33,7 +31,7 @@ export function PresetWeb(customize?: PresetTuner): Preset {
preset.set(KnownToken.Axios.factory, provideAxiosFactory);
preset.set(KnownToken.Axios.middleware, provideAxiosMiddleware);
preset.set(KnownToken.Axios.Middleware.Log.handler, provideAxiosLogHandler);
preset.set(KnownToken.SsrBridge.clientSide, provideBridgeClientSide);
preset.set(KnownToken.SsrBridge.clientSide, provideSsrBridgeClientSide);
preset.set(KnownToken.Http.Api.knownHosts, provideKnownHttpApiHosts);
preset.set(KnownToken.Http.fetch, provideFetch);
preset.set(KnownToken.Http.Fetch.middleware, provideFetchMiddleware);
Expand Down
15 changes: 15 additions & 0 deletions src/preset/web/providers/axios-middleware.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import { Resolve } from '../../../di';
import { KnownToken } from '../../../tokens';
import { HttpStatus } from '../../isomorphic/utils/http-status';
import { logMiddleware } from '../../../utils/axios';

/**
* Провайдер фабрики http-клиентов.
* @param resolve Функция для получения зависимости по токену.
* @return Фабрика.
*/
export function provideAxiosMiddleware(resolve: Resolve) {
const logHandler = resolve(KnownToken.Axios.Middleware.Log.handler);

return [HttpStatus.axiosMiddleware(), logMiddleware(logHandler)];
}
14 changes: 14 additions & 0 deletions src/preset/web/providers/config-source.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { ConfigSource, createConfigSource } from '../../../config';

/**
* Провайдер источника конфигурации.
* @return Источник конфигурации.
*/
export function provideConfigSource(): ConfigSource {
// ВАЖНО: по умолчанию рассчитываем на process.env который предоставляется сборщиком (например webpack)
if (typeof process !== 'undefined' && process.env) {
return createConfigSource(process.env);
}

return createConfigSource({});
}
16 changes: 16 additions & 0 deletions src/preset/web/providers/fetch-middleware.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { Resolve } from '../../../di';
import { KnownToken } from '../../../tokens';
import { FetchLogging } from '../../isomorphic/utils/fetch-logging';
import { log } from '../../../http';

/**
* Провайдер промежуточных слоев для fetch.
* @param resolve Функция для получения зависимости по токену.
* @return Фабрика.
*/
export function provideFetchMiddleware(resolve: Resolve) {
const logger = resolve(KnownToken.logger);

// ВАЖНО: если появятся еще промежуточные слои - не забыть разделить логирование на 2 части (ошибки и данные)
return [log(new FetchLogging(logger))];
}
130 changes: 0 additions & 130 deletions src/preset/web/providers/index.ts

This file was deleted.

24 changes: 24 additions & 0 deletions src/preset/web/providers/known-http-api-hosts.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import { Resolve } from '../../../di';
import { KnownToken } from '../../../tokens';
import { KnownHttpApiKey } from '../../isomorphic/types';
import { HttpApiHostPool } from '../../isomorphic/utils/http-api-host-pool';

/**
* Провайдер известных http-хостов.
* @param resolve Функция для получения зависимости по токену.
* @return Пул известных http-хостов.
*/
export function provideKnownHttpApiHosts(resolve: Resolve): HttpApiHostPool<KnownHttpApiKey> {
const source = resolve(KnownToken.Config.source);

return new HttpApiHostPool<KnownHttpApiKey>(
{
ilium: 'PUBLIC_API_URL_ILIUM',
simaV3: 'PUBLIC_API_URL_SIMALAND_V3',
simaV4: 'PUBLIC_API_URL_SIMALAND_V4',
simaV6: 'PUBLIC_API_URL_SIMALAND_V6',
chponkiV2: 'PUBLIC_API_URL_CHPONKI_V2',
},
source,
);
}
55 changes: 55 additions & 0 deletions src/preset/web/providers/logger.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import {
BrowserClient,
Hub,
defaultIntegrations,
defaultStackParser,
makeFetchTransport,
} from '@sentry/browser';
import { Resolve } from '../../../di';
import { Logger, createLogger } from '../../../log';
import { KnownToken } from '../../../tokens';
import { createSentryHandler } from '../../../log/handler/sentry';

/**
* Провайдер Logger'а.
* @param resolve Функция для получения зависимости по токену.
* @return Logger.
*/
export function provideLogger(resolve: Resolve): Logger {
const source = resolve(KnownToken.Config.source);
const config = resolve(KnownToken.Config.base);

const client = new BrowserClient({
transport: makeFetchTransport,
stackParser: defaultStackParser,
dsn: source.require('PUBLIC_SENTRY_DSN'),
release: source.require('SENTRY_RELEASE'),
environment: source.require('PUBLIC_SENTRY_ENVIRONMENT'),
integrations: [...defaultIntegrations],
});

const hub = new Hub(client);

hub.setTag('url', window.location.href);

const logger = createLogger();

logger.subscribe(createSentryHandler(hub));

if (config.env === 'development') {
logger.subscribe(event => {
switch (event.type) {
case 'debug':
// eslint-disable-next-line no-console
console.debug(event.data);
break;
case 'error':
// eslint-disable-next-line no-console
console.error(event.data);
break;
}
});
}

return logger;
}
14 changes: 14 additions & 0 deletions src/preset/web/providers/ssr-bridge-client-side.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { Resolve } from '../../../di';
import { KnownToken } from '../../../tokens';
import { BridgeClientSide, SsrBridge } from '../../../utils/ssr';

/**
* Провайдер клиентской части "моста" для передачи данных между сервером и клиентом.
* @param resolve Функция для получения зависимости по токену.
* @return Клиентская часть "моста".
*/
export function provideSsrBridgeClientSide(resolve: Resolve): BridgeClientSide<unknown> {
const config = resolve(KnownToken.Config.base);

return SsrBridge.resolve(config.appName);
}

0 comments on commit 782b8bb

Please sign in to comment.