@travetto/config
Version:
Configuration support
38 lines (33 loc) • 1.15 kB
text/typescript
import { SchemaRegistry } from '@travetto/schema';
import { ConfigData } from '../parser/types.ts';
import { ConfigSource, ConfigSpec } from './types.ts';
export const OverrideConfigSymbol = Symbol.for('@travetto/config:overrides');
/**
* Configuration Override
*/
export type OverrideConfig = {
ns: string;
fields: Record<string, () => (unknown | undefined)>;
};
/**
* Overridable config source, provides ability to override field level values, currently used by
* - @EnvVar as a means to allow environment specific overrides
*/
export class OverrideConfigSource implements ConfigSource {
#build(): ConfigData {
const out: ConfigData = {};
for (const cls of SchemaRegistry.getClasses()) {
const { ns, fields = {} } = SchemaRegistry.getMetadata<OverrideConfig>(cls, OverrideConfigSymbol) ?? {};
for (const [key, value] of Object.entries(fields)) {
const val = value();
if (val !== undefined && val !== '') {
out[`${ns}.${key}`] = val;
}
}
}
return out;
}
get(): ConfigSpec {
return { data: this.#build(), priority: 999, source: 'memory://override' };
}
}