Skip to content

Commit

Permalink
Merge pull request #111 from sima-land/38-examples-bun
Browse files Browse the repository at this point in the history
Шаг 64 #38
  • Loading branch information
krutoo committed Mar 11, 2024
2 parents 344c5b6 + bae1b2c commit 2f9530e
Show file tree
Hide file tree
Showing 17 changed files with 155 additions and 179 deletions.
41 changes: 7 additions & 34 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -141,29 +141,11 @@
"import": "./dist/esm/preset/node/index.js",
"default": "./dist/esm/preset/node/index.js"
},
"./preset/node/node/providers": {
"types": "./dist/types/preset/node/node/providers/index.d.ts",
"require": "./dist/cjs/preset/node/node/providers/index.js",
"import": "./dist/esm/preset/node/node/providers/index.js",
"default": "./dist/esm/preset/node/node/providers/index.js"
},
"./preset/node/node/utils": {
"types": "./dist/types/preset/node/node/utils/index.d.ts",
"require": "./dist/cjs/preset/node/node/utils/index.js",
"import": "./dist/esm/preset/node/node/utils/index.js",
"default": "./dist/esm/preset/node/node/utils/index.js"
},
"./preset/node/handler/providers": {
"types": "./dist/types/preset/node/handler/providers/index.d.ts",
"require": "./dist/cjs/preset/node/handler/providers/index.js",
"import": "./dist/esm/preset/node/handler/providers/index.js",
"default": "./dist/esm/preset/node/handler/providers/index.js"
},
"./preset/node/handler/utils": {
"types": "./dist/types/preset/node/handler/utils/index.d.ts",
"require": "./dist/cjs/preset/node/handler/utils/index.js",
"import": "./dist/esm/preset/node/handler/utils/index.js",
"default": "./dist/esm/preset/node/handler/utils/index.js"
"./preset/node-handler": {
"types": "./dist/types/preset/node-handler/index.d.ts",
"require": "./dist/cjs/preset/node-handler/index.js",
"import": "./dist/esm/preset/node-handler/index.js",
"default": "./dist/esm/preset/node-handler/index.js"
},
"./preset/bun": {
"types": "./dist/types/preset/bun/index.d.ts",
Expand Down Expand Up @@ -270,17 +252,8 @@
"preset/node": [
"./dist/types/preset/node/index.d.ts"
],
"preset/node/node/providers": [
"./dist/types/preset/node/node/providers/index.d.ts"
],
"preset/node/node/utils": [
"./dist/types/preset/node/node/utils/index.d.ts"
],
"preset/node/handler/providers": [
"./dist/types/preset/node/handler/providers/index.d.ts"
],
"preset/node/handler/utils": [
"./dist/types/preset/node/handler/utils/index.d.ts"
"preset/node-handler": [
"./dist/types/preset/node-handler/index.d.ts"
],
"preset/bun": [
"./dist/types/preset/bun/index.d.ts"
Expand Down
4 changes: 2 additions & 2 deletions src/preset/bun-handler/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ import {
provideFetch,
provideReduxMiddlewareSaga,
} from '../isomorphic/providers';
import { providePageRender } from '../node/handler/providers';
import { SpecificExtras } from '../node/handler/utils';
import { providePageRender } from '../node-handler/providers';
import { SpecificExtras } from '../node-handler/utils';
import { HandlerProviders } from './providers';

/**
Expand Down
2 changes: 1 addition & 1 deletion src/preset/bun-handler/providers/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import { renderToString } from 'react-dom/server';
import { Resolve } from '../../../di';
import { KnownToken } from '../../../tokens';
import { HelmetContext, RegularHelmet } from '../../node/handler/utils';
import { HelmetContext, RegularHelmet } from '../../node-handler/utils';
import {
CookieStore,
Middleware,
Expand Down
2 changes: 1 addition & 1 deletion src/preset/bun/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { createPreset } from '../../di';
import { KnownToken } from '../../tokens';
import { PresetTuner } from '../isomorphic';
import { provideBaseConfig } from '../isomorphic/providers';
import { provideKnownHttpApiHosts, provideSsrBridgeServerSide } from '../node/node/providers';
import { provideKnownHttpApiHosts, provideSsrBridgeServerSide } from '../node/providers';
import { BunProviders } from './providers';

/**
Expand Down
2 changes: 1 addition & 1 deletion src/preset/bun/providers/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { KnownToken } from '../../../tokens';
import { ConfigSource, createConfigSource } from '../../../config';
import { Logger, createLogger } from '../../../log';
import { Handler, Middleware } from '../../../http';
import { providePinoHandler } from '../../node/node/providers';
import { providePinoHandler } from '../../node/providers';
import { route, router } from '@krutoo/fetch-tools';
import { getCurrentHub, init, runWithAsyncContext } from '@sentry/bun';
import { createSentryHandler } from '../../../log/handler/sentry';
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import { Preset, createPreset } from '../../../di';
import { KnownToken } from '../../../tokens';
import { Preset, createPreset } from '../../di';
import { KnownToken } from '../../tokens';
import {
provideReduxMiddlewareSaga,
provideFetch,
provideAbortController,
} from '../../isomorphic/providers';
import { PresetTuner } from '../../isomorphic/types';
} from '../isomorphic/providers';
import { PresetTuner } from '../isomorphic/types';
import {
provideAxiosMiddleware,
provideAxiosLogHandler,
Expand Down Expand Up @@ -59,5 +59,3 @@ export function PresetHandler(customize?: PresetTuner): Preset {

return preset;
}

export { HandlerProvider } from './utils';
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,27 @@ import {
cookie,
createCookieStore,
defaultHeaders,
} from '../../../../http';
import type { Resolve } from '../../../../di';
import { KnownToken } from '../../../../tokens';
} from '../../../http';
import type { Resolve } from '../../../di';
import { KnownToken } from '../../../tokens';
import {
getForwardedHeaders as getForwardedHeadersExpress,
axiosTracingMiddleware,
} from '../../node/utils/http-client';
import type { Middleware as AxiosMiddleware } from 'middleware-axios';
import { AxiosLogging } from '../../../isomorphic/utils/axios-logging';
import { FetchLogging } from '../../../isomorphic/utils/fetch-logging';
import { HttpStatus } from '../../../isomorphic/utils/http-status';
import { getFetchLogging } from '../../../isomorphic/utils/get-fetch-logging';
import { getFetchErrorLogging } from '../../../isomorphic/utils/get-fetch-error-logging';
import { getFetchExtraAborting } from '../../../isomorphic/utils/get-fetch-extra-aborting';
import { LogMiddlewareHandlerInit, cookieMiddleware, logMiddleware } from '../../../../utils/axios';
import { PAGE_HANDLER_EVENT_TYPE } from '../../../server/constants';
import type { ConventionalJson } from '../../../isomorphic/types';
import { AxiosLogging } from '../../isomorphic/utils/axios-logging';
import { FetchLogging } from '../../isomorphic/utils/fetch-logging';
import { HttpStatus } from '../../isomorphic/utils/http-status';
import { getFetchLogging } from '../../isomorphic/utils/get-fetch-logging';
import { getFetchErrorLogging } from '../../isomorphic/utils/get-fetch-error-logging';
import { getFetchExtraAborting } from '../../isomorphic/utils/get-fetch-extra-aborting';
import { LogMiddlewareHandlerInit, cookieMiddleware, logMiddleware } from '../../../utils/axios';
import { PAGE_HANDLER_EVENT_TYPE } from '../../server/constants';
import type { ConventionalJson } from '../../isomorphic/types';
import { Fragment } from 'react';
import { HelmetContext, RegularHelmet, getPageResponseFormat } from '../utils';
import { renderToString } from 'react-dom/server';
import { getFetchTracing } from '../../../server/utils/get-fetch-tracing';
import { getFetchTracing } from '../../server/utils/get-fetch-tracing';

/**
* Провайдер главной функции обработчика входящего http-запроса.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { ReactNode, createContext, useContext } from 'react';
import { PageAssets } from '../../../isomorphic/types';
import { Handler, Request } from 'express';
import { Application, CURRENT_APP, Resolve } from '../../../../di';
import { KnownToken } from '../../../../tokens';
import { PageAssets } from '../../isomorphic/types';
import express from 'express';

/**
* @todo Перенести в preset/server.
*/
export const HelmetContext = createContext<{ title?: string; assets?: PageAssets }>({});

const resetCSS = `
Expand All @@ -21,6 +22,7 @@ body {
* Выведет html, head и body.
* @param props Свойства.
* @return Элемент.
* @todo Перенести в preset/server.
*/
export function RegularHelmet({ children }: { children?: ReactNode }) {
const { title, assets } = useContext(HelmetContext);
Expand Down Expand Up @@ -52,6 +54,7 @@ export function RegularHelmet({ children }: { children?: ReactNode }) {

/**
* Специфичные для наших микросервисов дополнительные данные ответа.
* @todo Перенести в preset/server.
*/
export class SpecificExtras {
private _meta: any;
Expand Down Expand Up @@ -80,7 +83,7 @@ export class SpecificExtras {
* @param req Запрос.
* @return Формат.
*/
export function getPageResponseFormat(req: Request): 'html' | 'json' {
export function getPageResponseFormat(req: express.Request): 'html' | 'json' {
let result: 'html' | 'json' = 'html';

if ((req.header('accept') || '').toLowerCase().includes('application/json')) {
Expand All @@ -89,22 +92,3 @@ export function getPageResponseFormat(req: Request): 'html' | 'json' {

return result;
}

/**
* Возвращает express-handler, создающий дочернее di-приложение при запросе.
* @param getApp Должна вернуть di-приложения запроса.
* @return Обработчик.
*/
export function HandlerProvider(getApp: () => Application) {
return (resolve: Resolve): Handler => {
const parent = resolve(CURRENT_APP);

return (req, res, next) => {
const app = getApp();

app.attach(parent);
app.bind(KnownToken.ExpressHandler.context).toValue({ req, res, next });
app.get(KnownToken.ExpressHandler.main)();
};
};
}
82 changes: 79 additions & 3 deletions src/preset/node/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,79 @@
export type { ExpressHandlerContext } from './types';
export { PresetNode } from './node';
export { PresetHandler, HandlerProvider } from './handler';
import { KnownToken } from '../../tokens';
import { provideAxiosFactory, provideBaseConfig, provideFetch } from '../isomorphic/providers';
import { Preset, createPreset } from '../../di';
import { PresetTuner } from '../isomorphic/types';
import { healthCheck } from '../../utils/express/handler/health-check';
import {
provideConfigSource,
provideExpressErrorMiddleware,
provideExpressFactory,
provideExpressLogMiddleware,
provideExpressMetricsMiddleware,
provideExpressRequestMiddleware,
provideExpressTracingMiddleware,
provideKnownHttpApiHosts,
provideLogger,
provideMetricsHttpApp,
provideSpanExporter,
provideSsrBridgeServerSide,
provideTracer,
provideTracerProvider,
provideTracerProviderResource,
} from './providers';

/**
* Возвращает preset с зависимостями по умолчанию для frontend-микросервисов на Node.js.
* @param customize Получит функцию с помощью которой можно переопределить предустановленные провайдеры.
* @return Preset.
*/
export function PresetNode(customize?: PresetTuner): Preset {
// ВАЖНО: используем .set() вместо аргумента defaults функции createPreset из-за скорости
const preset = createPreset();

// config
preset.set(KnownToken.Config.source, provideConfigSource);
preset.set(KnownToken.Config.base, provideBaseConfig);

// log
preset.set(KnownToken.logger, provideLogger);

// tracing
preset.set(KnownToken.Tracing.tracer, provideTracer);
preset.set(KnownToken.Tracing.spanExporter, provideSpanExporter);
preset.set(KnownToken.Tracing.tracerProvider, provideTracerProvider);
preset.set(KnownToken.Tracing.tracerProviderResource, provideTracerProviderResource);

// metrics
preset.set(KnownToken.Metrics.httpApp, provideMetricsHttpApp);

// fetch
preset.set(KnownToken.Http.fetch, provideFetch);
preset.set(KnownToken.Http.Fetch.middleware, () => []);

// axios
preset.set(KnownToken.Axios.factory, provideAxiosFactory);
preset.set(KnownToken.Axios.middleware, () => []);

// express
preset.set(KnownToken.Express.factory, provideExpressFactory);
preset.set(KnownToken.Express.Handlers.healthCheck, healthCheck);
preset.set(KnownToken.Express.Middleware.request, provideExpressRequestMiddleware);
preset.set(KnownToken.Express.Middleware.log, provideExpressLogMiddleware);
preset.set(KnownToken.Express.Middleware.metrics, provideExpressMetricsMiddleware);
preset.set(KnownToken.Express.Middleware.tracing, provideExpressTracingMiddleware);
preset.set(KnownToken.Express.Middleware.error, provideExpressErrorMiddleware);

// http api
preset.set(KnownToken.Http.Api.knownHosts, provideKnownHttpApiHosts);

// ssr bridge
preset.set(KnownToken.SsrBridge.serverSide, provideSsrBridgeServerSide);

if (customize) {
customize({ override: preset.set.bind(preset) });
}

return preset;
}

export { HandlerProvider } from './utils/handler-provider';
77 changes: 0 additions & 77 deletions src/preset/node/node/index.ts

This file was deleted.

Loading

0 comments on commit 2f9530e

Please sign in to comment.