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
@@ -1,272 +0,0 @@
1
- import fs from 'fs';
2
- import path from 'path';
3
- import assert from 'assert';
4
- import cloneDeep from 'lodash/cloneDeep.js';
5
- import Sequelize from 'sequelize';
6
- import { createRequire } from 'module';
7
- import DI from '../di.js';
8
- import { getMicroTimestamp } from '../utils/index.js';
9
- import { StandardException } from '../exceptions/index.js';
10
-
11
- const require = createRequire(import.meta.url);
12
-
13
- //From https://github.com/angelxmoreno/sequelize-isunique-validator
14
- Sequelize.prototype.validateIsUnique = (col, msg) => {
15
- const conditions = { where: {} };
16
- const message = msg || `${col} must be unique`;
17
- return function v(value, next) {
18
- const self = this;
19
- this.Model.describe().then((schema) => {
20
- conditions.where[col] = value;
21
- Object
22
- .keys(schema)
23
- .filter(field => schema[field].primaryKey)
24
- .forEach((pk) => {
25
- conditions.where[pk] = { [Sequelize.Op.ne]: self[pk] };
26
- });
27
- }).then(() =>
28
- self.Model.count(conditions).then((found) => {
29
- if (found !== 0) {
30
- return next(message);
31
- }
32
- return next();
33
- })).catch(next);
34
- };
35
- };
36
-
37
-
38
- export default class Entities {
39
- /**
40
- * @param {string} entitiesPath
41
- * @param {Sequelize|Function} sequelizeInstance
42
- */
43
- constructor(entitiesPath, sequelizeInstance = null) {
44
- this.entitiesPath = entitiesPath;
45
- this.sequelize = sequelizeInstance;
46
- this.entities = {};
47
- this.scanned = false;
48
- }
49
-
50
- /**
51
- * Add tracer info to end of SQL query logging
52
- * @param options
53
- * @returns {*}
54
- */
55
- static addTracer(options = {}) {
56
- return Object.assign(options, {
57
- benchmark: true,
58
- logging: (...args) => {
59
- const tracer = DI.get('namespace').get('tracer');
60
- const [query, cost] = args;
61
- if (tracer && cost > 0) {
62
- tracer.queries.push({
63
- query,
64
- cost: cost * 1000,
65
- finishedAt: getMicroTimestamp()
66
- });
67
- }
68
- }
69
- });
70
- }
71
-
72
- /**
73
- * Scan all entity schemas under a special path
74
- * @param entitiesPath
75
- * @param withAssociate
76
- * @returns {Entities}
77
- */
78
- scan(entitiesPath, withAssociate = true) {
79
- assert(this.sequelize && this.sequelize instanceof Sequelize, 'Scan entities require a sequelize instance');
80
-
81
- fs
82
- .readdirSync(entitiesPath)
83
- .filter((file) => {
84
- const fileArray = file.split('.');
85
- return (file.indexOf('.') !== 0) &&
86
- (['js', 'es6', 'cjs'].indexOf(fileArray.pop()) !== -1) && (fileArray[0] !== 'index');
87
- })
88
- .forEach((file) => {
89
- const entityModule = require(path.join(entitiesPath, file));
90
- const entityFactory = entityModule.default || entityModule;
91
- const entity = typeof entityFactory === 'function' ?
92
- entityFactory(this.sequelize, Sequelize) : entityFactory;
93
- this.entities[entity.name] = entity;
94
- });
95
-
96
- if (!withAssociate) {
97
- return this;
98
- }
99
-
100
- Object.values(this.entities).forEach((entity) => {
101
- if ('associate' in entity) {
102
- entity.associate(this.entities);
103
- }
104
- });
105
- return this;
106
- }
107
-
108
- /**
109
- * Init sequelize instance from DI config
110
- * @param withAssociate
111
- * @returns {*}
112
- */
113
- init(withAssociate = true) {
114
- if (this.sequelize && this.scanned) {
115
- return this.sequelize;
116
- }
117
-
118
- const logger = DI.get('logger').getInstance();
119
- if (!this.sequelize) {
120
- const config = DI.get('config').get();
121
- const ns = DI.get('namespace');
122
- if (ns.isEnabled()) {
123
- //Inject sequelize inner namespace, refer: http://docs.sequelizejs.com/en/latest/docs/transactions/
124
- const context = ns.use().getContext();
125
- if (typeof Sequelize.useCLS === 'function') {
126
- Sequelize.useCLS(context);
127
- } else {
128
- Sequelize.cls = context;
129
- }
130
- }
131
-
132
- const dbConfig = cloneDeep(config.db);
133
- if (process.env.SEQUELIZE_REPLICATION_CONFIG_KEY) {
134
- dbConfig.replication = dbConfig[process.env.SEQUELIZE_REPLICATION_CONFIG_KEY];
135
- }
136
- const sequelizeOptions = Object.assign({}, config.sequelize, dbConfig);
137
- if (sequelizeOptions.logging !== false) {
138
- Object.assign(sequelizeOptions, Entities.addTracer());
139
- }
140
- this.sequelize = new Sequelize(
141
- config.db.database, null, null,
142
- sequelizeOptions
143
- );
144
- } else {
145
- this.sequelize = typeof this.sequelize === 'function' ? this.sequelize() : this.sequelize;
146
- }
147
-
148
- this.scan(this.entitiesPath, withAssociate);
149
- this.scanned = true;
150
-
151
- logger.debug('Entities init by scanned %s', this.entitiesPath);
152
- return this;
153
- }
154
-
155
- /**
156
- * Shortcut for Sequelize query
157
- * @param sql
158
- * @param bind
159
- * @param options
160
- * @returns {*|{foo}|{}}
161
- */
162
- query(sql, bind = {}, options = {}) {
163
- return this.getInstance().query(sql, Object.assign({
164
- type: this.getSequelize().QueryTypes.SELECT
165
- }, options, { bind }));
166
- }
167
-
168
- /**
169
- * A shortcut to prevent repeat insert
170
- * @param tableName
171
- * @param input
172
- * @param uniqueCondition
173
- * @param transaction
174
- * @param options
175
- */
176
- uniqueInsert({
177
- tableName,
178
- input,
179
- uniqueCondition,
180
- transaction
181
- }, options = {}) {
182
- const inputObj = Object.assign({}, input);
183
- const typeAllowed = ['number', 'string', 'boolean'];
184
- Object.entries(inputObj).forEach((p) => {
185
- const valType = typeof p[1];
186
- //Allow null type here
187
- if (typeAllowed.indexOf(valType) === -1 && p[1] !== null) {
188
- throw new StandardException(`SQL inputObj ${p[0]}:${p[1]} with unsupported type ${valType}.`);
189
- } else if (valType === 'boolean') {
190
- if (p[1] === true) {
191
- inputObj[p[0]] = 1;
192
- } else {
193
- inputObj[p[0]] = 0;
194
- }
195
- }
196
- });
197
- const columns = Object.keys(inputObj);
198
- const columnString = ['`', columns.join('`, `'), '`'].join('');
199
- const valueString = Object.entries(inputObj).map(([key]) => `$${key} \`${key}\``).join(' , ');
200
- const uniqueString = typeof uniqueCondition === 'string' ? uniqueCondition :
201
- [`SELECT * FROM ${tableName} WHERE `, this.getInstance().dialect.QueryGenerator.getWhereConditions(uniqueCondition)].join('');
202
- /*
203
- Original Example:
204
- entities.getInstance().query(`INSERT INTO ${tableName}
205
- (userId, status)
206
- (
207
- SELECT *
208
- FROM (SELECT $userId userId, $status status) AS tmp
209
- WHERE NOT EXISTS (
210
- SELECT id FROM ${auditTable} WHERE userId = $userId AND status = 'pending'
211
- ) LIMIT 1
212
- )`, { bind, transaction, type: entities.getSequelize().QueryTypes.INSERT });
213
- */
214
-
215
- const sql = `INSERT INTO ${tableName}
216
- (${columnString})
217
- (
218
- SELECT *
219
- FROM (SELECT ${valueString}) AS tmp
220
- WHERE NOT EXISTS (
221
- ${uniqueString} FOR UPDATE
222
- ) LIMIT 1
223
- )`; //add FOR UPDATE to use eXclusive Lock
224
- return this.getInstance().query(sql, Object.assign({
225
- bind: inputObj,
226
- transaction,
227
- type: Sequelize.QueryTypes.INSERT
228
- }, options));
229
- }
230
-
231
- /**
232
- * A short cut to start a database transaction
233
- * @param options
234
- */
235
- getTransaction(options = {}) {
236
- return this.getInstance().transaction(Object.assign({
237
- autocommit: true
238
- }, options));
239
- }
240
-
241
- /**
242
- * @returns {Sequelize}
243
- */
244
- getSequelize() {
245
- return Sequelize;
246
- }
247
-
248
- /**
249
- * @returns {Sequelize}
250
- */
251
- getInstance() {
252
- this.init();
253
- return this.sequelize;
254
- }
255
-
256
- /**
257
- * @param name
258
- * @returns {Sequelize}
259
- */
260
- get(name) {
261
- this.init();
262
- return this.entities[name];
263
- }
264
-
265
- /**
266
- * @returns {Object}
267
- */
268
- getAll() {
269
- this.init();
270
- return this.entities;
271
- }
272
- }