import type { DynamicModule } from '@nestjs/common'; import type { Constructor } from '@rsdk/common'; import type { ILogger } from '@rsdk/logging'; import { ConfigReloadIndicator } from '../config-reload.indicator'; import { ConfigContext } from '../context/config.context'; import type { PropertyToken } from '../metadata'; import type { ReloadEvents } from '../reload'; import type { ConfigSource } from '../sources'; import type { PropertyMetadata } from '../types'; import type { Vars } from '../vars.class'; import { AdditionalSourceInitializer } from './additional-source.initializer'; /** * Модуль реализующий работу с `AdditionalSource` указанными в конфиге. * Инициализирует все `source` в хуке `onModuleInit` */ export class AdditionalSourceModule { static forRoot(options: Constructor[]): DynamicModule { return { imports: [ { global: true, module: AdditionalSourceModule, providers: [ { inject: [ConfigContext], provide: AdditionalSourceInitializer, useFactory: (configContext: ConfigContext) => new AdditionalSourceInitializer(configContext, options), }, ], exports: [AdditionalSourceInitializer], }, ], providers: [ConfigReloadIndicator], module: AdditionalSourceModule, }; } } export interface AdditionalSourceOptions { sources: Constructor[] | undefined; logger: ILogger; properties: Map; propertyMetadata: Map; vars: Vars; events: ReloadEvents; prefix: string; }