evaengine 1.0.13 → 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 +27 -11
- 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
|
@@ -0,0 +1,228 @@
|
|
|
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, Op, QueryTypes } 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
|
+
const require = createRequire(import.meta.url);
|
|
11
|
+
Sequelize.prototype.validateIsUnique = (col, msg) => {
|
|
12
|
+
const conditions = { where: {} };
|
|
13
|
+
const message = msg || `${col} must be unique`;
|
|
14
|
+
return function v(value, next) {
|
|
15
|
+
//原实现的 this 别名,闭包内沿用
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
17
|
+
const self = this;
|
|
18
|
+
this.Model.describe().then((schema) => {
|
|
19
|
+
conditions.where[col] = value;
|
|
20
|
+
Object
|
|
21
|
+
.keys(schema)
|
|
22
|
+
.filter(field => schema[field].primaryKey)
|
|
23
|
+
.forEach((pk) => {
|
|
24
|
+
conditions.where[pk] = { [Op.ne]: self[pk] };
|
|
25
|
+
});
|
|
26
|
+
}).then(() => self.Model.count(conditions).then((found) => {
|
|
27
|
+
if (found !== 0) {
|
|
28
|
+
return next(message);
|
|
29
|
+
}
|
|
30
|
+
return next();
|
|
31
|
+
})).catch(next);
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
export default class Entities {
|
|
35
|
+
entitiesPath;
|
|
36
|
+
sequelize;
|
|
37
|
+
entities;
|
|
38
|
+
scanned;
|
|
39
|
+
constructor(entitiesPath, sequelizeInstance = null) {
|
|
40
|
+
this.entitiesPath = entitiesPath;
|
|
41
|
+
this.sequelize = sequelizeInstance;
|
|
42
|
+
this.entities = {};
|
|
43
|
+
this.scanned = false;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Add tracer info to end of SQL query logging
|
|
47
|
+
*/
|
|
48
|
+
static addTracer(options = {}) {
|
|
49
|
+
return Object.assign(options, {
|
|
50
|
+
benchmark: true,
|
|
51
|
+
logging: (...args) => {
|
|
52
|
+
// namespace.get 返回 unknown,sequelize 回调里只使用 queries 数组
|
|
53
|
+
const tracer = DI.get('namespace').get('tracer');
|
|
54
|
+
const [query, cost] = args;
|
|
55
|
+
// sequelize 在 benchmark 模式下以 (sql, 耗时 ms) 调用 logging,cost 为 unknown 时与原实现同样按假值/NaN 处理
|
|
56
|
+
if (tracer && cost > 0) {
|
|
57
|
+
tracer.queries.push({
|
|
58
|
+
query,
|
|
59
|
+
cost: cost * 1000,
|
|
60
|
+
finishedAt: getMicroTimestamp()
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Scan all entity schemas under a special path
|
|
68
|
+
*/
|
|
69
|
+
scan(entitiesPath, withAssociate = true) {
|
|
70
|
+
assert(this.sequelize && this.sequelize instanceof Sequelize, 'Scan entities require a sequelize instance');
|
|
71
|
+
// assert 收窄后的引用提为局部变量,供下方闭包使用
|
|
72
|
+
const sequelize = this.sequelize;
|
|
73
|
+
fs
|
|
74
|
+
.readdirSync(entitiesPath)
|
|
75
|
+
.filter((file) => {
|
|
76
|
+
const fileArray = file.split('.');
|
|
77
|
+
// split('.') 至少产生一段,pop() 不会返回 undefined
|
|
78
|
+
return (file.indexOf('.') !== 0) &&
|
|
79
|
+
(['js', 'es6', 'cjs'].indexOf(fileArray.pop()) !== -1) && (fileArray[0] !== 'index');
|
|
80
|
+
})
|
|
81
|
+
.forEach((file) => {
|
|
82
|
+
const entityModule = require(path.join(entitiesPath, file));
|
|
83
|
+
const entityFactory = (entityModule.default || entityModule);
|
|
84
|
+
// 模型类同样满足 typeof 'function'(带构造签名),运行时保持原判定:仅工厂被调用
|
|
85
|
+
const entity = typeof entityFactory === 'function' ?
|
|
86
|
+
entityFactory(sequelize, Sequelize) : entityFactory;
|
|
87
|
+
this.entities[entity.name] = entity;
|
|
88
|
+
});
|
|
89
|
+
if (!withAssociate) {
|
|
90
|
+
return this;
|
|
91
|
+
}
|
|
92
|
+
Object.values(this.entities).forEach((entity) => {
|
|
93
|
+
if ('associate' in entity) {
|
|
94
|
+
entity.associate(this.entities);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
return this;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Init sequelize instance from DI config
|
|
101
|
+
*/
|
|
102
|
+
init(withAssociate = true) {
|
|
103
|
+
if (this.sequelize && this.scanned) {
|
|
104
|
+
return this.sequelize;
|
|
105
|
+
}
|
|
106
|
+
const logger = DI.get('logger').getInstance();
|
|
107
|
+
if (!this.sequelize) {
|
|
108
|
+
// Config.get 公共签名返回 unknown,这里只消费 db 与 sequelize 两个配置段
|
|
109
|
+
const config = DI.get('config').get();
|
|
110
|
+
const ns = DI.get('namespace');
|
|
111
|
+
if (ns.isEnabled()) {
|
|
112
|
+
//Inject sequelize inner namespace, refer: http://docs.sequelizejs.com/en/latest/docs/transactions/
|
|
113
|
+
const context = ns.use().getContext();
|
|
114
|
+
if (typeof Sequelize.useCLS === 'function') {
|
|
115
|
+
Sequelize.useCLS(context);
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
// 老版本回退分支;sequelize 自带类型未声明 cls 静态属性
|
|
119
|
+
Sequelize.cls = context;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
const dbConfig = cloneDeep(config.db);
|
|
123
|
+
if (process.env.SEQUELIZE_REPLICATION_CONFIG_KEY) {
|
|
124
|
+
dbConfig.replication = dbConfig[process.env.SEQUELIZE_REPLICATION_CONFIG_KEY];
|
|
125
|
+
}
|
|
126
|
+
const sequelizeOptions = Object.assign({}, config.sequelize, dbConfig);
|
|
127
|
+
if (sequelizeOptions.logging !== false) {
|
|
128
|
+
Object.assign(sequelizeOptions, Entities.addTracer());
|
|
129
|
+
}
|
|
130
|
+
// sequelize 类型声明 username/password 为必填 string;运行时保留原 null 实参
|
|
131
|
+
this.sequelize = new Sequelize(config.db.database, null, null, sequelizeOptions);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
this.sequelize = typeof this.sequelize === 'function' ? this.sequelize() : this.sequelize;
|
|
135
|
+
}
|
|
136
|
+
this.scan(this.entitiesPath, withAssociate);
|
|
137
|
+
this.scanned = true;
|
|
138
|
+
logger.debug('Entities init by scanned %s', this.entitiesPath);
|
|
139
|
+
return this;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Shortcut for Sequelize query
|
|
143
|
+
*/
|
|
144
|
+
query(sql, bind = {}, options = {}) {
|
|
145
|
+
return this.getInstance().query(sql, Object.assign({
|
|
146
|
+
type: QueryTypes.SELECT
|
|
147
|
+
}, options, { bind }));
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* A shortcut to prevent repeat insert
|
|
151
|
+
*/
|
|
152
|
+
uniqueInsert({ tableName, input, uniqueCondition, transaction }, options = {}) {
|
|
153
|
+
const inputObj = Object.assign({}, input);
|
|
154
|
+
const typeAllowed = ['number', 'string', 'boolean'];
|
|
155
|
+
Object.entries(inputObj).forEach((p) => {
|
|
156
|
+
const valType = typeof p[1];
|
|
157
|
+
//Allow null type here
|
|
158
|
+
if (typeAllowed.indexOf(valType) === -1 && p[1] !== null) {
|
|
159
|
+
throw new StandardException(`SQL inputObj ${p[0]}:${p[1]} with unsupported type ${valType}.`);
|
|
160
|
+
}
|
|
161
|
+
else if (valType === 'boolean') {
|
|
162
|
+
if (p[1] === true) {
|
|
163
|
+
inputObj[p[0]] = 1;
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
inputObj[p[0]] = 0;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
});
|
|
170
|
+
const columns = Object.keys(inputObj);
|
|
171
|
+
const columnString = ['`', columns.join('`, `'), '`'].join('');
|
|
172
|
+
const valueString = Object.entries(inputObj).map(([key]) => `$${key} \`${key}\``).join(' , ');
|
|
173
|
+
// sequelize 自带类型未声明实例的 dialect 属性
|
|
174
|
+
const uniqueString = typeof uniqueCondition === 'string' ? uniqueCondition :
|
|
175
|
+
[`SELECT * FROM ${tableName} WHERE `, this.getInstance().dialect.QueryGenerator.getWhereConditions(uniqueCondition)].join('');
|
|
176
|
+
/*
|
|
177
|
+
Original Example:
|
|
178
|
+
entities.getInstance().query(`INSERT INTO ${tableName}
|
|
179
|
+
(userId, status)
|
|
180
|
+
(
|
|
181
|
+
SELECT *
|
|
182
|
+
FROM (SELECT $userId userId, $status status) AS tmp
|
|
183
|
+
WHERE NOT EXISTS (
|
|
184
|
+
SELECT id FROM ${auditTable} WHERE userId = $userId AND status = 'pending'
|
|
185
|
+
) LIMIT 1
|
|
186
|
+
)`, { bind, transaction, type: entities.getSequelize().QueryTypes.INSERT });
|
|
187
|
+
*/
|
|
188
|
+
const sql = `INSERT INTO ${tableName}
|
|
189
|
+
(${columnString})
|
|
190
|
+
(
|
|
191
|
+
SELECT *
|
|
192
|
+
FROM (SELECT ${valueString}) AS tmp
|
|
193
|
+
WHERE NOT EXISTS (
|
|
194
|
+
${uniqueString} FOR UPDATE
|
|
195
|
+
) LIMIT 1
|
|
196
|
+
)`; //add FOR UPDATE to use eXclusive Lock
|
|
197
|
+
return this.getInstance().query(sql, Object.assign({
|
|
198
|
+
bind: inputObj,
|
|
199
|
+
transaction,
|
|
200
|
+
type: QueryTypes.INSERT
|
|
201
|
+
}, options));
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* A short cut to start a database transaction
|
|
205
|
+
*/
|
|
206
|
+
getTransaction(options = {}) {
|
|
207
|
+
return this.getInstance().transaction(Object.assign({
|
|
208
|
+
autocommit: true
|
|
209
|
+
}, options));
|
|
210
|
+
}
|
|
211
|
+
getSequelize() {
|
|
212
|
+
return Sequelize;
|
|
213
|
+
}
|
|
214
|
+
getInstance() {
|
|
215
|
+
this.init();
|
|
216
|
+
// scan() 内的 instanceof 断言保证 init() 之后必为 Sequelize 实例
|
|
217
|
+
return this.sequelize;
|
|
218
|
+
}
|
|
219
|
+
get(name) {
|
|
220
|
+
this.init();
|
|
221
|
+
return this.entities[name];
|
|
222
|
+
}
|
|
223
|
+
getAll() {
|
|
224
|
+
this.init();
|
|
225
|
+
return this.entities;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/entities/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Accepted constructor inputs for exceptions
|
|
3
|
+
*/
|
|
4
|
+
export type ExceptionInput = StandardException | Error | string | null | undefined;
|
|
5
|
+
/**
|
|
6
|
+
* Exception interface
|
|
7
|
+
* Support usages:
|
|
8
|
+
* throw new Exception();
|
|
9
|
+
* throw new Exception('Something');
|
|
10
|
+
* throw new Exception(new Error());
|
|
11
|
+
* throw new Exception(new Exception());
|
|
12
|
+
* throw (new Exception()).i18n('some %d', 123)
|
|
13
|
+
*/
|
|
14
|
+
export declare class StandardException extends Error {
|
|
15
|
+
/**
|
|
16
|
+
* Generate string hash by crc32
|
|
17
|
+
*/
|
|
18
|
+
static hash(str: string, padstr?: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Hash an exception into an 18 bits code
|
|
21
|
+
*/
|
|
22
|
+
static generateCode(className: string, fileName?: string): number;
|
|
23
|
+
/**
|
|
24
|
+
* Remove useless info from error stack
|
|
25
|
+
*/
|
|
26
|
+
static stackBeautifier(stack: string): string[];
|
|
27
|
+
static setI18nHandler(handler: (...args: unknown[]) => string): void;
|
|
28
|
+
/**
|
|
29
|
+
* Deserialize an exception from a JSON object
|
|
30
|
+
*/
|
|
31
|
+
static factory(json?: Record<string, unknown>): StandardException | Record<string, unknown> | undefined;
|
|
32
|
+
/**
|
|
33
|
+
* Http status code
|
|
34
|
+
*/
|
|
35
|
+
get statusCode(): number;
|
|
36
|
+
humanMessage: string;
|
|
37
|
+
throwingError: boolean;
|
|
38
|
+
details: unknown;
|
|
39
|
+
prevError: unknown;
|
|
40
|
+
code: number | null;
|
|
41
|
+
filename: string;
|
|
42
|
+
translated: boolean;
|
|
43
|
+
importance: number;
|
|
44
|
+
/**
|
|
45
|
+
* If throw a StandardException, keep throw to above
|
|
46
|
+
* If throw a Error, set Error message to exception message, set Error to details
|
|
47
|
+
* If throw a String, set String to exception message
|
|
48
|
+
* If throw a null or undefined, set exception name as exception message
|
|
49
|
+
* Otherwise, throw a TypeError
|
|
50
|
+
*/
|
|
51
|
+
constructor(exceptionOrMsg?: ExceptionInput);
|
|
52
|
+
i18n(...args: unknown[]): this;
|
|
53
|
+
getHumanMessage(): string;
|
|
54
|
+
setMessage(message: string): this;
|
|
55
|
+
setCode(code: number | string): this;
|
|
56
|
+
getCode(): number;
|
|
57
|
+
getStatusCode(): number;
|
|
58
|
+
setImportance(importance: number | string): this;
|
|
59
|
+
getImportance(): number;
|
|
60
|
+
setFileName(filename: string): this;
|
|
61
|
+
getFileName(): string;
|
|
62
|
+
setDetails(details: unknown): this;
|
|
63
|
+
getDetails(): unknown[];
|
|
64
|
+
setPrevError(prevError: unknown): this;
|
|
65
|
+
getPrevError(): unknown;
|
|
66
|
+
toJSON(): {
|
|
67
|
+
statusCode: number;
|
|
68
|
+
code: number;
|
|
69
|
+
name: string;
|
|
70
|
+
message: string;
|
|
71
|
+
humanMessage: string;
|
|
72
|
+
filename: string;
|
|
73
|
+
prevError: unknown;
|
|
74
|
+
errors: unknown[];
|
|
75
|
+
stack: string[];
|
|
76
|
+
fullStack: string[];
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
export declare class LogicException extends StandardException {
|
|
80
|
+
get statusCode(): number;
|
|
81
|
+
}
|
|
82
|
+
export declare class InvalidArgumentException extends LogicException {
|
|
83
|
+
}
|
|
84
|
+
export declare class FormInvalidateException extends InvalidArgumentException {
|
|
85
|
+
constructor(exceptionOrMsg?: ExceptionInput);
|
|
86
|
+
}
|
|
87
|
+
export declare class ModelInvalidateException extends InvalidArgumentException {
|
|
88
|
+
constructor(exceptionOrMsg?: ExceptionInput);
|
|
89
|
+
}
|
|
90
|
+
export declare class HttpRequestLogicException extends InvalidArgumentException {
|
|
91
|
+
response: unknown;
|
|
92
|
+
request: unknown;
|
|
93
|
+
requestParams: unknown;
|
|
94
|
+
responseParams: unknown;
|
|
95
|
+
businessCode: unknown;
|
|
96
|
+
/**
|
|
97
|
+
* Support request promise error
|
|
98
|
+
* https://github.com/request/promise-core/blob/master/lib/errors.js
|
|
99
|
+
*/
|
|
100
|
+
constructor(exceptionOrMsg?: ExceptionInput);
|
|
101
|
+
setResponse(response: unknown): this;
|
|
102
|
+
getRequest(): {};
|
|
103
|
+
getResponse(): {};
|
|
104
|
+
setRequestParams(params: unknown): this;
|
|
105
|
+
getRequestParams(): unknown;
|
|
106
|
+
setResponseParams(params: unknown): this;
|
|
107
|
+
getResponseParams(): unknown;
|
|
108
|
+
setBusinessCode(code: unknown): this;
|
|
109
|
+
getBusinessCode(): unknown;
|
|
110
|
+
}
|
|
111
|
+
export declare class RestServiceLogicException extends HttpRequestLogicException {
|
|
112
|
+
constructor(exceptionOrMsg?: ExceptionInput);
|
|
113
|
+
}
|
|
114
|
+
export declare class UnauthorizedException extends LogicException {
|
|
115
|
+
get statusCode(): number;
|
|
116
|
+
}
|
|
117
|
+
export declare class OperationNotPermittedException extends LogicException {
|
|
118
|
+
get statusCode(): number;
|
|
119
|
+
}
|
|
120
|
+
export declare class ResourceNotFoundException extends LogicException {
|
|
121
|
+
get statusCode(): number;
|
|
122
|
+
}
|
|
123
|
+
export declare class OperationUnsupportedException extends LogicException {
|
|
124
|
+
get statusCode(): number;
|
|
125
|
+
}
|
|
126
|
+
export declare class ResourceConflictedException extends LogicException {
|
|
127
|
+
get statusCode(): number;
|
|
128
|
+
}
|
|
129
|
+
export declare class RuntimeException extends StandardException {
|
|
130
|
+
}
|
|
131
|
+
export declare class IOException extends RuntimeException {
|
|
132
|
+
}
|
|
133
|
+
export declare class HttpRequestIOException extends IOException {
|
|
134
|
+
response: unknown;
|
|
135
|
+
request: unknown;
|
|
136
|
+
requestParams: unknown;
|
|
137
|
+
responseParams: unknown;
|
|
138
|
+
businessCode: unknown;
|
|
139
|
+
constructor(exceptionOrMsg?: ExceptionInput);
|
|
140
|
+
getRequest(): unknown;
|
|
141
|
+
getResponse(): unknown;
|
|
142
|
+
setRequestParams(params: unknown): this;
|
|
143
|
+
getRequestParams(): unknown;
|
|
144
|
+
setResponseParams(params: unknown): this;
|
|
145
|
+
getResponseParams(): unknown;
|
|
146
|
+
setBusinessCode(code: unknown): this;
|
|
147
|
+
getBusinessCode(): unknown;
|
|
148
|
+
}
|
|
149
|
+
export declare class RestServiceIOException extends HttpRequestIOException {
|
|
150
|
+
constructor(exceptionOrMsg?: ExceptionInput);
|
|
151
|
+
}
|
|
152
|
+
export declare class DatabaseIOException extends IOException {
|
|
153
|
+
}
|