UNPKG

autosnippet

Version:

Extract code patterns into a knowledge base for AI coding assistants

107 lines (106 loc) 3.98 kB
/** * FileDeployer — 统一文件部署引擎 * * 根据 FileManifest 中的策略,部署文件到用户项目。 * SetupService 和 UpgradeService 共享此引擎,消除所有重复代码。 * * 策略实现: * overwrite — mkdirSync + copyFileSync * overwrite-dir — 递归复制目录中的所有文件 * signature-safe — safeCopyFile(签名匹配才覆盖) * create-only — 仅在文件不存在时复制 * merge-json — 读取现有 JSON,合并 autosnippet 键,写回 * merge-gitignore — 增量追加缺失规则 + 迁移旧格式 * backup-overwrite — 备份旧文件再覆盖 * inject-marker — 在 <!-- autosnippet:begin/end --> 标记间注入 * generate — 调用自定义生成函数 */ /** Manifest entry type */ interface ManifestEntry { id: string; src?: string; dest: string | null; strategy: string; on: string; category?: string; jsonKey?: string; chmod?: boolean; generate?: string; fallback?: string; resolveDest?: string; cleanup?: string[]; requireDir?: string; } export declare class FileDeployer { force: boolean; projectName: string; projectRoot: string; /** @param {{ projectRoot: string, force?: boolean }} options */ constructor({ projectRoot, force }: { projectRoot: string; force?: boolean; }); /** * 部署所有适用的文件 * @param options 可选过滤部署的 category * @returns > }} */ deployAll(mode: 'setup' | 'upgrade', { filter }?: { filter?: string[]; }): { deployed: string[]; skipped: string[]; errors: { id: string; error: string; }[]; }; /** 按 category 部署 */ deployCategory(category: string, mode: 'setup' | 'upgrade'): { deployed: string[]; skipped: string[]; errors: { id: string; error: string; }[]; }; /** * @param entry Manifest 条目 * @returns 是否实际写入了文件 */ _deployOne(entry: ManifestEntry, mode: 'setup' | 'upgrade'): boolean; /** overwrite — AutoSnippet 完全拥有,始终覆盖 */ _strategyOverwrite(entry: ManifestEntry): boolean; /** overwrite-dir — 递归覆盖目录 */ _strategyOverwriteDir(entry: ManifestEntry): boolean; /** signature-safe — 有 AutoSnippet 签名才覆盖 */ _strategySignatureSafe(entry: ManifestEntry, mode: 'setup' | 'upgrade'): boolean; /** create-only — 仅在不存在时创建 */ _strategyCreateOnly(entry: ManifestEntry): boolean; /** merge-json — 读取现有 JSON,合并 autosnippet 键 */ _strategyMergeJson(entry: ManifestEntry): boolean; /** * merge-gitignore — section-based 管理 * * 设计:用 BEGIN/END 标记包裹 AutoSnippet 规则块,整块替换。 * - 首次:追加 section 到文件末尾 * - 升级:替换已有 section(规则变更自动生效) * - 迁移:清理旧版逐行追加的散落规则 */ _strategyMergeGitignore(_entry: ManifestEntry): boolean; /** backup-overwrite — 备份旧文件后覆盖 */ _strategyBackupOverwrite(entry: ManifestEntry): boolean; /** inject-marker — 在 autosnippet:begin/end 标记间注入 */ _strategyInjectMarker(entry: ManifestEntry): boolean; /** generate — 自定义生成逻辑 */ _strategyGenerate(entry: ManifestEntry): boolean; _generators: Record<string, (this: FileDeployer) => boolean | void>; _resolvers: Record<string, (this: FileDeployer) => string | null>; /** 递归复制目录 */ _copyDirRecursive(srcDir: string, destDir: string, chmod?: boolean): boolean; /** chmod +x */ _chmodExec(filePath: string): void; /** 异步触发 Cursor Delivery Pipeline */ _triggerCursorDeliveryAsync(): Promise<void>; } export default FileDeployer;