@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.
- package/README.md +72 -3
- package/lib/cjs/bootstrap.js +10 -0
- package/lib/cjs/bootstrap.js.map +1 -1
- package/lib/cjs/builders.d.ts +115 -11
- package/lib/cjs/builders.d.ts.map +1 -1
- package/lib/cjs/builders.js +342 -283
- package/lib/cjs/builders.js.map +1 -1
- package/lib/cjs/converters.d.ts +9 -2
- package/lib/cjs/converters.d.ts.map +1 -1
- package/lib/cjs/converters.js +48 -8
- package/lib/cjs/converters.js.map +1 -1
- package/lib/cjs/decorators.d.ts +26 -3
- package/lib/cjs/decorators.d.ts.map +1 -1
- package/lib/cjs/decorators.js +95 -42
- package/lib/cjs/decorators.js.map +1 -1
- package/lib/cjs/dehydrators.js +1 -1
- package/lib/cjs/dehydrators.js.map +1 -1
- package/lib/cjs/descriptor.d.ts +1 -0
- package/lib/cjs/descriptor.d.ts.map +1 -1
- package/lib/cjs/descriptor.js +16 -40
- package/lib/cjs/descriptor.js.map +1 -1
- package/lib/cjs/driver.d.ts +136 -7
- package/lib/cjs/driver.d.ts.map +1 -1
- package/lib/cjs/driver.js +279 -0
- package/lib/cjs/driver.js.map +1 -1
- package/lib/cjs/existsRelationHandlers.d.ts +29 -0
- package/lib/cjs/existsRelationHandlers.d.ts.map +1 -0
- package/lib/cjs/existsRelationHandlers.js +104 -0
- package/lib/cjs/existsRelationHandlers.js.map +1 -0
- package/lib/cjs/fp.d.ts.map +1 -1
- package/lib/cjs/fp.js +10 -15
- package/lib/cjs/fp.js.map +1 -1
- package/lib/cjs/hydrators.d.ts.map +1 -1
- package/lib/cjs/hydrators.js +29 -2
- package/lib/cjs/hydrators.js.map +1 -1
- package/lib/cjs/identity-map.d.ts +60 -0
- package/lib/cjs/identity-map.d.ts.map +1 -0
- package/lib/cjs/identity-map.js +135 -0
- package/lib/cjs/identity-map.js.map +1 -0
- package/lib/cjs/index.d.ts +12 -0
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/index.js +12 -0
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/interfaces.d.ts +295 -9
- package/lib/cjs/interfaces.d.ts.map +1 -1
- package/lib/cjs/interfaces.js +54 -1
- package/lib/cjs/interfaces.js.map +1 -1
- package/lib/cjs/metadata.d.ts.map +1 -1
- package/lib/cjs/metadata.js +4 -1
- package/lib/cjs/metadata.js.map +1 -1
- package/lib/cjs/metrics.d.ts +53 -0
- package/lib/cjs/metrics.d.ts.map +1 -0
- package/lib/cjs/metrics.js +82 -0
- package/lib/cjs/metrics.js.map +1 -0
- package/lib/cjs/middlewares.d.ts +13 -1
- package/lib/cjs/middlewares.d.ts.map +1 -1
- package/lib/cjs/middlewares.js +55 -15
- package/lib/cjs/middlewares.js.map +1 -1
- package/lib/cjs/model.d.ts +129 -13
- package/lib/cjs/model.d.ts.map +1 -1
- package/lib/cjs/model.js +449 -93
- package/lib/cjs/model.js.map +1 -1
- package/lib/cjs/orm.d.ts.map +1 -1
- package/lib/cjs/orm.js +12 -3
- package/lib/cjs/orm.js.map +1 -1
- package/lib/cjs/orphan.d.ts +27 -0
- package/lib/cjs/orphan.d.ts.map +1 -0
- package/lib/cjs/orphan.js +55 -0
- package/lib/cjs/orphan.js.map +1 -0
- package/lib/cjs/primary-keys.d.ts +60 -0
- package/lib/cjs/primary-keys.d.ts.map +1 -0
- package/lib/cjs/primary-keys.js +243 -0
- package/lib/cjs/primary-keys.js.map +1 -0
- package/lib/cjs/relation-objects.d.ts +101 -9
- package/lib/cjs/relation-objects.d.ts.map +1 -1
- package/lib/cjs/relation-objects.js +194 -43
- package/lib/cjs/relation-objects.js.map +1 -1
- package/lib/cjs/relations.d.ts +7 -1
- package/lib/cjs/relations.d.ts.map +1 -1
- package/lib/cjs/relations.js +16 -1
- package/lib/cjs/relations.js.map +1 -1
- package/lib/cjs/resilience.d.ts +50 -0
- package/lib/cjs/resilience.d.ts.map +1 -0
- package/lib/cjs/resilience.js +70 -0
- package/lib/cjs/resilience.js.map +1 -0
- package/lib/cjs/snapshot.d.ts +58 -0
- package/lib/cjs/snapshot.d.ts.map +1 -0
- package/lib/cjs/snapshot.js +125 -0
- package/lib/cjs/snapshot.js.map +1 -0
- package/lib/cjs/statements.d.ts +11 -1
- package/lib/cjs/statements.d.ts.map +1 -1
- package/lib/cjs/statements.js +13 -2
- package/lib/cjs/statements.js.map +1 -1
- package/lib/cjs/subject-builder.d.ts +79 -0
- package/lib/cjs/subject-builder.d.ts.map +1 -0
- package/lib/cjs/subject-builder.js +296 -0
- package/lib/cjs/subject-builder.js.map +1 -0
- package/lib/cjs/subject-executor.d.ts +122 -0
- package/lib/cjs/subject-executor.d.ts.map +1 -0
- package/lib/cjs/subject-executor.js +319 -0
- package/lib/cjs/subject-executor.js.map +1 -0
- package/lib/cjs/subject-sorter.d.ts +70 -0
- package/lib/cjs/subject-sorter.d.ts.map +1 -0
- package/lib/cjs/subject-sorter.js +173 -0
- package/lib/cjs/subject-sorter.js.map +1 -0
- package/lib/cjs/subject.d.ts +100 -0
- package/lib/cjs/subject.d.ts.map +1 -0
- package/lib/cjs/subject.js +89 -0
- package/lib/cjs/subject.js.map +1 -0
- package/lib/cjs/unit-of-work.d.ts +52 -0
- package/lib/cjs/unit-of-work.d.ts.map +1 -0
- package/lib/cjs/unit-of-work.js +170 -0
- package/lib/cjs/unit-of-work.js.map +1 -0
- package/lib/mjs/bootstrap.js +10 -0
- package/lib/mjs/bootstrap.js.map +1 -1
- package/lib/mjs/builders.d.ts +115 -11
- package/lib/mjs/builders.d.ts.map +1 -1
- package/lib/mjs/builders.js +344 -285
- package/lib/mjs/builders.js.map +1 -1
- package/lib/mjs/converters.d.ts +9 -2
- package/lib/mjs/converters.d.ts.map +1 -1
- package/lib/mjs/converters.js +48 -8
- package/lib/mjs/converters.js.map +1 -1
- package/lib/mjs/decorators.d.ts +26 -3
- package/lib/mjs/decorators.d.ts.map +1 -1
- package/lib/mjs/decorators.js +96 -44
- package/lib/mjs/decorators.js.map +1 -1
- package/lib/mjs/dehydrators.js +1 -1
- package/lib/mjs/dehydrators.js.map +1 -1
- package/lib/mjs/descriptor.d.ts +1 -0
- package/lib/mjs/descriptor.d.ts.map +1 -1
- package/lib/mjs/descriptor.js +17 -39
- package/lib/mjs/descriptor.js.map +1 -1
- package/lib/mjs/driver.d.ts +136 -7
- package/lib/mjs/driver.d.ts.map +1 -1
- package/lib/mjs/driver.js +279 -0
- package/lib/mjs/driver.js.map +1 -1
- package/lib/mjs/existsRelationHandlers.d.ts +29 -0
- package/lib/mjs/existsRelationHandlers.d.ts.map +1 -0
- package/lib/mjs/existsRelationHandlers.js +100 -0
- package/lib/mjs/existsRelationHandlers.js.map +1 -0
- package/lib/mjs/fp.d.ts.map +1 -1
- package/lib/mjs/fp.js +10 -15
- package/lib/mjs/fp.js.map +1 -1
- package/lib/mjs/hydrators.d.ts.map +1 -1
- package/lib/mjs/hydrators.js +29 -2
- package/lib/mjs/hydrators.js.map +1 -1
- package/lib/mjs/identity-map.d.ts +60 -0
- package/lib/mjs/identity-map.d.ts.map +1 -0
- package/lib/mjs/identity-map.js +130 -0
- package/lib/mjs/identity-map.js.map +1 -0
- package/lib/mjs/index.d.ts +12 -0
- package/lib/mjs/index.d.ts.map +1 -1
- package/lib/mjs/index.js +12 -0
- package/lib/mjs/index.js.map +1 -1
- package/lib/mjs/interfaces.d.ts +295 -9
- package/lib/mjs/interfaces.d.ts.map +1 -1
- package/lib/mjs/interfaces.js +53 -0
- package/lib/mjs/interfaces.js.map +1 -1
- package/lib/mjs/metadata.d.ts.map +1 -1
- package/lib/mjs/metadata.js +4 -1
- package/lib/mjs/metadata.js.map +1 -1
- package/lib/mjs/metrics.d.ts +53 -0
- package/lib/mjs/metrics.d.ts.map +1 -0
- package/lib/mjs/metrics.js +76 -0
- package/lib/mjs/metrics.js.map +1 -0
- package/lib/mjs/middlewares.d.ts +13 -1
- package/lib/mjs/middlewares.d.ts.map +1 -1
- package/lib/mjs/middlewares.js +55 -15
- package/lib/mjs/middlewares.js.map +1 -1
- package/lib/mjs/model.d.ts +129 -13
- package/lib/mjs/model.d.ts.map +1 -1
- package/lib/mjs/model.js +451 -95
- package/lib/mjs/model.js.map +1 -1
- package/lib/mjs/orm.d.ts.map +1 -1
- package/lib/mjs/orm.js +12 -3
- package/lib/mjs/orm.js.map +1 -1
- package/lib/mjs/orphan.d.ts +27 -0
- package/lib/mjs/orphan.d.ts.map +1 -0
- package/lib/mjs/orphan.js +52 -0
- package/lib/mjs/orphan.js.map +1 -0
- package/lib/mjs/primary-keys.d.ts +60 -0
- package/lib/mjs/primary-keys.d.ts.map +1 -0
- package/lib/mjs/primary-keys.js +223 -0
- package/lib/mjs/primary-keys.js.map +1 -0
- package/lib/mjs/relation-objects.d.ts +101 -9
- package/lib/mjs/relation-objects.d.ts.map +1 -1
- package/lib/mjs/relation-objects.js +194 -43
- package/lib/mjs/relation-objects.js.map +1 -1
- package/lib/mjs/relations.d.ts +7 -1
- package/lib/mjs/relations.d.ts.map +1 -1
- package/lib/mjs/relations.js +16 -1
- package/lib/mjs/relations.js.map +1 -1
- package/lib/mjs/resilience.d.ts +50 -0
- package/lib/mjs/resilience.d.ts.map +1 -0
- package/lib/mjs/resilience.js +64 -0
- package/lib/mjs/resilience.js.map +1 -0
- package/lib/mjs/snapshot.d.ts +58 -0
- package/lib/mjs/snapshot.d.ts.map +1 -0
- package/lib/mjs/snapshot.js +115 -0
- package/lib/mjs/snapshot.js.map +1 -0
- package/lib/mjs/statements.d.ts +11 -1
- package/lib/mjs/statements.d.ts.map +1 -1
- package/lib/mjs/statements.js +14 -3
- package/lib/mjs/statements.js.map +1 -1
- package/lib/mjs/subject-builder.d.ts +79 -0
- package/lib/mjs/subject-builder.d.ts.map +1 -0
- package/lib/mjs/subject-builder.js +292 -0
- package/lib/mjs/subject-builder.js.map +1 -0
- package/lib/mjs/subject-executor.d.ts +122 -0
- package/lib/mjs/subject-executor.d.ts.map +1 -0
- package/lib/mjs/subject-executor.js +312 -0
- package/lib/mjs/subject-executor.js.map +1 -0
- package/lib/mjs/subject-sorter.d.ts +70 -0
- package/lib/mjs/subject-sorter.d.ts.map +1 -0
- package/lib/mjs/subject-sorter.js +168 -0
- package/lib/mjs/subject-sorter.js.map +1 -0
- package/lib/mjs/subject.d.ts +100 -0
- package/lib/mjs/subject.d.ts.map +1 -0
- package/lib/mjs/subject.js +84 -0
- package/lib/mjs/subject.js.map +1 -0
- package/lib/mjs/unit-of-work.d.ts +52 -0
- package/lib/mjs/unit-of-work.d.ts.map +1 -0
- package/lib/mjs/unit-of-work.js +166 -0
- package/lib/mjs/unit-of-work.js.map +1 -0
- package/lib/tsconfig.cjs.tsbuildinfo +1 -1
- package/lib/tsconfig.mjs.tsbuildinfo +1 -1
- package/package.json +9 -7
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/* eslint-disable prettier/prettier */
|
|
2
|
+
import _ from 'lodash';
|
|
3
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
4
|
+
import { SqlOperator } from './enums.js';
|
|
5
|
+
import { OrmException } from './exceptions.js';
|
|
6
|
+
/**
|
|
7
|
+
* Separator used when flattening a composite key into one string. NUL never appears in an
|
|
8
|
+
* identifier and the parts are length-prefixed, so two different tuples cannot collide.
|
|
9
|
+
*/
|
|
10
|
+
const PK_SEPARATOR = '\u0000';
|
|
11
|
+
/** Primary key column names in declaration order. Empty when the model has no @Primary(). */
|
|
12
|
+
export function pkColumns(descriptor) {
|
|
13
|
+
return descriptor.PrimaryKey ?? [];
|
|
14
|
+
}
|
|
15
|
+
export function hasPk(descriptor) {
|
|
16
|
+
return pkColumns(descriptor).length !== 0;
|
|
17
|
+
}
|
|
18
|
+
export function isCompositePk(descriptor) {
|
|
19
|
+
return pkColumns(descriptor).length > 1;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Coerces one primary key value into an ordered tuple matching `pkColumns(descriptor)`.
|
|
23
|
+
* Accepts a scalar or a one-element array for single-column keys, and an array in key order
|
|
24
|
+
* or a plain object keyed by column name for composite keys.
|
|
25
|
+
*/
|
|
26
|
+
export function normalizePkTuple(descriptor, value) {
|
|
27
|
+
const keys = pkColumns(descriptor);
|
|
28
|
+
if (keys.length === 0) {
|
|
29
|
+
throw new OrmException(`model ${descriptor.Name} has no primary key`);
|
|
30
|
+
}
|
|
31
|
+
if (keys.length === 1) {
|
|
32
|
+
return [Array.isArray(value) ? value[0] : value];
|
|
33
|
+
}
|
|
34
|
+
if (Array.isArray(value)) {
|
|
35
|
+
if (value.length !== keys.length) {
|
|
36
|
+
throw new OrmException(`composite primary key of ${descriptor.Name} expects ${keys.length} values (${keys.join(', ')}), got ${value.length}`);
|
|
37
|
+
}
|
|
38
|
+
return value;
|
|
39
|
+
}
|
|
40
|
+
if (_.isPlainObject(value)) {
|
|
41
|
+
return keys.map((k) => {
|
|
42
|
+
if (!(k in value)) {
|
|
43
|
+
throw new OrmException(`composite primary key of ${descriptor.Name} is missing column ${k}`);
|
|
44
|
+
}
|
|
45
|
+
// eslint-disable-next-line security/detect-object-injection
|
|
46
|
+
return value[k];
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
throw new 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}`);
|
|
50
|
+
}
|
|
51
|
+
/** Reads the primary key off a row or model: a scalar for single-column keys, a tuple for composite. */
|
|
52
|
+
export function pkValueOf(source, descriptor) {
|
|
53
|
+
const keys = pkColumns(descriptor);
|
|
54
|
+
if (keys.length === 0) {
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
if (keys.length === 1) {
|
|
58
|
+
return source?.[keys[0]];
|
|
59
|
+
}
|
|
60
|
+
return keys.map((k) => source?.[k]);
|
|
61
|
+
}
|
|
62
|
+
/** Writes a primary key onto a row or model. Mirror image of {@link pkValueOf}. */
|
|
63
|
+
export function setPkValue(target, descriptor, value) {
|
|
64
|
+
const keys = pkColumns(descriptor);
|
|
65
|
+
if (keys.length === 0) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
if (keys.length === 1) {
|
|
69
|
+
target[keys[0]] = value;
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const tuple = normalizePkTuple(descriptor, value);
|
|
73
|
+
keys.forEach((k, i) => (target[k] = tuple[i]));
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Flattens the given columns of a row into one string, for use as a Map key or a lodash
|
|
77
|
+
* `differenceBy` / `intersectionBy` iteratee where a tuple would compare by reference.
|
|
78
|
+
* Each part is length-prefixed so `['ab', 'c']` and `['a', 'bc']` cannot collide.
|
|
79
|
+
*/
|
|
80
|
+
export function pkKeyStringFor(source, keys) {
|
|
81
|
+
return keys
|
|
82
|
+
// eslint-disable-next-line security/detect-object-injection
|
|
83
|
+
.map((k) => `${String(source?.[k]).length}:${String(source?.[k])}`)
|
|
84
|
+
.join(PK_SEPARATOR);
|
|
85
|
+
}
|
|
86
|
+
/** {@link pkKeyStringFor} over a model's primary key columns. */
|
|
87
|
+
export function pkKeyString(source, descriptor) {
|
|
88
|
+
return pkKeyStringFor(source, pkColumns(descriptor));
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* WHERE matching exactly one row by primary key.
|
|
92
|
+
* Single column: `col = ?`, byte-identical to the pre-composite behaviour.
|
|
93
|
+
* Composite: `( a = ? AND b = ? )`.
|
|
94
|
+
*/
|
|
95
|
+
export function wherePk(builder, descriptor, value) {
|
|
96
|
+
const keys = pkColumns(descriptor);
|
|
97
|
+
if (keys.length === 0) {
|
|
98
|
+
throw new OrmException(`model ${descriptor.Name} has no primary key`);
|
|
99
|
+
}
|
|
100
|
+
if (keys.length === 1) {
|
|
101
|
+
builder.where(keys[0], Array.isArray(value) ? value[0] : value);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const tuple = normalizePkTuple(descriptor, value);
|
|
105
|
+
builder.where(function () {
|
|
106
|
+
keys.forEach((k, i) => this.where(k, tuple[i]));
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* WHERE matching any of `values`.
|
|
111
|
+
* Single column: `col IN (?, ...)`.
|
|
112
|
+
* Composite: `( ( a = ? AND b = ? ) OR ( a = ? AND b = ? ) )`.
|
|
113
|
+
* An empty `values` matches nothing, consistent with `whereIn(col, [])` (B4b).
|
|
114
|
+
*/
|
|
115
|
+
export function whereAnyPk(builder, descriptor, values) {
|
|
116
|
+
const keys = pkColumns(descriptor);
|
|
117
|
+
if (keys.length === 0) {
|
|
118
|
+
throw new OrmException(`model ${descriptor.Name} has no primary key`);
|
|
119
|
+
}
|
|
120
|
+
if (values.length === 0) {
|
|
121
|
+
builder.where(false);
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
if (keys.length === 1) {
|
|
125
|
+
builder.whereIn(keys[0], values.map((v) => (Array.isArray(v) ? v[0] : v)));
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
const tuples = values.map((v) => normalizePkTuple(descriptor, v));
|
|
129
|
+
builder.where(function () {
|
|
130
|
+
tuples.forEach((tuple, idx) => {
|
|
131
|
+
const group = function () {
|
|
132
|
+
keys.forEach((k, i) => this.where(k, tuple[i]));
|
|
133
|
+
};
|
|
134
|
+
if (idx === 0) {
|
|
135
|
+
this.where(group);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
this.orWhere(group);
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* WHERE excluding all of `values` — the orphan-delete predicate.
|
|
145
|
+
* Single column: `col NOT IN (?, ...)`.
|
|
146
|
+
* Composite: De Morgan of {@link whereAnyPk} — `( ( a != ? OR b != ? ) AND ( a != ? OR b != ? ) )`.
|
|
147
|
+
* An empty `values` adds no condition ( nothing is excluded ).
|
|
148
|
+
*/
|
|
149
|
+
export function whereNotAnyPk(builder, descriptor, values) {
|
|
150
|
+
const keys = pkColumns(descriptor);
|
|
151
|
+
if (keys.length === 0) {
|
|
152
|
+
throw new OrmException(`model ${descriptor.Name} has no primary key`);
|
|
153
|
+
}
|
|
154
|
+
if (values.length === 0) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
if (keys.length === 1) {
|
|
158
|
+
builder.whereNotIn(keys[0], values.map((v) => (Array.isArray(v) ? v[0] : v)));
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
const tuples = values.map((v) => normalizePkTuple(descriptor, v));
|
|
162
|
+
builder.where(function () {
|
|
163
|
+
tuples.forEach((tuple) => {
|
|
164
|
+
this.where(function () {
|
|
165
|
+
keys.forEach((k, i) => {
|
|
166
|
+
if (i === 0) {
|
|
167
|
+
this.where(k, SqlOperator.NOT, tuple[i]);
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
this.orWhere(k, SqlOperator.NOT, tuple[i]);
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Appends one ORDER BY term per primary key column. Returns false when the model has no
|
|
179
|
+
* primary key, so callers can fall back to unique columns or timestamps.
|
|
180
|
+
*/
|
|
181
|
+
export function orderByPk(builder, descriptor, order) {
|
|
182
|
+
const keys = pkColumns(descriptor);
|
|
183
|
+
if (keys.length === 0) {
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
keys.forEach((k) => builder.order(k, order));
|
|
187
|
+
return true;
|
|
188
|
+
}
|
|
189
|
+
/** Generation strategy for one primary key column. Unrecorded columns default to `auto`. */
|
|
190
|
+
export function pkGeneration(descriptor, column) {
|
|
191
|
+
return descriptor.PrimaryKeyGeneration?.get(column) ?? 'auto';
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Fills every `uuid`-generated primary key column that has no value yet. Called immediately
|
|
195
|
+
* before insert so the key is known client-side without a database round-trip. Never overwrites
|
|
196
|
+
* a value the caller supplied.
|
|
197
|
+
*/
|
|
198
|
+
export function generateClientSideKeys(target, descriptor) {
|
|
199
|
+
pkColumns(descriptor).forEach((c) => {
|
|
200
|
+
if (pkGeneration(descriptor, c) !== 'uuid') {
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
// eslint-disable-next-line security/detect-object-injection
|
|
204
|
+
if (target[c] === null || target[c] === undefined || target[c] === '') {
|
|
205
|
+
// eslint-disable-next-line security/detect-object-injection
|
|
206
|
+
target[c] = uuidv4();
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
/** Throws when an `assigned` primary key column has no value at insert time. */
|
|
211
|
+
export function assertAssignedKeys(target, descriptor) {
|
|
212
|
+
pkColumns(descriptor).forEach((c) => {
|
|
213
|
+
if (pkGeneration(descriptor, c) !== 'assigned') {
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
// eslint-disable-next-line security/detect-object-injection
|
|
217
|
+
const value = target[c];
|
|
218
|
+
if (value === null || value === undefined || value === '') {
|
|
219
|
+
throw new OrmException(`primary key column ${descriptor.Name}.${c} must be assigned before insert (@Primary({ generated: 'assigned' }))`);
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
//# 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
|
-
|
|
152
|
-
|
|
153
|
-
|
|
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":"AACA,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,eAAe,EAAE,kBAAkB,EAAE,SAAS,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACzJ,OAAO,EAAM,WAAW,EAA8B,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAe,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"relation-objects.d.ts","sourceRoot":"","sources":["../../src/relation-objects.ts"],"names":[],"mappings":"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"}
|