@spinajs/orm 2.0.491 → 2.0.495

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 (86) hide show
  1. package/README.md +80 -80
  2. package/lib/cjs/builders.d.ts +1 -2
  3. package/lib/cjs/builders.d.ts.map +1 -1
  4. package/lib/cjs/builders.js +2 -0
  5. package/lib/cjs/builders.js.map +1 -1
  6. package/lib/cjs/decorators.d.ts +22 -0
  7. package/lib/cjs/decorators.d.ts.map +1 -1
  8. package/lib/cjs/decorators.js +29 -0
  9. package/lib/cjs/decorators.js.map +1 -1
  10. package/lib/cjs/descriptor.d.ts.map +1 -1
  11. package/lib/cjs/descriptor.js +2 -0
  12. package/lib/cjs/descriptor.js.map +1 -1
  13. package/lib/cjs/driver.d.ts +12 -0
  14. package/lib/cjs/driver.d.ts.map +1 -1
  15. package/lib/cjs/driver.js +12 -0
  16. package/lib/cjs/driver.js.map +1 -1
  17. package/lib/cjs/interfaces.d.ts +35 -24
  18. package/lib/cjs/interfaces.d.ts.map +1 -1
  19. package/lib/cjs/interfaces.js.map +1 -1
  20. package/lib/cjs/model.d.ts +26 -5
  21. package/lib/cjs/model.d.ts.map +1 -1
  22. package/lib/cjs/model.js +32 -9
  23. package/lib/cjs/model.js.map +1 -1
  24. package/lib/cjs/orm.d.ts.map +1 -1
  25. package/lib/cjs/orm.js +4 -1
  26. package/lib/cjs/orm.js.map +1 -1
  27. package/lib/cjs/relation-objects.d.ts +76 -163
  28. package/lib/cjs/relation-objects.d.ts.map +1 -1
  29. package/lib/cjs/relation-objects.js +223 -192
  30. package/lib/cjs/relation-objects.js.map +1 -1
  31. package/lib/cjs/schema-providers.d.ts +34 -0
  32. package/lib/cjs/schema-providers.d.ts.map +1 -1
  33. package/lib/cjs/schema-providers.js +59 -3
  34. package/lib/cjs/schema-providers.js.map +1 -1
  35. package/lib/cjs/schema.d.ts +20 -3
  36. package/lib/cjs/schema.d.ts.map +1 -1
  37. package/lib/cjs/schema.js +59 -9
  38. package/lib/cjs/schema.js.map +1 -1
  39. package/lib/cjs/snapshot.d.ts +1 -1
  40. package/lib/cjs/snapshot.d.ts.map +1 -1
  41. package/lib/cjs/snapshot.js +9 -2
  42. package/lib/cjs/snapshot.js.map +1 -1
  43. package/lib/mjs/builders.d.ts +1 -2
  44. package/lib/mjs/builders.d.ts.map +1 -1
  45. package/lib/mjs/builders.js +2 -0
  46. package/lib/mjs/builders.js.map +1 -1
  47. package/lib/mjs/decorators.d.ts +22 -0
  48. package/lib/mjs/decorators.d.ts.map +1 -1
  49. package/lib/mjs/decorators.js +28 -0
  50. package/lib/mjs/decorators.js.map +1 -1
  51. package/lib/mjs/descriptor.d.ts.map +1 -1
  52. package/lib/mjs/descriptor.js +2 -0
  53. package/lib/mjs/descriptor.js.map +1 -1
  54. package/lib/mjs/driver.d.ts +12 -0
  55. package/lib/mjs/driver.d.ts.map +1 -1
  56. package/lib/mjs/driver.js +12 -0
  57. package/lib/mjs/driver.js.map +1 -1
  58. package/lib/mjs/interfaces.d.ts +35 -24
  59. package/lib/mjs/interfaces.d.ts.map +1 -1
  60. package/lib/mjs/interfaces.js.map +1 -1
  61. package/lib/mjs/model.d.ts +26 -5
  62. package/lib/mjs/model.d.ts.map +1 -1
  63. package/lib/mjs/model.js +32 -9
  64. package/lib/mjs/model.js.map +1 -1
  65. package/lib/mjs/orm.d.ts.map +1 -1
  66. package/lib/mjs/orm.js +4 -1
  67. package/lib/mjs/orm.js.map +1 -1
  68. package/lib/mjs/relation-objects.d.ts +76 -163
  69. package/lib/mjs/relation-objects.d.ts.map +1 -1
  70. package/lib/mjs/relation-objects.js +225 -194
  71. package/lib/mjs/relation-objects.js.map +1 -1
  72. package/lib/mjs/schema-providers.d.ts +34 -0
  73. package/lib/mjs/schema-providers.d.ts.map +1 -1
  74. package/lib/mjs/schema-providers.js +59 -3
  75. package/lib/mjs/schema-providers.js.map +1 -1
  76. package/lib/mjs/schema.d.ts +20 -3
  77. package/lib/mjs/schema.d.ts.map +1 -1
  78. package/lib/mjs/schema.js +59 -9
  79. package/lib/mjs/schema.js.map +1 -1
  80. package/lib/mjs/snapshot.d.ts +1 -1
  81. package/lib/mjs/snapshot.d.ts.map +1 -1
  82. package/lib/mjs/snapshot.js +9 -2
  83. package/lib/mjs/snapshot.js.map +1 -1
  84. package/lib/tsconfig.cjs.tsbuildinfo +1 -1
  85. package/lib/tsconfig.mjs.tsbuildinfo +1 -1
  86. package/package.json +75 -73
@@ -16,6 +16,7 @@ exports.OneToManyRelationList = exports.ManyToManyRelationList = exports.SingleQ
16
16
  /* eslint-disable prettier/prettier */
17
17
  const interfaces_js_1 = require("./interfaces.js");
18
18
  const di_1 = require("@spinajs/di");
19
+ const luxon_1 = require("luxon");
19
20
  const builders_js_1 = require("./builders.js");
20
21
  const orm_js_1 = require("./orm.js");
21
22
  const lodash_1 = __importDefault(require("lodash"));
@@ -23,52 +24,95 @@ const descriptor_js_1 = require("./descriptor.js");
23
24
  const primary_keys_js_1 = require("./primary-keys.js");
24
25
  const exceptions_js_1 = require("./exceptions.js");
25
26
  /**
26
- * Builds a lodash iteratee for the given primary key columns. A single column stays a plain
27
- * property name ( lodash's fast path ); a composite key becomes a function that flattens the
28
- * tuple, because an array iteratee would be read as a property PATH `_.differenceBy(a, b,
29
- * ['TenantId','Code'])` resolves `obj['TenantId']['Code']`, undefined for every row, so every
30
- * row would compare equal.
27
+ * Builds the equality used by every keyed set operation.
28
+ *
29
+ * Same reference is always equal. Two DIFFERENT rows are equal only when every key column is
30
+ * set on both and the flattened key strings match — a fresh, unsaved model ( undefined key )
31
+ * never equals another row, so two new models are two members, not one. The previous
32
+ * `differenceBy` iteratee stringified undefined keys and collapsed all unsaved rows into one.
31
33
  */
32
- function pkIteratee(pKey) {
33
- if (pKey.length === 1) {
34
- return pKey[0];
34
+ function pkComparator(pKey) {
35
+ return (a, b) => {
36
+ if (a === b) {
37
+ return true;
38
+ }
39
+ if (pKey.length === 0) {
40
+ return false;
41
+ }
42
+ const isSet = (x) => pKey.every((k) => x?.[k] !== null && x?.[k] !== undefined);
43
+ if (!isSet(a) || !isSet(b)) {
44
+ return false;
45
+ }
46
+ return (0, primary_keys_js_1.pkKeyStringFor)(a, pKey) === (0, primary_keys_js_1.pkKeyStringFor)(b, pKey);
47
+ };
48
+ }
49
+ /**
50
+ * A set operation with no comparator falls back to primary key equality, which needs key
51
+ * columns to exist. Comparing keyless rows silently matches nothing ( or everything ), so
52
+ * fail loudly instead.
53
+ */
54
+ function assertSetOpKeys(pKey, callback) {
55
+ if (!callback && pKey.length === 0) {
56
+ throw new exceptions_js_1.OrmException('set operation compares by primary key, but the model declares no primary key columns; pass an explicit comparator callback');
35
57
  }
36
- return (x) => (0, primary_keys_js_1.pkKeyStringFor)(x, pKey);
37
58
  }
59
+ /**
60
+ * Pure, in-memory set algebra over model collections. Nothing here touches the database —
61
+ * apply a result with `relation.set(...)` and persist it with `sync()` / `update()` / `save()`.
62
+ */
38
63
  class Dataset {
39
64
  /**
40
- *
41
- * Calculates difference between data in this relation and provides set. Result is saved to db.
65
+ * Calculates the symmetric difference between the relation data and the provided dataset —
66
+ * members of either set that are not in the other. In-memory only; persist with `sync()`.
42
67
  *
43
68
  * @param dataset - data to compare
44
- * @param callback - function to compare objects, if none provideded - primary key value is used
69
+ * @param callback - function to compare objects, if none provided - primary key value is used
45
70
  */
46
71
  static diff(dataset, callback) {
47
72
  return (datasetB, pKey) => {
48
- // TODO: maybe refactor for speedup, this is not optimal
49
- // two calls to _.difference is not optimal, but it is easy to implement
50
- const iteratee = pkIteratee(pKey);
51
- // calculate difference between this data in relation and dataset ( objects from this relation)
52
- const result = callback ? lodash_1.default.differenceWith(dataset, [...datasetB], callback) : lodash_1.default.differenceBy(dataset, [...datasetB], iteratee);
53
- // calculate difference between dataset and data in this relation ( objects from dataset )
54
- const result2 = callback ? lodash_1.default.differenceWith([...datasetB], dataset, callback) : lodash_1.default.differenceBy([...datasetB], dataset, iteratee);
55
- // combine difference from two sets
56
- const finalDiff = [...result, ...result2];
57
- return finalDiff;
73
+ assertSetOpKeys(pKey, callback);
74
+ const eq = callback ?? pkComparator(pKey);
75
+ // members of dataset that are not in the relation data
76
+ const result = lodash_1.default.differenceWith(dataset, [...datasetB], eq);
77
+ // members of the relation data that are not in dataset
78
+ const result2 = lodash_1.default.differenceWith([...datasetB], dataset, eq);
79
+ return [...result, ...result2];
58
80
  };
59
81
  }
60
82
  /**
61
- *
62
- * Calculates intersection between data in this relation and provided dataset
63
- * It saves result to db
83
+ * Calculates the intersection between the relation data and the provided dataset.
84
+ * In-memory only; persist with `sync()`.
64
85
  *
65
86
  * @param dataset - dataset to compare
66
87
  * @param callback - function to compare models, if not set it is compared by primary key value
67
88
  */
68
89
  static intersection(dataset, callback) {
69
90
  return (datasetB, pKey) => {
70
- const iteratee = pkIteratee(pKey);
71
- return callback ? lodash_1.default.intersectionWith(dataset, [...datasetB], callback) : lodash_1.default.intersectionBy(dataset, [...datasetB], iteratee);
91
+ assertSetOpKeys(pKey, callback);
92
+ const eq = callback ?? pkComparator(pKey);
93
+ return lodash_1.default.intersectionWith(dataset, [...datasetB], eq);
94
+ };
95
+ }
96
+ /**
97
+ * Calculates the union of the relation data and the provided dataset. Members already
98
+ * present ( by primary key or comparator ) are kept once, the relation's own instance
99
+ * winning over the incoming duplicate. Unsaved models compare by reference, so they are
100
+ * always appended. In-memory only; persist with `sync()`.
101
+ *
102
+ * @param dataset - data to add
103
+ * @param callback - function to compare models, if not set it is compared by primary key value
104
+ */
105
+ static union(dataset, callback) {
106
+ return (datasetB, pKey) => {
107
+ assertSetOpKeys(pKey, callback);
108
+ const eq = callback ?? pkComparator(pKey);
109
+ const result = [...datasetB];
110
+ for (const item of dataset) {
111
+ if (!result.some((existing) => eq(existing, item))) {
112
+ result.push(item);
113
+ }
114
+ }
115
+ return result;
72
116
  };
73
117
  }
74
118
  }
@@ -80,15 +124,14 @@ exports.Dataset = Dataset;
80
124
  */
81
125
  let Relation = class Relation extends Array {
82
126
  /**
83
- * Array methods that derive a new collection ( `splice`, `filter`, `slice`, `concat`, … )
84
- * construct `new this.constructor[Symbol.species](len)` by default. That would call this
85
- * class's constructor with no relation descriptor, and the very next line dereferences
86
- * `this.Relation.TargetModel` — so `order.Items.splice(0, 1)` threw
127
+ * Array methods that derive a new collection ( `splice`, `filter`, `slice`, `concat`,
128
+ * `map`, … ) construct `new this.constructor[Symbol.species](len)` by default. That would
129
+ * call this class's constructor with no relation descriptor, and the very next line
130
+ * dereferences `this.Relation.TargetModel` — so `order.Items.splice(0, 1)` threw
87
131
  * `Cannot read properties of undefined (reading 'TargetModel')`.
88
132
  *
89
133
  * Deriving plain arrays is also the right semantics: a slice of a relation is a list of
90
- * models, not a relation with an owner. ( The hand-written `map()` below predates this and
91
- * worked around the same thing for one method. )
134
+ * models, not a relation with an owner.
92
135
  */
93
136
  static get [Symbol.species]() {
94
137
  return Array;
@@ -106,7 +149,6 @@ let Relation = class Relation extends Array {
106
149
  if (this.TargetModelDescriptor) {
107
150
  this.Driver = di_1.DI.resolve('OrmConnection', [this.TargetModelDescriptor.Connection]);
108
151
  }
109
- this.IsModelAForwardRef = !(0, di_1.isConstructor)(this.Model);
110
152
  }
111
153
  /**
112
154
  * The owner-side value this relation joins on.
@@ -123,13 +165,18 @@ let Relation = class Relation extends Array {
123
165
  const key = this.Relation?.PrimaryKey;
124
166
  return key ? this.Owner[key] : this.Owner.PrimaryKeyValue;
125
167
  }
126
- map(callbackfn, thisArg) {
127
- const result = [];
128
- for (let index = 0; index < this.length; index++) {
129
- const element = this[index];
130
- result.push(callbackfn.call(thisArg, element, index, this));
168
+ remove(obj) {
169
+ let toRemove;
170
+ if (lodash_1.default.isFunction(obj)) {
171
+ toRemove = [...this].filter(obj);
172
+ }
173
+ else {
174
+ const candidates = Array.isArray(obj) ? obj : [obj];
175
+ const eq = pkComparator((0, primary_keys_js_1.pkColumns)(this.TargetModelDescriptor));
176
+ toRemove = [...this].filter((member) => candidates.some((c) => eq(member, c)));
131
177
  }
132
- return result;
178
+ this.set((data) => data.filter((d) => !toRemove.includes(d)));
179
+ return toRemove;
133
180
  }
134
181
  /**
135
182
  * Delete all objects from relation ( alias for empty )
@@ -143,6 +190,51 @@ let Relation = class Relation extends Array {
143
190
  empty() {
144
191
  this.length = 0;
145
192
  }
193
+ /**
194
+ * Calculates the intersection between this relation and the provided dataset. Pure
195
+ * computation — apply it with `set()` and persist with `sync()` / `save()`.
196
+ *
197
+ * @param dataset - dataset to compare
198
+ * @param callback - function to compare models, if not set it is compared by primary key value
199
+ * @returns members present in both sets
200
+ */
201
+ intersection(dataset, callback) {
202
+ return Dataset.intersection(dataset, callback)([...this], (0, primary_keys_js_1.pkColumns)(this.TargetModelDescriptor));
203
+ }
204
+ /**
205
+ * Adds the dataset's members to this relation, skipping members already present ( compared
206
+ * by primary key, or by the callback ). In-memory only — nothing is written until `sync()`,
207
+ * `update()` or `save()`.
208
+ *
209
+ * @param dataset - data to add
210
+ * @param callback - function to compare models, if not set it is compared by primary key value
211
+ */
212
+ union(dataset, callback) {
213
+ this.set(Dataset.union(dataset, callback)([...this], (0, primary_keys_js_1.pkColumns)(this.TargetModelDescriptor)));
214
+ }
215
+ /**
216
+ * Calculates the symmetric difference between this relation and the dataset — members of
217
+ * this relation that are not in the dataset, plus members of the dataset that are not in
218
+ * this relation. Pure computation — apply it with `set()` and persist with `sync()`.
219
+ *
220
+ * @param dataset - data to compare
221
+ * @param callback - function to compare objects, if none provided - primary key value is used
222
+ */
223
+ diff(dataset, callback) {
224
+ return Dataset.diff(dataset, callback)([...this], (0, primary_keys_js_1.pkColumns)(this.TargetModelDescriptor));
225
+ }
226
+ /**
227
+ * Clears the relation and replaces its members with the new dataset ( or with the result of
228
+ * a `Dataset.diff` / `Dataset.intersection` / `Dataset.union` closure ). In-memory only —
229
+ * persist with `sync()` / `update()` / `save()`.
230
+ *
231
+ * @param obj - replacement data, or a closure receiving the current members and the primary key columns
232
+ */
233
+ set(obj) {
234
+ const toPush = lodash_1.default.isFunction(obj) ? obj([...this], (0, primary_keys_js_1.pkColumns)(this.TargetModelDescriptor)) : obj;
235
+ this.empty();
236
+ this.push(...toPush);
237
+ }
146
238
  };
147
239
  exports.Relation = Relation;
148
240
  exports.Relation = Relation = __decorate([
@@ -243,30 +335,29 @@ exports.SingleRelation = SingleRelation = __decorate([
243
335
  __metadata("design:paramtypes", [Object, Object, Object, Object])
244
336
  ], SingleRelation);
245
337
  class ManyQueryRelationList extends Relation {
246
- /* eslint-disable prettier/prettier */
247
338
  remove(_obj) {
248
- throw new Error('Query relations cannot be removed. This relation is used only for query purposes and it is always populated.');
339
+ throw new exceptions_js_1.OrmException('Query relations cannot be removed. This relation is used only for query purposes and it is always populated.');
249
340
  }
250
341
  sync() {
251
- throw new Error('Query relations cannot be synced. This relation is used only for query purposes and it is always populated.');
342
+ throw new exceptions_js_1.OrmException('Query relations cannot be synced. This relation is used only for query purposes and it is always populated.');
252
343
  }
253
344
  update() {
254
- throw new Error('Query relations cannot be updated. This relation is used only for query purposes and it is always populated.');
345
+ throw new exceptions_js_1.OrmException('Query relations cannot be updated. This relation is used only for query purposes and it is always populated.');
255
346
  }
256
347
  intersection(_dataset, _callback) {
257
- throw new Error('Query relations cannot be intersected. This relation is used only for query purposes and it is always populated.');
348
+ throw new exceptions_js_1.OrmException('Query relations cannot be intersected. This relation is used only for query purposes and it is always populated.');
258
349
  }
259
- union(_dataset, _mode) {
260
- throw new Error('Query relations cannot be unioned. This relation is used only for query purposes and it is always populated.');
350
+ union(_dataset, _callback) {
351
+ throw new exceptions_js_1.OrmException('Query relations cannot be unioned. This relation is used only for query purposes and it is always populated.');
261
352
  }
262
353
  diff(_dataset, _callback) {
263
- throw new Error('Query relations cannot be diffed. This relation is used only for query purposes and it is always populated.');
354
+ throw new exceptions_js_1.OrmException('Query relations cannot be diffed. This relation is used only for query purposes and it is always populated.');
264
355
  }
265
356
  set(_obj) {
266
- throw new Error('Query relations cannot be set. This relation is used only for query purposes and it is always populated.');
357
+ throw new exceptions_js_1.OrmException('Query relations cannot be set. This relation is used only for query purposes and it is always populated.');
267
358
  }
268
359
  populate(_callback) {
269
- throw new Error('Query relations cannot be populated. This relation is used only for query purposes and it is always populated.');
360
+ throw new exceptions_js_1.OrmException('Query relations cannot be populated. This relation is used only for query purposes and it is always populated.');
270
361
  }
271
362
  constructor(owner, relation, objects) {
272
363
  super(owner, relation, objects);
@@ -288,58 +379,6 @@ let ManyToManyRelationList = class ManyToManyRelationList extends Relation {
288
379
  this.junctionModelDescriptor = (0, descriptor_js_1.extractModelDescriptor)(this.Relation.JunctionModel);
289
380
  }
290
381
  }
291
- /**
292
- * Calculates intersection between data in this relation and provided dataset
293
- *
294
- * `[...this]` rather than `this`: these delegate into lodash, and `Relation extends Array`
295
- * with a three-argument constructor, so anything that derives a new collection has to work
296
- * on a plain array. ( `OneToManyRelationList` sidesteps the same problem by overriding
297
- * `filter`/`map`; this class has no such overrides. )
298
- *
299
- * @param obj - dataset to compare with
300
- * @param callback - compare function, if not set the target model's primary key is used
301
- * @returns members present in both sets
302
- */
303
- intersection(obj, callback) {
304
- return Dataset.intersection(obj, callback)([...this], this.TargetModelDescriptor.PrimaryKey);
305
- }
306
- /**
307
- * Appends `obj` to this relation. Shorthand for push — nothing is removed and nothing is
308
- * written to the database until `sync()`, `update()` or `save()` runs.
309
- *
310
- * @param obj - members to add
311
- */
312
- union(obj, _mode) {
313
- this.push(...obj);
314
- }
315
- /**
316
- * Calculates the symmetric difference between this relation and `dataset` — members of this
317
- * relation that are not in the dataset, plus members of the dataset that are not in this
318
- * relation.
319
- *
320
- * @param obj - dataset to compare with
321
- * @param callback - compare function, if not set the target model's primary key is used
322
- */
323
- diff(obj, callback) {
324
- return Dataset.diff(obj, callback)([...this], this.TargetModelDescriptor.PrimaryKey);
325
- }
326
- /**
327
- * Sets data in relation ( clear data and replace with new dataset )
328
- *
329
- * @param obj
330
- */
331
- set(obj) {
332
- const toPush = lodash_1.default.isFunction(obj) ? obj([...this], (0, primary_keys_js_1.pkColumns)(this.TargetModelDescriptor)) : obj;
333
- this.empty();
334
- this.push(...toPush);
335
- }
336
- remove(obj) {
337
- const toRemove = lodash_1.default.isFunction(obj) ? this.filter(obj) : Array.isArray(obj) ? obj : [obj];
338
- this.set((data) => {
339
- return data.filter((d) => !toRemove.includes(d));
340
- });
341
- return toRemove;
342
- }
343
382
  /**
344
383
  * Deletes from db data that are not in relation
345
384
  *
@@ -356,8 +395,10 @@ let ManyToManyRelationList = class ManyToManyRelationList extends Relation {
356
395
  if (this.Driver.Options.Database) {
357
396
  query.database(this.Driver.Options.Database);
358
397
  }
359
- // if we have data in relation, we need to exclude them from delete query
360
- const toDelete = [...data].filter((x) => x.PrimaryKeyValue).map((x) => x.PrimaryKeyValue);
398
+ // if we have data in relation, we need to exclude them from delete query.
399
+ // Explicit null/undefined checks a primary key of 0 or '' is a real key, and dropping
400
+ // it from the keep-list would delete that member's junction row.
401
+ const toDelete = [...data].map((x) => x.PrimaryKeyValue).filter((v) => v !== null && v !== undefined);
361
402
  if (toDelete.length !== 0) {
362
403
  query.whereNotIn(this.Relation.JunctionModelTargetModelFKey_Name, toDelete);
363
404
  }
@@ -368,8 +409,6 @@ let ManyToManyRelationList = class ManyToManyRelationList extends Relation {
368
409
  * Deletes from db entries that are not in relation and adds entries that are not in db
369
410
  * Sets foreign key to relational data
370
411
  *
371
- * Inserts or updates models that are dirty only.
372
- *
373
412
  * One transaction: the junction upserts and the orphan delete used to be independent
374
413
  * statements. Nested inside a caller's transaction this takes a savepoint.
375
414
  */
@@ -380,42 +419,69 @@ let ManyToManyRelationList = class ManyToManyRelationList extends Relation {
380
419
  });
381
420
  }
382
421
  /**
383
- * Updates or ads data to relation
384
- * It will not delete data from db that are not in relation. It will only update or insert new data.
385
- * Only dirty models are updated.
422
+ * Adds missing rows to the database without deleting anything: unsaved members are
423
+ * inserted, members without a junction row get one. Existing junction rows are left
424
+ * untouched.
386
425
  */
387
426
  async update() {
388
427
  await this.Driver.transaction(async () => {
389
428
  await this._update();
390
429
  });
391
430
  }
392
- /** The write itself, without a transaction of its own, so `sync()` can share one. */
431
+ /**
432
+ * Finds the junction model's relation pointing at `model`, by constructor identity — the
433
+ * junction's PROPERTY name is the author's choice ( `Order`, `Tag`, … ) and has nothing to
434
+ * do with the target class name.
435
+ */
436
+ junctionRelationFor(model) {
437
+ const relations = Array.from(this.junctionModelDescriptor?.Relations.values() ?? []);
438
+ const found = relations.find((r) => r.TargetModel === model);
439
+ if (!found) {
440
+ throw new exceptions_js_1.OrmException(`junction model ${this.junctionModelDescriptor?.Name} of relation ${this.Relation.Name} declares no relation targeting ${model?.name}; add a @BelongsTo for it`);
441
+ }
442
+ return found;
443
+ }
444
+ /**
445
+ * The write itself, without a transaction of its own, so `sync()` can share one.
446
+ *
447
+ * Unsaved members are inserted first — a junction row written for a model with no primary
448
+ * key would carry a NULL foreign key. Members that already have a junction row are skipped:
449
+ * the junction's own primary key is auto-generated, so re-inserting the pair would DUPLICATE
450
+ * the link rather than upsert it ( which is exactly what repeated `sync()` calls used to do ).
451
+ */
393
452
  async _update() {
453
+ const sourceModelRelation = this.junctionRelationFor(this.Owner.constructor);
454
+ const existingQuery = this.Driver.select().from(this.junctionModelDescriptor.TableName).where(this.Relation.JunctionModelSourceModelFKey_Name, this.OwnerJoinValue);
455
+ if (this.Driver.Options.Database) {
456
+ existingQuery.database(this.Driver.Options.Database);
457
+ }
458
+ const existingRows = (await existingQuery.asRaw()) ?? [];
459
+ const linked = new Set(existingRows.map((r) => r[this.Relation.JunctionModelTargetModelFKey_Name]).filter((v) => v !== null && v !== undefined));
394
460
  for (const f of this) {
395
- const junctionEntry = new this.Relation.JunctionModel();
396
- const desc = junctionEntry.ModelDescriptor;
397
- const relationsArray = Array.from(desc.Relations.values());
398
- const sourceModelRelation = relationsArray.find((r) => r.TargetModel === this.Owner.constructor);
399
- const targetModelRelation = relationsArray.find((r) => r.TargetModel === f.constructor);
400
- if (!sourceModelRelation) {
401
- throw new Error(`Junction model relation for source model ${this.Owner.constructor.name} not found.`);
461
+ if (f.PrimaryKeyValue === null || f.PrimaryKeyValue === undefined) {
462
+ await f.insert(interfaces_js_1.InsertBehaviour.InsertOrUpdate);
402
463
  }
403
- if (!targetModelRelation) {
404
- throw new Error(`Junction model relation for target model ${f.constructor.name} not found.`);
464
+ if (linked.has(f.PrimaryKeyValue)) {
465
+ continue;
405
466
  }
467
+ const targetModelRelation = this.junctionRelationFor(f.constructor);
468
+ const junctionEntry = new this.Relation.JunctionModel();
406
469
  junctionEntry[sourceModelRelation.Name].Value = this.Owner;
407
470
  junctionEntry[targetModelRelation.Name].Value = f;
408
471
  await junctionEntry.insert(interfaces_js_1.InsertBehaviour.InsertOrUpdate);
409
472
  }
410
473
  }
411
474
  async populate(callback) {
475
+ // Resolved by constructor, not by `TargetModel.name` — the junction's property name is
476
+ // unrelated to the target class name, and class names do not survive minification.
477
+ const targetModelRelation = this.junctionRelationFor(this.Relation.TargetModel);
412
478
  const query = this.Relation.JunctionModel.where(this.Relation.JunctionModelSourceModelFKey_Name, this.OwnerJoinValue).populate(this.Relation.TargetModel, callback);
413
479
  const result = await query;
414
480
  if (result) {
415
481
  this.length = 0;
416
- this.push(...result.map((r) => {
417
- return r[this.Relation.TargetModel.name].Value;
418
- }));
482
+ // A junction row whose target row no longer exists resolves to a null Value — skip it
483
+ // rather than push null into the member list.
484
+ this.push(...result.map((r) => r[targetModelRelation.Name].Value).filter((v) => v !== null && v !== undefined));
419
485
  }
420
486
  this.Populated = true;
421
487
  this.Owner.snapshotRelation(this.Relation.Name);
@@ -434,24 +500,45 @@ let OneToManyRelationList = class OneToManyRelationList extends Relation {
434
500
  * @returns
435
501
  */
436
502
  async _dbDiff(data) {
437
- const query = this.Driver.del().from(this.TargetModelDescriptor.TableName).where(this.Relation.ForeignKey, this.OwnerJoinValue);
438
- if (this.Driver.Options.Database) {
439
- query.database(this.Driver.Options.Database);
440
- }
441
- // if we have data in relation, we need to exclude them from delete query.
442
503
  // A composite key is a tuple and always truthy, so filter on the key COLUMNS being set
443
504
  // rather than on the tuple itself.
444
505
  const keys = (0, primary_keys_js_1.pkColumns)(this.TargetModelDescriptor);
445
- const toDelete = data
506
+ const toKeep = data
446
507
  .map((x) => (0, primary_keys_js_1.pkValueOf)(x, this.TargetModelDescriptor))
447
508
  .filter((v) => (Array.isArray(v) ? v.every((p) => p !== null && p !== undefined) : v !== null && v !== undefined));
448
- if (toDelete.length !== 0 && keys.length !== 0) {
449
- (0, primary_keys_js_1.whereNotAnyPk)(query, this.TargetModelDescriptor, toDelete);
509
+ // A `@SoftDelete` target is never hard-deleted the same degradation
510
+ // `SubjectExecutor.effectivePolicy` applies to orphans on the save() path. The stamp goes
511
+ // through a model-aware builder so the DateTime passes the column's converter.
512
+ const softDeleteColumn = this.TargetModelDescriptor.SoftDelete?.DeletedAt;
513
+ if (softDeleteColumn) {
514
+ const { query } = (0, builders_js_1.createQuery)(this.Relation.TargetModel, builders_js_1.UpdateQueryBuilder);
515
+ const update = query.update({ [softDeleteColumn]: luxon_1.DateTime.now() });
516
+ update.where(this.Relation.ForeignKey, this.OwnerJoinValue);
517
+ // Rows stamped by an earlier sync keep their original deletion time.
518
+ update.whereNull(softDeleteColumn);
519
+ if (toKeep.length !== 0 && keys.length !== 0) {
520
+ (0, primary_keys_js_1.whereNotAnyPk)(update, this.TargetModelDescriptor, toKeep);
521
+ }
522
+ await update;
523
+ return;
524
+ }
525
+ const query = this.Driver.del().from(this.TargetModelDescriptor.TableName).where(this.Relation.ForeignKey, this.OwnerJoinValue);
526
+ if (this.Driver.Options.Database) {
527
+ query.database(this.Driver.Options.Database);
528
+ }
529
+ // if we have data in relation, we need to exclude them from the delete query
530
+ if (toKeep.length !== 0 && keys.length !== 0) {
531
+ (0, primary_keys_js_1.whereNotAnyPk)(query, this.TargetModelDescriptor, toKeep);
450
532
  }
451
533
  await query;
452
534
  }
453
535
  /**
454
536
  * Populates this relation ( loads all data related to owner of this relation)
537
+ *
538
+ * Pushes the rows into THIS list rather than routing through `Owner.attach()`: attach flags
539
+ * the owner dirty ( a read must not create unsaved changes ), feeds every sibling relation
540
+ * with the same target model, and drops discriminated subclass rows because their
541
+ * constructor is not the declared target. Only attach's back-reference wiring is kept.
455
542
  */
456
543
  async populate(callback) {
457
544
  const query = this.Relation.TargetModel.where(this.Relation.ForeignKey, this.OwnerJoinValue);
@@ -462,7 +549,12 @@ let OneToManyRelationList = class OneToManyRelationList extends Relation {
462
549
  if (result) {
463
550
  this.length = 0;
464
551
  result.forEach((r) => {
465
- this.Owner.attach(r);
552
+ // Set the child's back-reference to this owner, when the child declares one.
553
+ const backRef = [...(r.ModelDescriptor?.Relations.entries() ?? [])].find((e) => e[1].ForeignKey === this.Relation.ForeignKey);
554
+ if (backRef) {
555
+ r[backRef[0]].Value = this.Owner;
556
+ }
557
+ this.push(r);
466
558
  });
467
559
  }
468
560
  this.Populated = true;
@@ -512,67 +604,6 @@ let OneToManyRelationList = class OneToManyRelationList extends Relation {
512
604
  await f.insert(interfaces_js_1.InsertBehaviour.InsertOrUpdate);
513
605
  }
514
606
  }
515
- /**
516
- * Calculates difference between this relation and dataset ( items from this relation that are not in dataset and items from dataset that are not in this relation)
517
- *
518
- * @param dataset
519
- * @param callback
520
- * @returns Difference between this relation and dataset
521
- */
522
- diff(dataset, callback) {
523
- return Dataset.diff(dataset, callback)([...this], (0, primary_keys_js_1.pkColumns)(this.TargetModelDescriptor));
524
- }
525
- /**
526
- * Sets data in relation ( clear data and replace with new dataset )
527
- *
528
- * @param obj
529
- */
530
- set(obj) {
531
- const toPush = lodash_1.default.isFunction(obj) ? obj([...this], (0, primary_keys_js_1.pkColumns)(this.TargetModelDescriptor)) : obj;
532
- this.empty();
533
- this.push(...toPush);
534
- }
535
- /**
536
- * Calculates intersection between data in this relation and provided dataset
537
- *
538
- * @param obj
539
- * @param callback compare function, if not set - primary key value is used
540
- * @returns Data that are in both sets
541
- */
542
- intersection(obj, callback) {
543
- return Dataset.intersection(obj, callback)([...this], (0, primary_keys_js_1.pkColumns)(this.TargetModelDescriptor));
544
- }
545
- /**
546
- * Combines data with this relation and saves to db
547
- * Shorthand for push
548
- * @param obj
549
- */
550
- union(obj) {
551
- this.push(...obj);
552
- }
553
- /**
554
- * Returns the elements of an array that meet the condition specified in a callback function.
555
- * @param predicate A function that accepts up to three arguments. The filter method calls the predicate function one time for each element in the array.
556
- */
557
- filter(predicate) {
558
- return [...this].filter(predicate);
559
- }
560
- remove(obj) {
561
- const toRemove = lodash_1.default.isFunction(obj) ? this.filter(obj) : Array.isArray(obj) ? obj : [obj];
562
- this.set((data) => {
563
- return data.filter((d) => !toRemove.includes(d));
564
- });
565
- return toRemove;
566
- }
567
- flatMap(callback) {
568
- const r = this.map(callback);
569
- return r.flatMap(x => x);
570
- }
571
- map(callback) {
572
- const r = [];
573
- this.forEach((x, i, a) => r.push(callback(x, i, a)));
574
- return r;
575
- }
576
607
  };
577
608
  exports.OneToManyRelationList = OneToManyRelationList;
578
609
  exports.OneToManyRelationList = OneToManyRelationList = __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"relation-objects.js","sourceRoot":"","sources":["../../src/relation-objects.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"relation-objects.js","sourceRoot":"","sources":["../../src/relation-objects.ts"],"names":[],"mappings":"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"}