import type { Constructor } from '@rsdk/common'; import { RsdkMetadata } from '@rsdk/metadata'; import { IndicatorsRegistry } from '../../health/metadata/indicators.registry'; import type { Config } from '../config.abstract'; import { ConfigReloadIndicator } from '../config-reload.indicator'; import type { ConfigSource } from '../sources'; import type { PropertyMetadata, SectionMetadata, SourceMetadata, } from '../types'; import { CONFIG_PROPERTIES_RSDK_METADATA_SCOPE, CONFIG_SECTION_RSDK_METADATA_SCOPE, CONFIG_SOURCE_RSDK_METADATA_SCOPE, } from './constants'; import type { PropertyRsdkMetadata, SectionRsdkMetadata, SourcesRsdkMetadata, } from './types'; export class ConfigMetadataRegistry { static registerSource( target: Constructor, metadata: SourceMetadata, ): void { RsdkMetadata.setWithScope( target, CONFIG_SOURCE_RSDK_METADATA_SCOPE, target, { target, metadata }, ); if (metadata.type === 'reloadable') { IndicatorsRegistry.register(ConfigReloadIndicator, { description: 'Will be "down" if there are problems with config reload', key: 'config-reload', scope: 'common', }); } } static registerSection( target: Constructor, metadata: SectionMetadata, ): void { RsdkMetadata.setWithScope( target, CONFIG_SECTION_RSDK_METADATA_SCOPE, target, { target, metadata }, ); } static registerProperty( target: object, alias: string, metadata: PropertyMetadata, ): void { RsdkMetadata.setWithScope( target, CONFIG_PROPERTIES_RSDK_METADATA_SCOPE, alias, { metadata, alias }, true, ); } }