@spinajs/orm 2.0.480 → 2.0.482

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 (228) hide show
  1. package/README.md +72 -3
  2. package/lib/cjs/bootstrap.js +10 -0
  3. package/lib/cjs/bootstrap.js.map +1 -1
  4. package/lib/cjs/builders.d.ts +115 -11
  5. package/lib/cjs/builders.d.ts.map +1 -1
  6. package/lib/cjs/builders.js +342 -283
  7. package/lib/cjs/builders.js.map +1 -1
  8. package/lib/cjs/converters.d.ts +9 -2
  9. package/lib/cjs/converters.d.ts.map +1 -1
  10. package/lib/cjs/converters.js +48 -8
  11. package/lib/cjs/converters.js.map +1 -1
  12. package/lib/cjs/decorators.d.ts +26 -3
  13. package/lib/cjs/decorators.d.ts.map +1 -1
  14. package/lib/cjs/decorators.js +95 -42
  15. package/lib/cjs/decorators.js.map +1 -1
  16. package/lib/cjs/dehydrators.js +1 -1
  17. package/lib/cjs/dehydrators.js.map +1 -1
  18. package/lib/cjs/descriptor.d.ts +1 -0
  19. package/lib/cjs/descriptor.d.ts.map +1 -1
  20. package/lib/cjs/descriptor.js +16 -40
  21. package/lib/cjs/descriptor.js.map +1 -1
  22. package/lib/cjs/driver.d.ts +136 -7
  23. package/lib/cjs/driver.d.ts.map +1 -1
  24. package/lib/cjs/driver.js +279 -0
  25. package/lib/cjs/driver.js.map +1 -1
  26. package/lib/cjs/existsRelationHandlers.d.ts +29 -0
  27. package/lib/cjs/existsRelationHandlers.d.ts.map +1 -0
  28. package/lib/cjs/existsRelationHandlers.js +104 -0
  29. package/lib/cjs/existsRelationHandlers.js.map +1 -0
  30. package/lib/cjs/fp.d.ts.map +1 -1
  31. package/lib/cjs/fp.js +10 -15
  32. package/lib/cjs/fp.js.map +1 -1
  33. package/lib/cjs/hydrators.d.ts.map +1 -1
  34. package/lib/cjs/hydrators.js +29 -2
  35. package/lib/cjs/hydrators.js.map +1 -1
  36. package/lib/cjs/identity-map.d.ts +60 -0
  37. package/lib/cjs/identity-map.d.ts.map +1 -0
  38. package/lib/cjs/identity-map.js +135 -0
  39. package/lib/cjs/identity-map.js.map +1 -0
  40. package/lib/cjs/index.d.ts +12 -0
  41. package/lib/cjs/index.d.ts.map +1 -1
  42. package/lib/cjs/index.js +12 -0
  43. package/lib/cjs/index.js.map +1 -1
  44. package/lib/cjs/interfaces.d.ts +295 -9
  45. package/lib/cjs/interfaces.d.ts.map +1 -1
  46. package/lib/cjs/interfaces.js +54 -1
  47. package/lib/cjs/interfaces.js.map +1 -1
  48. package/lib/cjs/metadata.d.ts.map +1 -1
  49. package/lib/cjs/metadata.js +4 -1
  50. package/lib/cjs/metadata.js.map +1 -1
  51. package/lib/cjs/metrics.d.ts +53 -0
  52. package/lib/cjs/metrics.d.ts.map +1 -0
  53. package/lib/cjs/metrics.js +82 -0
  54. package/lib/cjs/metrics.js.map +1 -0
  55. package/lib/cjs/middlewares.d.ts +13 -1
  56. package/lib/cjs/middlewares.d.ts.map +1 -1
  57. package/lib/cjs/middlewares.js +55 -15
  58. package/lib/cjs/middlewares.js.map +1 -1
  59. package/lib/cjs/model.d.ts +129 -13
  60. package/lib/cjs/model.d.ts.map +1 -1
  61. package/lib/cjs/model.js +449 -93
  62. package/lib/cjs/model.js.map +1 -1
  63. package/lib/cjs/orm.d.ts.map +1 -1
  64. package/lib/cjs/orm.js +12 -3
  65. package/lib/cjs/orm.js.map +1 -1
  66. package/lib/cjs/orphan.d.ts +27 -0
  67. package/lib/cjs/orphan.d.ts.map +1 -0
  68. package/lib/cjs/orphan.js +55 -0
  69. package/lib/cjs/orphan.js.map +1 -0
  70. package/lib/cjs/primary-keys.d.ts +60 -0
  71. package/lib/cjs/primary-keys.d.ts.map +1 -0
  72. package/lib/cjs/primary-keys.js +243 -0
  73. package/lib/cjs/primary-keys.js.map +1 -0
  74. package/lib/cjs/relation-objects.d.ts +101 -9
  75. package/lib/cjs/relation-objects.d.ts.map +1 -1
  76. package/lib/cjs/relation-objects.js +194 -43
  77. package/lib/cjs/relation-objects.js.map +1 -1
  78. package/lib/cjs/relations.d.ts +7 -1
  79. package/lib/cjs/relations.d.ts.map +1 -1
  80. package/lib/cjs/relations.js +16 -1
  81. package/lib/cjs/relations.js.map +1 -1
  82. package/lib/cjs/resilience.d.ts +50 -0
  83. package/lib/cjs/resilience.d.ts.map +1 -0
  84. package/lib/cjs/resilience.js +70 -0
  85. package/lib/cjs/resilience.js.map +1 -0
  86. package/lib/cjs/snapshot.d.ts +58 -0
  87. package/lib/cjs/snapshot.d.ts.map +1 -0
  88. package/lib/cjs/snapshot.js +125 -0
  89. package/lib/cjs/snapshot.js.map +1 -0
  90. package/lib/cjs/statements.d.ts +11 -1
  91. package/lib/cjs/statements.d.ts.map +1 -1
  92. package/lib/cjs/statements.js +13 -2
  93. package/lib/cjs/statements.js.map +1 -1
  94. package/lib/cjs/subject-builder.d.ts +79 -0
  95. package/lib/cjs/subject-builder.d.ts.map +1 -0
  96. package/lib/cjs/subject-builder.js +296 -0
  97. package/lib/cjs/subject-builder.js.map +1 -0
  98. package/lib/cjs/subject-executor.d.ts +122 -0
  99. package/lib/cjs/subject-executor.d.ts.map +1 -0
  100. package/lib/cjs/subject-executor.js +319 -0
  101. package/lib/cjs/subject-executor.js.map +1 -0
  102. package/lib/cjs/subject-sorter.d.ts +70 -0
  103. package/lib/cjs/subject-sorter.d.ts.map +1 -0
  104. package/lib/cjs/subject-sorter.js +173 -0
  105. package/lib/cjs/subject-sorter.js.map +1 -0
  106. package/lib/cjs/subject.d.ts +100 -0
  107. package/lib/cjs/subject.d.ts.map +1 -0
  108. package/lib/cjs/subject.js +89 -0
  109. package/lib/cjs/subject.js.map +1 -0
  110. package/lib/cjs/unit-of-work.d.ts +52 -0
  111. package/lib/cjs/unit-of-work.d.ts.map +1 -0
  112. package/lib/cjs/unit-of-work.js +170 -0
  113. package/lib/cjs/unit-of-work.js.map +1 -0
  114. package/lib/mjs/bootstrap.js +10 -0
  115. package/lib/mjs/bootstrap.js.map +1 -1
  116. package/lib/mjs/builders.d.ts +115 -11
  117. package/lib/mjs/builders.d.ts.map +1 -1
  118. package/lib/mjs/builders.js +344 -285
  119. package/lib/mjs/builders.js.map +1 -1
  120. package/lib/mjs/converters.d.ts +9 -2
  121. package/lib/mjs/converters.d.ts.map +1 -1
  122. package/lib/mjs/converters.js +48 -8
  123. package/lib/mjs/converters.js.map +1 -1
  124. package/lib/mjs/decorators.d.ts +26 -3
  125. package/lib/mjs/decorators.d.ts.map +1 -1
  126. package/lib/mjs/decorators.js +96 -44
  127. package/lib/mjs/decorators.js.map +1 -1
  128. package/lib/mjs/dehydrators.js +1 -1
  129. package/lib/mjs/dehydrators.js.map +1 -1
  130. package/lib/mjs/descriptor.d.ts +1 -0
  131. package/lib/mjs/descriptor.d.ts.map +1 -1
  132. package/lib/mjs/descriptor.js +17 -39
  133. package/lib/mjs/descriptor.js.map +1 -1
  134. package/lib/mjs/driver.d.ts +136 -7
  135. package/lib/mjs/driver.d.ts.map +1 -1
  136. package/lib/mjs/driver.js +279 -0
  137. package/lib/mjs/driver.js.map +1 -1
  138. package/lib/mjs/existsRelationHandlers.d.ts +29 -0
  139. package/lib/mjs/existsRelationHandlers.d.ts.map +1 -0
  140. package/lib/mjs/existsRelationHandlers.js +100 -0
  141. package/lib/mjs/existsRelationHandlers.js.map +1 -0
  142. package/lib/mjs/fp.d.ts.map +1 -1
  143. package/lib/mjs/fp.js +10 -15
  144. package/lib/mjs/fp.js.map +1 -1
  145. package/lib/mjs/hydrators.d.ts.map +1 -1
  146. package/lib/mjs/hydrators.js +29 -2
  147. package/lib/mjs/hydrators.js.map +1 -1
  148. package/lib/mjs/identity-map.d.ts +60 -0
  149. package/lib/mjs/identity-map.d.ts.map +1 -0
  150. package/lib/mjs/identity-map.js +130 -0
  151. package/lib/mjs/identity-map.js.map +1 -0
  152. package/lib/mjs/index.d.ts +12 -0
  153. package/lib/mjs/index.d.ts.map +1 -1
  154. package/lib/mjs/index.js +12 -0
  155. package/lib/mjs/index.js.map +1 -1
  156. package/lib/mjs/interfaces.d.ts +295 -9
  157. package/lib/mjs/interfaces.d.ts.map +1 -1
  158. package/lib/mjs/interfaces.js +53 -0
  159. package/lib/mjs/interfaces.js.map +1 -1
  160. package/lib/mjs/metadata.d.ts.map +1 -1
  161. package/lib/mjs/metadata.js +4 -1
  162. package/lib/mjs/metadata.js.map +1 -1
  163. package/lib/mjs/metrics.d.ts +53 -0
  164. package/lib/mjs/metrics.d.ts.map +1 -0
  165. package/lib/mjs/metrics.js +76 -0
  166. package/lib/mjs/metrics.js.map +1 -0
  167. package/lib/mjs/middlewares.d.ts +13 -1
  168. package/lib/mjs/middlewares.d.ts.map +1 -1
  169. package/lib/mjs/middlewares.js +55 -15
  170. package/lib/mjs/middlewares.js.map +1 -1
  171. package/lib/mjs/model.d.ts +129 -13
  172. package/lib/mjs/model.d.ts.map +1 -1
  173. package/lib/mjs/model.js +451 -95
  174. package/lib/mjs/model.js.map +1 -1
  175. package/lib/mjs/orm.d.ts.map +1 -1
  176. package/lib/mjs/orm.js +12 -3
  177. package/lib/mjs/orm.js.map +1 -1
  178. package/lib/mjs/orphan.d.ts +27 -0
  179. package/lib/mjs/orphan.d.ts.map +1 -0
  180. package/lib/mjs/orphan.js +52 -0
  181. package/lib/mjs/orphan.js.map +1 -0
  182. package/lib/mjs/primary-keys.d.ts +60 -0
  183. package/lib/mjs/primary-keys.d.ts.map +1 -0
  184. package/lib/mjs/primary-keys.js +223 -0
  185. package/lib/mjs/primary-keys.js.map +1 -0
  186. package/lib/mjs/relation-objects.d.ts +101 -9
  187. package/lib/mjs/relation-objects.d.ts.map +1 -1
  188. package/lib/mjs/relation-objects.js +194 -43
  189. package/lib/mjs/relation-objects.js.map +1 -1
  190. package/lib/mjs/relations.d.ts +7 -1
  191. package/lib/mjs/relations.d.ts.map +1 -1
  192. package/lib/mjs/relations.js +16 -1
  193. package/lib/mjs/relations.js.map +1 -1
  194. package/lib/mjs/resilience.d.ts +50 -0
  195. package/lib/mjs/resilience.d.ts.map +1 -0
  196. package/lib/mjs/resilience.js +64 -0
  197. package/lib/mjs/resilience.js.map +1 -0
  198. package/lib/mjs/snapshot.d.ts +58 -0
  199. package/lib/mjs/snapshot.d.ts.map +1 -0
  200. package/lib/mjs/snapshot.js +115 -0
  201. package/lib/mjs/snapshot.js.map +1 -0
  202. package/lib/mjs/statements.d.ts +11 -1
  203. package/lib/mjs/statements.d.ts.map +1 -1
  204. package/lib/mjs/statements.js +14 -3
  205. package/lib/mjs/statements.js.map +1 -1
  206. package/lib/mjs/subject-builder.d.ts +79 -0
  207. package/lib/mjs/subject-builder.d.ts.map +1 -0
  208. package/lib/mjs/subject-builder.js +292 -0
  209. package/lib/mjs/subject-builder.js.map +1 -0
  210. package/lib/mjs/subject-executor.d.ts +122 -0
  211. package/lib/mjs/subject-executor.d.ts.map +1 -0
  212. package/lib/mjs/subject-executor.js +312 -0
  213. package/lib/mjs/subject-executor.js.map +1 -0
  214. package/lib/mjs/subject-sorter.d.ts +70 -0
  215. package/lib/mjs/subject-sorter.d.ts.map +1 -0
  216. package/lib/mjs/subject-sorter.js +168 -0
  217. package/lib/mjs/subject-sorter.js.map +1 -0
  218. package/lib/mjs/subject.d.ts +100 -0
  219. package/lib/mjs/subject.d.ts.map +1 -0
  220. package/lib/mjs/subject.js +84 -0
  221. package/lib/mjs/subject.js.map +1 -0
  222. package/lib/mjs/unit-of-work.d.ts +52 -0
  223. package/lib/mjs/unit-of-work.d.ts.map +1 -0
  224. package/lib/mjs/unit-of-work.js +166 -0
  225. package/lib/mjs/unit-of-work.js.map +1 -0
  226. package/lib/tsconfig.cjs.tsbuildinfo +1 -1
  227. package/lib/tsconfig.mjs.tsbuildinfo +1 -1
  228. package/package.json +9 -7
@@ -0,0 +1,243 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.pkColumns = pkColumns;
7
+ exports.hasPk = hasPk;
8
+ exports.isCompositePk = isCompositePk;
9
+ exports.normalizePkTuple = normalizePkTuple;
10
+ exports.pkValueOf = pkValueOf;
11
+ exports.setPkValue = setPkValue;
12
+ exports.pkKeyStringFor = pkKeyStringFor;
13
+ exports.pkKeyString = pkKeyString;
14
+ exports.wherePk = wherePk;
15
+ exports.whereAnyPk = whereAnyPk;
16
+ exports.whereNotAnyPk = whereNotAnyPk;
17
+ exports.orderByPk = orderByPk;
18
+ exports.pkGeneration = pkGeneration;
19
+ exports.generateClientSideKeys = generateClientSideKeys;
20
+ exports.assertAssignedKeys = assertAssignedKeys;
21
+ /* eslint-disable prettier/prettier */
22
+ const lodash_1 = __importDefault(require("lodash"));
23
+ const uuid_1 = require("uuid");
24
+ const enums_js_1 = require("./enums.js");
25
+ const exceptions_js_1 = require("./exceptions.js");
26
+ /**
27
+ * Separator used when flattening a composite key into one string. NUL never appears in an
28
+ * identifier and the parts are length-prefixed, so two different tuples cannot collide.
29
+ */
30
+ const PK_SEPARATOR = '\u0000';
31
+ /** Primary key column names in declaration order. Empty when the model has no @Primary(). */
32
+ function pkColumns(descriptor) {
33
+ return descriptor.PrimaryKey ?? [];
34
+ }
35
+ function hasPk(descriptor) {
36
+ return pkColumns(descriptor).length !== 0;
37
+ }
38
+ function isCompositePk(descriptor) {
39
+ return pkColumns(descriptor).length > 1;
40
+ }
41
+ /**
42
+ * Coerces one primary key value into an ordered tuple matching `pkColumns(descriptor)`.
43
+ * Accepts a scalar or a one-element array for single-column keys, and an array in key order
44
+ * or a plain object keyed by column name for composite keys.
45
+ */
46
+ function normalizePkTuple(descriptor, value) {
47
+ const keys = pkColumns(descriptor);
48
+ if (keys.length === 0) {
49
+ throw new exceptions_js_1.OrmException(`model ${descriptor.Name} has no primary key`);
50
+ }
51
+ if (keys.length === 1) {
52
+ return [Array.isArray(value) ? value[0] : value];
53
+ }
54
+ if (Array.isArray(value)) {
55
+ if (value.length !== keys.length) {
56
+ throw new exceptions_js_1.OrmException(`composite primary key of ${descriptor.Name} expects ${keys.length} values (${keys.join(', ')}), got ${value.length}`);
57
+ }
58
+ return value;
59
+ }
60
+ if (lodash_1.default.isPlainObject(value)) {
61
+ return keys.map((k) => {
62
+ if (!(k in value)) {
63
+ throw new exceptions_js_1.OrmException(`composite primary key of ${descriptor.Name} is missing column ${k}`);
64
+ }
65
+ // eslint-disable-next-line security/detect-object-injection
66
+ return value[k];
67
+ });
68
+ }
69
+ throw new exceptions_js_1.OrmException(`composite primary key of ${descriptor.Name} needs an array in key order (${keys.join(', ')}) or an object keyed by column name, got ${typeof value}`);
70
+ }
71
+ /** Reads the primary key off a row or model: a scalar for single-column keys, a tuple for composite. */
72
+ function pkValueOf(source, descriptor) {
73
+ const keys = pkColumns(descriptor);
74
+ if (keys.length === 0) {
75
+ return undefined;
76
+ }
77
+ if (keys.length === 1) {
78
+ return source?.[keys[0]];
79
+ }
80
+ return keys.map((k) => source?.[k]);
81
+ }
82
+ /** Writes a primary key onto a row or model. Mirror image of {@link pkValueOf}. */
83
+ function setPkValue(target, descriptor, value) {
84
+ const keys = pkColumns(descriptor);
85
+ if (keys.length === 0) {
86
+ return;
87
+ }
88
+ if (keys.length === 1) {
89
+ target[keys[0]] = value;
90
+ return;
91
+ }
92
+ const tuple = normalizePkTuple(descriptor, value);
93
+ keys.forEach((k, i) => (target[k] = tuple[i]));
94
+ }
95
+ /**
96
+ * Flattens the given columns of a row into one string, for use as a Map key or a lodash
97
+ * `differenceBy` / `intersectionBy` iteratee where a tuple would compare by reference.
98
+ * Each part is length-prefixed so `['ab', 'c']` and `['a', 'bc']` cannot collide.
99
+ */
100
+ function pkKeyStringFor(source, keys) {
101
+ return keys
102
+ // eslint-disable-next-line security/detect-object-injection
103
+ .map((k) => `${String(source?.[k]).length}:${String(source?.[k])}`)
104
+ .join(PK_SEPARATOR);
105
+ }
106
+ /** {@link pkKeyStringFor} over a model's primary key columns. */
107
+ function pkKeyString(source, descriptor) {
108
+ return pkKeyStringFor(source, pkColumns(descriptor));
109
+ }
110
+ /**
111
+ * WHERE matching exactly one row by primary key.
112
+ * Single column: `col = ?`, byte-identical to the pre-composite behaviour.
113
+ * Composite: `( a = ? AND b = ? )`.
114
+ */
115
+ function wherePk(builder, descriptor, value) {
116
+ const keys = pkColumns(descriptor);
117
+ if (keys.length === 0) {
118
+ throw new exceptions_js_1.OrmException(`model ${descriptor.Name} has no primary key`);
119
+ }
120
+ if (keys.length === 1) {
121
+ builder.where(keys[0], Array.isArray(value) ? value[0] : value);
122
+ return;
123
+ }
124
+ const tuple = normalizePkTuple(descriptor, value);
125
+ builder.where(function () {
126
+ keys.forEach((k, i) => this.where(k, tuple[i]));
127
+ });
128
+ }
129
+ /**
130
+ * WHERE matching any of `values`.
131
+ * Single column: `col IN (?, ...)`.
132
+ * Composite: `( ( a = ? AND b = ? ) OR ( a = ? AND b = ? ) )`.
133
+ * An empty `values` matches nothing, consistent with `whereIn(col, [])` (B4b).
134
+ */
135
+ function whereAnyPk(builder, descriptor, values) {
136
+ const keys = pkColumns(descriptor);
137
+ if (keys.length === 0) {
138
+ throw new exceptions_js_1.OrmException(`model ${descriptor.Name} has no primary key`);
139
+ }
140
+ if (values.length === 0) {
141
+ builder.where(false);
142
+ return;
143
+ }
144
+ if (keys.length === 1) {
145
+ builder.whereIn(keys[0], values.map((v) => (Array.isArray(v) ? v[0] : v)));
146
+ return;
147
+ }
148
+ const tuples = values.map((v) => normalizePkTuple(descriptor, v));
149
+ builder.where(function () {
150
+ tuples.forEach((tuple, idx) => {
151
+ const group = function () {
152
+ keys.forEach((k, i) => this.where(k, tuple[i]));
153
+ };
154
+ if (idx === 0) {
155
+ this.where(group);
156
+ }
157
+ else {
158
+ this.orWhere(group);
159
+ }
160
+ });
161
+ });
162
+ }
163
+ /**
164
+ * WHERE excluding all of `values` — the orphan-delete predicate.
165
+ * Single column: `col NOT IN (?, ...)`.
166
+ * Composite: De Morgan of {@link whereAnyPk} — `( ( a != ? OR b != ? ) AND ( a != ? OR b != ? ) )`.
167
+ * An empty `values` adds no condition ( nothing is excluded ).
168
+ */
169
+ function whereNotAnyPk(builder, descriptor, values) {
170
+ const keys = pkColumns(descriptor);
171
+ if (keys.length === 0) {
172
+ throw new exceptions_js_1.OrmException(`model ${descriptor.Name} has no primary key`);
173
+ }
174
+ if (values.length === 0) {
175
+ return;
176
+ }
177
+ if (keys.length === 1) {
178
+ builder.whereNotIn(keys[0], values.map((v) => (Array.isArray(v) ? v[0] : v)));
179
+ return;
180
+ }
181
+ const tuples = values.map((v) => normalizePkTuple(descriptor, v));
182
+ builder.where(function () {
183
+ tuples.forEach((tuple) => {
184
+ this.where(function () {
185
+ keys.forEach((k, i) => {
186
+ if (i === 0) {
187
+ this.where(k, enums_js_1.SqlOperator.NOT, tuple[i]);
188
+ }
189
+ else {
190
+ this.orWhere(k, enums_js_1.SqlOperator.NOT, tuple[i]);
191
+ }
192
+ });
193
+ });
194
+ });
195
+ });
196
+ }
197
+ /**
198
+ * Appends one ORDER BY term per primary key column. Returns false when the model has no
199
+ * primary key, so callers can fall back to unique columns or timestamps.
200
+ */
201
+ function orderByPk(builder, descriptor, order) {
202
+ const keys = pkColumns(descriptor);
203
+ if (keys.length === 0) {
204
+ return false;
205
+ }
206
+ keys.forEach((k) => builder.order(k, order));
207
+ return true;
208
+ }
209
+ /** Generation strategy for one primary key column. Unrecorded columns default to `auto`. */
210
+ function pkGeneration(descriptor, column) {
211
+ return descriptor.PrimaryKeyGeneration?.get(column) ?? 'auto';
212
+ }
213
+ /**
214
+ * Fills every `uuid`-generated primary key column that has no value yet. Called immediately
215
+ * before insert so the key is known client-side without a database round-trip. Never overwrites
216
+ * a value the caller supplied.
217
+ */
218
+ function generateClientSideKeys(target, descriptor) {
219
+ pkColumns(descriptor).forEach((c) => {
220
+ if (pkGeneration(descriptor, c) !== 'uuid') {
221
+ return;
222
+ }
223
+ // eslint-disable-next-line security/detect-object-injection
224
+ if (target[c] === null || target[c] === undefined || target[c] === '') {
225
+ // eslint-disable-next-line security/detect-object-injection
226
+ target[c] = (0, uuid_1.v4)();
227
+ }
228
+ });
229
+ }
230
+ /** Throws when an `assigned` primary key column has no value at insert time. */
231
+ function assertAssignedKeys(target, descriptor) {
232
+ pkColumns(descriptor).forEach((c) => {
233
+ if (pkGeneration(descriptor, c) !== 'assigned') {
234
+ return;
235
+ }
236
+ // eslint-disable-next-line security/detect-object-injection
237
+ const value = target[c];
238
+ if (value === null || value === undefined || value === '') {
239
+ throw new exceptions_js_1.OrmException(`primary key column ${descriptor.Name}.${c} must be assigned before insert (@Primary({ generated: 'assigned' }))`);
240
+ }
241
+ });
242
+ }
243
+ //# sourceMappingURL=primary-keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primary-keys.js","sourceRoot":"","sources":["../../src/primary-keys.ts"],"names":[],"mappings":"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"}
@@ -12,7 +12,7 @@ export declare class Dataset {
12
12
  * @param dataset - data to compare
13
13
  * @param callback - function to compare objects, if none provideded - primary key value is used
14
14
  */
15
- static diff<R>(dataset: R[], callback?: (a: R, b: R) => boolean): (datasetB: R[], pKey: string) => R[];
15
+ static diff<R>(dataset: R[], callback?: (a: R, b: R) => boolean): (datasetB: R[], pKey: string[]) => R[];
16
16
  /**
17
17
  *
18
18
  * Calculates intersection between data in this relation and provided dataset
@@ -21,7 +21,7 @@ export declare class Dataset {
21
21
  * @param dataset - dataset to compare
22
22
  * @param callback - function to compare models, if not set it is compared by primary key value
23
23
  */
24
- static intersection<R>(dataset: R[], callback?: (a: R, b: R) => boolean): (datasetB: R[], pKey: string) => R[];
24
+ static intersection<R>(dataset: R[], callback?: (a: R, b: R) => boolean): (datasetB: R[], pKey: string[]) => R[];
25
25
  }
26
26
  /**
27
27
  * Iterable list of populated relation entities
@@ -36,7 +36,31 @@ export declare abstract class Relation<R extends ModelBase<R>, O extends ModelBa
36
36
  protected Driver: OrmDriver;
37
37
  protected IsModelAForwardRef: boolean;
38
38
  protected Model: Constructor<R> | ForwardRefFunction;
39
+ /**
40
+ * Array methods that derive a new collection ( `splice`, `filter`, `slice`, `concat`, … )
41
+ * construct `new this.constructor[Symbol.species](len)` by default. That would call this
42
+ * class's constructor with no relation descriptor, and the very next line dereferences
43
+ * `this.Relation.TargetModel` — so `order.Items.splice(0, 1)` threw
44
+ * `Cannot read properties of undefined (reading 'TargetModel')`.
45
+ *
46
+ * Deriving plain arrays is also the right semantics: a slice of a relation is a list of
47
+ * models, not a relation with an owner. ( The hand-written `map()` below predates this and
48
+ * worked around the same thing for one method. )
49
+ */
50
+ static get [Symbol.species](): ArrayConstructor;
39
51
  constructor(Owner: O, Relation: IRelationDescriptor, objects?: R[]);
52
+ /**
53
+ * The owner-side value this relation joins on.
54
+ *
55
+ * A relation names exactly ONE source column (`IRelationDescriptor.PrimaryKey`), so a
56
+ * composite-key owner must contribute only that column's value. `Owner.PrimaryKeyValue`
57
+ * would be a tuple, which binds an array into a single `?` and fails with
58
+ * `SQLITE_RANGE: column index out of range`.
59
+ *
60
+ * For a single-column key `Relation.PrimaryKey` IS the model's key column, so this returns
61
+ * exactly what `Owner.PrimaryKeyValue` did.
62
+ */
63
+ protected get OwnerJoinValue(): any;
40
64
  map<U>(callbackfn: (value: R, index: number, array: R[]) => U, thisArg?: any): U[];
41
65
  /**
42
66
  * Removes all objects from relation by comparison functions
@@ -108,7 +132,7 @@ export declare abstract class Relation<R extends ModelBase<R>, O extends ModelBa
108
132
  *
109
133
  * @param dataset - data for replace.
110
134
  */
111
- abstract set(obj: R[] | ((data: R[], pKey: string) => R[])): void;
135
+ abstract set(obj: R[] | ((data: R[], pKey: string[]) => R[])): void;
112
136
  /**
113
137
  * Populates this relation ( loads all data related to owner of this relation)
114
138
  */
@@ -123,10 +147,40 @@ export declare class SingleRelation<R extends ModelBase, O extends ModelBase = M
123
147
  Value: R | null | undefined;
124
148
  Populated: boolean;
125
149
  constructor(_owner: O, model: Constructor<R> | ForwardRefFunction | null, Relation: IRelationDescriptor | null, object?: R);
150
+ /**
151
+ * Attaches `obj` and persists the owner. One transaction, so the attach and the owner
152
+ * update cannot half-apply. Nested inside a caller's transaction this takes a savepoint.
153
+ */
126
154
  set(obj: R): Promise<void>;
155
+ /**
156
+ * Points this relation at `obj` and records the owner's foreign key as changed.
157
+ *
158
+ * Uses the model's own `markDirty` rather than an `any` cast into the owner's private
159
+ * dirty-column list, which is what this used to do ( A6 ). `markDirty` de-duplicates and
160
+ * owns the `IsDirty` flag, so repeated attaches record the column once.
161
+ *
162
+ * @param obj - the related model, or null to clear the relation
163
+ */
127
164
  attach(obj: R | null): void;
128
165
  detach(): void;
166
+ /**
167
+ * Deletes the related row and clears the owner's foreign key. One transaction: these used
168
+ * to be two independent statements, so a throw between them left the owner pointing at a
169
+ * row that no longer exists.
170
+ */
129
171
  remove(): Promise<void>;
172
+ /**
173
+ * Loads the model this relation points at.
174
+ *
175
+ * Queries the target table directly, filtered on the column the relation declares as its
176
+ * join key ( `Relation.PrimaryKey` ) — the same column `BelongsToRelation.compile()` joins
177
+ * on for the eager path. It is *not* the target model's own primary key: `@BelongsTo`
178
+ * accepts an explicit third argument for exactly this case, and the two only coincide
179
+ * because the decorator defaults one from the other, which is why filtering on the target
180
+ * PK went unnoticed.
181
+ *
182
+ * @param callback - optional callback applied to the target query
183
+ */
130
184
  populate(callback?: (this: SelectQueryBuilder<this>) => void): Promise<void>;
131
185
  }
132
186
  export declare class ManyQueryRelationList<R extends ModelBase, O extends ModelBase> extends Relation<R, O, typeof ModelBase<R>> {
@@ -138,7 +192,7 @@ export declare class ManyQueryRelationList<R extends ModelBase, O extends ModelB
138
192
  intersection(_dataset: R[], _callback?: (a: R, b: R) => boolean): R[];
139
193
  union(_dataset: R[], _mode?: InsertBehaviour): void;
140
194
  diff(_dataset: R[], _callback?: (a: R, b: R) => boolean): R[];
141
- set(_obj: R[] | ((data: R[], pKey: string) => R[])): void;
195
+ set(_obj: R[] | ((data: R[], pKey: string[]) => R[])): void;
142
196
  populate(_callback?: (this: ISelectQueryBuilder<R[]> & QueryScope) => void): Promise<void>;
143
197
  constructor(owner: O, relation: IRelationDescriptor, objects?: R[]);
144
198
  }
@@ -148,15 +202,41 @@ export declare class SingleQueryRelation<R extends ModelBase, O extends ModelBas
148
202
  export declare class ManyToManyRelationList<T extends ModelBase, O extends ModelBase> extends Relation<T, O, typeof ModelBase<T>> {
149
203
  protected junctionModelDescriptor: IModelDescriptor | null;
150
204
  constructor(owner: O, relation: IRelationDescriptor, objects?: T[]);
151
- intersection(_obj: T[], _callback?: (a: T, b: T) => boolean): T[];
152
- union(_obj: T[], _mode?: InsertBehaviour): void;
153
- diff(_obj: T[], _callback?: (a: T, b: T) => boolean): T[];
205
+ /**
206
+ * Calculates intersection between data in this relation and provided dataset
207
+ *
208
+ * `[...this]` rather than `this`: these delegate into lodash, and `Relation extends Array`
209
+ * with a three-argument constructor, so anything that derives a new collection has to work
210
+ * on a plain array. ( `OneToManyRelationList` sidesteps the same problem by overriding
211
+ * `filter`/`map`; this class has no such overrides. )
212
+ *
213
+ * @param obj - dataset to compare with
214
+ * @param callback - compare function, if not set the target model's primary key is used
215
+ * @returns members present in both sets
216
+ */
217
+ intersection(obj: T[], callback?: (a: T, b: T) => boolean): T[];
218
+ /**
219
+ * Appends `obj` to this relation. Shorthand for push — nothing is removed and nothing is
220
+ * written to the database until `sync()`, `update()` or `save()` runs.
221
+ *
222
+ * @param obj - members to add
223
+ */
224
+ union(obj: T[], _mode?: InsertBehaviour): void;
225
+ /**
226
+ * Calculates the symmetric difference between this relation and `dataset` — members of this
227
+ * relation that are not in the dataset, plus members of the dataset that are not in this
228
+ * relation.
229
+ *
230
+ * @param obj - dataset to compare with
231
+ * @param callback - compare function, if not set the target model's primary key is used
232
+ */
233
+ diff(obj: T[], callback?: (a: T, b: T) => boolean): T[];
154
234
  /**
155
235
  * Sets data in relation ( clear data and replace with new dataset )
156
236
  *
157
237
  * @param obj
158
238
  */
159
- set(obj: T[] | ((data: T[], pKeyName: string) => T[])): void;
239
+ set(obj: T[] | ((data: T[], pKeyName: string[]) => T[])): void;
160
240
  /**
161
241
  * Removes from relation & deletes from db
162
242
  *
@@ -191,6 +271,9 @@ export declare class ManyToManyRelationList<T extends ModelBase, O extends Model
191
271
  * Sets foreign key to relational data
192
272
  *
193
273
  * Inserts or updates models that are dirty only.
274
+ *
275
+ * One transaction: the junction upserts and the orphan delete used to be independent
276
+ * statements. Nested inside a caller's transaction this takes a savepoint.
194
277
  */
195
278
  sync(): Promise<void>;
196
279
  /**
@@ -199,6 +282,8 @@ export declare class ManyToManyRelationList<T extends ModelBase, O extends Model
199
282
  * Only dirty models are updated.
200
283
  */
201
284
  update(): Promise<void>;
285
+ /** The write itself, without a transaction of its own, so `sync()` can share one. */
286
+ protected _update(): Promise<void>;
202
287
  populate<Q extends typeof ModelBase>(callback?: (this: ISelectQueryBuilder<T[]> & Q['_queryScopes']) => void): Promise<void>;
203
288
  }
204
289
  export declare class OneToManyRelationList<T extends ModelBase, O extends ModelBase> extends Relation<T, O, typeof ModelBase<T>> {
@@ -219,6 +304,11 @@ export declare class OneToManyRelationList<T extends ModelBase, O extends ModelB
219
304
  * Sets foreign key to relational data
220
305
  *
221
306
  * Inserts or updates models that are dirty only.
307
+ *
308
+ * The whole synchronization is one transaction: the orphan delete used to run as an
309
+ * independent statement, so a throw between it and the writes left the database
310
+ * inconsistent with the in-memory graph. Nested inside a caller's transaction this takes
311
+ * a savepoint rather than opening a second one.
222
312
  */
223
313
  sync(): Promise<void>;
224
314
  /**
@@ -227,6 +317,8 @@ export declare class OneToManyRelationList<T extends ModelBase, O extends ModelB
227
317
  * Only dirty models are updated.
228
318
  */
229
319
  update(): Promise<void>;
320
+ /** The write itself, without a transaction of its own, so `sync()` can share one. */
321
+ protected _update(): Promise<void>;
230
322
  /**
231
323
  * 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)
232
324
  *
@@ -240,7 +332,7 @@ export declare class OneToManyRelationList<T extends ModelBase, O extends ModelB
240
332
  *
241
333
  * @param obj
242
334
  */
243
- set(obj: T[] | ((data: T[], pKeyName: string) => T[])): void;
335
+ set(obj: T[] | ((data: T[], pKeyName: string[]) => T[])): void;
244
336
  /**
245
337
  * Calculates intersection between data in this relation and provided dataset
246
338
  *
@@ -1 +1 @@
1
- {"version":3,"file":"relation-objects.d.ts","sourceRoot":"","sources":["../../src/relation-objects.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"relation-objects.d.ts","sourceRoot":"","sources":["../../src/relation-objects.ts"],"names":[],"mappings":"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"}