evaengine 1.0.14 → 2.0.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 (199) hide show
  1. package/README.md +15 -1
  2. package/bin/engine +2 -31
  3. package/dist/bin.d.ts +1 -0
  4. package/dist/bin.js +40 -0
  5. package/dist/bin.js.map +1 -0
  6. package/{src/commands/index.js → dist/commands/index.d.ts} +1 -8
  7. package/dist/commands/index.js +6 -0
  8. package/dist/commands/index.js.map +1 -0
  9. package/dist/commands/interface.d.ts +18 -0
  10. package/dist/commands/interface.js +40 -0
  11. package/dist/commands/interface.js.map +1 -0
  12. package/dist/commands/make_entity.d.ts +47 -0
  13. package/dist/commands/make_entity.js +410 -0
  14. package/dist/commands/make_entity.js.map +1 -0
  15. package/dist/commands/tramp.d.ts +7 -0
  16. package/dist/commands/tramp.js +29 -0
  17. package/dist/commands/tramp.js.map +1 -0
  18. package/dist/config/index.d.ts +92 -0
  19. package/dist/config/index.js +96 -0
  20. package/dist/config/index.js.map +1 -0
  21. package/dist/di.d.ts +73 -0
  22. package/dist/di.js +76 -0
  23. package/dist/di.js.map +1 -0
  24. package/dist/engine.d.ts +85 -0
  25. package/dist/engine.js +404 -0
  26. package/dist/engine.js.map +1 -0
  27. package/dist/entities/index.d.ts +54 -0
  28. package/dist/entities/index.js +228 -0
  29. package/dist/entities/index.js.map +1 -0
  30. package/dist/exceptions/index.d.ts +153 -0
  31. package/dist/exceptions/index.js +439 -0
  32. package/dist/exceptions/index.js.map +1 -0
  33. package/dist/index.d.ts +45 -0
  34. package/dist/index.js +45 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/middlewares/auth.d.ts +5 -0
  37. package/dist/middlewares/auth.js +63 -0
  38. package/dist/middlewares/auth.js.map +1 -0
  39. package/dist/middlewares/auth_kong.d.ts +2 -0
  40. package/dist/middlewares/auth_kong.js +24 -0
  41. package/dist/middlewares/auth_kong.js.map +1 -0
  42. package/dist/middlewares/debug.d.ts +3 -0
  43. package/dist/middlewares/debug.js +50 -0
  44. package/dist/middlewares/debug.js.map +1 -0
  45. package/{src/middlewares/index.js → dist/middlewares/index.d.ts} +1 -11
  46. package/dist/middlewares/index.js +9 -0
  47. package/dist/middlewares/index.js.map +1 -0
  48. package/dist/middlewares/providers.d.ts +25 -0
  49. package/dist/middlewares/providers.js +63 -0
  50. package/dist/middlewares/providers.js.map +1 -0
  51. package/dist/middlewares/session.d.ts +6 -0
  52. package/dist/middlewares/session.js +51 -0
  53. package/dist/middlewares/session.js.map +1 -0
  54. package/dist/middlewares/trace.d.ts +52 -0
  55. package/dist/middlewares/trace.js +225 -0
  56. package/dist/middlewares/trace.js.map +1 -0
  57. package/dist/middlewares/validator.d.ts +10 -0
  58. package/dist/middlewares/validator.js +43 -0
  59. package/dist/middlewares/validator.js.map +1 -0
  60. package/dist/middlewares/view_cache.d.ts +14 -0
  61. package/dist/middlewares/view_cache.js +102 -0
  62. package/dist/middlewares/view_cache.js.map +1 -0
  63. package/dist/services/cache.d.ts +66 -0
  64. package/dist/services/cache.js +207 -0
  65. package/dist/services/cache.js.map +1 -0
  66. package/dist/services/config.d.ts +25 -0
  67. package/dist/services/config.js +88 -0
  68. package/dist/services/config.js.map +1 -0
  69. package/dist/services/env.d.ts +12 -0
  70. package/dist/services/env.js +24 -0
  71. package/dist/services/env.js.map +1 -0
  72. package/dist/services/event_manager.d.ts +29 -0
  73. package/dist/services/event_manager.js +75 -0
  74. package/dist/services/event_manager.js.map +1 -0
  75. package/dist/services/http_client.d.ts +66 -0
  76. package/dist/services/http_client.js +62 -0
  77. package/dist/services/http_client.js.map +1 -0
  78. package/{src/services/index.js → dist/services/index.d.ts} +1 -15
  79. package/dist/services/index.js +14 -0
  80. package/dist/services/index.js.map +1 -0
  81. package/{src/services/interface.js → dist/services/interface.d.ts} +1 -3
  82. package/dist/services/interface.js +6 -0
  83. package/dist/services/interface.js.map +1 -0
  84. package/{src/services/joi.js → dist/services/joi.d.ts} +2 -9
  85. package/dist/services/joi.js +11 -0
  86. package/dist/services/joi.js.map +1 -0
  87. package/dist/services/jwt_token.d.ts +24 -0
  88. package/dist/services/jwt_token.js +77 -0
  89. package/dist/services/jwt_token.js.map +1 -0
  90. package/dist/services/jwt_token_kong.d.ts +25 -0
  91. package/dist/services/jwt_token_kong.js +65 -0
  92. package/dist/services/jwt_token_kong.js.map +1 -0
  93. package/dist/services/logger.d.ts +30 -0
  94. package/dist/services/logger.js +126 -0
  95. package/dist/services/logger.js.map +1 -0
  96. package/dist/services/namespace.d.ts +55 -0
  97. package/dist/services/namespace.js +157 -0
  98. package/dist/services/namespace.js.map +1 -0
  99. package/dist/services/now.d.ts +14 -0
  100. package/dist/services/now.js +43 -0
  101. package/dist/services/now.js.map +1 -0
  102. package/dist/services/providers.d.ts +55 -0
  103. package/dist/services/providers.js +134 -0
  104. package/dist/services/providers.js.map +1 -0
  105. package/dist/services/redis.d.ts +18 -0
  106. package/dist/services/redis.js +53 -0
  107. package/dist/services/redis.js.map +1 -0
  108. package/dist/services/rest_client.d.ts +48 -0
  109. package/dist/services/rest_client.js +96 -0
  110. package/dist/services/rest_client.js.map +1 -0
  111. package/dist/swagger/index.d.ts +223 -0
  112. package/dist/swagger/index.js +564 -0
  113. package/dist/swagger/index.js.map +1 -0
  114. package/dist/types/express.d.ts +14 -0
  115. package/dist/types/vendor.d.ts +102 -0
  116. package/dist/utils/api_scaffold.d.ts +74 -0
  117. package/dist/utils/api_scaffold.js +220 -0
  118. package/dist/utils/api_scaffold.js.map +1 -0
  119. package/dist/utils/case_converter.d.ts +7 -0
  120. package/dist/utils/case_converter.js +29 -0
  121. package/dist/utils/case_converter.js.map +1 -0
  122. package/dist/utils/crc32.d.ts +2 -0
  123. package/dist/utils/crc32.js +43 -0
  124. package/dist/utils/crc32.js.map +1 -0
  125. package/dist/utils/cron.d.ts +27 -0
  126. package/dist/utils/cron.js +186 -0
  127. package/dist/utils/cron.js.map +1 -0
  128. package/dist/utils/datetime.d.ts +4 -0
  129. package/dist/utils/datetime.js +6 -0
  130. package/dist/utils/datetime.js.map +1 -0
  131. package/dist/utils/host.d.ts +18 -0
  132. package/dist/utils/host.js +33 -0
  133. package/dist/utils/host.js.map +1 -0
  134. package/{src/utils/index.js → dist/utils/index.d.ts} +2 -26
  135. package/dist/utils/index.js +12 -0
  136. package/dist/utils/index.js.map +1 -0
  137. package/dist/utils/pagination.d.ts +150 -0
  138. package/dist/utils/pagination.js +242 -0
  139. package/dist/utils/pagination.js.map +1 -0
  140. package/dist/utils/random.d.ts +3 -0
  141. package/dist/utils/random.js +18 -0
  142. package/dist/utils/random.js.map +1 -0
  143. package/dist/utils/request_client.d.ts +33 -0
  144. package/dist/utils/request_client.js +153 -0
  145. package/dist/utils/request_client.js.map +1 -0
  146. package/dist/utils/smart_query.d.ts +144 -0
  147. package/dist/utils/smart_query.js +310 -0
  148. package/dist/utils/smart_query.js.map +1 -0
  149. package/dist/utils/test.d.ts +14 -0
  150. package/dist/utils/test.js +37 -0
  151. package/dist/utils/test.js.map +1 -0
  152. package/dist/utils/wrapper.d.ts +3 -0
  153. package/dist/utils/wrapper.js +5 -0
  154. package/dist/utils/wrapper.js.map +1 -0
  155. package/package.json +24 -10
  156. package/index.js +0 -2
  157. package/src/commands/interface.js +0 -45
  158. package/src/commands/make_entity.js +0 -490
  159. package/src/commands/tramp.js +0 -34
  160. package/src/config/index.js +0 -95
  161. package/src/di.js +0 -96
  162. package/src/engine.js +0 -556
  163. package/src/entities/index.js +0 -272
  164. package/src/exceptions/index.js +0 -501
  165. package/src/index.js +0 -55
  166. package/src/middlewares/auth.js +0 -67
  167. package/src/middlewares/auth_kong.js +0 -28
  168. package/src/middlewares/debug.js +0 -88
  169. package/src/middlewares/providers.js +0 -73
  170. package/src/middlewares/session.js +0 -63
  171. package/src/middlewares/trace.js +0 -254
  172. package/src/middlewares/validator.js +0 -50
  173. package/src/middlewares/view_cache.js +0 -127
  174. package/src/services/cache.js +0 -223
  175. package/src/services/config.js +0 -115
  176. package/src/services/env.js +0 -28
  177. package/src/services/event_manager.js +0 -84
  178. package/src/services/http_client.js +0 -69
  179. package/src/services/jwt_token.js +0 -89
  180. package/src/services/jwt_token_kong.js +0 -75
  181. package/src/services/logger.js +0 -150
  182. package/src/services/namespace.js +0 -176
  183. package/src/services/now.js +0 -49
  184. package/src/services/providers.js +0 -158
  185. package/src/services/redis.js +0 -63
  186. package/src/services/rest_client.js +0 -112
  187. package/src/swagger/index.js +0 -665
  188. package/src/utils/api_scaffold.js +0 -240
  189. package/src/utils/case_converter.js +0 -33
  190. package/src/utils/crc32.js +0 -44
  191. package/src/utils/cron.js +0 -208
  192. package/src/utils/datetime.js +0 -13
  193. package/src/utils/host.js +0 -39
  194. package/src/utils/pagination.js +0 -260
  195. package/src/utils/random.js +0 -23
  196. package/src/utils/request_client.js +0 -179
  197. package/src/utils/smart_query.js +0 -352
  198. package/src/utils/test.js +0 -48
  199. package/src/utils/wrapper.js +0 -8
@@ -0,0 +1,564 @@
1
+ /*eslint new-cap: [1]*/
2
+ import fs, {} from 'fs';
3
+ import { createRequire, stripTypeScriptTypes } from 'module';
4
+ import { format } from 'util';
5
+ import assert from 'assert';
6
+ import merge from 'lodash/merge.js';
7
+ import * as doctrine from 'doctrine';
8
+ import * as acorn from 'acorn';
9
+ import * as yaml from 'js-yaml';
10
+ import Entitles from "../entities/index.js";
11
+ import { RuntimeException, StandardException } from "../exceptions/index.js";
12
+ const require = createRequire(import.meta.url);
13
+ export class AcornParsingException extends StandardException {
14
+ }
15
+ export class YamlParsingException extends StandardException {
16
+ annotation;
17
+ setAnnotation(annotation) {
18
+ this.annotation = annotation || {};
19
+ return this;
20
+ }
21
+ getAnnotation() {
22
+ return this.annotation || {};
23
+ }
24
+ toString() {
25
+ const { file, start, end, value } = this.getAnnotation();
26
+ return format('Yaml parsing error happened in %s Line[%s - %s]\n Yaml error: %s \nOriginal Yaml Text:', file, start, end,
27
+ // getPrevError() 为 unknown,这里只读取其 message 字段
28
+ this.getPrevError() ? this.getPrevError().message : '', value ? value.split('\n').map((v, i) => `${(i - 1).toString().padStart(5)} ${v}`) : []);
29
+ }
30
+ constructor(exceptionOrMsg) {
31
+ super(exceptionOrMsg);
32
+ this.annotation = {};
33
+ }
34
+ }
35
+ //Mapping sequelize data types to swagger data types
36
+ //Sequelize types: http://docs.sequelizejs.com/en/latest/api/datatypes/
37
+ //Swagger Data Types: http://swagger.io/specification/
38
+ export const MODEL_TO_FRAGMENT_TYPES_MAPPING = {
39
+ BIGINT: 'integer',
40
+ ENUM: 'string',
41
+ INTEGER: 'integer',
42
+ FLOAT: 'number',
43
+ DOUBLE: 'number',
44
+ DECIMAL: 'number',
45
+ BOOLEAN: 'boolean',
46
+ CHAR: 'string',
47
+ STRING: 'string',
48
+ TEXT: 'string',
49
+ REAL: 'string',
50
+ TIME: 'string',
51
+ DATE: 'string',
52
+ DATEONLY: 'string',
53
+ HSTORE: 'string',
54
+ JSON: 'string',
55
+ JSONB: 'string',
56
+ NOW: 'string',
57
+ BLOB: 'string',
58
+ UUID: 'string',
59
+ UUIDV1: 'string',
60
+ UUIDV4: 'string',
61
+ VIRTUAL: 'string'
62
+ };
63
+ // column.defaultValue 运行时可能为任意标量,parseInt/parseFloat 依赖 JS 的隐式转字符串
64
+ const modelDefaultValueHandlers = {
65
+ integer: v => parseInt(v, 10),
66
+ boolean: v => Boolean(parseInt(v, 10)),
67
+ number: v => parseFloat(v),
68
+ default: v => v
69
+ };
70
+ const FRAGMENT_TYPE_PATH = 'path';
71
+ const FRAGMENT_TYPE_DEFINITION = 'definition';
72
+ const FRAGMENT_TYPE_EXCEPTION = 'exception';
73
+ const FRAGMENT_TYPE_UNKNOWN = 'unknown';
74
+ export class Fragment {
75
+ getTypes() {
76
+ return [FRAGMENT_TYPE_PATH, FRAGMENT_TYPE_DEFINITION,
77
+ FRAGMENT_TYPE_EXCEPTION, FRAGMENT_TYPE_UNKNOWN];
78
+ }
79
+ isPath() {
80
+ return this.type === FRAGMENT_TYPE_PATH;
81
+ }
82
+ isDefinition() {
83
+ return this.type === FRAGMENT_TYPE_DEFINITION;
84
+ }
85
+ isUnknown() {
86
+ return this.type === FRAGMENT_TYPE_UNKNOWN;
87
+ }
88
+ isException() {
89
+ return this.type === FRAGMENT_TYPE_EXCEPTION;
90
+ }
91
+ setParentFragment(fragment) {
92
+ assert(fragment && fragment instanceof Fragment, 'Parent fragment must be instance of Fragment');
93
+ this.parent = fragment;
94
+ return this;
95
+ }
96
+ getParentFragment() {
97
+ return this.parent;
98
+ }
99
+ correctSwaggerPath(swaggerDoc = {}) {
100
+ return swaggerDoc;
101
+ }
102
+ toSwaggerDoc(exceptions = {}) {
103
+ if (this.isPath()) {
104
+ // path 片段的 value 形如 { '/path': { get: {...} } }
105
+ const pathValue = this.value;
106
+ const path = Object.keys(pathValue)[0];
107
+ const method = Object.keys(pathValue[path])[0];
108
+ return {
109
+ paths: {
110
+ [path]: {
111
+ [method]: this.correctSwaggerPath(pathValue[path][method])
112
+ }
113
+ }
114
+ };
115
+ }
116
+ if (this.isDefinition()) {
117
+ const definitionValue = this.value;
118
+ const key = Object.keys(definitionValue)[0];
119
+ return {
120
+ definitions: {
121
+ [key]: definitionValue[key]
122
+ }
123
+ };
124
+ }
125
+ if (this.isException()) {
126
+ if (!this.getParentFragment()) {
127
+ return {};
128
+ }
129
+ const key = this.value;
130
+ const exception = exceptions[key];
131
+ if (!exception) {
132
+ return {};
133
+ }
134
+ // 上方已断言 parent 存在
135
+ const parent = this.getParentFragment();
136
+ const parentValue = parent.value;
137
+ const path = Object.keys(parentValue)[0];
138
+ const method = Object.keys(parentValue[path])[0];
139
+ return {
140
+ definitions: {
141
+ [key]: Fragment.exceptionMapping(exception)
142
+ },
143
+ paths: {
144
+ [path]: {
145
+ [method]: {
146
+ responses: {
147
+ [exception.getStatusCode()]: {
148
+ description: this.description,
149
+ schema: {
150
+ $ref: `#/definitions/${key}`
151
+ }
152
+ }
153
+ }
154
+ }
155
+ }
156
+ }
157
+ };
158
+ }
159
+ return {};
160
+ }
161
+ static exceptionMapping(exception) {
162
+ return {
163
+ properties: {
164
+ code: {
165
+ type: 'integer',
166
+ format: 'int64'
167
+ },
168
+ message: {
169
+ type: 'string'
170
+ }
171
+ },
172
+ required: [
173
+ 'code',
174
+ 'message'
175
+ ],
176
+ example: {
177
+ code: exception.getCode(),
178
+ message: exception.message
179
+ }
180
+ };
181
+ }
182
+ static factory(jsdoc, annotation) {
183
+ const { title, description, type } = jsdoc;
184
+ if (title === 'throws') {
185
+ return new Fragment({
186
+ type: FRAGMENT_TYPE_EXCEPTION,
187
+ description: description,
188
+ // doctrine 的 type 字段为 unknown,这里只读取引用类型的 name;缺失时由 Fragment 构造器 assert 抛出
189
+ value: type ? type.name : FRAGMENT_TYPE_UNKNOWN,
190
+ file: annotation.file,
191
+ start: annotation.start,
192
+ end: annotation.end
193
+ });
194
+ }
195
+ let elementType = FRAGMENT_TYPE_UNKNOWN;
196
+ // yaml.load 返回 unknown;swagger 注解的 description 是一个 yaml 对象
197
+ const value = yaml.load(description);
198
+ const key = Object.keys(value)[0];
199
+ if (title === 'swagger') {
200
+ elementType = key.startsWith('/') ? FRAGMENT_TYPE_PATH : FRAGMENT_TYPE_DEFINITION;
201
+ }
202
+ return new Fragment({
203
+ type: elementType,
204
+ description: description,
205
+ value,
206
+ file: annotation.file,
207
+ start: annotation.start,
208
+ end: annotation.end
209
+ });
210
+ }
211
+ type;
212
+ description;
213
+ value;
214
+ file;
215
+ start;
216
+ end;
217
+ parent;
218
+ constructor({ type, description, value, file, start, end }) {
219
+ assert(type && description && value && file && start && end, 'Fragment require type && description && value && file && start && end');
220
+ assert(this.getTypes().includes(type), 'Fragment types not match input');
221
+ this.type = type;
222
+ this.description = description;
223
+ this.value = value;
224
+ this.file = file;
225
+ this.start = start;
226
+ this.end = end;
227
+ this.parent = null;
228
+ }
229
+ }
230
+ export class Annotation {
231
+ getFragments() {
232
+ if (this.fragments) {
233
+ return this.fragments;
234
+ }
235
+ //支持两种注解:
236
+ //1. 所有行首必定为 space*
237
+ //2. 所有行首必定不为 space*
238
+ const unwrap = this.value.startsWith('*\n *');
239
+ const { tags: jsDocs = [] } = doctrine.parse(this.value, { unwrap });
240
+ if (jsDocs.length < 1) {
241
+ return [];
242
+ }
243
+ const fragments = [];
244
+ jsDocs.filter(jsDoc => jsDoc.title
245
+ && (jsDoc.title === 'swagger' || jsDoc.title === 'throws')
246
+ && jsDoc.description)
247
+ .forEach((jsDoc) => {
248
+ try {
249
+ fragments.push(Fragment.factory(jsDoc, this));
250
+ }
251
+ catch (e) {
252
+ // catch 变量为 unknown;StandardException 构造器会自行校验入参类型
253
+ this.yamlErrors.push((new YamlParsingException(e)).setAnnotation(this));
254
+ }
255
+ });
256
+ fragments.forEach((fragment) => {
257
+ if (fragment.isException()) {
258
+ // 找不到 path 片段时由 setParentFragment 内的 assert 按原逻辑抛错
259
+ fragment.setParentFragment(fragments.filter(f => f.isPath())[0]);
260
+ }
261
+ });
262
+ this.fragments = fragments;
263
+ return fragments;
264
+ }
265
+ toString() {
266
+ return format('Annotation %s [%s - %s]: %s', this.file, this.start, this.end, this.value);
267
+ }
268
+ getYamlErrors() {
269
+ return this.yamlErrors;
270
+ }
271
+ value;
272
+ file;
273
+ start;
274
+ end;
275
+ yamlErrors;
276
+ fragments;
277
+ constructor({ type, //Block
278
+ value, //Long string
279
+ file, //String
280
+ start, end }) {
281
+ assert(type && type === 'Block', 'Annotation type must be Block');
282
+ assert(value && typeof value === 'string', 'Annotation value must be Block');
283
+ assert(file, 'Annotation must have file');
284
+ this.value = value;
285
+ this.file = file;
286
+ this.start = start;
287
+ this.end = end;
288
+ this.yamlErrors = [];
289
+ this.fragments = null;
290
+ }
291
+ }
292
+ export class AnnotationsContainer {
293
+ getFile() {
294
+ return this.file;
295
+ }
296
+ hasAnnotations() {
297
+ return this.annotations.length > 0;
298
+ }
299
+ getAnnotations() {
300
+ return this.annotations;
301
+ }
302
+ collectFragments() {
303
+ if (this.fragments.length > 0) {
304
+ return this.fragments;
305
+ }
306
+ for (const annotation of this.getAnnotations()) {
307
+ this.fragments = this.fragments.concat(annotation.getFragments());
308
+ }
309
+ return this.fragments;
310
+ }
311
+ collectYamlErrors() {
312
+ let errors = [];
313
+ for (const annotation of this.getAnnotations()) {
314
+ errors = errors.concat(annotation.getYamlErrors());
315
+ }
316
+ return errors;
317
+ }
318
+ file;
319
+ annotations;
320
+ fragments;
321
+ constructor(file, acornComments) {
322
+ assert(file && typeof file === 'string', 'Annotations require a file input');
323
+ assert(acornComments && Array.isArray(acornComments), `Annotations for ${file} require an array of Acorn comments input`);
324
+ this.file = file;
325
+ //Annotations MUST start with double stars
326
+ this.annotations = acornComments
327
+ .filter(v => v.type === 'Block' && v.value.startsWith('*\n'))
328
+ .map(c => new Annotation(Object.assign(c, { file })));
329
+ this.fragments = [];
330
+ }
331
+ }
332
+ /**
333
+ * A Swagger Json document generator
334
+ * Generate document from
335
+ * - JS source code annotations (Parser is Doctrine)
336
+ * - ORM entities (Based on Sequelize)
337
+ * - EvaEngine Exceptions
338
+ */
339
+ export class ExSwagger {
340
+ /**
341
+ * Get file path array by glob
342
+ */
343
+ static async scanFiles(path, options = {}) {
344
+ return fs.globSync(path, options);
345
+ }
346
+ /**
347
+ * Get annotations from comments
348
+ * An annotation MUST start with double stars
349
+ */
350
+ static async filesToAnnotationsContainers(files) {
351
+ const results = [];
352
+ for (const file of files) {
353
+ const comments = [];
354
+ const source = await fs.readFileSync(file, 'utf8');
355
+ // acorn 只支持 JS;TS 源文件先擦除类型语法(strip 模式保留注释,swagger 注解不受影响)
356
+ const code = /\.(ts|mts|cts)$/.test(file) ? stripTypeScriptTypes(source) : source;
357
+ try {
358
+ acorn.parse(code, {
359
+ ecmaVersion: 'latest',
360
+ sourceType: 'module',
361
+ allowImportExportEverywhere: true,
362
+ onComment: comments
363
+ });
364
+ }
365
+ catch (e) {
366
+ throw (new AcornParsingException(`Acorn parsing file ${file} failed`)).setPrevError(e);
367
+ }
368
+ results.push(new AnnotationsContainer(file, comments));
369
+ }
370
+ return results;
371
+ }
372
+ static modelToSwaggerDefinition(model) {
373
+ const definition = {
374
+ type: 'object',
375
+ properties: {}
376
+ };
377
+ const requires = [];
378
+ Object.keys(model).forEach((columnName) => {
379
+ const column = model[columnName];
380
+ const swaggerType = MODEL_TO_FRAGMENT_TYPES_MAPPING[column.type.key];
381
+ const property = {
382
+ type: swaggerType,
383
+ description: column.comment
384
+ };
385
+ if (column.defaultValue) {
386
+ const defaultValueHandler = modelDefaultValueHandlers[swaggerType] ?
387
+ modelDefaultValueHandlers[swaggerType] : modelDefaultValueHandlers.default;
388
+ property.default = defaultValueHandler(column.defaultValue);
389
+ }
390
+ if (column.allowNull === false) {
391
+ requires.push(columnName);
392
+ }
393
+ definition.properties[columnName] = property;
394
+ });
395
+ definition.required = requires;
396
+ return definition;
397
+ }
398
+ static modelsToSwaggerDefinitions(models, blacklist = []) {
399
+ const definitions = new Map();
400
+ Object.keys(models).forEach((modelName) => {
401
+ if (blacklist.includes(modelName)) {
402
+ return true;
403
+ }
404
+ const model = models[modelName];
405
+ // attributes 与 rawAttributes 均缺失时保持原行为:由 modelToSwaggerDefinition 的 Object.keys 抛出 TypeError
406
+ const attributes = (model.attributes || model.rawAttributes);
407
+ const definition = ExSwagger.modelToSwaggerDefinition(attributes);
408
+ definitions.set(modelName, definition);
409
+ return true;
410
+ });
411
+ return definitions;
412
+ }
413
+ static async scanExceptions(path, exceptionInterface = Error) {
414
+ const exceptions = {};
415
+ const files = await ExSwagger.scanFiles(path);
416
+ if (files.length < 1) {
417
+ return exceptions;
418
+ }
419
+ for (const file of files) {
420
+ // require(esm) 与 import 共享模块实例,类身份一致;导出内容按 unknown 处理后窄化
421
+ const exceptionsInFile = require(file);
422
+ Object.keys(exceptionsInFile).forEach((exceptionName) => {
423
+ const exceptionClass = exceptionsInFile[exceptionName];
424
+ const exception = new exceptionClass(exceptionName); //eslint-disable-line new-cap
425
+ if (exception instanceof exceptionInterface) {
426
+ exceptions[exceptionName] = exception;
427
+ }
428
+ });
429
+ }
430
+ return exceptions;
431
+ }
432
+ async exportJson(dist = this.swaggerDocsPath) {
433
+ this.logger.debug('Start export swagger docs by meta %j', this.getStates());
434
+ const fileGroups = await Promise
435
+ .all(this.sourceFilesPath.map(path => ExSwagger.scanFiles(path)));
436
+ let files = [];
437
+ fileGroups.forEach((fileGroup) => {
438
+ files = files.concat(fileGroup);
439
+ });
440
+ // 声明文件是构建产物,不是注解来源(发布态 glob 同时命中 .js 与 .d.ts)
441
+ files = files.filter((file) => !file.endsWith('.d.ts'));
442
+ if (!files || files.length < 1) {
443
+ throw new RuntimeException('No swagger source files found');
444
+ }
445
+ this.logger.debug('Scanner will scan %s files under %j:', files.length, this.sourceFilesPath);
446
+ const annotationsContainers = await ExSwagger.filesToAnnotationsContainers(files);
447
+ let fragments = [];
448
+ annotationsContainers.forEach((annotationsContainer) => {
449
+ if (!annotationsContainer.hasAnnotations()) {
450
+ return false;
451
+ }
452
+ const annotationFragments = annotationsContainer.collectFragments();
453
+ fragments = fragments.concat(annotationFragments);
454
+ this.logger.debug('Scanner found %s annotations and collected %s fragments in file %s', annotationsContainer.getAnnotations().length.toString().padStart(3), annotationFragments.length.toString().padStart(3), annotationsContainer.getFile());
455
+ const yamlErrors = annotationsContainer.collectYamlErrors();
456
+ yamlErrors.forEach(yamlError => this.logger.error(yamlError));
457
+ return true;
458
+ });
459
+ this.logger.debug('Scanner collected %s fragments in total', fragments.length);
460
+ const template = this.swaggerDocsTemplate;
461
+ const exceptions = {};
462
+ for (const exceptionPath of this.exceptionPaths) {
463
+ this.logger.debug('Search exception in %s', exceptionPath);
464
+ const exceptionsInFile = await ExSwagger.scanExceptions(exceptionPath, this.exceptionInterface);
465
+ Object.assign(exceptions, exceptionsInFile);
466
+ this.logger.debug('Scanner found %s exceptions: %j', Object.keys(exceptions).length, Object.keys(exceptions));
467
+ }
468
+ const modelDefinitions = this.models ?
469
+ ExSwagger.modelsToSwaggerDefinitions(this.models, this.modelBlacklist) : new Map();
470
+ const swaggerDocs = ExSwagger.mergeAll(template, fragments, exceptions, modelDefinitions);
471
+ this.logger.debug('Export to %s', dist);
472
+ await fs.writeFileSync(dist, JSON.stringify(swaggerDocs));
473
+ return swaggerDocs;
474
+ }
475
+ static mergeAll(_template, fragments, exceptions, modelDefinitions) {
476
+ const template = _template;
477
+ fragments.forEach(fragment => merge(template, fragment.toSwaggerDoc(exceptions)));
478
+ if (modelDefinitions) {
479
+ modelDefinitions.forEach((definition, modelName) => {
480
+ // definitions 由片段 merge 进模板后存在;类型上对模板内部结构做局部收窄
481
+ template.definitions[modelName] = definition;
482
+ });
483
+ }
484
+ return template;
485
+ }
486
+ getStates() {
487
+ return {
488
+ swaggerTemplate: this.swaggerDocsTemplate,
489
+ modelBlacklist: this.modelBlacklist,
490
+ sourceFilesPath: this.sourceFilesPath,
491
+ exceptionPaths: this.exceptionPaths,
492
+ compileDistPath: this.compileDistPath,
493
+ swaggerUIPath: this.swaggerUIPath,
494
+ swaggerDocsPath: this.swaggerDocsPath
495
+ };
496
+ }
497
+ getSwaggerUIPath() {
498
+ return this.swaggerUIPath;
499
+ }
500
+ async getSwaggerIndexHtml() {
501
+ const uiPath = this.getSwaggerUIPath();
502
+ const content = await fs.readFileSync(`${uiPath}/index.html`);
503
+ return content.toString().replace('https://petstore.swagger.io/v2/swagger/index.json', this.swaggerDocsPath.replace(this.compileDistPath, ''));
504
+ }
505
+ getCompileDistPath() {
506
+ return this.compileDistPath;
507
+ }
508
+ logger;
509
+ swaggerDocsTemplate;
510
+ models;
511
+ modelBlacklist;
512
+ sourceFilesPath;
513
+ exceptionPaths;
514
+ exceptionInterface;
515
+ compileDistPath;
516
+ swaggerUIPath;
517
+ swaggerDocsPath;
518
+ constructor({ sourceRootPath, compileDistPath, models, modelBlacklist = [], swaggerDocsTemplate, logger, swaggerUIPath, swaggerDocsPath = `${compileDistPath}/docs.json`, sourceFilesPath = `${sourceRootPath}/**/*.js`, exceptionInterface = StandardException,
519
+ // 注解扫描在解析前对 TS 文件做类型擦除;{js,ts} 同时命中源码态(src/utils/**/*.ts)与发布态(dist/utils/**/*.js)
520
+ extraSourcePaths = [
521
+ `${import.meta.dirname}/../utils/**/*.{js,ts}`
522
+ ], exceptionPaths }) {
523
+ this.logger = logger ||
524
+ {
525
+ debug: () => {
526
+ },
527
+ warn: () => {
528
+ },
529
+ error: () => {
530
+ }
531
+ };
532
+ if (!swaggerDocsTemplate) {
533
+ throw new RuntimeException('No swagger docs template input');
534
+ }
535
+ this.swaggerDocsTemplate = swaggerDocsTemplate;
536
+ if (models && !(models instanceof Entitles)) {
537
+ throw new RuntimeException('Input models must instance of engine.Entities');
538
+ }
539
+ this.models = models ? models.getAll() : null;
540
+ this.modelBlacklist = modelBlacklist;
541
+ this.sourceFilesPath = Array.isArray(sourceFilesPath)
542
+ ? extraSourcePaths.concat(sourceFilesPath) :
543
+ extraSourcePaths.concat([sourceFilesPath]);
544
+ // 原默认值指向 exceptions 目录并依赖 require 的目录解析;TS 源码态文件是 index.ts,须显式指到文件
545
+ this.exceptionPaths = exceptionPaths ?
546
+ [`${import.meta.dirname}/../exceptions/index.{js,ts}`].concat(exceptionPaths) : [`${import.meta.dirname}/../exceptions/index.{js,ts}`];
547
+ this.exceptionInterface = exceptionInterface;
548
+ this.compileDistPath = compileDistPath;
549
+ if (swaggerUIPath) {
550
+ this.swaggerUIPath = swaggerUIPath;
551
+ }
552
+ else {
553
+ this.swaggerUIPath = `${import.meta.dirname}/../../node_modules/swagger-ui-dist`;
554
+ try {
555
+ fs.accessSync(this.swaggerUIPath, fs.constants.F_OK);
556
+ }
557
+ catch {
558
+ this.swaggerUIPath = `${import.meta.dirname}/../../../swagger-ui-dist`; //For NPM v3.x
559
+ }
560
+ }
561
+ this.swaggerDocsPath = swaggerDocsPath;
562
+ }
563
+ }
564
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/swagger/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Runtime request properties attached by EvaEngine middlewares that are not part
3
+ * of the express Request contract:
4
+ * - auth: set by middlewares/auth and middlewares/auth_kong, read by view_cache
5
+ * - uid: custom per-user cache-key rule fallback read by middlewares/view_cache
6
+ * Values are produced by consumer login flows or configs, so the payload shape
7
+ * is intentionally kept open.
8
+ */
9
+ declare namespace Express {
10
+ interface Request {
11
+ auth?: Record<string, unknown>;
12
+ uid?: unknown;
13
+ }
14
+ }