swagger2api-v3 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,233 +1,101 @@
1
1
  # Swagger2API-v3
2
2
 
3
- 一个强大的 npm 工具包,用于从 Swagger JSON 文档生成前端接口代码。支持 TypeScript,按标签分组,详细注释生成等功能。
3
+ 一个强大的命令行工具,用于从 Swagger/OpenAPI 文档自动生成 TypeScript 接口代码。
4
4
 
5
- ## 特性
5
+ ## 特性
6
6
 
7
- - 🚀 **快速生成**: 从 Swagger JSON 快速生成 TypeScript 接口代码
8
- - 📁 **按标签分组**: 支持按 Swagger 标签自动分组生成文件
9
- - 📝 **详细注释**: 自动生成包含描述、参数、返回值的详细注释
10
- - 🎨 **代码格式化**: 支持自定义 lint 命令,在代码生成完成后统一格式化
11
- - ⚙️ **灵活配置**: 支持 `.swagger.config.ts` 配置文件
12
- - 🔧 **CLI 工具**: 提供完整的命令行工具
7
+ - 🚀 **快速生成** - 从 Swagger JSON 快速生成 TypeScript 接口代码
8
+ - 📁 **智能分组** - 支持按 Swagger 标签自动分组生成文件
9
+ - 📝 **详细注释** - 自动生成包含描述、参数、返回值的详细注释
10
+ - 🎨 **代码格式化** - 支持自定义格式化命令
11
+ - ⚙️ **环境适配** - 自动检测项目环境,生成对应格式的配置文件
12
+ - 🔧 **CLI 工具** - 提供完整的命令行工具
13
13
 
14
- ## 安装
14
+ ## 📦 安装
15
15
 
16
16
  ```bash
17
- # 使用 pnpm(推荐)
18
- pnpm add swagger2api-v3
17
+ # 全局安装
18
+ npm install -g swagger2api-v3
19
19
 
20
- # 使用 npm
20
+ # 项目依赖
21
21
  npm install swagger2api-v3
22
-
23
- # 使用 yarn
24
- yarn add swagger2api-v3
25
22
  ```
26
23
 
27
- ## 快速开始
24
+ ## 🚀 快速开始
28
25
 
29
26
  ### 1. 初始化配置文件
30
27
 
31
28
  ```bash
32
- # 创建基础配置文件
33
- npx swagger2api-v3 init
29
+ swagger2api-v3 init
34
30
  ```
35
31
 
36
- ### 2. 配置 `.swagger.config.ts`
32
+ ### 2. 配置文件说明
37
33
 
38
- ```typescript
34
+ 工具会根据项目环境自动生成对应格式的配置文件:
35
+
36
+ **CommonJS 环境** (`"type": "commonjs"` 或未设置):
37
+ ```javascript
39
38
  const config = {
40
- // Swagger JSON 文件路径或 URL
41
39
  input: 'https://petstore.swagger.io/v2/swagger.json',
42
-
43
- // 输出目录
44
40
  output: './src/api',
45
-
46
- // request 导入路径模板
47
- importTemplate: "import { request } from '../../utils/request';",
48
-
49
- // 生成器类型
41
+ importTemplate: "import { request } from '@/utils/request';",
50
42
  generator: 'typescript',
51
-
52
- // 按标签分组生成文件
53
43
  groupByTags: true,
54
-
55
- // 代码格式化命令(可选)
56
- lint: 'npm run lint',
57
-
58
- // 生成选项
44
+ overwrite: true,
45
+ prefix: '',
46
+ lint: 'prettier --write',
59
47
  options: {
60
- // 是否添加注释
61
48
  addComments: true
62
49
  }
63
50
  };
64
51
 
65
- export default config;
66
- ```
67
-
68
- ### 3. 生成接口代码
69
-
70
- ```bash
71
- # 使用配置文件生成
72
- npx swagger2api-v3 generate
73
-
74
- # 或者通过 npm script
75
- npm run swagger:generate
76
- ```
77
-
78
- ## NPM 脚本
79
-
80
- 在 `package.json` 中添加以下脚本:
81
-
82
- ```json
83
- {
84
- "scripts": {
85
- "swagger:generate": "npx swagger2api-v3 generate",
86
- "swagger:run": "npx swagger2api-v3 run",
87
- "swagger:init": "npx swagger2api-v3 init",
88
- "swagger:validate": "npx swagger2api-v3 validate"
89
- }
90
- }
91
- ```
92
-
93
- ## CLI 命令
94
-
95
- ### `swagger2api-v3 run`
96
-
97
- 运行 `.swagger.config.ts` 配置文件生成接口代码:
98
-
99
- ```bash
100
- # 使用默认配置文件
101
- swagger2api-v3 run
102
-
103
- # 指定配置文件
104
- swagger2api-v3 run -c ./custom.swagger.config.ts
52
+ module.exports = config;
105
53
  ```
106
54
 
107
- ### `swagger2api-v3 generate`
108
-
109
- 使用配置文件生成接口代码:
110
-
111
- ```bash
112
- # 使用默认配置文件 (.swagger.config.ts)
113
- swagger2api generate
114
-
115
- # 或者通过 npm script
116
- npm run swagger:generate
117
- ```
118
-
119
- ### `swagger2api-v3 init`
120
-
121
- 初始化配置文件:
122
-
123
- ```bash
124
- # 创建基础配置
125
- swagger2api-v3 init
126
-
127
- # 创建示例配置
128
- swagger2api-v3 init --example
55
+ **ES 模块环境** (`"type": "module"`):
56
+ ```javascript
57
+ const config = {
58
+ // ... 相同配置
59
+ };
129
60
 
130
- # 指定输出路径
131
- swagger2api-v3 init -o ./config/swagger.config.ts
61
+ export default config;
132
62
  ```
133
63
 
134
- ### `swagger2api-v3 validate`
135
-
136
- 验证 Swagger 文档:
64
+ ### 3. 生成接口代码
137
65
 
138
66
  ```bash
139
- # 验证文件
140
- swagger2api-v3 validate -i ./swagger.json
141
-
142
- # 使用配置文件验证
143
- swagger2api-v3 validate -c ./.swagger.config.ts
144
- ```
145
-
146
- ## 配置选项
147
-
148
- ### 配置文件结构
149
-
150
- ```typescript
151
- interface SwaggerConfig {
152
- // 必需配置
153
- input: string; // Swagger JSON 文件路径或 URL
154
- output: string; // 输出目录
155
-
156
- // 可选配置
157
- generator?: 'typescript' | 'javascript'; // 生成器类型,默认 'typescript'
158
- groupByTags?: boolean; // 是否按标签分组,默认 false
159
- overwrite?: boolean; // 是否覆盖更新,默认 true
160
- importTemplate?: string; // request 导入路径模板
161
- lint?: string; // 代码格式化命令(如:'npm run lint')
162
-
163
- // 生成选项
164
- options?: {
165
- addComments?: boolean; // 添加注释,默认 true
166
- };
167
- }
67
+ swagger2api-v3 generate
168
68
  ```
169
69
 
170
- ### 配置说明
171
-
172
- - **input**: Swagger JSON 文件的路径或 URL
173
- - **output**: 生成代码的输出目录
174
- - **generator**: 代码生成器类型,目前支持 'typescript'
175
- - **groupByTags**: 是否按 Swagger 标签分组生成文件到不同文件夹
176
- - **overwrite**: 是否覆盖更新,默认为 true。为 true 时会先删除输出目录下的所有文件再重新生成,为 false 时采用增量更新模式
177
- - **prefix**: 接口路径公共前缀,默认为空字符串。如果配置了此项,生成的所有接口前面都会添加这个前缀
178
- - **importTemplate**: 自定义 request 函数的导入语句模板
179
- - **lint**: 可选的代码格式化命令,在所有文件生成完成后执行
180
- - **options.addComments**: 是否在生成的代码中添加详细注释
181
-
182
- ## 代码格式化 (Lint)
70
+ ## ⚙️ 配置选项
183
71
 
184
- 工具支持在所有文件生成完成后执行自定义的代码格式化命令。
72
+ | 选项 | 类型 | 默认值 | 说明 |
73
+ |------|------|--------|------|
74
+ | `input` | string | - | Swagger JSON 文件路径或 URL |
75
+ | `output` | string | `'./src/api'` | 生成代码的输出目录 |
76
+ | `generator` | string | `'typescript'` | 代码生成器类型 |
77
+ | `groupByTags` | boolean | `true` | 是否按标签分组生成文件 |
78
+ | `overwrite` | boolean | `true` | 是否覆盖已存在的文件 |
79
+ | `prefix` | string | `''` | 接口路径公共前缀 |
80
+ | `importTemplate` | string | - | request 函数导入语句模板 |
81
+ | `lint` | string | - | 代码格式化命令(可选) |
82
+ | `options.addComments` | boolean | `true` | 是否添加详细注释 |
185
83
 
186
- ### 配置 Lint
84
+ ## 📁 生成的文件结构
187
85
 
188
- `.swagger.config.ts` 中配置 `lint` 字段:
86
+ ### 按标签分组 (推荐)
189
87
 
190
- ```typescript
191
- const config = {
192
- // ... 其他配置
193
-
194
- // 代码格式化命令
195
- lint: 'npm run lint', // 或者 'prettier --write' 等
196
- };
197
88
  ```
198
-
199
- ### Lint 执行时机
200
-
201
- - **执行时机**: 在所有文件生成完成后统一执行
202
- - **作用范围**: 对整个输出目录执行格式化
203
- - **可选配置**: 如果不配置 `lint` 字段,则不会执行任何格式化命令
204
-
205
- ### 常用 Lint 命令示例
206
-
207
- ```typescript
208
- // 使用 Prettier
209
- lint: 'prettier --write'
210
-
211
- // 使用 ESLint 修复
212
- lint: 'eslint --fix'
213
-
214
- // 使用项目的 npm script
215
- lint: 'npm run lint'
216
- lint: 'npm run format'
217
-
218
- // 使用 pnpm
219
- lint: 'pnpm run lint'
89
+ src/api/
90
+ ├── types.ts # 数据类型定义
91
+ ├── user/ # User 相关接口
92
+ │ └── index.ts
93
+ ├── auth/ # Auth 相关接口
94
+ │ └── index.ts
95
+ └── index.ts # 入口文件
220
96
  ```
221
97
 
222
- ### 注意事项
223
-
224
- - Lint 命令会在生成的输出目录中执行
225
- - 请确保项目中已安装相应的格式化工具
226
- - 如果 lint 命令执行失败,会显示错误信息但不会中断生成流程
227
-
228
- ## 生成的文件结构
229
-
230
- ### 不分组模式 (groupByTags: false)
98
+ ### 不分组
231
99
 
232
100
  ```
233
101
  src/api/
@@ -236,236 +104,91 @@ src/api/
236
104
  └── index.ts # 入口文件
237
105
  ```
238
106
 
239
- ### 按标签分组模式 (groupByTags: true)
240
-
241
- ```
242
- src/api/
243
- ├── types.ts # 数据类型定义
244
- ├── authcontroller/ # Auth 相关接口
245
- │ └── index.ts
246
- ├── usercontroller/ # User 相关接口
247
- │ └── index.ts
248
- ├── menucontroller/ # Menu 相关接口
249
- │ └── index.ts
250
- └── index.ts # 入口文件(导出所有模块)
251
- ```
252
-
253
- ## 生成的代码示例
107
+ ## 💡 使用示例
254
108
 
255
- ### 数据类型定义 (types.ts)
109
+ ### 生成的类型定义
256
110
 
257
111
  ```typescript
258
- /**
259
- * API 类型定义
260
- * 此文件由 swagger2api 自动生成,请勿手动修改
261
- */
112
+ // types.ts
262
113
  export interface LoginDto {
263
- /** 账号 */
114
+ /** 账号 */
264
115
  account: string;
265
- /** 密码 */
116
+ /** 密码 */
266
117
  password: string;
267
118
  }
268
119
 
269
- export interface UserInfoRespDto {
270
- /** 用户ID */
120
+ export interface UserInfo {
121
+ /** 用户ID */
271
122
  id: string;
272
- /** 用户名 */
123
+ /** 用户名 */
273
124
  username: string;
274
- /** 角色 */
275
- roles: string[];
276
- }
277
-
278
- export interface LoginRespDto {
279
- /** 用户信息 */
280
- user: any;
281
- /** token */
282
- token: string;
283
125
  }
284
126
  ```
285
127
 
286
- ### API 接口文件 (authcontroller/index.ts)
128
+ ### 生成的 API 接口
287
129
 
288
130
  ```typescript
289
- /**
290
- * AuthController API 接口
291
- * 此文件由 swagger2api 自动生成,请勿手动修改
292
- */
293
-
294
- import { request } from '../../utils/request';;
295
- import type { LoginDto, LoginRespDto } from '../types';
131
+ // auth/index.ts
132
+ import { request } from '@/utils/request';
133
+ import type { LoginDto, UserInfo } from '../types';
296
134
 
297
135
  /**
298
- * 登录
299
- *
136
+ * 用户登录
300
137
  * @param data 登录参数
301
- * @param config 请求配置
302
138
  */
303
- export const authControllerLogin = (data: LoginDto, config?: any) => {
304
- return request.post<LoginRespDto>({
305
- url: '/admin/auth/login',
306
- data,
307
- ...config
139
+ export const login = (data: LoginDto) => {
140
+ return request.post<UserInfo>({
141
+ url: '/auth/login',
142
+ data
308
143
  });
309
- }
310
- ```
311
-
312
- ### 入口文件 (index.ts)
313
-
314
- ```typescript
315
- /**
316
- * API 入口文件
317
- * 此文件由 swagger2api 自动生成,请勿手动修改
318
- */
319
-
320
- export * from './types';
321
- export * from './authcontroller';
322
- export * from './usercontroller';
323
- export * from './menucontroller';
324
- ```
325
-
326
- ## 使用示例
327
-
328
- ### 基础配置示例
329
-
330
- ```typescript
331
- // .swagger.config.ts
332
- const config = {
333
- input: 'http://localhost:3000/api/docs/json',
334
- output: './src/api',
335
- generator: 'typescript',
336
- groupByTags: false,
337
- overwrite: true,
338
- prefix: '',
339
- options: {
340
- addComments: true
341
- }
342
- };
343
-
344
- export default config;
345
- ```
346
-
347
- ### 完整配置示例
348
-
349
- ```typescript
350
- // .swagger.config.ts
351
- const config = {
352
- input: 'https://petstore.swagger.io/v2/swagger.json',
353
- output: './src/api',
354
- importTemplate: "import { request } from '../utils/request';",
355
- generator: 'typescript',
356
- groupByTags: true,
357
- overwrite: true,
358
- prefix: '/api',
359
- lint: 'prettier --write',
360
- options: {
361
- addComments: true
362
- }
363
144
  };
364
-
365
- export default config;
366
145
  ```
367
146
 
368
- ## 技术栈
369
-
370
- - **TypeScript** - 类型安全的 JavaScript
371
- - **Commander.js** - 命令行工具框架
372
- - **Prettier** - 代码格式化
373
- - **Axios** - HTTP 客户端(生成的代码中使用)
374
-
375
- ## 测试
376
-
377
- 项目包含完整的测试套件,包括单元测试和集成测试。
378
-
379
- ### 运行测试
147
+ ## 🔧 CLI 命令
380
148
 
381
149
  ```bash
382
- # 运行所有测试
383
- npm test
384
-
385
- # 运行测试并监听文件变化
386
- npm run test:watch
150
+ # 初始化配置文件
151
+ swagger2api-v3 init [--force]
387
152
 
388
- # 运行测试并生成覆盖率报告
389
- npm run test:coverage
153
+ # 生成接口代码
154
+ swagger2api-v3 generate [--config <path>]
390
155
 
391
- # CI环境下运行测试
392
- npm run test:ci
393
- ```
394
-
395
- ### 测试结构
156
+ # 验证配置文件
157
+ swagger2api-v3 validate [--config <path>]
396
158
 
159
+ # 查看帮助
160
+ swagger2api-v3 --help
397
161
  ```
398
- test/
399
- ├── config.test.ts # 配置管理测试
400
- ├── typescript-generator.test.ts # TypeScript生成器测试
401
- ├── cli.test.ts # CLI功能测试
402
- ├── integration.test.ts # 集成测试
403
- └── setup.ts # 测试环境设置
404
- ```
405
-
406
- ### 测试覆盖率
407
-
408
- 项目要求测试覆盖率达到80%以上,包括:
409
- - 分支覆盖率: 80%
410
- - 函数覆盖率: 80%
411
- - 行覆盖率: 80%
412
- - 语句覆盖率: 80%
413
162
 
414
- ## 开发与贡献
163
+ ## 📝 NPM 脚本
415
164
 
416
- ### 开发环境设置
165
+ `package.json` 中添加:
417
166
 
418
- ```bash
419
- # 克隆项目
420
- git clone <repository-url>
421
- cd swagger2api-v3
422
-
423
- # 安装依赖
424
- npm install
425
-
426
- # 构建项目
427
- npm run build
428
-
429
- # 运行测试
430
- npm test
431
-
432
- # 启动开发模式(监听文件变化)
433
- npm run test:watch
167
+ ```json
168
+ {
169
+ "scripts": {
170
+ "api:generate": "swagger2api-v3 generate",
171
+ "api:init": "swagger2api-v3 init"
172
+ }
173
+ }
434
174
  ```
435
175
 
436
- ### 代码质量
176
+ ## 🎨 代码格式化
437
177
 
438
- 项目使用以下工具确保代码质量:
178
+ 支持在生成完成后自动执行格式化命令:
439
179
 
440
- - **TypeScript**: 类型安全
441
- - **Prettier**: 代码格式化
442
- - **Jest**: 测试框架
443
- - **ESLint**: 代码规范(推荐)
444
-
445
- ### 贡献指南
446
-
447
- 1. Fork 项目
448
- 2. 创建功能分支 (`git checkout -b feature/AmazingFeature`)
449
- 3. 编写测试用例
450
- 4. 确保所有测试通过 (`npm test`)
451
- 5. 确保代码格式正确 (`npm run format`)
452
- 6. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
453
- 7. 推送到分支 (`git push origin feature/AmazingFeature`)
454
- 8. 打开 Pull Request
455
-
456
- ### 发布流程
457
-
458
- ```bash
459
- # 构建项目
460
- npm run build
180
+ ```javascript
181
+ // 配置文件中
182
+ const config = {
183
+ // ... 其他配置
184
+ lint: 'prettier --write' // 或 'eslint --fix' 等
185
+ };
186
+ ```
461
187
 
462
- # 运行所有测试
463
- npm run test:ci
188
+ ## 🤝 贡献
464
189
 
465
- # 发布到npm(需要权限)
466
- npm publish
467
- ```
190
+ 欢迎提交 Issue 和 Pull Request!
468
191
 
469
- ## 许可证
192
+ ## 📄 许可证
470
193
 
471
- MIT License - 查看 [LICENSE](LICENSE) 文件了解详情。
194
+ MIT License
package/dist/cli/index.js CHANGED
@@ -115,7 +115,7 @@ program
115
115
  */
116
116
  const config = {
117
117
  // Swagger JSON 文件路径或 URL
118
- input: 'https://petstore.swagger.io/v2/swagger.json',
118
+ input: 'http://localhost:3000/admin/docs/json',
119
119
 
120
120
  // 输出目录
121
121
  output: './src/api',
@@ -383,8 +383,9 @@ class CodeGenerator {
383
383
  case 'kebab-case':
384
384
  return (0, utils_1.toKebabCase)(cleanTag);
385
385
  case 'tag':
386
- default:
387
386
  return cleanTag.toLowerCase();
387
+ default:
388
+ return (0, utils_1.toCamelCase)(cleanTag);
388
389
  }
389
390
  }
390
391
  /**
@@ -61,7 +61,13 @@ class SwaggerParser {
61
61
  }
62
62
  }
63
63
  // 生成函数名
64
- const functionName = operation.operationId || (0, utils_1.pathToFunctionName)(method, path);
64
+ let functionName = operation.operationId || (0, utils_1.pathToFunctionName)(method, path);
65
+ // 如果使用了operationId,需要手动添加HTTP方法后缀
66
+ if (operation.operationId) {
67
+ // 将HTTP方法转换为首字母大写的形式并添加到末尾
68
+ const methodSuffix = method.charAt(0).toUpperCase() + method.slice(1).toLowerCase();
69
+ functionName = functionName + methodSuffix;
70
+ }
65
71
  // 获取响应类型
66
72
  const responseType = (0, utils_1.getResponseType)(operation.responses);
67
73
  // 获取请求体类型
@@ -66,19 +66,20 @@ function pathToFunctionName(method, path) {
66
66
  const cleanPath = path.replace(/\{([^}]+)\}/g, '$1');
67
67
  // 分割路径并过滤空字符串
68
68
  const segments = cleanPath.split('/').filter(segment => segment.length > 0);
69
- // 将方法名添加到开头
70
- const parts = [method.toLowerCase(), ...segments];
71
- // 转换为小驼峰命名
72
- return parts
73
- .map((part, index) => {
69
+ // 将路径段转换为驼峰命名
70
+ const pathParts = segments.map((part, index) => {
74
71
  // 移除特殊字符并转换为小驼峰
75
72
  const cleanPart = part.replace(/[^a-zA-Z0-9]/g, '');
76
73
  if (index === 0) {
77
74
  return cleanPart.toLowerCase();
78
75
  }
79
76
  return cleanPart.charAt(0).toUpperCase() + cleanPart.slice(1).toLowerCase();
80
- })
81
- .join('');
77
+ });
78
+ // 将HTTP方法转换为首字母大写的形式并添加到末尾
79
+ const methodSuffix = method.charAt(0).toUpperCase() + method.slice(1).toLowerCase();
80
+ // 组合路径名称和方法名称
81
+ const baseName = pathParts.join('');
82
+ return baseName + methodSuffix;
82
83
  }
83
84
  /**
84
85
  * 将字符串转换为kebab-case
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "swagger2api-v3",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "description": "从 Swagger/OpenAPI 文档生成 TypeScript API 接口的命令行工具",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",