UNPKG

9.64 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var tslib_1 = require("tslib");
4/* eslint-disable @typescript-eslint/no-var-requires */
5var path = tslib_1.__importStar(require("path"));
6var fs = tslib_1.__importStar(require("fs"));
7var request = tslib_1.__importStar(require("request"));
8var chalk_1 = tslib_1.__importDefault(require("chalk"));
9var consts_1 = require("./consts");
10var swagger2ts_1 = tslib_1.__importDefault(require("./swagger2ts"));
11var serve_1 = tslib_1.__importDefault(require("./yapi/serve"));
12var init_1 = require("./init");
13var guard_1 = require("./guard");
14var serve_2 = require("./diff/serve");
15var defaultParseConfig = {
16 '-l': 'typescript-angularjs',
17 '-t': path.join(init_1.pluginsPath, 'typescript-tkit'),
18 '-o': path.join(process.cwd(), 'src', 'services')
19};
20/** CLI入口函数 */
21function gen(config, options) {
22 return tslib_1.__awaiter(this, void 0, void 0, function () {
23 var url, remoteUrl, _a, type, swaggerParser, _b, requestConfig, localSwaggerUrl, remoteSwaggerUrl, yapiTMP, updateLocalSwagger, swagger2tsConfig, servicesPath, code, swaggerData, guardConfig, warnings, _c, w_1, errors_1, _d, errors, w, suggestions, swaggerFileName, swaggerPath, res;
24 var _this = this;
25 return tslib_1.__generator(this, function (_e) {
26 switch (_e.label) {
27 case 0:
28 url = config.url, remoteUrl = config.remoteUrl, _a = config.type, type = _a === void 0 ? 'swagger' : _a, swaggerParser = config.swaggerParser, _b = config.requestConfig, requestConfig = _b === void 0 ? {} : _b;
29 if (!url || url.match(consts_1.RemoteUrlReg)) {
30 console.log(chalk_1.default.red("[ERROR]: \u81EA @3.1.* url \u5FC5\u987B\u662F\u672C\u5730\u5730\u5740"));
31 throw 1;
32 }
33 localSwaggerUrl = path.join(consts_1.ProjectDir, url);
34 remoteSwaggerUrl = (requestConfig.url = requestConfig.url || remoteUrl || '');
35 if (remoteSwaggerUrl) {
36 if (!remoteSwaggerUrl.match(consts_1.RemoteUrlReg)) {
37 remoteSwaggerUrl = path.join(consts_1.ProjectDir, remoteSwaggerUrl);
38 if (!fs.existsSync(remoteSwaggerUrl)) {
39 console.log(chalk_1.default.red("[ERROR]: remoteUrl \u6307\u5B9A\u7684\u6587\u4EF6 " + remoteUrl + " \u4E0D\u5B58\u5728"));
40 throw 1;
41 }
42 }
43 }
44 if (!(type === 'yapi')) return [3 /*break*/, 2];
45 return [4 /*yield*/, serve_1.default(remoteSwaggerUrl, config.yapiConfig)];
46 case 1:
47 yapiTMP = _e.sent();
48 if ('result' in yapiTMP && yapiTMP.result && !yapiTMP.code) {
49 remoteSwaggerUrl = yapiTMP.result;
50 }
51 else {
52 console.log(chalk_1.default.red("[ERROR]: \u57FA\u4E8E YAPI \u751F\u6210\u5931\u8D25: " + yapiTMP.message));
53 throw 1;
54 }
55 _e.label = 2;
56 case 2:
57 updateLocalSwagger = function (data) {
58 fs.writeFileSync(localSwaggerUrl, data ? JSON.stringify(data, null, 2) : data, {
59 encoding: 'utf8'
60 });
61 };
62 swagger2tsConfig = tslib_1.__assign(tslib_1.__assign({}, defaultParseConfig), swaggerParser);
63 servicesPath = swagger2tsConfig['-o'] || '';
64 return [4 /*yield*/, new Promise(function (rs) {
65 var loader = function (cb) {
66 remoteSwaggerUrl
67 ? remoteSwaggerUrl.match(consts_1.RemoteUrlReg)
68 ? request.get(tslib_1.__assign(tslib_1.__assign({}, requestConfig), { url: remoteSwaggerUrl }), function (err, res) { return cb(err, { body: JSON.parse(res.body) }); })
69 : cb(undefined, { body: require(remoteSwaggerUrl) })
70 : cb(undefined, {});
71 };
72 loader(function (err, _a) {
73 var newSwagger = _a.body;
74 return tslib_1.__awaiter(_this, void 0, void 0, function () {
75 var localSwagger, merged;
76 return tslib_1.__generator(this, function (_b) {
77 switch (_b.label) {
78 case 0:
79 if (!err) return [3 /*break*/, 1];
80 console.log(chalk_1.default.red("[ERROR]: \u4E0B\u8F7D Swagger JSON \u5931\u8D25: " + err));
81 rs(1);
82 return [3 /*break*/, 5];
83 case 1:
84 if (!fs.existsSync(servicesPath)) {
85 fs.mkdirSync(servicesPath);
86 }
87 if (!newSwagger) return [3 /*break*/, 4];
88 if (!fs.existsSync(localSwaggerUrl)) return [3 /*break*/, 3];
89 localSwagger = require(localSwaggerUrl);
90 return [4 /*yield*/, serve_2.serveDiff(localSwagger, newSwagger)];
91 case 2:
92 merged = _b.sent();
93 merged && updateLocalSwagger(merged);
94 return [3 /*break*/, 4];
95 case 3:
96 updateLocalSwagger(newSwagger);
97 _b.label = 4;
98 case 4:
99 rs(0);
100 _b.label = 5;
101 case 5: return [2 /*return*/];
102 }
103 });
104 });
105 });
106 })];
107 case 3:
108 code = _e.sent();
109 if (code) {
110 throw code;
111 }
112 // 删除缓存
113 delete require.cache[require.resolve(localSwaggerUrl)];
114 swaggerData = require(localSwaggerUrl);
115 guardConfig = config.guardConfig || {};
116 warnings = Array();
117 return [4 /*yield*/, guard_1.strictModeGuard(swaggerData, guardConfig)];
118 case 4:
119 _c = _e.sent(), w_1 = _c.warnings, errors_1 = _c.errors;
120 warnings.push.apply(warnings, w_1);
121 if (errors_1.length) {
122 throw errors_1.join('\n');
123 }
124 return [4 /*yield*/, guard_1.operationIdGuard(swaggerData, guardConfig)];
125 case 5:
126 _d = _e.sent(), errors = _d.errors, w = _d.warnings, suggestions = _d.suggestions;
127 warnings.push.apply(warnings, w);
128 if (warnings.length) {
129 console.log(chalk_1.default.yellow(warnings.join('\n')));
130 }
131 swaggerFileName = init_1.basePathToFileName((swaggerData.basePath || init_1.DefaultBasePath) + ".json");
132 swaggerPath = path.join(init_1.SmTmpDir, swaggerFileName);
133 fs.writeFileSync(swaggerPath, JSON.stringify(swaggerData), {
134 encoding: 'utf8'
135 });
136 if (errors.length) {
137 if (suggestions.length) {
138 console.log(chalk_1.default.green(JSON.stringify(suggestions, undefined, 2)));
139 }
140 throw errors.join('\n');
141 }
142 else {
143 if (suggestions.length) {
144 console.log(chalk_1.default.green(JSON.stringify(suggestions, undefined, 2)));
145 }
146 }
147 return [4 /*yield*/, swagger2ts_1.default(tslib_1.__assign(tslib_1.__assign({}, swagger2tsConfig), { '-i': swaggerPath }), options.clear)];
148 case 6:
149 res = _e.sent();
150 if (res.code) {
151 throw "[ERROR]: gen failed with: " + res.message;
152 }
153 else {
154 console.log(chalk_1.default.green("[INFO]: gen success with: " + localSwaggerUrl));
155 console.log(chalk_1.default.yellowBright("[IMP] \u8BF7\u5C06\u6587\u4EF6 " + localSwaggerUrl + " \u6DFB\u52A0\u5230\u7248\u672C\u4ED3\u5E93"));
156 }
157 return [2 /*return*/, 0];
158 }
159 });
160 });
161}
162exports.default = gen;
163//# sourceMappingURL=index.js.map
\No newline at end of file