# YAPI SDK 生成器

[![npm version](https://img.shields.io/npm/v/@postar/yapi-sdk-gen.svg)](https://www.npmjs.com/package/@postar/yapi-sdk-gen)
[![license](https://img.shields.io/npm/l/@postar/yapi-sdk-gen.svg)](https://github.com/your/repo/blob/master/LICENSE)

一个基于 YAPI 接口文档的自动化 SDK 生成工具，帮助前端团队提升开发效率和代码质量。

## ✨ 特性

- 🚀 **自动生成** - 从 YAPI 接口文档自动生成 TypeScript 类型定义、请求函数和 Mock 文件
- 🔒 **类型安全** - 完整的 TypeScript 类型支持，提供代码补全和类型检查
- 📦 **零配置** - 开箱即用的默认配置，满足大多数项目需求
- 🎨 **高扩展性** - 支持自定义模板，灵活适配不同项目规范
- 🔄 **实时同步** - 监听接口文档变更，自动更新本地代码
- 🎯 **开发提效** - 告别手写接口代码，专注业务逻辑开发

## 🎯 功能

- TypeScript 类型定义生成
- 请求函数自动生成
- Mock 数据文件生成
- 支持自定义模板
- 支持批量生成和单个生成
- 支持实时预览


## 📦 安装

```bash
npm install @postar/yapi-sdk-gen --save-dev
# 或者
pnpm install @postar/yapi-sdk-gen --save-dev
# 或者
yarn add @postar/yapi-sdk-gen -D
```
#### 使用示例

1. 根目录创建 `yapi-sdk-gen.js` 文件。
2. 在 yapi-sdk-gen.js 中配置：

```js
import startYapiSdkGenServer from '@postar/yapi-sdk-gen'
// 可选mock配置
const mockConfig = {
  enable: true, // 启用 mock 生成
  mockPath: 'apps/marketing_ai/mock', // mock 文件输出路径
  mockFolderName: '/', // mock 文件夹名称
  delay: 300, // 默认延迟时间
  prefix: '/dev-api/aiMarket', // API 前缀
  // 添加默认响应配置（可不配置，按默认）
  defaultResponse: {
    codeKey: 'code', // 状态码的字段名
    messageKey: 'msg', // 消息的字段名
    codeValue: 200, // 状态码的默认值
    messageValue: '操作成功' // 消息的默认值
  },
  // 添加模板配置（可不配置，按默认）
  template: {
    // 文件头部导入语句
    imports: `import { defineMock } from 'vite-plugin-mock-dev-server';\nimport Mock from 'mockjs';`,
    // 文件导出模板
    exportTemplate: configs => `export default defineMock([\n  ${configs}\n]);`,
    // mock 配置模板
    mockConfigTemplate: (config, formatJson) => `{
  url: '${config.url}',
  method: '${config.method.toUpperCase()}',
  delay: ${config.delay},
  body: Mock.mock(${formatJson(config.body)})
}`
 }
}
// 主要配置
const config = {
  mockConfig,
  port: 3456, // 启动端口
  serverUrl: 'http://xxx.xxx.xxx.xxx:xxx', // 服务器地址
  token: 'xxx', // 登录token
  projectId: '295', // 项目id
  outputConfig: {
    requestPath: 'apps/marketing_ai/src/apis', // 生成的请求路径
    requestFolderName: 'api', // 生成的请求文件夹名
    typePath: 'apps/marketing_ai/src/apis', // 生成的类型路径
    typeFolderName: 'types' // 生成的类型文件夹名
  },
  importTypePath: `@/apis/types`, // 导入的类型路径
  importTemplate: `import { request } from "../../index";\nconst baseUrl = 'aiMarket';`, // 导入模板
  importTypeTemplate: ({ importTypes, importPath }) =>
    `import type { ${importTypes.join(', ')} } from '${importPath}';`, // 自定义类型导入模板
  requestTemplate: ({
    functionName, // 生成的函数名
    functionParams, // 参数数组
    reqInterfaceName, // 请求类型
    resInterfaceName, // 返回类型
    urlWithParams, // url字符串，带模板变量
    method, // 请求方法
    hasQuery, // 是否有query参数
    hasBody // 是否有body参数
  }) => `export const ${functionName} = (${functionParams.join(', ')}) =>
  request<${reqInterfaceName}, ${resInterfaceName}>({
    url: \`/\${baseUrl}${urlWithParams}\`,
    method: "${method.toUpperCase()}"${hasQuery ? ',\n    params: query' : ''}${hasBody ? ',\n    data' : ''}
  });`,
}

startYapiSdkGenServer(config)
```
3. 根目录运行：

```bash
node yapi-sdk-gen.js
```
![YAPI SDK 生成器](https://img.remit.ee/api/file/BQACAgUAAyEGAASHRsPbAAIku2hZGtoJlEFtyOSRH2_6i3hHG9nAAALhFwACM-TIVom3NJ0ulVF0NgQ.png)
