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