/** * Defining types */ export interface ConfigOptions { envKey?: string; isProdRequired?: boolean; validateType?: 'number' | 'boolean' | 'integer'; validator?: (value: string) => boolean; isArray?: boolean; defaultValue?: string; allowedValues?: string[]; transform?: (value: string) => T; reloadable?: boolean; } export type ConfigChangeCallback = (key: keyof Configs, newValue: any) => void; export type NodeEnv = 'development' | 'production' | 'test'; export type LogLevel = 'silly' | 'debug' | 'http' | 'info' | 'warn' | 'error'; export type Runtime = 'node' | 'edge' | 'deno' | 'browser' | 'bun' | 'unknown'; type ExtractPrefixes = T extends `${infer Prefix}.${infer Rest}` ? Prefix | `${Prefix}.${ExtractPrefixes}` : never; export type ConfigKey = (keyof Configs & string) | ExtractPrefixes; export interface ConfigRecords { /** Application configs */ 'app.env': NodeEnv; 'app.name': string; /** Log configs */ 'log.level': LogLevel; 'log.dir': string; 'log.buffer.size': number; /** AWS configs */ 'aws.region': string; 'aws.cloudwatch.log-group': string; 'aws.cloudwatch.log-stream': string; 'aws.cloudwatch.upload-rate': number; } export declare class ConfigService { private readonly cache; private readonly loadedOptions; private readonly envFilePaths; private readonly subscribers; private logger; private envVars; private fsWatcher; constructor(configs?: Partial); private log; private parseEnvFile; private loadEnvFiles; private toEnvKey; private resolveConfigValue; load(name: keyof Configs, opts?: ConfigOptions): this; register(name: T, opts?: ConfigOptions): Configs[T]; private reload; enableHotReloading(): void; disableHotReloading(): void; subscribe(key: ConfigKey, callback: ConfigChangeCallback): () => void; private notifySubscribers; isProd(): boolean; isDev(): boolean; isTest(): boolean; get(key: T): Configs[T]; getOrThrow(key: T): Exclude; getRuntime(): Runtime; } export declare const Config: ConfigService; export {};