/** * change-classifier.ts — 文件变更分类器(Phase 2A) * * 将文件变更分类为四种动作之一: * - `cold` — 冷重启(配置文件、插件、package.json、tsconfig.json、.env 等) * - `soft` — 热替换(src/ 下的源码文件:.ts/.js/.mjs/.cjs) * - `client` — 前端 client rebuild(src/client 与 public) * - `ignore` — 忽略(node_modules、dist、.git、测试文件、文档等) * * 分类器在 FileWatcher 的 onFileChange 回调中调用, * 决定变更文件应触发 Cold Restart 还是 Soft Reload。 * * 支持用户自定义分类规则: * - coldPatterns: 额外的冷重启文件模式(glob 字符串) * - ignorePatterns: 额外的忽略文件模式(glob 字符串) * * @module lib/dev/change-classifier * @see 11c-file-watcher.md §2(变更分类器) * @see 11-hot-reload.md §3(文件分类规则) * @see IMPLEMENTATION-PLAN.md 任务 2.3 */ /** * 变更分类结果 */ export interface ChangeClassification { /** 应执行的动作:cold=冷重启, soft=热替换, client=前端重建, ignore=忽略 */ action: "cold" | "soft" | "client" | "ignore"; /** 分类原因(调试/日志用) */ reason: string; } /** * 用户自定义分类选项 * * 通过 config.dev.coldPatterns / config.dev.ignorePatterns 配置。 * 用户自定义规则优先级高于内置规则。 */ export interface ClassifierOptions { /** * 额外的冷重启文件模式(glob 风格字符串) * * 匹配的文件将触发冷重启而非热替换。 * 适用于业务中需要冷重启的特殊文件(如数据库 schema 变更文件)。 * * 示例: `['src/lib/database-schema.ts', 'src/lib/migrations/...']` */ coldPatterns?: string[]; /** * 额外的忽略文件模式(glob 风格字符串) * * 匹配的文件不会触发任何重载动作。 * 适用于自动生成的文件或不需要监听的文件。 * * 示例: `['src/generated/...', 'src/.../*.generated.ts']` */ ignorePatterns?: string[]; } /** * classifyChange — 对单个文件变更进行分类 * * 分类优先级(从高到低): * 1. 用户自定义 ignorePatterns → ignore * 2. 用户自定义 coldPatterns → cold * 3. 内置 IGNORE_PATTERNS → ignore * 4. 内置 COLD_PATTERNS → cold * 5. src/client 与 public → client * 6. src/ 下的源码文件 → soft * 7. 其他 → ignore * * @param relativePath 相对于项目根目录的文件路径(使用 / 分隔符) * @param options 用户自定义分类选项(可选) * @returns 分类结果(action + reason) * * @example * ```ts * classifyChange('src/routes/user.ts') * // → { action: 'soft', reason: 'source code change' } * * classifyChange('src/config/default.ts') * // → { action: 'cold', reason: 'config/plugin change: /^src\\/config\\//' } * * classifyChange('node_modules/express/index.js') * // → { action: 'ignore', reason: 'matched ignore pattern: /^node_modules\\//' } * ``` */ export declare function classifyChange(relativePath: string, options?: ClassifierOptions): ChangeClassification; /** * matchGlobPattern — 简易 glob 模式匹配 * * 支持的 glob 语法(覆盖 vext 用户常见需求): * - `*` — 匹配路径段内的任意字符(不含 /) * - `**` — 匹配任意层级的路径(含 /) * - 字面量 — 精确匹配 * * 不支持的高级语法: * - `?`(单字符)、`[abc]`(字符集)、`{a,b}`(分支) * - 这些在 dev 配置场景中极少使用,如需支持可后续扩展 * * @param filePath 被匹配的文件路径(已规范化为 / 分隔符) * @param pattern glob 模式字符串 * @returns 是否匹配 */ export declare function matchGlobPattern(filePath: string, pattern: string): boolean; /** * 获取内置冷重启模式列表的副本 * * 仅供测试和调试使用,生产代码应使用 classifyChange() 函数。 */ export declare function getColdPatterns(): readonly RegExp[]; /** * 获取内置忽略模式列表的副本 * * 仅供测试和调试使用,生产代码应使用 classifyChange() 函数。 */ export declare function getIgnorePatterns(): readonly RegExp[];