UNPKG

autosnippet

Version:

Extract code patterns into a knowledge base for AI coding assistants

65 lines (64 loc) 2.18 kB
/** * ConfigWatcher — 构建配置文件热更新监听器 * * 监听自研构建系统的配置文件变更,执行增量重解析并通知下游服务。 * * 核心策略: * - debounce 3s(配置文件常有连续保存) * - MD5 hash 差量检测避免无效重解析 * - 60s 最大频率保护(防 git checkout 等批量变更风暴) * - 增量解析:单文件变更只影响对应模块 * - 通过 SignalBus 触发 PanoramaService 缓存失效 * - 通过 RealtimeService 推送 Dashboard WebSocket 事件 * * @module ConfigWatcher */ import type { SignalBus } from '#infra/signal/SignalBus.js'; /** 变更类型:仅影响范围不同 */ type ChangeScope = 'full' | 'module' | 'overlay'; interface ConfigChangeEvent { /** 变更的文件列表 */ changedFiles: Array<{ path: string; scope: ChangeScope; moduleName?: string; }>; /** 配置系统 ID */ systemId: string; /** 事件触发时间 */ timestamp: number; } export interface ConfigWatcherOptions { /** 项目根目录 */ projectRoot: string; /** 配置系统 ID(easybox / tuist / xcodegen)或自定义 */ systemId: string; /** 自定义 watch patterns(当 systemId 不在内置表中时) */ watchPatterns?: string[]; /** 信号总线(触发缓存失效) */ signalBus?: SignalBus | null; /** 变更回调(用于外部通知,如 RealtimeService) */ onChange?: (event: ConfigChangeEvent) => void; /** debounce 毫秒数(默认 3000) */ debounceMs?: number; /** 全量重建最小间隔毫秒(默认 60000) */ fullRebuildIntervalMs?: number; } export declare class ConfigWatcher { #private; constructor(options: ConfigWatcherOptions); /** * 启动文件监听。异步解析初始文件 hash 并注册 fs.watch。 * 自动注册 shutdown hook 以清理资源。 */ start(): Promise<void>; /** * 停止监听,释放所有 fs.watch 资源 */ dispose(): void; /** 是否正在监听 */ get active(): boolean; /** 监听的文件数 */ get watchedFileCount(): number; } export {};