apifox-mock-generator 1.0.0 → 1.1.0
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/CHANGELOG.md +78 -0
- package/README.md +77 -14
- package/dist/package.json +1 -1
- package/dist/src/core/apifox-client.js +5 -12
- package/dist/src/core/apifox-client.js.map +1 -1
- package/dist/src/generators/templates/mock-template.js +204 -143
- package/dist/src/generators/templates/mock-template.js.map +1 -1
- package/dist/src/generators/templates/smart-mock-rules.d.ts +47 -0
- package/dist/src/generators/templates/smart-mock-rules.d.ts.map +1 -0
- package/dist/src/generators/templates/smart-mock-rules.js +643 -0
- package/dist/src/generators/templates/smart-mock-rules.js.map +1 -0
- package/dist/src/generators/templates/type-template.d.ts +7 -3
- package/dist/src/generators/templates/type-template.d.ts.map +1 -1
- package/dist/src/generators/templates/type-template.js +209 -35
- package/dist/src/generators/templates/type-template.js.map +1 -1
- package/dist/src/types/index.d.ts +3 -3
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/src/utils/type-mapping.d.ts.map +1 -1
- package/dist/src/utils/type-mapping.js +7 -1
- package/dist/src/utils/type-mapping.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,84 @@
|
|
|
5
5
|
格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.0.0/),
|
|
6
6
|
版本号遵循 [语义化版本](https://semver.org/lang/zh-CN/)。
|
|
7
7
|
|
|
8
|
+
## [1.1.0] - 2025-10-13
|
|
9
|
+
|
|
10
|
+
### 🎯 核心功能
|
|
11
|
+
|
|
12
|
+
#### 🎭 直接使用 Apifox Mock 规则
|
|
13
|
+
|
|
14
|
+
- **使用 Apifox 配置** - 直接使用 Apifox 中为字段配置的 mock 规则
|
|
15
|
+
- **统一管理** - Mock 规则在 Apifox 平台统一管理,本地与云端保持完全一致
|
|
16
|
+
- **零配置** - 在 Apifox 中配置好 mock 规则,生成时自动应用
|
|
17
|
+
|
|
18
|
+
### ✨ 新增功能
|
|
19
|
+
|
|
20
|
+
#### 🔄 Apifox Mock 规则支持
|
|
21
|
+
|
|
22
|
+
- **x-apifox-mock 字段** - 自动提取 Apifox 的 `x-apifox-mock` 扩展字段中的 mock 规则
|
|
23
|
+
- **智能语法转换** - 自动将 Apifox 模板语法(`{{$xxx}}`)转换为 Mock.js 语法(`@xxx`)
|
|
24
|
+
- **双语法支持** - 同时支持 Mock.js 语法和 Apifox 模板语法
|
|
25
|
+
- **自动应用** - 启用 `includeApifoxExtensionProperties` 后自动拉取和应用规则
|
|
26
|
+
|
|
27
|
+
支持的 Apifox 模板转换:
|
|
28
|
+
- `{{$string.uuid}}` → `@guid`
|
|
29
|
+
- `{{$person.fullName(locale='zh_CN')}}` → `@cname`
|
|
30
|
+
- `{{$internet.email}}` → `@email`
|
|
31
|
+
- `{{$phone.number}}` → `/^1[3-9]\\d{9}$/`
|
|
32
|
+
- 更多模板映射...
|
|
33
|
+
|
|
34
|
+
#### 📊 回退策略
|
|
35
|
+
|
|
36
|
+
当字段没有配置 Apifox mock 规则时,使用以下回退策略:
|
|
37
|
+
|
|
38
|
+
1. **示例值优先** - 使用 schema 中定义的 `example`
|
|
39
|
+
2. **枚举值** - 使用 `enum` 中的值(通过 `@pick` 随机选择)
|
|
40
|
+
3. **基本规则** - 根据字段类型使用简单的默认规则
|
|
41
|
+
- 字符串:`@cword(3, 8)`
|
|
42
|
+
- 数字/整数:根据 `minimum/maximum` 生成范围
|
|
43
|
+
- 布尔值:`@boolean`
|
|
44
|
+
|
|
45
|
+
### 📖 文档更新
|
|
46
|
+
|
|
47
|
+
- **README.md** - 新增"Apifox Mock 规则"章节
|
|
48
|
+
- 说明工作原理和使用方法
|
|
49
|
+
- 提供使用示例
|
|
50
|
+
- 更新项目结构说明
|
|
51
|
+
- **CHANGELOG.md** - 详细记录所有变更
|
|
52
|
+
|
|
53
|
+
### 🎯 优势
|
|
54
|
+
|
|
55
|
+
- ✅ **统一管理** - 在 Apifox 中统一管理所有 mock 规则,团队协作更方便
|
|
56
|
+
- ✅ **完全一致** - 本地 Mock 数据与 Apifox 云端 Mock 保持一致
|
|
57
|
+
- ✅ **零学习成本** - 使用 Apifox 原生的 mock 规则,无需学习新语法
|
|
58
|
+
- ✅ **功能完整** - 支持 Apifox 的所有 mock 规则和高级功能
|
|
59
|
+
|
|
60
|
+
### 🚀 使用示例
|
|
61
|
+
|
|
62
|
+
在 Apifox 中配置字段的 mock 规则:
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
字段名: email
|
|
66
|
+
类型: string
|
|
67
|
+
Mock 规则: @email
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
生成的 Mock 文件会自动应用该规则:
|
|
71
|
+
|
|
72
|
+
```javascript
|
|
73
|
+
Mock.mock({
|
|
74
|
+
email: '@email' // 直接使用 Apifox 配置的规则
|
|
75
|
+
})
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### ⚡ 兼容性
|
|
79
|
+
|
|
80
|
+
- 向下兼容 v1.0.0
|
|
81
|
+
- 无需修改配置文件
|
|
82
|
+
- 自动应用 Apifox mock 规则
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
8
86
|
## [1.0.0] - 2025-10-10
|
|
9
87
|
|
|
10
88
|
### ✨ 初始版本发布
|
package/README.md
CHANGED
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
### 核心功能
|
|
19
19
|
- 🚀 **Apifox 集成** - 自动从 Apifox 项目拉取 API 接口定义(支持 OpenAPI 3.0)
|
|
20
20
|
- 📝 **类型生成** - 生成 TypeScript 类型文件(.ts 格式),支持复杂类型、嵌套对象、枚举等
|
|
21
|
-
- 🎭 **Mock
|
|
21
|
+
- 🎭 **Apifox Mock** - **✨ 直接使用 Apifox 的 mock 规则**,无需本地配置,完全继承 Apifox 的数据生成能力
|
|
22
22
|
- 🌐 **Mock 服务器** - 基于 Express 的本地 Mock 服务,快速响应,支持 CORS
|
|
23
23
|
|
|
24
24
|
### 高级特性
|
|
@@ -53,14 +53,13 @@ pnpm add apifox-mock-generator -D
|
|
|
53
53
|
}
|
|
54
54
|
```
|
|
55
55
|
|
|
56
|
-
> ⚠️ 重要:此文件包含敏感信息,请添加到 `.gitignore`
|
|
57
56
|
|
|
58
57
|
### 2. 配置 package.json 脚本
|
|
59
58
|
|
|
60
59
|
```json
|
|
61
60
|
{
|
|
62
61
|
"scripts": {
|
|
63
|
-
"mock
|
|
62
|
+
"auto-mock": "apifox-mock generate",
|
|
64
63
|
"mock:serve": "apifox-mock serve",
|
|
65
64
|
"mock:dev": "apifox-mock dev"
|
|
66
65
|
}
|
|
@@ -140,10 +139,6 @@ const login = async (data: LoginRequest): Promise<LoginResponse> => {
|
|
|
140
139
|
"type": "ALL",
|
|
141
140
|
"excludedByTags": ["已废弃", "测试接口"]
|
|
142
141
|
},
|
|
143
|
-
"options": {
|
|
144
|
-
"includeApifoxExtensionProperties": false,
|
|
145
|
-
"addFoldersToTags": true
|
|
146
|
-
},
|
|
147
142
|
"includePaths": ["/api/auth/**", "/api/user/**"],
|
|
148
143
|
"excludePaths": ["/api/admin/**"],
|
|
149
144
|
"excludeDeprecated": true,
|
|
@@ -164,12 +159,7 @@ const login = async (data: LoginRequest): Promise<LoginResponse> => {
|
|
|
164
159
|
| `folderPath` | `string` | 文件夹路径(type 为 FOLDER 时) |
|
|
165
160
|
| `apiIdList` | `string[]` | API ID 列表(type 为 API_LIST 时) |
|
|
166
161
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
| 参数 | 类型 | 说明 |
|
|
170
|
-
|------|------|------|
|
|
171
|
-
| `includeApifoxExtensionProperties` | `boolean` | 是否包含 Apifox 扩展属性 |
|
|
172
|
-
| `addFoldersToTags` | `boolean` | 是否将文件夹路径添加到标签 |
|
|
162
|
+
> 📝 **注意**: 系统默认启用 Apifox 扩展属性和文件夹标签功能,无需额外配置。
|
|
173
163
|
|
|
174
164
|
#### 客户端过滤(生成时)
|
|
175
165
|
|
|
@@ -269,6 +259,63 @@ npm run mock:dev
|
|
|
269
259
|
|
|
270
260
|
## 🎯 高级用法
|
|
271
261
|
|
|
262
|
+
### 🎭 Apifox Mock 规则
|
|
263
|
+
|
|
264
|
+
本工具**直接使用 Apifox 中配置的 mock 规则**,无需在本地重复配置。只需在 Apifox 中设置好字段的 mock 规则,生成时会自动应用。
|
|
265
|
+
|
|
266
|
+
#### 工作原理
|
|
267
|
+
|
|
268
|
+
1. **在 Apifox 中配置** - 为每个字段设置 mock 规则(支持 Mock.js 语法和 Apifox 模板语法)
|
|
269
|
+
2. **自动拉取规则** - 启用 `includeApifoxExtensionProperties` 后,导出的 OpenAPI 数据中会包含 `x-apifox-mock` 扩展字段
|
|
270
|
+
3. **智能转换** - 自动将 Apifox 模板语法(如 `{{$string.uuid}}`)转换为 Mock.js 语法(如 `@guid`)
|
|
271
|
+
4. **生成 Mock 文件** - 工具自动提取并转换 Apifox 的 mock 规则,生成本地 Mock 文件
|
|
272
|
+
|
|
273
|
+
#### 示例
|
|
274
|
+
|
|
275
|
+
在 Apifox 中配置字段的 mock 规则:
|
|
276
|
+
|
|
277
|
+
```
|
|
278
|
+
字段名: id
|
|
279
|
+
类型: string
|
|
280
|
+
Mock 规则: {{$string.uuid}} ← Apifox 模板语法
|
|
281
|
+
|
|
282
|
+
字段名: name
|
|
283
|
+
类型: string
|
|
284
|
+
Mock 规则: {{$person.fullName(locale='zh_CN')}}
|
|
285
|
+
|
|
286
|
+
字段名: code
|
|
287
|
+
类型: number
|
|
288
|
+
Mock 规则: @integer(0, 999) ← Mock.js 语法
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
生成的 Mock 文件会自动转换:
|
|
292
|
+
|
|
293
|
+
```javascript
|
|
294
|
+
Mock.mock({
|
|
295
|
+
code: '@integer(0, 999)', // 直接使用 Mock.js 规则
|
|
296
|
+
data: {
|
|
297
|
+
id: '@guid', // {{$string.uuid}} → @guid
|
|
298
|
+
name: '@cname', // {{$person.fullName(locale='zh_CN')}} → @cname
|
|
299
|
+
email: '@email' // 直接使用 Mock.js 规则
|
|
300
|
+
}
|
|
301
|
+
})
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
#### 优势
|
|
305
|
+
|
|
306
|
+
- ✅ **统一管理** - 在 Apifox 中统一管理所有 mock 规则,团队协作更方便
|
|
307
|
+
- ✅ **完全一致** - 本地 Mock 数据与 Apifox 云端 Mock 保持一致
|
|
308
|
+
- ✅ **智能转换** - 自动转换 Apifox 模板语法为 Mock.js 语法,无缝兼容
|
|
309
|
+
- ✅ **双语法支持** - 同时支持 Mock.js 语法(`@xxx`)和 Apifox 模板语法(`{{$xxx}}`)
|
|
310
|
+
|
|
311
|
+
#### 回退策略
|
|
312
|
+
|
|
313
|
+
如果字段没有配置 Apifox mock 规则,会使用以下回退策略:
|
|
314
|
+
|
|
315
|
+
1. **示例值** - 使用 schema 中定义的 `example`
|
|
316
|
+
2. **枚举值** - 使用 `enum` 中的值(通过 `@pick` 随机选择)
|
|
317
|
+
3. **基本规则** - 根据字段类型使用简单的默认规则(如字符串用 `@cword(3,8)`)
|
|
318
|
+
|
|
272
319
|
### 自定义 Mock 数据
|
|
273
320
|
|
|
274
321
|
修改生成的 Mock 文件(如 `mock/api/auth/login.js`):
|
|
@@ -455,7 +502,7 @@ apifox-mock-generator/
|
|
|
455
502
|
│ │ └── openapi-converter.ts # OpenAPI 转换器
|
|
456
503
|
│ ├── generators/ # 生成器模块
|
|
457
504
|
│ │ ├── templates/ # 模板生成
|
|
458
|
-
│ │ │ ├── mock-template.ts # Mock
|
|
505
|
+
│ │ │ ├── mock-template.ts # Mock 文件模板(使用 Apifox mock 规则)
|
|
459
506
|
│ │ │ └── type-template.ts # TypeScript 类型模板
|
|
460
507
|
│ │ ├── mock-generator.ts # Mock 文件生成器
|
|
461
508
|
│ │ └── type-generator.ts # 类型文件生成器
|
|
@@ -653,6 +700,22 @@ mock/
|
|
|
653
700
|
|
|
654
701
|
## 📝 更新日志
|
|
655
702
|
|
|
703
|
+
### v1.1.0 (2025-10-13)
|
|
704
|
+
|
|
705
|
+
#### 🎯 核心功能
|
|
706
|
+
- 🎭 **直接使用 Apifox Mock 规则** - 使用 Apifox 中配置的 mock 规则,本地与云端保持完全一致
|
|
707
|
+
- 🔄 **统一管理** - Mock 规则在 Apifox 平台统一管理,团队协作更方便
|
|
708
|
+
|
|
709
|
+
#### ✨ 新功能
|
|
710
|
+
- ✅ 支持 Apifox 的 `x-apifox-mock` 扩展字段,提取 mock 规则
|
|
711
|
+
- ✅ 智能转换 Apifox 模板语法(`{{$xxx}}`)为 Mock.js 语法(`@xxx`)
|
|
712
|
+
- ✅ 同时支持 Mock.js 和 Apifox 两种语法
|
|
713
|
+
- ✅ 完善的回退策略(示例值 → 枚举值 → 基本规则)
|
|
714
|
+
|
|
715
|
+
#### 📖 文档更新
|
|
716
|
+
- 新增"Apifox Mock 规则"章节,说明使用方法
|
|
717
|
+
- 更新项目结构说明
|
|
718
|
+
|
|
656
719
|
### v1.0.0 (2025-10-10)
|
|
657
720
|
|
|
658
721
|
#### 核心功能
|
package/dist/package.json
CHANGED
|
@@ -60,18 +60,11 @@ function buildRequestBody(config) {
|
|
|
60
60
|
requestBody.scope = scope;
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
if (config.apiFilter.options.addFoldersToTags !== undefined) {
|
|
69
|
-
options.addFoldersToTags = config.apiFilter.options.addFoldersToTags;
|
|
70
|
-
}
|
|
71
|
-
if (Object.keys(options).length > 0) {
|
|
72
|
-
requestBody.options = options;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
63
|
+
// 始终启用 Apifox 扩展属性和文件夹标签(写死为 true)
|
|
64
|
+
requestBody.options = {
|
|
65
|
+
includeApifoxExtensionProperties: true,
|
|
66
|
+
addFoldersToTags: true
|
|
67
|
+
};
|
|
75
68
|
}
|
|
76
69
|
return requestBody;
|
|
77
70
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apifox-client.js","sourceRoot":"","sources":["../../../src/core/apifox-client.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"apifox-client.js","sourceRoot":"","sources":["../../../src/core/apifox-client.ts"],"names":[],"mappings":"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"}
|