tspace-mysql 1.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.
@@ -0,0 +1,2066 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __assign = (this && this.__assign) || function () {
18
+ __assign = Object.assign || function(t) {
19
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
20
+ s = arguments[i];
21
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
22
+ t[p] = s[p];
23
+ }
24
+ return t;
25
+ };
26
+ return __assign.apply(this, arguments);
27
+ };
28
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
29
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
30
+ return new (P || (P = Promise))(function (resolve, reject) {
31
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
32
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
33
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
34
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
35
+ });
36
+ };
37
+ var __generator = (this && this.__generator) || function (thisArg, body) {
38
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
39
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
40
+ function verb(n) { return function (v) { return step([n, v]); }; }
41
+ function step(op) {
42
+ if (f) throw new TypeError("Generator is already executing.");
43
+ while (_) try {
44
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
45
+ if (y = 0, t) op = [op[0] & 2, t.value];
46
+ switch (op[0]) {
47
+ case 0: case 1: t = op; break;
48
+ case 4: _.label++; return { value: op[1], done: false };
49
+ case 5: _.label++; y = op[1]; op = [0]; continue;
50
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
51
+ default:
52
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
53
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
54
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
55
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
56
+ if (t[2]) _.ops.pop();
57
+ _.trys.pop(); continue;
58
+ }
59
+ op = body.call(thisArg, _);
60
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
61
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
62
+ }
63
+ };
64
+ var __read = (this && this.__read) || function (o, n) {
65
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
66
+ if (!m) return o;
67
+ var i = m.call(o), r, ar = [], e;
68
+ try {
69
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
70
+ }
71
+ catch (error) { e = { error: error }; }
72
+ finally {
73
+ try {
74
+ if (r && !r.done && (m = i["return"])) m.call(i);
75
+ }
76
+ finally { if (e) throw e.error; }
77
+ }
78
+ return ar;
79
+ };
80
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
81
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
82
+ if (ar || !(i in from)) {
83
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
84
+ ar[i] = from[i];
85
+ }
86
+ }
87
+ return to.concat(ar || Array.prototype.slice.call(from));
88
+ };
89
+ var __values = (this && this.__values) || function(o) {
90
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
91
+ if (m) return m.call(o);
92
+ if (o && typeof o.length === "number") return {
93
+ next: function () {
94
+ if (o && i >= o.length) o = void 0;
95
+ return { value: o && o[i++], done: !o };
96
+ }
97
+ };
98
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
99
+ };
100
+ var __importDefault = (this && this.__importDefault) || function (mod) {
101
+ return (mod && mod.__esModule) ? mod : { "default": mod };
102
+ };
103
+ Object.defineProperty(exports, "__esModule", { value: true });
104
+ var AbstractModel_1 = __importDefault(require("./AbstractModel"));
105
+ var pluralize_1 = __importDefault(require("pluralize"));
106
+ var DB_1 = __importDefault(require("./DB"));
107
+ var ProxyHandler_1 = __importDefault(require("./ProxyHandler"));
108
+ var Model = /** @class */ (function (_super) {
109
+ __extends(Model, _super);
110
+ function Model() {
111
+ var _this = _super.call(this) || this;
112
+ _this._initModel();
113
+ return new Proxy(_this, ProxyHandler_1.default);
114
+ }
115
+ Model.prototype.useRegistry = function () {
116
+ this.$db.set('REGISTRY', __assign(__assign({}, this.$db.get('REGISTRY')), { attach: this._attach, detach: this._detach }));
117
+ return this;
118
+ };
119
+ Model.prototype.useUUID = function (custom) {
120
+ if (custom === void 0) { custom = 'uuid'; }
121
+ this.$db.set('UUID', true);
122
+ this.$db.set('UUID_CUSTOM', custom);
123
+ return this;
124
+ };
125
+ Model.prototype.useDebug = function () {
126
+ this.$db.set('DEBUG', true);
127
+ return this;
128
+ };
129
+ Model.prototype.usePattern = function (pattern) {
130
+ var allowPattern = [this.$utils().constants('PATTERN').snake_case, this.$utils().constants('PATTERN').camelCase];
131
+ if (!allowPattern.includes(pattern))
132
+ throw new Error("allow pattern " + allowPattern + " only");
133
+ this.$db.set('PATTERN', pattern);
134
+ return this;
135
+ };
136
+ Model.prototype.useSoftDelete = function () {
137
+ this.$db.set('SOFT_DELETE', true);
138
+ return this;
139
+ };
140
+ Model.prototype.useTimestamp = function () {
141
+ this.$db.set('TIMESTAMP', true);
142
+ return this;
143
+ };
144
+ Model.prototype.useTable = function (table) {
145
+ this.$db.set('TABLE_NAME', "`" + table + "`");
146
+ this.$db.get('SELECT', this.$utils().constants('SELECT') + " *");
147
+ this.$db.get('FROM', this.$utils().constants('FROM') + "'");
148
+ return this;
149
+ };
150
+ Model.prototype.disabledSoftDelete = function () {
151
+ this.$db.set('SOFT_DELETE', false);
152
+ return this;
153
+ };
154
+ Model.prototype.registry = function (func) {
155
+ this.$db.set('REGISTRY', __assign(__assign({}, func), { attach: this._attach, detach: this._detach }));
156
+ return this;
157
+ };
158
+ Model.prototype.withQuery = function (name, callback) {
159
+ var relation = this.$db.get('WITH').find(function (data) { return data.name === name; });
160
+ if (relation == null)
161
+ throw new Error("relation " + name + " not be register !");
162
+ if (!Object.values(this.$utils().constants('RELATIONSHIP')).includes(relation.relation))
163
+ throw new Error("unknow relationship in [" + this.$utils().constants('RELATIONSHIP') + "] !");
164
+ relation.query = callback(new relation.model());
165
+ return this;
166
+ };
167
+ Model.prototype.with = function () {
168
+ var _this = this;
169
+ var nameRelations = [];
170
+ for (var _i = 0; _i < arguments.length; _i++) {
171
+ nameRelations[_i] = arguments[_i];
172
+ }
173
+ var relations = nameRelations.map(function (name) {
174
+ var _a;
175
+ var relation = (_a = _this.$db.get('RELATION')) === null || _a === void 0 ? void 0 : _a.find(function (data) { return data.name === name; });
176
+ if (relation == null)
177
+ throw new Error("relation " + name + " not be register !");
178
+ if (!Object.values(_this.$utils().constants('RELATIONSHIP')).includes(relation.relation))
179
+ throw new Error("unknow relationship in [" + _this.$utils().constants('RELATIONSHIP') + "] !");
180
+ relation.query = new relation.model();
181
+ return relation;
182
+ });
183
+ relations.sort(function (cur, prev) { return cur.relation.length - prev.relation.length; });
184
+ this.$db.set('WITH', relations);
185
+ return this;
186
+ };
187
+ Model.prototype.withExists = function () {
188
+ var nameRelations = [];
189
+ for (var _i = 0; _i < arguments.length; _i++) {
190
+ nameRelations[_i] = arguments[_i];
191
+ }
192
+ this.with.apply(this, __spreadArray([], __read(nameRelations), false));
193
+ this.$db.set('WITH_EXISTS', true);
194
+ return this;
195
+ };
196
+ Model.prototype.whereUser = function (id) {
197
+ var column = this._isPatternSnakeCase() ? 'user_id' : 'userId';
198
+ var operator = '=';
199
+ id = this.$utils().escape(id);
200
+ if (!this.$db.get('WHERE').includes(this.$utils().constants('WHERE'))) {
201
+ this.$db.set('WHERE', this.$utils().constants('WHERE') + " " + column + " " + operator + " '" + id + "'");
202
+ return this;
203
+ }
204
+ this.$db.set('WHERE', this.$db.get('WHERE') + " " + this.$utils().constants('AND') + " " + column + " " + operator + " '" + id + "'");
205
+ return this;
206
+ };
207
+ Model.prototype.hasOne = function (_a) {
208
+ var name = _a.name, as = _a.as, model = _a.model, pk = _a.pk, fk = _a.fk, freezeTable = _a.freezeTable;
209
+ var relation = {
210
+ name: name,
211
+ model: model,
212
+ as: as,
213
+ relation: this.$utils().constants('RELATIONSHIP').hasOne,
214
+ pk: pk,
215
+ fk: fk,
216
+ freezeTable: freezeTable,
217
+ query: null
218
+ };
219
+ this.$db.set('RELATION', __spreadArray(__spreadArray([], __read(this.$db.get('RELATION')), false), [relation], false));
220
+ return this;
221
+ };
222
+ Model.prototype.hasMany = function (_a) {
223
+ var name = _a.name, as = _a.as, model = _a.model, pk = _a.pk, fk = _a.fk, freezeTable = _a.freezeTable;
224
+ var relation = {
225
+ name: name,
226
+ model: model,
227
+ as: as,
228
+ relation: this.$utils().constants('RELATIONSHIP').hasMany,
229
+ pk: pk,
230
+ fk: fk,
231
+ freezeTable: freezeTable,
232
+ query: null
233
+ };
234
+ this.$db.set('RELATION', __spreadArray(__spreadArray([], __read(this.$db.get('RELATION')), false), [relation], false));
235
+ return this;
236
+ };
237
+ Model.prototype.belongsTo = function (_a) {
238
+ var name = _a.name, as = _a.as, model = _a.model, pk = _a.pk, fk = _a.fk, freezeTable = _a.freezeTable;
239
+ var relation = {
240
+ name: name,
241
+ as: as,
242
+ model: model,
243
+ relation: this.$utils().constants('RELATIONSHIP').belongsTo,
244
+ pk: pk,
245
+ fk: fk,
246
+ freezeTable: freezeTable,
247
+ query: null
248
+ };
249
+ this.$db.set('RELATION', __spreadArray(__spreadArray([], __read(this.$db.get('RELATION')), false), [relation], false));
250
+ return this;
251
+ };
252
+ Model.prototype.belongsToMany = function (_a) {
253
+ var name = _a.name, as = _a.as, model = _a.model, pk = _a.pk, fk = _a.fk, freezeTable = _a.freezeTable;
254
+ var relation = {
255
+ name: name,
256
+ model: model,
257
+ as: as,
258
+ relation: this.$utils().constants('RELATIONSHIP').belongsToMany,
259
+ pk: pk,
260
+ fk: fk,
261
+ freezeTable: freezeTable,
262
+ query: null
263
+ };
264
+ this.$db.set('RELATION', __spreadArray(__spreadArray([], __read(this.$db.get('RELATION')), false), [relation], false));
265
+ return this;
266
+ };
267
+ Model.prototype.trashed = function () {
268
+ return __awaiter(this, void 0, void 0, function () {
269
+ var sql;
270
+ return __generator(this, function (_a) {
271
+ switch (_a.label) {
272
+ case 0:
273
+ this.whereNotNull(this._isPatternSnakeCase() ? 'deleted_at' : 'deletedAt');
274
+ sql = this._getSQLModel();
275
+ return [4 /*yield*/, this._exec(sql, 'GET')];
276
+ case 1: return [2 /*return*/, _a.sent()];
277
+ }
278
+ });
279
+ });
280
+ };
281
+ Model.prototype.onlyTrashed = function () {
282
+ return __awaiter(this, void 0, void 0, function () {
283
+ var sql;
284
+ return __generator(this, function (_a) {
285
+ switch (_a.label) {
286
+ case 0:
287
+ this.whereNotNull(this._isPatternSnakeCase() ? 'deleted_at' : 'deletedAt');
288
+ sql = this._getSQLModel();
289
+ return [4 /*yield*/, this._exec(sql, 'GET')];
290
+ case 1: return [2 /*return*/, _a.sent()];
291
+ }
292
+ });
293
+ });
294
+ };
295
+ Model.prototype.restore = function () {
296
+ return __awaiter(this, void 0, void 0, function () {
297
+ var updatedAt, deletedAt, query;
298
+ return __generator(this, function (_a) {
299
+ updatedAt = this._isPatternSnakeCase() ? 'updated_at' : 'updatedAt';
300
+ deletedAt = this._isPatternSnakeCase() ? 'deleted_at' : 'deletedAt';
301
+ query = this.$db.get('TIMESTAMP') ? deletedAt + " = NULL , " + updatedAt + " = '" + this.$utils().timestamp() + "'" : deletedAt + " = NULL";
302
+ this.$db.set('UPDATE', this.$utils().constants('UPDATE') + " " + this.$db.get('TABLE_NAME') + " SET " + query);
303
+ this.$db.set('SAVE', 'UPDATE');
304
+ return [2 /*return*/, this.save()];
305
+ });
306
+ });
307
+ };
308
+ /**
309
+ *
310
+ * @Override Method
311
+ *
312
+ */
313
+ Model.prototype.toString = function () {
314
+ return this._getSQLModel();
315
+ };
316
+ /**
317
+ *
318
+ * @Override Method
319
+ *
320
+ */
321
+ Model.prototype.toSQL = function () {
322
+ return this._getSQLModel();
323
+ };
324
+ /**
325
+ *
326
+ * @Override Method
327
+ *
328
+ */
329
+ Model.prototype.toJSON = function () {
330
+ return __awaiter(this, void 0, void 0, function () {
331
+ var sql, result;
332
+ return __generator(this, function (_a) {
333
+ switch (_a.label) {
334
+ case 0:
335
+ sql = this._getSQLModel();
336
+ return [4 /*yield*/, this._queryStatementModel(sql)];
337
+ case 1:
338
+ result = _a.sent();
339
+ if (this.$db.get('HIDDEN').length)
340
+ this._hiddenColumnModel(result);
341
+ return [2 /*return*/, JSON.stringify(result) || []];
342
+ }
343
+ });
344
+ });
345
+ };
346
+ /**
347
+ *
348
+ * @Override Method
349
+ *
350
+ */
351
+ Model.prototype.toArray = function (column) {
352
+ if (column === void 0) { column = 'id'; }
353
+ return __awaiter(this, void 0, void 0, function () {
354
+ var sql, result, toArray;
355
+ return __generator(this, function (_a) {
356
+ switch (_a.label) {
357
+ case 0:
358
+ this.$db.set('SELECT', this.$utils().constants('SELECT') + " " + column);
359
+ sql = this._getSQLModel();
360
+ return [4 /*yield*/, this._queryStatementModel(sql)];
361
+ case 1:
362
+ result = _a.sent();
363
+ toArray = result.map(function (data) { return data[column]; });
364
+ return [2 /*return*/, toArray];
365
+ }
366
+ });
367
+ });
368
+ };
369
+ /**
370
+ *
371
+ * @Override Method
372
+ *
373
+ */
374
+ Model.prototype.avg = function (column) {
375
+ var _a;
376
+ if (column === void 0) { column = 'id'; }
377
+ return __awaiter(this, void 0, void 0, function () {
378
+ var sql, result;
379
+ return __generator(this, function (_b) {
380
+ switch (_b.label) {
381
+ case 0:
382
+ this.$db.set('SELECT', this.$utils().constants('SELECT') + " " + this.$utils().constants('AVG') + "(" + column + ") " + this.$utils().constants('AS') + " avg");
383
+ sql = this._getSQLModel();
384
+ return [4 /*yield*/, this._queryStatementModel(sql)];
385
+ case 1:
386
+ result = _b.sent();
387
+ return [2 /*return*/, ((_a = result.shift()) === null || _a === void 0 ? void 0 : _a.avg) || 0];
388
+ }
389
+ });
390
+ });
391
+ };
392
+ /**
393
+ *
394
+ * @Override Method
395
+ *
396
+ */
397
+ Model.prototype.sum = function (column) {
398
+ var _a;
399
+ if (column === void 0) { column = 'id'; }
400
+ return __awaiter(this, void 0, void 0, function () {
401
+ var sql, result;
402
+ return __generator(this, function (_b) {
403
+ switch (_b.label) {
404
+ case 0:
405
+ this.$db.set('SELECT', this.$utils().constants('SELECT') + " " + this.$utils().constants('SUM') + "(" + column + ") " + this.$utils().constants('AS') + " sum");
406
+ sql = this._getSQLModel();
407
+ return [4 /*yield*/, this._queryStatementModel(sql)];
408
+ case 1:
409
+ result = _b.sent();
410
+ return [2 /*return*/, ((_a = result.shift()) === null || _a === void 0 ? void 0 : _a.sum) || 0];
411
+ }
412
+ });
413
+ });
414
+ };
415
+ /**
416
+ *
417
+ * @Override Method
418
+ *
419
+ */
420
+ Model.prototype.max = function (column) {
421
+ var _a;
422
+ if (column === void 0) { column = 'id'; }
423
+ return __awaiter(this, void 0, void 0, function () {
424
+ var sql, result;
425
+ return __generator(this, function (_b) {
426
+ switch (_b.label) {
427
+ case 0:
428
+ this.$db.set('SELECT', this.$utils().constants('SELECT') + " " + this.$utils().constants('MAX') + "(" + column + ") " + this.$utils().constants('AS') + " max");
429
+ sql = this._getSQLModel();
430
+ return [4 /*yield*/, this._queryStatementModel(sql)];
431
+ case 1:
432
+ result = _b.sent();
433
+ return [2 /*return*/, ((_a = result.shift()) === null || _a === void 0 ? void 0 : _a.max) || 0];
434
+ }
435
+ });
436
+ });
437
+ };
438
+ /**
439
+ *
440
+ * @Override Method
441
+ *
442
+ */
443
+ Model.prototype.min = function (column) {
444
+ var _a;
445
+ if (column === void 0) { column = 'id'; }
446
+ return __awaiter(this, void 0, void 0, function () {
447
+ var sql, result;
448
+ return __generator(this, function (_b) {
449
+ switch (_b.label) {
450
+ case 0:
451
+ this.$db.set('SELECT', this.$utils().constants('SELECT') + " " + this.$utils().constants('MIN') + "(" + column + ") " + this.$utils().constants('AS') + " min");
452
+ sql = this._getSQLModel();
453
+ return [4 /*yield*/, this._queryStatementModel(sql)];
454
+ case 1:
455
+ result = _b.sent();
456
+ return [2 /*return*/, ((_a = result.shift()) === null || _a === void 0 ? void 0 : _a.min) || 0];
457
+ }
458
+ });
459
+ });
460
+ };
461
+ /**
462
+ *
463
+ * @Override Method
464
+ *
465
+ */
466
+ Model.prototype.count = function (column) {
467
+ var _a;
468
+ if (column === void 0) { column = 'id'; }
469
+ return __awaiter(this, void 0, void 0, function () {
470
+ var sql, result;
471
+ return __generator(this, function (_b) {
472
+ switch (_b.label) {
473
+ case 0:
474
+ this.$db.set('SELECT', this.$utils().constants('SELECT') + " " + this.$utils().constants('COUNT') + "(" + column + ") " + this.$utils().constants('AS') + " total");
475
+ sql = this._getSQLModel();
476
+ return [4 /*yield*/, this._queryStatementModel(sql)];
477
+ case 1:
478
+ result = _b.sent();
479
+ return [2 /*return*/, ((_a = result.shift()) === null || _a === void 0 ? void 0 : _a.total) || 0];
480
+ }
481
+ });
482
+ });
483
+ };
484
+ /**
485
+ *
486
+ * @Override Method
487
+ *
488
+ */
489
+ Model.prototype.delete = function () {
490
+ var _a, _b;
491
+ return __awaiter(this, void 0, void 0, function () {
492
+ var deletedAt, query, sql, updatedAt, result_1, result;
493
+ return __generator(this, function (_c) {
494
+ switch (_c.label) {
495
+ case 0:
496
+ if (!this.$db.get('WHERE'))
497
+ throw new Error("Can't delete without where condition");
498
+ if (!this.$db.get('SOFT_DELETE')) return [3 /*break*/, 2];
499
+ deletedAt = this._isPatternSnakeCase() ? 'deleted_at' : 'deletedAt';
500
+ query = deletedAt + " = '" + this.$utils().timestamp() + "'";
501
+ sql = this.$utils().constants('UPDATE') + " " + this.$db.get('TABLE_NAME') + " " + this.$utils().constants('SET') + " " + query;
502
+ if (this.$db.get('TIMESTAMP')) {
503
+ updatedAt = this._isPatternSnakeCase() ? 'updated_at' : 'updatedAt';
504
+ sql = sql + " , " + updatedAt + " = '" + this.$utils().timestamp() + "'";
505
+ }
506
+ this.$db.set('UPDATE', sql + " " + this.$db.get('WHERE'));
507
+ return [4 /*yield*/, this._actionStatementModel({ sql: this.$db.get('UPDATE') })];
508
+ case 1:
509
+ result_1 = _c.sent();
510
+ return [2 /*return*/, (_a = !!result_1) !== null && _a !== void 0 ? _a : false];
511
+ case 2:
512
+ this.$db.set('DELETE', this.$utils().constants('DELETE') + " " + this.$db.get('FROM') + " " + this.$db.get('TABLE_NAME') + " " + this.$db.get('WHERE'));
513
+ return [4 /*yield*/, this._actionStatementModel({ sql: this.$db.get('DELETE') })];
514
+ case 3:
515
+ result = _c.sent();
516
+ return [2 /*return*/, (_b = !!result) !== null && _b !== void 0 ? _b : false];
517
+ }
518
+ });
519
+ });
520
+ };
521
+ /**
522
+ *
523
+ * @Override Method
524
+ *
525
+ */
526
+ Model.prototype.first = function () {
527
+ var _a;
528
+ return __awaiter(this, void 0, void 0, function () {
529
+ var sql;
530
+ return __generator(this, function (_b) {
531
+ switch (_b.label) {
532
+ case 0:
533
+ if (!((_a = this.$db.get('EXCEPT')) === null || _a === void 0 ? void 0 : _a.length)) return [3 /*break*/, 2];
534
+ return [4 /*yield*/, this._exceptColumns()];
535
+ case 1:
536
+ _b.sent();
537
+ _b.label = 2;
538
+ case 2:
539
+ sql = this._getSQLModel();
540
+ if (!sql.includes(this.$utils().constants('LIMIT')))
541
+ sql = sql + " " + this.$utils().constants('LIMIT') + " 1";
542
+ else
543
+ sql = sql.replace(this.$db.get('LIMIT'), this.$utils().constants('LIMIT') + " 1");
544
+ return [4 /*yield*/, this._exec(sql, 'FIRST')];
545
+ case 3: return [2 /*return*/, _b.sent()];
546
+ }
547
+ });
548
+ });
549
+ };
550
+ /**
551
+ *
552
+ * @Override Method
553
+ *
554
+ */
555
+ Model.prototype.all = function () {
556
+ return __awaiter(this, void 0, void 0, function () {
557
+ var sql, result;
558
+ return __generator(this, function (_a) {
559
+ switch (_a.label) {
560
+ case 0:
561
+ sql = this.$utils().constants('SELECT') + " * " + this.$utils().constants('FROM') + " " + this.$db.get('TABLE_NAME');
562
+ return [4 /*yield*/, this._queryStatementModel(sql)];
563
+ case 1:
564
+ result = _a.sent();
565
+ return [2 /*return*/, result];
566
+ }
567
+ });
568
+ });
569
+ };
570
+ /**
571
+ *
572
+ * @Override Method
573
+ *
574
+ */
575
+ Model.prototype.find = function (id) {
576
+ return __awaiter(this, void 0, void 0, function () {
577
+ var sql, result;
578
+ return __generator(this, function (_a) {
579
+ switch (_a.label) {
580
+ case 0:
581
+ sql = this.$utils().constants('SELECT') + " * " + this.$utils().constants('FROM') + " " + this.$db.get('TABLE_NAME') + " " + this.$utils().constants('WHERE') + " id = " + id;
582
+ return [4 /*yield*/, this._queryStatementModel(sql)];
583
+ case 1:
584
+ result = _a.sent();
585
+ return [2 /*return*/, result.shift() || null];
586
+ }
587
+ });
588
+ });
589
+ };
590
+ /**
591
+ *
592
+ * @Override Method
593
+ *
594
+ */
595
+ Model.prototype.findOne = function () {
596
+ var _a;
597
+ return __awaiter(this, void 0, void 0, function () {
598
+ var sql;
599
+ return __generator(this, function (_b) {
600
+ switch (_b.label) {
601
+ case 0:
602
+ if (!((_a = this.$db.get('EXCEPT')) === null || _a === void 0 ? void 0 : _a.length)) return [3 /*break*/, 2];
603
+ return [4 /*yield*/, this._exceptColumns()];
604
+ case 1:
605
+ _b.sent();
606
+ _b.label = 2;
607
+ case 2:
608
+ sql = this._getSQLModel();
609
+ if (!sql.includes(this.$utils().constants('LIMIT')))
610
+ sql = sql + " " + this.$utils().constants('LIMIT') + " 1";
611
+ else
612
+ sql = sql.replace(this.$db.get('LIMIT'), this.$utils().constants('LIMIT') + " 1");
613
+ return [4 /*yield*/, this._exec(sql, 'FIRST')];
614
+ case 3: return [2 /*return*/, _b.sent()];
615
+ }
616
+ });
617
+ });
618
+ };
619
+ /**
620
+ *
621
+ * @Override Method
622
+ *
623
+ */
624
+ Model.prototype.get = function () {
625
+ var _a;
626
+ return __awaiter(this, void 0, void 0, function () {
627
+ var sql;
628
+ return __generator(this, function (_b) {
629
+ switch (_b.label) {
630
+ case 0:
631
+ if (!((_a = this.$db.get('EXCEPT')) === null || _a === void 0 ? void 0 : _a.length)) return [3 /*break*/, 2];
632
+ return [4 /*yield*/, this._exceptColumns()];
633
+ case 1:
634
+ _b.sent();
635
+ _b.label = 2;
636
+ case 2:
637
+ sql = this._getSQLModel();
638
+ return [4 /*yield*/, this._exec(sql, 'GET')];
639
+ case 3: return [2 /*return*/, _b.sent()];
640
+ }
641
+ });
642
+ });
643
+ };
644
+ /**
645
+ *
646
+ * @Override Method
647
+ *
648
+ */
649
+ Model.prototype.findMany = function () {
650
+ var _a;
651
+ return __awaiter(this, void 0, void 0, function () {
652
+ var sql;
653
+ return __generator(this, function (_b) {
654
+ switch (_b.label) {
655
+ case 0:
656
+ if (!((_a = this.$db.get('EXCEPT')) === null || _a === void 0 ? void 0 : _a.length)) return [3 /*break*/, 2];
657
+ return [4 /*yield*/, this._exceptColumns()];
658
+ case 1:
659
+ _b.sent();
660
+ _b.label = 2;
661
+ case 2:
662
+ sql = this._getSQLModel();
663
+ return [4 /*yield*/, this._exec(sql, 'GET')];
664
+ case 3: return [2 /*return*/, _b.sent()];
665
+ }
666
+ });
667
+ });
668
+ };
669
+ /**
670
+ *
671
+ * @Override Method
672
+ *
673
+ */
674
+ Model.prototype.pagination = function (_a) {
675
+ var _b, _c;
676
+ var _d = _a === void 0 ? {} : _a, _e = _d.limit, limit = _e === void 0 ? 15 : _e, _f = _d.page, page = _f === void 0 ? 1 : _f;
677
+ return __awaiter(this, void 0, void 0, function () {
678
+ var offset, sql;
679
+ return __generator(this, function (_g) {
680
+ switch (_g.label) {
681
+ case 0:
682
+ if ((_b = this.$logger) === null || _b === void 0 ? void 0 : _b.check('limit'))
683
+ throw new Error("this [pagination] can't used [limit] method");
684
+ if (!((_c = this.$db.get('EXCEPT')) === null || _c === void 0 ? void 0 : _c.length)) return [3 /*break*/, 2];
685
+ return [4 /*yield*/, this._exceptColumns()];
686
+ case 1:
687
+ _g.sent();
688
+ _g.label = 2;
689
+ case 2:
690
+ offset = (page - 1) * limit;
691
+ this.$db.set('PER_PAGE', limit);
692
+ this.$db.set('PAGE', page);
693
+ sql = this._getSQLModel();
694
+ if (!sql.includes(this.$utils().constants('LIMIT')))
695
+ sql = sql + " " + this.$utils().constants('LIMIT') + " " + limit + " " + this.$utils().constants('OFFSET') + " " + offset;
696
+ else
697
+ sql = sql.replace(this.$db.get('LIMIT'), this.$utils().constants('LIMIT') + " " + limit + " " + this.$utils().constants('OFFSET') + " " + offset);
698
+ return [4 /*yield*/, this._exec(sql, 'PAGINATION')];
699
+ case 3: return [2 /*return*/, _g.sent()];
700
+ }
701
+ });
702
+ });
703
+ };
704
+ Model.prototype.paginate = function (_a) {
705
+ var _b, _c;
706
+ var _d = _a === void 0 ? {} : _a, _e = _d.limit, limit = _e === void 0 ? 15 : _e, _f = _d.page, page = _f === void 0 ? 1 : _f;
707
+ return __awaiter(this, void 0, void 0, function () {
708
+ var offset, sql;
709
+ return __generator(this, function (_g) {
710
+ switch (_g.label) {
711
+ case 0:
712
+ if ((_b = this.$logger) === null || _b === void 0 ? void 0 : _b.check('limit'))
713
+ throw new Error("this [pagination] can't used [limit] method");
714
+ if (!((_c = this.$db.get('EXCEPT')) === null || _c === void 0 ? void 0 : _c.length)) return [3 /*break*/, 2];
715
+ return [4 /*yield*/, this._exceptColumns()];
716
+ case 1:
717
+ _g.sent();
718
+ _g.label = 2;
719
+ case 2:
720
+ offset = (page - 1) * limit;
721
+ this.$db.set('PER_PAGE', limit);
722
+ this.$db.set('PAGE', page);
723
+ sql = this._getSQLModel();
724
+ if (!sql.includes(this.$utils().constants('LIMIT')))
725
+ sql = sql + " " + this.$utils().constants('LIMIT') + " " + limit + " " + this.$utils().constants('OFFSET') + " " + offset;
726
+ else
727
+ sql = sql.replace(this.$db.get('LIMIT'), this.$utils().constants('LIMIT') + " " + limit + " " + this.$utils().constants('OFFSET') + " " + offset);
728
+ return [4 /*yield*/, this._exec(sql, 'PAGINATION')];
729
+ case 3: return [2 /*return*/, _g.sent()];
730
+ }
731
+ });
732
+ });
733
+ };
734
+ /**
735
+ *
736
+ * @Override Method
737
+ *
738
+ */
739
+ Model.prototype.getGroupBy = function (column) {
740
+ var _a;
741
+ return __awaiter(this, void 0, void 0, function () {
742
+ var sql, results, data, sqlChild, childData, child, resultData;
743
+ return __generator(this, function (_b) {
744
+ switch (_b.label) {
745
+ case 0:
746
+ if (!((_a = this.$db.get('EXCEPT')) === null || _a === void 0 ? void 0 : _a.length)) return [3 /*break*/, 2];
747
+ return [4 /*yield*/, this._exceptColumns()];
748
+ case 1:
749
+ _b.sent();
750
+ _b.label = 2;
751
+ case 2:
752
+ this.$db.set('GROUP_BY', this.$utils().constants('GROUP_BY') + " " + column);
753
+ this.$db.set('SELECT', this.$db.get('SELECT') + ", " + this.$utils().constants('GROUP_CONCAT') + "(id) " + this.$utils().constants('AS') + " data");
754
+ sql = this._getSQLModel();
755
+ return [4 /*yield*/, this._queryStatementModel(sql)];
756
+ case 3:
757
+ results = _b.sent();
758
+ data = [];
759
+ results.forEach(function (result) {
760
+ var _a, _b;
761
+ var splits = (_b = (_a = result === null || result === void 0 ? void 0 : result.data) === null || _a === void 0 ? void 0 : _a.split(',')) !== null && _b !== void 0 ? _b : '0';
762
+ splits.forEach(function (split) { return data = __spreadArray(__spreadArray([], __read(data), false), [split], false); });
763
+ });
764
+ sqlChild = this.$utils().constants('SELECT') + " * " + this.$utils().constants('FROM') + " " + this.$db.get('TABLE_NAME') + " " + this.$utils().constants('WHERE') + " id " + this.$utils().constants('IN') + " (" + (data.map(function (a) { return "'" + a + "'"; }).join(',') || ['0']) + ")";
765
+ return [4 /*yield*/, this._queryStatementModel(sqlChild)];
766
+ case 4:
767
+ childData = _b.sent();
768
+ return [4 /*yield*/, this._execGroup(childData)];
769
+ case 5:
770
+ child = _b.sent();
771
+ resultData = results.map(function (result) {
772
+ var _a;
773
+ var id = result[column];
774
+ var newData = child.filter(function (data) { return data[column] === id; });
775
+ return (_a = {},
776
+ _a[column] = id,
777
+ _a.data = newData,
778
+ _a);
779
+ });
780
+ return [2 /*return*/, resultData];
781
+ }
782
+ });
783
+ });
784
+ };
785
+ /**
786
+ *
787
+ * @Override Method
788
+ *
789
+ */
790
+ Model.prototype.update = function (objects) {
791
+ var query = this._queryUpdateModel(objects);
792
+ this.$db.set('UPDATE', this.$utils().constants('UPDATE') + " " + this.$db.get('TABLE_NAME') + " " + query);
793
+ this.$db.set('SAVE', 'UPDATE');
794
+ return this;
795
+ };
796
+ /**
797
+ *
798
+ * @Override Method
799
+ *
800
+ */
801
+ Model.prototype.insert = function (objects) {
802
+ var query = this._queryInsertModel(objects);
803
+ this.$db.set('INSERT', this.$utils().constants('INSERT') + " " + this.$db.get('TABLE_NAME') + " " + query);
804
+ this.$db.set('SAVE', 'INSERT');
805
+ return this;
806
+ };
807
+ /**
808
+ *
809
+ * @Override Method
810
+ *
811
+ */
812
+ Model.prototype.create = function (objects) {
813
+ var query = this._queryInsertModel(objects);
814
+ this.$db.set('INSERT', this.$utils().constants('INSERT') + " " + this.$db.get('TABLE_NAME') + " " + query);
815
+ this.$db.set('SAVE', 'INSERT');
816
+ return this;
817
+ };
818
+ /**
819
+ *
820
+ * @Override Method
821
+ *
822
+ */
823
+ Model.prototype.updateOrCreate = function (objects) {
824
+ var queryUpdate = this._queryUpdateModel(objects);
825
+ var queryInsert = this._queryInsertModel(objects);
826
+ this.$db.set('INSERT', this.$utils().constants('INSERT') + " " + this.$db.get('TABLE_NAME') + " " + queryInsert);
827
+ this.$db.set('UPDATE', this.$utils().constants('UPDATE') + " " + this.$db.get('TABLE_NAME') + " " + queryUpdate);
828
+ this.$db.set('SAVE', 'UPDATE_OR_INSERT');
829
+ return this;
830
+ };
831
+ Model.prototype.updateOrInsert = function (objects) {
832
+ this.updateOrCreate(objects);
833
+ return this;
834
+ };
835
+ Model.prototype.insertOrUpdate = function (objects) {
836
+ this.updateOrCreate(objects);
837
+ return this;
838
+ };
839
+ Model.prototype.createOrUpdate = function (objects) {
840
+ this.updateOrCreate(objects);
841
+ return this;
842
+ };
843
+ /**
844
+ *
845
+ * @Override Method
846
+ *
847
+ */
848
+ Model.prototype.createMultiple = function (data) {
849
+ var query = this._queryInsertMultipleModel(data);
850
+ this.$db.set('INSERT', this.$utils().constants('INSERT') + " " + this.$db.get('TABLE_NAME') + " " + query);
851
+ this.$db.set('SAVE', 'INSERT_MULTIPLE');
852
+ return this;
853
+ };
854
+ /**
855
+ *
856
+ * @Override Method
857
+ *
858
+ */
859
+ Model.prototype.insertMultiple = function (data) {
860
+ var query = this._queryInsertMultipleModel(data);
861
+ this.$db.set('INSERT', this.$utils().constants('INSERT') + " " + this.$db.get('TABLE_NAME') + " " + query);
862
+ this.$db.set('SAVE', 'INSERT_MULTIPLE');
863
+ return this;
864
+ };
865
+ Model.prototype._queryStatementModel = function (sql) {
866
+ return __awaiter(this, void 0, void 0, function () {
867
+ var CONNECTION, result, err_1;
868
+ return __generator(this, function (_a) {
869
+ switch (_a.label) {
870
+ case 0:
871
+ _a.trys.push([0, 3, , 4]);
872
+ if (this.$db.get('DEBUG'))
873
+ this.$utils().consoleDebug(sql);
874
+ return [4 /*yield*/, this.$utils().connection()];
875
+ case 1:
876
+ CONNECTION = _a.sent();
877
+ return [4 /*yield*/, CONNECTION.query(sql)];
878
+ case 2:
879
+ result = _a.sent();
880
+ this._registry(result);
881
+ return [2 /*return*/, result];
882
+ case 3:
883
+ err_1 = _a.sent();
884
+ throw new Error(err_1.message);
885
+ case 4: return [2 /*return*/];
886
+ }
887
+ });
888
+ });
889
+ };
890
+ Model.prototype._actionStatementModel = function (_a) {
891
+ var _b = _a === void 0 ? {} : _a, sql = _b.sql, _c = _b.returnId, returnId = _c === void 0 ? false : _c;
892
+ return __awaiter(this, void 0, void 0, function () {
893
+ var CONNECTION, result_2, result, err_2;
894
+ return __generator(this, function (_d) {
895
+ switch (_d.label) {
896
+ case 0:
897
+ _d.trys.push([0, 5, , 6]);
898
+ return [4 /*yield*/, this.$utils().connection()];
899
+ case 1:
900
+ CONNECTION = _d.sent();
901
+ if (this.$db.get('DEBUG'))
902
+ this.$utils().consoleDebug(sql);
903
+ if (!returnId) return [3 /*break*/, 3];
904
+ return [4 /*yield*/, CONNECTION.query(sql)];
905
+ case 2:
906
+ result_2 = _d.sent();
907
+ return [2 /*return*/, [result_2.affectedRows, result_2.insertId]];
908
+ case 3: return [4 /*yield*/, CONNECTION.query(sql)];
909
+ case 4:
910
+ result = (_d.sent()).affectedRows;
911
+ return [2 /*return*/, result];
912
+ case 5:
913
+ err_2 = _d.sent();
914
+ throw new Error(err_2.message);
915
+ case 6: return [2 /*return*/];
916
+ }
917
+ });
918
+ });
919
+ };
920
+ Model.prototype._isPatternSnakeCase = function () {
921
+ return this.$db.get('PATTERN') === this.$utils().constants('PATTERN').snake_case;
922
+ };
923
+ Model.prototype._classToTableName = function (className, belongsTo) {
924
+ if (belongsTo === void 0) { belongsTo = false; }
925
+ if (className == null)
926
+ className = this.constructor.name;
927
+ var tb = className.replace(/([A-Z])/g, function (str) { return '_' + str.toLowerCase(); }).slice(1);
928
+ if (belongsTo)
929
+ return tb;
930
+ return (0, pluralize_1.default)(tb);
931
+ };
932
+ Model.prototype._tableName = function () {
933
+ var tb = this._classToTableName();
934
+ this.$db.set('SELECT', this.$utils().constants('SELECT') + " *");
935
+ this.$db.set('FROM', "" + this.$utils().constants('FROM'));
936
+ this.$db.set('TABLE_NAME', "`" + tb + "`");
937
+ return this;
938
+ };
939
+ Model.prototype._valueInRelation = function (data) {
940
+ var _a;
941
+ var relation = data.relation;
942
+ var model = (_a = data.model) === null || _a === void 0 ? void 0 : _a.name;
943
+ var table = data.freezeTable ? data.freezeTable : this._classToTableName(model);
944
+ var name = data.name;
945
+ var as = data.as;
946
+ if (!model || model == null)
947
+ throw new Error('model missing');
948
+ var patternId = this._isPatternSnakeCase() ? '_id' : 'Id';
949
+ var pk = data.pk ? data.pk : 'id';
950
+ var fk = data.fk ? data.fk : this._classToTableName(null, true) + patternId;
951
+ if (data.pk == null && data.fk == null && relation === this.$utils().constants('RELATIONSHIP').belongsTo) {
952
+ fk = pk;
953
+ pk = this._classToTableName(model, true) + patternId;
954
+ }
955
+ return { name: name, as: as, relation: relation, table: table, pk: pk, fk: fk, model: model };
956
+ };
957
+ Model.prototype._getSQLModel = function () {
958
+ var sql = [];
959
+ if (this.$db.get('INSERT')) {
960
+ sql = [
961
+ this.$db.get('INSERT')
962
+ ];
963
+ }
964
+ else if (this.$db.get('UPDATE')) {
965
+ sql = [
966
+ this.$db.get('UPDATE'),
967
+ this.$db.get('WHERE'),
968
+ ];
969
+ }
970
+ else if (this.$db.get('DELETE')) {
971
+ sql = [
972
+ this.$db.get('DELETE')
973
+ ];
974
+ }
975
+ else {
976
+ sql = [
977
+ this.$db.get('SELECT'),
978
+ this.$db.get('FROM'),
979
+ this.$db.get('TABLE_NAME'),
980
+ this.$db.get('JOIN'),
981
+ this.$db.get('WHERE'),
982
+ this.$db.get('GROUP_BY'),
983
+ this.$db.get('HAVING'),
984
+ this.$db.get('ORDER_BY'),
985
+ this.$db.get('LIMIT'),
986
+ this.$db.get('OFFSET')
987
+ ];
988
+ }
989
+ var filterSql = sql.filter(function (data) { return data !== '' || data == null; });
990
+ return filterSql.join(' ');
991
+ };
992
+ Model.prototype._exceptColumns = function () {
993
+ return __awaiter(this, void 0, void 0, function () {
994
+ var sql, rawColumns, columns, removeExcept;
995
+ var _this = this;
996
+ return __generator(this, function (_a) {
997
+ switch (_a.label) {
998
+ case 0:
999
+ sql = this.$utils().constants('SHOW') + " " + this.$utils().constants('COLUMNS') + " " + this.$utils().constants('FROM') + " " + this.$db.get('TABLE_NAME');
1000
+ return [4 /*yield*/, this._queryStatementModel(sql)];
1001
+ case 1:
1002
+ rawColumns = _a.sent();
1003
+ columns = rawColumns.map(function (column) { return column.Field; });
1004
+ removeExcept = columns.filter(function (column) { return !_this.$db.get('EXCEPT').includes(column); });
1005
+ this.select(removeExcept.join(','));
1006
+ return [2 /*return*/, this];
1007
+ }
1008
+ });
1009
+ });
1010
+ };
1011
+ Model.prototype._showOnly = function (data) {
1012
+ var _this = this;
1013
+ var result = [];
1014
+ var hasNameRelation = this.$db.get('WITH').map(function (w) { var _a; return (_a = w.as) !== null && _a !== void 0 ? _a : w.name; });
1015
+ data.forEach(function (d) {
1016
+ var newData = {};
1017
+ _this.$db.get('ONLY').forEach(function (only) {
1018
+ var _a;
1019
+ if (d.hasOwnProperty(only))
1020
+ newData = __assign(__assign({}, newData), (_a = {}, _a[only] = d[only], _a));
1021
+ });
1022
+ hasNameRelation.forEach(function (name) {
1023
+ var _a;
1024
+ if (name)
1025
+ newData = __assign(__assign({}, newData), (_a = {}, _a[name] = d[name], _a));
1026
+ });
1027
+ result = __spreadArray(__spreadArray([], __read(result), false), [newData], false);
1028
+ });
1029
+ return result;
1030
+ };
1031
+ Model.prototype._exec = function (sql, type) {
1032
+ return __awaiter(this, void 0, void 0, function () {
1033
+ var mains, emptyData, relations, relations_1, relations_1_1, relation, subs, e_1_1, resultData, err_3;
1034
+ var e_1, _a;
1035
+ return __generator(this, function (_b) {
1036
+ switch (_b.label) {
1037
+ case 0:
1038
+ _b.trys.push([0, 12, , 13]);
1039
+ return [4 /*yield*/, this._queryStatementModel(sql)];
1040
+ case 1:
1041
+ mains = _b.sent();
1042
+ emptyData = this._returnEmpty(type, mains);
1043
+ if (!mains.length)
1044
+ return [2 /*return*/, emptyData];
1045
+ relations = this.$db.get('WITH');
1046
+ if (!relations.length) return [3 /*break*/, 11];
1047
+ _b.label = 2;
1048
+ case 2:
1049
+ _b.trys.push([2, 9, 10, 11]);
1050
+ relations_1 = __values(relations), relations_1_1 = relations_1.next();
1051
+ _b.label = 3;
1052
+ case 3:
1053
+ if (!!relations_1_1.done) return [3 /*break*/, 8];
1054
+ relation = relations_1_1.value;
1055
+ if (!(relation.relation === this.$utils().constants('RELATIONSHIP').belongsToMany)) return [3 /*break*/, 5];
1056
+ return [4 /*yield*/, this._belongsToMany(type, mains, relation)];
1057
+ case 4:
1058
+ mains = _b.sent();
1059
+ return [3 /*break*/, 7];
1060
+ case 5: return [4 /*yield*/, this._relation(mains, relation)];
1061
+ case 6:
1062
+ subs = _b.sent();
1063
+ mains = this._relationFilter(mains, subs, relation);
1064
+ _b.label = 7;
1065
+ case 7:
1066
+ relations_1_1 = relations_1.next();
1067
+ return [3 /*break*/, 3];
1068
+ case 8: return [3 /*break*/, 11];
1069
+ case 9:
1070
+ e_1_1 = _b.sent();
1071
+ e_1 = { error: e_1_1 };
1072
+ return [3 /*break*/, 11];
1073
+ case 10:
1074
+ try {
1075
+ if (relations_1_1 && !relations_1_1.done && (_a = relations_1.return)) _a.call(relations_1);
1076
+ }
1077
+ finally { if (e_1) throw e_1.error; }
1078
+ return [7 /*endfinally*/];
1079
+ case 11:
1080
+ if (this.$db.get('HIDDEN').length)
1081
+ this._hiddenColumnModel(mains);
1082
+ resultData = this._returnResult(type, mains);
1083
+ return [2 /*return*/, resultData || emptyData];
1084
+ case 12:
1085
+ err_3 = _b.sent();
1086
+ throw new Error(err_3.message);
1087
+ case 13: return [2 /*return*/];
1088
+ }
1089
+ });
1090
+ });
1091
+ };
1092
+ Model.prototype._execGroup = function (mains, type) {
1093
+ var _a;
1094
+ if (type === void 0) { type = 'GET'; }
1095
+ return __awaiter(this, void 0, void 0, function () {
1096
+ var emptyData, relations, relations_2, relations_2_1, relation, subs, e_2_1, resultData;
1097
+ var e_2, _b;
1098
+ return __generator(this, function (_c) {
1099
+ switch (_c.label) {
1100
+ case 0:
1101
+ emptyData = this._returnEmpty(type, mains);
1102
+ if (!mains.length)
1103
+ return [2 /*return*/, emptyData];
1104
+ relations = this.$db.get('WITH');
1105
+ if (!relations.length) return [3 /*break*/, 8];
1106
+ _c.label = 1;
1107
+ case 1:
1108
+ _c.trys.push([1, 6, 7, 8]);
1109
+ relations_2 = __values(relations), relations_2_1 = relations_2.next();
1110
+ _c.label = 2;
1111
+ case 2:
1112
+ if (!!relations_2_1.done) return [3 /*break*/, 5];
1113
+ relation = relations_2_1.value;
1114
+ if (relation.relation === this.$utils().constants('RELATIONSHIP').belongsToMany)
1115
+ return [2 /*return*/, this._belongsToMany(type, mains, relation)];
1116
+ return [4 /*yield*/, this._relation(mains, relation)];
1117
+ case 3:
1118
+ subs = _c.sent();
1119
+ mains = this._relationFilter(mains, subs, relation);
1120
+ _c.label = 4;
1121
+ case 4:
1122
+ relations_2_1 = relations_2.next();
1123
+ return [3 /*break*/, 2];
1124
+ case 5: return [3 /*break*/, 8];
1125
+ case 6:
1126
+ e_2_1 = _c.sent();
1127
+ e_2 = { error: e_2_1 };
1128
+ return [3 /*break*/, 8];
1129
+ case 7:
1130
+ try {
1131
+ if (relations_2_1 && !relations_2_1.done && (_b = relations_2.return)) _b.call(relations_2);
1132
+ }
1133
+ finally { if (e_2) throw e_2.error; }
1134
+ return [7 /*endfinally*/];
1135
+ case 8:
1136
+ if ((_a = this.$db.get('HIDDEN')) === null || _a === void 0 ? void 0 : _a.length)
1137
+ this._hiddenColumnModel(mains);
1138
+ resultData = this._returnResult(type, mains);
1139
+ return [2 /*return*/, resultData || emptyData];
1140
+ }
1141
+ });
1142
+ });
1143
+ };
1144
+ Model.prototype._relationFilter = function (mains, subs, relations) {
1145
+ var _this = this;
1146
+ var _a = this._valueInRelation(relations), name = _a.name, as = _a.as, relation = _a.relation, pk = _a.pk, fk = _a.fk;
1147
+ var keyRelation = as !== null && as !== void 0 ? as : name;
1148
+ mains.forEach(function (main) {
1149
+ if (relation === _this.$utils().constants('RELATIONSHIP').hasOne || relation === _this.$utils().constants('RELATIONSHIP').belongsTo)
1150
+ main[keyRelation] = null;
1151
+ else
1152
+ main[keyRelation] = [];
1153
+ if (subs.length) {
1154
+ subs.forEach(function (sub) {
1155
+ if (sub[fk] === main[pk]) {
1156
+ if (relation === _this.$utils().constants('RELATIONSHIP').hasOne || relation === _this.$utils().constants('RELATIONSHIP').belongsTo) {
1157
+ main[keyRelation] = main[keyRelation] || sub;
1158
+ }
1159
+ else {
1160
+ if (main[keyRelation] == null)
1161
+ main[keyRelation] = [];
1162
+ main[keyRelation].push(sub);
1163
+ }
1164
+ }
1165
+ });
1166
+ }
1167
+ });
1168
+ if (this.$db.get('WITH_EXISTS')) {
1169
+ return mains.filter(function (main) {
1170
+ if (Array.isArray(main[keyRelation]))
1171
+ return main[keyRelation].length;
1172
+ return main[keyRelation] != null;
1173
+ });
1174
+ }
1175
+ return mains;
1176
+ };
1177
+ Model.prototype._relation = function (mains, relations) {
1178
+ return __awaiter(this, void 0, void 0, function () {
1179
+ var _a, pk, fk, pkId, mainId, query, subs;
1180
+ return __generator(this, function (_b) {
1181
+ switch (_b.label) {
1182
+ case 0:
1183
+ if (!Object.keys(relations).length)
1184
+ return [2 /*return*/, []];
1185
+ _a = this._valueInRelation(relations), pk = _a.pk, fk = _a.fk;
1186
+ pkId = mains.map(function (main) { return main[pk]; }).filter(function (data) { return data != null; });
1187
+ mainId = Array.from(new Set(pkId)) || [];
1188
+ if (!mainId.length && !this.$db.get('WITH_EXISTS'))
1189
+ throw new Error("can't relationship without primary or foreign key");
1190
+ if (!mainId.length && this.$db.get('WITH_EXISTS'))
1191
+ return [2 /*return*/, []];
1192
+ return [4 /*yield*/, relations.query];
1193
+ case 1:
1194
+ query = _b.sent();
1195
+ return [4 /*yield*/, query.whereIn(fk, mainId).debug(this.$db.get('DEBUG')).get()];
1196
+ case 2:
1197
+ subs = _b.sent();
1198
+ return [2 /*return*/, subs];
1199
+ }
1200
+ });
1201
+ });
1202
+ };
1203
+ Model.prototype._belongsToMany = function (type, mains, dataRelation) {
1204
+ var _a, _b;
1205
+ return __awaiter(this, void 0, void 0, function () {
1206
+ var _c, name_1, pk_1, fk_1, pkId, mainId, local, modelOther, other_1, pivotTable, otherPk_1, otherFk_1, sqlSubs, subs_1, otherId, otherArrId, otherSubs_1, err_4, _d, name_2, pk_2, fk_2, pkId, mainId, local, modelOther, other_2, pivotTable, otherPk_2, otherFk_2, sqlSubs, subs_2, otherId, otherArrId, otherSubs_2, err_5;
1207
+ return __generator(this, function (_e) {
1208
+ switch (_e.label) {
1209
+ case 0:
1210
+ _e.trys.push([0, 3, , 9]);
1211
+ _c = this._valueInRelation(dataRelation), name_1 = _c.name, pk_1 = _c.pk, fk_1 = _c.fk;
1212
+ pkId = mains.map(function (main) { return main[pk_1]; }).filter(function (data) { return data != null; });
1213
+ mainId = Array.from(new Set(pkId)).join(',') || [];
1214
+ if (!mainId.length)
1215
+ throw new Error("can't relationship without primary or foreign key");
1216
+ local = this.$utils().columnRelation(this.constructor.name);
1217
+ modelOther = new dataRelation.model();
1218
+ other_1 = this._classToTableName(modelOther.constructor.name, true);
1219
+ pivotTable = (_a = dataRelation.freezeTable) !== null && _a !== void 0 ? _a : local + "_" + other_1;
1220
+ pk_1 = 'id';
1221
+ fk_1 = this._isPatternSnakeCase() ? local + "_id" : local + "Id";
1222
+ otherPk_1 = 'id';
1223
+ otherFk_1 = this._isPatternSnakeCase() ? other_1 + "_id" : other_1 + "Id";
1224
+ sqlSubs = this.$utils().constants('SELECT') + " * " + this.$utils().constants('FROM') + " " + pivotTable + " " + this.$utils().constants('WHERE') + " " + fk_1 + " " + this.$utils().constants('IN') + " (" + mainId + ")";
1225
+ return [4 /*yield*/, this._queryStatementModel(sqlSubs)];
1226
+ case 1:
1227
+ subs_1 = _e.sent();
1228
+ otherId = subs_1.map(function (sub) { return sub[otherFk_1]; }).filter(function (data) { return data != null; });
1229
+ otherArrId = Array.from(new Set(otherId)) || [];
1230
+ return [4 /*yield*/, modelOther.whereIn(otherPk_1, otherArrId).get()];
1231
+ case 2:
1232
+ otherSubs_1 = _e.sent();
1233
+ subs_1.forEach(function (sub) {
1234
+ sub[other_1] = [];
1235
+ otherSubs_1.forEach(function (otherSub) {
1236
+ if (otherSub[otherPk_1] === sub[otherFk_1]) {
1237
+ sub[other_1] = otherSub;
1238
+ }
1239
+ });
1240
+ });
1241
+ mains.forEach(function (main) {
1242
+ if (main[name_1] == null)
1243
+ main[name_1] = [];
1244
+ subs_1.forEach(function (sub) {
1245
+ if (sub[fk_1] === main[pk_1]) {
1246
+ main[name_1].push(sub);
1247
+ }
1248
+ });
1249
+ });
1250
+ if (this.$db.get('HIDDEN').length)
1251
+ this._hiddenColumnModel(mains);
1252
+ return [2 /*return*/, mains];
1253
+ case 3:
1254
+ err_4 = _e.sent();
1255
+ _e.label = 4;
1256
+ case 4:
1257
+ _e.trys.push([4, 7, , 8]);
1258
+ _d = this._valueInRelation(dataRelation), name_2 = _d.name, pk_2 = _d.pk, fk_2 = _d.fk;
1259
+ pkId = mains.map(function (main) { return main[pk_2]; }).filter(function (data) { return data != null; });
1260
+ mainId = Array.from(new Set(pkId)).join(',') || [];
1261
+ if (!mainId.length)
1262
+ throw new Error("can't relationship without primary or foreign key");
1263
+ local = this.$utils().columnRelation(this.constructor.name);
1264
+ modelOther = new dataRelation.model();
1265
+ other_2 = modelOther.constructor.name.toLocaleLowerCase();
1266
+ pivotTable = (_b = dataRelation.freezeTable) !== null && _b !== void 0 ? _b : other_2 + "_" + local;
1267
+ pk_2 = 'id';
1268
+ fk_2 = this._isPatternSnakeCase() ? local + "_id" : local + "Id";
1269
+ otherPk_2 = 'id';
1270
+ otherFk_2 = this._isPatternSnakeCase() ? other_2 + "_id" : other_2 + "Id";
1271
+ sqlSubs = this.$utils().constants('SELECT') + " * " + this.$utils().constants('FROM') + " " + pivotTable + " " + this.$utils().constants('WHERE') + " " + fk_2 + " " + this.$utils().constants('IN') + " (" + mainId + ")";
1272
+ return [4 /*yield*/, this._queryStatementModel(sqlSubs)];
1273
+ case 5:
1274
+ subs_2 = _e.sent();
1275
+ otherId = subs_2.map(function (sub) { return sub[otherFk_2]; }).filter(function (data) { return data != null; });
1276
+ otherArrId = Array.from(new Set(otherId)) || [];
1277
+ return [4 /*yield*/, this._queryStatementModel(modelOther
1278
+ .whereIn(otherPk_2, otherArrId)
1279
+ .toString())];
1280
+ case 6:
1281
+ otherSubs_2 = _e.sent();
1282
+ subs_2.forEach(function (sub) {
1283
+ otherSubs_2.forEach(function (otherSub) {
1284
+ if (otherSub[otherPk_2] === sub[otherFk_2]) {
1285
+ sub[other_2] = otherSub;
1286
+ }
1287
+ });
1288
+ });
1289
+ mains.forEach(function (main) {
1290
+ if (main[name_2] == null)
1291
+ main[name_2] = [];
1292
+ subs_2.forEach(function (sub) {
1293
+ if (sub[fk_2] === main[pk_2]) {
1294
+ main[name_2].push(sub);
1295
+ }
1296
+ });
1297
+ });
1298
+ if (this.$db.get('HIDDEN').length)
1299
+ this._hiddenColumnModel(mains);
1300
+ return [2 /*return*/, mains];
1301
+ case 7:
1302
+ err_5 = _e.sent();
1303
+ throw new Error(err_5.message);
1304
+ case 8: return [3 /*break*/, 9];
1305
+ case 9: return [2 /*return*/];
1306
+ }
1307
+ });
1308
+ });
1309
+ };
1310
+ Model.prototype._pagination = function (data) {
1311
+ var _a;
1312
+ return __awaiter(this, void 0, void 0, function () {
1313
+ var currentPage, sql, res, total, limit, lastPage, nextPage, prevPage, totalPage, meta;
1314
+ return __generator(this, function (_b) {
1315
+ switch (_b.label) {
1316
+ case 0:
1317
+ currentPage = this.$db.get('PAGE');
1318
+ this.select(this.$utils().constants('COUNT') + "(*) " + this.$utils().constants('AS') + " total");
1319
+ sql = this._getSQLModel();
1320
+ return [4 /*yield*/, this._queryStatementModel(sql)];
1321
+ case 1:
1322
+ res = _b.sent();
1323
+ total = res.shift().total || 0;
1324
+ limit = this.$db.get('PER_PAGE');
1325
+ lastPage = Math.ceil(total / limit) || 0;
1326
+ lastPage = lastPage > 1 ? lastPage : 1;
1327
+ nextPage = currentPage + 1;
1328
+ prevPage = currentPage - 1 === 0 ? 1 : currentPage - 1;
1329
+ totalPage = (_a = data === null || data === void 0 ? void 0 : data.length) !== null && _a !== void 0 ? _a : 0;
1330
+ meta = {
1331
+ total: total,
1332
+ limit: limit,
1333
+ totalPage: totalPage,
1334
+ currentPage: currentPage,
1335
+ lastPage: lastPage,
1336
+ nextPage: nextPage,
1337
+ prevPage: prevPage,
1338
+ };
1339
+ if (this._isPatternSnakeCase()) {
1340
+ return [2 /*return*/, this.$utils().snakeCase(this._result({
1341
+ meta: meta,
1342
+ data: data
1343
+ }))];
1344
+ }
1345
+ return [2 /*return*/, this._result({
1346
+ meta: meta,
1347
+ data: data
1348
+ })];
1349
+ }
1350
+ });
1351
+ });
1352
+ };
1353
+ Model.prototype._result = function (data) {
1354
+ this.$db.get('RESULT', data);
1355
+ return data;
1356
+ };
1357
+ Model.prototype._returnEmpty = function (type, data) {
1358
+ var emptyData = null;
1359
+ switch (type) {
1360
+ case 'FIRST': {
1361
+ emptyData = null;
1362
+ break;
1363
+ }
1364
+ case 'GET': {
1365
+ emptyData = [];
1366
+ break;
1367
+ }
1368
+ case 'PAGINATION': {
1369
+ emptyData = {
1370
+ meta: {
1371
+ total: 0,
1372
+ limit: this.$db.get('PER_PAGE'),
1373
+ totalPage: 0,
1374
+ currentPage: this.$db.get('PAGE'),
1375
+ lastPage: 0,
1376
+ nextPage: 0,
1377
+ prevPage: 0
1378
+ },
1379
+ data: []
1380
+ };
1381
+ break;
1382
+ }
1383
+ default: {
1384
+ throw new Error('Missing method first get or pagination');
1385
+ }
1386
+ }
1387
+ if (this._isPatternSnakeCase())
1388
+ return this.$utils().snakeCase(this._result(emptyData));
1389
+ return this._result(emptyData);
1390
+ };
1391
+ Model.prototype._returnResult = function (type, data) {
1392
+ var _this = this;
1393
+ var _a, _b, _c;
1394
+ if ((_a = Object.keys(this.$db.get('REGISTRY'))) === null || _a === void 0 ? void 0 : _a.length) {
1395
+ data === null || data === void 0 ? void 0 : data.forEach(function (d) {
1396
+ for (var name in _this.$db.get('REGISTRY')) {
1397
+ var registry = _this.$db.get('REGISTRY');
1398
+ d[name] = registry[name];
1399
+ }
1400
+ });
1401
+ }
1402
+ if ((_b = this.$db.get('ONLY')) === null || _b === void 0 ? void 0 : _b.length) {
1403
+ data = this._showOnly(data);
1404
+ }
1405
+ switch (type) {
1406
+ case 'FIRST': return this._result((_c = data[0]) !== null && _c !== void 0 ? _c : {});
1407
+ case 'GET': return this._result(data);
1408
+ case 'PAGINATION': return this._pagination(data);
1409
+ default: throw new Error('Missing method first get or pagination');
1410
+ }
1411
+ };
1412
+ Model.prototype._hiddenColumnModel = function (object) {
1413
+ var hidden = this.$db.get('HIDDEN');
1414
+ if (object === null || object === void 0 ? void 0 : object.length) {
1415
+ hidden.forEach(function (column) {
1416
+ object.forEach(function (objColumn) {
1417
+ delete objColumn[column];
1418
+ });
1419
+ });
1420
+ }
1421
+ return object;
1422
+ };
1423
+ Model.prototype._attach = function (name, dataId, fields) {
1424
+ var _a;
1425
+ return __awaiter(this, void 0, void 0, function () {
1426
+ var relation, thisTable, relationTable, result, pivotTable, success, e_3, errorTable, search, pivotTable, success, e_4;
1427
+ var _this = this;
1428
+ return __generator(this, function (_b) {
1429
+ switch (_b.label) {
1430
+ case 0:
1431
+ if (!Array.isArray(dataId))
1432
+ throw new Error("this " + dataId + " is not an array");
1433
+ relation = (_a = this.$db.get('RELATION')) === null || _a === void 0 ? void 0 : _a.find(function (data) { return data.name === name; });
1434
+ if (!relation)
1435
+ throw new Error("unknow name relation [" + name + "] in model");
1436
+ thisTable = this.$utils().columnRelation(this.constructor.name);
1437
+ relationTable = this._classToTableName(relation.model.name, true);
1438
+ result = this.$db.get('RESULT');
1439
+ _b.label = 1;
1440
+ case 1:
1441
+ _b.trys.push([1, 3, , 8]);
1442
+ pivotTable = thisTable + "_" + relationTable;
1443
+ return [4 /*yield*/, new DB_1.default().table(pivotTable).createMultiple(dataId.map(function (id) {
1444
+ var _a;
1445
+ return __assign((_a = {}, _a[_this._isPatternSnakeCase() ? relationTable + "_id" : relationTable + "Id"] = id, _a[_this._isPatternSnakeCase() ? thisTable + "_id" : thisTable + "Id"] = result === null || result === void 0 ? void 0 : result.id, _a), fields);
1446
+ })).save()];
1447
+ case 2:
1448
+ success = _b.sent();
1449
+ return [2 /*return*/, success];
1450
+ case 3:
1451
+ e_3 = _b.sent();
1452
+ errorTable = e_3.message;
1453
+ search = errorTable.search("ER_NO_SUCH_TABLE");
1454
+ if (!!search)
1455
+ throw new Error(e_3.message);
1456
+ _b.label = 4;
1457
+ case 4:
1458
+ _b.trys.push([4, 6, , 7]);
1459
+ pivotTable = relationTable + "_" + thisTable;
1460
+ return [4 /*yield*/, new DB_1.default().table(pivotTable).createMultiple(dataId.map(function (id) {
1461
+ var _a;
1462
+ return __assign((_a = {}, _a[_this._isPatternSnakeCase() ? relationTable + "_id" : relationTable + "Id"] = id, _a[_this._isPatternSnakeCase() ? thisTable + "_id" : thisTable + "Id"] = result.id, _a), fields);
1463
+ })).save()];
1464
+ case 5:
1465
+ success = _b.sent();
1466
+ return [2 /*return*/, success];
1467
+ case 6:
1468
+ e_4 = _b.sent();
1469
+ throw new Error(e_4.message);
1470
+ case 7: return [3 /*break*/, 8];
1471
+ case 8: return [2 /*return*/];
1472
+ }
1473
+ });
1474
+ });
1475
+ };
1476
+ Model.prototype._detach = function (name, dataId) {
1477
+ return __awaiter(this, void 0, void 0, function () {
1478
+ var relation, thisTable, relationTable, result, pivotTable, dataId_1, dataId_1_1, id, e_5_1, e_6, errorTable, search, pivotTable, dataId_2, dataId_2_1, id, e_7_1, e_8;
1479
+ var e_5, _a, e_7, _b;
1480
+ return __generator(this, function (_c) {
1481
+ switch (_c.label) {
1482
+ case 0:
1483
+ if (!Array.isArray(dataId))
1484
+ throw new Error("this " + dataId + " is not an array");
1485
+ relation = this.$db.get('RELATION').find(function (data) { return data.name === name; });
1486
+ if (!relation)
1487
+ throw new Error("unknow name relation [" + name + "] in model");
1488
+ thisTable = this.$utils().columnRelation(this.constructor.name);
1489
+ relationTable = this._classToTableName(relation.model.name, true);
1490
+ result = this.$db.get('RESULT');
1491
+ _c.label = 1;
1492
+ case 1:
1493
+ _c.trys.push([1, 10, , 22]);
1494
+ pivotTable = thisTable + "_" + relationTable;
1495
+ _c.label = 2;
1496
+ case 2:
1497
+ _c.trys.push([2, 7, 8, 9]);
1498
+ dataId_1 = __values(dataId), dataId_1_1 = dataId_1.next();
1499
+ _c.label = 3;
1500
+ case 3:
1501
+ if (!!dataId_1_1.done) return [3 /*break*/, 6];
1502
+ id = dataId_1_1.value;
1503
+ return [4 /*yield*/, new DB_1.default().table(pivotTable)
1504
+ .where(this._isPatternSnakeCase() ? relationTable + "_id" : relationTable + "Id", id)
1505
+ .where(this._isPatternSnakeCase() ? thisTable + "_id" : thisTable + "Id", result.id)
1506
+ .delete()];
1507
+ case 4:
1508
+ _c.sent();
1509
+ _c.label = 5;
1510
+ case 5:
1511
+ dataId_1_1 = dataId_1.next();
1512
+ return [3 /*break*/, 3];
1513
+ case 6: return [3 /*break*/, 9];
1514
+ case 7:
1515
+ e_5_1 = _c.sent();
1516
+ e_5 = { error: e_5_1 };
1517
+ return [3 /*break*/, 9];
1518
+ case 8:
1519
+ try {
1520
+ if (dataId_1_1 && !dataId_1_1.done && (_a = dataId_1.return)) _a.call(dataId_1);
1521
+ }
1522
+ finally { if (e_5) throw e_5.error; }
1523
+ return [7 /*endfinally*/];
1524
+ case 9: return [2 /*return*/, true];
1525
+ case 10:
1526
+ e_6 = _c.sent();
1527
+ errorTable = e_6.message;
1528
+ search = errorTable.search("ER_NO_SUCH_TABLE");
1529
+ if (!!search)
1530
+ throw new Error(e_6.message);
1531
+ _c.label = 11;
1532
+ case 11:
1533
+ _c.trys.push([11, 20, , 21]);
1534
+ pivotTable = relationTable + "_" + thisTable;
1535
+ _c.label = 12;
1536
+ case 12:
1537
+ _c.trys.push([12, 17, 18, 19]);
1538
+ dataId_2 = __values(dataId), dataId_2_1 = dataId_2.next();
1539
+ _c.label = 13;
1540
+ case 13:
1541
+ if (!!dataId_2_1.done) return [3 /*break*/, 16];
1542
+ id = dataId_2_1.value;
1543
+ return [4 /*yield*/, new DB_1.default().table(pivotTable)
1544
+ .where(this._isPatternSnakeCase() ? relationTable + "_id" : relationTable + "Id", id)
1545
+ .where(this._isPatternSnakeCase() ? thisTable + "_id" : thisTable + "Id", result.id)
1546
+ .delete()];
1547
+ case 14:
1548
+ _c.sent();
1549
+ _c.label = 15;
1550
+ case 15:
1551
+ dataId_2_1 = dataId_2.next();
1552
+ return [3 /*break*/, 13];
1553
+ case 16: return [3 /*break*/, 19];
1554
+ case 17:
1555
+ e_7_1 = _c.sent();
1556
+ e_7 = { error: e_7_1 };
1557
+ return [3 /*break*/, 19];
1558
+ case 18:
1559
+ try {
1560
+ if (dataId_2_1 && !dataId_2_1.done && (_b = dataId_2.return)) _b.call(dataId_2);
1561
+ }
1562
+ finally { if (e_7) throw e_7.error; }
1563
+ return [7 /*endfinally*/];
1564
+ case 19: return [2 /*return*/, true];
1565
+ case 20:
1566
+ e_8 = _c.sent();
1567
+ throw new Error(e_8.message);
1568
+ case 21: return [3 /*break*/, 22];
1569
+ case 22: return [2 /*return*/];
1570
+ }
1571
+ });
1572
+ });
1573
+ };
1574
+ Model.prototype._queryUpdateModel = function (objects) {
1575
+ var _a;
1576
+ var _this = this;
1577
+ if (this.$db.get('TIMESTAMP')) {
1578
+ var updatedAt = this._isPatternSnakeCase() ? 'updated_at' : 'updatedAt';
1579
+ objects = __assign(__assign({}, objects), (_a = {}, _a[updatedAt] = this.$utils().timestamp(), _a));
1580
+ }
1581
+ var keyValue = Object.entries(objects).map(function (_a) {
1582
+ var _b = __read(_a, 2), column = _b[0], value = _b[1];
1583
+ return column + " = " + (value == null || value === 'NULL' ?
1584
+ 'NULL' :
1585
+ "'" + _this.$utils().covertBooleanToNumber(value) + "'");
1586
+ });
1587
+ return this.$utils().constants('SET') + " " + keyValue;
1588
+ };
1589
+ Model.prototype._queryInsertModel = function (objects) {
1590
+ var _a, _b;
1591
+ var _this = this;
1592
+ if (this.$db.get('TIMESTAMP')) {
1593
+ var createdAt = this._isPatternSnakeCase() ? 'created_at' : 'createdAt';
1594
+ var updatedAt = this._isPatternSnakeCase() ? 'updated_at' : 'updatedAt';
1595
+ objects = __assign(__assign({}, objects), (_a = {}, _a[createdAt] = this.$utils().timestamp(), _a[updatedAt] = this.$utils().timestamp(), _a));
1596
+ }
1597
+ if (this.$db.get('UUID')) {
1598
+ objects = __assign(__assign({}, objects), (_b = {}, _b[this.$db.get('UUID_CUSTOM')] = this.$utils().generateUUID(), _b));
1599
+ }
1600
+ var columns = Object.keys(objects).map(function (data) { return "" + data; });
1601
+ var values = Object.values(objects).map(function (data) {
1602
+ return "" + (data == null || data === 'NULL' ?
1603
+ 'NULL' :
1604
+ "'" + _this.$utils().covertBooleanToNumber(data) + "'");
1605
+ });
1606
+ return "(" + columns + ") " + this.$utils().constants('VALUES') + " (" + values + ")";
1607
+ };
1608
+ Model.prototype._queryInsertMultipleModel = function (data) {
1609
+ var e_9, _a;
1610
+ var _this = this;
1611
+ var _b;
1612
+ var values = [];
1613
+ try {
1614
+ for (var data_1 = __values(data), data_1_1 = data_1.next(); !data_1_1.done; data_1_1 = data_1.next()) {
1615
+ var objects = data_1_1.value;
1616
+ if (this.$db.get('TIMESTAMP')) {
1617
+ var createdAt = this._isPatternSnakeCase() ? 'created_at' : 'createdAt';
1618
+ var updatedAt = this._isPatternSnakeCase() ? 'updated_at' : 'updatedAt';
1619
+ objects[createdAt] = this.$utils().timestamp();
1620
+ objects[updatedAt] = this.$utils().timestamp();
1621
+ }
1622
+ if (this.$db.get('UUID'))
1623
+ objects[this.$db.get('UUID_CUSTOM')] = this.$utils().generateUUID();
1624
+ var val = Object.values(objects).map(function (data) {
1625
+ return "" + (data == null || data === 'NULL' ?
1626
+ 'NULL' :
1627
+ "'" + _this.$utils().covertBooleanToNumber(data) + "'");
1628
+ });
1629
+ values.push("(" + val.join(',') + ")");
1630
+ }
1631
+ }
1632
+ catch (e_9_1) { e_9 = { error: e_9_1 }; }
1633
+ finally {
1634
+ try {
1635
+ if (data_1_1 && !data_1_1.done && (_a = data_1.return)) _a.call(data_1);
1636
+ }
1637
+ finally { if (e_9) throw e_9.error; }
1638
+ }
1639
+ var columns = Object.keys((_b = data[0]) !== null && _b !== void 0 ? _b : []).map(function (data) { return "" + data; });
1640
+ return "(" + columns + ") " + this.$utils().constants('VALUES') + " " + values.join(',');
1641
+ };
1642
+ Model.prototype._registry = function (data) {
1643
+ var _this = this;
1644
+ var _a;
1645
+ if ((_a = Object.keys(this.$db.get('REGISTRY'))) === null || _a === void 0 ? void 0 : _a.length) {
1646
+ data === null || data === void 0 ? void 0 : data.forEach(function (d) {
1647
+ for (var name in _this.$db.get('REGISTRY')) {
1648
+ var registry = _this.$db.get('REGISTRY');
1649
+ d[name] = registry[name];
1650
+ }
1651
+ });
1652
+ }
1653
+ return this;
1654
+ };
1655
+ Model.prototype._insertNotExistsModel = function () {
1656
+ var _a;
1657
+ return __awaiter(this, void 0, void 0, function () {
1658
+ var sql, check, _b, result, _c, _d, result_3, id, sql_1, data;
1659
+ return __generator(this, function (_e) {
1660
+ switch (_e.label) {
1661
+ case 0:
1662
+ if (!this.$db.get('WHERE'))
1663
+ throw new Error("Can't insert not exists without where condition");
1664
+ sql = '';
1665
+ check = false;
1666
+ sql = this.$utils().constants('SELECT') + " " + this.$utils().constants('EXISTS') + "(" + this.$utils().constants('SELECT') + " * " + this.$db.get('FROM') + " " + this.$db.get('TABLE_NAME') + " " + this.$db.get('WHERE') + " " + this.$utils().constants('LIMIT') + " 1) " + this.$utils().constants('AS') + " 'exists'";
1667
+ return [4 /*yield*/, this._queryStatementModel(sql)];
1668
+ case 1:
1669
+ _b = __read.apply(void 0, [_e.sent(), 1]), result = _b[0].exists;
1670
+ check = !!parseInt(result);
1671
+ _c = check;
1672
+ switch (_c) {
1673
+ case false: return [3 /*break*/, 2];
1674
+ case true: return [3 /*break*/, 6];
1675
+ }
1676
+ return [3 /*break*/, 7];
1677
+ case 2: return [4 /*yield*/, this._actionStatementModel({ sql: this.$db.get('INSERT'), returnId: true })];
1678
+ case 3:
1679
+ _d = __read.apply(void 0, [_e.sent(), 2]), result_3 = _d[0], id = _d[1];
1680
+ if (this.$db.get('TRANSACTION')) {
1681
+ (_a = this.$db.get('TRANSACTION')) === null || _a === void 0 ? void 0 : _a.query.push({
1682
+ table: this.$db.get('TABLE_NAME'),
1683
+ id: id
1684
+ });
1685
+ }
1686
+ if (!result_3) return [3 /*break*/, 5];
1687
+ sql_1 = this.$db.get('SELECT') + " " + this.$db.get('FROM') + " " + this.$db.get('TABLE_NAME') + " " + this.$utils().constants('WHERE') + " id = " + id;
1688
+ return [4 /*yield*/, this._queryStatementModel(sql_1)];
1689
+ case 4:
1690
+ data = _e.sent();
1691
+ return [2 /*return*/, (data === null || data === void 0 ? void 0 : data.shift()) || null];
1692
+ case 5: return [2 /*return*/, null];
1693
+ case 6:
1694
+ {
1695
+ return [2 /*return*/, null];
1696
+ }
1697
+ _e.label = 7;
1698
+ case 7:
1699
+ {
1700
+ return [2 /*return*/, null];
1701
+ }
1702
+ _e.label = 8;
1703
+ case 8: return [2 /*return*/];
1704
+ }
1705
+ });
1706
+ });
1707
+ };
1708
+ Model.prototype._createModel = function () {
1709
+ var _a;
1710
+ return __awaiter(this, void 0, void 0, function () {
1711
+ var _b, result, id, sql, data, result_4;
1712
+ return __generator(this, function (_c) {
1713
+ switch (_c.label) {
1714
+ case 0: return [4 /*yield*/, this._actionStatementModel({ sql: this.$db.get('INSERT'), returnId: true })];
1715
+ case 1:
1716
+ _b = __read.apply(void 0, [_c.sent(), 2]), result = _b[0], id = _b[1];
1717
+ if (this.$db.get('TRANSACTION')) {
1718
+ (_a = this.$db.get('TRANSACTION')) === null || _a === void 0 ? void 0 : _a.query.push({
1719
+ table: this.$db.get('TABLE_NAME'),
1720
+ id: id
1721
+ });
1722
+ }
1723
+ if (!result) return [3 /*break*/, 3];
1724
+ sql = this.$db.get('SELECT') + " " + this.$db.get('FROM') + " " + this.$db.get('TABLE_NAME') + " " + this.$utils().constants('WHERE') + " id = " + id;
1725
+ return [4 /*yield*/, this._queryStatementModel(sql)];
1726
+ case 2:
1727
+ data = _c.sent();
1728
+ result_4 = (data === null || data === void 0 ? void 0 : data.shift()) || null;
1729
+ this.$db.set('RESULT', result_4);
1730
+ return [2 /*return*/, result_4];
1731
+ case 3: return [2 /*return*/, null];
1732
+ }
1733
+ });
1734
+ });
1735
+ };
1736
+ Model.prototype._createMultipleModel = function () {
1737
+ var _a;
1738
+ return __awaiter(this, void 0, void 0, function () {
1739
+ var _b, result, id, arrayId, arrayId_1, arrayId_1_1, id_1, sql, data, resultData;
1740
+ var e_10, _c;
1741
+ return __generator(this, function (_d) {
1742
+ switch (_d.label) {
1743
+ case 0: return [4 /*yield*/, this._actionStatementModel({ sql: this.$db.get('INSERT'), returnId: true })];
1744
+ case 1:
1745
+ _b = __read.apply(void 0, [_d.sent(), 2]), result = _b[0], id = _b[1];
1746
+ if (!result) return [3 /*break*/, 3];
1747
+ arrayId = __spreadArray([], __read(Array(result)), false).map(function (_, i) { return i + id; });
1748
+ try {
1749
+ for (arrayId_1 = __values(arrayId), arrayId_1_1 = arrayId_1.next(); !arrayId_1_1.done; arrayId_1_1 = arrayId_1.next()) {
1750
+ id_1 = arrayId_1_1.value;
1751
+ if (this.$db.get('TRANSACTION')) {
1752
+ (_a = this.$db.get('TRANSACTION')) === null || _a === void 0 ? void 0 : _a.query.push({
1753
+ table: this.$db.get('TABLE_NAME'),
1754
+ id: id_1
1755
+ });
1756
+ }
1757
+ }
1758
+ }
1759
+ catch (e_10_1) { e_10 = { error: e_10_1 }; }
1760
+ finally {
1761
+ try {
1762
+ if (arrayId_1_1 && !arrayId_1_1.done && (_c = arrayId_1.return)) _c.call(arrayId_1);
1763
+ }
1764
+ finally { if (e_10) throw e_10.error; }
1765
+ }
1766
+ sql = this.$db.get('SELECT') + " " + this.$db.get('FROM') + " " + this.$db.get('TABLE_NAME') + " " + this.$utils().constants('WHERE') + " id " + this.$utils().constants('IN') + " (" + arrayId + ")";
1767
+ return [4 /*yield*/, this._queryStatementModel(sql)];
1768
+ case 2:
1769
+ data = _d.sent();
1770
+ resultData = data || null;
1771
+ this.$db.set('RESULT', resultData);
1772
+ return [2 /*return*/, resultData];
1773
+ case 3: return [2 /*return*/, null];
1774
+ }
1775
+ });
1776
+ });
1777
+ };
1778
+ Model.prototype._updateOrInsertModel = function () {
1779
+ var _a;
1780
+ return __awaiter(this, void 0, void 0, function () {
1781
+ var sql, check, _b, result, _c, _d, result_5, id, sql_2, data, resultData, result_6, data, data_2, data_2_1, val;
1782
+ var e_11, _e;
1783
+ return __generator(this, function (_f) {
1784
+ switch (_f.label) {
1785
+ case 0:
1786
+ if (!this.$db.get('WHERE'))
1787
+ throw new Error("Can't update or insert without where condition");
1788
+ sql = '';
1789
+ check = false;
1790
+ sql = this.$utils().constants('SELECT') + " " + this.$utils().constants('EXISTS') + "(" + this.$utils().constants('SELECT') + " * " + this.$db.get('FROM') + " " + this.$db.get('TABLE_NAME') + " " + this.$db.get('WHERE') + " " + this.$utils().constants('LIMIT') + " 1) " + this.$utils().constants('AS') + " 'exists'";
1791
+ return [4 /*yield*/, this._queryStatementModel(sql)];
1792
+ case 1:
1793
+ _b = __read.apply(void 0, [_f.sent(), 1]), result = _b[0].exists;
1794
+ check = !!parseInt(result);
1795
+ _c = check;
1796
+ switch (_c) {
1797
+ case false: return [3 /*break*/, 2];
1798
+ case true: return [3 /*break*/, 6];
1799
+ }
1800
+ return [3 /*break*/, 10];
1801
+ case 2: return [4 /*yield*/, this._actionStatementModel({ sql: this.$db.get('INSERT'), returnId: true })];
1802
+ case 3:
1803
+ _d = __read.apply(void 0, [_f.sent(), 2]), result_5 = _d[0], id = _d[1];
1804
+ if (this.$db.get('TRANSACTION')) {
1805
+ (_a = this.$db.get('TRANSACTION')) === null || _a === void 0 ? void 0 : _a.query.push({
1806
+ table: this.$db.get('TABLE_NAME'),
1807
+ id: id
1808
+ });
1809
+ }
1810
+ if (!result_5) return [3 /*break*/, 5];
1811
+ sql_2 = this.$db.get('SELECT') + " " + this.$db.get('FROM') + " " + this.$db.get('TABLE_NAME') + " " + this.$utils().constants('WHERE') + " id = " + id;
1812
+ return [4 /*yield*/, this._queryStatementModel(sql_2)];
1813
+ case 4:
1814
+ data = _f.sent();
1815
+ resultData = __assign(__assign({}, data === null || data === void 0 ? void 0 : data.shift()), { action_status: 'insert' }) || null;
1816
+ this.$db.set('RESULT', resultData);
1817
+ return [2 /*return*/, resultData];
1818
+ case 5: return [2 /*return*/, null];
1819
+ case 6: return [4 /*yield*/, this._actionStatementModel({ sql: this.$db.get('UPDATE') + " " + this.$db.get('WHERE') })];
1820
+ case 7:
1821
+ result_6 = _f.sent();
1822
+ if (!result_6) return [3 /*break*/, 9];
1823
+ return [4 /*yield*/, this._queryStatementModel(this.$db.get('SELECT') + " " + this.$db.get('FROM') + " " + this.$db.get('TABLE_NAME') + " " + this.$db.get('WHERE'))];
1824
+ case 8:
1825
+ data = _f.sent();
1826
+ if ((data === null || data === void 0 ? void 0 : data.length) > 1) {
1827
+ try {
1828
+ for (data_2 = __values(data), data_2_1 = data_2.next(); !data_2_1.done; data_2_1 = data_2.next()) {
1829
+ val = data_2_1.value;
1830
+ val.action_status = 'update';
1831
+ }
1832
+ }
1833
+ catch (e_11_1) { e_11 = { error: e_11_1 }; }
1834
+ finally {
1835
+ try {
1836
+ if (data_2_1 && !data_2_1.done && (_e = data_2.return)) _e.call(data_2);
1837
+ }
1838
+ finally { if (e_11) throw e_11.error; }
1839
+ }
1840
+ return [2 /*return*/, data || []];
1841
+ }
1842
+ return [2 /*return*/, __assign(__assign({}, data === null || data === void 0 ? void 0 : data.shift()), { action_status: 'update' }) || null];
1843
+ case 9: return [2 /*return*/, null];
1844
+ case 10:
1845
+ {
1846
+ return [2 /*return*/, null];
1847
+ }
1848
+ _f.label = 11;
1849
+ case 11: return [2 /*return*/];
1850
+ }
1851
+ });
1852
+ });
1853
+ };
1854
+ Model.prototype._updateModel = function (ignoreWhere) {
1855
+ if (ignoreWhere === void 0) { ignoreWhere = false; }
1856
+ return __awaiter(this, void 0, void 0, function () {
1857
+ var result, data, res;
1858
+ return __generator(this, function (_a) {
1859
+ switch (_a.label) {
1860
+ case 0:
1861
+ if (!this.$db.get('WHERE') && !ignoreWhere)
1862
+ throw new Error("Can't update without where condition");
1863
+ return [4 /*yield*/, this._actionStatementModel({ sql: this.$db.get('UPDATE') + " " + this.$db.get('WHERE') })];
1864
+ case 1:
1865
+ result = _a.sent();
1866
+ if (!result) return [3 /*break*/, 3];
1867
+ return [4 /*yield*/, this._queryStatementModel(this.$db.get('SELECT') + " " + this.$db.get('FROM') + " " + this.$db.get('TABLE_NAME') + " " + this.$db.get('WHERE'))];
1868
+ case 2:
1869
+ data = _a.sent();
1870
+ if ((data === null || data === void 0 ? void 0 : data.length) > 1)
1871
+ return [2 /*return*/, data || []];
1872
+ res = (data === null || data === void 0 ? void 0 : data.shift()) || null;
1873
+ this.$db.set('RESULT', res);
1874
+ return [2 /*return*/, res];
1875
+ case 3: return [2 /*return*/, null];
1876
+ }
1877
+ });
1878
+ });
1879
+ };
1880
+ /**
1881
+ *
1882
+ * @Override Method
1883
+ *
1884
+ */
1885
+ Model.prototype.save = function (transaction) {
1886
+ var _a;
1887
+ if (transaction === void 0) { transaction = { query: [{ table: '', id: '' }] }; }
1888
+ return __awaiter(this, void 0, void 0, function () {
1889
+ var attributes, query_1, query, _b;
1890
+ return __generator(this, function (_c) {
1891
+ switch (_c.label) {
1892
+ case 0:
1893
+ this.$db.set('TRANSACTION', transaction);
1894
+ attributes = this.$attributes;
1895
+ if ((_a = Object.keys(attributes)) === null || _a === void 0 ? void 0 : _a.length) {
1896
+ if (this.$db.get('WHERE')) {
1897
+ query_1 = this._queryUpdateModel(attributes);
1898
+ this.$db.set('UPDATE', this.$utils().constants('UPDATE') + " " + this.$db.get('TABLE_NAME') + " " + query_1);
1899
+ this.$db.set('SAVE', 'UPDATE');
1900
+ return [2 /*return*/];
1901
+ }
1902
+ query = this._queryInsertModel(attributes);
1903
+ this.$db.set('INSERT', this.$utils().constants('INSERT') + " " + this.$db.get('TABLE_NAME') + " " + query);
1904
+ this.$db.set('SAVE', 'INSERT');
1905
+ }
1906
+ _b = this.$db.get('SAVE');
1907
+ switch (_b) {
1908
+ case 'INSERT_MULTIPLE': return [3 /*break*/, 1];
1909
+ case 'INSERT': return [3 /*break*/, 3];
1910
+ case 'UPDATE': return [3 /*break*/, 5];
1911
+ case 'INSERT_NOT_EXISTS': return [3 /*break*/, 7];
1912
+ case 'UPDATE_OR_INSERT': return [3 /*break*/, 9];
1913
+ }
1914
+ return [3 /*break*/, 11];
1915
+ case 1: return [4 /*yield*/, this._createMultipleModel()];
1916
+ case 2: return [2 /*return*/, _c.sent()];
1917
+ case 3: return [4 /*yield*/, this._createModel()];
1918
+ case 4: return [2 /*return*/, _c.sent()];
1919
+ case 5: return [4 /*yield*/, this._updateModel()];
1920
+ case 6: return [2 /*return*/, _c.sent()];
1921
+ case 7: return [4 /*yield*/, this._insertNotExistsModel()];
1922
+ case 8: return [2 /*return*/, _c.sent()];
1923
+ case 9: return [4 /*yield*/, this._updateOrInsertModel()];
1924
+ case 10: return [2 /*return*/, _c.sent()];
1925
+ case 11: throw new Error("unknow this [" + this.$db.get('SAVE') + "]");
1926
+ }
1927
+ });
1928
+ });
1929
+ };
1930
+ /**
1931
+ *
1932
+ * @Override Method
1933
+ *
1934
+ */
1935
+ Model.prototype.faker = function (rounds) {
1936
+ if (rounds === void 0) { rounds = 1; }
1937
+ return __awaiter(this, void 0, void 0, function () {
1938
+ var data, round, sql, fields, columnAndValue, fields_1, fields_1_1, _a, field, type, query;
1939
+ var e_12, _b, _c;
1940
+ return __generator(this, function (_d) {
1941
+ switch (_d.label) {
1942
+ case 0:
1943
+ data = [];
1944
+ round = 0;
1945
+ _d.label = 1;
1946
+ case 1:
1947
+ if (!(round < rounds)) return [3 /*break*/, 4];
1948
+ if (this.$db.get('TABLE_NAME') === '' || this.$db.get('TABLE_NAME') == null)
1949
+ throw new Error("unknow table");
1950
+ sql = this.$utils().constants('SHOW') + " " + this.$utils().constants('FIELDS') + " " + this.$utils().constants('FROM') + " " + this.$db.get('TABLE_NAME');
1951
+ return [4 /*yield*/, this._queryStatementModel(sql)];
1952
+ case 2:
1953
+ fields = _d.sent();
1954
+ columnAndValue = {};
1955
+ try {
1956
+ for (fields_1 = (e_12 = void 0, __values(fields)), fields_1_1 = fields_1.next(); !fields_1_1.done; fields_1_1 = fields_1.next()) {
1957
+ _a = fields_1_1.value, field = _a.Field, type = _a.Type;
1958
+ if (field.toLowerCase() === 'id' || field.toLowerCase() === '_id' || field.toLowerCase() === 'uuid')
1959
+ continue;
1960
+ columnAndValue = __assign(__assign({}, columnAndValue), (_c = {}, _c[field] = this.$utils().faker(type), _c));
1961
+ }
1962
+ }
1963
+ catch (e_12_1) { e_12 = { error: e_12_1 }; }
1964
+ finally {
1965
+ try {
1966
+ if (fields_1_1 && !fields_1_1.done && (_b = fields_1.return)) _b.call(fields_1);
1967
+ }
1968
+ finally { if (e_12) throw e_12.error; }
1969
+ }
1970
+ data = __spreadArray(__spreadArray([], __read(data), false), [columnAndValue], false);
1971
+ _d.label = 3;
1972
+ case 3:
1973
+ round++;
1974
+ return [3 /*break*/, 1];
1975
+ case 4:
1976
+ query = this._queryInsertMultipleModel(data);
1977
+ this.$db.set('INSERT', this.$utils().constants('INSERT') + " " + this.$db.get('TABLE_NAME') + " " + query);
1978
+ this.$db.set('SAVE', 'INSERT_MULTIPLE');
1979
+ return [2 /*return*/, this.save()];
1980
+ }
1981
+ });
1982
+ });
1983
+ };
1984
+ Model.prototype._initModel = function () {
1985
+ this.$db = this._setupModel();
1986
+ this.$logger = this._setupLogger();
1987
+ this._tableName();
1988
+ return this;
1989
+ };
1990
+ Model.prototype._setupLogger = function () {
1991
+ var logger = [];
1992
+ return {
1993
+ get: function () { return logger; },
1994
+ set: function (value) {
1995
+ logger = __spreadArray(__spreadArray([], __read(logger), false), [value], false);
1996
+ return;
1997
+ },
1998
+ check: function (value) { return logger.indexOf(value) != -1; }
1999
+ };
2000
+ };
2001
+ Model.prototype._setupModel = function () {
2002
+ var modelData = {
2003
+ TRANSACTION: { query: [{
2004
+ table: '',
2005
+ id: ''
2006
+ }] },
2007
+ REGISTRY: {},
2008
+ RESULT: null,
2009
+ DISTINCT: '',
2010
+ PLUCK: '',
2011
+ SAVE: '',
2012
+ DELETE: '',
2013
+ UPDATE: '',
2014
+ INSERT: '',
2015
+ SELECT: '',
2016
+ ONLY: [],
2017
+ EXCEPT: [],
2018
+ COUNT: '',
2019
+ FROM: '',
2020
+ JOIN: '',
2021
+ WHERE: '',
2022
+ GROUP_BY: '',
2023
+ ORDER_BY: '',
2024
+ LIMIT: '',
2025
+ OFFSET: '',
2026
+ HAVING: '',
2027
+ TABLE_NAME: '',
2028
+ UUID_CUSTOM: '',
2029
+ PATTERN: 'snake_case',
2030
+ TIMESTAMP: false,
2031
+ HIDDEN: [],
2032
+ DEBUG: false,
2033
+ UUID: false,
2034
+ SOFT_DELETE: false,
2035
+ RELATION: [],
2036
+ DEFAULT_SCOPE: {
2037
+ where: {},
2038
+ whereNot: {},
2039
+ whereNull: {},
2040
+ whereNotNull: {}
2041
+ },
2042
+ WITH: [],
2043
+ WITH_EXISTS: false,
2044
+ PAGE: 1,
2045
+ PER_PAGE: 1
2046
+ };
2047
+ return {
2048
+ get: function (key) {
2049
+ if (key) {
2050
+ if (!modelData.hasOwnProperty(key))
2051
+ throw new Error("can't get this [" + key + "]");
2052
+ return modelData[key];
2053
+ }
2054
+ return modelData;
2055
+ },
2056
+ set: function (key, value) {
2057
+ if (!modelData.hasOwnProperty(key))
2058
+ throw new Error("can't set this [" + key + "]");
2059
+ modelData[key] = value;
2060
+ return;
2061
+ }
2062
+ };
2063
+ };
2064
+ return Model;
2065
+ }(AbstractModel_1.default));
2066
+ exports.default = Model;