UNPKG

@travetto/config

Version:

Configuration support

44 lines (37 loc) 1.51 kB
import { type Any, asFull, type Class } from '@travetto/runtime'; import { SchemaRegistryIndex } from '@travetto/schema'; export const OverrideConfigSymbol = Symbol.for('@travetto/config:overrides'); /** * Configuration Override */ export type OverrideConfig = { namespace?: string; fields?: Record<string, () => (unknown | undefined)>; }; /** * Utility for managing override configuration via SchemaRegistryIndex */ export class ConfigOverrideUtil { static getOverrideConfig(cls: Class<Any>): OverrideConfig | undefined { return SchemaRegistryIndex.get(cls).getMetadata<OverrideConfig>(OverrideConfigSymbol); } static getAllOverrideConfigs(): Required<OverrideConfig>[] { const out: Required<OverrideConfig>[] = []; for (const cls of SchemaRegistryIndex.getClasses()) { const config = this.getOverrideConfig(cls); if (config && config.fields && config.namespace) { out.push(asFull(config)); } } return out; } static setOverrideConfigField(cls: Class<Any>, field: string, names: string[]): void { const env = SchemaRegistryIndex.getForRegister(cls) .registerMetadata<OverrideConfig>(OverrideConfigSymbol, {}); (env.fields ??= {})[field] = (): string | undefined => process.env[names.find(name => !!process.env[name])!]; } static setOverrideConfig(cls: Class<Any>, namespace: string): void { SchemaRegistryIndex.getForRegister(cls).registerMetadata<OverrideConfig>(OverrideConfigSymbol, { namespace }); } }