/** * Configuration is loaded in predictable order. You should take * into account chat all repeating keys will be overwritten on each step: * * 1. .env file if there is any * 2. process environment * 3. динамические source'ы (если сделать последовательно - то в порядке указания) */ import type { Constructor } from '@rsdk/common'; import type { RsdkMetadataProvider } from '@rsdk/metadata'; import type { Config } from '../config.abstract'; import type { ConfigModuleOptions } from '../config.module'; import { ReloadEvents } from '../reload'; import type { PropertyMetadata } from '../types'; import { Vars } from '../vars.class'; export declare class ConfigContext { readonly events: ReloadEvents; readonly vars: Vars; readonly prefix: string; /** * Метадата о необходимых приложению значениях конфигурации * Зачем храним? * Потому что пайплайн такой: * 1. Собираем данные о том какие поля нам нужны * 2. Приложение запрашивает поле из конфигурации * 3. Ищем метаданные * 4. По метаданным вытягиваем значение * 5. Отдаём значение * * Это важно так как позволяет прозрачным образом контролировать этот процесс и инициализировать поля в тот момент когда они потребуются * А не в тот момент когда их объявили * Основной кейс, где это применяется - тесты * @private */ readonly standalonePropertyMetadata: Map>; /** * Проинициализированные секции конфигов * @private */ private readonly initializedConfigs; /** * undefined является валидным значением по умолчанию (`defaultValue`) * @private */ private readonly properties; /** * We don't use class as context here because it is undefined if * tsc target is ES2022 */ private readonly logger; constructor(rsdkMetadataProvider: RsdkMetadataProvider, options?: ConfigModuleOptions); /** * Extracting specific instance of configuration section by * its class reference. Throws error if called before .bootstrap() * * ATTENTION: Конфиг будет разрешен с доступными на данный момент переменными, * то есть если дополнительные источники конфигурации ещё не были проинициализированы, * они не будут учтены в разрешении конфигурации. * * @param ctor Pass constructor of configuration section class * @returns T */ resolve(ctor: Constructor): T; resolveProperty(token: `STANDALONE_CONFIG_PROPERTY_${string}`): any; private readEnvironment; private extractStandaloneProperties; /** * Инициализирует инстанс секции конфига * ATTENTION: не проверяет есть ли ещё проинициализированные, будьте внимательны во избежание неожиданного поведение * @param ctor * @private */ private instantiateSection; }