@lad-tech/config
v1.0.0
Published
Система конфигурации
Downloads
25
Readme
@lad-tech/config
Система конфигурации для nodejs с возможностью валидации и автоматической документации
Установка
npm i @lad-tech/config --save
Возможности
Обязательность полей
Значения по умолчанию
Документация параметра
Конечный тип (пример,
.asBoolean()
,.asInteger()
), корректно работает с TSМассивы через разделитель с возможностью его замены
Валидация с выводом в MD таблицу
Пример вывода ошибки:
## AnyService | error | required | default | env | description | type | |--------------------------------------|----------|---------|-----------|-------------------------------|-----------------------| | Параметр обязательный для заполнения | да | | ANY_LEVEL | Задает уровень взаимодействия | enum:low,middle,hight |
Экспорт конфигурации в MD таблицу
Пример:
## Logger | required | default | env | description | type | |----------|---------|--------------|---------------------------------------------|-------------------------------------------------------------------| | | false | `LOG_PRETTY` | Отображать логи в человеко понятном формате | `boolean` | | | info | `LOG_LEVEL` | Уровень отображения логов | `enum:trace,debug,info,warn,error,fatal,silent,10,20,30,40,50,60` | ## WEB сервер | required | default | env | description | type | |----------|-----------|-------------|------------------|-----------| | | 127.0.0.1 | `HTTP_HOST` | HOST WEB сервера | `url` | | | 3000 | `HTTP_PORT` | Port WEB сервера | `integer` |
Пример файла конфигурации
JS
const { Config } = require('@lad-tech/config');
const levelEnum = 'trace,debug,info,warn,error,fatal,silent,10,20,30,40,50,60'.split(',');
class LoggerConfig extends Config {
description = 'Logger';
constructor() {
super();
this.pretty = this.param('pretty')
.default(false)
.fromEnv('LOG_PRETTY')
.description('Отображать логи в человеко понятном формате')
.asBoolean();
this.level = this.param('level')
.default('info')
.fromEnv('LOG_LEVEL')
.description('Уровень отображения логов')
.asEnum(levelEnum);
}
}
TS
import { Config } from '@lad-tech/config';
const levelEnum = 'trace,debug,info,warn,error,fatal,silent,10,20,30,40,50,60'.split(',');
class LoggerConfig extends Config {
description = 'Logger';
pretty = this.param('pretty')
.default(false)
.fromEnv('LOG_PRETTY')
.description('Отображать логи в человеко понятном формате')
.asBoolean();
level = this.param('level')
.default('info')
.fromEnv('LOG_LEVEL')
.description('Уровень отображения логов')
.asEnum(levelEnum);
}
Использование
const config = new LoggerConfig();
// Получение значений
config.pretty; // -> false
const { pretty, level } = config;
// Переопределение
config.override('pretty', true);
config.pretty; // -> true
// Документация. Возвращает текст с таблицей описания конфигурации
const doc = config.render();
// Валидация. Возвращает текст с таблицей ошибок
const err = config.renderError();
Для создания параметров
необходимо вызвать метод класса param
с указанием имени параметра и присвоить его параметру класса
class AnyConfig extends Config {
constructor() {
super();
this.paramName = this.param('paramName').asString();
}
}
Метод param
возвращает экземпляр класса ConfigItem
ConfigItem
Методы настройки параметра
| метод | Описание |
|----------------------|------------------------------------------------------|
| fromEnv(envName)
| Имя env
переменной из которой будет взято значение |
| description(desc)
| Описание параметра |
| override(value)
| Перезапись параметра указанным значением |
| splitter(splitter)
| Разделитель для получения массива значений |
Методы указания типа валидации
| метод | тип валидации | Описание |
|---------------------|------------------|----------------------------------------------------------------|
| asString()
| string
| Строка |
| asInteger()
| integer
| Целое число |
| asBoolean()
| boolean
| Булево значение |
| asUrl()
| url
| URL начинается с http://
или https://
убирает /
на конце |
| asEnum(list)
| enum
| Значение из списка |
| asArrayString()
| Массив string
| Массив строк |
| asArrayInteger()
| Массив integer
| Массив целых чисел |
| asArrayBoolean()
| Массив boolean
| Массив булевых значений |
| asArrayUrl()
| Массив url
| Массив ссылок |
| asArrayEnum(list)
| Массив enum
| Массив значение из списка |