evaengine 1.0.14 → 3.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 (202) hide show
  1. package/README.md +15 -7
  2. package/bin/engine +2 -31
  3. package/dist/bin.d.ts +1 -0
  4. package/dist/bin.js +32 -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 +131 -0
  22. package/dist/di.js +197 -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 +466 -0
  32. package/dist/exceptions/index.js.map +1 -0
  33. package/dist/index.d.ts +41 -0
  34. package/dist/index.js +43 -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 +5 -0
  52. package/dist/middlewares/session.js +46 -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 +68 -0
  64. package/dist/services/cache.js +206 -0
  65. package/dist/services/cache.js.map +1 -0
  66. package/dist/services/config.d.ts +17 -0
  67. package/dist/services/config.js +67 -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 +30 -0
  73. package/dist/services/event_manager.js +74 -0
  74. package/dist/services/event_manager.js.map +1 -0
  75. package/dist/services/http_client.d.ts +67 -0
  76. package/dist/services/http_client.js +61 -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 +25 -0
  88. package/dist/services/jwt_token.js +76 -0
  89. package/dist/services/jwt_token.js.map +1 -0
  90. package/dist/services/jwt_token_kong.d.ts +26 -0
  91. package/dist/services/jwt_token_kong.js +64 -0
  92. package/dist/services/jwt_token_kong.js.map +1 -0
  93. package/dist/services/logger.d.ts +31 -0
  94. package/dist/services/logger.js +125 -0
  95. package/dist/services/logger.js.map +1 -0
  96. package/dist/services/namespace.d.ts +62 -0
  97. package/dist/services/namespace.js +171 -0
  98. package/dist/services/namespace.js.map +1 -0
  99. package/dist/services/now.d.ts +15 -0
  100. package/dist/services/now.js +42 -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 +19 -0
  106. package/dist/services/redis.js +52 -0
  107. package/dist/services/redis.js.map +1 -0
  108. package/dist/services/rest_client.d.ts +49 -0
  109. package/dist/services/rest_client.js +95 -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 +30 -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/jwt.d.ts +16 -0
  138. package/dist/utils/jwt.js +93 -0
  139. package/dist/utils/jwt.js.map +1 -0
  140. package/dist/utils/pagination.d.ts +150 -0
  141. package/dist/utils/pagination.js +242 -0
  142. package/dist/utils/pagination.js.map +1 -0
  143. package/dist/utils/random.d.ts +3 -0
  144. package/dist/utils/random.js +18 -0
  145. package/dist/utils/random.js.map +1 -0
  146. package/dist/utils/request_client.d.ts +33 -0
  147. package/dist/utils/request_client.js +153 -0
  148. package/dist/utils/request_client.js.map +1 -0
  149. package/dist/utils/smart_query.d.ts +144 -0
  150. package/dist/utils/smart_query.js +310 -0
  151. package/dist/utils/smart_query.js.map +1 -0
  152. package/dist/utils/test.d.ts +14 -0
  153. package/dist/utils/test.js +37 -0
  154. package/dist/utils/test.js.map +1 -0
  155. package/dist/utils/wrapper.d.ts +3 -0
  156. package/dist/utils/wrapper.js +5 -0
  157. package/dist/utils/wrapper.js.map +1 -0
  158. package/package.json +22 -15
  159. package/index.js +0 -2
  160. package/src/commands/interface.js +0 -45
  161. package/src/commands/make_entity.js +0 -490
  162. package/src/commands/tramp.js +0 -34
  163. package/src/config/index.js +0 -95
  164. package/src/di.js +0 -96
  165. package/src/engine.js +0 -556
  166. package/src/entities/index.js +0 -272
  167. package/src/exceptions/index.js +0 -501
  168. package/src/index.js +0 -55
  169. package/src/middlewares/auth.js +0 -67
  170. package/src/middlewares/auth_kong.js +0 -28
  171. package/src/middlewares/debug.js +0 -88
  172. package/src/middlewares/providers.js +0 -73
  173. package/src/middlewares/session.js +0 -63
  174. package/src/middlewares/trace.js +0 -254
  175. package/src/middlewares/validator.js +0 -50
  176. package/src/middlewares/view_cache.js +0 -127
  177. package/src/services/cache.js +0 -223
  178. package/src/services/config.js +0 -115
  179. package/src/services/env.js +0 -28
  180. package/src/services/event_manager.js +0 -84
  181. package/src/services/http_client.js +0 -69
  182. package/src/services/jwt_token.js +0 -89
  183. package/src/services/jwt_token_kong.js +0 -75
  184. package/src/services/logger.js +0 -150
  185. package/src/services/namespace.js +0 -176
  186. package/src/services/now.js +0 -49
  187. package/src/services/providers.js +0 -158
  188. package/src/services/redis.js +0 -63
  189. package/src/services/rest_client.js +0 -112
  190. package/src/swagger/index.js +0 -665
  191. package/src/utils/api_scaffold.js +0 -240
  192. package/src/utils/case_converter.js +0 -33
  193. package/src/utils/crc32.js +0 -44
  194. package/src/utils/cron.js +0 -208
  195. package/src/utils/datetime.js +0 -13
  196. package/src/utils/host.js +0 -39
  197. package/src/utils/pagination.js +0 -260
  198. package/src/utils/random.js +0 -23
  199. package/src/utils/request_client.js +0 -179
  200. package/src/utils/smart_query.js +0 -352
  201. package/src/utils/test.js +0 -48
  202. package/src/utils/wrapper.js +0 -8
@@ -0,0 +1,85 @@
1
+ import express from 'express';
2
+ import http from 'http';
3
+ import https from 'https';
4
+ import yargs from 'yargs/yargs';
5
+ import DI from './di.js';
6
+ import type { Express, Router, ErrorRequestHandler } from 'express';
7
+ import type Command from './commands/interface.js';
8
+ import type { EngineLike, EngineMeta } from './di.js';
9
+ import type { ServiceProvider } from './services/providers.js';
10
+ import type Config from './services/config.js';
11
+ import type Logger from './services/logger.js';
12
+ import type Namespace from './services/namespace.js';
13
+ export declare const MODES: {
14
+ WEB: string;
15
+ CLI: string;
16
+ };
17
+ export { DI, express, yargs };
18
+ type YargsArgv = {
19
+ $0: string;
20
+ [key: string]: unknown;
21
+ };
22
+ type CommandClass = typeof Command;
23
+ type CommandModule = Record<string, CommandClass>;
24
+ export default class EvaEngine {
25
+ server: http.Server | https.Server | null;
26
+ commands: CommandModule;
27
+ command: Command | null;
28
+ commandName: string | null;
29
+ port: number | string | boolean;
30
+ defaultErrorHandler: ErrorRequestHandler | null;
31
+ serverErrorHandler: ((error: NodeJS.ErrnoException) => void) | null;
32
+ uncaughtExceptionHandler: ((error: Error) => void) | null;
33
+ crontabJobHandlers: Array<{
34
+ clear(): unknown;
35
+ } | NodeJS.Timeout>;
36
+ meta: EngineMeta;
37
+ logger: Logger;
38
+ config: Config;
39
+ namespace: Namespace;
40
+ constructor({ projectRoot, configPath, sourceRoot, config, logger, namespace, port }: {
41
+ projectRoot: string;
42
+ configPath?: string;
43
+ sourceRoot?: string;
44
+ config?: Config;
45
+ logger?: Logger;
46
+ namespace?: Namespace;
47
+ port?: number | string;
48
+ }, mode?: string);
49
+ getMeta(): EngineMeta;
50
+ getDI(): typeof DI;
51
+ static getApp(): Express;
52
+ static createRouter(): Router;
53
+ getCLI(commandNameInput?: string): YargsArgv;
54
+ static setBaseServiceProviders(providers: Array<new (engine: EngineLike) => ServiceProvider>): void;
55
+ static getBaseServiceProviders(): Array<new (engine: EngineLike) => ServiceProvider>;
56
+ static getServiceProvidersForWeb(): Array<new (engine: EngineLike) => ServiceProvider>;
57
+ static setServiceProvidersForWeb(providers: Array<new (engine: EngineLike) => ServiceProvider>): void;
58
+ static getMiddlewareProviders(): Array<new (engine: EngineLike) => ServiceProvider>;
59
+ static setMiddlewareProviders(providers: Array<new (engine: EngineLike) => ServiceProvider>): void;
60
+ static getServiceProvidersForCLI(): Array<new (engine: EngineLike) => ServiceProvider>;
61
+ static setServiceProvidersForCLI(providers: Array<new (engine: EngineLike) => ServiceProvider>): void;
62
+ registerServiceProviders(providers?: Array<new (engine: EngineLike) => ServiceProvider>): void;
63
+ registerService(ProviderClass: new (engine: EngineLike) => ServiceProvider): void;
64
+ registerCommands(commands: CommandModule | CommandModule[] | CommandModule[][]): this;
65
+ getCommand(): Command | null;
66
+ getCommands(): CommandModule;
67
+ clearCommands(): void;
68
+ clearCrontabs(): void;
69
+ getCommandName(): string | null;
70
+ setDefaultErrorHandler(handler: ErrorRequestHandler): this;
71
+ getDefaultErrorHandler(): ErrorRequestHandler;
72
+ setUncaughtExceptionHandler(handler: (error: Error) => void): this;
73
+ getUncaughtExceptionHandler(): (error: Error) => void;
74
+ setServerErrorHandler(handler: (error: NodeJS.ErrnoException) => void): this;
75
+ getServerErrorHandler(): (error: NodeJS.ErrnoException) => void;
76
+ bootstrap(): this;
77
+ use: Express['use'];
78
+ run(port?: number | string): this;
79
+ runHttps(port?: number | string, options?: https.ServerOptions): this;
80
+ getServer(): http.Server | https.Server | null;
81
+ static getVersion(): string;
82
+ runCLI(inputCommandName?: string): Promise<void>;
83
+ runCrontab(sequence: string, commandString: string, useSeconds?: boolean): void;
84
+ runCommand(commandString: string): Promise<unknown>;
85
+ }
package/dist/engine.js ADDED
@@ -0,0 +1,404 @@
1
+ import express from 'express';
2
+ import http from 'http';
3
+ import https from 'https';
4
+ import path from 'path';
5
+ import yargs from 'yargs/yargs';
6
+ import moment from 'moment-timezone';
7
+ import packageJson from '../package.json' with { type: 'json' };
8
+ import DI from "./di.js";
9
+ import * as ServiceProviders from "./services/providers.js";
10
+ import * as MiddlewareProviders from "./middlewares/providers.js";
11
+ import { StandardException, RuntimeException } from "./exceptions/index.js";
12
+ import { parseCron, setCronInterval } from "./utils/cron.js";
13
+ moment.tz.setDefault(process.env.TZ ? process.env.TZ : 'Asia/Shanghai');
14
+ export const MODES = {
15
+ WEB: 'web',
16
+ CLI: 'cli'
17
+ };
18
+ export { DI, express, yargs };
19
+ let app = null;
20
+ let baseServiceProviders = [
21
+ ServiceProviders.EnvProvider,
22
+ ServiceProviders.ConfigProvider,
23
+ ServiceProviders.LoggerProvider,
24
+ ServiceProviders.NamespaceProvider,
25
+ ServiceProviders.NowProvider,
26
+ ServiceProviders.EventManagerProvider
27
+ ];
28
+ let serviceProvidersForWeb = [
29
+ ServiceProviders.RedisProvider,
30
+ ServiceProviders.CacheProvider,
31
+ ServiceProviders.HttpClientProvider,
32
+ ServiceProviders.RestClientProvider,
33
+ ServiceProviders.ValidatorBaseProvider,
34
+ ServiceProviders.JsonWebTokenProvider
35
+ ];
36
+ let middlewareProviders = [
37
+ MiddlewareProviders.SessionMiddlewareProvider,
38
+ MiddlewareProviders.AuthMiddlewareProvider,
39
+ MiddlewareProviders.DebugMiddlewareProvider,
40
+ MiddlewareProviders.ViewCacheMiddlewareProvider,
41
+ MiddlewareProviders.ValidatorMiddlewareProvider,
42
+ MiddlewareProviders.TraceMiddlewareProvider
43
+ ];
44
+ let serviceProvidersForCLI = [
45
+ ServiceProviders.CacheProvider,
46
+ ServiceProviders.HttpClientProvider,
47
+ ServiceProviders.RestClientProvider,
48
+ ServiceProviders.RedisProvider
49
+ ];
50
+ export default class EvaEngine {
51
+ server;
52
+ commands;
53
+ command;
54
+ commandName;
55
+ port;
56
+ defaultErrorHandler;
57
+ serverErrorHandler;
58
+ uncaughtExceptionHandler;
59
+ crontabJobHandlers;
60
+ meta;
61
+ logger;
62
+ config;
63
+ namespace;
64
+ constructor({ projectRoot, configPath, sourceRoot, config, logger, namespace, port = 3000 }, mode = MODES.WEB) {
65
+ this.server = null;
66
+ this.commands = {};
67
+ this.command = null;
68
+ this.commandName = null;
69
+ this.port = ((val) => {
70
+ const rawPort = parseInt(String(val), 10);
71
+ if (Number.isNaN(rawPort)) {
72
+ return val;
73
+ }
74
+ if (rawPort >= 0) {
75
+ return rawPort;
76
+ }
77
+ return false;
78
+ })(port);
79
+ this.defaultErrorHandler = null;
80
+ this.serverErrorHandler = null;
81
+ this.uncaughtExceptionHandler = null;
82
+ this.crontabJobHandlers = [];
83
+ this.meta = {
84
+ mode,
85
+ port: this.port,
86
+ projectRoot: path.normalize(projectRoot),
87
+ configPath: path.normalize(configPath || `${projectRoot}/config`),
88
+ sourceRoot: path.normalize(sourceRoot || `${projectRoot}/src`)
89
+ };
90
+ this.registerServiceProviders(EvaEngine.getBaseServiceProviders());
91
+ this.logger = logger || DI.get('logger');
92
+ this.config = config || DI.get('config');
93
+ this.namespace = namespace || DI.get('namespace');
94
+ this.logger.info('Engine started, Meta: %j', this.meta);
95
+ this.logger.debug('Engine config files loaded: %j', this.config.getMergedFiles());
96
+ }
97
+ getMeta() {
98
+ return this.meta;
99
+ }
100
+ getDI() {
101
+ return DI;
102
+ }
103
+ static getApp() {
104
+ if (app) {
105
+ return app;
106
+ }
107
+ app = express();
108
+ return app;
109
+ }
110
+ static createRouter() {
111
+ return express.Router();
112
+ }
113
+ getCLI(commandNameInput) {
114
+ if (Object.keys(this.commands).length < 1) {
115
+ throw new RuntimeException('No command registered yet');
116
+ }
117
+ this.registerServiceProviders(EvaEngine.getServiceProvidersForCLI());
118
+ this.logger.debug('Bound services %j', Object.keys(DI.getBound()));
119
+ const [, , commandNameFromArgv] = process.argv;
120
+ const commandName = commandNameInput || commandNameFromArgv;
121
+ if (!commandName) {
122
+ return yargs(process.argv.slice(2)).argv;
123
+ }
124
+ this.commandName = commandName;
125
+ if (!this.commands[commandName]) {
126
+ // StandardException takes a single argument and silently drops the rest,
127
+ // so the legacy format-string call shape is kept as-is at runtime.
128
+ // @ts-expect-error RuntimeException declares only one constructor argument
129
+ throw new RuntimeException('Command %s not registered.', commandName);
130
+ }
131
+ const command = this.commands[commandName];
132
+ if (!{}.hasOwnProperty.call(command, 'getSpec')
133
+ || !{}.hasOwnProperty.call(command, 'getDescription')) {
134
+ throw new RuntimeException('Command require getSpec and getDescription static method');
135
+ }
136
+ const { argv } = yargs(process.argv.slice(2))
137
+ .command(commandName, command.getDescription(), Object.assign({
138
+ verbose: {
139
+ alias: 'v',
140
+ count: true
141
+ },
142
+ help: {
143
+ alias: '?'
144
+ }
145
+ }, command.getSpec()))
146
+ .help()
147
+ .count('verbose');
148
+ const { verbose } = argv;
149
+ const levels = ['info', 'verbose', 'debug', 'debug'];
150
+ const level = levels[verbose] ? levels[verbose] : 'info';
151
+ for (const [, transport = {}] of Object.entries(this.logger.getInstance().transports)) {
152
+ transport.level = level;
153
+ }
154
+ return argv;
155
+ }
156
+ static setBaseServiceProviders(providers) {
157
+ baseServiceProviders = providers;
158
+ }
159
+ static getBaseServiceProviders() {
160
+ return baseServiceProviders;
161
+ }
162
+ static getServiceProvidersForWeb() {
163
+ return serviceProvidersForWeb;
164
+ }
165
+ static setServiceProvidersForWeb(providers) {
166
+ serviceProvidersForWeb = providers;
167
+ }
168
+ static getMiddlewareProviders() {
169
+ return middlewareProviders;
170
+ }
171
+ static setMiddlewareProviders(providers) {
172
+ middlewareProviders = providers;
173
+ }
174
+ static getServiceProvidersForCLI() {
175
+ return serviceProvidersForCLI;
176
+ }
177
+ static setServiceProvidersForCLI(providers) {
178
+ serviceProvidersForCLI = providers;
179
+ }
180
+ registerServiceProviders(providers = []) {
181
+ return DI.registerServiceProviders(providers, this);
182
+ }
183
+ registerService(ProviderClass) {
184
+ return DI.registerService(ProviderClass, this);
185
+ }
186
+ registerCommands(commands) {
187
+ //TODO: validate command
188
+ const registerCommandClass = (commandClasses) => {
189
+ Object.keys(commandClasses).forEach((commandClassName) => {
190
+ const commandClass = commandClasses[commandClassName];
191
+ this.commands[commandClass.getName()] = commandClass;
192
+ });
193
+ };
194
+ if (Array.isArray(commands)) {
195
+ if (Array.isArray(commands[0])) {
196
+ commands.forEach(commandsPerFile => commandsPerFile.forEach(registerCommandClass));
197
+ }
198
+ else {
199
+ commands.forEach(registerCommandClass);
200
+ }
201
+ }
202
+ else {
203
+ registerCommandClass(commands);
204
+ }
205
+ this.logger.debug('Registered commands %j', Object.keys(this.commands));
206
+ return this;
207
+ }
208
+ getCommand() {
209
+ return this.command;
210
+ }
211
+ getCommands() {
212
+ return this.commands;
213
+ }
214
+ clearCommands() {
215
+ this.commands = {};
216
+ }
217
+ clearCrontabs() {
218
+ this.crontabJobHandlers.forEach((handler) => {
219
+ if (handler && typeof handler.clear === 'function') {
220
+ handler.clear();
221
+ }
222
+ else {
223
+ clearInterval(handler);
224
+ }
225
+ });
226
+ this.crontabJobHandlers = [];
227
+ }
228
+ getCommandName() {
229
+ return this.commandName;
230
+ }
231
+ setDefaultErrorHandler(handler) {
232
+ this.defaultErrorHandler = handler;
233
+ return this;
234
+ }
235
+ getDefaultErrorHandler() {
236
+ const env = DI.get('env');
237
+ return this.defaultErrorHandler ||
238
+ ((err, req, res, next) => {
239
+ let exception = err;
240
+ if (!(err instanceof Error)) {
241
+ this.logger.error('%s %s | %o', req.method, req.originalUrl || req.url, exception);
242
+ exception = (new RuntimeException('Unknown error')).setPrevError(err);
243
+ }
244
+ if (!(exception instanceof StandardException)) {
245
+ exception = new RuntimeException(err);
246
+ }
247
+ if (exception instanceof RuntimeException) {
248
+ //TODO: report to sentry
249
+ //TODO: with req & res
250
+ this.logger.error('%s %s | %o', req.method, req.originalUrl || req.url, exception);
251
+ }
252
+ else {
253
+ this.logger.warn('%s %s | %o', req.method, req.originalUrl || req.url, exception.getImportance() > 0 ? exception : exception.message);
254
+ }
255
+ return res
256
+ .status(exception.getStatusCode())
257
+ .json(Object.assign(exception.toJSON(), env.isDevelopment()
258
+ ? {} : {
259
+ prevError: {},
260
+ filename: '',
261
+ stack: [],
262
+ fullStack: []
263
+ }));
264
+ });
265
+ }
266
+ setUncaughtExceptionHandler(handler) {
267
+ this.uncaughtExceptionHandler = handler;
268
+ return this;
269
+ }
270
+ getUncaughtExceptionHandler() {
271
+ return this.uncaughtExceptionHandler ||
272
+ ((err) => {
273
+ this.logger.error(err);
274
+ try {
275
+ const killTimer = setTimeout(() => {
276
+ process.exit(1);
277
+ }, 30000);
278
+ killTimer.unref();
279
+ this.server.close();
280
+ }
281
+ catch (e) {
282
+ this.logger.error('Error when exit %s', e.stack);
283
+ }
284
+ });
285
+ }
286
+ setServerErrorHandler(handler) {
287
+ this.serverErrorHandler = handler;
288
+ return this;
289
+ }
290
+ getServerErrorHandler() {
291
+ return this.serverErrorHandler ||
292
+ ((error) => {
293
+ this.logger.error(error);
294
+ if (error.syscall !== 'listen') {
295
+ throw error;
296
+ }
297
+ const { port } = this;
298
+ const bind = typeof port === 'string'
299
+ ? `Pipe ${port}`
300
+ : `Port ${port}`;
301
+ // handle specific listen errors with friendly messages
302
+ switch (error.code) {
303
+ case 'EACCES':
304
+ this.logger.error('%s requires elevated privileges', bind);
305
+ process.exit(1);
306
+ break;
307
+ case 'EADDRINUSE':
308
+ this.logger.error('%s is already in use', bind);
309
+ process.exit(1);
310
+ break;
311
+ default:
312
+ throw error;
313
+ }
314
+ });
315
+ }
316
+ bootstrap() {
317
+ this.registerServiceProviders(EvaEngine.getServiceProvidersForWeb());
318
+ this.registerServiceProviders(EvaEngine.getMiddlewareProviders());
319
+ this.logger.info('Engine bootstrapped under env %s', DI.get('env').get());
320
+ this.logger.debug('Bound services %j', Object.keys(DI.getBound()));
321
+ return this;
322
+ }
323
+ //声明为 Express.use 的完整契约,保留路径/处理器组合的重载与回调参数推导;实现只做转发
324
+ use = (...args) => EvaEngine.getApp().use(...args);
325
+ run(port) {
326
+ process.on('uncaughtException', this.getUncaughtExceptionHandler());
327
+ EvaEngine.getApp().set('port', port || this.port);
328
+ EvaEngine.getApp().use(this.getDefaultErrorHandler());
329
+ this.server = http.createServer(EvaEngine.getApp());
330
+ this.server.listen(port || this.port);
331
+ this.server.on('error', this.getServerErrorHandler());
332
+ this.logger.info('Engine running http server by listening on %s', this.port);
333
+ return this;
334
+ }
335
+ runHttps(port, options = {}) {
336
+ process.on('uncaughtException', this.getUncaughtExceptionHandler());
337
+ EvaEngine.getApp().set('port', port || this.port);
338
+ EvaEngine.getApp().use(this.getDefaultErrorHandler());
339
+ this.server = https.createServer(options, EvaEngine.getApp());
340
+ this.server.listen(port || this.port);
341
+ this.server.on('error', this.getServerErrorHandler());
342
+ this.logger.info('Engine running http server by listening on %s', this.port);
343
+ return this;
344
+ }
345
+ getServer() {
346
+ return this.server;
347
+ }
348
+ static getVersion() {
349
+ return packageJson.version;
350
+ }
351
+ async runCLI(inputCommandName) {
352
+ const argv = this.getCLI(inputCommandName);
353
+ const commandName = this.getCommandName();
354
+ if (!commandName) {
355
+ this.logger.info('Available commands:');
356
+ Object.entries(this.commands).forEach(([name, commandClass]) => {
357
+ this.logger.info(`- ${(`${name} `).padEnd(30, '-')} ${commandClass.getDescription()}`);
358
+ });
359
+ return;
360
+ }
361
+ this.logger.debug('Start run command %s', commandName);
362
+ this.logger.debug('Received arguments %j', argv);
363
+ const CommandClass = this.commands[commandName];
364
+ this.command = new CommandClass(argv);
365
+ await this.command.run();
366
+ this.logger.debug('CLI run finished');
367
+ }
368
+ runCrontab(sequence, commandString, useSeconds = false) {
369
+ if (Object.keys(this.commands).length < 1) {
370
+ throw new RuntimeException('No command registered yet');
371
+ }
372
+ this.registerServiceProviders(EvaEngine.getServiceProvidersForCLI());
373
+ this.logger.debug('Bound services %j', Object.keys(DI.getBound()));
374
+ //Cron jobs run in local time, matching the previous later.date.localTime() default
375
+ this.logger.info('Cron job using %s Timezone', 'Local');
376
+ const [commandName, ...options] = commandString.split(' ');
377
+ if (Object.keys(this.commands).includes(commandName) === false) {
378
+ throw new RuntimeException(`Command ${commandName} not registered`);
379
+ }
380
+ const { argv } = yargs(options);
381
+ const command = new this.commands[commandName](argv);
382
+ let i = 1;
383
+ const schedule = parseCron(sequence, useSeconds);
384
+ const handler = setCronInterval(async () => {
385
+ this.logger.info('Cron job [%s] | Round %d | started with params %j', commandName, i, argv);
386
+ //Let job crash if any exception happen
387
+ await command.run();
388
+ this.logger.info('Cron job [%s] | Round %d | finished', commandName, i);
389
+ i += 1;
390
+ }, schedule); //useSeconds 为 True 时启用秒级字段
391
+ this.logger.info('Cron job [%s] with sequence [%s] registered as %j', commandString, sequence, schedule);
392
+ this.crontabJobHandlers.push(handler);
393
+ }
394
+ async runCommand(commandString) {
395
+ const [commandName, ...options] = commandString.split(' ');
396
+ if (Object.keys(this.commands).includes(commandName) === false) {
397
+ throw new RuntimeException(`Command ${commandName} not registered`);
398
+ }
399
+ const { argv } = yargs(options);
400
+ const command = new this.commands[commandName](argv);
401
+ return command.run();
402
+ }
403
+ }
404
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ import { Sequelize, Op, QueryTypes } from 'sequelize';
2
+ import type { DataTypes, Model, ModelStatic, QueryOptions, Transaction, TransactionOptions } from 'sequelize';
3
+ type EntityModel = ModelStatic<Model> & {
4
+ associate?: (entities: Record<string, EntityModel>) => void;
5
+ };
6
+ type SequelizeStatic = typeof Sequelize & {
7
+ DataTypes: typeof DataTypes;
8
+ Op: typeof Op;
9
+ QueryTypes: typeof QueryTypes;
10
+ };
11
+ export default class Entities {
12
+ entitiesPath: string;
13
+ sequelize: Sequelize | (() => Sequelize) | null;
14
+ entities: Record<string, EntityModel>;
15
+ scanned: boolean;
16
+ constructor(entitiesPath: string, sequelizeInstance?: Sequelize | (() => Sequelize) | null);
17
+ /**
18
+ * Add tracer info to end of SQL query logging
19
+ */
20
+ static addTracer(options?: Record<string, unknown>): Record<string, unknown> & {
21
+ benchmark: boolean;
22
+ logging: (...args: unknown[]) => void;
23
+ };
24
+ /**
25
+ * Scan all entity schemas under a special path
26
+ */
27
+ scan(entitiesPath: string, withAssociate?: boolean): this;
28
+ /**
29
+ * Init sequelize instance from DI config
30
+ */
31
+ init(withAssociate?: boolean): Sequelize | this | (() => Sequelize);
32
+ /**
33
+ * Shortcut for Sequelize query
34
+ */
35
+ query(sql: string, bind?: Record<string, unknown>, options?: QueryOptions): Promise<unknown>;
36
+ /**
37
+ * A shortcut to prevent repeat insert
38
+ */
39
+ uniqueInsert({ tableName, input, uniqueCondition, transaction }: {
40
+ tableName: string;
41
+ input: Record<string, unknown>;
42
+ uniqueCondition: string | Record<string, unknown>;
43
+ transaction?: Transaction;
44
+ }, options?: QueryOptions): Promise<[unknown[], unknown]>;
45
+ /**
46
+ * A short cut to start a database transaction
47
+ */
48
+ getTransaction(options?: TransactionOptions): Promise<Transaction>;
49
+ getSequelize(): SequelizeStatic;
50
+ getInstance(): Sequelize;
51
+ get<T extends EntityModel = EntityModel>(name: string): T;
52
+ getAll(): Record<string, EntityModel>;
53
+ }
54
+ export {};