@gopowerteam/request-generate 0.2.3 → 0.3.0

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.
Files changed (34) hide show
  1. package/dist/chunk-C0xms8kb.cjs +34 -0
  2. package/dist/index.cjs +1105 -0
  3. package/dist/index.d.cts +739 -0
  4. package/dist/index.d.mts +739 -0
  5. package/dist/index.mjs +937 -1040
  6. package/dist/vite-plugin/index.cjs +238 -0
  7. package/dist/vite-plugin/index.d.cts +13 -0
  8. package/dist/vite-plugin/index.d.mts +14 -0
  9. package/dist/vite-plugin/index.mjs +118 -118
  10. package/package.json +29 -29
  11. package/dist/chunk-WF3XBEPN.mjs +0 -18
  12. package/dist/chunk-XXPGZHWZ.js +0 -10
  13. package/dist/index.d.ts +0 -165
  14. package/dist/index.js +0 -1203
  15. package/dist/vite-plugin/index.d.ts +0 -13
  16. package/dist/vite-plugin/index.js +0 -233
  17. /package/dist/templates/{export-model.hbs → templates/export-model.hbs} +0 -0
  18. /package/dist/templates/{export-service.hbs → templates/export-service.hbs} +0 -0
  19. /package/dist/templates/{partials → templates/partials}/export-description.hbs +0 -0
  20. /package/dist/templates/{partials → templates/partials}/export-header.hbs +0 -0
  21. /package/dist/templates/{partials → templates/partials}/export-model-field.hbs +0 -0
  22. /package/dist/templates/{partials → templates/partials}/export-model-import.hbs +0 -0
  23. /package/dist/templates/{partials → templates/partials}/export-model-type.hbs +0 -0
  24. /package/dist/templates/{partials → templates/partials}/export-operation-params-body.hbs +0 -0
  25. /package/dist/templates/{partials → templates/partials}/export-operation-params-path.hbs +0 -0
  26. /package/dist/templates/{partials → templates/partials}/export-operation-params-query.hbs +0 -0
  27. /package/dist/templates/{partials → templates/partials}/export-operation-response.hbs +0 -0
  28. /package/dist/templates/{partials → templates/partials}/export-schema-type.hbs +0 -0
  29. /package/dist/templates/{partials → templates/partials}/export-service-class.hbs +0 -0
  30. /package/dist/templates/{partials → templates/partials}/export-service-import.hbs +0 -0
  31. /package/dist/templates/{partials → templates/partials}/export-service-namespace-type.hbs +0 -0
  32. /package/dist/templates/{partials → templates/partials}/export-service-namespace.hbs +0 -0
  33. /package/dist/templates/{partials → templates/partials}/export-service-operation.hbs +0 -0
  34. /package/dist/templates/{partials → templates/partials}/is-required.hbs +0 -0
package/dist/index.js DELETED
@@ -1,1203 +0,0 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } var _class; var _class2; var _class3;
2
-
3
- var _chunkXXPGZHWZjs = require('./chunk-XXPGZHWZ.js');
4
-
5
- // src/download/index.ts
6
- var _fs = require('fs'); var fs = _interopRequireWildcard(_fs); var fs2 = _interopRequireWildcard(_fs); var fs5 = _interopRequireWildcard(_fs); var fs4 = _interopRequireWildcard(_fs); var fs6 = _interopRequireWildcard(_fs);
7
- var _path = require('path'); var path2 = _interopRequireWildcard(_path); var path3 = _interopRequireWildcard(_path); var path5 = _interopRequireWildcard(_path); var path6 = _interopRequireWildcard(_path);
8
-
9
- // src/utils/get-services-options.ts
10
-
11
- function createOptions(options, name, application) {
12
- const { service, openapi } = (() => {
13
- if (!application) {
14
- return {
15
- service: "",
16
- openapi: options.openapi
17
- };
18
- }
19
- if (typeof application === "string") {
20
- return {
21
- service: application,
22
- openapi: options.openapi
23
- };
24
- } else {
25
- return {
26
- service: application.key,
27
- openapi: application.openapi
28
- };
29
- }
30
- })();
31
- return {
32
- name,
33
- application: service,
34
- input: `${options.gateway}/${service}/${openapi}`.replace(/\/{2,3}/g, "/"),
35
- output: name ? path2.default.join(options.output, name) : options.output,
36
- exportModels: options.exportModels
37
- };
38
- }
39
- function generateServiceOptions(options) {
40
- if (options.applications && Object.keys(options.applications).length) {
41
- return Object.entries(options.applications).map(
42
- ([name, application]) => createOptions(options, name, application)
43
- );
44
- } else {
45
- return [createOptions(options)];
46
- }
47
- }
48
-
49
- // src/download/index.ts
50
- var DefaultDownloadDir = ".request";
51
- var _Download = class {
52
- static async startup(options) {
53
- const applicationOptions = generateServiceOptions(options);
54
- if (!fs.existsSync(DefaultDownloadDir)) {
55
- fs.mkdirSync(DefaultDownloadDir);
56
- }
57
- await Promise.all(
58
- applicationOptions.map((options2) => _Download.downloadOpenAPIFile(options2))
59
- );
60
- }
61
- static async downloadOpenAPIFile(option) {
62
- const response = await fetch(option.input);
63
- const data = await response.json();
64
- const filePath = path2.join(".request", `${option.name}.json`);
65
- fs.writeFileSync(filePath, JSON.stringify(data, null, 2));
66
- return data;
67
- }
68
- };
69
- var Download = _Download;
70
- _chunkXXPGZHWZjs.__publicField.call(void 0, Download, "options");
71
-
72
- // src/generate/index.ts
73
- var _process = require('process'); var _process2 = _interopRequireDefault(_process);
74
-
75
- // src/config/enum.config.ts
76
- var OpenAPIVersion = /* @__PURE__ */ ((OpenAPIVersion2) => {
77
- OpenAPIVersion2[OpenAPIVersion2["V2"] = 2] = "V2";
78
- OpenAPIVersion2[OpenAPIVersion2["V3"] = 3] = "V3";
79
- return OpenAPIVersion2;
80
- })(OpenAPIVersion || {});
81
-
82
- // src/utils/get-camel-name.ts
83
- function getCamelName(value) {
84
- return value.replace(/^[^a-z]+/gi, "").replace(/\W+/g, "_").replace(/[^\w-]+/g, "_").replace(/^\S/, (s) => s.toUpperCase()).replace(/_[a-z]/gi, (s) => s.toUpperCase()).replace(/_/g, "").trim();
85
- }
86
-
87
- // src/entities/model.ts
88
- var Model = class {
89
- // Model名称
90
-
91
- // 字段列表
92
-
93
- // 导入列表
94
-
95
- constructor(name) {
96
- this.name = name;
97
- }
98
- };
99
-
100
- // src/entities/field.ts
101
- var Field = class {
102
- // 字段名称
103
-
104
- // 是否必填
105
-
106
- // 字段类型
107
-
108
- // 引用类型
109
-
110
- // 字段枚举
111
-
112
- // 描述信息
113
-
114
- // 导入类型
115
-
116
- constructor(name, required) {
117
- this.name = name;
118
- this.required = required;
119
- }
120
- };
121
-
122
- // src/utils/get-built-in-type.ts
123
- var TYPE_MAPPINGS = /* @__PURE__ */ new Map([
124
- ["MapStringObject", "Record<string, any>"]
125
- ]);
126
- function getBuiltInType(ref) {
127
- return TYPE_MAPPINGS.get(ref);
128
- }
129
-
130
- // src/utils/get-mapped-type.ts
131
- var TYPE_MAPPINGS2 = /* @__PURE__ */ new Map([
132
- ["file", "binary"],
133
- ["any", "any"],
134
- ["object", "any"],
135
- ["array", "any[]"],
136
- ["boolean", "boolean"],
137
- ["byte", "number"],
138
- ["int", "number"],
139
- ["integer", "number"],
140
- ["float", "number"],
141
- ["double", "number"],
142
- ["short", "number"],
143
- ["long", "number"],
144
- ["number", "number"],
145
- ["char", "string"],
146
- ["date", "string"],
147
- ["date-time", "string"],
148
- ["password", "string"],
149
- ["string", "string"],
150
- ["void", "void"],
151
- ["null", "null"]
152
- ]);
153
- function getMappedType(type = "object", format) {
154
- if (format === "binary") {
155
- return "binary";
156
- }
157
- return TYPE_MAPPINGS2.get(type) || "any";
158
- }
159
-
160
- // src/parse/v2/strip-namespace.ts
161
- function stripNamespace(value) {
162
- return value.trim().replace(/^#\/definitions\//, "").replace(/^#\/parameters\//, "").replace(/^#\/responses\//, "").replace(/^#\/securityDefinitions\//, "");
163
- }
164
-
165
- // src/parse/v2/parse-schema-type.ts
166
- function parseSchemaType(schema) {
167
- if ("$ref" in schema && schema.$ref) {
168
- const ref = getCamelName(stripNamespace(schema.$ref));
169
- return {
170
- type: "any",
171
- ref,
172
- imports: [ref]
173
- };
174
- }
175
- if (!("$ref" in schema) && schema.type !== "array" && typeof schema.type === "string" && !schema.allOf && !schema.anyOf && !schema.oneOf) {
176
- return {
177
- type: getMappedType(schema.type || "any"),
178
- ref: void 0,
179
- enums: schema.enum
180
- };
181
- }
182
- if (!("$ref" in schema) && schema.type === "array" && schema.items && "$ref" in schema.items && schema.items.$ref) {
183
- const ref = getCamelName(stripNamespace(schema.items.$ref));
184
- const type = getBuiltInType(ref);
185
- return {
186
- type: "any[]",
187
- ref: `${_nullishCoalesce(type, () => ( ref))}[]`,
188
- imports: type ? void 0 : [ref]
189
- };
190
- }
191
- if (!("$ref" in schema) && schema.type === "array" && schema.items && !("$ref" in schema.items)) {
192
- return {
193
- type: `${getMappedType(schema.items.type)}[]`,
194
- ref: void 0
195
- };
196
- }
197
- if (!("$ref" in schema) && schema.type === "object") {
198
- return {
199
- type: getMappedType(schema.type),
200
- ref: "any"
201
- };
202
- }
203
- throw new Error("\u65E0\u6CD5\u89E3\u6790\u76F8\u5E94\u7684schema");
204
- }
205
-
206
- // src/parse/v2/parse-field.ts
207
- function parseField(name, properties, required = false) {
208
- const field = new Field(name, required);
209
- const { type, ref, imports, enums } = parseSchemaType(properties);
210
- field.type = type;
211
- field.ref = ref;
212
- field.imports = imports;
213
- field.enums = enums;
214
- if (!("$ref" in properties)) {
215
- field.description = properties.description;
216
- }
217
- return field;
218
- }
219
-
220
- // src/parse/v2/parse-fields.ts
221
- function parseFields(schema) {
222
- return Object.entries(schema.properties || {}).map(
223
- ([name, property]) => {
224
- var _a;
225
- return parseField(name, property, (_a = schema.required) == null ? void 0 : _a.includes(name));
226
- }
227
- );
228
- }
229
-
230
- // src/parse/v2/parse-model.ts
231
- function parseModel(name, definition) {
232
- const model = new Model(name);
233
- model.fields = parseFields(definition);
234
- const imports = model.fields.filter((field) => field.imports).reduce((r, m) => [...r, ...m.imports || []], []).filter((m) => m !== name);
235
- model.imports = Array.from(new Set(imports));
236
- return model;
237
- }
238
-
239
- // src/parse/v2/parse-models.ts
240
- function parseModels(document) {
241
- const models = [];
242
- if (document.definitions) {
243
- for (const definitionName in document.definitions) {
244
- if (Object.getOwnPropertyNames(document.definitions).includes(
245
- definitionName
246
- )) {
247
- const definition = document.definitions[definitionName];
248
- const model = parseModel(getCamelName(definitionName), definition);
249
- models.push(model);
250
- }
251
- }
252
- }
253
- return models;
254
- }
255
-
256
- // src/entities/service.ts
257
- var Service = (_class = class {
258
- constructor(name) {;_class.prototype.__init.call(this);_class.prototype.__init2.call(this);
259
- var _a, _b;
260
- this.name = name;
261
- this.responseType = ((_b = (_a = Generate.options) == null ? void 0 : _a.exportServices) == null ? void 0 : _b.responseType) || "promise";
262
- }
263
- // 服务名称
264
-
265
- // 应用名称
266
-
267
- // 导出Model
268
- __init() {this.imports = []}
269
- // 操作列表
270
- __init2() {this.operations = []}
271
- // 返回类型
272
-
273
- }, _class);
274
-
275
- // src/utils/get-service-name.ts
276
- function getServiceName(path7, method, operationObject, tags) {
277
- var _a, _b, _c;
278
- const resolve2 = (_b = (_a = Generate.options) == null ? void 0 : _a.exportServices) == null ? void 0 : _b.serviceResolve;
279
- if (resolve2) {
280
- return resolve2({ path: path7, method, object: operationObject, tags });
281
- } else {
282
- return ((_c = operationObject.tags) == null ? void 0 : _c.map((tag) => getCamelName(tag))) || "Default";
283
- }
284
- }
285
-
286
- // src/entities/operation.ts
287
- var Operation = (_class2 = class {
288
- // Operation名称
289
-
290
- // Operation Method
291
-
292
- // Operation地址
293
-
294
- // Operation注释
295
-
296
- // response类型
297
-
298
- // 返回类型
299
-
300
- // Query参数
301
- __init3() {this.parametersPath = []}
302
- // Body参数
303
- __init4() {this.parametersQuery = []}
304
- // path参数
305
-
306
- // 导入操作
307
- __init5() {this.imports = []}
308
- constructor(name, method, path7) {;_class2.prototype.__init3.call(this);_class2.prototype.__init4.call(this);_class2.prototype.__init5.call(this);
309
- var _a, _b;
310
- this.name = name;
311
- this.method = method;
312
- this.path = path7;
313
- this.responseType = ((_b = (_a = Generate.options) == null ? void 0 : _a.exportServices) == null ? void 0 : _b.responseType) || "promise";
314
- }
315
- }, _class2);
316
-
317
- // src/utils/get-operation-name.ts
318
- function getOperationName(path7, method, operationObject) {
319
- var _a, _b;
320
- const resolve2 = (_b = (_a = Generate.options) == null ? void 0 : _a.exportServices) == null ? void 0 : _b.operationResolve;
321
- if (resolve2) {
322
- return resolve2({ path: path7, method, object: operationObject });
323
- } else {
324
- return operationObject.operationId || "";
325
- }
326
- }
327
-
328
- // src/entities/operation-parameter.ts
329
- var OperationParameter = (_class3 = class {constructor() { _class3.prototype.__init6.call(this); }
330
- // 参数位置
331
-
332
- // 参数名称
333
-
334
- // 参数类型
335
-
336
- // 参数引用
337
-
338
- // 参数枚举
339
-
340
- // 参数注释
341
-
342
- // 是否必填
343
-
344
- // 导入类型
345
- __init6() {this.imports = []}
346
- }, _class3);
347
-
348
- // src/parse/v2/parse-parameters-body.ts
349
- function parseParametersBody(parameters) {
350
- const requestBody = parameters.find(
351
- (parameter) => !("$ref" in parameter) && parameter.in === "body"
352
- );
353
- if (requestBody && "schema" in requestBody) {
354
- const { type, ref, imports } = parseSchemaType(requestBody.schema);
355
- const parameter = new OperationParameter();
356
- parameter.name = "requestBody";
357
- parameter.in = "body";
358
- parameter.type = type;
359
- parameter.ref = ref;
360
- parameter.imports = imports || [];
361
- return parameter;
362
- }
363
- return void 0;
364
- }
365
-
366
- // src/parse/v2/parse-parameters-path.ts
367
- function parseParametersPath(parameters) {
368
- return parameters.reduce((r, p) => {
369
- if (!("$ref" in p) && p.in === "path") {
370
- const { type, ref, imports, enums } = parseSchemaType(
371
- p
372
- );
373
- const parameter = new OperationParameter();
374
- parameter.name = p.name;
375
- parameter.description = p.description;
376
- parameter.in = "path";
377
- parameter.type = type;
378
- parameter.ref = ref;
379
- parameter.imports = imports || [];
380
- parameter.enums = enums;
381
- r.push(parameter);
382
- }
383
- return r;
384
- }, []);
385
- }
386
-
387
- // src/parse/v2/parse-parameters-query.ts
388
- function parseParametersQuery(parameters) {
389
- var _a, _b;
390
- const excludeParams = (_b = (_a = Generate.options) == null ? void 0 : _a.exportServices) == null ? void 0 : _b.excludeQueryParams;
391
- return parameters.reduce((r, p) => {
392
- if (!("$ref" in p) && p.in === "query" && !(excludeParams && excludeParams.includes(p.name.split(".")[0]))) {
393
- const { type, ref, imports, enums } = parseSchemaType(
394
- p
395
- );
396
- const parameter = new OperationParameter();
397
- parameter.name = p.name;
398
- parameter.description = p.description;
399
- parameter.in = "query";
400
- parameter.type = type;
401
- parameter.ref = ref;
402
- parameter.required = p.required;
403
- parameter.imports = imports || [];
404
- parameter.enums = enums;
405
- if (p.name.includes(".") && !p.name.startsWith(".") && !p.name.endsWith(".")) {
406
- parameter.name = `"${p.name}"`;
407
- }
408
- r.push(parameter);
409
- }
410
- return r;
411
- }, []);
412
- }
413
-
414
- // src/parse/v2/parse-operation.ts
415
- function parseOperation(path7, method, operationObject) {
416
- var _a;
417
- const name = getOperationName(path7, method, operationObject);
418
- const operation = new Operation(name, method, path7);
419
- operation.description = operationObject.summary || operation.description;
420
- if (operationObject.parameters) {
421
- operation.parametersBody = parseParametersBody(operationObject.parameters);
422
- operation.parametersPath = parseParametersPath(operationObject.parameters);
423
- operation.parametersQuery = parseParametersQuery(operationObject.parameters);
424
- }
425
- const responseSchema = parseResponseType(operationObject.responses);
426
- operation.imports = Array.from(
427
- /* @__PURE__ */ new Set([
428
- ...((_a = operation.parametersBody) == null ? void 0 : _a.imports) || [],
429
- ...operation.parametersPath.flatMap((p) => p.imports) || [],
430
- ...operation.parametersQuery.flatMap((p) => p.imports) || [],
431
- ...(responseSchema == null ? void 0 : responseSchema.imports) || []
432
- ])
433
- );
434
- operation.responseRef = (responseSchema == null ? void 0 : responseSchema.ref) || "void";
435
- return operation;
436
- }
437
- function parseResponseType(responses) {
438
- const SUCCESS_STATUS_CODE = "200";
439
- const response = responses == null ? void 0 : responses[SUCCESS_STATUS_CODE];
440
- if (response && "$ref" in response) {
441
- return parseSchemaType(response);
442
- }
443
- if (response && "schema" in response && (response == null ? void 0 : response.schema)) {
444
- return parseSchemaType(response == null ? void 0 : response.schema);
445
- }
446
- return {
447
- type: "void",
448
- ref: "void",
449
- imports: []
450
- };
451
- }
452
-
453
- // src/parse/v2/parse-service.ts
454
- function parseService(path7, method, operationObject, tags, services) {
455
- const toNames = (name) => Array.isArray(name) ? name : [name];
456
- const names = toNames(
457
- getServiceName(
458
- path7,
459
- method,
460
- operationObject,
461
- tags || []
462
- )
463
- );
464
- const operation = parseOperation(path7, method, operationObject);
465
- names.forEach((name) => {
466
- let service = services.find((service2) => service2.name === name);
467
- if (!service) {
468
- service = new Service(name);
469
- services.push(service);
470
- }
471
- if (service) {
472
- service.operations.push(operation);
473
- }
474
- service.operations.flatMap((operation2) => operation2.imports).forEach((model) => {
475
- if (service && !service.imports.includes(model)) {
476
- service.imports.push(model);
477
- }
478
- });
479
- });
480
- }
481
-
482
- // src/parse/v2/parse-services.ts
483
- function parseServices(document) {
484
- const services = [];
485
- Object.entries(document.paths).forEach(([path7, pathObject]) => {
486
- if (pathObject) {
487
- Object.entries(pathObject).forEach(([method, operationObject]) => {
488
- parseService(
489
- path7,
490
- method,
491
- operationObject,
492
- document.tags || [],
493
- services
494
- );
495
- });
496
- }
497
- });
498
- return services;
499
- }
500
-
501
- // src/parse/v2/index.ts
502
- function parseV2(document) {
503
- const models = parseModels(document);
504
- const services = parseServices(document);
505
- return {
506
- models,
507
- services
508
- };
509
- }
510
-
511
- // src/parse/v3/strip-namespace.ts
512
- function stripNamespace2(value) {
513
- return value.trim().replace(/^#\/components\/schemas\//, "").replace(/^#\/components\/responses\//, "").replace(/^#\/components\/parameters\//, "").replace(/^#\/components\/examples\//, "").replace(/^#\/components\/requestBodies\//, "").replace(/^#\/components\/headers\//, "").replace(/^#\/components\/securitySchemes\//, "").replace(/^#\/components\/links\//, "").replace(/^#\/components\/callbacks\//, "");
514
- }
515
-
516
- // src/parse/v3/parse-schema-type.ts
517
- function parseSchemaType2(schema) {
518
- if ("$ref" in schema) {
519
- const ref = getCamelName(stripNamespace2(schema.$ref));
520
- return {
521
- type: "any",
522
- ref,
523
- imports: [ref]
524
- };
525
- }
526
- if (!("$ref" in schema) && schema.type !== "array" && !schema.allOf && !schema.anyOf && !schema.oneOf) {
527
- return {
528
- type: getMappedType(schema.type || "any"),
529
- ref: void 0,
530
- enums: schema.enum
531
- };
532
- }
533
- if (schema.type === "array" && "$ref" in schema.items) {
534
- const ref = getCamelName(stripNamespace2(schema.items.$ref));
535
- const type = getBuiltInType(ref);
536
- return {
537
- type: "any[]",
538
- ref: `${_nullishCoalesce(type, () => ( ref))}[]`,
539
- imports: type ? void 0 : [ref]
540
- };
541
- }
542
- if (schema.type === "array" && !("$ref" in schema.items)) {
543
- return {
544
- type: `${getMappedType(schema.items.type)}[]`,
545
- ref: void 0
546
- };
547
- }
548
- if (schema.allOf || schema.anyOf || schema.oneOf) {
549
- const ofSchema = schema.allOf || schema.anyOf || schema.oneOf;
550
- const ofSchemaArray = ofSchema == null ? void 0 : ofSchema.map((s) => parseSchemaType2(s));
551
- if (ofSchemaArray) {
552
- const hasRef = ofSchemaArray.some((s) => s.ref);
553
- return {
554
- type: hasRef ? "any" : ofSchemaArray.map((s) => s.type).join("|"),
555
- ref: hasRef ? ofSchemaArray.map((s) => s.ref && getCamelName(s.ref) || s.type).join("|") : void 0,
556
- imports: hasRef ? ofSchemaArray.reduce(
557
- (r, s) => (
558
- // eslint-disable-next-line no-sequences
559
- (s.ref && !r.includes(s.ref) && r.push(getCamelName(s.ref)), r)
560
- ),
561
- []
562
- ) : void 0
563
- };
564
- }
565
- }
566
- throw new Error("\u65E0\u6CD5\u89E3\u6790\u76F8\u5E94\u7684schema");
567
- }
568
-
569
- // src/parse/v3/parse-field.ts
570
- function parseField2(name, properties, required = false) {
571
- const field = new Field(name, required);
572
- const { type, ref, imports, enums } = parseSchemaType2(properties);
573
- field.type = type;
574
- field.ref = ref;
575
- field.imports = imports;
576
- field.enums = enums;
577
- if (!("$ref" in properties)) {
578
- field.description = properties.description;
579
- }
580
- return field;
581
- }
582
-
583
- // src/parse/v3/parse-fields.ts
584
- function parseFields2(schema) {
585
- return Object.entries(schema.properties || {}).map(
586
- ([name, property]) => {
587
- var _a;
588
- return parseField2(name, property, (_a = schema.required) == null ? void 0 : _a.includes(name));
589
- }
590
- );
591
- }
592
-
593
- // src/parse/v3/parse-model.ts
594
- function parseModel2(name, definition) {
595
- const model = new Model(name);
596
- model.fields = parseFields2(definition);
597
- const imports = model.fields.filter((field) => field.imports).reduce((r, m) => [...r, ...m.imports || []], []).filter((m) => m !== name);
598
- model.imports = Array.from(new Set(imports));
599
- return model;
600
- }
601
-
602
- // src/parse/v3/parse-models.ts
603
- function parseModels2(document) {
604
- const models = [];
605
- if (document.components) {
606
- for (const definitionName in document.components.schemas) {
607
- const { schemas } = document.components;
608
- if (Object.getOwnPropertyNames(schemas).includes(definitionName)) {
609
- const definition = document.components.schemas[definitionName];
610
- const model = parseModel2(getCamelName(definitionName), definition);
611
- models.push(model);
612
- }
613
- }
614
- }
615
- return models;
616
- }
617
-
618
- // src/parse/v3/parse-parameters-body.ts
619
- function parseParametersBody2(requestBody) {
620
- const { type, ref, imports } = parseBodyType(requestBody);
621
- const parameter = new OperationParameter();
622
- parameter.name = "requestBody";
623
- parameter.in = "body";
624
- parameter.type = type;
625
- parameter.ref = ref;
626
- parameter.imports = imports || [];
627
- return parameter;
628
- }
629
- function parseBodyType(requestBody) {
630
- var _a, _b;
631
- if ("$ref" in requestBody) {
632
- return parseSchemaType2(requestBody);
633
- }
634
- if ("content" in requestBody && ((_a = requestBody == null ? void 0 : requestBody.content["application/json"]) == null ? void 0 : _a.schema)) {
635
- const schema = (_b = requestBody == null ? void 0 : requestBody.content["application/json"]) == null ? void 0 : _b.schema;
636
- return parseSchemaType2(schema);
637
- }
638
- throw new Error("\u65E0\u6CD5\u89E3\u6790RequestBody Schema");
639
- }
640
-
641
- // src/parse/v3/parse-parameters-path.ts
642
- function parseParametersPath2(parameters) {
643
- return parameters.reduce((r, p) => {
644
- if (!("$ref" in p) && p.in === "path" && p.schema) {
645
- const { type, ref, imports, enums } = parseSchemaType2(p.schema);
646
- const parameter = new OperationParameter();
647
- parameter.name = p.name;
648
- parameter.description = p.description;
649
- parameter.in = "path";
650
- parameter.type = type;
651
- parameter.ref = ref;
652
- parameter.imports = imports || [];
653
- parameter.enums = enums;
654
- r.push(parameter);
655
- }
656
- return r;
657
- }, []);
658
- }
659
-
660
- // src/parse/v3/parse-parameters-query.ts
661
- function parseParametersQuery2(parameters) {
662
- var _a, _b;
663
- const excludeParams = (_b = (_a = Generate.options) == null ? void 0 : _a.exportServices) == null ? void 0 : _b.excludeQueryParams;
664
- return parameters.reduce((r, p) => {
665
- if (!("$ref" in p) && p.in === "query" && p.schema && !(excludeParams && excludeParams.includes(p.name))) {
666
- const { type, ref, imports, enums } = parseSchemaType2(p.schema);
667
- const parameter = new OperationParameter();
668
- parameter.name = p.name;
669
- parameter.description = p.description;
670
- parameter.in = "query";
671
- parameter.type = type;
672
- parameter.ref = ref;
673
- parameter.required = p.required;
674
- parameter.imports = imports || [];
675
- parameter.enums = enums;
676
- if (p.name.includes(".") && !p.name.startsWith(".") && !p.name.endsWith(".")) {
677
- parameter.name = `"${p.name}"`;
678
- }
679
- r.push(parameter);
680
- }
681
- return r;
682
- }, []);
683
- }
684
-
685
- // src/parse/v3/parse-operation.ts
686
- function parseOperation2(path7, method, operationObject) {
687
- var _a;
688
- const name = getOperationName(path7, method, operationObject);
689
- const operation = new Operation(name, method, path7);
690
- operation.description = operationObject.summary;
691
- if (operationObject.requestBody) {
692
- operation.parametersBody = parseParametersBody2(operationObject.requestBody);
693
- }
694
- if (operationObject.parameters) {
695
- operation.parametersPath = parseParametersPath2(operationObject.parameters);
696
- operation.parametersQuery = parseParametersQuery2(operationObject.parameters);
697
- }
698
- const responseSchema = parseResponseType2(operationObject.responses);
699
- operation.imports = Array.from(
700
- /* @__PURE__ */ new Set([
701
- ...((_a = operation.parametersBody) == null ? void 0 : _a.imports) || [],
702
- ...operation.parametersPath.flatMap((p) => p.imports) || [],
703
- ...operation.parametersQuery.flatMap((p) => p.imports) || [],
704
- ...(responseSchema == null ? void 0 : responseSchema.imports) || []
705
- ])
706
- );
707
- operation.responseRef = (responseSchema == null ? void 0 : responseSchema.ref) || (responseSchema == null ? void 0 : responseSchema.type) || "void";
708
- return operation;
709
- }
710
- function parseResponseType2(responses) {
711
- var _a, _b;
712
- const SUCCESS_STATUS_CODE = "200";
713
- const response = responses == null ? void 0 : responses[SUCCESS_STATUS_CODE];
714
- const medias = ["*/*", "application/json"];
715
- if (response && "$ref" in response) {
716
- return parseSchemaType2(responses);
717
- }
718
- if (response && "content" in response && medias.some((media) => {
719
- var _a2, _b2;
720
- return !!((_b2 = (_a2 = response == null ? void 0 : response.content) == null ? void 0 : _a2[media]) == null ? void 0 : _b2.schema);
721
- })) {
722
- const mediaType = medias.find(
723
- (media) => {
724
- var _a2, _b2;
725
- return !!((_b2 = (_a2 = response == null ? void 0 : response.content) == null ? void 0 : _a2[media]) == null ? void 0 : _b2.schema);
726
- }
727
- );
728
- const schema = (_b = (_a = response == null ? void 0 : response.content) == null ? void 0 : _a[mediaType]) == null ? void 0 : _b.schema;
729
- return parseSchemaType2(schema);
730
- }
731
- return {
732
- type: "void",
733
- ref: "void",
734
- imports: []
735
- };
736
- }
737
-
738
- // src/parse/v3/parse-service.ts
739
- function parseService2(path7, method, operationObject, tags, services) {
740
- const toNames = (name) => Array.isArray(name) ? name : [name];
741
- const names = toNames(
742
- getServiceName(
743
- path7,
744
- method,
745
- operationObject,
746
- tags || []
747
- )
748
- );
749
- const operation = parseOperation2(path7, method, operationObject);
750
- names.forEach((name) => {
751
- let service = services.find((service2) => service2.name === name);
752
- if (!service) {
753
- service = new Service(name);
754
- services.push(service);
755
- }
756
- if (service) {
757
- service.operations.push(operation);
758
- }
759
- service.operations.flatMap((operation2) => operation2.imports).forEach((model) => {
760
- if (service && !service.imports.includes(model)) {
761
- service.imports.push(model);
762
- }
763
- });
764
- });
765
- }
766
-
767
- // src/parse/v3/parse-services.ts
768
- function parseServices2(document) {
769
- const services = [];
770
- Object.entries(document.paths).forEach(([path7, pathObject]) => {
771
- if (pathObject) {
772
- Object.entries(pathObject).forEach(([method, operationObject]) => {
773
- parseService2(
774
- path7,
775
- method,
776
- operationObject,
777
- document.tags || [],
778
- services
779
- );
780
- });
781
- }
782
- });
783
- return services;
784
- }
785
-
786
- // src/parse/v3/index.ts
787
- function parseV3(document) {
788
- const models = parseModels2(document);
789
- const services = parseServices2(document);
790
- return {
791
- models,
792
- services
793
- };
794
- }
795
-
796
- // src/progress.ts
797
- var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
798
- var _ora = require('ora'); var _ora2 = _interopRequireDefault(_ora);
799
- var progressMaps = /* @__PURE__ */ new Map();
800
- function createProgress(name) {
801
- const spinner = _ora2.default.call(void 0,
802
- formatProgressText(name)
803
- ).start();
804
- progressMaps.set(name, {
805
- spinner,
806
- model: {
807
- total: 0,
808
- value: 0
809
- },
810
- service: {
811
- total: 0,
812
- value: 0
813
- }
814
- });
815
- }
816
- function startProgress(name, options) {
817
- const progress = progressMaps.get(name);
818
- if (progress) {
819
- progress.model = {
820
- total: options.models,
821
- value: 0
822
- };
823
- progress.service = {
824
- total: options.services,
825
- value: 0
826
- };
827
- updateProgressText(name, progress);
828
- }
829
- }
830
- function formatProgressText(name, progress) {
831
- const toStateText = (text) => `${_chalk2.default.green(text)}`;
832
- const toNameText = (text) => `${_chalk2.default.cyan(text).padEnd(20, " ")}`;
833
- const toModelText = (text) => `${_chalk2.default.greenBright("Model")}:${_chalk2.default.gray(text).padEnd(10, " ")}`;
834
- const toServiceText = (text) => `${_chalk2.default.greenBright("Service")}:${_chalk2.default.gray(text).padEnd(10, " ")}`;
835
- const isFinish = (progress == null ? void 0 : progress.model.value) === (progress == null ? void 0 : progress.model.total) && (progress == null ? void 0 : progress.service.value) === (progress == null ? void 0 : progress.service.total);
836
- if (progress) {
837
- const stateText = toStateText(isFinish ? "\u751F\u6210\u5B8C\u6210" : "\u751F\u6210\u4E2D");
838
- const nameText = toNameText(name);
839
- const modelText = toModelText(`${progress.model.value} / ${progress.model.total}`);
840
- const serviceText = toServiceText(`${progress.service.value} / ${progress.service.total}`);
841
- return `${stateText} | ${nameText} | ${modelText} | ${serviceText}`;
842
- } else {
843
- const stateText = toStateText("\u5F00\u59CB\u8BF7\u6C42");
844
- const nameText = toNameText(name);
845
- return `${stateText} | ${nameText}`;
846
- }
847
- }
848
- function updateProgressText(name, progress) {
849
- const isFinish = (progress == null ? void 0 : progress.model.value) === (progress == null ? void 0 : progress.model.total) && (progress == null ? void 0 : progress.service.value) === (progress == null ? void 0 : progress.service.total);
850
- if (isFinish) {
851
- progress.spinner.succeed(formatProgressText(name, progress));
852
- } else {
853
- progress.spinner.text = formatProgressText(name, progress);
854
- }
855
- }
856
- function updateProgress(name, type) {
857
- const progress = progressMaps.get(name);
858
- if (!progress) {
859
- return;
860
- }
861
- progress[type].value++;
862
- updateProgressText(name, progress);
863
- }
864
-
865
- // src/template.ts
866
-
867
-
868
- var _handlebars = require('handlebars'); var _handlebars2 = _interopRequireDefault(_handlebars);
869
-
870
- // src/template-helpers/equal.helper.ts
871
- var equalHelper = {
872
- name: "equal",
873
- fn(v1, v2, options) {
874
- if (v1 === v2) {
875
- return options.fn(this);
876
- } else {
877
- return options.inverse(this);
878
- }
879
- }
880
- };
881
-
882
- // src/template-helpers/include-query-params.ts
883
- var includeQueryParams = {
884
- name: "include-query-params",
885
- fn(operations, options) {
886
- if (operations.some((x) => x.parametersQuery.length > 0)) {
887
- return options.fn(this);
888
- } else {
889
- return options.inverse(this);
890
- }
891
- }
892
- };
893
-
894
- // src/template-helpers/is-array.helper.ts
895
- var isArrayHelper = {
896
- name: "is-array",
897
- fn(v1, options) {
898
- if (Array.isArray(v1)) {
899
- return options.fn(this);
900
- } else {
901
- return options.inverse(this);
902
- }
903
- }
904
- };
905
-
906
- // src/template-helpers/to-upper.helper.ts
907
- var toUpperHelper = {
908
- name: "to-upper",
909
- fn(v1, onlyFirst) {
910
- if (onlyFirst) {
911
- return v1.replace(/^\S/, (s) => {
912
- return s.toUpperCase();
913
- });
914
- } else {
915
- return v1.toUpperCase();
916
- }
917
- }
918
- };
919
-
920
- // src/template.ts
921
- function registerHandlebarTemplates() {
922
- registerHandlebarPartials();
923
- registerHandlebarHelpers();
924
- }
925
- function registerHandlebarPartials() {
926
- registerHandlebarPartial("is-required");
927
- registerHandlebarPartial("export-header");
928
- registerHandlebarPartial("export-description");
929
- registerHandlebarPartial("export-model-import");
930
- registerHandlebarPartial("export-model-type");
931
- registerHandlebarPartial("export-model-field");
932
- registerHandlebarPartial("export-schema-type");
933
- registerHandlebarPartial("export-service-import");
934
- registerHandlebarPartial("export-service-class");
935
- registerHandlebarPartial("export-service-namespace");
936
- registerHandlebarPartial("export-service-namespace-type");
937
- registerHandlebarPartial("export-service-operation");
938
- registerHandlebarPartial("export-operation-params-path");
939
- registerHandlebarPartial("export-operation-params-query");
940
- registerHandlebarPartial("export-operation-params-body");
941
- registerHandlebarPartial("export-operation-response");
942
- }
943
- function registerHandlebarHelpers() {
944
- registerHandlebarHelper(equalHelper);
945
- registerHandlebarHelper(isArrayHelper);
946
- registerHandlebarHelper(toUpperHelper);
947
- registerHandlebarHelper(includeQueryParams);
948
- }
949
- function registerHandlebarHelper(helper) {
950
- _handlebars2.default.registerHelper(helper.name, helper.fn);
951
- }
952
- function registerHandlebarPartial(input) {
953
- const template = loadHandlebarTemplate(`partials/${input}`);
954
- _handlebars2.default.registerPartial(input, template);
955
- }
956
- function loadHandlebarTemplate(input) {
957
- const templatePath = path3.resolve(__dirname, "templates", `${input}.hbs`);
958
- return fs2.readFileSync(templatePath, "utf-8");
959
- }
960
-
961
- // src/utils/get-openapi-document.ts
962
- var _swaggerparser = require('@apidevtools/swagger-parser'); var _swaggerparser2 = _interopRequireDefault(_swaggerparser);
963
- async function getOpenApiDocument(input) {
964
- return await _swaggerparser2.default.parse(input);
965
- }
966
-
967
- // src/utils/get-openapi-version.ts
968
- function getOpenAPIVersion(document) {
969
- const version = (document == null ? void 0 : document.swagger) || (document == null ? void 0 : document.openapi);
970
- if (typeof version === "string") {
971
- const v = Number.parseInt(version.charAt(0));
972
- if (Object.values(OpenAPIVersion).includes(v)) {
973
- return v;
974
- }
975
- }
976
- throw new Error(`\u65E0\u6CD5\u8BC6\u522B\u7684OPENAPI\u7248\u672C: "${String(version)}"`);
977
- }
978
-
979
- // src/generate/write-config.ts
980
- var _crypto = require('crypto'); var _crypto2 = _interopRequireDefault(_crypto);
981
-
982
-
983
- var ConfigFileName = ".config.json";
984
- var ConfigFilePath = path2.default.resolve(".request", ConfigFileName);
985
- function updateOptionsFromLocalConfig(options, output) {
986
- const config = readLocalConfig();
987
- const toUpdateOptions = /* @__PURE__ */ new Map();
988
- options = options.filter((item) => {
989
- const md5 = isNeedUpdate(item.name, config, output);
990
- if (md5) {
991
- toUpdateOptions.set(item.name, md5);
992
- return true;
993
- } else {
994
- return false;
995
- }
996
- });
997
- options.forEach((item) => {
998
- const file = path2.default.resolve(".request", `${item.name}.json`);
999
- item.input = file;
1000
- });
1001
- writeLocalConfig(toUpdateOptions, config);
1002
- return options;
1003
- }
1004
- function isNeedUpdate(name, config, output) {
1005
- const file = path2.default.resolve(".request", `${name}.json`);
1006
- const outputDir = path2.default.resolve(output);
1007
- if (!fs.default.existsSync(file)) {
1008
- throw new Error(`\u672A\u627E\u5230\u76F8\u5E94\u7684\u914D\u7F6E\u6587\u4EF6: ${name}.json`);
1009
- }
1010
- const data = fs.default.readFileSync(file);
1011
- const md5 = _crypto2.default.createHash("md5").update(data.toString()).digest("hex");
1012
- if (!fs.default.existsSync(path2.default.join(outputDir, name))) {
1013
- return md5;
1014
- }
1015
- const configItem = config.find((x) => x.name === name);
1016
- if (!configItem || configItem.md5 !== md5) {
1017
- return md5;
1018
- }
1019
- }
1020
- function readLocalConfig() {
1021
- if (!fs.default.existsSync(ConfigFilePath)) {
1022
- return [];
1023
- }
1024
- const data = fs.default.readFileSync(ConfigFilePath, "utf-8");
1025
- return JSON.parse(data);
1026
- }
1027
- function writeLocalConfig(toUpdateOptions, config) {
1028
- toUpdateOptions.forEach((md5, name) => {
1029
- const configItem = config.find((x) => x.name === name);
1030
- if (configItem) {
1031
- configItem.md5 = md5;
1032
- configItem.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
1033
- } else {
1034
- config.push({
1035
- name,
1036
- md5,
1037
- updatedAt: (/* @__PURE__ */ new Date()).toISOString()
1038
- });
1039
- }
1040
- });
1041
- fs.default.writeFileSync(ConfigFilePath, JSON.stringify(config, null, 2));
1042
- }
1043
-
1044
- // src/generate/write-models.ts
1045
-
1046
-
1047
- var _rimraf = require('rimraf'); var _rimraf2 = _interopRequireDefault(_rimraf);
1048
-
1049
- // src/generate/write-model.ts
1050
-
1051
-
1052
- // src/generate/write-file.ts
1053
-
1054
- function writeFile(output, content) {
1055
- fs4.writeFileSync(output, content, "utf-8");
1056
- }
1057
-
1058
- // src/generate/write-model.ts
1059
- function writeModel(model, output) {
1060
- const templateSource = loadHandlebarTemplate("export-model");
1061
- const template = _handlebars2.default.compile(templateSource);
1062
- const templateResult = template(model);
1063
- writeFile(output, templateResult);
1064
- }
1065
-
1066
- // src/generate/write-models.ts
1067
- function writeModels(client, options) {
1068
- if (!options.exportModels || !client.models) {
1069
- return;
1070
- }
1071
- const output = path5.join(options.output, "models");
1072
- if (fs5.existsSync(output)) {
1073
- _rimraf2.default.sync(output);
1074
- }
1075
- fs5.mkdirSync(output, { recursive: true });
1076
- client.models.forEach((model) => {
1077
- const filename = `${model.name}.ts`;
1078
- writeModel(model, path5.join(output, filename));
1079
- updateProgress(options.name || "default", "model");
1080
- });
1081
- }
1082
-
1083
- // src/generate/write-services.ts
1084
-
1085
-
1086
-
1087
-
1088
- // src/generate/write-service.ts
1089
-
1090
- function writeService(service, output) {
1091
- const templateSource = loadHandlebarTemplate("export-service");
1092
- const template = _handlebars2.default.compile(templateSource);
1093
- const templateResult = template(service);
1094
- writeFile(output, templateResult);
1095
- }
1096
-
1097
- // src/generate/write-services.ts
1098
- function writeServices(client, options) {
1099
- if (!client.services) {
1100
- return;
1101
- }
1102
- const output = path6.join(options.output, "services");
1103
- if (fs6.existsSync(output)) {
1104
- _rimraf2.default.sync(output);
1105
- }
1106
- fs6.mkdirSync(output, { recursive: true });
1107
- client.services.forEach((service) => {
1108
- const filename = `${service.name}Service.ts`;
1109
- service.application = Generate.options.appendService === false ? "" : options.application;
1110
- writeService(service, path6.join(output, filename));
1111
- updateProgress(options.name || "default", "service");
1112
- });
1113
- }
1114
-
1115
- // src/generate/index.ts
1116
- var _Generate = class {
1117
- /**
1118
- * 生成入口
1119
- * @param options
1120
- * @returns Promise<void>
1121
- */
1122
- static async startup(options) {
1123
- _Generate.options = options;
1124
- registerHandlebarTemplates();
1125
- let applicationOptions = generateServiceOptions(options);
1126
- applicationOptions = updateOptionsFromLocalConfig(applicationOptions, options.output);
1127
- const applications = [];
1128
- for (const applicationOption of applicationOptions) {
1129
- const client = await _Generate.generateApplicationClient(applicationOption);
1130
- applications.push({
1131
- client,
1132
- options: applicationOption
1133
- });
1134
- }
1135
- applications.forEach((application) => {
1136
- createProgress(application.options.name || "default");
1137
- _Generate.writeClient(application.client, application.options);
1138
- });
1139
- }
1140
- static async getApiDocument(input) {
1141
- try {
1142
- const document = await getOpenApiDocument(
1143
- input
1144
- );
1145
- return document;
1146
- } catch (e) {
1147
- console.error(`\u8BF7\u6C42\u6587\u4EF6[${input}]\u5931\u8D25,\u8BF7\u7A0D\u540E\u91CD\u8BD5.`);
1148
- _process2.default.exit(0);
1149
- }
1150
- }
1151
- /**
1152
- * 生成应用
1153
- */
1154
- static async generateApplicationClient(options) {
1155
- const document = await _Generate.getApiDocument(options.input);
1156
- const version = getOpenAPIVersion(document);
1157
- const client = _Generate.generateClient(document, version);
1158
- return client;
1159
- }
1160
- /**
1161
- * 生成对象信息
1162
- * @param document
1163
- * @param version
1164
- * @returns GenerateClient
1165
- */
1166
- static generateClient(document, version) {
1167
- switch (version) {
1168
- case 2 /* V2 */:
1169
- return parseV2(document);
1170
- case 3 /* V3 */:
1171
- return parseV3(document);
1172
- }
1173
- }
1174
- /**
1175
- * 写入Client对象
1176
- * @param client
1177
- * @param options
1178
- */
1179
- static writeClient(client, options) {
1180
- startProgress(options.name || "default", {
1181
- models: client.models.length,
1182
- services: client.services.length
1183
- });
1184
- writeModels(client, options);
1185
- writeServices(client, options);
1186
- }
1187
- };
1188
- var Generate = _Generate;
1189
- _chunkXXPGZHWZjs.__publicField.call(void 0, Generate, "options");
1190
-
1191
- // src/define-config.ts
1192
- function defineConfig(config) {
1193
- return config;
1194
- }
1195
-
1196
- // src/index.ts
1197
- var generate = Generate.startup;
1198
- var download = Download.startup;
1199
-
1200
-
1201
-
1202
-
1203
- exports.defineConfig = defineConfig; exports.download = download; exports.generate = generate;