import type { GeneratorConfig } from "@alova/wormhole"; export default { generator: [ { input: "http://localhost:8060/v3/api-docs", // 文档平台类型 platform: "swagger", // 生成代码的输出目录 output: "src/api", // 响应数据的媒体类型 responseMediaType: "application/json", // 请求体数据的媒体类型 bodyMediaType: "application/json", // 生成的 API 版本 version: 1, // 生成代码类型 type: "typescript", // 全局 API 名称 global: "Apis", splitImplementation: true, implementation: "inline", // API 处理函数 handleApi: apiDescriptor => { // 过滤掉已废弃的 API if (apiDescriptor.deprecated) { return undefined; } const newOpId = apiDescriptor.summary?.trim() || apiDescriptor.operationId; const url = apiDescriptor.url.replace(/^\/{platform}\//, "/api/"); // springdoc 默认把 Controller 类名转为 kebab tag(如 base-controller), // 而业务代码统一用 Pascal 无 Controller 的命名空间(如 Base)调用。 // 这里剥掉 -controller 后缀并转为 PascalCase,使 wormhole 生成的 // API 路径(Base.getUserInfo 等)与 Apis.Base.xxx 调用风格一致。 // 由于转换结果是合法 JS 标识符,wormhole 会原样保留、不做 camelCase 改写。 if (Array.isArray(apiDescriptor.tags)) { apiDescriptor.tags = apiDescriptor.tags.map((tag: string) => { const stripped = tag.replace(/-?controller$/i, ""); return stripped .split(/[-_\s]+/) .filter(Boolean) .map((w: string) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase()) .join(""); }); } return { ...apiDescriptor, operationId: newOpId, // 关键:改掉它 url, }; }, }, ], } as GeneratorConfig;