tspace-mysql 1.1.2 → 1.1.4

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.
@@ -102,15 +102,24 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
102
102
  };
103
103
  Object.defineProperty(exports, "__esModule", { value: true });
104
104
  exports.Model = void 0;
105
- var AbstractModel_1 = require("./AbstractModel");
106
105
  var pluralize_1 = __importDefault(require("pluralize"));
106
+ var AbstractModel_1 = require("./AbstractModel");
107
107
  var DB_1 = require("./DB");
108
108
  var ProxyHandler_1 = require("./ProxyHandler");
109
109
  var Model = /** @class */ (function (_super) {
110
110
  __extends(Model, _super);
111
111
  function Model() {
112
112
  var _this = _super.call(this) || this;
113
+ /**
114
+ *
115
+ * Get initialize for model
116
+ */
113
117
  _this._initialModel();
118
+ /**
119
+ *
120
+ * Boot Setup for model
121
+ */
122
+ _this.boot();
114
123
  return new Proxy(_this, ProxyHandler_1.proxyHandler);
115
124
  }
116
125
  /**
@@ -133,13 +142,13 @@ var Model = /** @class */ (function (_super) {
133
142
  };
134
143
  /**
135
144
  * Assign in model uuid when creating
136
- * @param {string} uuid custom column uuid
145
+ * @param {string?} column [column=uuid] custom column replace this
137
146
  * @return {this} this
138
147
  */
139
- Model.prototype.useUUID = function (uuid) {
148
+ Model.prototype.useUUID = function (column) {
140
149
  this.$db.set('UUID', true);
141
- if (uuid)
142
- this.$db.set('UUID_FORMAT', uuid);
150
+ if (column)
151
+ this.$db.set('UUID_FORMAT', column);
143
152
  return this;
144
153
  };
145
154
  /**
@@ -161,7 +170,7 @@ var Model = /** @class */ (function (_super) {
161
170
  this.$constants('PATTERN').snake_case,
162
171
  this.$constants('PATTERN').camelCase
163
172
  ];
164
- this._assertError(!allowPattern.includes(pattern), "allow pattern ".concat(allowPattern, " only"));
173
+ this._assertError(!allowPattern.includes(pattern), "tspace-mysql support only pattern [".concat(allowPattern, "]"));
165
174
  this.$db.set('PATTERN', pattern);
166
175
  return this;
167
176
  };
@@ -169,39 +178,37 @@ var Model = /** @class */ (function (_super) {
169
178
  *
170
179
  * Assign in model show data not be deleted
171
180
  * Relations has reference this method
181
+ * @param {string?} column
172
182
  * @return {this} this
173
183
  */
174
- Model.prototype.useSoftDelete = function () {
184
+ Model.prototype.useSoftDelete = function (column) {
175
185
  this.$db.set('SOFT_DELETE', true);
176
- this.$db.set('SOFT_DELETE_RELATIONS', true);
177
- return this;
178
- };
179
- /**
180
- * Assign in model show data not be deleted in relations
181
- * repicate
182
- * @return {this} this
183
- */
184
- Model.prototype.useDisableSoftDeleteInRelations = function () {
185
- this.$db.set('SOFT_DELETE_RELATIONS', false);
186
+ if (column)
187
+ this.$db.set('SOFT_DELETE_FORMAT', column);
186
188
  return this;
187
189
  };
188
190
  /**
189
191
  *
190
192
  * Assign timestamp when insert || updated created_at and update_at in table
193
+ * @param {object} timestampFormat
194
+ * @property {string} timestampFormat.createdAt - change column of created at
195
+ * @property {string} timestampFormat.updatedAt - change column of updated at
191
196
  * @return {this} this
192
197
  */
193
198
  Model.prototype.useTimestamp = function (timestampFormat) {
194
199
  this.$db.set('TIMESTAMP', true);
195
- if (timestampFormat)
200
+ if (timestampFormat) {
196
201
  this.$db.set('TIMESTAMP_FORMAT', {
197
202
  CREATED_AT: timestampFormat.createdAt,
198
203
  UPDATED_AT: timestampFormat.updatedAt
199
204
  });
205
+ }
200
206
  return this;
201
207
  };
202
208
  /**
203
209
  *
204
210
  * Assign table name in model
211
+ * @param {string} table table name in database
205
212
  * @return {this} this
206
213
  */
207
214
  Model.prototype.useTable = function (table) {
@@ -216,7 +223,8 @@ var Model = /** @class */ (function (_super) {
216
223
  * @return {this} this
217
224
  */
218
225
  Model.prototype.useTableSingular = function () {
219
- var table = this._classToTableName(this.constructor.name, { singular: true });
226
+ var _a;
227
+ var table = this._classToTableName((_a = this.constructor) === null || _a === void 0 ? void 0 : _a.name, { singular: true });
220
228
  this.$db.set('TABLE_NAME', "`".concat(pluralize_1.default.singular(table), "`"));
221
229
  this.$db.get('SELECT', "".concat(this.$constants('SELECT'), " *"));
222
230
  this.$db.get('FROM', "".concat(this.$constants('FROM'), "'"));
@@ -228,14 +236,36 @@ var Model = /** @class */ (function (_super) {
228
236
  * @return {this} this
229
237
  */
230
238
  Model.prototype.useTablePlural = function () {
231
- var table = this._classToTableName(this.constructor.name);
239
+ var _a;
240
+ var table = this._classToTableName((_a = this.constructor) === null || _a === void 0 ? void 0 : _a.name);
232
241
  this.$db.set('TABLE_NAME', "`".concat(pluralize_1.default.plural(table), "`"));
233
242
  this.$db.get('SELECT', "".concat(this.$constants('SELECT'), " *"));
234
243
  this.$db.get('FROM', "".concat(this.$constants('FROM'), "'"));
235
244
  return this;
236
245
  };
246
+ /**
247
+ *
248
+ * boot for initialize of models
249
+ * @return {void} void
250
+ */
251
+ Model.prototype.boot = function () { };
252
+ /**
253
+ *
254
+ * Clone instance of model
255
+ * @override Method
256
+ * @return {this} this
257
+ */
258
+ Model.prototype.clone = function (instance) {
259
+ if (!(instance instanceof Model)) {
260
+ throw new Error('value is not a instanceof Model');
261
+ }
262
+ var copy = Object.fromEntries(instance.$db.get());
263
+ this.$db.clone(copy);
264
+ return this;
265
+ };
237
266
  /**
238
267
  * Assign ignore delete_at in model
268
+ * @param {boolean} condition
239
269
  * @return {this} this
240
270
  */
241
271
  Model.prototype.ignoreSoftDelete = function (condition) {
@@ -244,7 +274,8 @@ var Model = /** @class */ (function (_super) {
244
274
  return this;
245
275
  };
246
276
  /**
247
- * return ignore delete at all data
277
+ * Assign ignore delete_at in model
278
+ * @param {boolean} condition
248
279
  * @return {this} this
249
280
  */
250
281
  Model.prototype.disableSoftDelete = function (condition) {
@@ -253,8 +284,8 @@ var Model = /** @class */ (function (_super) {
253
284
  return this;
254
285
  };
255
286
  /**
256
- *
257
- * @param {function} func
287
+ * Assign build in function to result of data
288
+ * @param {object} func
258
289
  * @return {this} this
259
290
  */
260
291
  Model.prototype.registry = function (func) {
@@ -263,7 +294,7 @@ var Model = /** @class */ (function (_super) {
263
294
  };
264
295
  /**
265
296
  *
266
- * relation model retrun result of relation query
297
+ * Use relations in registry of model return result of relation query
267
298
  * @param {...string} nameRelations ...name registry in models using (hasOne , hasMany , belongsTo , belongsToMany)
268
299
  * @return {this} this
269
300
  */
@@ -274,14 +305,11 @@ var Model = /** @class */ (function (_super) {
274
305
  nameRelations[_i] = arguments[_i];
275
306
  }
276
307
  var relations = nameRelations.map(function (name) {
277
- var _a;
308
+ var _a, _b;
278
309
  var relation = (_a = _this.$db.get('RELATION')) === null || _a === void 0 ? void 0 : _a.find(function (data) { return data.name === name; });
279
- if (relation == null)
280
- throw new Error("relation ".concat(name, " not be register !"));
281
- var relationHasExists = Object.values(_this.$constants('RELATIONSHIP')).includes(relation.relation);
282
- if (!relationHasExists) {
283
- throw new Error("unknown relationship in [".concat(_this.$constants('RELATIONSHIP'), "] !"));
284
- }
310
+ _this._assertError(relation == null, "relation ".concat(name, " not be register !"));
311
+ var relationHasExists = (_b = Object.values(_this.$constants('RELATIONSHIP'))) === null || _b === void 0 ? void 0 : _b.includes(relation.relation);
312
+ _this._assertError(!relationHasExists, "unknown relationship in [".concat(_this.$constants('RELATIONSHIP'), "] !"));
285
313
  if (relation.query == null)
286
314
  relation.query = new relation.model();
287
315
  return relation;
@@ -299,9 +327,9 @@ var Model = /** @class */ (function (_super) {
299
327
  };
300
328
  /**
301
329
  *
302
- * relation model return only exists result of relation query
330
+ * Use relations in registry of model return only exists result of relation query
303
331
  * @param {...string} nameRelations if data exists return blank
304
- * @return {this}
332
+ * @return {this} this
305
333
  */
306
334
  Model.prototype.withExists = function () {
307
335
  var nameRelations = [];
@@ -314,31 +342,94 @@ var Model = /** @class */ (function (_super) {
314
342
  };
315
343
  /**
316
344
  *
317
- * deep relation in model return callback query
345
+ * Use relation '${name}' registry of model return callback this query model
318
346
  * @param {string} nameRelation name relation in registry in your model
319
347
  * @param {function} callback query callback
320
348
  * @return {this} this
321
349
  */
322
350
  Model.prototype.withQuery = function (nameRelation, callback) {
351
+ var _a;
323
352
  var relation = this.$db.get('WITH').find(function (data) { return data.name === nameRelation; });
324
- if (relation == null)
325
- throw new Error("relation ".concat(nameRelation, " not be register !"));
326
- if (!Object.values(this.$constants('RELATIONSHIP')).includes(relation.relation)) {
327
- throw new Error("unknown relationship in [".concat(this.$constants('RELATIONSHIP'), "] !"));
353
+ this._assertError(relation == null, "relation ".concat(nameRelation, " not be register !"));
354
+ var relationHasExists = (_a = Object.values(this.$constants('RELATIONSHIP'))) === null || _a === void 0 ? void 0 : _a.includes(relation.relation);
355
+ this._assertError(!relationHasExists, "unknown relationship in [".concat(this.$constants('RELATIONSHIP'), "] !"));
356
+ relation.query = callback(new relation.model());
357
+ return this;
358
+ };
359
+ /**
360
+ *
361
+ * Use relations in registry of model retrun result of relation query
362
+ * @param {...string} nameRelations ...name registry in models using (hasOne , hasMany , belongsTo , belongsToMany)
363
+ * @return {this} this
364
+ */
365
+ Model.prototype.relations = function () {
366
+ var _this = this;
367
+ var nameRelations = [];
368
+ for (var _i = 0; _i < arguments.length; _i++) {
369
+ nameRelations[_i] = arguments[_i];
328
370
  }
371
+ var relations = nameRelations.map(function (name) {
372
+ var _a, _b;
373
+ var relation = (_a = _this.$db.get('RELATION')) === null || _a === void 0 ? void 0 : _a.find(function (data) { return data.name === name; });
374
+ _this._assertError(relation == null, "relation ".concat(name, " not be register !"));
375
+ var relationHasExists = (_b = Object.values(_this.$constants('RELATIONSHIP'))) === null || _b === void 0 ? void 0 : _b.includes(relation.relation);
376
+ _this._assertError(!relationHasExists, "unknown relationship in [".concat(_this.$constants('RELATIONSHIP'), "] !"));
377
+ if (relation.query == null)
378
+ relation.query = new relation.model();
379
+ return relation;
380
+ });
381
+ relations.sort(function (cur, prev) { return cur.relation.length - prev.relation.length; });
382
+ var setRelations = this.$db.get('WITH').length
383
+ ? __spreadArray(__spreadArray([], __read(relations.map(function (w) {
384
+ var exists = _this.$db.get('WITH').find(function (r) { return r.name === w.name; });
385
+ if (exists)
386
+ return null;
387
+ return w;
388
+ }).filter(function (d) { return d != null; })), false), __read(this.$db.get('WITH')), false) : relations;
389
+ this.$db.set('WITH', setRelations);
390
+ return this;
391
+ };
392
+ /**
393
+ *
394
+ * Use relations in registry of model return only exists result of relation query
395
+ * @param {...string} nameRelations if data exists return blank
396
+ * @return {this}
397
+ */
398
+ Model.prototype.relationsExists = function () {
399
+ var nameRelations = [];
400
+ for (var _i = 0; _i < arguments.length; _i++) {
401
+ nameRelations[_i] = arguments[_i];
402
+ }
403
+ this.with.apply(this, __spreadArray([], __read(nameRelations), false));
404
+ this.$db.set('WITH_EXISTS', true);
405
+ return this;
406
+ };
407
+ /**
408
+ *
409
+ * Use relation '${name}' registry of model return callback this query model
410
+ * @param {string} nameRelation name relation in registry in your model
411
+ * @param {function} callback query callback
412
+ * @return {this} this
413
+ */
414
+ Model.prototype.relationQuery = function (nameRelation, callback) {
415
+ var _a;
416
+ var relation = this.$db.get('WITH').find(function (data) { return data.name === nameRelation; });
417
+ this._assertError(relation == null, "relation ".concat(nameRelation, " not be register !"));
418
+ var relationHasExists = (_a = Object.values(this.$constants('RELATIONSHIP'))) === null || _a === void 0 ? void 0 : _a.includes(relation.relation);
419
+ this._assertError(!relationHasExists, "unknown relationship in [".concat(this.$constants('RELATIONSHIP'), "] !"));
329
420
  relation.query = callback(new relation.model());
330
421
  return this;
331
422
  };
332
423
  /**
333
424
  * Assign the relation in model Objects
334
- * @param {object} relations registry relation in your model
335
- * @param {string} relation.name
336
- * @param {string} relation.as
337
- * @param {class} relation.model
338
- * @param {string} relation.localKey
339
- * @param {string} relation.foreignKey
340
- * @param {string} relation.freezeTable
341
- * @return {this} this
425
+ * @param {object} relations registry relation in your model
426
+ * @property {string} relation.name
427
+ * @property {string} relation.as
428
+ * @property {class} relation.model
429
+ * @property {string} relation.localKey
430
+ * @property {string} relation.foreignKey
431
+ * @property {string} relation.freezeTable
432
+ * @return {this} this
342
433
  */
343
434
  Model.prototype.hasOne = function (_a) {
344
435
  var name = _a.name, as = _a.as, model = _a.model, localKey = _a.localKey, foreignKey = _a.foreignKey, freezeTable = _a.freezeTable;
@@ -357,14 +448,14 @@ var Model = /** @class */ (function (_super) {
357
448
  };
358
449
  /**
359
450
  * Assign the relation in model Objects
360
- * @param {object} relations registry relation in your model
361
- * @param {string} relation.name
362
- * @param {string} relation.as
363
- * @param {class} relation.model
364
- * @param {string} relation.localKey
365
- * @param {string} relation.foreignKey
366
- * @param {string} relation.freezeTable
367
- * @return {this} this
451
+ * @param {object} relations registry relation in your model
452
+ * @property {string} relation.name
453
+ * @property {string} relation.as
454
+ * @property {class} relation.model
455
+ * @property {string} relation.localKey
456
+ * @property {string} relation.foreignKey
457
+ * @property {string} relation.freezeTable
458
+ * @return {this} this
368
459
  */
369
460
  Model.prototype.hasMany = function (_a) {
370
461
  var name = _a.name, as = _a.as, model = _a.model, localKey = _a.localKey, foreignKey = _a.foreignKey, freezeTable = _a.freezeTable;
@@ -383,14 +474,14 @@ var Model = /** @class */ (function (_super) {
383
474
  };
384
475
  /**
385
476
  * Assign the relation in model Objects
386
- * @param {object} relations registry relation in your model
387
- * @param {string} relation.name
388
- * @param {string} relation.as
389
- * @param {class} relation.model
390
- * @param {string} relation.localKey
391
- * @param {string} relation.foreignKey
392
- * @param {string} relation.freezeTable
393
- * @return {this} this
477
+ * @param {object} relations registry relation in your model
478
+ * @property {string} relation.name
479
+ * @property {string} relation.as
480
+ * @property {class} relation.model
481
+ * @property {string} relation.localKey
482
+ * @property {string} relation.foreignKey
483
+ * @property {string} relation.freezeTable
484
+ * @return {this} this
394
485
  */
395
486
  Model.prototype.belongsTo = function (_a) {
396
487
  var name = _a.name, as = _a.as, model = _a.model, localKey = _a.localKey, foreignKey = _a.foreignKey, freezeTable = _a.freezeTable;
@@ -409,14 +500,14 @@ var Model = /** @class */ (function (_super) {
409
500
  };
410
501
  /**
411
502
  * Assign the relation in model Objects
412
- * @param {object} relations registry relation in your model
413
- * @param {string} relation.name
414
- * @param {string} relation.as
415
- * @param {class} relation.model
416
- * @param {string} relation.localKey
417
- * @param {string} relation.foreignKey
418
- * @param {string} relation.freezeTable
419
- * @return {this} this
503
+ * @param {object} relations registry relation in your model
504
+ * @property {string} relation.name
505
+ * @property {string} relation.as
506
+ * @property {class} relation.model
507
+ * @property {string} relation.localKey
508
+ * @property {string} relation.foreignKey
509
+ * @property {string} relation.freezeTable
510
+ * @return {this} this
420
511
  */
421
512
  Model.prototype.belongsToMany = function (_a) {
422
513
  var name = _a.name, as = _a.as, model = _a.model, localKey = _a.localKey, foreignKey = _a.foreignKey, freezeTable = _a.freezeTable;
@@ -434,16 +525,17 @@ var Model = /** @class */ (function (_super) {
434
525
  return this;
435
526
  };
436
527
  /**
437
- * Assign the relation in model Objects
438
- * @param {object} relations registry relation in your model
439
- * @param {string?} relation.name
440
- * @param {string} relation.as
441
- * @param {class} relation.model
442
- * @param {string} relation.localKey
443
- * @param {string} relation.foreignKey
444
- * @param {string} relation.freezeTable
445
- * @return {this} this
446
- */
528
+ * Assign the relation in model Objects
529
+ * @param {object} relations registry relation in your model
530
+ * @property {string} relation.name
531
+ * @property {string} relation.as
532
+ * @property {class} relation.model
533
+ * @property {string} relation.localKey
534
+ * @property {string} relation.foreignKey
535
+ * @property {string} relation.freezeTable
536
+ * @param {function} callback callback query relation of model
537
+ * @return {this} this
538
+ */
447
539
  Model.prototype.hasOneQuery = function (_a, callback) {
448
540
  var name = _a.name, as = _a.as, model = _a.model, localKey = _a.localKey, foreignKey = _a.foreignKey, freezeTable = _a.freezeTable;
449
541
  var nameRelation = name == null
@@ -459,24 +551,21 @@ var Model = /** @class */ (function (_super) {
459
551
  freezeTable: freezeTable,
460
552
  query: null
461
553
  };
462
- this.$db.set('RELATION', __spreadArray(__spreadArray([], __read(this.$db.get('RELATION')), false), [relation], false));
463
- this.with(nameRelation);
464
- var r = this.$db.get('WITH').find(function (data) { return data.name === nameRelation; });
465
- this._assertError(r == null, "relation ".concat(nameRelation, " not be register !"));
466
- this._assertError(!Object.values(this.$constants('RELATIONSHIP')).includes(r.relation), "unknown relationship in [".concat(this.$constants('RELATIONSHIP'), "] !"));
554
+ var r = this._handleRelationsQuery(nameRelation, relation);
467
555
  r.query = callback(new r.model());
468
556
  return this;
469
557
  };
470
558
  /**
471
559
  * Assign the relation in model Objects
472
- * @param {object} relations registry relation in your model
473
- * @param {string?} relation.name
474
- * @param {string} relation.as
475
- * @param {class} relation.model
476
- * @param {string} relation.localKey
477
- * @param {string} relation.foreignKey
478
- * @param {string} relation.freezeTable
479
- * @return {this} this
560
+ * @param {object} relations registry relation in your model
561
+ * @property {string} relation.name
562
+ * @property {string} relation.as
563
+ * @property {class} relation.model
564
+ * @property {string} relation.localKey
565
+ * @property {string} relation.foreignKey
566
+ * @property {string} relation.freezeTable
567
+ * @param {function} callback callback query relation of model
568
+ * @return {this} this
480
569
  */
481
570
  Model.prototype.hasManyQuery = function (_a, callback) {
482
571
  var name = _a.name, as = _a.as, model = _a.model, localKey = _a.localKey, foreignKey = _a.foreignKey, freezeTable = _a.freezeTable;
@@ -493,24 +582,21 @@ var Model = /** @class */ (function (_super) {
493
582
  freezeTable: freezeTable,
494
583
  query: null
495
584
  };
496
- this.$db.set('RELATION', __spreadArray(__spreadArray([], __read(this.$db.get('RELATION')), false), [relation], false));
497
- this.with(nameRelation);
498
- var r = this.$db.get('WITH').find(function (data) { return data.name === nameRelation; });
499
- this._assertError(r == null, "relation ".concat(nameRelation, " not be register !"));
500
- this._assertError(!Object.values(this.$constants('RELATIONSHIP')).includes(r.relation), "unknown relationship in [".concat(this.$constants('RELATIONSHIP'), "] !"));
585
+ var r = this._handleRelationsQuery(nameRelation, relation);
501
586
  r.query = callback(new r.model());
502
587
  return this;
503
588
  };
504
589
  /**
505
590
  * Assign the relation in model Objects
506
- * @param {object} relations registry relation in your model
507
- * @param {string} relation.name
508
- * @param {string} relation.as
509
- * @param {class} relation.model
510
- * @param {string} relation.localKey
511
- * @param {string} relation.foreignKey
512
- * @param {string} relation.freezeTable
513
- * @return {this} this
591
+ * @param {object} relations registry relation in your model
592
+ * @property {string} relation.name
593
+ * @property {string} relation.as
594
+ * @property {class} relation.model
595
+ * @property {string} relation.localKey
596
+ * @property {string} relation.foreignKey
597
+ * @property {string} relation.freezeTable
598
+ * @param {function} callback callback query relation of model
599
+ * @return {this} this
514
600
  */
515
601
  Model.prototype.belongsToQuery = function (_a, callback) {
516
602
  var name = _a.name, as = _a.as, model = _a.model, localKey = _a.localKey, foreignKey = _a.foreignKey, freezeTable = _a.freezeTable;
@@ -527,24 +613,21 @@ var Model = /** @class */ (function (_super) {
527
613
  freezeTable: freezeTable,
528
614
  query: null
529
615
  };
530
- this.$db.set('RELATION', __spreadArray(__spreadArray([], __read(this.$db.get('RELATION')), false), [relation], false));
531
- this.with(nameRelation);
532
- var r = this.$db.get('WITH').find(function (data) { return data.name === nameRelation; });
533
- this._assertError(r == null, "relation ".concat(nameRelation, " not be register !"));
534
- this._assertError(!Object.values(this.$constants('RELATIONSHIP')).includes(r.relation), "unknown relationship in [".concat(this.$constants('RELATIONSHIP'), "] !"));
616
+ var r = this._handleRelationsQuery(nameRelation, relation);
535
617
  r.query = callback(new r.model());
536
618
  return this;
537
619
  };
538
620
  /**
539
621
  * Assign the relation in model Objects
540
- * @param {object} relations registry relation in your model
541
- * @param {string} relation.name
542
- * @param {string} relation.as
543
- * @param {class} relation.model
544
- * @param {string} relation.localKey
545
- * @param {string} relation.foreignKey
546
- * @param {string} relation.freezeTable
547
- * @return {this} this
622
+ * @param {object} relations registry relation in your model
623
+ * @property {string} relation.name
624
+ * @property {string} relation.as
625
+ * @property {class} relation.model
626
+ * @property {string} relation.localKey
627
+ * @property {string} relation.foreignKey
628
+ * @property {string} relation.freezeTable
629
+ * @param {function} callback callback query relation of model
630
+ * @return {this} this
548
631
  */
549
632
  Model.prototype.belongsToManyQuery = function (_a, callback) {
550
633
  var name = _a.name, as = _a.as, model = _a.model, localKey = _a.localKey, foreignKey = _a.foreignKey, freezeTable = _a.freezeTable;
@@ -561,11 +644,7 @@ var Model = /** @class */ (function (_super) {
561
644
  freezeTable: freezeTable,
562
645
  query: null
563
646
  };
564
- this.$db.set('RELATION', __spreadArray(__spreadArray([], __read(this.$db.get('RELATION')), false), [relation], false));
565
- this.with(nameRelation);
566
- var r = this.$db.get('WITH').find(function (data) { return data.name === nameRelation; });
567
- this._assertError(r == null, "relation ".concat(nameRelation, " not be register !"));
568
- this._assertError(!Object.values(this.$constants('RELATIONSHIP')).includes(r.relation), "unknown relationship in [".concat(this.$constants('RELATIONSHIP'), "] !"));
647
+ var r = this._handleRelationsQuery(nameRelation, relation);
569
648
  r.query = callback(new r.model());
570
649
  return this;
571
650
  };
@@ -579,9 +658,9 @@ var Model = /** @class */ (function (_super) {
579
658
  return __generator(this, function (_a) {
580
659
  switch (_a.label) {
581
660
  case 0:
582
- this.whereNotNull(this._valuePattern('deletedAt'));
583
- sql = this._queryGenrateModel();
584
- return [4 /*yield*/, this._execute(sql, 'GET')];
661
+ this.whereNotNull(this._valuePattern(this.$db.get('SOFT_DELETE_FORMAT')));
662
+ sql = this._buildQueryModel();
663
+ return [4 /*yield*/, this._execute({ sql: sql, type: 'GET' })];
585
664
  case 1: return [2 /*return*/, _a.sent()];
586
665
  }
587
666
  });
@@ -598,9 +677,9 @@ var Model = /** @class */ (function (_super) {
598
677
  switch (_a.label) {
599
678
  case 0:
600
679
  this.$db.set('SOFT_DELETE', false);
601
- this.whereNotNull(this._valuePattern('deletedAt'));
602
- sql = this._queryGenrateModel();
603
- return [4 /*yield*/, this._execute(sql, 'GET')];
680
+ this.whereNotNull(this._valuePattern(this.$db.get('SOFT_DELETE_FORMAT')));
681
+ sql = this._buildQueryModel();
682
+ return [4 /*yield*/, this._execute({ sql: sql, type: 'GET' })];
604
683
  case 1: return [2 /*return*/, _a.sent()];
605
684
  }
606
685
  });
@@ -616,8 +695,8 @@ var Model = /** @class */ (function (_super) {
616
695
  return __generator(this, function (_a) {
617
696
  switch (_a.label) {
618
697
  case 0:
619
- updatedAt = this._valuePattern('updatedAt');
620
- deletedAt = this._valuePattern('deletedAt');
698
+ updatedAt = this._valuePattern(this.$db.get('TIMESTAMP_FORMAT').UPDATED_AT);
699
+ deletedAt = this._valuePattern(this.$db.get('SOFT_DELETE_FORMAT'));
621
700
  query = this.$db.get('TIMESTAMP')
622
701
  ? "".concat(deletedAt, " = NULL , ").concat(updatedAt, " = '").concat(this.$utils.timestamp(), "'")
623
702
  : "".concat(deletedAt, " = NULL");
@@ -639,7 +718,7 @@ var Model = /** @class */ (function (_super) {
639
718
  * @return {string}
640
719
  */
641
720
  Model.prototype.toString = function () {
642
- return this._queryGenrateModel();
721
+ return this._buildQueryModel();
643
722
  };
644
723
  /**
645
724
  *
@@ -647,7 +726,7 @@ var Model = /** @class */ (function (_super) {
647
726
  * @return {string}
648
727
  */
649
728
  Model.prototype.toSQL = function () {
650
- return this._queryGenrateModel();
729
+ return this._buildQueryModel();
651
730
  };
652
731
  /**
653
732
  *
@@ -660,7 +739,7 @@ var Model = /** @class */ (function (_super) {
660
739
  return __generator(this, function (_a) {
661
740
  switch (_a.label) {
662
741
  case 0:
663
- sql = this._queryGenrateModel();
742
+ sql = this._buildQueryModel();
664
743
  return [4 /*yield*/, this._queryStatementModel(sql)];
665
744
  case 1:
666
745
  result = _a.sent();
@@ -685,7 +764,7 @@ var Model = /** @class */ (function (_super) {
685
764
  switch (_a.label) {
686
765
  case 0:
687
766
  this.$db.set('SELECT', "".concat(this.$constants('SELECT'), " ").concat(column));
688
- sql = this._queryGenrateModel();
767
+ sql = this._buildQueryModel();
689
768
  return [4 /*yield*/, this._queryStatementModel(sql)];
690
769
  case 1:
691
770
  result = _a.sent();
@@ -714,11 +793,11 @@ var Model = /** @class */ (function (_super) {
714
793
  "".concat(this.$constants('AVG'), "(").concat(column, ")"),
715
794
  "".concat(this.$constants('AS'), " avg")
716
795
  ].join(' '));
717
- sql = this._queryGenrateModel();
796
+ sql = this._buildQueryModel();
718
797
  return [4 /*yield*/, this._queryStatementModel(sql)];
719
798
  case 1:
720
799
  result = _b.sent();
721
- return [2 /*return*/, ((_a = result.shift()) === null || _a === void 0 ? void 0 : _a.avg) || 0];
800
+ return [2 /*return*/, ((_a = result === null || result === void 0 ? void 0 : result.shift()) === null || _a === void 0 ? void 0 : _a.avg) || 0];
722
801
  }
723
802
  });
724
803
  });
@@ -726,7 +805,7 @@ var Model = /** @class */ (function (_super) {
726
805
  /**
727
806
  *
728
807
  * @override Method
729
- * @param {string=} column [column=id]
808
+ * @param {string} column [column=id]
730
809
  * @return {promise<number>}
731
810
  */
732
811
  Model.prototype.sum = function (column) {
@@ -742,11 +821,11 @@ var Model = /** @class */ (function (_super) {
742
821
  "".concat(this.$constants('SUM'), "(").concat(column, ")"),
743
822
  "".concat(this.$constants('AS'), " sum")
744
823
  ].join(' '));
745
- sql = this._queryGenrateModel();
824
+ sql = this._buildQueryModel();
746
825
  return [4 /*yield*/, this._queryStatementModel(sql)];
747
826
  case 1:
748
827
  result = _b.sent();
749
- return [2 /*return*/, ((_a = result.shift()) === null || _a === void 0 ? void 0 : _a.sum) || 0];
828
+ return [2 /*return*/, ((_a = result === null || result === void 0 ? void 0 : result.shift()) === null || _a === void 0 ? void 0 : _a.sum) || 0];
750
829
  }
751
830
  });
752
831
  });
@@ -770,11 +849,11 @@ var Model = /** @class */ (function (_super) {
770
849
  "".concat(this.$constants('MAX'), "(").concat(column, ")"),
771
850
  "".concat(this.$constants('AS'), " max")
772
851
  ].join(' '));
773
- sql = this._queryGenrateModel();
852
+ sql = this._buildQueryModel();
774
853
  return [4 /*yield*/, this._queryStatementModel(sql)];
775
854
  case 1:
776
855
  result = _b.sent();
777
- return [2 /*return*/, ((_a = result.shift()) === null || _a === void 0 ? void 0 : _a.max) || 0];
856
+ return [2 /*return*/, ((_a = result === null || result === void 0 ? void 0 : result.shift()) === null || _a === void 0 ? void 0 : _a.max) || 0];
778
857
  }
779
858
  });
780
859
  });
@@ -798,11 +877,11 @@ var Model = /** @class */ (function (_super) {
798
877
  "".concat(this.$constants('MIN'), "(").concat(column, ")"),
799
878
  "".concat(this.$constants('AS'), " min")
800
879
  ].join(' '));
801
- sql = this._queryGenrateModel();
880
+ sql = this._buildQueryModel();
802
881
  return [4 /*yield*/, this._queryStatementModel(sql)];
803
882
  case 1:
804
883
  result = _b.sent();
805
- return [2 /*return*/, ((_a = result.shift()) === null || _a === void 0 ? void 0 : _a.min) || 0];
884
+ return [2 /*return*/, ((_a = result === null || result === void 0 ? void 0 : result.shift()) === null || _a === void 0 ? void 0 : _a.min) || 0];
806
885
  }
807
886
  });
808
887
  });
@@ -821,12 +900,16 @@ var Model = /** @class */ (function (_super) {
821
900
  return __generator(this, function (_b) {
822
901
  switch (_b.label) {
823
902
  case 0:
824
- this.$db.set('SELECT', "".concat(this.$constants('SELECT'), " ").concat(this.$constants('COUNT'), "(").concat(column, ") ").concat(this.$constants('AS'), " total"));
825
- sql = this._queryGenrateModel();
903
+ this.$db.set('SELECT', [
904
+ "".concat(this.$constants('SELECT')),
905
+ "".concat(this.$constants('COUNT'), "(").concat(column, ")"),
906
+ "".concat(this.$constants('AS'), " total")
907
+ ].join(' '));
908
+ sql = this._buildQueryModel();
826
909
  return [4 /*yield*/, this._queryStatementModel(sql)];
827
910
  case 1:
828
911
  result = _b.sent();
829
- return [2 /*return*/, ((_a = result.shift()) === null || _a === void 0 ? void 0 : _a.total) || 0];
912
+ return [2 /*return*/, ((_a = result === null || result === void 0 ? void 0 : result.shift()) === null || _a === void 0 ? void 0 : _a.total) || 0];
830
913
  }
831
914
  });
832
915
  });
@@ -844,9 +927,9 @@ var Model = /** @class */ (function (_super) {
844
927
  switch (_c.label) {
845
928
  case 0:
846
929
  if (!this.$db.get('WHERE'))
847
- throw new Error("Can't delete without where condition");
930
+ throw new Error("can't delete without where condition");
848
931
  if (!this.$db.get('SOFT_DELETE')) return [3 /*break*/, 2];
849
- deletedAt = this._valuePattern('deletedAt');
932
+ deletedAt = this._valuePattern(this.$db.get('SOFT_DELETE_FORMAT'));
850
933
  query = "".concat(deletedAt, " = '").concat(this.$utils.timestamp(), "'");
851
934
  sql = [
852
935
  "".concat(this.$constants('UPDATE')),
@@ -855,7 +938,7 @@ var Model = /** @class */ (function (_super) {
855
938
  "".concat(query)
856
939
  ].join(' ');
857
940
  if (this.$db.get('TIMESTAMP')) {
858
- updatedAt = this._valuePattern('updatedAt');
941
+ updatedAt = this._valuePattern(this.$db.get('TIMESTAMP_FORMAT').UPDATED_AT);
859
942
  sql = "".concat(sql, " , ").concat(updatedAt, " = '").concat(this.$utils.timestamp(), "'");
860
943
  }
861
944
  this.$db.set('UPDATE', "".concat(sql, " ").concat(this.$db.get('WHERE')));
@@ -881,7 +964,7 @@ var Model = /** @class */ (function (_super) {
881
964
  /**
882
965
  *
883
966
  * @override Method
884
- * @return {promise<object | null>}
967
+ * @return {promise<any>}
885
968
  */
886
969
  Model.prototype.first = function () {
887
970
  var _a;
@@ -896,14 +979,20 @@ var Model = /** @class */ (function (_super) {
896
979
  _b.sent();
897
980
  _b.label = 2;
898
981
  case 2:
899
- sql = this._queryGenrateModel();
982
+ sql = this._buildQueryModel();
900
983
  if (!!sql.includes(this.$constants('LIMIT'))) return [3 /*break*/, 4];
901
984
  sql = "".concat(sql, " ").concat(this.$constants('LIMIT'), " 1");
902
- return [4 /*yield*/, this._execute(sql, 'FIRST')];
985
+ if (this.$db.get('WITH_EXISTS')) {
986
+ sql = this._queryRelationsExists();
987
+ }
988
+ return [4 /*yield*/, this._execute({ sql: sql, type: 'FIRST' })];
903
989
  case 3: return [2 /*return*/, _b.sent()];
904
990
  case 4:
905
991
  sql = sql.replace(this.$db.get('LIMIT'), "".concat(this.$constants('LIMIT'), " 1"));
906
- return [4 /*yield*/, this._execute(sql, 'FIRST')];
992
+ if (this.$db.get('WITH_EXISTS')) {
993
+ sql = this._queryRelationsExists();
994
+ }
995
+ return [4 /*yield*/, this._execute({ sql: sql, type: 'FIRST' })];
907
996
  case 5: return [2 /*return*/, _b.sent()];
908
997
  }
909
998
  });
@@ -912,7 +1001,7 @@ var Model = /** @class */ (function (_super) {
912
1001
  /**
913
1002
  *
914
1003
  * @override Method
915
- * @return {promise<object | null>}
1004
+ * @return {promise<any>}
916
1005
  */
917
1006
  Model.prototype.findOne = function () {
918
1007
  return __awaiter(this, void 0, void 0, function () {
@@ -924,6 +1013,52 @@ var Model = /** @class */ (function (_super) {
924
1013
  });
925
1014
  });
926
1015
  };
1016
+ /**
1017
+ *
1018
+ * @override Method
1019
+ * @return {promise<object | Error>}
1020
+ */
1021
+ Model.prototype.firstOrError = function (message, options) {
1022
+ var _a;
1023
+ return __awaiter(this, void 0, void 0, function () {
1024
+ var sql;
1025
+ return __generator(this, function (_b) {
1026
+ switch (_b.label) {
1027
+ case 0:
1028
+ if (!((_a = this.$db.get('EXCEPT')) === null || _a === void 0 ? void 0 : _a.length)) return [3 /*break*/, 2];
1029
+ return [4 /*yield*/, this._exceptColumns()];
1030
+ case 1:
1031
+ _b.sent();
1032
+ _b.label = 2;
1033
+ case 2:
1034
+ sql = this._buildQueryModel();
1035
+ if (!!sql.includes(this.$constants('LIMIT'))) return [3 /*break*/, 4];
1036
+ sql = "".concat(sql, " ").concat(this.$constants('LIMIT'), " 1");
1037
+ return [4 /*yield*/, this._execute({ sql: sql, type: 'FIRST_OR_ERROR', message: message, options: options })];
1038
+ case 3: return [2 /*return*/, _b.sent()];
1039
+ case 4:
1040
+ sql = sql.replace(this.$db.get('LIMIT'), "".concat(this.$constants('LIMIT'), " 1"));
1041
+ if (this.$db.get('WITH_EXISTS')) {
1042
+ sql = this._queryRelationsExists();
1043
+ }
1044
+ return [4 /*yield*/, this._execute({ sql: sql, type: 'FIRST_OR_ERROR', message: message, options: options })];
1045
+ case 5: return [2 /*return*/, _b.sent()];
1046
+ }
1047
+ });
1048
+ });
1049
+ };
1050
+ /**
1051
+ *
1052
+ * @override Method
1053
+ * @return {promise<any>}
1054
+ */
1055
+ Model.prototype.findOneOrError = function (message, options) {
1056
+ return __awaiter(this, void 0, void 0, function () {
1057
+ return __generator(this, function (_a) {
1058
+ return [2 /*return*/, this.firstOrError(message, options)];
1059
+ });
1060
+ });
1061
+ };
927
1062
  /**
928
1063
  *
929
1064
  * @override Method
@@ -966,12 +1101,12 @@ var Model = /** @class */ (function (_super) {
966
1101
  "".concat(this.$constants('FROM')),
967
1102
  "".concat(this.$db.get('TABLE_NAME')),
968
1103
  "".concat(this.$constants('WHERE')),
969
- "".concat(this.$constants('PRIMARY_KEY'), " = ").concat(id)
1104
+ "".concat(this.$db.get('PRIMARY_KEY'), " = ").concat(id)
970
1105
  ].join(' ');
971
1106
  return [4 /*yield*/, this._queryStatementModel(sql)];
972
1107
  case 1:
973
1108
  result = _a.sent();
974
- return [2 /*return*/, result.shift() || null];
1109
+ return [2 /*return*/, (result === null || result === void 0 ? void 0 : result.shift()) || null];
975
1110
  }
976
1111
  });
977
1112
  });
@@ -994,8 +1129,11 @@ var Model = /** @class */ (function (_super) {
994
1129
  _b.sent();
995
1130
  _b.label = 2;
996
1131
  case 2:
997
- sql = this._queryGenrateModel();
998
- return [4 /*yield*/, this._execute(sql, 'GET')];
1132
+ sql = this._buildQueryModel();
1133
+ if (this.$db.get('WITH_EXISTS')) {
1134
+ sql = this._queryRelationsExists();
1135
+ }
1136
+ return [4 /*yield*/, this._execute({ sql: sql, type: 'GET' })];
999
1137
  case 3: return [2 /*return*/, _b.sent()];
1000
1138
  }
1001
1139
  });
@@ -1019,8 +1157,8 @@ var Model = /** @class */ (function (_super) {
1019
1157
  _b.sent();
1020
1158
  _b.label = 2;
1021
1159
  case 2:
1022
- sql = this._queryGenrateModel();
1023
- return [4 /*yield*/, this._execute(sql, 'GET')];
1160
+ sql = this._buildQueryModel();
1161
+ return [4 /*yield*/, this._execute({ sql: sql, type: 'GET' })];
1024
1162
  case 3: return [2 /*return*/, _b.sent()];
1025
1163
  }
1026
1164
  });
@@ -1029,9 +1167,9 @@ var Model = /** @class */ (function (_super) {
1029
1167
  /**
1030
1168
  *
1031
1169
  * @override Method
1032
- * @param {?object} paginationOptions
1033
- * @param {number} paginationOptions.limit
1034
- * @param {number} paginationOptions.page
1170
+ * @param {?object} paginationOptions by default page = 1 , limit = 15
1171
+ * @property {number} paginationOptions.limit
1172
+ * @property {number} paginationOptions.page
1035
1173
  * @return {promise<Pagination>}
1036
1174
  */
1037
1175
  Model.prototype.pagination = function (paginationOptions) {
@@ -1057,7 +1195,10 @@ var Model = /** @class */ (function (_super) {
1057
1195
  offset = (page - 1) * limit;
1058
1196
  this.$db.set('PER_PAGE', limit);
1059
1197
  this.$db.set('PAGE', page);
1060
- sql = this._queryGenrateModel();
1198
+ sql = this._buildQueryModel();
1199
+ if (this.$db.get('WITH_EXISTS')) {
1200
+ sql = this._queryRelationsExists();
1201
+ }
1061
1202
  if (!!sql.includes(this.$constants('LIMIT'))) return [3 /*break*/, 4];
1062
1203
  sql = [
1063
1204
  "".concat(sql),
@@ -1066,7 +1207,7 @@ var Model = /** @class */ (function (_super) {
1066
1207
  "".concat(this.$constants('OFFSET')),
1067
1208
  "".concat(offset)
1068
1209
  ].join(' ');
1069
- return [4 /*yield*/, this._execute(sql, 'PAGINATION')];
1210
+ return [4 /*yield*/, this._execute({ sql: sql, type: 'PAGINATION' })];
1070
1211
  case 3: return [2 /*return*/, _c.sent()];
1071
1212
  case 4:
1072
1213
  sql = sql.replace(this.$db.get('LIMIT'), [
@@ -1075,20 +1216,20 @@ var Model = /** @class */ (function (_super) {
1075
1216
  "".concat(this.$constants('OFFSET')),
1076
1217
  "".concat(offset)
1077
1218
  ].join(' '));
1078
- return [4 /*yield*/, this._execute(sql, 'PAGINATION')];
1219
+ return [4 /*yield*/, this._execute({ sql: sql, type: 'PAGINATION' })];
1079
1220
  case 5: return [2 /*return*/, _c.sent()];
1080
1221
  }
1081
1222
  });
1082
1223
  });
1083
1224
  };
1084
1225
  /**
1085
- *
1086
- * @override Method
1087
- * @param {Object} pagination page , limit
1088
- * @param {number} pagination.limit
1089
- * @param {number} pagination.page
1090
- * @return {promise<Pagination>}
1091
- */
1226
+ *
1227
+ * @override Method
1228
+ * @param {?object} paginationOptions by default page = 1 , limit = 15
1229
+ * @property {number} paginationOptions.limit
1230
+ * @property {number} paginationOptions.page
1231
+ * @return {promise<Pagination>}
1232
+ */
1092
1233
  Model.prototype.paginate = function (paginationOptions) {
1093
1234
  return __awaiter(this, void 0, void 0, function () {
1094
1235
  var limit, page;
@@ -1132,7 +1273,7 @@ var Model = /** @class */ (function (_super) {
1132
1273
  "".concat(this.$constants('GROUP_CONCAT'), "(id)"),
1133
1274
  "".concat(this.$constants('AS'), " data")
1134
1275
  ].join(' '));
1135
- sql = this._queryGenrateModel();
1276
+ sql = this._buildQueryModel();
1136
1277
  return [4 /*yield*/, this._queryStatementModel(sql)];
1137
1278
  case 3:
1138
1279
  results = _b.sent();
@@ -1274,7 +1415,7 @@ var Model = /** @class */ (function (_super) {
1274
1415
  };
1275
1416
  /**
1276
1417
  *
1277
- * insert muliple data into the database
1418
+ * insert multiple data into the database
1278
1419
  * @override Method
1279
1420
  * @param {array<object>} data create multiple data
1280
1421
  * @return {this} this this
@@ -1309,31 +1450,15 @@ var Model = /** @class */ (function (_super) {
1309
1450
  /**
1310
1451
  *
1311
1452
  * @override Method
1312
- * @param {object?} transaction using DB.beginTransaction()
1313
- * Ex. +---------------------------------------------------+
1314
- * const transaction = await new DB().beginTransaction()
1315
- *
1316
- * try {
1317
- * const useSave = await create ...something then .save(transaction)
1318
- * const useSave2 = await create ...something then .save(transaction)
1319
- * throw new Error('try to errors')
1320
- * } catch (e) {
1321
- * const rollback = await transaction.rollback()
1322
- * // rollback => ture
1323
- * // !done transaction has been rolled back [useSave , useSave2]
1324
- * }
1325
- *
1326
- * @return {Promise<array | object | null>}
1453
+ * @return {Promise<any>}
1327
1454
  */
1328
- Model.prototype.save = function (transaction) {
1455
+ Model.prototype.save = function () {
1329
1456
  var _a;
1330
1457
  return __awaiter(this, void 0, void 0, function () {
1331
1458
  var attributes, query_1, query, _b;
1332
1459
  return __generator(this, function (_c) {
1333
1460
  switch (_c.label) {
1334
1461
  case 0:
1335
- if (transaction != null)
1336
- this.$db.set('TRANSACTION', transaction);
1337
1462
  attributes = this.$attributes;
1338
1463
  if ((_a = Object.keys(attributes)) === null || _a === void 0 ? void 0 : _a.length) {
1339
1464
  while (true) {
@@ -1385,7 +1510,7 @@ var Model = /** @class */ (function (_super) {
1385
1510
  *
1386
1511
  * fake data
1387
1512
  * @param {number} rows number of rows
1388
- * @return {promise<any}
1513
+ * @return {promise<any>}
1389
1514
  */
1390
1515
  Model.prototype.faker = function (rows) {
1391
1516
  if (rows === void 0) { rows = 1; }
@@ -1449,29 +1574,6 @@ var Model = /** @class */ (function (_super) {
1449
1574
  });
1450
1575
  });
1451
1576
  };
1452
- /**
1453
- *
1454
- * @override Method
1455
- * @param {number} id
1456
- * @return {this}
1457
- */
1458
- Model.prototype.whereUser = function (id) {
1459
- var column = this._valuePattern('userId');
1460
- id = this.$utils.escape(id);
1461
- if (!this.$db.get('WHERE').includes(this.$constants('WHERE'))) {
1462
- this.$db.set('WHERE', [
1463
- "".concat(this.$constants('WHERE')),
1464
- "".concat(column, " = '").concat(id, "'")
1465
- ].join(' '));
1466
- return this;
1467
- }
1468
- this.$db.set('WHERE', [
1469
- "".concat(this.$db.get('WHERE')),
1470
- "".concat(this.$constants('AND')),
1471
- "".concat(column, " = '").concat(id, "'")
1472
- ].join(' '));
1473
- return this;
1474
- };
1475
1577
  Model.prototype._queryStatementModel = function (sql) {
1476
1578
  return __awaiter(this, void 0, void 0, function () {
1477
1579
  var result;
@@ -1490,22 +1592,22 @@ var Model = /** @class */ (function (_super) {
1490
1592
  });
1491
1593
  };
1492
1594
  Model.prototype._actionStatementModel = function (_a) {
1493
- var _b = _a === void 0 ? {} : _a, sql = _b.sql, _c = _b.returnId, returnId = _c === void 0 ? false : _c;
1595
+ var sql = _a.sql, _b = _a.returnId, returnId = _b === void 0 ? false : _b;
1494
1596
  return __awaiter(this, void 0, void 0, function () {
1495
1597
  var result_2, result;
1496
- return __generator(this, function (_d) {
1497
- switch (_d.label) {
1598
+ return __generator(this, function (_c) {
1599
+ switch (_c.label) {
1498
1600
  case 0:
1499
1601
  if (this.$db.get('DEBUG'))
1500
1602
  this.$utils.consoleDebug(sql);
1501
1603
  if (!returnId) return [3 /*break*/, 2];
1502
1604
  return [4 /*yield*/, this.$pool.get(sql)];
1503
1605
  case 1:
1504
- result_2 = _d.sent();
1606
+ result_2 = _c.sent();
1505
1607
  return [2 /*return*/, [result_2.affectedRows, result_2.insertId]];
1506
1608
  case 2: return [4 /*yield*/, this.$pool.get(sql)];
1507
1609
  case 3:
1508
- result = (_d.sent()).affectedRows;
1610
+ result = (_c.sent()).affectedRows;
1509
1611
  return [2 /*return*/, result];
1510
1612
  }
1511
1613
  });
@@ -1550,8 +1652,7 @@ var Model = /** @class */ (function (_super) {
1550
1652
  : (_b = relationModel.query) === null || _b === void 0 ? void 0 : _b.tableName;
1551
1653
  var name = relationModel.name;
1552
1654
  var as = relationModel.as;
1553
- if (!model || model == null)
1554
- throw new Error('Not found model');
1655
+ this._assertError(!model || model == null, 'not found model');
1555
1656
  var localKey = relationModel.localKey
1556
1657
  ? relationModel.localKey
1557
1658
  : this.$db.get('PRIMARY_KEY');
@@ -1575,11 +1676,11 @@ var Model = /** @class */ (function (_super) {
1575
1676
  }
1576
1677
  return { name: name, as: as, relation: relation, table: table, localKey: localKey, foreignKey: foreignKey, model: model };
1577
1678
  };
1578
- Model.prototype._queryGenrateModel = function () {
1679
+ Model.prototype._buildQueryModel = function () {
1579
1680
  var sql = [];
1580
1681
  while (true) {
1581
1682
  if (this.$db.get('SOFT_DELETE')) {
1582
- var deletedAt = this._valuePattern('deletedAt');
1683
+ var deletedAt = this._valuePattern(this.$db.get('SOFT_DELETE_FORMAT'));
1583
1684
  this.whereNull(deletedAt);
1584
1685
  }
1585
1686
  if (this.$db.get('INSERT')) {
@@ -1591,7 +1692,7 @@ var Model = /** @class */ (function (_super) {
1591
1692
  if (this.$db.get('UPDATE')) {
1592
1693
  sql = [
1593
1694
  this.$db.get('UPDATE'),
1594
- this.$db.get('WHERE'),
1695
+ this.$db.get('WHERE')
1595
1696
  ];
1596
1697
  break;
1597
1698
  }
@@ -1662,26 +1763,27 @@ var Model = /** @class */ (function (_super) {
1662
1763
  });
1663
1764
  return result;
1664
1765
  };
1665
- Model.prototype._execute = function (sql, type) {
1766
+ Model.prototype._execute = function (_a) {
1767
+ var sql = _a.sql, type = _a.type, message = _a.message, options = _a.options;
1666
1768
  return __awaiter(this, void 0, void 0, function () {
1667
1769
  var result, emptyData, relations, relations_1, relations_1_1, relation, relationIsBelongsToMany, dataFromRelation, e_2_1;
1668
- var e_2, _a;
1669
- return __generator(this, function (_b) {
1670
- switch (_b.label) {
1770
+ var e_2, _b;
1771
+ return __generator(this, function (_c) {
1772
+ switch (_c.label) {
1671
1773
  case 0: return [4 /*yield*/, this._queryStatementModel(sql)];
1672
1774
  case 1:
1673
- result = _b.sent();
1674
- emptyData = this._returnEmpty(type);
1775
+ result = _c.sent();
1776
+ emptyData = this._returnEmpty(type, result, message, options);
1675
1777
  if (!result.length)
1676
1778
  return [2 /*return*/, emptyData];
1677
1779
  relations = this.$db.get('WITH');
1678
1780
  if (!relations.length)
1679
1781
  return [2 /*return*/, this._returnResult(type, result) || emptyData];
1680
- _b.label = 2;
1782
+ _c.label = 2;
1681
1783
  case 2:
1682
- _b.trys.push([2, 9, 10, 11]);
1784
+ _c.trys.push([2, 9, 10, 11]);
1683
1785
  relations_1 = __values(relations), relations_1_1 = relations_1.next();
1684
- _b.label = 3;
1786
+ _c.label = 3;
1685
1787
  case 3:
1686
1788
  if (!!relations_1_1.done) return [3 /*break*/, 8];
1687
1789
  relation = relations_1_1.value;
@@ -1689,24 +1791,24 @@ var Model = /** @class */ (function (_super) {
1689
1791
  if (!relationIsBelongsToMany) return [3 /*break*/, 5];
1690
1792
  return [4 /*yield*/, this._belongsToMany(result, relation)];
1691
1793
  case 4:
1692
- result = _b.sent();
1794
+ result = _c.sent();
1693
1795
  return [3 /*break*/, 7];
1694
1796
  case 5: return [4 /*yield*/, this._relation(result, relation)];
1695
1797
  case 6:
1696
- dataFromRelation = _b.sent();
1697
- result = this._relationFilter(result, dataFromRelation, relation);
1698
- _b.label = 7;
1798
+ dataFromRelation = _c.sent();
1799
+ result = this._relationMapData(result, dataFromRelation, relation);
1800
+ _c.label = 7;
1699
1801
  case 7:
1700
1802
  relations_1_1 = relations_1.next();
1701
1803
  return [3 /*break*/, 3];
1702
1804
  case 8: return [3 /*break*/, 11];
1703
1805
  case 9:
1704
- e_2_1 = _b.sent();
1806
+ e_2_1 = _c.sent();
1705
1807
  e_2 = { error: e_2_1 };
1706
1808
  return [3 /*break*/, 11];
1707
1809
  case 10:
1708
1810
  try {
1709
- if (relations_1_1 && !relations_1_1.done && (_a = relations_1.return)) _a.call(relations_1);
1811
+ if (relations_1_1 && !relations_1_1.done && (_b = relations_1.return)) _b.call(relations_1);
1710
1812
  }
1711
1813
  finally { if (e_2) throw e_2.error; }
1712
1814
  return [7 /*endfinally*/];
@@ -1727,7 +1829,7 @@ var Model = /** @class */ (function (_super) {
1727
1829
  return __generator(this, function (_c) {
1728
1830
  switch (_c.label) {
1729
1831
  case 0:
1730
- emptyData = this._returnEmpty(type);
1832
+ emptyData = this._returnEmpty(type, dataParents);
1731
1833
  if (!dataParents.length)
1732
1834
  return [2 /*return*/, emptyData];
1733
1835
  relations = this.$db.get('WITH');
@@ -1746,7 +1848,7 @@ var Model = /** @class */ (function (_super) {
1746
1848
  return [4 /*yield*/, this._relation(dataParents, relation)];
1747
1849
  case 3:
1748
1850
  dataChilds = _c.sent();
1749
- dataParents = this._relationFilter(dataParents, dataChilds, relation);
1851
+ dataParents = this._relationMapData(dataParents, dataChilds, relation);
1750
1852
  _c.label = 4;
1751
1853
  case 4:
1752
1854
  relations_2_1 = relations_2.next();
@@ -1771,9 +1873,8 @@ var Model = /** @class */ (function (_super) {
1771
1873
  });
1772
1874
  });
1773
1875
  };
1774
- Model.prototype._relationFilter = function (dataParents, dataChilds, relations) {
1876
+ Model.prototype._relationMapData = function (dataParents, dataChilds, relations) {
1775
1877
  var e_4, _a, e_5, _b;
1776
- var _this = this;
1777
1878
  var _c = this._valueInRelation(relations), name = _c.name, as = _c.as, relation = _c.relation, localKey = _c.localKey, foreignKey = _c.foreignKey;
1778
1879
  var keyRelation = as !== null && as !== void 0 ? as : name;
1779
1880
  try {
@@ -1783,10 +1884,9 @@ var Model = /** @class */ (function (_super) {
1783
1884
  this.$constants('RELATIONSHIP').hasOne,
1784
1885
  this.$constants('RELATIONSHIP').belongsTo
1785
1886
  ].some(function (r) { return r === relation; });
1887
+ dataParent[keyRelation] = [];
1786
1888
  if (relationIsHasOneOrBelongsTo)
1787
1889
  dataParent[keyRelation] = null;
1788
- else
1789
- dataParent[keyRelation] = [];
1790
1890
  if (!dataChilds.length)
1791
1891
  continue;
1792
1892
  try {
@@ -1823,33 +1923,84 @@ var Model = /** @class */ (function (_super) {
1823
1923
  }
1824
1924
  finally { if (e_4) throw e_4.error; }
1825
1925
  }
1826
- if (this.$db.get('WITH_EXISTS')) {
1827
- var dataPerentOnlyRelationIsNotNull = dataParents.filter(function (dataPerent) {
1828
- if (Array.isArray(dataPerent[keyRelation])) {
1829
- var isNotEmpty_1 = Boolean(dataPerent[keyRelation].length);
1830
- if (!isNotEmpty_1 && dataPerent.id) {
1831
- _this.$db.set('WITH_EXISTS_NOT_ID', __spreadArray(__spreadArray([], __read(_this.$db.get('WITH_EXISTS_NOT_ID')), false), [
1832
- dataPerent.id
1833
- ], false));
1926
+ return dataParents;
1927
+ };
1928
+ Model.prototype._handleRelationsExists = function (relation) {
1929
+ var e_6, _a;
1930
+ var _b;
1931
+ this._assertError(!((_b = Object.keys(relation)) === null || _b === void 0 ? void 0 : _b.length), "unknown [relation]");
1932
+ var _c = this._valueInRelation(relation), localKey = _c.localKey, foreignKey = _c.foreignKey;
1933
+ var query = relation.query;
1934
+ this._assertError(query == null, "unknown callback query in [relation : '".concat(relation.name, "']"));
1935
+ var clone = new Model().clone(query);
1936
+ if (clone.$db.get('WITH').length) {
1937
+ try {
1938
+ for (var _d = __values(clone.$db.get('WITH')), _e = _d.next(); !_e.done; _e = _d.next()) {
1939
+ var r = _e.value;
1940
+ if (r.query == null)
1941
+ continue;
1942
+ var sql_1 = clone._handleRelationsExists(r);
1943
+ clone.whereExists(sql_1);
1944
+ }
1945
+ }
1946
+ catch (e_6_1) { e_6 = { error: e_6_1 }; }
1947
+ finally {
1948
+ try {
1949
+ if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
1950
+ }
1951
+ finally { if (e_6) throw e_6.error; }
1952
+ }
1953
+ }
1954
+ var sql = clone
1955
+ .bind(this.$pool.load())
1956
+ .whereReference("`".concat(this.tableName, "`.`").concat(localKey, "`"), "`".concat(query.tableName, "`.`").concat(foreignKey, "`"))
1957
+ .toString();
1958
+ return sql;
1959
+ };
1960
+ Model.prototype._queryRelationsExists = function () {
1961
+ var e_7, _a;
1962
+ var _b;
1963
+ var relations = this.$db.get('WITH');
1964
+ for (var index in relations) {
1965
+ var relation = relations[index];
1966
+ if (!((_b = Object.keys(relation)) === null || _b === void 0 ? void 0 : _b.length))
1967
+ continue;
1968
+ var _c = this._valueInRelation(relation), localKey = _c.localKey, foreignKey = _c.foreignKey;
1969
+ var query = relation.query;
1970
+ this._assertError(query == null, "unknown callback query in [relation : '".concat(relation.name, "']"));
1971
+ var clone = new Model().clone(query);
1972
+ if (clone.$db.get('WITH').length) {
1973
+ try {
1974
+ for (var _d = (e_7 = void 0, __values(clone.$db.get('WITH'))), _e = _d.next(); !_e.done; _e = _d.next()) {
1975
+ var r = _e.value;
1976
+ if (r.query == null)
1977
+ continue;
1978
+ var sql_2 = clone._handleRelationsExists(r);
1979
+ clone.whereExists(sql_2);
1834
1980
  }
1835
- return isNotEmpty_1;
1836
1981
  }
1837
- var isNotEmpty = dataPerent[keyRelation] != null;
1838
- if (!isNotEmpty && dataPerent.id) {
1839
- _this.$db.set('WITH_EXISTS_NOT_ID', __spreadArray(__spreadArray([], __read(_this.$db.get('WITH_EXISTS_NOT_ID')), false), [
1840
- dataPerent.id
1841
- ], false));
1982
+ catch (e_7_1) { e_7 = { error: e_7_1 }; }
1983
+ finally {
1984
+ try {
1985
+ if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
1986
+ }
1987
+ finally { if (e_7) throw e_7.error; }
1842
1988
  }
1843
- return isNotEmpty;
1844
- });
1845
- return dataPerentOnlyRelationIsNotNull;
1989
+ }
1990
+ var sql_3 = clone
1991
+ .bind(this.$pool.load())
1992
+ .whereReference("`".concat(this.tableName, "`.`").concat(localKey, "`"), "`".concat(query.tableName, "`.`").concat(foreignKey, "`"))
1993
+ .toString();
1994
+ this.whereExists(sql_3);
1846
1995
  }
1847
- return dataParents;
1996
+ var sql = this._buildQueryModel();
1997
+ return sql;
1848
1998
  };
1849
1999
  Model.prototype._relation = function (parents, relation) {
1850
2000
  var _a;
1851
2001
  return __awaiter(this, void 0, void 0, function () {
1852
2002
  var _b, localKey, foreignKey, localKeyId, dataPerentId, query, dataFromRelation;
2003
+ var _this = this;
1853
2004
  return __generator(this, function (_c) {
1854
2005
  switch (_c.label) {
1855
2006
  case 0:
@@ -1857,20 +2008,23 @@ var Model = /** @class */ (function (_super) {
1857
2008
  return [2 /*return*/, []];
1858
2009
  _b = this._valueInRelation(relation), localKey = _b.localKey, foreignKey = _b.foreignKey;
1859
2010
  localKeyId = parents.map(function (parent) {
1860
- return parent[localKey];
2011
+ var data = parent[localKey];
2012
+ if (!parent.hasOwnProperty(localKey)) {
2013
+ _this._assertError(data == null, "unknown relationship without primary or foreign key");
2014
+ }
2015
+ return data;
1861
2016
  }).filter(function (data) { return data != null; });
1862
2017
  dataPerentId = Array.from(new Set(localKeyId)) || [];
1863
2018
  if (!dataPerentId.length && this.$db.get('WITH_EXISTS'))
1864
2019
  return [2 /*return*/, []];
1865
- this._assertError(!dataPerentId.length, "unknown relationship without primary or foreign key");
1866
2020
  return [4 /*yield*/, relation.query];
1867
2021
  case 1:
1868
2022
  query = _c.sent();
1869
2023
  this._assertError(query == null, "unknown callback query in [relation : '".concat(relation.name, "']"));
1870
2024
  return [4 /*yield*/, query
2025
+ .bind(this.$pool.load())
1871
2026
  .whereIn(foreignKey, dataPerentId)
1872
2027
  .debug(this.$db.get('DEBUG'))
1873
- .ignoreSoftDelete(this.$db.get('SOFT_DELETE_RELATIONS'))
1874
2028
  .get()];
1875
2029
  case 2:
1876
2030
  dataFromRelation = _c.sent();
@@ -1882,15 +2036,21 @@ var Model = /** @class */ (function (_super) {
1882
2036
  Model.prototype._handleBelongsToMany = function (dataFromParent, relation, pivotTable) {
1883
2037
  return __awaiter(this, void 0, void 0, function () {
1884
2038
  var _a, name, localKey, foreignKey, localKeyId, dataPerentId, modelOther, other, otherlocalKey, otherforeignKey, sqldataChilds, dataChilds, otherId, otherArrId, otherdataChilds;
2039
+ var _this = this;
1885
2040
  return __generator(this, function (_b) {
1886
2041
  switch (_b.label) {
1887
2042
  case 0:
1888
2043
  _a = this._valueInRelation(relation), name = _a.name, localKey = _a.localKey, foreignKey = _a.foreignKey;
1889
- localKeyId = dataFromParent.map(function (dataPerent) {
1890
- return dataPerent[localKey];
2044
+ localKeyId = dataFromParent.map(function (parent) {
2045
+ var data = parent[localKey];
2046
+ if (!parent.hasOwnProperty(localKey)) {
2047
+ _this._assertError(data == null, "unknown relationship without primary or foreign key");
2048
+ }
2049
+ return data;
1891
2050
  }).filter(function (data) { return data != null; });
1892
2051
  dataPerentId = Array.from(new Set(localKeyId)).join(',') || [];
1893
- this._assertError(!dataPerentId.length, "unknown relationship without primary or foreign key");
2052
+ if (!dataPerentId.length && this.$db.get('WITH_EXISTS'))
2053
+ return [2 /*return*/, []];
1894
2054
  modelOther = new relation.model();
1895
2055
  other = this._classToTableName(modelOther.constructor.name, { singular: true });
1896
2056
  otherlocalKey = 'id';
@@ -1909,7 +2069,9 @@ var Model = /** @class */ (function (_super) {
1909
2069
  otherId = dataChilds.map(function (sub) { return sub[otherforeignKey]; }).filter(function (data) { return data != null; });
1910
2070
  otherArrId = Array.from(new Set(otherId)) || [];
1911
2071
  return [4 /*yield*/, this._queryStatementModel(modelOther
2072
+ .bind(this.$pool.load())
1912
2073
  .whereIn(otherlocalKey, otherArrId)
2074
+ .debug(this.$db.get('DEBUG'))
1913
2075
  .toString())];
1914
2076
  case 2:
1915
2077
  otherdataChilds = _b.sent();
@@ -1940,7 +2102,7 @@ var Model = /** @class */ (function (_super) {
1940
2102
  Model.prototype._belongsToMany = function (dataFromParent, relation) {
1941
2103
  var _a, _b;
1942
2104
  return __awaiter(this, void 0, void 0, function () {
1943
- var local, modelOther, other, pivotTable, err_1, pivotTable, e_6;
2105
+ var local, modelOther, other, pivotTable, err_1, pivotTable, e_8;
1944
2106
  return __generator(this, function (_c) {
1945
2107
  switch (_c.label) {
1946
2108
  case 0:
@@ -1962,7 +2124,7 @@ var Model = /** @class */ (function (_super) {
1962
2124
  return [4 /*yield*/, this._handleBelongsToMany(dataFromParent, relation, pivotTable)];
1963
2125
  case 5: return [2 /*return*/, _c.sent()];
1964
2126
  case 6:
1965
- e_6 = _c.sent();
2127
+ e_8 = _c.sent();
1966
2128
  throw new Error(err_1.message);
1967
2129
  case 7: return [3 /*break*/, 8];
1968
2130
  case 8: return [2 /*return*/];
@@ -1971,11 +2133,11 @@ var Model = /** @class */ (function (_super) {
1971
2133
  });
1972
2134
  };
1973
2135
  Model.prototype._pagination = function (data) {
1974
- var _a, _b, _c;
2136
+ var _a, _b;
1975
2137
  return __awaiter(this, void 0, void 0, function () {
1976
2138
  var currentPage, limit, sql, res, total, lastPage, nextPage, prevPage, totalPage, meta;
1977
- return __generator(this, function (_d) {
1978
- switch (_d.label) {
2139
+ return __generator(this, function (_c) {
2140
+ switch (_c.label) {
1979
2141
  case 0:
1980
2142
  currentPage = +(this.$db.get('PAGE'));
1981
2143
  this.select([
@@ -1985,19 +2147,16 @@ var Model = /** @class */ (function (_super) {
1985
2147
  ].join(' '));
1986
2148
  limit = Number(this.$db.get('PER_PAGE'));
1987
2149
  this._assertError(limit < 1, "minimun less 1 of limit");
1988
- if (Boolean((_a = this.$db.get('WITH_EXISTS_NOT_ID')) === null || _a === void 0 ? void 0 : _a.length)) {
1989
- this.whereNotIn('id', __spreadArray([], __read(new Set(this.$db.get('WITH_EXISTS_NOT_ID'))), false));
1990
- }
1991
- sql = this._queryGenrateModel();
2150
+ sql = this._buildQueryModel();
1992
2151
  return [4 /*yield*/, this._queryStatementModel(sql)];
1993
2152
  case 1:
1994
- res = _d.sent();
1995
- total = (_b = res.shift().total) !== null && _b !== void 0 ? _b : 0;
2153
+ res = _c.sent();
2154
+ total = (_a = res.shift().total) !== null && _a !== void 0 ? _a : 0;
1996
2155
  lastPage = Math.ceil(total / limit) || 0;
1997
2156
  lastPage = lastPage > 1 ? lastPage : 1;
1998
2157
  nextPage = currentPage + 1;
1999
2158
  prevPage = currentPage - 1 === 0 ? 1 : currentPage - 1;
2000
- totalPage = (_c = data === null || data === void 0 ? void 0 : data.length) !== null && _c !== void 0 ? _c : 0;
2159
+ totalPage = (_b = data === null || data === void 0 ? void 0 : data.length) !== null && _b !== void 0 ? _b : 0;
2001
2160
  meta = {
2002
2161
  total: total,
2003
2162
  limit: limit,
@@ -2025,13 +2184,26 @@ var Model = /** @class */ (function (_super) {
2025
2184
  this.$db.get('RESULT', data);
2026
2185
  return data;
2027
2186
  };
2028
- Model.prototype._returnEmpty = function (type) {
2187
+ Model.prototype._returnEmpty = function (type, result, message, options) {
2029
2188
  var emptyData = null;
2030
2189
  switch (type) {
2031
2190
  case 'FIRST': {
2032
2191
  emptyData = null;
2033
2192
  break;
2034
2193
  }
2194
+ case 'FIRST_OR_ERROR': {
2195
+ if (!(result === null || result === void 0 ? void 0 : result.length)) {
2196
+ if (options == null) {
2197
+ throw {
2198
+ message: message,
2199
+ code: 400
2200
+ };
2201
+ }
2202
+ throw __assign({ message: message }, options);
2203
+ }
2204
+ emptyData = null;
2205
+ break;
2206
+ }
2035
2207
  case 'GET': {
2036
2208
  emptyData = [];
2037
2209
  break;
@@ -2055,13 +2227,14 @@ var Model = /** @class */ (function (_super) {
2055
2227
  throw new Error('Missing method first get or pagination');
2056
2228
  }
2057
2229
  }
2058
- if (this._isPatternSnakeCase())
2230
+ if (this._isPatternSnakeCase()) {
2059
2231
  return this.$utils.snakeCase(this._result(emptyData));
2232
+ }
2060
2233
  return this._result(emptyData);
2061
2234
  };
2062
2235
  Model.prototype._returnResult = function (type, data) {
2063
2236
  var _this = this;
2064
- var _a, _b, _c;
2237
+ var _a, _b, _c, _d, _e;
2065
2238
  if ((_a = Object.keys(this.$db.get('REGISTRY'))) === null || _a === void 0 ? void 0 : _a.length) {
2066
2239
  data === null || data === void 0 ? void 0 : data.forEach(function (d) {
2067
2240
  for (var name in _this.$db.get('REGISTRY')) {
@@ -2084,6 +2257,20 @@ var Model = /** @class */ (function (_super) {
2084
2257
  }
2085
2258
  return this._result((_c = data.shift()) !== null && _c !== void 0 ? _c : null);
2086
2259
  }
2260
+ case 'FIRST_OR_ERROR': {
2261
+ if (this.$db.get('PLUCK')) {
2262
+ var pluck = this.$db.get('PLUCK');
2263
+ var newData = data.shift();
2264
+ var checkProperty = newData.hasOwnProperty(pluck);
2265
+ this._assertError(!checkProperty, "can't find property '".concat(pluck, "' of result"));
2266
+ var result_3 = (_d = this._result(newData[pluck])) !== null && _d !== void 0 ? _d : null;
2267
+ return result_3;
2268
+ }
2269
+ var result = this._result((_e = data.shift()) !== null && _e !== void 0 ? _e : null);
2270
+ if (result == null)
2271
+ throw new Error();
2272
+ return result;
2273
+ }
2087
2274
  case 'GET': {
2088
2275
  if (this.$db.get('CHUNK')) {
2089
2276
  var result = data.reduce(function (resultArray, item, index) {
@@ -2125,7 +2312,7 @@ var Model = /** @class */ (function (_super) {
2125
2312
  Model.prototype._attach = function (name, dataId, fields) {
2126
2313
  var _a;
2127
2314
  return __awaiter(this, void 0, void 0, function () {
2128
- var relation, thisTable, relationTable, result, pivotTable, success, e_7, errorTable, search, pivotTable, success, e_8;
2315
+ var relation, thisTable, relationTable, result, pivotTable, success, e_9, errorTable, search, pivotTable, success, e_10;
2129
2316
  var _this = this;
2130
2317
  return __generator(this, function (_b) {
2131
2318
  switch (_b.label) {
@@ -2148,11 +2335,11 @@ var Model = /** @class */ (function (_super) {
2148
2335
  success = _b.sent();
2149
2336
  return [2 /*return*/, success];
2150
2337
  case 3:
2151
- e_7 = _b.sent();
2152
- errorTable = e_7.message;
2338
+ e_9 = _b.sent();
2339
+ errorTable = e_9.message;
2153
2340
  search = errorTable.search("ER_NO_SUCH_TABLE");
2154
2341
  if (!!search)
2155
- throw new Error(e_7.message);
2342
+ throw new Error(e_9.message);
2156
2343
  _b.label = 4;
2157
2344
  case 4:
2158
2345
  _b.trys.push([4, 6, , 7]);
@@ -2165,8 +2352,8 @@ var Model = /** @class */ (function (_super) {
2165
2352
  success = _b.sent();
2166
2353
  return [2 /*return*/, success];
2167
2354
  case 6:
2168
- e_8 = _b.sent();
2169
- throw new Error(e_8.message);
2355
+ e_10 = _b.sent();
2356
+ throw new Error(e_10.message);
2170
2357
  case 7: return [3 /*break*/, 8];
2171
2358
  case 8: return [2 /*return*/];
2172
2359
  }
@@ -2175,8 +2362,8 @@ var Model = /** @class */ (function (_super) {
2175
2362
  };
2176
2363
  Model.prototype._detach = function (name, dataId) {
2177
2364
  return __awaiter(this, void 0, void 0, function () {
2178
- var relation, thisTable, relationTable, result, pivotTable, dataId_1, dataId_1_1, id, e_9_1, e_10, errorTable, search, pivotTable, dataId_2, dataId_2_1, id, e_11_1, e_12;
2179
- var e_9, _a, e_11, _b;
2365
+ var relation, thisTable, relationTable, result, pivotTable, dataId_1, dataId_1_1, id, e_11_1, e_12, errorTable, search, pivotTable, dataId_2, dataId_2_1, id, e_13_1, e_14;
2366
+ var e_11, _a, e_13, _b;
2180
2367
  return __generator(this, function (_c) {
2181
2368
  switch (_c.label) {
2182
2369
  case 0:
@@ -2210,22 +2397,22 @@ var Model = /** @class */ (function (_super) {
2210
2397
  return [3 /*break*/, 3];
2211
2398
  case 6: return [3 /*break*/, 9];
2212
2399
  case 7:
2213
- e_9_1 = _c.sent();
2214
- e_9 = { error: e_9_1 };
2400
+ e_11_1 = _c.sent();
2401
+ e_11 = { error: e_11_1 };
2215
2402
  return [3 /*break*/, 9];
2216
2403
  case 8:
2217
2404
  try {
2218
2405
  if (dataId_1_1 && !dataId_1_1.done && (_a = dataId_1.return)) _a.call(dataId_1);
2219
2406
  }
2220
- finally { if (e_9) throw e_9.error; }
2407
+ finally { if (e_11) throw e_11.error; }
2221
2408
  return [7 /*endfinally*/];
2222
2409
  case 9: return [2 /*return*/, true];
2223
2410
  case 10:
2224
- e_10 = _c.sent();
2225
- errorTable = e_10.message;
2411
+ e_12 = _c.sent();
2412
+ errorTable = e_12.message;
2226
2413
  search = errorTable.search("ER_NO_SUCH_TABLE");
2227
2414
  if (!!search)
2228
- throw new Error(e_10.message);
2415
+ throw new Error(e_12.message);
2229
2416
  _c.label = 11;
2230
2417
  case 11:
2231
2418
  _c.trys.push([11, 20, , 21]);
@@ -2250,19 +2437,19 @@ var Model = /** @class */ (function (_super) {
2250
2437
  return [3 /*break*/, 13];
2251
2438
  case 16: return [3 /*break*/, 19];
2252
2439
  case 17:
2253
- e_11_1 = _c.sent();
2254
- e_11 = { error: e_11_1 };
2440
+ e_13_1 = _c.sent();
2441
+ e_13 = { error: e_13_1 };
2255
2442
  return [3 /*break*/, 19];
2256
2443
  case 18:
2257
2444
  try {
2258
2445
  if (dataId_2_1 && !dataId_2_1.done && (_b = dataId_2.return)) _b.call(dataId_2);
2259
2446
  }
2260
- finally { if (e_11) throw e_11.error; }
2447
+ finally { if (e_13) throw e_13.error; }
2261
2448
  return [7 /*endfinally*/];
2262
2449
  case 19: return [2 /*return*/, true];
2263
2450
  case 20:
2264
- e_12 = _c.sent();
2265
- throw new Error(e_12.message);
2451
+ e_14 = _c.sent();
2452
+ throw new Error(e_14.message);
2266
2453
  case 21: return [3 /*break*/, 22];
2267
2454
  case 22: return [2 /*return*/];
2268
2455
  }
@@ -2273,90 +2460,115 @@ var Model = /** @class */ (function (_super) {
2273
2460
  var _a;
2274
2461
  var _this = this;
2275
2462
  if (this.$db.get('TIMESTAMP')) {
2276
- var updatedAt = this._valuePattern('updatedAt');
2463
+ var updatedAt = this._valuePattern(this.$db.get('TIMESTAMP_FORMAT').UPDATED_AT);
2277
2464
  objects = __assign(__assign({}, objects), (_a = {}, _a[updatedAt] = this.$utils.timestamp(), _a));
2278
2465
  }
2279
2466
  var keyValue = Object.entries(objects).map(function (_a) {
2280
2467
  var _b = __read(_a, 2), column = _b[0], value = _b[1];
2281
2468
  return "".concat(column, " = ").concat(value == null || value === 'NULL'
2282
2469
  ? 'NULL'
2283
- : "'".concat(_this.$utils.covertBooleanToNumber(value), "'"));
2470
+ : value.startsWith(_this.$constants('RAW'))
2471
+ ? "".concat(_this.$utils.covertBooleanToNumber(value)).replace(_this.$constants('RAW'), '')
2472
+ : "'".concat(_this.$utils.covertBooleanToNumber(value), "'"));
2284
2473
  });
2285
2474
  return "".concat(this.$constants('SET'), " ").concat(keyValue);
2286
2475
  };
2287
2476
  Model.prototype._queryInsertModel = function (objects) {
2288
2477
  var _a, _b;
2289
2478
  var _this = this;
2290
- if (this.$db.get('TIMESTAMP')) {
2291
- var createdAt = this._valuePattern(this.$db.get('TIMESTAMP_FORMAT').CREATED_AT);
2292
- var updatedAt = this._valuePattern(this.$db.get('TIMESTAMP_FORMAT').UPDATED_AT);
2479
+ var hasTimestamp = this.$db.get('TIMESTAMP');
2480
+ if (hasTimestamp) {
2481
+ var format = this.$db.get('TIMESTAMP_FORMAT');
2482
+ var createdAt = this._valuePattern(format.CREATED_AT);
2483
+ var updatedAt = this._valuePattern(format.UPDATED_AT);
2293
2484
  objects = __assign(__assign({}, objects), (_a = {}, _a[createdAt] = this.$utils.timestamp(), _a[updatedAt] = this.$utils.timestamp(), _a));
2294
2485
  }
2295
- if (this.$db.get('UUID')) {
2296
- console.log(this.$db.get('UUID_FORMAT'));
2297
- objects = __assign(__assign({}, objects), (_b = {}, _b[this.$db.get('UUID_FORMAT')] = this.$utils.generateUUID(), _b));
2486
+ var hasUUID = objects.hasOwnProperty(this.$db.get('UUID_FORMAT'));
2487
+ if (this.$db.get('UUID') && !hasUUID) {
2488
+ var uuidFormat = this.$db.get('UUID_FORMAT');
2489
+ objects = __assign(__assign({}, objects), (_b = {}, _b[uuidFormat] = this.$utils.generateUUID(), _b));
2298
2490
  }
2299
- var columns = Object.keys(objects).map(function (data) { return "".concat(data); });
2491
+ var columns = Object.keys(objects).map(function (column) { return "`".concat(column, "`"); });
2300
2492
  var values = Object.values(objects).map(function (data) {
2301
- return "".concat(data == null || data === 'NULL' ?
2302
- 'NULL' :
2303
- "'".concat(_this.$utils.covertBooleanToNumber(data), "'"));
2493
+ return "".concat(data == null || data === 'NULL'
2494
+ ? 'NULL'
2495
+ : "'".concat(_this.$utils.covertBooleanToNumber(data), "'"));
2304
2496
  });
2305
- return "(".concat(columns, ") ").concat(this.$constants('VALUES'), " (").concat(values, ")");
2497
+ return [
2498
+ "(".concat(columns, ")"),
2499
+ "".concat(this.$constants('VALUES')),
2500
+ "(".concat(values, ")")
2501
+ ].join(' ');
2306
2502
  };
2307
2503
  Model.prototype._queryInsertMultipleModel = function (data) {
2308
- var e_13, _a, _b, _c;
2504
+ var e_15, _a, _b, _c;
2309
2505
  var _this = this;
2310
2506
  var _d;
2311
2507
  var values = [];
2508
+ var columns = Object.keys((_d = __spreadArray([], __read(data), false)) === null || _d === void 0 ? void 0 : _d.shift()).map(function (column) { return "`".concat(column, "`"); });
2312
2509
  try {
2313
2510
  for (var data_1 = __values(data), data_1_1 = data_1.next(); !data_1_1.done; data_1_1 = data_1.next()) {
2314
2511
  var objects = data_1_1.value;
2315
- if (this.$db.get('TIMESTAMP')) {
2316
- var createdAt = this._valuePattern(this.$db.get('TIMESTAMP_FORMAT').CREATED_AT);
2317
- var updatedAt = this._valuePattern(this.$db.get('TIMESTAMP_FORMAT').UPDATED_AT);
2512
+ var hasTimestamp = this.$db.get('TIMESTAMP');
2513
+ if (hasTimestamp) {
2514
+ var format = this.$db.get('TIMESTAMP_FORMAT');
2515
+ var createdAt = this._valuePattern(format.CREATED_AT);
2516
+ var updatedAt = this._valuePattern(format.UPDATED_AT);
2318
2517
  objects = __assign(__assign({}, objects), (_b = {}, _b[createdAt] = this.$utils.timestamp(), _b[updatedAt] = this.$utils.timestamp(), _b));
2518
+ columns = __spreadArray(__spreadArray([], __read(columns), false), [
2519
+ "`".concat(createdAt, "`"),
2520
+ "`".concat(updatedAt, "`")
2521
+ ], false);
2319
2522
  }
2320
- if (this.$db.get('UUID')) {
2321
- objects = __assign(__assign({}, objects), (_c = {}, _c[this.$db.get('UUID_FORMAT')] = this.$utils.generateUUID(), _c));
2523
+ var hasUUID = objects.hasOwnProperty(this.$db.get('UUID_FORMAT'));
2524
+ if (this.$db.get('UUID') && !hasUUID) {
2525
+ var uuidFormat = this.$db.get('UUID_FORMAT');
2526
+ objects = __assign(__assign({}, objects), (_c = {}, _c[uuidFormat] = this.$utils.generateUUID(), _c));
2527
+ columns = __spreadArray(__spreadArray([], __read(columns), false), [
2528
+ "`".concat(uuidFormat, "`")
2529
+ ], false);
2322
2530
  }
2323
- var val = Object.values(objects).map(function (data) {
2324
- return "".concat(data == null || data === 'NULL' ?
2325
- 'NULL' :
2326
- "'".concat(_this.$utils.covertBooleanToNumber(data), "'"));
2531
+ var v = Object.values(objects).map(function (data) {
2532
+ return "".concat(data == null || data === 'NULL'
2533
+ ? 'NULL'
2534
+ : "'".concat(_this.$utils.covertBooleanToNumber(data), "'"));
2327
2535
  });
2328
- values.push("(".concat(val.join(','), ")"));
2536
+ values = __spreadArray(__spreadArray([], __read(values), false), [
2537
+ "(".concat(v.join(','), ")")
2538
+ ], false);
2329
2539
  }
2330
2540
  }
2331
- catch (e_13_1) { e_13 = { error: e_13_1 }; }
2541
+ catch (e_15_1) { e_15 = { error: e_15_1 }; }
2332
2542
  finally {
2333
2543
  try {
2334
2544
  if (data_1_1 && !data_1_1.done && (_a = data_1.return)) _a.call(data_1);
2335
2545
  }
2336
- finally { if (e_13) throw e_13.error; }
2546
+ finally { if (e_15) throw e_15.error; }
2337
2547
  }
2338
- var columns = Object.keys((_d = data[0]) !== null && _d !== void 0 ? _d : []).map(function (data) { return "".concat(data); });
2339
- return "(".concat(columns, ") ").concat(this.$constants('VALUES'), " ").concat(values.join(','));
2548
+ return [
2549
+ "(".concat(__spreadArray([], __read(new Set(columns)), false).join(','), ")"),
2550
+ "".concat(this.$constants('VALUES')),
2551
+ "".concat(values.join(','))
2552
+ ].join(' ');
2340
2553
  };
2341
- Model.prototype._registry = function (data) {
2554
+ Model.prototype._registry = function (func) {
2342
2555
  var _this = this;
2343
2556
  var _a;
2344
2557
  if ((_a = Object.keys(this.$db.get('REGISTRY'))) === null || _a === void 0 ? void 0 : _a.length) {
2345
- data === null || data === void 0 ? void 0 : data.forEach(function (d) {
2558
+ func === null || func === void 0 ? void 0 : func.forEach(function (fn) {
2346
2559
  for (var name in _this.$db.get('REGISTRY')) {
2347
2560
  var registry = _this.$db.get('REGISTRY');
2348
- d[name] = registry[name];
2561
+ fn[name] = registry[name];
2349
2562
  }
2350
2563
  });
2351
2564
  }
2352
2565
  return this;
2353
2566
  };
2354
2567
  Model.prototype._insertNotExistsModel = function () {
2355
- var _a;
2356
2568
  return __awaiter(this, void 0, void 0, function () {
2357
- var sql, check, _b, result, _c, _d, result_3, id, sql_1, data;
2358
- return __generator(this, function (_e) {
2359
- switch (_e.label) {
2569
+ var sql, check, _a, result, _b, _c, result_4, id, sql_4, data;
2570
+ return __generator(this, function (_d) {
2571
+ switch (_d.label) {
2360
2572
  case 0:
2361
2573
  this._assertError(!this.$db.get('WHERE'), "can't insert [insertNotExists] without where condition");
2362
2574
  sql = [
@@ -2372,10 +2584,10 @@ var Model = /** @class */ (function (_super) {
2372
2584
  check = false;
2373
2585
  return [4 /*yield*/, this._queryStatementModel(sql)];
2374
2586
  case 1:
2375
- _b = __read.apply(void 0, [_e.sent(), 1]), result = _b[0].exists;
2587
+ _a = __read.apply(void 0, [_d.sent(), 1]), result = _a[0].exists;
2376
2588
  check = !!parseInt(result);
2377
- _c = check;
2378
- switch (_c) {
2589
+ _b = check;
2590
+ switch (_b) {
2379
2591
  case false: return [3 /*break*/, 2];
2380
2592
  case true: return [3 /*break*/, 6];
2381
2593
  }
@@ -2385,58 +2597,45 @@ var Model = /** @class */ (function (_super) {
2385
2597
  returnId: true
2386
2598
  })];
2387
2599
  case 3:
2388
- _d = __read.apply(void 0, [_e.sent(), 2]), result_3 = _d[0], id = _d[1];
2389
- if (this.$db.get('TRANSACTION')) {
2390
- (_a = this.$db.get('TRANSACTION')) === null || _a === void 0 ? void 0 : _a.query.push({
2391
- table: this.$db.get('TABLE_NAME'),
2392
- id: id
2393
- });
2394
- }
2395
- if (!result_3) return [3 /*break*/, 5];
2396
- sql_1 = [
2600
+ _c = __read.apply(void 0, [_d.sent(), 2]), result_4 = _c[0], id = _c[1];
2601
+ if (!result_4) return [3 /*break*/, 5];
2602
+ sql_4 = [
2397
2603
  "".concat(this.$db.get('SELECT')),
2398
2604
  "".concat(this.$db.get('FROM')),
2399
2605
  "".concat(this.$db.get('TABLE_NAME')),
2400
2606
  "".concat(this.$constants('WHERE'), " id = ").concat(id)
2401
2607
  ].join(' ');
2402
- return [4 /*yield*/, this._queryStatementModel(sql_1)];
2608
+ return [4 /*yield*/, this._queryStatementModel(sql_4)];
2403
2609
  case 4:
2404
- data = _e.sent();
2610
+ data = _d.sent();
2405
2611
  return [2 /*return*/, (data === null || data === void 0 ? void 0 : data.shift()) || null];
2406
2612
  case 5: return [2 /*return*/, null];
2407
2613
  case 6:
2408
2614
  {
2409
2615
  return [2 /*return*/, null];
2410
2616
  }
2411
- _e.label = 7;
2617
+ _d.label = 7;
2412
2618
  case 7:
2413
2619
  {
2414
2620
  return [2 /*return*/, null];
2415
2621
  }
2416
- _e.label = 8;
2622
+ _d.label = 8;
2417
2623
  case 8: return [2 /*return*/];
2418
2624
  }
2419
2625
  });
2420
2626
  });
2421
2627
  };
2422
2628
  Model.prototype._createModel = function () {
2423
- var _a;
2424
2629
  return __awaiter(this, void 0, void 0, function () {
2425
- var _b, result, id, sql, data, result_4;
2426
- return __generator(this, function (_c) {
2427
- switch (_c.label) {
2630
+ var _a, result, id, sql, data, result_5;
2631
+ return __generator(this, function (_b) {
2632
+ switch (_b.label) {
2428
2633
  case 0: return [4 /*yield*/, this._actionStatementModel({
2429
2634
  sql: this.$db.get('INSERT'),
2430
2635
  returnId: true
2431
2636
  })];
2432
2637
  case 1:
2433
- _b = __read.apply(void 0, [_c.sent(), 2]), result = _b[0], id = _b[1];
2434
- if (this.$db.get('TRANSACTION')) {
2435
- (_a = this.$db.get('TRANSACTION')) === null || _a === void 0 ? void 0 : _a.query.push({
2436
- table: this.$db.get('TABLE_NAME'),
2437
- id: id
2438
- });
2439
- }
2638
+ _a = __read.apply(void 0, [_b.sent(), 2]), result = _a[0], id = _a[1];
2440
2639
  if (!result) return [3 /*break*/, 3];
2441
2640
  sql = [
2442
2641
  "".concat(this.$db.get('SELECT')),
@@ -2446,48 +2645,28 @@ var Model = /** @class */ (function (_super) {
2446
2645
  ].join(' ');
2447
2646
  return [4 /*yield*/, this._queryStatementModel(sql)];
2448
2647
  case 2:
2449
- data = _c.sent();
2450
- result_4 = (data === null || data === void 0 ? void 0 : data.shift()) || null;
2451
- this.$db.set('RESULT', result_4);
2452
- return [2 /*return*/, result_4];
2648
+ data = _b.sent();
2649
+ result_5 = (data === null || data === void 0 ? void 0 : data.shift()) || null;
2650
+ this.$db.set('RESULT', result_5);
2651
+ return [2 /*return*/, result_5];
2453
2652
  case 3: return [2 /*return*/, null];
2454
2653
  }
2455
2654
  });
2456
2655
  });
2457
2656
  };
2458
2657
  Model.prototype._createMultipleModel = function () {
2459
- var _a;
2460
2658
  return __awaiter(this, void 0, void 0, function () {
2461
- var _b, result, id, arrayId, arrayId_1, arrayId_1_1, id_1, sql, data, resultData;
2462
- var e_14, _c;
2463
- return __generator(this, function (_d) {
2464
- switch (_d.label) {
2659
+ var _a, result, id, arrayId, sql, data, resultData;
2660
+ return __generator(this, function (_b) {
2661
+ switch (_b.label) {
2465
2662
  case 0: return [4 /*yield*/, this._actionStatementModel({
2466
2663
  sql: this.$db.get('INSERT'),
2467
2664
  returnId: true
2468
2665
  })];
2469
2666
  case 1:
2470
- _b = __read.apply(void 0, [_d.sent(), 2]), result = _b[0], id = _b[1];
2667
+ _a = __read.apply(void 0, [_b.sent(), 2]), result = _a[0], id = _a[1];
2471
2668
  if (!result) return [3 /*break*/, 3];
2472
2669
  arrayId = __spreadArray([], __read(Array(result)), false).map(function (_, i) { return i + id; });
2473
- try {
2474
- for (arrayId_1 = __values(arrayId), arrayId_1_1 = arrayId_1.next(); !arrayId_1_1.done; arrayId_1_1 = arrayId_1.next()) {
2475
- id_1 = arrayId_1_1.value;
2476
- if (this.$db.get('TRANSACTION')) {
2477
- (_a = this.$db.get('TRANSACTION')) === null || _a === void 0 ? void 0 : _a.query.push({
2478
- table: this.$db.get('TABLE_NAME'),
2479
- id: id_1
2480
- });
2481
- }
2482
- }
2483
- }
2484
- catch (e_14_1) { e_14 = { error: e_14_1 }; }
2485
- finally {
2486
- try {
2487
- if (arrayId_1_1 && !arrayId_1_1.done && (_c = arrayId_1.return)) _c.call(arrayId_1);
2488
- }
2489
- finally { if (e_14) throw e_14.error; }
2490
- }
2491
2670
  sql = [
2492
2671
  "".concat(this.$db.get('SELECT')),
2493
2672
  "".concat(this.$db.get('FROM')),
@@ -2497,7 +2676,7 @@ var Model = /** @class */ (function (_super) {
2497
2676
  ].join(' ');
2498
2677
  return [4 /*yield*/, this._queryStatementModel(sql)];
2499
2678
  case 2:
2500
- data = _d.sent();
2679
+ data = _b.sent();
2501
2680
  resultData = data || null;
2502
2681
  this.$db.set('RESULT', resultData);
2503
2682
  return [2 /*return*/, resultData];
@@ -2507,12 +2686,11 @@ var Model = /** @class */ (function (_super) {
2507
2686
  });
2508
2687
  };
2509
2688
  Model.prototype._updateOrInsertModel = function () {
2510
- var _a;
2511
2689
  return __awaiter(this, void 0, void 0, function () {
2512
- var sql, check, _b, result, _c, _d, result_5, id, sql_2, data, resultData, result_6, data, data_2, data_2_1, val;
2513
- var e_15, _e;
2514
- return __generator(this, function (_f) {
2515
- switch (_f.label) {
2690
+ var sql, check, _a, result, _b, _c, result_6, id, sql_5, data, resultData, result_7, data, data_2, data_2_1, val;
2691
+ var e_16, _d;
2692
+ return __generator(this, function (_e) {
2693
+ switch (_e.label) {
2516
2694
  case 0:
2517
2695
  this._assertError(!this.$db.get('WHERE'), "can't update or insert [updateOrInsert] without where condition");
2518
2696
  sql = '';
@@ -2529,10 +2707,10 @@ var Model = /** @class */ (function (_super) {
2529
2707
  ].join(' ');
2530
2708
  return [4 /*yield*/, this._queryStatementModel(sql)];
2531
2709
  case 1:
2532
- _b = __read.apply(void 0, [_f.sent(), 1]), result = _b[0].exists;
2710
+ _a = __read.apply(void 0, [_e.sent(), 1]), result = _a[0].exists;
2533
2711
  check = !!Number.parseInt(result);
2534
- _c = check;
2535
- switch (_c) {
2712
+ _b = check;
2713
+ switch (_b) {
2536
2714
  case false: return [3 /*break*/, 2];
2537
2715
  case true: return [3 /*break*/, 6];
2538
2716
  }
@@ -2542,23 +2720,17 @@ var Model = /** @class */ (function (_super) {
2542
2720
  returnId: true
2543
2721
  })];
2544
2722
  case 3:
2545
- _d = __read.apply(void 0, [_f.sent(), 2]), result_5 = _d[0], id = _d[1];
2546
- if (this.$db.get('TRANSACTION')) {
2547
- (_a = this.$db.get('TRANSACTION')) === null || _a === void 0 ? void 0 : _a.query.push({
2548
- table: this.$db.get('TABLE_NAME'),
2549
- id: id
2550
- });
2551
- }
2552
- if (!result_5) return [3 /*break*/, 5];
2553
- sql_2 = [
2723
+ _c = __read.apply(void 0, [_e.sent(), 2]), result_6 = _c[0], id = _c[1];
2724
+ if (!result_6) return [3 /*break*/, 5];
2725
+ sql_5 = [
2554
2726
  "".concat(this.$db.get('SELECT')),
2555
2727
  "".concat(this.$db.get('FROM')),
2556
2728
  "".concat(this.$db.get('TABLE_NAME')),
2557
2729
  "".concat(this.$constants('WHERE'), " id = ").concat(id)
2558
2730
  ].join(' ');
2559
- return [4 /*yield*/, this._queryStatementModel(sql_2)];
2731
+ return [4 /*yield*/, this._queryStatementModel(sql_5)];
2560
2732
  case 4:
2561
- data = _f.sent();
2733
+ data = _e.sent();
2562
2734
  resultData = __assign(__assign({}, data === null || data === void 0 ? void 0 : data.shift()), { action_status: 'insert' }) || null;
2563
2735
  this.$db.set('RESULT', resultData);
2564
2736
  return [2 /*return*/, resultData];
@@ -2570,8 +2742,8 @@ var Model = /** @class */ (function (_super) {
2570
2742
  ].join(' ')
2571
2743
  })];
2572
2744
  case 7:
2573
- result_6 = _f.sent();
2574
- if (!result_6) return [3 /*break*/, 9];
2745
+ result_7 = _e.sent();
2746
+ if (!result_7) return [3 /*break*/, 9];
2575
2747
  return [4 /*yield*/, this._queryStatementModel([
2576
2748
  "".concat(this.$db.get('SELECT')),
2577
2749
  "".concat(this.$db.get('FROM')),
@@ -2579,7 +2751,7 @@ var Model = /** @class */ (function (_super) {
2579
2751
  "".concat(this.$db.get('WHERE'))
2580
2752
  ].join(' '))];
2581
2753
  case 8:
2582
- data = _f.sent();
2754
+ data = _e.sent();
2583
2755
  if ((data === null || data === void 0 ? void 0 : data.length) > 1) {
2584
2756
  try {
2585
2757
  for (data_2 = __values(data), data_2_1 = data_2.next(); !data_2_1.done; data_2_1 = data_2.next()) {
@@ -2587,12 +2759,12 @@ var Model = /** @class */ (function (_super) {
2587
2759
  val.action_status = 'update';
2588
2760
  }
2589
2761
  }
2590
- catch (e_15_1) { e_15 = { error: e_15_1 }; }
2762
+ catch (e_16_1) { e_16 = { error: e_16_1 }; }
2591
2763
  finally {
2592
2764
  try {
2593
- if (data_2_1 && !data_2_1.done && (_e = data_2.return)) _e.call(data_2);
2765
+ if (data_2_1 && !data_2_1.done && (_d = data_2.return)) _d.call(data_2);
2594
2766
  }
2595
- finally { if (e_15) throw e_15.error; }
2767
+ finally { if (e_16) throw e_16.error; }
2596
2768
  }
2597
2769
  return [2 /*return*/, data || []];
2598
2770
  }
@@ -2602,7 +2774,7 @@ var Model = /** @class */ (function (_super) {
2602
2774
  {
2603
2775
  return [2 /*return*/, null];
2604
2776
  }
2605
- _f.label = 11;
2777
+ _e.label = 11;
2606
2778
  case 11: return [2 /*return*/];
2607
2779
  }
2608
2780
  });
@@ -2655,6 +2827,14 @@ var Model = /** @class */ (function (_super) {
2655
2827
  var functionName = __spreadArray([], __read(this.$logger.get()), false)[this.$logger.get().length - 2];
2656
2828
  return functionName.replace(/([A-Z])/g, function (str) { return "_".concat(str.toLowerCase()); });
2657
2829
  };
2830
+ Model.prototype._handleRelationsQuery = function (nameRelation, relation) {
2831
+ this.$db.set('RELATION', __spreadArray(__spreadArray([], __read(this.$db.get('RELATION')), false), [relation], false));
2832
+ this.with(nameRelation);
2833
+ var r = this.$db.get('WITH').find(function (data) { return data.name === nameRelation; });
2834
+ this._assertError(r == null, "relation ".concat(nameRelation, " not be register !"));
2835
+ this._assertError(!Object.values(this.$constants('RELATIONSHIP')).includes(r.relation), "unknown relationship in [".concat(this.$constants('RELATIONSHIP'), "] !"));
2836
+ return r;
2837
+ };
2658
2838
  Model.prototype._initialModel = function () {
2659
2839
  this.$db = this._setupModel();
2660
2840
  this._tableName();
@@ -2674,6 +2854,10 @@ var Model = /** @class */ (function (_super) {
2674
2854
  _this._assertError(!db.has(key), "can't set this [".concat(key, "]"));
2675
2855
  db.set(key, value);
2676
2856
  return;
2857
+ },
2858
+ clone: function (data) {
2859
+ db = new Map(Object.entries(__assign({}, data)));
2860
+ return;
2677
2861
  }
2678
2862
  };
2679
2863
  };