/** * 简化的 Feature 配置类型(用于第三方厂商快速添加) */ import type { Framework, FeatureContext } from "./index.js"; /** * 文件生成配置 */ export interface FileConfig { /** * 文件路径(相对于项目根目录) * 支持模板变量:{{framework}}, {{packageManager}} 等 */ path: string; /** * 文件内容模板 * 支持变量替换:{{variableName}} * 支持条件语法:{{#if condition}}...{{/if}} */ content: string; /** * 是否覆盖已存在的文件(默认 false) */ overwrite?: boolean; /** * 文件操作模式(默认 'create') * - 'create': 创建新文件(如果存在则根据 overwrite 决定) * - 'append': 追加到文件末尾 * - 'prepend': 插入到文件开头 * - 'insert': 在指定标记处插入(需要 insertMarker) * - 'merge': 智能合并(仅适用于 JSON 等结构化文件) */ mode?: "create" | "append" | "prepend" | "insert" | "merge"; /** * 插入标记(mode 为 'insert' 时使用) * 例如:'// FeatNPM: insert here' */ insertMarker?: string; /** * 条件生成(可选) * 如果提供,只有满足条件时才生成此文件 */ condition?: { /** * 只在特定框架下生成 */ framework?: readonly Framework[]; /** * 是否在 TypeScript 项目中使用(需要检测项目是否有 TypeScript) */ hasTypeScript?: boolean; /** * 是否在 Vite 项目中使用(需要检测项目是否有 Vite) */ hasVite?: boolean; /** * 自定义条件函数 */ custom?: (context: FeatureContext) => boolean; }; } /** * 配置合并规则 */ export interface ConfigMergeRule { /** * 配置文件路径(如 package.json, tsconfig.json) * 支持模板变量:{{framework}}, {{packageManager}} 等 */ file: string; /** * 合并策略:merge(深度合并)或 overwrite(覆盖) */ strategy: "merge" | "overwrite"; /** * 要合并的配置对象 */ config: Record; /** * 数组合并策略(仅当 strategy 为 'merge' 时有效) * - 'replace': 替换整个数组(默认) * - 'merge': 合并数组(去重) * - 'append': 追加到数组末尾 */ arrayStrategy?: "replace" | "merge" | "append"; } /** * 简化的 Feature 配置 * 第三方厂商只需要提供这些信息即可 */ export interface SimpleFeatureConfig { /** * Feature 元数据 */ meta: { /** * npm 包名称(唯一标识,系统会根据此包名自动安装) * - 不包含版本号(如 "vue"):安装最新版本(推荐) * - 包含版本号(如 "vue@^3.0.0"):安装指定版本 */ id: string; /** * 额外需要安装的包(可选) * 例如:Element Plus 需要同时安装 @element-plus/icons-vue */ additionalPackages?: Array<{ /** * 包名 */ name: string; /** * 版本号(可选,不提供则安装最新版本) */ version?: string; /** * 是否作为开发依赖(默认使用 meta.dependencyType) */ dev?: boolean; }>; desc: string; /** * 分类列表(一个包可能属于多个分类) */ category: string[]; /** * 依赖类型:dev(开发依赖)或 prod(生产依赖) * 默认为 "prod"(生产依赖) */ dependencyType?: "dev" | "prod"; conflicts?: string[]; /** * 框架依赖(表示该包只能在特定框架下使用) * 例如:["vue"] 表示只能在 Vue 项目中使用 */ frameworkDeps?: readonly Framework[]; required?: boolean; github?: string; githubStars?: number; homepage?: string; npmjs?: string; npmDownloads?: number; features?: string[]; installation?: string; usage?: string; }; /** * 安装配置 */ install?: { /** * 要生成的文件列表 */ files?: FileConfig[]; /** * 要合并的配置文件 */ configs?: ConfigMergeRule[]; /** * 自定义安装脚本(可选,高级用法) */ script?: string; }; /** * 卸载配置 */ uninstall?: { /** * 要删除的文件列表 */ files?: string[]; /** * 要恢复的配置文件 */ configs?: string[]; /** * 自定义卸载脚本(可选,高级用法) */ script?: string; }; /** * 检查配置 */ check?: { /** * 前置条件检查函数(可选) */ script?: (context: FeatureContext) => Promise<{ canApply: boolean; reason?: string; }>; }; } //# sourceMappingURL=feature-config.d.ts.map