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.
- package/README.md +15 -1
- package/bin/engine +2 -31
- package/dist/bin.d.ts +1 -0
- package/dist/bin.js +40 -0
- package/dist/bin.js.map +1 -0
- package/{src/commands/index.js → dist/commands/index.d.ts} +1 -8
- package/dist/commands/index.js +6 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/interface.d.ts +18 -0
- package/dist/commands/interface.js +40 -0
- package/dist/commands/interface.js.map +1 -0
- package/dist/commands/make_entity.d.ts +47 -0
- package/dist/commands/make_entity.js +410 -0
- package/dist/commands/make_entity.js.map +1 -0
- package/dist/commands/tramp.d.ts +7 -0
- package/dist/commands/tramp.js +29 -0
- package/dist/commands/tramp.js.map +1 -0
- package/dist/config/index.d.ts +92 -0
- package/dist/config/index.js +96 -0
- package/dist/config/index.js.map +1 -0
- package/dist/di.d.ts +73 -0
- package/dist/di.js +76 -0
- package/dist/di.js.map +1 -0
- package/dist/engine.d.ts +85 -0
- package/dist/engine.js +404 -0
- package/dist/engine.js.map +1 -0
- package/dist/entities/index.d.ts +54 -0
- package/dist/entities/index.js +228 -0
- package/dist/entities/index.js.map +1 -0
- package/dist/exceptions/index.d.ts +153 -0
- package/dist/exceptions/index.js +439 -0
- package/dist/exceptions/index.js.map +1 -0
- package/dist/index.d.ts +45 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/middlewares/auth.d.ts +5 -0
- package/dist/middlewares/auth.js +63 -0
- package/dist/middlewares/auth.js.map +1 -0
- package/dist/middlewares/auth_kong.d.ts +2 -0
- package/dist/middlewares/auth_kong.js +24 -0
- package/dist/middlewares/auth_kong.js.map +1 -0
- package/dist/middlewares/debug.d.ts +3 -0
- package/dist/middlewares/debug.js +50 -0
- package/dist/middlewares/debug.js.map +1 -0
- package/{src/middlewares/index.js → dist/middlewares/index.d.ts} +1 -11
- package/dist/middlewares/index.js +9 -0
- package/dist/middlewares/index.js.map +1 -0
- package/dist/middlewares/providers.d.ts +25 -0
- package/dist/middlewares/providers.js +63 -0
- package/dist/middlewares/providers.js.map +1 -0
- package/dist/middlewares/session.d.ts +6 -0
- package/dist/middlewares/session.js +51 -0
- package/dist/middlewares/session.js.map +1 -0
- package/dist/middlewares/trace.d.ts +52 -0
- package/dist/middlewares/trace.js +225 -0
- package/dist/middlewares/trace.js.map +1 -0
- package/dist/middlewares/validator.d.ts +10 -0
- package/dist/middlewares/validator.js +43 -0
- package/dist/middlewares/validator.js.map +1 -0
- package/dist/middlewares/view_cache.d.ts +14 -0
- package/dist/middlewares/view_cache.js +102 -0
- package/dist/middlewares/view_cache.js.map +1 -0
- package/dist/services/cache.d.ts +66 -0
- package/dist/services/cache.js +207 -0
- package/dist/services/cache.js.map +1 -0
- package/dist/services/config.d.ts +25 -0
- package/dist/services/config.js +88 -0
- package/dist/services/config.js.map +1 -0
- package/dist/services/env.d.ts +12 -0
- package/dist/services/env.js +24 -0
- package/dist/services/env.js.map +1 -0
- package/dist/services/event_manager.d.ts +29 -0
- package/dist/services/event_manager.js +75 -0
- package/dist/services/event_manager.js.map +1 -0
- package/dist/services/http_client.d.ts +66 -0
- package/dist/services/http_client.js +62 -0
- package/dist/services/http_client.js.map +1 -0
- package/{src/services/index.js → dist/services/index.d.ts} +1 -15
- package/dist/services/index.js +14 -0
- package/dist/services/index.js.map +1 -0
- package/{src/services/interface.js → dist/services/interface.d.ts} +1 -3
- package/dist/services/interface.js +6 -0
- package/dist/services/interface.js.map +1 -0
- package/{src/services/joi.js → dist/services/joi.d.ts} +2 -9
- package/dist/services/joi.js +11 -0
- package/dist/services/joi.js.map +1 -0
- package/dist/services/jwt_token.d.ts +24 -0
- package/dist/services/jwt_token.js +77 -0
- package/dist/services/jwt_token.js.map +1 -0
- package/dist/services/jwt_token_kong.d.ts +25 -0
- package/dist/services/jwt_token_kong.js +65 -0
- package/dist/services/jwt_token_kong.js.map +1 -0
- package/dist/services/logger.d.ts +30 -0
- package/dist/services/logger.js +126 -0
- package/dist/services/logger.js.map +1 -0
- package/dist/services/namespace.d.ts +55 -0
- package/dist/services/namespace.js +157 -0
- package/dist/services/namespace.js.map +1 -0
- package/dist/services/now.d.ts +14 -0
- package/dist/services/now.js +43 -0
- package/dist/services/now.js.map +1 -0
- package/dist/services/providers.d.ts +55 -0
- package/dist/services/providers.js +134 -0
- package/dist/services/providers.js.map +1 -0
- package/dist/services/redis.d.ts +18 -0
- package/dist/services/redis.js +53 -0
- package/dist/services/redis.js.map +1 -0
- package/dist/services/rest_client.d.ts +48 -0
- package/dist/services/rest_client.js +96 -0
- package/dist/services/rest_client.js.map +1 -0
- package/dist/swagger/index.d.ts +223 -0
- package/dist/swagger/index.js +564 -0
- package/dist/swagger/index.js.map +1 -0
- package/dist/types/express.d.ts +14 -0
- package/dist/types/vendor.d.ts +102 -0
- package/dist/utils/api_scaffold.d.ts +74 -0
- package/dist/utils/api_scaffold.js +220 -0
- package/dist/utils/api_scaffold.js.map +1 -0
- package/dist/utils/case_converter.d.ts +7 -0
- package/dist/utils/case_converter.js +29 -0
- package/dist/utils/case_converter.js.map +1 -0
- package/dist/utils/crc32.d.ts +2 -0
- package/dist/utils/crc32.js +43 -0
- package/dist/utils/crc32.js.map +1 -0
- package/dist/utils/cron.d.ts +27 -0
- package/dist/utils/cron.js +186 -0
- package/dist/utils/cron.js.map +1 -0
- package/dist/utils/datetime.d.ts +4 -0
- package/dist/utils/datetime.js +6 -0
- package/dist/utils/datetime.js.map +1 -0
- package/dist/utils/host.d.ts +18 -0
- package/dist/utils/host.js +33 -0
- package/dist/utils/host.js.map +1 -0
- package/{src/utils/index.js → dist/utils/index.d.ts} +2 -26
- package/dist/utils/index.js +12 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/pagination.d.ts +150 -0
- package/dist/utils/pagination.js +242 -0
- package/dist/utils/pagination.js.map +1 -0
- package/dist/utils/random.d.ts +3 -0
- package/dist/utils/random.js +18 -0
- package/dist/utils/random.js.map +1 -0
- package/dist/utils/request_client.d.ts +33 -0
- package/dist/utils/request_client.js +153 -0
- package/dist/utils/request_client.js.map +1 -0
- package/dist/utils/smart_query.d.ts +144 -0
- package/dist/utils/smart_query.js +310 -0
- package/dist/utils/smart_query.js.map +1 -0
- package/dist/utils/test.d.ts +14 -0
- package/dist/utils/test.js +37 -0
- package/dist/utils/test.js.map +1 -0
- package/dist/utils/wrapper.d.ts +3 -0
- package/dist/utils/wrapper.js +5 -0
- package/dist/utils/wrapper.js.map +1 -0
- package/package.json +24 -10
- package/index.js +0 -2
- package/src/commands/interface.js +0 -45
- package/src/commands/make_entity.js +0 -490
- package/src/commands/tramp.js +0 -34
- package/src/config/index.js +0 -95
- package/src/di.js +0 -96
- package/src/engine.js +0 -556
- package/src/entities/index.js +0 -272
- package/src/exceptions/index.js +0 -501
- package/src/index.js +0 -55
- package/src/middlewares/auth.js +0 -67
- package/src/middlewares/auth_kong.js +0 -28
- package/src/middlewares/debug.js +0 -88
- package/src/middlewares/providers.js +0 -73
- package/src/middlewares/session.js +0 -63
- package/src/middlewares/trace.js +0 -254
- package/src/middlewares/validator.js +0 -50
- package/src/middlewares/view_cache.js +0 -127
- package/src/services/cache.js +0 -223
- package/src/services/config.js +0 -115
- package/src/services/env.js +0 -28
- package/src/services/event_manager.js +0 -84
- package/src/services/http_client.js +0 -69
- package/src/services/jwt_token.js +0 -89
- package/src/services/jwt_token_kong.js +0 -75
- package/src/services/logger.js +0 -150
- package/src/services/namespace.js +0 -176
- package/src/services/now.js +0 -49
- package/src/services/providers.js +0 -158
- package/src/services/redis.js +0 -63
- package/src/services/rest_client.js +0 -112
- package/src/swagger/index.js +0 -665
- package/src/utils/api_scaffold.js +0 -240
- package/src/utils/case_converter.js +0 -33
- package/src/utils/crc32.js +0 -44
- package/src/utils/cron.js +0 -208
- package/src/utils/datetime.js +0 -13
- package/src/utils/host.js +0 -39
- package/src/utils/pagination.js +0 -260
- package/src/utils/random.js +0 -23
- package/src/utils/request_client.js +0 -179
- package/src/utils/smart_query.js +0 -352
- package/src/utils/test.js +0 -48
- package/src/utils/wrapper.js +0 -8
package/src/entities/index.js
DELETED
|
@@ -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
|
-
}
|