@simonbackx/simple-database 1.24.0 → 1.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/dist/index.d.ts +9 -9
  2. package/dist/index.js.map +1 -1
  3. package/dist/migrations.d.ts +1 -1
  4. package/dist/migrations.js +6 -4
  5. package/dist/migrations.js.map +1 -1
  6. package/dist/src/classes/Column.d.ts +10 -6
  7. package/dist/src/classes/Column.js +62 -31
  8. package/dist/src/classes/Column.js.map +1 -1
  9. package/dist/src/classes/Database.d.ts +3 -2
  10. package/dist/src/classes/Database.js +26 -27
  11. package/dist/src/classes/Database.js.map +1 -1
  12. package/dist/src/classes/Factory.d.ts +1 -1
  13. package/dist/src/classes/Factory.js +5 -5
  14. package/dist/src/classes/ManyToManyRelation.d.ts +3 -3
  15. package/dist/src/classes/ManyToManyRelation.js +51 -51
  16. package/dist/src/classes/ManyToManyRelation.js.map +1 -1
  17. package/dist/src/classes/ManyToOneRelation.d.ts +1 -1
  18. package/dist/src/classes/ManyToOneRelation.js +2 -2
  19. package/dist/src/classes/ManyToOneRelation.js.map +1 -1
  20. package/dist/src/classes/Migration.js +19 -19
  21. package/dist/src/classes/Migration.js.map +1 -1
  22. package/dist/src/classes/Model.d.ts +41 -14
  23. package/dist/src/classes/Model.js +132 -88
  24. package/dist/src/classes/Model.js.map +1 -1
  25. package/dist/src/classes/Model.test.js +144 -144
  26. package/dist/src/classes/Model.test.js.map +1 -1
  27. package/dist/src/classes/OneToManyRelation.d.ts +3 -3
  28. package/dist/src/classes/OneToManyRelation.js +9 -9
  29. package/dist/src/classes/OneToManyRelation.js.map +1 -1
  30. package/dist/src/classes/data/boys.js +1000 -1000
  31. package/dist/src/classes/data/family-names.js +997 -997
  32. package/dist/src/classes/data/girls.js +999 -999
  33. package/dist/src/classes/data/streets.js +291 -291
  34. package/dist/src/decorators/Column.d.ts +4 -4
  35. package/dist/src/decorators/Column.js +1 -1
  36. package/dist/src/decorators/Column.js.map +1 -1
  37. package/dist/src/models/Migration.d.ts +1 -1
  38. package/dist/src/models/Migration.js +8 -8
  39. package/dist/src/models/Migration.js.map +1 -1
  40. package/dist/tests/jest.global.setup.d.ts +1 -0
  41. package/dist/tests/jest.global.setup.js +5 -3
  42. package/dist/tests/jest.global.setup.js.map +1 -1
  43. package/package.json +5 -8
@@ -1,7 +1,37 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Model = void 0;
3
+ exports.Model = exports.ModelEventBus = void 0;
4
4
  const Database_1 = require("./Database");
5
+ /**
6
+ * Controls the fetching and decrypting of members
7
+ */
8
+ class ModelEventBus {
9
+ constructor() {
10
+ this.listeners = new Map();
11
+ }
12
+ addListener(owner, listener) {
13
+ const existing = this.listeners.get(owner);
14
+ if (existing) {
15
+ existing.push({ listener });
16
+ }
17
+ else {
18
+ this.listeners.set(owner, [{ listener }]);
19
+ }
20
+ }
21
+ removeListener(owner) {
22
+ this.listeners.delete(owner);
23
+ }
24
+ async sendEvent(value) {
25
+ const values = [];
26
+ for (const owner of this.listeners.values()) {
27
+ for (const listener of owner) {
28
+ values.push(listener.listener(value));
29
+ }
30
+ }
31
+ return await Promise.all(values);
32
+ }
33
+ }
34
+ exports.ModelEventBus = ModelEventBus;
5
35
  class Model /* static implements RowInitiable<Model> */ {
6
36
  constructor() {
7
37
  this.existsInDatabase = false;
@@ -25,7 +55,7 @@ class Model /* static implements RowInitiable<Model> */ {
25
55
  eraseProperty(key) {
26
56
  const column = this.static.columns.get(key);
27
57
  if (!column) {
28
- throw new Error("Unknown property " + key);
58
+ throw new Error('Unknown property ' + key);
29
59
  }
30
60
  delete this[key];
31
61
  this.savedProperties.delete(key);
@@ -40,22 +70,22 @@ class Model /* static implements RowInitiable<Model> */ {
40
70
  * Mark all properties as changed, so they will get updated on the next save
41
71
  */
42
72
  markAllChanged() {
43
- this.savedProperties = new Map();
73
+ this.savedProperties.clear();
44
74
  }
45
75
  /**
46
76
  * Returns the default select to select the needed properties of this table
47
77
  * @param namespace: optional namespace of this select
48
78
  */
49
79
  static getDefaultSelect(namespace = this.table) {
50
- return "`" + namespace + "`.*";
80
+ return '`' + namespace + '`.*';
51
81
  }
52
82
  static selectColumnsWithout(namespace = this.table, ...exclude) {
53
- const properties = Array.from(this.columns.keys()).flatMap((name) => (exclude.includes(name) ? [] : [name]));
54
- if (properties.length == 0) {
83
+ const properties = Array.from(this.columns.keys()).flatMap(name => (exclude.includes(name) ? [] : [name]));
84
+ if (properties.length === 0) {
55
85
  // todo: check what to do in this case.
56
- throw new Error("Not implemented yet");
86
+ throw new Error('Not implemented yet');
57
87
  }
58
- return "`" + namespace + "`.`" + properties.join("`, `" + namespace + "`.`") + "`";
88
+ return '`' + namespace + '`.`' + properties.join('`, `' + namespace + '`.`') + '`';
59
89
  }
60
90
  /**
61
91
  * Set a relation to undefined, marking it as not loaded (so it won't get saved in the next save)
@@ -78,7 +108,7 @@ class Model /* static implements RowInitiable<Model> */ {
78
108
  setOptionalRelation(relation, value) {
79
109
  // Todo: check if relation is nullable?
80
110
  if (value !== null && !value.existsInDatabase) {
81
- throw new Error("You cannot set a relation to a model that are not yet saved in the database.");
111
+ throw new Error('You cannot set a relation to a model that are not yet saved in the database.');
82
112
  }
83
113
  const t = this;
84
114
  t[relation.modelKey] = value;
@@ -87,7 +117,7 @@ class Model /* static implements RowInitiable<Model> */ {
87
117
  }
88
118
  setRelation(relation, value) {
89
119
  if (!value.existsInDatabase) {
90
- throw new Error("You cannot set a relation to a model that are not yet saved in the database.");
120
+ throw new Error('You cannot set a relation to a model that are not yet saved in the database.');
91
121
  }
92
122
  const t = this;
93
123
  t[relation.modelKey] = value;
@@ -100,7 +130,7 @@ class Model /* static implements RowInitiable<Model> */ {
100
130
  setManyRelation(relation, value) {
101
131
  value.forEach((v) => {
102
132
  if (!v.existsInDatabase) {
103
- throw new Error("You cannot set a relation to models that are not yet saved in the database.");
133
+ throw new Error('You cannot set a relation to models that are not yet saved in the database.');
104
134
  }
105
135
  });
106
136
  const t = this;
@@ -126,7 +156,7 @@ class Model /* static implements RowInitiable<Model> */ {
126
156
  model[column.name] = undefined;
127
157
  }
128
158
  }
129
- model.markSaved();
159
+ model.markSaved(); // note: we don't pass row because that value is unreliable for json values (mysql performs sorting and other opertions on keys)
130
160
  return model;
131
161
  }
132
162
  static fromRows(rows, namespace) {
@@ -138,14 +168,13 @@ class Model /* static implements RowInitiable<Model> */ {
138
168
  return [];
139
169
  });
140
170
  }
141
- markSaved() {
171
+ markSaved(fields) {
142
172
  this.existsInDatabase = true;
143
- this.savedProperties.clear();
144
173
  this.forceSaveProperties.clear();
145
174
  for (const column of this.static.columns.values()) {
146
- if (this[column.name] !== undefined) {
175
+ if ((fields ? fields[column.name] : this[column.name]) !== undefined) {
147
176
  // If undefined: do not update, since we didn't save the value
148
- this.savedProperties.set(column.name, column.saveProperty(this[column.name]));
177
+ this.savedProperties.set(column.name, fields ? fields[column.name] : column.to(this[column.name]));
149
178
  }
150
179
  }
151
180
  /// Save relation foreign keys (so we can check if the id has changed)
@@ -173,18 +202,19 @@ class Model /* static implements RowInitiable<Model> */ {
173
202
  */
174
203
  static async getByID(id) {
175
204
  const [rows] = await Database_1.Database.select(`SELECT ${this.getDefaultSelect()} FROM \`${this.table}\` WHERE \`${this.primary.name}\` = ? LIMIT 1`, [id]);
176
- if (rows.length == 0) {
205
+ if (rows.length === 0) {
177
206
  return undefined;
178
207
  }
179
208
  // Read member + address from first row
180
- return this.fromRow(rows[0][this.table]);
209
+ const row = rows[0][this.table];
210
+ return this.fromRow(row);
181
211
  }
182
212
  /**
183
213
  * Get multiple models by their ID
184
214
  * @param ids primary key of the models you want to fetch
185
215
  */
186
216
  static async getByIDs(...ids) {
187
- if (ids.length == 0) {
217
+ if (ids.length === 0) {
188
218
  return [];
189
219
  }
190
220
  const [rows] = await Database_1.Database.select(`SELECT ${this.getDefaultSelect()} FROM \`${this.table}\` WHERE \`${this.primary.name}\` IN (?) LIMIT ?`, [
@@ -198,26 +228,26 @@ class Model /* static implements RowInitiable<Model> */ {
198
228
  let whereQuery;
199
229
  const params = [];
200
230
  switch (value.sign) {
201
- case "MATCH": {
202
- let suffix = "";
231
+ case 'MATCH': {
232
+ let suffix = '';
203
233
  if (value.mode) {
204
234
  switch (value.mode) {
205
- case "BOOLEAN":
206
- suffix = " IN BOOLEAN MODE";
235
+ case 'BOOLEAN':
236
+ suffix = ' IN BOOLEAN MODE';
207
237
  break;
208
238
  default:
209
- throw new Error("Unknown match mode " + value.mode);
239
+ throw new Error('Unknown match mode ' + value.mode);
210
240
  }
211
241
  }
212
242
  whereQuery = (`MATCH(\`${this.table}\`.\`${key}\`) AGAINST(?${suffix})`);
213
243
  params.push(value.value);
214
244
  break;
215
245
  }
216
- case "LIKE":
246
+ case 'LIKE':
217
247
  whereQuery = (`\`${this.table}\`.\`${key}\` LIKE ?`);
218
248
  params.push(value.value);
219
249
  break;
220
- case "!=":
250
+ case '!=':
221
251
  if (value.value === null) {
222
252
  whereQuery = (`\`${this.table}\`.\`${key}\` IS NOT NULL`);
223
253
  }
@@ -226,23 +256,23 @@ class Model /* static implements RowInitiable<Model> */ {
226
256
  params.push(value.value);
227
257
  }
228
258
  break;
229
- case "<":
259
+ case '<':
230
260
  whereQuery = (`\`${this.table}\`.\`${key}\` < ?`);
231
261
  params.push(value.value);
232
262
  break;
233
- case ">":
263
+ case '>':
234
264
  whereQuery = (`\`${this.table}\`.\`${key}\` > ?`);
235
265
  params.push(value.value);
236
266
  break;
237
- case "<=":
267
+ case '<=':
238
268
  whereQuery = (`\`${this.table}\`.\`${key}\` <= ?`);
239
269
  params.push(value.value);
240
270
  break;
241
- case ">=":
271
+ case '>=':
242
272
  whereQuery = (`\`${this.table}\`.\`${key}\` >= ?`);
243
273
  params.push(value.value);
244
274
  break;
245
- case "=":
275
+ case '=':
246
276
  if (value.value === null) {
247
277
  whereQuery = (`\`${this.table}\`.\`${key}\` IS NULL`);
248
278
  }
@@ -251,13 +281,13 @@ class Model /* static implements RowInitiable<Model> */ {
251
281
  params.push(value.value);
252
282
  }
253
283
  break;
254
- case "IN":
284
+ case 'IN':
255
285
  if (!Array.isArray(value.value)) {
256
- throw new Error("Expected an array for IN where query");
286
+ throw new Error('Expected an array for IN where query');
257
287
  }
258
288
  if (value.value.includes(null)) {
259
289
  const filtered = value.value.filter(v => v !== null);
260
- if (filtered.length == 0) {
290
+ if (filtered.length === 0) {
261
291
  whereQuery = (`\`${this.table}\`.\`${key}\` IS NULL`);
262
292
  }
263
293
  else if (filtered.length === 1) {
@@ -277,7 +307,7 @@ class Model /* static implements RowInitiable<Model> */ {
277
307
  }
278
308
  break;
279
309
  default:
280
- throw new Error("Sign not supported.");
310
+ throw new Error('Sign not supported.');
281
311
  }
282
312
  return [whereQuery, params];
283
313
  }
@@ -285,7 +315,7 @@ class Model /* static implements RowInitiable<Model> */ {
285
315
  const whereQuery = [];
286
316
  const params = [];
287
317
  for (const key in where) {
288
- if (where.hasOwnProperty(key)) {
318
+ if (Object.hasOwnProperty.call(where, key)) {
289
319
  const value = where[key];
290
320
  if (Array.isArray(value)) {
291
321
  for (const v of value) {
@@ -294,7 +324,7 @@ class Model /* static implements RowInitiable<Model> */ {
294
324
  params.push(...p);
295
325
  }
296
326
  }
297
- else if (typeof value === "object" && value !== null && !(value instanceof Date)) {
327
+ else if (typeof value === 'object' && value !== null && !(value instanceof Date)) {
298
328
  const [w, p] = this.buildWhereOperator(key, value);
299
329
  whereQuery.push(w);
300
330
  params.push(...p);
@@ -310,9 +340,10 @@ class Model /* static implements RowInitiable<Model> */ {
310
340
  }
311
341
  }
312
342
  }
313
- return [whereQuery.join(" AND "), params];
343
+ return [whereQuery.join(' AND '), params];
314
344
  }
315
345
  /**
346
+ * @deprecated Use the new SQL package instead
316
347
  * Get multiple models by a simple where
317
348
  */
318
349
  static async where(where, extra) {
@@ -327,20 +358,20 @@ class Model /* static implements RowInitiable<Model> */ {
327
358
  if (extra && extra.sort !== undefined) {
328
359
  const sortQuery = [];
329
360
  for (const item of extra.sort) {
330
- if (typeof item == "string") {
331
- sortQuery.push(Database_1.Database.escapeId(item) + " ASC");
361
+ if (typeof item === 'string') {
362
+ sortQuery.push(Database_1.Database.escapeId(item) + ' ASC');
332
363
  }
333
- else if (typeof item.column == "string") {
334
- sortQuery.push(Database_1.Database.escapeId(item.column) + " " + ((_b = item.direction) !== null && _b !== void 0 ? _b : "ASC"));
364
+ else if (typeof item.column === 'string') {
365
+ sortQuery.push(Database_1.Database.escapeId(item.column) + ' ' + ((_b = item.direction) !== null && _b !== void 0 ? _b : 'ASC'));
335
366
  }
336
367
  else {
337
368
  // Repeat use of a where query in the sorting (needed when fulltext searching and need to sort on the score, because limit won't work without this for an unknown reason)
338
369
  const [w, p] = this.buildWhereQuery(item.column);
339
- sortQuery.push("(" + w + ") " + ((_c = item.direction) !== null && _c !== void 0 ? _c : "ASC"));
370
+ sortQuery.push('(' + w + ') ' + ((_c = item.direction) !== null && _c !== void 0 ? _c : 'ASC'));
340
371
  params.push(...p);
341
372
  }
342
373
  }
343
- query += ` ORDER BY ` + sortQuery.join(", ");
374
+ query += ` ORDER BY ` + sortQuery.join(', ');
344
375
  }
345
376
  if (extra && extra.limit !== undefined) {
346
377
  query += ` LIMIT ?`;
@@ -349,14 +380,6 @@ class Model /* static implements RowInitiable<Model> */ {
349
380
  const [rows] = await Database_1.Database.select(query, params);
350
381
  return this.fromRows(rows, this.table);
351
382
  }
352
- /**
353
- * Build your own select query, and cast the result to an arary of Model
354
- */
355
- static async select(query, params, select) {
356
- const q = (select ? select : `SELECT ${this.getDefaultSelect()} FROM \`${this.table}\` `) + query;
357
- const [rows] = await Database_1.Database.select(q, params);
358
- return this.fromRows(rows, this.table);
359
- }
360
383
  /**
361
384
  * Get multiple models by a simple where
362
385
  */
@@ -373,34 +396,29 @@ class Model /* static implements RowInitiable<Model> */ {
373
396
  /**
374
397
  * Return an object of all the properties that are changed and their database representation
375
398
  */
376
- async getChangedDatabaseProperties() {
399
+ getChangedDatabaseProperties() {
377
400
  const set = {};
378
401
  let skipUpdate = 0;
379
402
  for (const column of this.static.columns.values()) {
380
403
  // Run beforeSave
381
404
  if (column.beforeSave) {
382
- const val = column.beforeSave.call(this, this[column.name]);
383
- if (val && val.then) {
384
- this[column.name] = await val;
385
- }
386
- else {
387
- // Skip causing an event-loop jump if not needed
388
- this[column.name] = val;
389
- }
405
+ this[column.name] = column.beforeSave.call(this, this[column.name]);
390
406
  }
391
- if (column.primary && column.type == "integer" && this.static.primary.name == "id") {
407
+ if (column.primary && column.type === 'integer' && this.static.primary.name === 'id') {
392
408
  // Auto increment: not allowed to set
393
409
  continue;
394
410
  }
395
411
  if (!this.existsInDatabase && this[column.name] === undefined) {
396
412
  // In the future we might make some columns optional because they have a default value in the database.
397
413
  // But that could cause inconsitent state, so it would be better to generate default values in code.
398
- throw new Error("Tried to create model " + this.constructor.name + " with undefined property " + column.name);
414
+ throw new Error('Tried to create model ' + this.constructor.name + ' with undefined property ' + column.name);
399
415
  }
400
416
  if (this[column.name] !== undefined) {
401
417
  const forceSave = this.forceSaveProperties.has(column.name);
402
- if (forceSave || column.isChanged(this.savedProperties.get(column.name), this[column.name])) {
403
- set[column.name] = column.to(this[column.name]);
418
+ const oldSavedValue = forceSave ? undefined : this.savedProperties.get(column.name);
419
+ const saveValue = forceSave ? null : column.to(this[column.name]); // .to is expensive, so avoid calling it when not needed
420
+ if (forceSave || oldSavedValue === undefined || column.isChanged(oldSavedValue, saveValue)) {
421
+ set[column.name] = forceSave ? column.to(this[column.name]) : saveValue;
404
422
  if (column.skipUpdate && !forceSave) {
405
423
  skipUpdate++;
406
424
  }
@@ -411,10 +429,10 @@ class Model /* static implements RowInitiable<Model> */ {
411
429
  }
412
430
  async save() {
413
431
  if (!this.static.table) {
414
- throw new Error("Table name not set");
432
+ throw new Error('Table name not set');
415
433
  }
416
434
  if (!this.static.primary) {
417
- throw new Error("Primary key not set for model " + this.constructor.name + " " + this.static);
435
+ throw new Error('Primary key not set for model ' + this.constructor.name + ' ' + this.static);
418
436
  }
419
437
  // Check if relation models were modified
420
438
  for (const relation of this.static.relations) {
@@ -424,17 +442,17 @@ class Model /* static implements RowInitiable<Model> */ {
424
442
  if (relation.isSet(this)) {
425
443
  const model = this[relation.modelKey];
426
444
  if (!model.existsInDatabase) {
427
- throw new Error("You cannot set a relation that is not yet saved in the database.");
445
+ throw new Error('You cannot set a relation that is not yet saved in the database.');
428
446
  }
429
447
  if (this[relation.foreignKey] !== model.getPrimaryKey()) {
430
448
  // Should always match because setRelation will make it match on setting it.
431
- throw new Error("You cannot modify the value of a foreign key when the relation is loaded. Unload the relation first or modify the relation with setRelation");
449
+ throw new Error('You cannot modify the value of a foreign key when the relation is loaded. Unload the relation first or modify the relation with setRelation');
432
450
  }
433
451
  }
434
452
  else {
435
453
  if (this[relation.foreignKey] !== null) {
436
454
  // Should always match because setRelation will make it match on setting it.
437
- throw new Error("You cannot set a foreign key when the relation is loaded. Unload the relation first or modify the relation with setRelation");
455
+ throw new Error('You cannot set a foreign key when the relation is loaded. Unload the relation first or modify the relation with setRelation');
438
456
  }
439
457
  }
440
458
  }
@@ -442,35 +460,36 @@ class Model /* static implements RowInitiable<Model> */ {
442
460
  const id = this.getPrimaryKey();
443
461
  if (!id) {
444
462
  if (this.existsInDatabase) {
445
- throw new Error("Model " + this.constructor.name + " was loaded from the Database, but didn't select the ID. Saving not possible.");
463
+ throw new Error('Model ' + this.constructor.name + " was loaded from the Database, but didn't select the ID. Saving not possible.");
446
464
  }
447
465
  }
448
466
  else {
449
- if (!this.existsInDatabase && this.static.primary.type == "integer" && this.static.primary.name == "id") {
467
+ if (!this.existsInDatabase && this.static.primary.type === 'integer' && this.static.primary.name === 'id') {
450
468
  throw new Error(`PrimaryKey was set programmatically without fetching the model ${this.constructor.name} from the database. This is not allowed for integer primary keys.`);
451
469
  }
452
470
  }
453
- const { fields, skipUpdate } = await this.getChangedDatabaseProperties();
454
- if (Object.keys(fields).length == 0) {
471
+ const { fields, skipUpdate } = this.getChangedDatabaseProperties();
472
+ if (Object.keys(fields).length === 0) {
455
473
  if (Model.showWarnings)
456
- console.warn("Tried to update model without any properties modified");
474
+ console.warn('Tried to update model without any properties modified');
457
475
  return false;
458
476
  }
459
477
  if (this.existsInDatabase && skipUpdate === Object.keys(fields).length) {
460
478
  if (Model.showWarnings)
461
- console.warn("Tried to update model without any properties modified");
479
+ console.warn('Tried to update model without any properties modified');
462
480
  return false;
463
481
  }
464
482
  if (Model.debug)
465
- console.log("Saving " + this.constructor.name + " to...", fields);
483
+ console.log('Saving ' + this.constructor.name + ' to...', fields);
466
484
  // todo: save here
467
485
  if (!this.existsInDatabase) {
468
486
  if (Model.debug)
469
487
  console.log(`Creating new ${this.constructor.name}`);
470
- const [result] = await Database_1.Database.insert("INSERT INTO `" + this.static.table + "` SET ?", [fields]);
471
- if (this.static.primary.type == "integer" && this.static.primary.name == "id") {
488
+ const [result] = await Database_1.Database.insert('INSERT INTO `' + this.static.table + '` SET ?', [fields]);
489
+ if (this.static.primary.type === 'integer' && this.static.primary.name === 'id') {
472
490
  // Auto increment value
473
491
  this[this.static.primary.name] = result.insertId;
492
+ fields[this.static.primary.name] = result.insertId; // Also mark saved
474
493
  if (Model.debug)
475
494
  console.log(`New id = ${this[this.static.primary.name]}`);
476
495
  }
@@ -478,37 +497,62 @@ class Model /* static implements RowInitiable<Model> */ {
478
497
  else {
479
498
  if (Model.debug)
480
499
  console.log(`Updating ${this.constructor.name} where ${this.static.primary.name} = ${id}`);
481
- const [result] = await Database_1.Database.update("UPDATE `" + this.static.table + "` SET ? WHERE `" + this.static.primary.name + "` = ?", [fields, id]);
482
- if (result.changedRows != 1 && Model.showWarnings) {
500
+ const [result] = await Database_1.Database.update('UPDATE `' + this.static.table + '` SET ? WHERE `' + this.static.primary.name + '` = ?', [fields, id]);
501
+ if (result.changedRows !== 1 && Model.showWarnings) {
483
502
  console.warn(`Updated ${this.constructor.name}, but it didn't change a row. Check if ID exists.`);
484
503
  }
485
504
  }
486
- // Mark everything as saved
487
- this.markSaved();
505
+ // Emit event
506
+ if (this.existsInDatabase) {
507
+ // Keep reference to old properties before marking saved
508
+ const originalProperties = Object.fromEntries(Array.from(this.savedProperties.entries()));
509
+ // Mark saved before sending the event
510
+ this.markSaved(fields);
511
+ await this.static.modelEventBus.sendEvent({
512
+ type: 'updated',
513
+ model: this,
514
+ changedFields: fields,
515
+ originalFields: originalProperties,
516
+ getOldModel: () => {
517
+ // Build a new model as if it was loaded from the database using the same original properties
518
+ const v = this.static.fromRow(originalProperties);
519
+ if (v === undefined) {
520
+ throw new Error('Failed to create old model: primary key might be missing');
521
+ }
522
+ return v;
523
+ },
524
+ });
525
+ }
526
+ else {
527
+ this.markSaved(fields);
528
+ await this.static.modelEventBus.sendEvent({ type: 'created', model: this });
529
+ }
488
530
  return true;
489
531
  }
490
532
  async delete() {
491
533
  const id = this.getPrimaryKey();
492
534
  if (!id && this.existsInDatabase) {
493
- throw new Error("Model " + this.constructor.name + " was loaded from the Database, but didn't select the ID. Deleting not possible.");
535
+ throw new Error('Model ' + this.constructor.name + " was loaded from the Database, but didn't select the ID. Deleting not possible.");
494
536
  }
495
537
  if (!id || !this.existsInDatabase) {
496
- throw new Error("Model " + this.constructor.name + " can't be deleted if it doesn't exist in the database already");
538
+ throw new Error('Model ' + this.constructor.name + " can't be deleted if it doesn't exist in the database already");
497
539
  }
498
540
  if (Model.debug)
499
541
  console.log(`Updating ${this.constructor.name} where ${this.static.primary.name} = ${id}`);
500
- const [result] = await Database_1.Database.delete("DELETE FROM `" + this.static.table + "` WHERE `" + this.static.primary.name + "` = ?", [id]);
501
- if (result.affectedRows != 1 && Model.showWarnings) {
542
+ const [result] = await Database_1.Database.delete('DELETE FROM `' + this.static.table + '` WHERE `' + this.static.primary.name + '` = ?', [id]);
543
+ if (result.affectedRows !== 1 && Model.showWarnings) {
502
544
  console.warn(`Deleted ${this.constructor.name}, but it didn't change a row. Check if ID exists.`);
503
545
  }
504
546
  this.existsInDatabase = false;
505
- if (this.static.primary.type == "integer" && this.static.primary.name == "id") {
547
+ if (this.static.primary.type === 'integer' && this.static.primary.name === 'id') {
506
548
  this.eraseProperty(this.static.primary.name);
507
549
  }
508
550
  this.savedProperties.clear();
551
+ await this.static.modelEventBus.sendEvent({ type: 'deleted', model: this });
509
552
  }
510
553
  }
511
554
  exports.Model = Model;
555
+ Model.modelEventBus = new ModelEventBus();
512
556
  Model.debug = false;
513
557
  Model.showWarnings = false;
514
558
  //# sourceMappingURL=Model.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Model.js","sourceRoot":"","sources":["../../../src/classes/Model.ts"],"names":[],"mappings":";;;AACA,yCAAsC;AAQtC,MAAa,KAAK,CAAC,2CAA2C;IAsB1D;QAVA,qBAAgB,GAAG,KAAK,CAAC;QAEjB,oBAAe,GAAG,IAAI,GAAG,EAAe,CAAC;QAEjD;;;WAGG;QACK,wBAAmB,GAAG,IAAI,GAAG,EAAU,CAAC;QAG5C,cAAc;QACd,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;YACxB,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC;SAC9B;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;YACtB,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;SACnD;IACL,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,GAAW;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,EAAE;YACT,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,GAAG,CAAC,CAAC;SAC9C;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,GAAW;QACzB,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,cAAc;QACV,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,EAAe,CAAC;IAClD,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,gBAAgB,CAAC,YAAoB,IAAI,CAAC,KAAK;QAClD,OAAO,GAAG,GAAG,SAAS,GAAG,KAAK,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,oBAAoB,CAAC,YAAoB,IAAI,CAAC,KAAK,EAAE,GAAG,OAAiB;QAC5E,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE7G,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE;YACxB,uCAAuC;YACvC,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;SAC1C;QACD,OAAO,GAAG,GAAG,SAAS,GAAG,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC;IACvF,CAAC;IAED;;;OAGG;IACH,cAAc,CAEV,QAAqC;QAErC,uCAAuC;QACvC,MAAM,CAAC,GAAG,IAAW,CAAC;QACtB,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC5B,OAAO,CAAC,CAAC;IACb,CAAC;IAED;;;OAGG;IACH,aAAa,CAET,QAAqC;QAErC,uCAAuC;QACvC,OAAO,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC;IAED,mBAAmB,CACf,QAAuC,EACvC,KAAmB;QAEnB,uCAAuC;QAEvC,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE;YAC3C,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC;SACnG;QACD,MAAM,CAAC,GAAG,IAAW,CAAC;QACtB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;QAC7B,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9D,OAAO,CAAC,CAAC;IACb,CAAC;IAED,WAAW,CAA8D,QAAuC,EAAE,KAAQ;QACtH,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE;YACzB,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC;SACnG;QACD,MAAM,CAAC,GAAG,IAAW,CAAC;QACtB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;QAC7B,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;QAC/C,OAAO,CAAC,CAAC;IACb,CAAC;IAED;;OAEG;IACH,eAAe,CACX,QAAuF,EACvF,KAAc;QAEd,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAChB,IAAI,CAAC,CAAC,CAAC,gBAAgB,EAAE;gBACrB,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC,CAAC;aAClG;QACL,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,IAAW,CAAC;QACtB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;QAC7B,OAAO,CAAC,CAAC;IACb,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,OAAO,CAAkC,GAAQ;QACpD,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,EAAE;YAClH,OAAO,SAAS,CAAC;SACpB;QAED,MAAM,KAAK,GAAG,IAAI,IAAI,EAAqB,CAAC;QAC5C,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;YACxC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE;gBAChC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC5C,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;aAC9B;iBAAM;gBACH,gDAAgD;gBAChD,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;aAClC;SACJ;QAED,KAAK,CAAC,SAAS,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,CAAC,QAAQ,CAAkC,IAAW,EAAE,SAAiB;QAC3E,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACxB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;YAC3C,IAAI,KAAK,EAAE;gBACP,OAAO,CAAC,KAAK,CAAC,CAAC;aAClB;YACD,OAAO,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,SAAS;QACb,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAE7B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;QAEjC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;YAC/C,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE;gBACjC,8DAA8D;gBAC9D,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACjF;SACJ;QAED,sEAAsE;QACtE,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;YAC1C,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;gBACzB,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;oBACtB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACtC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;iBACrD;qBAAM;oBACH,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;iBACpC;aACJ;SACJ;IACL,CAAC;IAED,IAAI,MAAM;QACN,OAAO,IAAI,CAAC,WAA2B,CAAC;IAC5C,CAAC;IAED,aAAa;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAkC,EAAmB;QACrE,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,mBAAQ,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,gBAAgB,EAAE,WAAW,IAAI,CAAC,KAAK,cAAc,IAAI,CAAC,OAAO,CAAC,IAAI,gBAAgB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAElJ,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;YAClB,OAAO,SAAS,CAAC;SACpB;QAED,uCAAuC;QACvC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAkC,GAAG,GAAwB;QAC9E,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE;YACjB,OAAO,EAAE,CAAC;SACb;QACD,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,mBAAQ,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,gBAAgB,EAAE,WAAW,IAAI,CAAC,KAAK,cAAc,IAAI,CAAC,OAAO,CAAC,IAAI,mBAAmB,EAAE;YAC3I,GAAG;YACH,GAAG,CAAC,MAAM;SACb,CAAC,CAAC;QAEH,uCAAuC;QACvC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,GAAW,EAAE,KAAe;QAClD,IAAI,UAAkB,CAAA;QACtB,MAAM,MAAM,GAAU,EAAE,CAAC;QAEzB,QAAQ,KAAK,CAAC,IAAI,EAAE;YAChB,KAAK,OAAO,CAAC,CAAC;gBACV,IAAI,MAAM,GAAG,EAAE,CAAC;gBAChB,IAAI,KAAK,CAAC,IAAI,EAAE;oBACZ,QAAQ,KAAK,CAAC,IAAI,EAAE;wBAChB,KAAK,SAAS;4BACV,MAAM,GAAG,kBAAkB,CAAC;4BAC5B,MAAM;wBACV;4BACI,MAAM,IAAI,KAAK,CAAC,qBAAqB,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;qBAE1D;iBACJ;gBACD,UAAU,GAAG,CAAC,WAAW,IAAI,CAAC,KAAK,QAAQ,GAAG,gBAAgB,MAAM,GAAG,CAAC,CAAC;gBACzE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACzB,MAAM;aACT;YAED,KAAK,MAAM;gBACP,UAAU,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,QAAQ,GAAG,WAAW,CAAC,CAAC;gBACrD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACzB,MAAM;YAEV,KAAK,IAAI;gBACL,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE;oBACtB,UAAU,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,QAAQ,GAAG,gBAAgB,CAAC,CAAC;iBAC7D;qBAAM;oBACH,UAAU,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,QAAQ,GAAG,SAAS,CAAC,CAAC;oBACnD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;iBAC5B;gBACD,MAAM;YAEV,KAAK,GAAG;gBACJ,UAAU,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,QAAQ,GAAG,QAAQ,CAAC,CAAC;gBAClD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACzB,MAAM;YAEV,KAAK,GAAG;gBACJ,UAAU,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,QAAQ,GAAG,QAAQ,CAAC,CAAC;gBAClD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACzB,MAAM;YAEV,KAAK,IAAI;gBACL,UAAU,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,QAAQ,GAAG,SAAS,CAAC,CAAC;gBACnD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACzB,MAAM;YAEV,KAAK,IAAI;gBACL,UAAU,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,QAAQ,GAAG,SAAS,CAAC,CAAC;gBACnD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACzB,MAAM;YAEV,KAAK,GAAG;gBACJ,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE;oBACtB,UAAU,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,QAAQ,GAAG,YAAY,CAAC,CAAC;iBACzD;qBAAM;oBACH,UAAU,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,QAAQ,GAAG,QAAQ,CAAC,CAAC;oBAClD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;iBAC5B;gBACD,MAAM;YAEV,KAAK,IAAI;gBACL,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;oBAC7B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;iBAC1D;gBACD,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;oBAC5B,MAAM,QAAQ,GAAI,KAAK,CAAC,KAAoC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAA;oBACpF,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE;wBACtB,UAAU,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,QAAQ,GAAG,YAAY,CAAC,CAAC;qBACzD;yBAAM,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;wBAC7B,gBAAgB;wBACjB,UAAU,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,QAAQ,GAAG,eAAe,IAAI,CAAC,KAAK,QAAQ,GAAG,aAAa,CAAC,CAAC;wBAC5F,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;qBAC5B;yBAAM;wBACH,gBAAgB;wBAChB,UAAU,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,QAAQ,GAAG,kBAAkB,IAAI,CAAC,KAAK,QAAQ,GAAG,aAAa,CAAC,CAAC;wBAC/F,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;qBACzB;iBAEJ;qBAAM;oBACH,UAAU,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,QAAQ,GAAG,WAAW,CAAC,CAAC;oBACrD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;iBAC5B;gBAED,MAAM;YAEV;gBACI,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;SAC9C;QAED,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IAC/B,CAAC;IAED,MAAM,CAAC,eAAe,CAAC,KAAoB;QACvC,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,MAAM,MAAM,GAAU,EAAE,CAAC;QAEzB,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE;YACrB,IAAI,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;gBAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gBACzB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;oBACtB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;wBACnB,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;wBAC9C,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;wBAClB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;qBACpB;iBACJ;qBAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,YAAY,IAAI,CAAC,EAAE;oBAChF,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;oBAClD,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;oBAClB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;iBACpB;qBAAM;oBACH,IAAI,KAAK,KAAK,IAAI,EAAE;wBAChB,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,QAAQ,GAAG,YAAY,CAAC,CAAC;qBAC3D;yBAAM;wBACH,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,QAAQ,GAAG,QAAQ,CAAC,CAAC;wBACpD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qBACtB;iBACJ;aACJ;SACJ;QAED,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,KAAK,CAAkC,KAAoB,EAAE,KAIzE;;QACG,MAAM,MAAM,GAAU,EAAE,CAAA;QAExB,IAAI,KAAK,GAAG,UAAU,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,mCAAI,IAAI,CAAC,gBAAgB,EAAE,WAAW,IAAI,CAAC,KAAK,IAAI,CAAA;QACvF,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YACjC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;YACnD,KAAK,IAAI,QAAQ,GAAG,UAAU,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;SACpB;QAED,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE;YACnC,MAAM,SAAS,GAAa,EAAE,CAAA;YAE9B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,EAAE;gBAC3B,IAAI,OAAO,IAAI,IAAI,QAAQ,EAAE;oBACzB,SAAS,CAAC,IAAI,CAAC,mBAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAA;iBACnD;qBAAM,IAAI,OAAO,IAAI,CAAC,MAAM,IAAI,QAAQ,EAAE;oBACvC,SAAS,CAAC,IAAI,CAAC,mBAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAC,GAAG,GAAC,CAAC,MAAA,IAAI,CAAC,SAAS,mCAAI,KAAK,CAAC,CAAC,CAAA;iBAC/E;qBAAM;oBACH,yKAAyK;oBACzK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;oBAEhD,SAAS,CAAC,IAAI,CAAC,GAAG,GAAE,CAAC,GAAG,IAAI,GAAG,CAAC,MAAA,IAAI,CAAC,SAAS,mCAAI,KAAK,CAAC,CAAC,CAAA;oBACzD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;iBACpB;aACJ;YAED,KAAK,IAAI,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAChD;QAED,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE;YACpC,KAAK,IAAI,UAAU,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;SAC5B;QAED,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,mBAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAEpD,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CAAkC,KAAa,EAAE,MAAa,EAAE,MAAe;QAC9F,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,gBAAgB,EAAE,WAAW,IAAI,CAAC,KAAK,KAAK,CAAC,GAAC,KAAK,CAAC;QAChG,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,mBAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,GAAG,CAAkC,KAAc;QAC5D,MAAM,MAAM,GAAU,EAAE,CAAC;QACzB,IAAI,KAAK,GAAG,UAAU,IAAI,CAAC,gBAAgB,EAAE,WAAW,IAAI,CAAC,KAAK,IAAI,CAAC;QAEvE,IAAI,KAAK,EAAE;YACP,KAAK,IAAI,UAAU,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACtB;QAED,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,mBAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,4BAA4B;QAC9B,MAAM,GAAG,GAAG,EAAE,CAAC;QACf,IAAI,UAAU,GAAG,CAAC,CAAA;QAElB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE;YAC/C,iBAAiB;YACjB,IAAI,MAAM,CAAC,UAAU,EAAE;gBACnB,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC5D,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE;oBACjB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAO,GAAoB,CAAA;iBAClD;qBAAM;oBACH,gDAAgD;oBAChD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAA;iBAC1B;aACJ;YAED,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,IAAI,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,EAAE;gBAChF,qCAAqC;gBACrC,SAAS;aACZ;YAED,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE;gBAC3D,uGAAuG;gBACvG,oGAAoG;gBACpG,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,2BAA2B,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;aACjH;YAED,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE;gBACjC,MAAM,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;gBAC3D,IAAI,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE;oBACzF,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;oBAEhD,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,SAAS,EAAE;wBACjC,UAAU,EAAE,CAAA;qBACf;iBACJ;aACJ;SACJ;QAED,OAAO,EAAC,MAAM,EAAE,GAAG,EAAE,UAAU,EAAC,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,IAAI;QACN,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;YACpB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;SACzC;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;YACtB,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;SACjG;QAED,yCAAyC;QACzC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;YAC1C,mFAAmF;YACnF,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;gBACzB,wDAAwD;gBACxD,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;oBACtB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAU,CAAC;oBAE/C,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE;wBACzB,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;qBACvF;oBAED,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,KAAK,CAAC,aAAa,EAAE,EAAE;wBACrD,4EAA4E;wBAC5E,MAAM,IAAI,KAAK,CACX,6IAA6I,CAChJ,CAAC;qBACL;iBACJ;qBAAM;oBACH,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE;wBACpC,4EAA4E;wBAC5E,MAAM,IAAI,KAAK,CACX,6HAA6H,CAChI,CAAC;qBACL;iBACJ;aACJ;SACJ;QAED,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAChC,IAAI,CAAC,EAAE,EAAE;YACL,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACvB,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,+EAA+E,CAAC,CAAC;aACvI;SACJ;aAAM;YACH,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,EAAE;gBACrG,MAAM,IAAI,KAAK,CACX,kEAAkE,IAAI,CAAC,WAAW,CAAC,IAAI,mEAAmE,CAC7J,CAAC;aACL;SACJ;QAED,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,IAAI,CAAC,4BAA4B,EAAE,CAAC;QAEzE,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE;YACjC,IAAI,KAAK,CAAC,YAAY;gBAAE,OAAO,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;YAC9F,OAAO,KAAK,CAAC;SAChB;QAED,IAAI,IAAI,CAAC,gBAAgB,IAAI,UAAU,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE;YACpE,IAAI,KAAK,CAAC,YAAY;gBAAE,OAAO,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;YAC9F,OAAO,KAAK,CAAC;SAChB;QAED,IAAI,KAAK,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,QAAQ,EAAE,MAAM,CAAC,CAAC;QAEnF,kBAAkB;QAClB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACxB,IAAI,KAAK,CAAC,KAAK;gBAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;YAEtE,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,mBAAQ,CAAC,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;YAElG,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,EAAE;gBAC3E,uBAAuB;gBACvB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;gBACjD,IAAI,KAAK,CAAC,KAAK;oBAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAC9E;SACJ;aAAM;YACH,IAAI,KAAK,CAAC,KAAK;gBAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,WAAW,CAAC,IAAI,UAAU,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;YAE5G,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,mBAAQ,CAAC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;YAC9I,IAAI,MAAM,CAAC,WAAW,IAAI,CAAC,IAAI,KAAK,CAAC,YAAY,EAAE;gBAC/C,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,IAAI,mDAAmD,CAAC,CAAC;aACrG;SACJ;QAED,2BAA2B;QAC3B,IAAI,CAAC,SAAS,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,MAAM;QACR,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAEhC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,gBAAgB,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,iFAAiF,CAAC,CAAC;SACzI;QAED,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC/B,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,+DAA+D,CAAC,CAAC;SACvH;QAED,IAAI,KAAK,CAAC,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,WAAW,CAAC,IAAI,UAAU,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;QAE5G,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,mBAAQ,CAAC,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACrI,IAAI,MAAM,CAAC,YAAY,IAAI,CAAC,IAAI,KAAK,CAAC,YAAY,EAAE;YAChD,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,IAAI,mDAAmD,CAAC,CAAC;SACrG;QAED,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;QAC9B,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,EAAE;YAC3E,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAChD;QACD,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IACjC,CAAC;;AA3lBL,sBA4lBC;AArlBU,WAAK,GAAG,KAAK,CAAC;AACd,kBAAY,GAAG,KAAK,CAAC"}
1
+ {"version":3,"file":"Model.js","sourceRoot":"","sources":["../../../src/classes/Model.ts"],"names":[],"mappings":"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"}