From e17fbaa156224561fb888152dee8d43f180a47c6 Mon Sep 17 00:00:00 2001 From: krutoo Date: Wed, 22 Mar 2023 11:52:45 +0500 Subject: [PATCH 1/4] #38 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - мелкие правки docs --- docs/docs/config.md | 23 +++++++---------------- docs/docs/http-client.md | 2 +- docs/docs/metrics.md | 16 ++++++++++------ 3 files changed, 18 insertions(+), 23 deletions(-) diff --git a/docs/docs/config.md b/docs/docs/config.md index 47f6810..2714727 100644 --- a/docs/docs/config.md +++ b/docs/docs/config.md @@ -4,7 +4,7 @@ sidebar_position: 1 # Конфигурация приложения -Isomorph предоставляет абстракцию "источник конфигурации" поверх переменных окружения в виде интерфейса **ConfigSource** и его реализаций для браузера и Node.js. +Пакет предоставляет абстракцию "источник конфигурации" поверх переменных окружения в виде интерфейса **ConfigSource** и его реализаций для браузера и Node.js. Эта абстракция может использоваться и с другими источниками данных, например с текстовыми файлами, аргументами командной строки и тд. @@ -21,9 +21,12 @@ Isomorph предоставляет абстракцию "источник ко Для этого используем утилиту из пакета. ```ts -import { createConfigSource } from '@sima-land/isomorph/config/node'; +import { createConfigSource } from '@sima-land/isomorph/config'; -const source = createConfigSource(); +// формируем источник конфигурации +const source = createConfigSource({ environment: process.env }); + +// определяем порт на основе переменной из конфигурации const port = source.require('MAIN_HTTP_PORT'); ``` @@ -31,21 +34,9 @@ const port = source.require('MAIN_HTTP_PORT'); Подробнее в документации библиотеки [@humanwhocodes/env](https://github.com/humanwhocodes/env). -Реализация для браузера работает аналогично. - -```ts -import { createConfigSource } from '@sima-land/isomorph/config/browser'; - -const source = createConfigSource(); - -if (source.get('SOME_FEATURE_STATUS') === 'enabled') { - // do something -} -``` - ### Особенности реализации -Реализации для сервера и браузера будут пытаться взять все переменные из двух источников: объекта `process.env` (если он существует) и объекта `__ISOMORPH_ENV__` (если он существует). Для браузера эти переменные могут быть предоставлены на этапе сборки. +Реализации в пресетах `PresetBrowser` и `PresetNode` будут пытаться взять все переменные из двух источников: объекта `process.env` (если он существует) и объекта `__ISOMORPH_ENV__` (если он существует). Для браузера эти переменные могут быть предоставлены на этапе сборки. :::info Важно diff --git a/docs/docs/http-client.md b/docs/docs/http-client.md index 4baea65..f795483 100644 --- a/docs/docs/http-client.md +++ b/docs/docs/http-client.md @@ -6,7 +6,7 @@ sidebar_position: 3 В качестве реализации HTTP-клиентов используется `axios` с дополнением в виде пакета `middleware-axios`, позволяющего добавлять промежуточные слои процесса исходящих HTTP-запросов. -## Прозрачные cookies +## "Прозрачные" cookie На сервере бывает необходимо выполнить HTTP-запрос к публичным API от имени пользователя. diff --git a/docs/docs/metrics.md b/docs/docs/metrics.md index 763ae46..691df80 100644 --- a/docs/docs/metrics.md +++ b/docs/docs/metrics.md @@ -8,16 +8,20 @@ sidebar_position: 6 Пакет **isomorph** предоставляет реализации базового http-сервера для вывода собранных данных о работе сервиса, а также express-middleware для сбора базовых метрик express-приложения. -## createMetricsHttpApp +## Токен `KnownToken.Metrics.httpApp` -**createMetricsHttpApp** вернет готовое express-приложение для сбора метрик. +Компонент по токену `KnownToken.Metrics.httpApp` вернет готовое express-приложение для сбора метрик. ```ts -import { createMetricsHttpApp } from '@sima-land/isomorph/metrics/node'; +import { Resolve } from '@sima-land/isomorph/di'; -const metricsApp = createMetricsHttpApp(); +declare const resolve: Resolve; -metricsApp.listen(8080); +const metricsHttpApp = resolve(KnownToken.Metrics.httpApp); + +metricsHttpApp.listen(8080, () => { + console.log('Server started'); +}); ``` ## Middleware для express-приложений @@ -28,7 +32,7 @@ metricsApp.listen(8080); import { responseMetricsMiddleware, renderMetricsMiddleware, -} from '@sima-land/isomorph/http-server/middleware/metrics'; +} from '@sima-land/isomorph/http-server/middleware/metrics/node'; import express from 'express'; import * as PromClient from 'prom-client'; From de98f72e4f94ee89e169bd50c0dc92ebc65e6e50 Mon Sep 17 00:00:00 2001 From: krutoo Date: Wed, 22 Mar 2023 11:53:28 +0500 Subject: [PATCH 2/4] #38 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - di/preset, utils/redux: удалены deprecated функции и методы --- src/di/preset.ts | 5 -- src/di/types.ts | 3 -- src/utils/redux/__test__/remote-data.test.ts | 50 +------------------- src/utils/redux/index.ts | 10 +--- src/utils/redux/remote-data.ts | 19 -------- 5 files changed, 3 insertions(+), 84 deletions(-) diff --git a/src/di/preset.ts b/src/di/preset.ts index 5f73d08..ee19556 100644 --- a/src/di/preset.ts +++ b/src/di/preset.ts @@ -10,11 +10,6 @@ class PresetImplementation implements Preset { this.registry = new Map, Provider>(defaults); } - override(token: Token, provider: Provider): this { - this.registry.set(token, provider); - return this; - } - set(token: Token, provider: Provider): this { this.registry.set(token, provider); return this; diff --git a/src/di/types.ts b/src/di/types.ts index f9e1022..f6b8d5d 100644 --- a/src/di/types.ts +++ b/src/di/types.ts @@ -95,9 +95,6 @@ export interface Application { * Пресет - набор провайдеров (с возможностью их добавлять/переопределять) который можно применить к DI-приложению. */ export interface Preset { - /** @deprecated */ - override: (token: Token, provider: Provider) => this; - /** Добавляет провайдер в пресет. */ set: (token: Token, provider: Provider) => this; diff --git a/src/utils/redux/__test__/remote-data.test.ts b/src/utils/redux/__test__/remote-data.test.ts index b5d2548..4fc7bd9 100644 --- a/src/utils/redux/__test__/remote-data.test.ts +++ b/src/utils/redux/__test__/remote-data.test.ts @@ -1,53 +1,5 @@ import { createReducer, createSlice } from '@reduxjs/toolkit'; -import { STATUS, RemoteData, RemoteDataState, createRemoteDataReducers } from '..'; - -interface TestState extends RemoteDataState { - foo: 'bar'; -} - -describe('createGenericSlice', () => { - const initialState: TestState = { - data: 0, - error: '', - status: STATUS.initial, - foo: 'bar', - }; - - const { reducer, actions } = createSlice({ - name: 'user', - initialState, - reducers: createRemoteDataReducers(), - }); - - it('should handle request action', () => { - const actual = reducer(initialState, actions.request()); - - expect(actual).toEqual({ - ...initialState, - status: STATUS.fetching, - }); - }); - - it('should handle success action', () => { - const actual = reducer(initialState, actions.success(234)); - - expect(actual).toEqual({ - ...initialState, - data: 234, - status: STATUS.success, - }); - }); - - it('should handle failure action', () => { - const actual = reducer(initialState, actions.failure('error message here')); - - expect(actual).toEqual({ - ...initialState, - error: 'error message here', - status: STATUS.failure, - }); - }); -}); +import { STATUS, RemoteData, RemoteDataState } from '..'; type TestSliceState = RemoteDataState; diff --git a/src/utils/redux/index.ts b/src/utils/redux/index.ts index b091c1b..de78796 100644 --- a/src/utils/redux/index.ts +++ b/src/utils/redux/index.ts @@ -1,10 +1,4 @@ -import { - Status, - RemoteDataState, - STATUS, - RemoteData, - createRemoteDataReducers, -} from './remote-data'; +import { Status, RemoteDataState, STATUS, RemoteData } from './remote-data'; export type { Status, RemoteDataState }; -export { STATUS, RemoteData, createRemoteDataReducers }; +export { STATUS, RemoteData }; diff --git a/src/utils/redux/remote-data.ts b/src/utils/redux/remote-data.ts index a7d758c..49b1fa1 100644 --- a/src/utils/redux/remote-data.ts +++ b/src/utils/redux/remote-data.ts @@ -139,22 +139,3 @@ export abstract class RemoteData { } as const; } } - -/** - * Возвращает набор обработчиков для работы с удаленными данными. - * @deprecated Теперь нужно использовать RemoteData.createHandlers. - * @return Набор. - */ -export const createRemoteDataReducers = >() => ({ - request: (state: Draft) => { - state.status = STATUS.fetching; - }, - success: (state: Draft, action: PayloadAction) => { - state.data = action.payload; - state.status = STATUS.success; - }, - failure: (state: Draft, action: PayloadAction) => { - state.error = action.payload; - state.status = STATUS.failure; - }, -}); From c60d42aa88c5871dc34fb9ac907b8a58fb1c2b2a Mon Sep 17 00:00:00 2001 From: krutoo Date: Wed, 22 Mar 2023 12:24:09 +0500 Subject: [PATCH 3/4] #38 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - правки тестов --- src/di/__test__/preset.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/di/__test__/preset.test.ts b/src/di/__test__/preset.test.ts index 421ff54..a0bb7a2 100644 --- a/src/di/__test__/preset.test.ts +++ b/src/di/__test__/preset.test.ts @@ -12,7 +12,6 @@ describe('Preset', () => { } as const; preset.set(TOKEN.hello, () => 'hello'); - preset.override(TOKEN.world, () => 'world'); const app = createApplication(); app.preset(preset); From fa2133793ed416ba9c77484edbd0de6cddd85edd Mon Sep 17 00:00:00 2001 From: krutoo Date: Wed, 22 Mar 2023 12:25:55 +0500 Subject: [PATCH 4/4] #38 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - правки тестов --- src/di/__test__/preset.test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/di/__test__/preset.test.ts b/src/di/__test__/preset.test.ts index a0bb7a2..7fcdb1d 100644 --- a/src/di/__test__/preset.test.ts +++ b/src/di/__test__/preset.test.ts @@ -12,6 +12,7 @@ describe('Preset', () => { } as const; preset.set(TOKEN.hello, () => 'hello'); + preset.set(TOKEN.world, () => 'world'); const app = createApplication(); app.preset(preset);