/** * Framework Map — 配置层模块。 * * 职责边界: * - 负责:FrameworkMarker 等 配置层职责 * - 不负责:不属于本模块的职责由对应模块承担 * * 被谁调用:项目初始化、配置加载 * 调用谁:node:fs、node:path * * 数据流:输入 → FrameworkMarker 处理 → 输出 * 持久化:读写本地文件(详见代码内路径) */ /** 框架标记文件 */ interface FrameworkMarker { /** 相对项目根目录的文件路径 */ file: string; /** * 内容验证函数 — 返回 true 表示该文件确实表明使用了此框架。 * 不仅检查文件存在,还验证内容中的框架特征。 */ detect: (content: string, pkgJson?: PkgJsonData) => boolean; /** 从文件内容中提取版本号 */ extractVersion: (content: string, pkgJson?: PkgJsonData) => string; } /** 框架 Profile */ export interface FrameworkProfile { /** 框架标识名 */ name: string; /** 编程语言 */ lang: string; /** 层级:backend 或 frontend */ layer: "backend" | "frontend"; /** 检测标记列表(任一匹配即识别) */ markers: FrameworkMarker[]; /** 默认作用域目录 */ defaultScope: string[]; /** 默认构建命令(无 wrapper) */ defaultBuildCommands: { build: string; test: string; full: string; }; /** wrapper 脚本文件名(如 "mvnw") */ wrapperFile?: string; /** wrapper 存在时的构建命令前缀 */ wrapperPrefix?: string; } /** package.json 简化类型 — 仅用于依赖检查 */ export interface PkgJsonData { dependencies?: Record; devDependencies?: Record; scripts?: Record; } /** 从 package.json 合并所有依赖 */ export declare function getAllDeps(pkg?: PkgJsonData | null): Record; /** 从依赖版本字符串中提取主版本号 */ export declare function extractMajorVersion(versionStr?: string, fallback?: string): string; export declare const FRAMEWORK_PROFILES: FrameworkProfile[]; /** 按层级获取 profile */ export declare function getBackendProfiles(): FrameworkProfile[]; export declare function getFrontendProfiles(): FrameworkProfile[]; /** 按名称查找 profile */ export declare function getProfileByName(name: string): FrameworkProfile | undefined; /** * 对单个 profile 执行探测 — 检查标记文件是否存在且内容匹配。 * 返回匹配的标记信息,无匹配返回 null。 */ export declare function detectProfile(profile: FrameworkProfile, projectRoot: string, pkgJson?: PkgJsonData | null): { framework: string; lang: string; version: string; detected_from: string; } | null; /** * 获取框架的构建命令 — 考虑 wrapper 检测。 * 如果 wrapper 文件存在,使用 wrapperPrefix 替代默认命令前缀。 */ export declare function resolveBuildCommands(profile: FrameworkProfile, projectRoot: string): { build: string; test: string; full: string; }; export {};