1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | var tslib_1 = require("tslib");
|
4 |
|
5 | var path = tslib_1.__importStar(require("path"));
|
6 | var fs = tslib_1.__importStar(require("fs"));
|
7 | var request = tslib_1.__importStar(require("request"));
|
8 | var chalk_1 = tslib_1.__importDefault(require("chalk"));
|
9 | var consts_1 = require("./consts");
|
10 | var swagger2ts_1 = tslib_1.__importDefault(require("./swagger2ts"));
|
11 | var serve_1 = tslib_1.__importDefault(require("./yapi/serve"));
|
12 | var init_1 = require("./init");
|
13 | var guard_1 = require("./guard");
|
14 | var serve_2 = require("./diff/serve");
|
15 | var defaultParseConfig = {
|
16 | '-l': 'typescript-angularjs',
|
17 | '-t': path.join(init_1.pluginsPath, 'typescript-tkit'),
|
18 | '-o': path.join(process.cwd(), 'src', 'services')
|
19 | };
|
20 |
|
21 | function 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 , 2];
|
45 | return [4 , 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 , 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 , 1];
|
80 | console.log(chalk_1.default.red("[ERROR]: \u4E0B\u8F7D Swagger JSON \u5931\u8D25: " + err));
|
81 | rs(1);
|
82 | return [3 , 5];
|
83 | case 1:
|
84 | if (!fs.existsSync(servicesPath)) {
|
85 | fs.mkdirSync(servicesPath);
|
86 | }
|
87 | if (!newSwagger) return [3 , 4];
|
88 | if (!fs.existsSync(localSwaggerUrl)) return [3 , 3];
|
89 | localSwagger = require(localSwaggerUrl);
|
90 | return [4 , serve_2.serveDiff(localSwagger, newSwagger)];
|
91 | case 2:
|
92 | merged = _b.sent();
|
93 | merged && updateLocalSwagger(merged);
|
94 | return [3 , 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 ];
|
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 , 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 , 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 , 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 , 0];
|
158 | }
|
159 | });
|
160 | });
|
161 | }
|
162 | exports.default = gen;
|
163 |
|
\ | No newline at end of file |