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
@@ -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
- }