@dypnb/dev-tools 1.0.0 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,203 +0,0 @@
1
- import require$$0$1 from 'path';
2
- import require$$0 from 'fs';
3
- import http from 'http';
4
- import { j as getDirname, e as getGlobalConfig, i as errorLog, l as log, s as successLog } from '../chunk-cb5f11a8.js';
5
- import 'os';
6
- import 'util';
7
- import 'tty';
8
- import 'child_process';
9
- import 'assert';
10
- import 'events';
11
- import 'buffer';
12
- import 'stream';
13
- import 'node:url';
14
- import 'node:path';
15
-
16
- // 将swagger 转换为 vue api代码
17
- const __dirname = getDirname();
18
- // swagger配置
19
- const swaggerConfig = await getGlobalConfig('swaggerConfig');
20
- if (!swaggerConfig) {
21
- errorLog('swaggerConfig 未配置');
22
- }
23
-
24
- // 生成api文件地址
25
- const srcFolder = `${process.env.PWD}${swaggerConfig.outputDir}`;
26
- // swagger接口地址
27
- const url = `${swaggerConfig.path}${swaggerConfig.staticPath}`;
28
-
29
- // 生成本地文件
30
- function mkdirsSync(dirname) {
31
- if (require$$0.existsSync(dirname)) {
32
- return true;
33
- } else {
34
- if (mkdirsSync(require$$0$1.dirname(dirname))) {
35
- require$$0.mkdirSync(dirname);
36
- return true;
37
- }
38
- }
39
- }
40
- function getPath(pathUrl) {
41
- return require$$0$1.resolve(__dirname, pathUrl);
42
- }
43
- function generateTemplate(arr) {
44
- return `import request from '@/utils/request'\n`;
45
- }
46
-
47
- // 下划线转换驼峰
48
- function toHump(name) {
49
- return name.replace(/\/(\w)/g, function (all, letter) {
50
- return letter.toUpperCase();
51
- });
52
- }
53
-
54
- // 短横线转换驼峰
55
- function shortToHump(name) {
56
- return name.replace(/-(\w)/g, function (all, letter) {
57
- return letter.toUpperCase();
58
- });
59
- }
60
-
61
- // 去除花括号,获取干净的字段
62
- function removeBrace(value) {
63
- const regex = /\{(.+?)\}/g; // {} 花括号,大括号
64
- const str = value.match(regex)[0] || "";
65
- return str.replace(/\{|}/g, "");
66
- }
67
-
68
- /**
69
- * 生成具体的api:
70
- * export function postRsArticle(data) {
71
- * return request({
72
- * url: '/rs/article',
73
- * method: 'post',
74
- * data: data
75
- * })
76
- * }
77
- */
78
- function generateFunc(url, summary, type = "post") {
79
- // 去除 url 环境前缀: /dev-risk-api/sc/apply/{applyId} ==> /sc/apply/{applyId}
80
- // url = url.split('/');
81
- // url.splice(1,1)
82
- // url = url.join('/');
83
-
84
- const isBrace = url.indexOf("{") !== -1;
85
- let funcName = shortToHump(toHump(type + url));
86
- let splitUrl = "";
87
- let braceKey = "";
88
- if (isBrace) {
89
- splitUrl = url.split("{")[0];
90
- braceKey = removeBrace(url);
91
- funcName = shortToHump(toHump(type + splitUrl + braceKey));
92
- }
93
- const funcArguments = `${isBrace ? braceKey : !isBrace && (type === "post" || type === "put") ? "data" : "query"}`;
94
- const funcUrl = `${!isBrace ? `'${url}'` : `'${splitUrl}' + ${braceKey}`}`;
95
- const funcParams = `${isBrace ? "" : !isBrace && (type === "post" || type === "put") ? "\n data: data" : "\n params: query"}`;
96
- return `
97
- // ${summary || ""}
98
- export function ${funcName}(${funcArguments}) {
99
- return request({
100
- url: ${funcUrl},
101
- method: '${type}', ${funcParams}
102
- })
103
- }\n`;
104
- }
105
- function httpgetJson(url) {
106
- return new Promise((resolve, reject) => {
107
- http.get(url, res => {
108
- const {
109
- statusCode
110
- } = res;
111
- const contentType = res.headers["content-type"];
112
- let error;
113
- if (statusCode !== 200) {
114
- error = new Error("请求失败。\n" + `状态码: ${statusCode}`);
115
- } else if (!/^application\/json/.test(contentType)) {
116
- error = new Error("无效的 content-type.\n" + `期望 application/json 但获取的是 ${contentType}`);
117
- }
118
- if (error) {
119
- errorLog(error.message);
120
- // 消耗响应数据以释放内存
121
- res.resume();
122
- return;
123
- }
124
- res.setEncoding("utf8");
125
- let rawData = "";
126
- res.on("data", chunk => {
127
- rawData += chunk;
128
- });
129
- res.on("end", () => {
130
- try {
131
- const parsedData = JSON.parse(rawData);
132
- resolve(parsedData);
133
- } catch (e) {
134
- reject(`错误: ${e.message}`);
135
- }
136
- });
137
- }).on("error", e => {
138
- reject(`错误: ${e.message}`);
139
- });
140
- });
141
- }
142
- async function genSwagger() {
143
- log("获取远程json文件中...");
144
- const {
145
- paths
146
- } = await httpgetJson(url);
147
- successLog("获取成功正在生成api文件");
148
- const obj = {};
149
- /**
150
- * 将数据转换成格式
151
- * se-ex-exam-controller: [
152
- * {
153
- * folder:'exam'
154
- * name:'/ex/exam'
155
- * summary:'修改考试考卷'
156
- * tag:'se-ex-exam-controller'
157
- * type:'put'
158
- * }
159
- * ...
160
- * ]
161
- */
162
- for (const name in paths) {
163
- const path = paths[name] || {};
164
- const pathKeys = Object.keys(path) || [];
165
- for (let i = 0, len = pathKeys.length; i < len; i++) {
166
- const apiType = pathKeys[i];
167
- const tag = path[apiType].tags[0];
168
- if (!tag) continue;
169
- log(tag);
170
- const urlArray = name.slice(1).split("/");
171
- const folder = urlArray[1];
172
- const item = {
173
- summary: path[apiType].summary,
174
- tag,
175
- name,
176
- type: apiType,
177
- folder
178
- };
179
- if (obj[path[apiType].tags[0]]) {
180
- obj[path[apiType].tags[0]].push(item);
181
- } else {
182
- obj[path[apiType].tags[0]] = [item];
183
- }
184
- }
185
- }
186
- for (const tagName in obj) {
187
- let jsString = "";
188
- const requestTypes = [];
189
- let folder = "";
190
- for (const item of obj[tagName]) {
191
- const requestType = requestTypes.filter(o => o === item.type);
192
- if (requestType.length === 0) requestTypes.push(item.type);
193
- jsString += generateFunc(item.name, item.summary, item.type);
194
- folder = item.folder;
195
- }
196
- jsString = generateTemplate() + jsString;
197
- mkdirsSync(getPath(`${srcFolder}/${folder}`));
198
- // console.log(jsString)
199
- require$$0.writeFileSync(getPath(`${srcFolder}/${folder}/${tagName}.js`), jsString);
200
- }
201
- successLog("生成完毕");
202
- }
203
- genSwagger();