yapi-to-typescript2 1.0.0 → 1.0.2
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/lib/cjs/Generator.d.ts +49 -0
- package/lib/cjs/Generator.js +729 -1121
- package/lib/cjs/SwaggerToYApiServer.d.ts +20 -0
- package/lib/cjs/SwaggerToYApiServer.js +222 -330
- package/lib/cjs/cli.d.ts +4 -0
- package/lib/cjs/cli.js +247 -278
- package/lib/cjs/helpers.d.ts +49 -0
- package/lib/cjs/helpers.js +179 -203
- package/lib/cjs/index.d.ts +2 -0
- package/lib/cjs/index.js +17 -18
- package/lib/cjs/swaggerJsonToYApiData.d.ts +6 -0
- package/lib/cjs/swaggerJsonToYApiData.js +408 -465
- package/lib/cjs/types.d.ts +693 -0
- package/lib/cjs/types.js +75 -82
- package/lib/cjs/utils.d.ts +92 -0
- package/lib/cjs/utils.js +499 -654
- package/lib/esm/Generator.d.ts +49 -0
- package/lib/esm/Generator.js +696 -1093
- package/lib/esm/SwaggerToYApiServer.d.ts +20 -0
- package/lib/esm/SwaggerToYApiServer.js +212 -307
- package/lib/esm/cli.d.ts +4 -0
- package/lib/esm/cli.js +209 -242
- package/lib/esm/helpers.d.ts +49 -0
- package/lib/esm/helpers.js +174 -190
- package/lib/esm/index.d.ts +2 -845
- package/lib/esm/index.js +1 -1
- package/lib/esm/swaggerJsonToYApiData.d.ts +6 -0
- package/lib/esm/swaggerJsonToYApiData.js +399 -450
- package/lib/esm/types.d.ts +693 -0
- package/lib/esm/types.js +66 -55
- package/lib/esm/utils.d.ts +92 -0
- package/lib/esm/utils.js +462 -584
- package/package.json +9 -4
|
@@ -0,0 +1,693 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { AsyncOrSync, LiteralUnion, OmitStrict, OneOrMore } from 'vtils/types';
|
|
3
|
+
import { JSONSchema4, JSONSchema4TypeName } from 'json-schema';
|
|
4
|
+
import { ParsedPath } from 'path';
|
|
5
|
+
export interface ChangeCase {
|
|
6
|
+
/**
|
|
7
|
+
* @example
|
|
8
|
+
* changeCase.camelCase('test string') // => 'testString'
|
|
9
|
+
*/
|
|
10
|
+
camelCase: (value: string) => string;
|
|
11
|
+
/**
|
|
12
|
+
* @example
|
|
13
|
+
* changeCase.constantCase('test string') // => 'TEST_STRING'
|
|
14
|
+
*/
|
|
15
|
+
constantCase: (value: string) => string;
|
|
16
|
+
/**
|
|
17
|
+
* @example
|
|
18
|
+
* changeCase.dotCase('test string') // => 'test.string'
|
|
19
|
+
*/
|
|
20
|
+
dotCase: (value: string) => string;
|
|
21
|
+
/**
|
|
22
|
+
* @example
|
|
23
|
+
* changeCase.headerCase('test string') // => 'Test-String'
|
|
24
|
+
*/
|
|
25
|
+
headerCase: (value: string) => string;
|
|
26
|
+
/**
|
|
27
|
+
* @example
|
|
28
|
+
* changeCase.lowerCase('TEST STRING') // => 'test string'
|
|
29
|
+
*/
|
|
30
|
+
lowerCase: (value: string) => string;
|
|
31
|
+
/**
|
|
32
|
+
* @example
|
|
33
|
+
* changeCase.lowerCaseFirst('TEST') // => 'tEST'
|
|
34
|
+
*/
|
|
35
|
+
lowerCaseFirst: (value: string) => string;
|
|
36
|
+
/**
|
|
37
|
+
* @example
|
|
38
|
+
* changeCase.paramCase('test string') // => 'test-string'
|
|
39
|
+
*/
|
|
40
|
+
paramCase: (value: string) => string;
|
|
41
|
+
/**
|
|
42
|
+
* @example
|
|
43
|
+
* changeCase.pascalCase('test string') // => 'TestString'
|
|
44
|
+
*/
|
|
45
|
+
pascalCase: (value: string) => string;
|
|
46
|
+
/**
|
|
47
|
+
* @example
|
|
48
|
+
* changeCase.pathCase('test string') // => 'test/string'
|
|
49
|
+
*/
|
|
50
|
+
pathCase: (value: string) => string;
|
|
51
|
+
/**
|
|
52
|
+
* @example
|
|
53
|
+
* changeCase.sentenceCase('testString') // => 'Test string'
|
|
54
|
+
*/
|
|
55
|
+
sentenceCase: (value: string) => string;
|
|
56
|
+
/**
|
|
57
|
+
* @example
|
|
58
|
+
* changeCase.snakeCase('test string') // => 'test_string'
|
|
59
|
+
*/
|
|
60
|
+
snakeCase: (value: string) => string;
|
|
61
|
+
/**
|
|
62
|
+
* @example
|
|
63
|
+
* changeCase.swapCase('Test String') // => 'tEST sTRING'
|
|
64
|
+
*/
|
|
65
|
+
swapCase: (value: string) => string;
|
|
66
|
+
/**
|
|
67
|
+
* @example
|
|
68
|
+
* changeCase.titleCase('a simple test') // => 'A Simple Test'
|
|
69
|
+
*/
|
|
70
|
+
titleCase: (value: string) => string;
|
|
71
|
+
/**
|
|
72
|
+
* @example
|
|
73
|
+
* changeCase.upperCase('test string') // => 'TEST STRING'
|
|
74
|
+
*/
|
|
75
|
+
upperCase: (value: string) => string;
|
|
76
|
+
/**
|
|
77
|
+
* @example
|
|
78
|
+
* changeCase.upperCaseFirst('test') // => 'Test'
|
|
79
|
+
*/
|
|
80
|
+
upperCaseFirst: (value: string) => string;
|
|
81
|
+
}
|
|
82
|
+
/** 请求方式 */
|
|
83
|
+
export declare enum Method {
|
|
84
|
+
GET = "GET",
|
|
85
|
+
POST = "POST",
|
|
86
|
+
PUT = "PUT",
|
|
87
|
+
DELETE = "DELETE",
|
|
88
|
+
HEAD = "HEAD",
|
|
89
|
+
OPTIONS = "OPTIONS",
|
|
90
|
+
PATCH = "PATCH"
|
|
91
|
+
}
|
|
92
|
+
/** 是否必需 */
|
|
93
|
+
export declare enum Required {
|
|
94
|
+
/** 不必需 */
|
|
95
|
+
false = "0",
|
|
96
|
+
/** 必需 */
|
|
97
|
+
true = "1"
|
|
98
|
+
}
|
|
99
|
+
/** 请求数据类型 */
|
|
100
|
+
export declare enum RequestBodyType {
|
|
101
|
+
/** 查询字符串 */
|
|
102
|
+
query = "query",
|
|
103
|
+
/** 表单 */
|
|
104
|
+
form = "form",
|
|
105
|
+
/** JSON */
|
|
106
|
+
json = "json",
|
|
107
|
+
/** 纯文本 */
|
|
108
|
+
text = "text",
|
|
109
|
+
/** 文件 */
|
|
110
|
+
file = "file",
|
|
111
|
+
/** 原始数据 */
|
|
112
|
+
raw = "raw",
|
|
113
|
+
/** 无请求数据 */
|
|
114
|
+
none = "none"
|
|
115
|
+
}
|
|
116
|
+
/** 请求路径参数类型 */
|
|
117
|
+
export declare enum RequestParamType {
|
|
118
|
+
/** 字符串 */
|
|
119
|
+
string = "string",
|
|
120
|
+
/** 数字 */
|
|
121
|
+
number = "number"
|
|
122
|
+
}
|
|
123
|
+
/** 请求查询参数类型 */
|
|
124
|
+
export declare enum RequestQueryType {
|
|
125
|
+
/** 字符串 */
|
|
126
|
+
string = "string",
|
|
127
|
+
/** 数字 */
|
|
128
|
+
number = "number"
|
|
129
|
+
}
|
|
130
|
+
/** 请求表单条目类型 */
|
|
131
|
+
export declare enum RequestFormItemType {
|
|
132
|
+
/** 纯文本 */
|
|
133
|
+
text = "text",
|
|
134
|
+
/** 文件 */
|
|
135
|
+
file = "file"
|
|
136
|
+
}
|
|
137
|
+
/** 返回数据类型 */
|
|
138
|
+
export declare enum ResponseBodyType {
|
|
139
|
+
/** JSON */
|
|
140
|
+
json = "json",
|
|
141
|
+
/** 纯文本 */
|
|
142
|
+
text = "text",
|
|
143
|
+
/** XML */
|
|
144
|
+
xml = "xml",
|
|
145
|
+
/** 原始数据 */
|
|
146
|
+
raw = "raw"
|
|
147
|
+
}
|
|
148
|
+
/** 查询字符串数组格式化方式 */
|
|
149
|
+
export declare enum QueryStringArrayFormat {
|
|
150
|
+
/** 示例: `a[]=b&a[]=c` */
|
|
151
|
+
'brackets' = "brackets",
|
|
152
|
+
/** 示例: `a[0]=b&a[1]=c` */
|
|
153
|
+
'indices' = "indices",
|
|
154
|
+
/** 示例: `a=b&a=c` */
|
|
155
|
+
'repeat' = "repeat",
|
|
156
|
+
/** 示例: `a=b,c` */
|
|
157
|
+
'comma' = "comma",
|
|
158
|
+
/** 示例: `a=["b","c"]` */
|
|
159
|
+
'json' = "json"
|
|
160
|
+
}
|
|
161
|
+
/** 接口定义 */
|
|
162
|
+
export interface Interface {
|
|
163
|
+
/** 接口 ID */
|
|
164
|
+
_id: number;
|
|
165
|
+
/** 所属分类信息(由 YTT 自行实现) */
|
|
166
|
+
_category: OmitStrict<Category, 'list'>;
|
|
167
|
+
/** 所属项目信息(由 YTT 自行实现) */
|
|
168
|
+
_project: Project;
|
|
169
|
+
/** 接口在 YApi 上的地址(由 YTT 自行实现) */
|
|
170
|
+
_url: string;
|
|
171
|
+
/** 接口名称 */
|
|
172
|
+
title: string;
|
|
173
|
+
/** 状态 */
|
|
174
|
+
status: LiteralUnion<'done' | 'undone', string>;
|
|
175
|
+
/** 接口备注 */
|
|
176
|
+
markdown: string;
|
|
177
|
+
/** 请求路径 */
|
|
178
|
+
path: string;
|
|
179
|
+
/** 请求方式,HEAD、OPTIONS 处理与 GET 相似,其余处理与 POST 相似 */
|
|
180
|
+
method: Method;
|
|
181
|
+
/** 所属项目 id */
|
|
182
|
+
project_id: number;
|
|
183
|
+
/** 所属分类 id */
|
|
184
|
+
catid: number;
|
|
185
|
+
/** 标签列表 */
|
|
186
|
+
tag: string[];
|
|
187
|
+
/** 请求头 */
|
|
188
|
+
req_headers: Array<{
|
|
189
|
+
/** 名称 */
|
|
190
|
+
name: string;
|
|
191
|
+
/** 值 */
|
|
192
|
+
value: string;
|
|
193
|
+
/** 备注 */
|
|
194
|
+
desc: string;
|
|
195
|
+
/** 示例 */
|
|
196
|
+
example: string;
|
|
197
|
+
/** 是否必需 */
|
|
198
|
+
required: Required;
|
|
199
|
+
}>;
|
|
200
|
+
/** 路径参数 */
|
|
201
|
+
req_params: Array<{
|
|
202
|
+
/** 名称 */
|
|
203
|
+
name: string;
|
|
204
|
+
/** 备注 */
|
|
205
|
+
desc: string;
|
|
206
|
+
/** 示例 */
|
|
207
|
+
example: string;
|
|
208
|
+
/** 类型(YApi-X) */
|
|
209
|
+
type?: RequestParamType;
|
|
210
|
+
}>;
|
|
211
|
+
/** 仅 GET:请求串 */
|
|
212
|
+
req_query: Array<{
|
|
213
|
+
/** 名称 */
|
|
214
|
+
name: string;
|
|
215
|
+
/** 备注 */
|
|
216
|
+
desc: string;
|
|
217
|
+
/** 示例 */
|
|
218
|
+
example: string;
|
|
219
|
+
/** 是否必需 */
|
|
220
|
+
required: Required;
|
|
221
|
+
/** 类型(YApi-X) */
|
|
222
|
+
type?: RequestQueryType;
|
|
223
|
+
}>;
|
|
224
|
+
/** 仅 POST:请求内容类型。为 text, file, raw 时不必特殊处理。 */
|
|
225
|
+
req_body_type: RequestBodyType;
|
|
226
|
+
/** `req_body_type = json` 时是否为 json schema */
|
|
227
|
+
req_body_is_json_schema: boolean;
|
|
228
|
+
/** `req_body_type = form` 时的请求内容 */
|
|
229
|
+
req_body_form: Array<{
|
|
230
|
+
/** 名称 */
|
|
231
|
+
name: string;
|
|
232
|
+
/** 类型 */
|
|
233
|
+
type: RequestFormItemType;
|
|
234
|
+
/** 备注 */
|
|
235
|
+
desc: string;
|
|
236
|
+
/** 示例 */
|
|
237
|
+
example: string;
|
|
238
|
+
/** 是否必需 */
|
|
239
|
+
required: Required;
|
|
240
|
+
}>;
|
|
241
|
+
/** `req_body_type = json` 时的请求内容 */
|
|
242
|
+
req_body_other: string;
|
|
243
|
+
/** 返回数据类型 */
|
|
244
|
+
res_body_type: ResponseBodyType;
|
|
245
|
+
/** `res_body_type = json` 时是否为 json schema */
|
|
246
|
+
res_body_is_json_schema: boolean;
|
|
247
|
+
/** 返回数据 */
|
|
248
|
+
res_body: string;
|
|
249
|
+
/** 创建时间(unix时间戳) */
|
|
250
|
+
add_time: number;
|
|
251
|
+
/** 更新时间(unix时间戳) */
|
|
252
|
+
up_time: number;
|
|
253
|
+
/** 创建人 ID */
|
|
254
|
+
uid: number;
|
|
255
|
+
[key: string]: any;
|
|
256
|
+
}
|
|
257
|
+
/** 扩展接口定义 */
|
|
258
|
+
export interface ExtendedInterface extends Interface {
|
|
259
|
+
parsedPath: ParsedPath;
|
|
260
|
+
}
|
|
261
|
+
/** 接口列表 */
|
|
262
|
+
export type InterfaceList = Interface[];
|
|
263
|
+
/** 分类信息 */
|
|
264
|
+
export interface Category {
|
|
265
|
+
/** ID */
|
|
266
|
+
_id: number;
|
|
267
|
+
/** 分类在 YApi 上的地址(由 YTT 自行实现) */
|
|
268
|
+
_url: string;
|
|
269
|
+
/** 分类名称 */
|
|
270
|
+
name: string;
|
|
271
|
+
/** 分类备注 */
|
|
272
|
+
desc: string;
|
|
273
|
+
/** 分类接口列表 */
|
|
274
|
+
list: InterfaceList;
|
|
275
|
+
/** 创建时间(unix时间戳) */
|
|
276
|
+
add_time: number;
|
|
277
|
+
/** 更新时间(unix时间戳) */
|
|
278
|
+
up_time: number;
|
|
279
|
+
}
|
|
280
|
+
/** 分类列表,对应数据导出的 json 内容 */
|
|
281
|
+
export type CategoryList = Category[];
|
|
282
|
+
/** 项目信息 */
|
|
283
|
+
export interface Project {
|
|
284
|
+
/** ID */
|
|
285
|
+
_id: number;
|
|
286
|
+
/** 项目在 YApi 上的地址(由 YTT 自行实现) */
|
|
287
|
+
_url: string;
|
|
288
|
+
/** 名称 */
|
|
289
|
+
name: string;
|
|
290
|
+
/** 描述 */
|
|
291
|
+
desc: string;
|
|
292
|
+
/** 基本路径 */
|
|
293
|
+
basepath: string;
|
|
294
|
+
/** 标签 */
|
|
295
|
+
tag: string[];
|
|
296
|
+
/** 环境配置 */
|
|
297
|
+
env: Array<{
|
|
298
|
+
/** 环境名称 */
|
|
299
|
+
name: string;
|
|
300
|
+
/** 环境域名 */
|
|
301
|
+
domain: string;
|
|
302
|
+
}>;
|
|
303
|
+
}
|
|
304
|
+
/** 支持生成 React Hooks 代码的相关配置 */
|
|
305
|
+
export interface ReactHooksConfig {
|
|
306
|
+
/**
|
|
307
|
+
* 是否开启该项功能。
|
|
308
|
+
*/
|
|
309
|
+
enabled: boolean;
|
|
310
|
+
/**
|
|
311
|
+
* 请求 Hook 函数制造者文件路径。
|
|
312
|
+
*
|
|
313
|
+
* @default 与 `outputFilePath` 同级目录下的 `makeRequestHook.ts` 文件
|
|
314
|
+
* @example 'src/api/makeRequestHook.ts'
|
|
315
|
+
*/
|
|
316
|
+
requestHookMakerFilePath?: string;
|
|
317
|
+
/**
|
|
318
|
+
* 获取请求 Hook 的名称。
|
|
319
|
+
*
|
|
320
|
+
* @default `use${changeCase.pascalCase(requestFunctionName)}`
|
|
321
|
+
* @param interfaceInfo 接口信息
|
|
322
|
+
* @param changeCase 常用的大小写转换函数集合对象
|
|
323
|
+
* @returns 请求 Hook 的名称
|
|
324
|
+
*/
|
|
325
|
+
getRequestHookName?(interfaceInfo: ExtendedInterface, changeCase: ChangeCase): string;
|
|
326
|
+
}
|
|
327
|
+
/** 支持生成 JSON Schema 的相关配置 */
|
|
328
|
+
export interface JsonSchemaConfig {
|
|
329
|
+
/**
|
|
330
|
+
* 是否开启该项功能。
|
|
331
|
+
*/
|
|
332
|
+
enabled: boolean;
|
|
333
|
+
/**
|
|
334
|
+
* 是否生成请求数据的 JSON Schema。
|
|
335
|
+
*
|
|
336
|
+
* @default true
|
|
337
|
+
*/
|
|
338
|
+
requestData?: boolean;
|
|
339
|
+
/**
|
|
340
|
+
* 是否生成返回数据的 JSON Schema。
|
|
341
|
+
*
|
|
342
|
+
* @default true
|
|
343
|
+
*/
|
|
344
|
+
responseData?: boolean;
|
|
345
|
+
}
|
|
346
|
+
/** 支持生成注释的相关配置 */
|
|
347
|
+
export interface CommentConfig {
|
|
348
|
+
/**
|
|
349
|
+
* 是否开启该项功能。
|
|
350
|
+
*
|
|
351
|
+
* @default true
|
|
352
|
+
*/
|
|
353
|
+
enabled?: boolean;
|
|
354
|
+
/**
|
|
355
|
+
* 是否有标题。
|
|
356
|
+
*
|
|
357
|
+
* @default true
|
|
358
|
+
*/
|
|
359
|
+
title?: boolean;
|
|
360
|
+
/**
|
|
361
|
+
* 是否有分类名称。
|
|
362
|
+
*
|
|
363
|
+
* @default true
|
|
364
|
+
*/
|
|
365
|
+
category?: boolean;
|
|
366
|
+
/**
|
|
367
|
+
* 是否有标签。
|
|
368
|
+
*
|
|
369
|
+
* @default true
|
|
370
|
+
*/
|
|
371
|
+
tag?: boolean;
|
|
372
|
+
/**
|
|
373
|
+
* 是否有请求头。
|
|
374
|
+
*
|
|
375
|
+
* @default true
|
|
376
|
+
*/
|
|
377
|
+
requestHeader?: boolean;
|
|
378
|
+
/**
|
|
379
|
+
* 是否有更新时间。
|
|
380
|
+
*
|
|
381
|
+
* @default true
|
|
382
|
+
*/
|
|
383
|
+
updateTime?: boolean;
|
|
384
|
+
/**
|
|
385
|
+
* 是否为标题、分类名称添加链接。
|
|
386
|
+
*
|
|
387
|
+
* @default true
|
|
388
|
+
*/
|
|
389
|
+
link?: boolean;
|
|
390
|
+
/**
|
|
391
|
+
* 额外的注释标签。生成的内容形如:`@{name} {value}`。
|
|
392
|
+
*/
|
|
393
|
+
extraTags?: (interfaceInfo: ExtendedInterface) => Array<{
|
|
394
|
+
/**
|
|
395
|
+
* 标签名。
|
|
396
|
+
*/
|
|
397
|
+
name: string;
|
|
398
|
+
/**
|
|
399
|
+
* 标签值。
|
|
400
|
+
*/
|
|
401
|
+
value: string;
|
|
402
|
+
/**
|
|
403
|
+
* 标签位置,即将新标签插在标签列表的开头还是末尾。
|
|
404
|
+
*
|
|
405
|
+
* @default 'end'
|
|
406
|
+
*/
|
|
407
|
+
position?: 'start' | 'end';
|
|
408
|
+
}>;
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* 共享的配置。
|
|
412
|
+
*/
|
|
413
|
+
export interface SharedConfig {
|
|
414
|
+
/**
|
|
415
|
+
* 要生成的目标代码类型。
|
|
416
|
+
* 默认为 `typescript`,若设为 `javascript`,会将生成的 `.ts` 文件转换为 `.js` + `.d.ts` 文件并删除原 `.ts` 文件。
|
|
417
|
+
*
|
|
418
|
+
* @default 'typescript'
|
|
419
|
+
*/
|
|
420
|
+
target?: 'typescript' | 'javascript';
|
|
421
|
+
/**
|
|
422
|
+
* 是否只生成接口请求内容和返回内容的 TypeSript 类型,是则请求文件和请求函数都不会生成。
|
|
423
|
+
*
|
|
424
|
+
* @default false
|
|
425
|
+
*/
|
|
426
|
+
typesOnly?: boolean;
|
|
427
|
+
/**
|
|
428
|
+
* 测试环境名称。
|
|
429
|
+
*
|
|
430
|
+
* **用于获取测试环境域名。**
|
|
431
|
+
*
|
|
432
|
+
* 获取方式:打开项目 --> `设置` --> `环境配置` --> 点开或新增测试环境 --> 复制测试环境名称。
|
|
433
|
+
*
|
|
434
|
+
* @example 'dev'
|
|
435
|
+
*/
|
|
436
|
+
devEnvName?: string;
|
|
437
|
+
/**
|
|
438
|
+
* 生产环境名称。
|
|
439
|
+
*
|
|
440
|
+
* **用于获取生产环境域名。**
|
|
441
|
+
*
|
|
442
|
+
* 获取方式:打开项目 --> `设置` --> `环境配置` --> 点开或新增生产环境 --> 复制生产环境名称。
|
|
443
|
+
*
|
|
444
|
+
* @example 'prod'
|
|
445
|
+
*/
|
|
446
|
+
prodEnvName?: string;
|
|
447
|
+
/**
|
|
448
|
+
* 输出文件路径。
|
|
449
|
+
*
|
|
450
|
+
* 可以是 `相对路径` 或 `绝对路径`。
|
|
451
|
+
*
|
|
452
|
+
* @example 'src/api/index.ts'
|
|
453
|
+
*/
|
|
454
|
+
outputFilePath?: string | ((interfaceInfo: Interface, changeCase: ChangeCase) => string);
|
|
455
|
+
/**
|
|
456
|
+
* 请求函数文件路径。
|
|
457
|
+
*
|
|
458
|
+
* @default 与 `outputFilePath` 同级目录下的 `request.ts` 文件
|
|
459
|
+
* @example 'src/api/request.ts'
|
|
460
|
+
*/
|
|
461
|
+
requestFunctionFilePath?: string;
|
|
462
|
+
/**
|
|
463
|
+
* 如果接口响应的结果是 `JSON` 对象,
|
|
464
|
+
* 且我们想要的数据在该对象下,
|
|
465
|
+
* 那我们就可将 `dataKey` 设为我们想要的数据对应的键。
|
|
466
|
+
*
|
|
467
|
+
* 比如该对象为 `{ code: 0, msg: '成功', data: 100 }`,
|
|
468
|
+
* 我们想要的数据为 `100`,
|
|
469
|
+
* 则我们可将 `dataKey` 设为 `data`。
|
|
470
|
+
*
|
|
471
|
+
* @example 'data'
|
|
472
|
+
*/
|
|
473
|
+
dataKey?: OneOrMore<string>;
|
|
474
|
+
/**
|
|
475
|
+
* 支持生成 React Hooks 代码的相关配置。
|
|
476
|
+
*/
|
|
477
|
+
reactHooks?: ReactHooksConfig;
|
|
478
|
+
/**
|
|
479
|
+
* 支持生成 JSON Schema 的相关配置。
|
|
480
|
+
*/
|
|
481
|
+
jsonSchema?: JsonSchemaConfig;
|
|
482
|
+
/**
|
|
483
|
+
* 支持生成注释的相关配置。
|
|
484
|
+
*/
|
|
485
|
+
comment?: CommentConfig;
|
|
486
|
+
/**
|
|
487
|
+
* 将自定义类型转为 JSONSchema 类型的映射表,自定义类型名称大小写不敏感。
|
|
488
|
+
*/
|
|
489
|
+
customTypeMapping?: Record<string, JSONSchema4TypeName>;
|
|
490
|
+
/**
|
|
491
|
+
* 如何格式化查询字符串中的数组值。
|
|
492
|
+
*
|
|
493
|
+
* @default QueryStringArrayFormat.brackets
|
|
494
|
+
*/
|
|
495
|
+
queryStringArrayFormat?: QueryStringArrayFormat;
|
|
496
|
+
/**
|
|
497
|
+
* 设置传给请求函数的参数中的 extraInfo 的值。
|
|
498
|
+
*
|
|
499
|
+
* @param interfaceInfo 接口信息
|
|
500
|
+
* @param changeCase 常用的大小写转换函数集合对象
|
|
501
|
+
* @returns 返回要赋给 extraInfo 的值
|
|
502
|
+
*/
|
|
503
|
+
setRequestFunctionExtraInfo?(interfaceInfo: Interface, changeCase: ChangeCase): Record<string, any>;
|
|
504
|
+
/**
|
|
505
|
+
* 预处理接口信息,返回新的接口信息。可返回 false 排除当前接口。
|
|
506
|
+
*
|
|
507
|
+
* 譬如你想对接口的 `path` 进行某些处理或者想排除某些接口,就可使用该方法。
|
|
508
|
+
*
|
|
509
|
+
* @param interfaceInfo 接口信息
|
|
510
|
+
* @param changeCase 常用的大小写转换函数集合对象
|
|
511
|
+
* @param syntheticalConfig 作用到当前接口的最终配置
|
|
512
|
+
* @example
|
|
513
|
+
*
|
|
514
|
+
* ```js
|
|
515
|
+
* interfaceInfo => {
|
|
516
|
+
* interfaceInfo.path = interfaceInfo.path.replace('v1', 'v2')
|
|
517
|
+
* return interfaceInfo
|
|
518
|
+
* }
|
|
519
|
+
* ```
|
|
520
|
+
*/
|
|
521
|
+
preproccessInterface?(interfaceInfo: Interface, changeCase: ChangeCase, syntheticalConfig: SyntheticalConfig): Interface | false;
|
|
522
|
+
/**
|
|
523
|
+
* 获取请求函数的名称。
|
|
524
|
+
*
|
|
525
|
+
* @default changeCase.camelCase(interfaceInfo.parsedPath.name)
|
|
526
|
+
* @param interfaceInfo 接口信息
|
|
527
|
+
* @param changeCase 常用的大小写转换函数集合对象
|
|
528
|
+
* @returns 请求函数的名称
|
|
529
|
+
*/
|
|
530
|
+
getRequestFunctionName?(interfaceInfo: ExtendedInterface, changeCase: ChangeCase): string;
|
|
531
|
+
/**
|
|
532
|
+
* 获取请求数据类型的名称。
|
|
533
|
+
*
|
|
534
|
+
* @default changeCase.pascalCase(`${requestFunctionName}Request`)
|
|
535
|
+
* @param interfaceInfo 接口信息
|
|
536
|
+
* @param changeCase 常用的大小写转换函数集合对象
|
|
537
|
+
* @returns 请求数据类型的名称
|
|
538
|
+
*/
|
|
539
|
+
getRequestDataTypeName?(interfaceInfo: ExtendedInterface, changeCase: ChangeCase): string;
|
|
540
|
+
/**
|
|
541
|
+
* 获取响应数据类型的名称。
|
|
542
|
+
*
|
|
543
|
+
* @default changeCase.pascalCase(`${requestFunctionName}Response`)
|
|
544
|
+
* @param interfaceInfo 接口信息
|
|
545
|
+
* @param changeCase 常用的大小写转换函数集合对象
|
|
546
|
+
* @returns 响应数据类型的名称
|
|
547
|
+
*/
|
|
548
|
+
getResponseDataTypeName?(interfaceInfo: ExtendedInterface, changeCase: ChangeCase): string;
|
|
549
|
+
}
|
|
550
|
+
/**
|
|
551
|
+
* 分类的配置。
|
|
552
|
+
*/
|
|
553
|
+
export interface CategoryConfig extends SharedConfig {
|
|
554
|
+
/**
|
|
555
|
+
* 分类 ID,可以设置多个。设为 `0` 时表示全部分类。
|
|
556
|
+
*
|
|
557
|
+
* 如果需要获取全部分类,同时排除指定分类,可以这样:`[0, -20, -21]`,分类 ID 前面的负号表示排除。
|
|
558
|
+
*
|
|
559
|
+
* 获取方式:打开项目 --> 点开分类 --> 复制浏览器地址栏 `/api/cat_` 后面的数字。
|
|
560
|
+
*
|
|
561
|
+
* @example 20
|
|
562
|
+
*/
|
|
563
|
+
id: number | number[];
|
|
564
|
+
}
|
|
565
|
+
/**
|
|
566
|
+
* 项目的配置。
|
|
567
|
+
*/
|
|
568
|
+
export interface ProjectConfig extends SharedConfig {
|
|
569
|
+
/**
|
|
570
|
+
* 项目的唯一标识。支持多个项目。
|
|
571
|
+
*
|
|
572
|
+
* 获取方式:打开项目 --> `设置` --> `token配置` --> 复制 token。
|
|
573
|
+
*
|
|
574
|
+
* @example 'e02a47122259d0c1973a9ff81cabb30685d64abc72f39edaa1ac6b6a792a647d'
|
|
575
|
+
*/
|
|
576
|
+
token: string | string[];
|
|
577
|
+
/**
|
|
578
|
+
* 分类列表。
|
|
579
|
+
*/
|
|
580
|
+
categories: CategoryConfig[];
|
|
581
|
+
}
|
|
582
|
+
/**
|
|
583
|
+
* 服务器的配置。
|
|
584
|
+
*/
|
|
585
|
+
export interface ServerConfig extends SharedConfig {
|
|
586
|
+
/**
|
|
587
|
+
* 服务地址。若服务类型为 `yapi`,此处填其首页地址;若服务类型为 `swagger`,此处填其 json 地址。
|
|
588
|
+
*
|
|
589
|
+
* @example 'http://yapi.foo.bar'
|
|
590
|
+
*/
|
|
591
|
+
serverUrl: string;
|
|
592
|
+
/**
|
|
593
|
+
* 服务类型。
|
|
594
|
+
*
|
|
595
|
+
* @default 'yapi'
|
|
596
|
+
*/
|
|
597
|
+
serverType?: 'yapi' | 'swagger';
|
|
598
|
+
/**
|
|
599
|
+
* 项目列表。
|
|
600
|
+
*/
|
|
601
|
+
projects: ProjectConfig[];
|
|
602
|
+
}
|
|
603
|
+
/** 混合的配置。 */
|
|
604
|
+
export type SyntheticalConfig = Partial<ServerConfig & ServerConfig['projects'][0] & ServerConfig['projects'][0]['categories'][0] & {
|
|
605
|
+
mockUrl: string;
|
|
606
|
+
devUrl: string;
|
|
607
|
+
prodUrl: string;
|
|
608
|
+
}>;
|
|
609
|
+
/** 配置。 */
|
|
610
|
+
export type Config = ServerConfig | ServerConfig[];
|
|
611
|
+
/**
|
|
612
|
+
* 请求配置。
|
|
613
|
+
*/
|
|
614
|
+
export interface RequestConfig<MockUrl extends string = string, DevUrl extends string = string, ProdUrl extends string = string, Path extends string = string, DataKey extends OneOrMore<string> | undefined = OneOrMore<string> | undefined, ParamName extends string = string, QueryName extends string = string, RequestDataOptional extends boolean = boolean> {
|
|
615
|
+
/** 接口 Mock 地址,结尾无 `/` */
|
|
616
|
+
mockUrl: MockUrl;
|
|
617
|
+
/** 接口测试环境地址,结尾无 `/` */
|
|
618
|
+
devUrl: DevUrl;
|
|
619
|
+
/** 接口生产环境地址,结尾无 `/` */
|
|
620
|
+
prodUrl: ProdUrl;
|
|
621
|
+
/** 接口路径,以 `/` 开头 */
|
|
622
|
+
path: Path;
|
|
623
|
+
/** 请求方法 */
|
|
624
|
+
method: Method;
|
|
625
|
+
/** 请求头,除了 Content-Type 的所有头 */
|
|
626
|
+
requestHeaders: Record<string, string>;
|
|
627
|
+
/** 请求数据类型 */
|
|
628
|
+
requestBodyType: RequestBodyType;
|
|
629
|
+
/** 返回数据类型 */
|
|
630
|
+
responseBodyType: ResponseBodyType;
|
|
631
|
+
/** 数据所在键 */
|
|
632
|
+
dataKey: DataKey;
|
|
633
|
+
/** 路径参数的名称列表 */
|
|
634
|
+
paramNames: ParamName[];
|
|
635
|
+
/** 查询参数的名称列表 */
|
|
636
|
+
queryNames: QueryName[];
|
|
637
|
+
/** 请求数据是否可选 */
|
|
638
|
+
requestDataOptional: RequestDataOptional;
|
|
639
|
+
/** 请求数据的 JSON Schema (仅开启了 JSON Schema 生成时生效) */
|
|
640
|
+
requestDataJsonSchema: JSONSchema4;
|
|
641
|
+
/** 返回数据的 JSON Schema (仅开启了 JSON Schema 生成时生效) */
|
|
642
|
+
responseDataJsonSchema: JSONSchema4;
|
|
643
|
+
/** 请求函数名称 */
|
|
644
|
+
requestFunctionName: string;
|
|
645
|
+
/** 如何格式化查询字符串中的数组值 */
|
|
646
|
+
queryStringArrayFormat: QueryStringArrayFormat;
|
|
647
|
+
/** 额外信息 */
|
|
648
|
+
extraInfo: Record<string, any>;
|
|
649
|
+
}
|
|
650
|
+
/**
|
|
651
|
+
* 请求参数。
|
|
652
|
+
*/
|
|
653
|
+
export interface RequestFunctionParams extends RequestConfig {
|
|
654
|
+
/** 原始数据 */
|
|
655
|
+
rawData: Record<string, any>;
|
|
656
|
+
/** 请求数据,不含文件数据 */
|
|
657
|
+
data: Record<string, any>;
|
|
658
|
+
/** 是否有文件数据 */
|
|
659
|
+
hasFileData: boolean;
|
|
660
|
+
/** 请求文件数据 */
|
|
661
|
+
fileData: Record<string, any>;
|
|
662
|
+
/** 所有请求数据,包括 data、fileData */
|
|
663
|
+
allData: Record<string, any>;
|
|
664
|
+
/** 获取全部请求数据(包含文件)的 FormData 实例 */
|
|
665
|
+
getFormData: () => FormData;
|
|
666
|
+
}
|
|
667
|
+
/** 请求函数的额外参数 */
|
|
668
|
+
export type RequestFunctionRestArgs<T extends Function> = T extends (payload: any, ...args: infer R) => any ? R : never;
|
|
669
|
+
/** 属性定义 */
|
|
670
|
+
export interface PropDefinition {
|
|
671
|
+
/** 属性名称 */
|
|
672
|
+
name: string;
|
|
673
|
+
/** 是否必需 */
|
|
674
|
+
required: boolean;
|
|
675
|
+
/** 类型 */
|
|
676
|
+
type: JSONSchema4['type'];
|
|
677
|
+
/** 注释 */
|
|
678
|
+
comment: string;
|
|
679
|
+
}
|
|
680
|
+
/** 属性定义列表 */
|
|
681
|
+
export type PropDefinitions = PropDefinition[];
|
|
682
|
+
/** 命令行钩子 */
|
|
683
|
+
export interface CliHooks {
|
|
684
|
+
/** 生成成功时触发 */
|
|
685
|
+
success?: () => AsyncOrSync<void>;
|
|
686
|
+
/** 生成失败时触发 */
|
|
687
|
+
fail?: () => AsyncOrSync<void>;
|
|
688
|
+
/** 生成完毕时触发(无论成功、失败) */
|
|
689
|
+
complete?: () => AsyncOrSync<void>;
|
|
690
|
+
}
|
|
691
|
+
export type ConfigWithHooks = Config & {
|
|
692
|
+
hooks?: CliHooks;
|
|
693
|
+
};
|