swagger-to-axios 1.0.11 → 1.0.14
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 +120 -120
- package/lib/index.d.ts +7 -7
- package/lib/index.js +127 -127
- package/lib/types.d.ts +140 -131
- package/lib/types.js +1 -1
- package/lib/utils/index.d.ts +43 -43
- package/lib/utils/index.js +250 -250
- package/package.json +46 -46
package/README.md
CHANGED
|
@@ -1,121 +1,121 @@
|
|
|
1
|
-
# 说明文档
|
|
2
|
-
|
|
3
|
-
这是一个用 swagger 文档生成用于 axios 的 api 文件的模块,支持生成 ts 和 js 文件。
|
|
4
|
-
|
|
5
|
-
使用这个模块需要先导入模块的默认导出,默认导出是一个函数。
|
|
6
|
-
这个函数的第一个参数(必填)为需要访问的文件名(文件名请访问内部的 api 接口文档地址网页);第二个参数(选填)是可选配置项,配置内容如下。
|
|
7
|
-
|
|
8
|
-
```TypeScript
|
|
9
|
-
/** swagger 文档配置项 */
|
|
10
|
-
declare interface SwaggerDocument {
|
|
11
|
-
/** swagger 文档地址 */
|
|
12
|
-
url: string;
|
|
13
|
-
/**
|
|
14
|
-
* 生成文件后该文档的文件夹名称。
|
|
15
|
-
* 默认值:字符串随机数。
|
|
16
|
-
* */
|
|
17
|
-
name?: string;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/** 生成文件配置项 */
|
|
21
|
-
declare interface Config {
|
|
22
|
-
/**
|
|
23
|
-
* 生成文件时,每个函数是否携带 baseURL 属性。
|
|
24
|
-
* 默认值:true。
|
|
25
|
-
* */
|
|
26
|
-
includeBaseURL?: boolean;
|
|
27
|
-
/**
|
|
28
|
-
* cli类型。
|
|
29
|
-
* 默认值:VueCli。
|
|
30
|
-
* 注:
|
|
31
|
-
* 1、如果 includeBaseURL 为 false,则不需要配置该项。
|
|
32
|
-
*/
|
|
33
|
-
cliType?: 'Vite' | 'VueCli';
|
|
34
|
-
/**
|
|
35
|
-
* host 的配置名称。
|
|
36
|
-
* 默认值:VUE_APP_HOST | VITE_APP_HOST(根据 cliType 属性)。
|
|
37
|
-
* 注:
|
|
38
|
-
* 1、如果 includeBaseURL 为 false,则不需要配置该项。
|
|
39
|
-
* 2、如果 swagger 的 host 填写了正确的地址,你也可以完全不配置该项,生成的代码会使用三目运算符,并将非的表达式设置为 swagger 的 host。
|
|
40
|
-
*/
|
|
41
|
-
envHostName?: string;
|
|
42
|
-
/**
|
|
43
|
-
* 网络协议的配置名称。
|
|
44
|
-
* 默认值:VUE_APP_PROTOCOL | VITE_APP_PROTOCOL(根据 cliType 属性)。
|
|
45
|
-
* 注:
|
|
46
|
-
* 1、如果 includeBaseURL 为 false,则不需要配置该项。
|
|
47
|
-
* 2、推荐只在生产环境和开发环境使用不同协议时配置该项。
|
|
48
|
-
* 3、VUE_APP_PROTOCOL / VITE_APP_PROTOCOL 的值应该为 'https' 或者 'http'。
|
|
49
|
-
*/
|
|
50
|
-
envProtocolName?: string;
|
|
51
|
-
/**
|
|
52
|
-
* 是否使用 https。
|
|
53
|
-
* 默认值:false。
|
|
54
|
-
* 注:
|
|
55
|
-
* 1、如果 includeBaseURL 为 false,则不需要配置该项。
|
|
56
|
-
* */
|
|
57
|
-
https?: boolean;
|
|
58
|
-
/**
|
|
59
|
-
* 生成的文件所在目录。
|
|
60
|
-
* 默认值:./apis。
|
|
61
|
-
* */
|
|
62
|
-
outputFolder?: string;
|
|
63
|
-
/**
|
|
64
|
-
* 需要引用的 axios 函数地址。
|
|
65
|
-
* 默认值:window.axios。
|
|
66
|
-
* */
|
|
67
|
-
improtAxiosPath?: string;
|
|
68
|
-
/**
|
|
69
|
-
* 是否生成 ts 文件。
|
|
70
|
-
* 默认值:false。
|
|
71
|
-
* */
|
|
72
|
-
typeScript?: boolean;
|
|
73
|
-
/**
|
|
74
|
-
* url是否放置于 options 中。
|
|
75
|
-
* 默认值:true。
|
|
76
|
-
* 注:
|
|
77
|
-
* 1、如为 false,则将放在第一个参数中。
|
|
78
|
-
* */
|
|
79
|
-
urlInOptions?: boolean;
|
|
80
|
-
}
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
## 参考用例
|
|
84
|
-
|
|
85
|
-
```JavaScript
|
|
86
|
-
const swagger2axios = require('swagger-to-axios');
|
|
87
|
-
const swaggerDocumentList = ['name'].map((name) => ({
|
|
88
|
-
url: `http://127.0.0.1:14514/swagger?name=${name}.json`,
|
|
89
|
-
name,
|
|
90
|
-
}));
|
|
91
|
-
swagger2axios(swaggerDocumentList, {
|
|
92
|
-
includeBaseURL: false,
|
|
93
|
-
improtAxiosPath: '@/utils/request',
|
|
94
|
-
https: true
|
|
95
|
-
})
|
|
96
|
-
|
|
97
|
-
/**以下是生成的文件内容*/
|
|
98
|
-
// user.js
|
|
99
|
-
// 用户相关接口
|
|
100
|
-
import request from '@/utils/request';
|
|
101
|
-
|
|
102
|
-
const basePath = '/api/v1';
|
|
103
|
-
|
|
104
|
-
// 获取用户信息
|
|
105
|
-
export function getUserInfo(params, options) {
|
|
106
|
-
return request({
|
|
107
|
-
url: `${basePath}/user/info`,
|
|
108
|
-
baseURL: `${protocol}://${host}`,
|
|
109
|
-
method: 'get',
|
|
110
|
-
params,
|
|
111
|
-
...options,
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
## 注意事项
|
|
117
|
-
如果想使用 umi-request,需要写一个文件转换一下,之后将 improtAxiosPath 配置项指向该文件的地址就好了。你要问为什么需要转换一下,因为我懒得多想一个配置项的名称。下面是实例代码:
|
|
118
|
-
```JavaScript
|
|
119
|
-
import { request } from '@umijs/max';
|
|
120
|
-
export default request;
|
|
1
|
+
# 说明文档
|
|
2
|
+
|
|
3
|
+
这是一个用 swagger 文档生成用于 axios 的 api 文件的模块,支持生成 ts 和 js 文件。
|
|
4
|
+
|
|
5
|
+
使用这个模块需要先导入模块的默认导出,默认导出是一个函数。
|
|
6
|
+
这个函数的第一个参数(必填)为需要访问的文件名(文件名请访问内部的 api 接口文档地址网页);第二个参数(选填)是可选配置项,配置内容如下。
|
|
7
|
+
|
|
8
|
+
```TypeScript
|
|
9
|
+
/** swagger 文档配置项 */
|
|
10
|
+
declare interface SwaggerDocument {
|
|
11
|
+
/** swagger 文档地址 */
|
|
12
|
+
url: string;
|
|
13
|
+
/**
|
|
14
|
+
* 生成文件后该文档的文件夹名称。
|
|
15
|
+
* 默认值:字符串随机数。
|
|
16
|
+
* */
|
|
17
|
+
name?: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** 生成文件配置项 */
|
|
21
|
+
declare interface Config {
|
|
22
|
+
/**
|
|
23
|
+
* 生成文件时,每个函数是否携带 baseURL 属性。
|
|
24
|
+
* 默认值:true。
|
|
25
|
+
* */
|
|
26
|
+
includeBaseURL?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* cli类型。
|
|
29
|
+
* 默认值:VueCli。
|
|
30
|
+
* 注:
|
|
31
|
+
* 1、如果 includeBaseURL 为 false,则不需要配置该项。
|
|
32
|
+
*/
|
|
33
|
+
cliType?: 'Vite' | 'VueCli';
|
|
34
|
+
/**
|
|
35
|
+
* host 的配置名称。
|
|
36
|
+
* 默认值:VUE_APP_HOST | VITE_APP_HOST(根据 cliType 属性)。
|
|
37
|
+
* 注:
|
|
38
|
+
* 1、如果 includeBaseURL 为 false,则不需要配置该项。
|
|
39
|
+
* 2、如果 swagger 的 host 填写了正确的地址,你也可以完全不配置该项,生成的代码会使用三目运算符,并将非的表达式设置为 swagger 的 host。
|
|
40
|
+
*/
|
|
41
|
+
envHostName?: string;
|
|
42
|
+
/**
|
|
43
|
+
* 网络协议的配置名称。
|
|
44
|
+
* 默认值:VUE_APP_PROTOCOL | VITE_APP_PROTOCOL(根据 cliType 属性)。
|
|
45
|
+
* 注:
|
|
46
|
+
* 1、如果 includeBaseURL 为 false,则不需要配置该项。
|
|
47
|
+
* 2、推荐只在生产环境和开发环境使用不同协议时配置该项。
|
|
48
|
+
* 3、VUE_APP_PROTOCOL / VITE_APP_PROTOCOL 的值应该为 'https' 或者 'http'。
|
|
49
|
+
*/
|
|
50
|
+
envProtocolName?: string;
|
|
51
|
+
/**
|
|
52
|
+
* 是否使用 https。
|
|
53
|
+
* 默认值:false。
|
|
54
|
+
* 注:
|
|
55
|
+
* 1、如果 includeBaseURL 为 false,则不需要配置该项。
|
|
56
|
+
* */
|
|
57
|
+
https?: boolean;
|
|
58
|
+
/**
|
|
59
|
+
* 生成的文件所在目录。
|
|
60
|
+
* 默认值:./apis。
|
|
61
|
+
* */
|
|
62
|
+
outputFolder?: string;
|
|
63
|
+
/**
|
|
64
|
+
* 需要引用的 axios 函数地址。
|
|
65
|
+
* 默认值:window.axios。
|
|
66
|
+
* */
|
|
67
|
+
improtAxiosPath?: string;
|
|
68
|
+
/**
|
|
69
|
+
* 是否生成 ts 文件。
|
|
70
|
+
* 默认值:false。
|
|
71
|
+
* */
|
|
72
|
+
typeScript?: boolean;
|
|
73
|
+
/**
|
|
74
|
+
* url是否放置于 options 中。
|
|
75
|
+
* 默认值:true。
|
|
76
|
+
* 注:
|
|
77
|
+
* 1、如为 false,则将放在第一个参数中。
|
|
78
|
+
* */
|
|
79
|
+
urlInOptions?: boolean;
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## 参考用例
|
|
84
|
+
|
|
85
|
+
```JavaScript
|
|
86
|
+
const swagger2axios = require('swagger-to-axios');
|
|
87
|
+
const swaggerDocumentList = ['name'].map((name) => ({
|
|
88
|
+
url: `http://127.0.0.1:14514/swagger?name=${name}.json`,
|
|
89
|
+
name,
|
|
90
|
+
}));
|
|
91
|
+
swagger2axios(swaggerDocumentList, {
|
|
92
|
+
includeBaseURL: false,
|
|
93
|
+
improtAxiosPath: '@/utils/request',
|
|
94
|
+
https: true
|
|
95
|
+
})
|
|
96
|
+
|
|
97
|
+
/**以下是生成的文件内容*/
|
|
98
|
+
// user.js
|
|
99
|
+
// 用户相关接口
|
|
100
|
+
import request from '@/utils/request';
|
|
101
|
+
|
|
102
|
+
const basePath = '/api/v1';
|
|
103
|
+
|
|
104
|
+
// 获取用户信息
|
|
105
|
+
export function getUserInfo(params, options) {
|
|
106
|
+
return request({
|
|
107
|
+
url: `${basePath}/user/info`,
|
|
108
|
+
baseURL: `${protocol}://${host}`,
|
|
109
|
+
method: 'get',
|
|
110
|
+
params,
|
|
111
|
+
...options,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## 注意事项
|
|
117
|
+
如果想使用 umi-request,需要写一个文件转换一下,之后将 improtAxiosPath 配置项指向该文件的地址就好了。你要问为什么需要转换一下,因为我懒得多想一个配置项的名称。下面是实例代码:
|
|
118
|
+
```JavaScript
|
|
119
|
+
import { request } from '@umijs/max';
|
|
120
|
+
export default request;
|
|
121
121
|
```
|
package/lib/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
/** 创建所有 API 文件
|
|
3
|
-
* @param {SwaggerDocument[]} swaggerList - swagger 文档列表
|
|
4
|
-
* @param {Config} config - 配置项
|
|
5
|
-
*/
|
|
6
|
-
declare const createApiFiles: (swaggerList?: SwaggerDocument[], config?: Config) => Promise<void>;
|
|
7
|
-
export default createApiFiles;
|
|
1
|
+
import './types.js';
|
|
2
|
+
/** 创建所有 API 文件
|
|
3
|
+
* @param {SwaggerDocument[]} swaggerList - swagger 文档列表
|
|
4
|
+
* @param {Config} config - 配置项
|
|
5
|
+
*/
|
|
6
|
+
declare const createApiFiles: (swaggerList?: SwaggerDocument[], config?: Config) => Promise<void>;
|
|
7
|
+
export default createApiFiles;
|
package/lib/index.js
CHANGED
|
@@ -1,127 +1,127 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
|
-
const fsPromises = fs.promises;
|
|
3
|
-
import { writeFile, urlToName, urlToLinkParams, getFolderList
|
|
4
|
-
import
|
|
5
|
-
/** 创建所有 API 文件
|
|
6
|
-
* @param {SwaggerDocument[]} swaggerList - swagger 文档列表
|
|
7
|
-
* @param {Config} config - 配置项
|
|
8
|
-
*/
|
|
9
|
-
const createApiFiles = async (swaggerList = [], config = {}) => {
|
|
10
|
-
try {
|
|
11
|
-
const { includeBaseURL = true, cliType = 'VueCli', envHostName = cliType === 'VueCli' ? 'VUE_APP_HOST' : 'VITE_APP_HOST', envProtocolName = cliType === 'VueCli' ? 'VUE_APP_PROTOCOL' : 'VITE_APP_PROTOCOL', https = false, outputFolder = './apis', improtAxiosPath, typeScript = false, urlInOptions = true, } = config;
|
|
12
|
-
const swagger = {
|
|
13
|
-
path: outputFolder,
|
|
14
|
-
folderList: await getFolderList(swaggerList, cliType),
|
|
15
|
-
};
|
|
16
|
-
// 生成文件夹
|
|
17
|
-
await fsPromises.mkdir(`${swagger.path}`, { recursive: true });
|
|
18
|
-
for (const folder of swagger.folderList) {
|
|
19
|
-
await fsPromises.mkdir(`${swagger.path}/${folder.name}`, { recursive: true });
|
|
20
|
-
let typings =
|
|
21
|
-
for (const file of folder.tagList) {
|
|
22
|
-
let fileContent = '';
|
|
23
|
-
// 如果包含注释,则在文件顶部添加注释
|
|
24
|
-
if (file.comment) {
|
|
25
|
-
fileContent += `// ${file.comment}
|
|
26
|
-
`;
|
|
27
|
-
}
|
|
28
|
-
if (improtAxiosPath) {
|
|
29
|
-
fileContent += `import request from '${improtAxiosPath}';
|
|
30
|
-
`;
|
|
31
|
-
}
|
|
32
|
-
fileContent += `
|
|
33
|
-
const basePath = '${folder.baseURL}';
|
|
34
|
-
`;
|
|
35
|
-
if (includeBaseURL) {
|
|
36
|
-
const cliTypePrefix = folder.cliType === 'Vite' ? `import.meta.env.` : `process.env.`;
|
|
37
|
-
if (folder.host && folder.host.includes('127.0.0.1')) {
|
|
38
|
-
fileContent += `const host = '${folder.host}';
|
|
39
|
-
`;
|
|
40
|
-
}
|
|
41
|
-
else {
|
|
42
|
-
const hostCliTypeString = `${cliTypePrefix}${envHostName}`;
|
|
43
|
-
fileContent += `const host = \`\${${hostCliTypeString} ? ${hostCliTypeString} : '${folder.host}'}\`;
|
|
44
|
-
`;
|
|
45
|
-
}
|
|
46
|
-
const protocolCliTypeString = `${cliTypePrefix}${envProtocolName}`;
|
|
47
|
-
fileContent += `const protocol = \`\${${protocolCliTypeString} ? ${protocolCliTypeString} : 'http${https ? 's' : ''}'}\`;
|
|
48
|
-
`;
|
|
49
|
-
}
|
|
50
|
-
const apiList = file.apiList;
|
|
51
|
-
for (const api of apiList) {
|
|
52
|
-
const method = api.method;
|
|
53
|
-
const functionName = method.toLowerCase() + urlToName(api.url);
|
|
54
|
-
if (api?.response) {
|
|
55
|
-
typings += `
|
|
56
|
-
type ${functionName}Response = ${api.response.data}`;
|
|
57
|
-
}
|
|
58
|
-
const { summary, description } = api.comment;
|
|
59
|
-
if (summary) {
|
|
60
|
-
fileContent += `
|
|
61
|
-
// ${summary}`;
|
|
62
|
-
}
|
|
63
|
-
if (description) {
|
|
64
|
-
fileContent += `
|
|
65
|
-
// ${description}`;
|
|
66
|
-
}
|
|
67
|
-
fileContent += `
|
|
68
|
-
`;
|
|
69
|
-
fileContent += `export function ${functionName}(`;
|
|
70
|
-
fileContent += method.toUpperCase() === 'GET' ? 'params' : 'data';
|
|
71
|
-
fileContent += `${typeScript ? '?: any' : ''}, options${typeScript ? '?: { [key: string]: any }' : ''}) {
|
|
72
|
-
`;
|
|
73
|
-
fileContent += `return ${improtAxiosPath ? `request` : 'window.axios'}${typeScript ? `<API.${functionName}Response>` : ''}(`;
|
|
74
|
-
if (!urlInOptions) {
|
|
75
|
-
fileContent += `\`\${basePath}${urlToLinkParams(api.url, method)}\`, `;
|
|
76
|
-
}
|
|
77
|
-
fileContent += `{
|
|
78
|
-
`;
|
|
79
|
-
if (urlInOptions) {
|
|
80
|
-
fileContent += `url: \`\${basePath}${urlToLinkParams(api.url, method)}\`,
|
|
81
|
-
`;
|
|
82
|
-
}
|
|
83
|
-
if (includeBaseURL) {
|
|
84
|
-
fileContent += `baseURL: \`\${protocol}://\${host}\`,
|
|
85
|
-
`;
|
|
86
|
-
}
|
|
87
|
-
fileContent += `method: '${method}',
|
|
88
|
-
${method.toLowerCase() === 'get' ? 'params' : 'data'},
|
|
89
|
-
...(options || {}),
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
`;
|
|
93
|
-
}
|
|
94
|
-
await writeFile(`${swagger.path}${folder.name ? '/' + folder.name : ''}/${file.name}.${typeScript ? 'ts' : 'js'}`, fileContent).catch((err) => console.log(err));
|
|
95
|
-
}
|
|
96
|
-
typings += `
|
|
97
|
-
}`;
|
|
98
|
-
if (typeScript) {
|
|
99
|
-
await writeFile(`${swagger.path}${folder.name ? '/' + folder.name : ''}/typings.d.ts`, typings).catch((err) => console.log(err));
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
catch (error) {
|
|
104
|
-
console.error('错误:', error);
|
|
105
|
-
}
|
|
106
|
-
};
|
|
107
|
-
// /** 生成 mock 文件
|
|
108
|
-
// * @param {SwaggerDocument[]} swaggerList - swagger 文档列表
|
|
109
|
-
// * @param {MockConfig} mockConfig - 配置项
|
|
110
|
-
// */
|
|
111
|
-
// const createMockFiles = async (
|
|
112
|
-
// swaggerList: SwaggerDocument[] = [],
|
|
113
|
-
// { mockType = 'vite-plugin-mock', outputFolder = './mocks' }: MockConfig = {},
|
|
114
|
-
// ) => {
|
|
115
|
-
// const swagger: Swagger = {
|
|
116
|
-
// path: outputFolder,
|
|
117
|
-
// folderList: await getFolderList(swaggerList, ''),
|
|
118
|
-
// };
|
|
119
|
-
// switch (mockType) {
|
|
120
|
-
// case 'vite-plugin-mock':
|
|
121
|
-
// break;
|
|
122
|
-
// default:
|
|
123
|
-
// break;
|
|
124
|
-
// }
|
|
125
|
-
// };
|
|
126
|
-
export default createApiFiles;
|
|
127
|
-
// export { createMockFiles };
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
const fsPromises = fs.promises;
|
|
3
|
+
import { writeFile, urlToName, urlToLinkParams, getFolderList } from './utils/index.js';
|
|
4
|
+
import './types.js';
|
|
5
|
+
/** 创建所有 API 文件
|
|
6
|
+
* @param {SwaggerDocument[]} swaggerList - swagger 文档列表
|
|
7
|
+
* @param {Config} config - 配置项
|
|
8
|
+
*/
|
|
9
|
+
const createApiFiles = async (swaggerList = [], config = {}) => {
|
|
10
|
+
try {
|
|
11
|
+
const { includeBaseURL = true, cliType = 'VueCli', envHostName = cliType === 'VueCli' ? 'VUE_APP_HOST' : 'VITE_APP_HOST', envProtocolName = cliType === 'VueCli' ? 'VUE_APP_PROTOCOL' : 'VITE_APP_PROTOCOL', https = false, outputFolder = './apis', improtAxiosPath, namedImport, typeScript = false, namespace = 'API', urlInOptions = true, } = config;
|
|
12
|
+
const swagger = {
|
|
13
|
+
path: outputFolder,
|
|
14
|
+
folderList: await getFolderList(swaggerList, cliType),
|
|
15
|
+
};
|
|
16
|
+
// 生成文件夹
|
|
17
|
+
await fsPromises.mkdir(`${swagger.path}`, { recursive: true });
|
|
18
|
+
for (const folder of swagger.folderList) {
|
|
19
|
+
await fsPromises.mkdir(`${swagger.path}/${folder.name}`, { recursive: true });
|
|
20
|
+
let typings = `declare namespace ${namespace} {`;
|
|
21
|
+
for (const file of folder.tagList) {
|
|
22
|
+
let fileContent = '';
|
|
23
|
+
// 如果包含注释,则在文件顶部添加注释
|
|
24
|
+
if (file.comment) {
|
|
25
|
+
fileContent += `// ${file.comment}
|
|
26
|
+
`;
|
|
27
|
+
}
|
|
28
|
+
if (improtAxiosPath) {
|
|
29
|
+
fileContent += `import ${namedImport ? namedImport + ' as ' : ''}request from '${improtAxiosPath}';
|
|
30
|
+
`;
|
|
31
|
+
}
|
|
32
|
+
fileContent += `
|
|
33
|
+
const basePath = '${folder.baseURL}';
|
|
34
|
+
`;
|
|
35
|
+
if (includeBaseURL) {
|
|
36
|
+
const cliTypePrefix = folder.cliType === 'Vite' ? `import.meta.env.` : `process.env.`;
|
|
37
|
+
if (folder.host && folder.host.includes('127.0.0.1')) {
|
|
38
|
+
fileContent += `const host = '${folder.host}';
|
|
39
|
+
`;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
const hostCliTypeString = `${cliTypePrefix}${envHostName}`;
|
|
43
|
+
fileContent += `const host = \`\${${hostCliTypeString} ? ${hostCliTypeString} : '${folder.host}'}\`;
|
|
44
|
+
`;
|
|
45
|
+
}
|
|
46
|
+
const protocolCliTypeString = `${cliTypePrefix}${envProtocolName}`;
|
|
47
|
+
fileContent += `const protocol = \`\${${protocolCliTypeString} ? ${protocolCliTypeString} : 'http${https ? 's' : ''}'}\`;
|
|
48
|
+
`;
|
|
49
|
+
}
|
|
50
|
+
const apiList = file.apiList;
|
|
51
|
+
for (const api of apiList) {
|
|
52
|
+
const method = api.method;
|
|
53
|
+
const functionName = method.toLowerCase() + urlToName(api.url);
|
|
54
|
+
if (api?.response) {
|
|
55
|
+
typings += `
|
|
56
|
+
type ${functionName}Response = ${api.response.data}`;
|
|
57
|
+
}
|
|
58
|
+
const { summary, description } = api.comment;
|
|
59
|
+
if (summary) {
|
|
60
|
+
fileContent += `
|
|
61
|
+
// ${summary}`;
|
|
62
|
+
}
|
|
63
|
+
if (description) {
|
|
64
|
+
fileContent += `
|
|
65
|
+
// ${description}`;
|
|
66
|
+
}
|
|
67
|
+
fileContent += `
|
|
68
|
+
`;
|
|
69
|
+
fileContent += `export function ${functionName}(`;
|
|
70
|
+
fileContent += method.toUpperCase() === 'GET' ? 'params' : 'data';
|
|
71
|
+
fileContent += `${typeScript ? '?: any' : ''}, options${typeScript ? '?: { [key: string]: any }' : ''}) {
|
|
72
|
+
`;
|
|
73
|
+
fileContent += `return ${improtAxiosPath ? `request` : 'window.axios'}${typeScript ? `<API.${functionName}Response>` : ''}(`;
|
|
74
|
+
if (!urlInOptions) {
|
|
75
|
+
fileContent += `\`\${basePath}${urlToLinkParams(api.url, method)}\`, `;
|
|
76
|
+
}
|
|
77
|
+
fileContent += `{
|
|
78
|
+
`;
|
|
79
|
+
if (urlInOptions) {
|
|
80
|
+
fileContent += `url: \`\${basePath}${urlToLinkParams(api.url, method)}\`,
|
|
81
|
+
`;
|
|
82
|
+
}
|
|
83
|
+
if (includeBaseURL) {
|
|
84
|
+
fileContent += `baseURL: \`\${protocol}://\${host}\`,
|
|
85
|
+
`;
|
|
86
|
+
}
|
|
87
|
+
fileContent += `method: '${method}',
|
|
88
|
+
${method.toLowerCase() === 'get' ? 'params' : 'data'},
|
|
89
|
+
...(options || {}),
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
`;
|
|
93
|
+
}
|
|
94
|
+
await writeFile(`${swagger.path}${folder.name ? '/' + folder.name : ''}/${file.name}.${typeScript ? 'ts' : 'js'}`, fileContent).catch((err) => console.log(err));
|
|
95
|
+
}
|
|
96
|
+
typings += `
|
|
97
|
+
}`;
|
|
98
|
+
if (typeScript) {
|
|
99
|
+
await writeFile(`${swagger.path}${folder.name ? '/' + folder.name : ''}/typings.d.ts`, typings).catch((err) => console.log(err));
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
console.error('错误:', error);
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
// /** 生成 mock 文件
|
|
108
|
+
// * @param {SwaggerDocument[]} swaggerList - swagger 文档列表
|
|
109
|
+
// * @param {MockConfig} mockConfig - 配置项
|
|
110
|
+
// */
|
|
111
|
+
// const createMockFiles = async (
|
|
112
|
+
// swaggerList: SwaggerDocument[] = [],
|
|
113
|
+
// { mockType = 'vite-plugin-mock', outputFolder = './mocks' }: MockConfig = {},
|
|
114
|
+
// ) => {
|
|
115
|
+
// const swagger: Swagger = {
|
|
116
|
+
// path: outputFolder,
|
|
117
|
+
// folderList: await getFolderList(swaggerList, ''),
|
|
118
|
+
// };
|
|
119
|
+
// switch (mockType) {
|
|
120
|
+
// case 'vite-plugin-mock':
|
|
121
|
+
// break;
|
|
122
|
+
// default:
|
|
123
|
+
// break;
|
|
124
|
+
// }
|
|
125
|
+
// };
|
|
126
|
+
export default createApiFiles;
|
|
127
|
+
// export { createMockFiles };
|