@nexe/config-manager
Version:
Nexe Config Manager - A flexible configuration management solution with multiple sources and hot reload support
100 lines • 2.92 kB
TypeScript
/**
* 配置源接口
* 所有配置源必须实现此接口
*/
export interface IConfigSource<T = unknown> {
/**
* 加载配置
* @param key 可选的配置键,用于获取特定配置项
* @param pathPrefix 可选的路径前缀,用于动态指定配置路径
*/
load: (key?: string, pathPrefix?: string) => Promise<T>;
/**
* 获取配置源名称
*/
getName: () => string;
/**
* 是否支持热更新
*/
supportsHotReload: () => boolean;
/**
* 是否支持动态路径
*/
supportsDynamicPath?: () => boolean;
/**
* 订阅配置变更(如果支持热更新)
* @param key 配置键
* @param callback 配置变更时的回调函数
* @param pathPrefix 可选的路径前缀
*/
subscribe?: (key: string, callback: (value: unknown) => void, pathPrefix?: string) => void;
/**
* 取消订阅配置变更
* @param key 配置键
* @param pathPrefix 可选的路径前缀
*/
unsubscribe?: (key: string, pathPrefix?: string) => void;
}
/**
* 配置获取选项
*/
export interface ConfigOptions {
/**
* 配置路径前缀,用于指定从哪个路径获取配置
*/
pathPrefix?: string;
/**
* 配置源名称,用于指定从哪个配置源获取配置
*/
sourceName?: string;
}
/**
* 配置管理器接口
*/
export interface IConfigManager {
/**
* 添加配置源
* @param source 配置源实例
* @param priority 优先级,数字越大优先级越高
*/
addSource: (source: IConfigSource, priority?: number) => void;
/**
* 获取配置值
* @param key 配置键
* @param defaultValue 默认值
* @param options 配置选项
*/
get: <T>(key: string, defaultValue?: T, options?: ConfigOptions) => Promise<T>;
/**
* 获取强类型配置对象
* @param configClass 配置类
* @param options 配置选项,可指定配置路径前缀
*/
getConfig: <T>(configClass: new () => T, options?: ConfigOptions) => Promise<T>;
/**
* 订阅配置变更
* @param key 配置键
* @param callback 配置变更时的回调函数
* @param options 配置选项,可指定配置路径前缀
*/
subscribe: <T>(key: string, callback: (value: T) => void, options?: ConfigOptions) => void;
/**
* 取消订阅配置变更
* @param key 配置键
* @param options 配置选项,可指定配置路径前缀
*/
unsubscribe: (key: string, options?: ConfigOptions) => void;
}
/**
* 配置装饰器元数据键
*/
export declare const CONFIG_PROPERTY_METADATA = "config:property";
export declare const CONFIG_SECTION_METADATA = "config:section";
/**
* 配置属性元数据
*/
export interface ConfigPropertyMetadata {
key: string;
propertyKey: string;
}
//# sourceMappingURL=interfaces.d.ts.map