@loopback/repository 4.1.2 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/errors/index.d.ts +1 -0
- package/dist/errors/index.js +1 -0
- package/dist/errors/index.js.map +1 -1
- package/dist/errors/invalid-polymorphism.error.d.ts +5 -0
- package/dist/errors/invalid-polymorphism.error.js +22 -0
- package/dist/errors/invalid-polymorphism.error.js.map +1 -0
- package/dist/model.d.ts +7 -1
- package/dist/model.js +14 -0
- package/dist/model.js.map +1 -1
- package/dist/relations/belongs-to/belongs-to.accessor.d.ts +6 -2
- package/dist/relations/belongs-to/belongs-to.accessor.js +18 -5
- package/dist/relations/belongs-to/belongs-to.accessor.js.map +1 -1
- package/dist/relations/belongs-to/belongs-to.helpers.d.ts +3 -0
- package/dist/relations/belongs-to/belongs-to.helpers.js +32 -8
- package/dist/relations/belongs-to/belongs-to.helpers.js.map +1 -1
- package/dist/relations/belongs-to/belongs-to.inclusion-resolver.d.ts +5 -2
- package/dist/relations/belongs-to/belongs-to.inclusion-resolver.js +81 -8
- package/dist/relations/belongs-to/belongs-to.inclusion-resolver.js.map +1 -1
- package/dist/relations/belongs-to/belongs-to.repository.d.ts +28 -5
- package/dist/relations/belongs-to/belongs-to.repository.js +49 -10
- package/dist/relations/belongs-to/belongs-to.repository.js.map +1 -1
- package/dist/relations/has-many/has-many-through.helpers.d.ts +3 -0
- package/dist/relations/has-many/has-many-through.helpers.js +25 -1
- package/dist/relations/has-many/has-many-through.helpers.js.map +1 -1
- package/dist/relations/has-many/has-many-through.inclusion-resolver.d.ts +3 -1
- package/dist/relations/has-many/has-many-through.inclusion-resolver.js +92 -21
- package/dist/relations/has-many/has-many-through.inclusion-resolver.js.map +1 -1
- package/dist/relations/has-many/has-many-through.repository-factory.d.ts +3 -1
- package/dist/relations/has-many/has-many-through.repository-factory.js +7 -1
- package/dist/relations/has-many/has-many-through.repository-factory.js.map +1 -1
- package/dist/relations/has-many/has-many-through.repository.d.ts +66 -11
- package/dist/relations/has-many/has-many-through.repository.js +211 -35
- package/dist/relations/has-many/has-many-through.repository.js.map +1 -1
- package/dist/relations/has-one/has-one.helpers.d.ts +3 -0
- package/dist/relations/has-one/has-one.helpers.js +34 -8
- package/dist/relations/has-one/has-one.helpers.js.map +1 -1
- package/dist/relations/has-one/has-one.inclusion-resolver.d.ts +6 -3
- package/dist/relations/has-one/has-one.inclusion-resolver.js +82 -7
- package/dist/relations/has-one/has-one.inclusion-resolver.js.map +1 -1
- package/dist/relations/has-one/has-one.repository-factory.d.ts +9 -3
- package/dist/relations/has-one/has-one.repository-factory.js +13 -3
- package/dist/relations/has-one/has-one.repository-factory.js.map +1 -1
- package/dist/relations/has-one/has-one.repository.d.ts +58 -11
- package/dist/relations/has-one/has-one.repository.js +118 -15
- package/dist/relations/has-one/has-one.repository.js.map +1 -1
- package/dist/relations/index.d.ts +2 -0
- package/dist/relations/index.js +2 -0
- package/dist/relations/index.js.map +1 -1
- package/dist/relations/references-many/index.d.ts +4 -0
- package/dist/relations/references-many/index.js +12 -0
- package/dist/relations/references-many/index.js.map +1 -0
- package/dist/relations/references-many/references-many.accessor.d.ts +17 -0
- package/dist/relations/references-many/references-many.accessor.js +40 -0
- package/dist/relations/references-many/references-many.accessor.js.map +1 -0
- package/dist/relations/references-many/references-many.decorator.d.ts +11 -0
- package/dist/relations/references-many/references-many.decorator.js +73 -0
- package/dist/relations/references-many/references-many.decorator.js.map +1 -0
- package/dist/relations/references-many/references-many.helpers.d.ts +17 -0
- package/dist/relations/references-many/references-many.helpers.js +63 -0
- package/dist/relations/references-many/references-many.helpers.js.map +1 -0
- package/dist/relations/references-many/references-many.inclusion-resolver.d.ts +14 -0
- package/dist/relations/references-many/references-many.inclusion-resolver.js +42 -0
- package/dist/relations/references-many/references-many.inclusion-resolver.js.map +1 -0
- package/dist/relations/references-many/references-many.repository.d.ts +28 -0
- package/dist/relations/references-many/references-many.repository.js +33 -0
- package/dist/relations/references-many/references-many.repository.js.map +1 -0
- package/dist/relations/relation.decorator.d.ts +0 -6
- package/dist/relations/relation.decorator.js +1 -13
- package/dist/relations/relation.decorator.js.map +1 -1
- package/dist/relations/relation.filter.solver.d.ts +2 -0
- package/dist/relations/relation.filter.solver.js +57 -0
- package/dist/relations/relation.filter.solver.js.map +1 -0
- package/dist/relations/relation.helpers.js +16 -1
- package/dist/relations/relation.helpers.js.map +1 -1
- package/dist/relations/relation.types.d.ts +52 -1
- package/dist/relations/relation.types.js.map +1 -1
- package/dist/repositories/legacy-juggler-bridge.d.ts +35 -8
- package/dist/repositories/legacy-juggler-bridge.js +36 -14
- package/dist/repositories/legacy-juggler-bridge.js.map +1 -1
- package/package.json +13 -13
- package/src/errors/index.ts +1 -0
- package/src/errors/invalid-polymorphism.error.ts +28 -0
- package/src/model.ts +19 -0
- package/src/relations/belongs-to/belongs-to.accessor.ts +35 -6
- package/src/relations/belongs-to/belongs-to.helpers.ts +36 -9
- package/src/relations/belongs-to/belongs-to.inclusion-resolver.ts +108 -17
- package/src/relations/belongs-to/belongs-to.repository.ts +77 -17
- package/src/relations/has-many/has-many-through.helpers.ts +27 -1
- package/src/relations/has-many/has-many-through.inclusion-resolver.ts +117 -26
- package/src/relations/has-many/has-many-through.repository-factory.ts +21 -3
- package/src/relations/has-many/has-many-through.repository.ts +343 -76
- package/src/relations/has-one/has-one.helpers.ts +40 -13
- package/src/relations/has-one/has-one.inclusion-resolver.ts +109 -15
- package/src/relations/has-one/has-one.repository-factory.ts +34 -6
- package/src/relations/has-one/has-one.repository.ts +188 -35
- package/src/relations/index.ts +2 -0
- package/src/relations/references-many/index.ts +9 -0
- package/src/relations/references-many/references-many.accessor.ts +76 -0
- package/src/relations/references-many/references-many.decorator.ts +100 -0
- package/src/relations/references-many/references-many.helpers.ts +82 -0
- package/src/relations/references-many/references-many.inclusion-resolver.ts +80 -0
- package/src/relations/references-many/references-many.repository.ts +55 -0
- package/src/relations/relation.decorator.ts +0 -12
- package/src/relations/relation.filter.solver.ts +56 -0
- package/src/relations/relation.helpers.ts +16 -1
- package/src/relations/relation.types.ts +51 -0
- package/src/repositories/legacy-juggler-bridge.ts +78 -14
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
// License text available at https://opensource.org/licenses/MIT
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.DefaultHasManyThroughRepository = void 0;
|
|
8
|
+
const lodash_1 = require("lodash");
|
|
8
9
|
const __1 = require("../..");
|
|
9
10
|
/**
|
|
10
11
|
* a class for CRUD operations for hasManyThrough relation.
|
|
@@ -14,7 +15,7 @@ const __1 = require("../..");
|
|
|
14
15
|
* released.
|
|
15
16
|
*/
|
|
16
17
|
class DefaultHasManyThroughRepository {
|
|
17
|
-
constructor(getTargetRepository, getThroughRepository, getTargetConstraintFromThroughModels, getTargetKeys, getThroughConstraintFromSource, getTargetIds, getThroughConstraintFromTarget) {
|
|
18
|
+
constructor(getTargetRepository, getThroughRepository, getTargetConstraintFromThroughModels, getTargetKeys, getThroughConstraintFromSource, getTargetIds, getThroughConstraintFromTarget, targetResolver, throughResolver) {
|
|
18
19
|
this.getTargetRepository = getTargetRepository;
|
|
19
20
|
this.getThroughRepository = getThroughRepository;
|
|
20
21
|
this.getTargetConstraintFromThroughModels = getTargetConstraintFromThroughModels;
|
|
@@ -22,57 +23,232 @@ class DefaultHasManyThroughRepository {
|
|
|
22
23
|
this.getThroughConstraintFromSource = getThroughConstraintFromSource;
|
|
23
24
|
this.getTargetIds = getTargetIds;
|
|
24
25
|
this.getThroughConstraintFromTarget = getThroughConstraintFromTarget;
|
|
26
|
+
this.targetResolver = targetResolver;
|
|
27
|
+
this.throughResolver = throughResolver;
|
|
28
|
+
if (typeof getTargetRepository === 'function') {
|
|
29
|
+
this.getTargetRepositoryDict = {
|
|
30
|
+
[targetResolver().name]: getTargetRepository,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
this.getTargetRepositoryDict = getTargetRepository;
|
|
35
|
+
}
|
|
25
36
|
}
|
|
26
37
|
async create(targetModelData, options) {
|
|
27
|
-
|
|
38
|
+
let targetPolymorphicTypeName = options === null || options === void 0 ? void 0 : options.polymorphicType;
|
|
39
|
+
if (targetPolymorphicTypeName) {
|
|
40
|
+
if (!this.getTargetRepositoryDict[targetPolymorphicTypeName]) {
|
|
41
|
+
throw new __1.InvalidPolymorphismError(targetPolymorphicTypeName);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
if (Object.keys(this.getTargetRepositoryDict).length > 1) {
|
|
46
|
+
console.warn('It is highly recommended to specify the polymorphicTypes param when using polymorphic types.');
|
|
47
|
+
}
|
|
48
|
+
targetPolymorphicTypeName = this.targetResolver().name;
|
|
49
|
+
if (!this.getTargetRepositoryDict[targetPolymorphicTypeName]) {
|
|
50
|
+
throw new __1.InvalidPolymorphismError(targetPolymorphicTypeName);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const targetRepository = await this.getTargetRepositoryDict[targetPolymorphicTypeName]();
|
|
28
54
|
const targetInstance = await targetRepository.create(targetModelData, options);
|
|
29
55
|
await this.link(targetInstance.getId(), options);
|
|
30
56
|
return targetInstance;
|
|
31
57
|
}
|
|
32
58
|
async find(filter, options) {
|
|
33
|
-
|
|
34
|
-
const
|
|
59
|
+
var _a;
|
|
60
|
+
const targetDiscriminatorOnThrough = (_a = options === null || options === void 0 ? void 0 : options.throughOptions) === null || _a === void 0 ? void 0 : _a.discriminator;
|
|
61
|
+
let targetPolymorphicTypes = options === null || options === void 0 ? void 0 : options.polymorphicType;
|
|
62
|
+
let allKeys;
|
|
63
|
+
if (Object.keys(this.getTargetRepositoryDict).length <= 1) {
|
|
64
|
+
allKeys = Object.keys(this.getTargetRepositoryDict);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
if (!targetDiscriminatorOnThrough) {
|
|
68
|
+
console.warn('It is highly recommended to specify the targetDiscriminatorOnThrough param when using polymorphic types.');
|
|
69
|
+
}
|
|
70
|
+
if (!targetPolymorphicTypes || targetPolymorphicTypes.length === 0) {
|
|
71
|
+
console.warn('It is highly recommended to specify the polymorphicTypes param when using polymorphic types.');
|
|
72
|
+
allKeys = Object.keys(this.getTargetRepositoryDict);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
if (typeof targetPolymorphicTypes === 'string') {
|
|
76
|
+
targetPolymorphicTypes = [targetPolymorphicTypes];
|
|
77
|
+
}
|
|
78
|
+
allKeys = [];
|
|
79
|
+
new Set(targetPolymorphicTypes).forEach(element => {
|
|
80
|
+
if (Object.keys(this.getTargetRepositoryDict).includes(element)) {
|
|
81
|
+
allKeys.push(element);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
35
86
|
const sourceConstraint = this.getThroughConstraintFromSource();
|
|
36
|
-
const
|
|
37
|
-
const targetConstraint = this.getTargetConstraintFromThroughModels(throughInstances);
|
|
38
|
-
return targetRepository.find((0, __1.constrainFilter)(filter, targetConstraint), options);
|
|
39
|
-
}
|
|
40
|
-
async delete(where, options) {
|
|
41
|
-
const targetRepository = await this.getTargetRepository();
|
|
87
|
+
const throughCategorized = {};
|
|
42
88
|
const throughRepository = await this.getThroughRepository();
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
// TODO(Agnes): this performance can be improved by only fetching related data
|
|
48
|
-
// TODO: add target ids to the `where` constraint
|
|
49
|
-
const targets = await targetRepository.find({ where });
|
|
50
|
-
const targetIds = this.getTargetIds(targets);
|
|
51
|
-
if (targetIds.length > 0) {
|
|
52
|
-
const targetConstraint = this.getThroughConstraintFromTarget(targetIds);
|
|
53
|
-
const constraints = { ...targetConstraint, ...sourceConstraint };
|
|
54
|
-
await throughRepository.deleteAll((0, __1.constrainDataObject)({}, constraints), options === null || options === void 0 ? void 0 : options.throughOptions);
|
|
89
|
+
(await throughRepository.find((0, __1.constrainFilter)(undefined, sourceConstraint), options === null || options === void 0 ? void 0 : options.throughOptions)).forEach(element => {
|
|
90
|
+
let concreteTargetType;
|
|
91
|
+
if (!targetDiscriminatorOnThrough) {
|
|
92
|
+
concreteTargetType = this.targetResolver().name;
|
|
55
93
|
}
|
|
94
|
+
else {
|
|
95
|
+
concreteTargetType = String(element[targetDiscriminatorOnThrough]);
|
|
96
|
+
}
|
|
97
|
+
if (!allKeys.includes(concreteTargetType)) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
if (!this.getTargetRepositoryDict[concreteTargetType]) {
|
|
101
|
+
throw new __1.InvalidPolymorphismError(concreteTargetType, targetDiscriminatorOnThrough);
|
|
102
|
+
}
|
|
103
|
+
if (!throughCategorized[concreteTargetType]) {
|
|
104
|
+
throughCategorized[concreteTargetType] = [];
|
|
105
|
+
}
|
|
106
|
+
throughCategorized[concreteTargetType].push(element);
|
|
107
|
+
});
|
|
108
|
+
let allTargets = [];
|
|
109
|
+
for (const key of Object.keys(throughCategorized)) {
|
|
110
|
+
const targetRepository = await this.getTargetRepositoryDict[key]();
|
|
111
|
+
const targetConstraint = this.getTargetConstraintFromThroughModels(throughCategorized[key]);
|
|
112
|
+
allTargets = allTargets.concat(await targetRepository.find((0, __1.constrainFilter)(filter, targetConstraint), Object.assign((0, lodash_1.cloneDeep)(options !== null && options !== void 0 ? options : {}), { polymorphicType: key })));
|
|
113
|
+
}
|
|
114
|
+
return allTargets;
|
|
115
|
+
}
|
|
116
|
+
async delete(where, options) {
|
|
117
|
+
var _a, _b, _c;
|
|
118
|
+
const targetDiscriminatorOnThrough = (_a = options === null || options === void 0 ? void 0 : options.throughOptions) === null || _a === void 0 ? void 0 : _a.discriminator;
|
|
119
|
+
let targetPolymorphicTypes = options === null || options === void 0 ? void 0 : options.polymorphicType;
|
|
120
|
+
let allKeys;
|
|
121
|
+
if (Object.keys(this.getTargetRepositoryDict).length <= 1) {
|
|
122
|
+
allKeys = Object.keys(this.getTargetRepositoryDict);
|
|
56
123
|
}
|
|
57
124
|
else {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
125
|
+
if (!targetDiscriminatorOnThrough) {
|
|
126
|
+
console.warn('It is highly recommended to specify the targetDiscriminatorOnThrough param when using polymorphic types.');
|
|
127
|
+
}
|
|
128
|
+
if (!targetPolymorphicTypes || targetPolymorphicTypes.length === 0) {
|
|
129
|
+
console.warn('It is highly recommended to specify the polymorphicTypes param when using polymorphic types.');
|
|
130
|
+
allKeys = Object.keys(this.getTargetRepositoryDict);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
if (typeof targetPolymorphicTypes === 'string') {
|
|
134
|
+
targetPolymorphicTypes = [targetPolymorphicTypes];
|
|
135
|
+
}
|
|
136
|
+
allKeys = [];
|
|
137
|
+
new Set(targetPolymorphicTypes).forEach(element => {
|
|
138
|
+
if (Object.keys(this.getTargetRepositoryDict).includes(element)) {
|
|
139
|
+
allKeys.push(element);
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
const sourceConstraint = this.getThroughConstraintFromSource();
|
|
145
|
+
let totalCount = 0;
|
|
146
|
+
const throughCategorized = {};
|
|
147
|
+
const throughRepository = await this.getThroughRepository();
|
|
148
|
+
(await throughRepository.find((0, __1.constrainFilter)(undefined, sourceConstraint), options === null || options === void 0 ? void 0 : options.throughOptions)).forEach(element => {
|
|
149
|
+
let concreteTargetType;
|
|
150
|
+
if (!targetDiscriminatorOnThrough) {
|
|
151
|
+
concreteTargetType = this.targetResolver().name;
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
concreteTargetType = String(element[targetDiscriminatorOnThrough]);
|
|
155
|
+
}
|
|
156
|
+
if (!allKeys.includes(concreteTargetType)) {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
if (!this.getTargetRepositoryDict[concreteTargetType]) {
|
|
160
|
+
throw new __1.InvalidPolymorphismError(concreteTargetType, targetDiscriminatorOnThrough);
|
|
161
|
+
}
|
|
162
|
+
if (!throughCategorized[concreteTargetType]) {
|
|
163
|
+
throughCategorized[concreteTargetType] = [];
|
|
164
|
+
}
|
|
165
|
+
throughCategorized[concreteTargetType].push(element);
|
|
166
|
+
});
|
|
167
|
+
for (const targetKey of Object.keys(throughCategorized)) {
|
|
168
|
+
const targetRepository = await this.getTargetRepositoryDict[targetKey]();
|
|
169
|
+
if (where) {
|
|
170
|
+
// only delete related through models
|
|
171
|
+
// TODO(Agnes): this performance can be improved by only fetching related data
|
|
172
|
+
// TODO: add target ids to the `where` constraint
|
|
173
|
+
const targets = await targetRepository.find({ where });
|
|
174
|
+
const targetIds = this.getTargetIds(targets);
|
|
175
|
+
if (targetIds.length > 0) {
|
|
176
|
+
const targetConstraint = this.getThroughConstraintFromTarget(targetIds);
|
|
177
|
+
const constraints = { ...targetConstraint, ...sourceConstraint };
|
|
178
|
+
await throughRepository.deleteAll((0, __1.constrainDataObject)({}, constraints), options === null || options === void 0 ? void 0 : options.throughOptions);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
// otherwise, delete through models that relate to the sourceId
|
|
183
|
+
const targetFkValues = this.getTargetKeys(throughCategorized[targetKey]);
|
|
184
|
+
// delete through instances that have the targets that are going to be deleted
|
|
185
|
+
const throughFkConstraint = this.getThroughConstraintFromTarget(targetFkValues);
|
|
186
|
+
await throughRepository.deleteAll((0, __1.constrainWhereOr)({}, [sourceConstraint, throughFkConstraint]));
|
|
187
|
+
}
|
|
188
|
+
// delete target(s)
|
|
189
|
+
const targetConstraint = this.getTargetConstraintFromThroughModels(throughCategorized[targetKey]);
|
|
190
|
+
totalCount +=
|
|
191
|
+
(_c = (_b = (await targetRepository.deleteAll((0, __1.constrainWhere)(where, targetConstraint), options))) === null || _b === void 0 ? void 0 : _b.count) !== null && _c !== void 0 ? _c : 0;
|
|
63
192
|
}
|
|
64
|
-
|
|
65
|
-
const targetConstraint = this.getTargetConstraintFromThroughModels(throughInstances);
|
|
66
|
-
return targetRepository.deleteAll((0, __1.constrainWhere)(where, targetConstraint), options);
|
|
193
|
+
return { count: totalCount };
|
|
67
194
|
}
|
|
68
195
|
// only allows patch target instances for now
|
|
69
196
|
async patch(dataObject, where, options) {
|
|
70
|
-
|
|
71
|
-
const
|
|
197
|
+
var _a, _b, _c;
|
|
198
|
+
const targetDiscriminatorOnThrough = (_a = options === null || options === void 0 ? void 0 : options.throughOptions) === null || _a === void 0 ? void 0 : _a.discriminator;
|
|
199
|
+
const isMultipleTypes = options === null || options === void 0 ? void 0 : options.isPolymorphic;
|
|
200
|
+
let allKeys;
|
|
201
|
+
if (!targetDiscriminatorOnThrough) {
|
|
202
|
+
if (Object.keys(this.getTargetRepositoryDict).length > 1) {
|
|
203
|
+
console.warn('It is highly recommended to specify the targetDiscriminatorOnThrough param when using polymorphic types.');
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
if (!isMultipleTypes) {
|
|
207
|
+
if (Object.keys(this.getTargetRepositoryDict).length > 1) {
|
|
208
|
+
console.warn('It is highly recommended to specify the isMultipleTypes param and pass in a dictionary of dataobjects when using polymorphic types.');
|
|
209
|
+
}
|
|
210
|
+
allKeys = Object.keys(this.getTargetRepositoryDict);
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
allKeys = [];
|
|
214
|
+
new Set(Object.keys(dataObject)).forEach(element => {
|
|
215
|
+
if (Object.keys(this.getTargetRepositoryDict).includes(element)) {
|
|
216
|
+
allKeys.push(element);
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
}
|
|
72
220
|
const sourceConstraint = this.getThroughConstraintFromSource();
|
|
73
|
-
const
|
|
74
|
-
const
|
|
75
|
-
|
|
221
|
+
const throughCategorized = {};
|
|
222
|
+
const throughRepository = await this.getThroughRepository();
|
|
223
|
+
(await throughRepository.find((0, __1.constrainFilter)(undefined, sourceConstraint), options === null || options === void 0 ? void 0 : options.throughOptions)).forEach(element => {
|
|
224
|
+
let concreteTargetType;
|
|
225
|
+
if (!targetDiscriminatorOnThrough) {
|
|
226
|
+
concreteTargetType = this.targetResolver().name;
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
concreteTargetType = String(element[targetDiscriminatorOnThrough]);
|
|
230
|
+
}
|
|
231
|
+
if (!allKeys.includes(concreteTargetType)) {
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
if (!this.getTargetRepositoryDict[concreteTargetType]) {
|
|
235
|
+
throw new __1.InvalidPolymorphismError(concreteTargetType, targetDiscriminatorOnThrough);
|
|
236
|
+
}
|
|
237
|
+
if (!throughCategorized[concreteTargetType]) {
|
|
238
|
+
throughCategorized[concreteTargetType] = [];
|
|
239
|
+
}
|
|
240
|
+
throughCategorized[concreteTargetType].push(element);
|
|
241
|
+
});
|
|
242
|
+
let updatedCount = 0;
|
|
243
|
+
for (const key of Object.keys(throughCategorized)) {
|
|
244
|
+
const targetRepository = await this.getTargetRepositoryDict[key]();
|
|
245
|
+
const targetConstraint = this.getTargetConstraintFromThroughModels(throughCategorized[key]);
|
|
246
|
+
updatedCount +=
|
|
247
|
+
(_c = (_b = (await targetRepository.updateAll((0, __1.constrainDataObject)(isMultipleTypes
|
|
248
|
+
? dataObject[key]
|
|
249
|
+
: dataObject, targetConstraint), (0, __1.constrainWhere)(where, targetConstraint), options))) === null || _b === void 0 ? void 0 : _b.count) !== null && _c !== void 0 ? _c : 0;
|
|
250
|
+
}
|
|
251
|
+
return { count: updatedCount };
|
|
76
252
|
}
|
|
77
253
|
async link(targetId, options) {
|
|
78
254
|
var _a;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"has-many-through.repository.js","sourceRoot":"","sources":["../../../src/relations/has-many/has-many-through.repository.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"has-many-through.repository.js","sourceRoot":"","sources":["../../../src/relations/has-many/has-many-through.repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,9 @@ import { HasOneDefinition } from '../relation.types';
|
|
|
6
6
|
export declare type HasOneResolvedDefinition = HasOneDefinition & {
|
|
7
7
|
keyFrom: string;
|
|
8
8
|
keyTo: string;
|
|
9
|
+
polymorphic: false | {
|
|
10
|
+
discriminator: string;
|
|
11
|
+
};
|
|
9
12
|
};
|
|
10
13
|
/**
|
|
11
14
|
* Resolves given hasOne metadata if target is specified to be a resolver.
|
|
@@ -45,20 +45,46 @@ function resolveHasOneMetadata(relationMeta) {
|
|
|
45
45
|
else {
|
|
46
46
|
keyFrom = sourceModel.getIdProperties()[0];
|
|
47
47
|
}
|
|
48
|
+
let keyTo;
|
|
48
49
|
// Make sure that if it already keys to the foreign key property,
|
|
49
50
|
// the key exists in the target model
|
|
50
51
|
if (relationMeta.keyTo && targetModelProperties[relationMeta.keyTo]) {
|
|
51
52
|
// The explicit cast is needed because of a limitation of type inference
|
|
52
|
-
|
|
53
|
+
keyTo = relationMeta.keyTo;
|
|
53
54
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
55
|
+
else {
|
|
56
|
+
debug('Resolved model %s from given metadata: %o', targetModel.modelName, targetModel);
|
|
57
|
+
keyTo = (0, lodash_1.camelCase)(sourceModel.modelName + '_id');
|
|
58
|
+
const hasDefaultFkProperty = targetModelProperties[keyTo];
|
|
59
|
+
if (!hasDefaultFkProperty) {
|
|
60
|
+
const reason = `target model ${targetModel.name} is missing definition of foreign key ${keyTo}`;
|
|
61
|
+
throw new errors_1.InvalidRelationError(reason, relationMeta);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
let polymorphic;
|
|
65
|
+
if (relationMeta.polymorphic === undefined ||
|
|
66
|
+
relationMeta.polymorphic === false ||
|
|
67
|
+
!relationMeta.polymorphic) {
|
|
68
|
+
const polymorphicFalse = false;
|
|
69
|
+
polymorphic = polymorphicFalse;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
if (relationMeta.polymorphic === true) {
|
|
73
|
+
const polymorphicObject = {
|
|
74
|
+
discriminator: (0, lodash_1.camelCase)(relationMeta.target().name + '_type'),
|
|
75
|
+
};
|
|
76
|
+
polymorphic = polymorphicObject;
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
const polymorphicObject = relationMeta.polymorphic;
|
|
80
|
+
polymorphic = polymorphicObject;
|
|
81
|
+
}
|
|
60
82
|
}
|
|
61
|
-
return Object.assign(relationMeta, {
|
|
83
|
+
return Object.assign(relationMeta, {
|
|
84
|
+
keyFrom: keyFrom,
|
|
85
|
+
keyTo: keyTo,
|
|
86
|
+
polymorphic: polymorphic,
|
|
87
|
+
});
|
|
62
88
|
}
|
|
63
89
|
exports.resolveHasOneMetadata = resolveHasOneMetadata;
|
|
64
90
|
//# sourceMappingURL=has-one.helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"has-one.helpers.js","sourceRoot":"","sources":["../../../src/relations/has-one/has-one.helpers.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,0DAAiC;AACjC,mCAAiC;AACjC,yCAAkD;AAClD,uDAAmD;AACnD,sDAAiE;AAEjE,MAAM,KAAK,GAAG,IAAA,eAAY,EAAC,+CAA+C,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"has-one.helpers.js","sourceRoot":"","sources":["../../../src/relations/has-one/has-one.helpers.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,0DAAiC;AACjC,mCAAiC;AACjC,yCAAkD;AAClD,uDAAmD;AACnD,sDAAiE;AAEjE,MAAM,KAAK,GAAG,IAAA,eAAY,EAAC,+CAA+C,CAAC,CAAC;AAY5E;;;;;;GAMG;AACH,SAAgB,qBAAqB,CACnC,YAA8B;;IAE9B,IAAK,YAAY,CAAC,IAAqB,KAAK,6BAAY,CAAC,MAAM,EAAE;QAC/D,MAAM,MAAM,GAAG,8BAA8B,CAAC;QAC9C,MAAM,IAAI,6BAAoB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;KACtD;IAED,IAAI,CAAC,IAAA,8BAAc,EAAC,YAAY,CAAC,MAAM,CAAC,EAAE;QACxC,MAAM,MAAM,GAAG,gCAAgC,CAAC;QAChD,MAAM,IAAI,6BAAoB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;KACtD;IAED,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;IAC1C,MAAM,qBAAqB,GAAG,MAAA,WAAW,CAAC,UAAU,0CAAE,UAAU,CAAC;IAEjE,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC;IACxC,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE;QAC1C,MAAM,MAAM,GAAG,8BAA8B,CAAC;QAC9C,MAAM,IAAI,6BAAoB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;KACtD;IAED,kCAAkC;IAClC,IAAI,OAAO,CAAC;IACZ,IACE,YAAY,CAAC,OAAO;QACpB,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,EAC/D;QACA,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;KAChC;SAAM;QACL,OAAO,GAAG,WAAW,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC;KAC5C;IAED,IAAI,KAAK,CAAC;IACV,iEAAiE;IACjE,qCAAqC;IACrC,IAAI,YAAY,CAAC,KAAK,IAAI,qBAAqB,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;QACnE,wEAAwE;QACxE,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC;KAC5B;SAAM;QACL,KAAK,CACH,2CAA2C,EAC3C,WAAW,CAAC,SAAS,EACrB,WAAW,CACZ,CAAC;QACF,KAAK,GAAG,IAAA,kBAAS,EAAC,WAAW,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC;QACjD,MAAM,oBAAoB,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAE1D,IAAI,CAAC,oBAAoB,EAAE;YACzB,MAAM,MAAM,GAAG,gBAAgB,WAAW,CAAC,IAAI,yCAAyC,KAAK,EAAE,CAAC;YAChG,MAAM,IAAI,6BAAoB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;SACtD;KACF;IAED,IAAI,WAA4C,CAAC;IACjD,IACE,YAAY,CAAC,WAAW,KAAK,SAAS;QACtC,YAAY,CAAC,WAAW,KAAK,KAAK;QAClC,CAAC,YAAY,CAAC,WAAW,EACzB;QACA,MAAM,gBAAgB,GAAG,KAAc,CAAC;QACxC,WAAW,GAAG,gBAAgB,CAAC;KAChC;SAAM;QACL,IAAI,YAAY,CAAC,WAAW,KAAK,IAAI,EAAE;YACrC,MAAM,iBAAiB,GAA4B;gBACjD,aAAa,EAAE,IAAA,kBAAS,EAAC,YAAY,CAAC,MAAM,EAAE,CAAC,IAAI,GAAG,OAAO,CAAC;aAC/D,CAAC;YACF,WAAW,GAAG,iBAAiB,CAAC;SACjC;aAAM;YACL,MAAM,iBAAiB,GACrB,YAAY,CAAC,WAAsC,CAAC;YACtD,WAAW,GAAG,iBAAiB,CAAC;SACjC;KACF;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE;QACjC,OAAO,EAAE,OAAO;QAChB,KAAK,EAAE,KAAK;QACZ,WAAW,EAAE,WAAW;KACzB,CAAC,CAAC;AACL,CAAC;AAhFD,sDAgFC"}
|
|
@@ -8,7 +8,10 @@ import { Getter, HasOneDefinition, InclusionResolver } from '../relation.types';
|
|
|
8
8
|
*
|
|
9
9
|
* Notice: scope field for inclusion is not supported yet.
|
|
10
10
|
*
|
|
11
|
-
* @param meta
|
|
12
|
-
* @param
|
|
11
|
+
* @param meta - resolved HasOneMetadata
|
|
12
|
+
* @param getTargetRepoDict - dictionary of target model type - target repository
|
|
13
|
+
* i.e where related instances for different types are
|
|
13
14
|
*/
|
|
14
|
-
export declare function createHasOneInclusionResolver<Target extends Entity, TargetID, TargetRelations extends object>(meta: HasOneDefinition,
|
|
15
|
+
export declare function createHasOneInclusionResolver<Target extends Entity, TargetID, TargetRelations extends object>(meta: HasOneDefinition, getTargetRepoDict: {
|
|
16
|
+
[repoType: string]: Getter<EntityCrudRepository<Target, TargetID, TargetRelations>>;
|
|
17
|
+
}): InclusionResolver<Entity, Target>;
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
// License text available at https://opensource.org/licenses/MIT
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.createHasOneInclusionResolver = void 0;
|
|
8
|
+
const lodash_1 = require("lodash");
|
|
9
|
+
const __1 = require("../../");
|
|
8
10
|
const relation_helpers_1 = require("../relation.helpers");
|
|
9
11
|
const has_one_helpers_1 = require("./has-one.helpers");
|
|
10
12
|
/**
|
|
@@ -14,21 +16,94 @@ const has_one_helpers_1 = require("./has-one.helpers");
|
|
|
14
16
|
*
|
|
15
17
|
* Notice: scope field for inclusion is not supported yet.
|
|
16
18
|
*
|
|
17
|
-
* @param meta
|
|
18
|
-
* @param
|
|
19
|
+
* @param meta - resolved HasOneMetadata
|
|
20
|
+
* @param getTargetRepoDict - dictionary of target model type - target repository
|
|
21
|
+
* i.e where related instances for different types are
|
|
19
22
|
*/
|
|
20
|
-
function createHasOneInclusionResolver(meta,
|
|
23
|
+
function createHasOneInclusionResolver(meta, getTargetRepoDict) {
|
|
21
24
|
const relationMeta = (0, has_one_helpers_1.resolveHasOneMetadata)(meta);
|
|
22
25
|
return async function fetchHasOneModel(entities, inclusion, options) {
|
|
23
26
|
if (!entities.length)
|
|
24
27
|
return [];
|
|
28
|
+
// Source ids are grouped by their target polymorphic types
|
|
29
|
+
// Each type search for target instances and then merge together in a merge-sort-like manner
|
|
25
30
|
const sourceKey = relationMeta.keyFrom;
|
|
26
|
-
const sourceIds = entities.map(e => e[sourceKey]);
|
|
27
31
|
const targetKey = relationMeta.keyTo;
|
|
32
|
+
const targetDiscriminator = relationMeta.polymorphic
|
|
33
|
+
? relationMeta.polymorphic.discriminator
|
|
34
|
+
: undefined;
|
|
28
35
|
const scope = typeof inclusion === 'string' ? {} : inclusion.scope;
|
|
29
|
-
|
|
30
|
-
const
|
|
31
|
-
|
|
36
|
+
// sourceIds in {targetType -> sourceId}
|
|
37
|
+
const sourceIdsCategorized = {};
|
|
38
|
+
if (targetDiscriminator) {
|
|
39
|
+
entities.forEach((value, index, allEntites) => {
|
|
40
|
+
const concreteType = String(value[targetDiscriminator]);
|
|
41
|
+
if (!getTargetRepoDict[concreteType]) {
|
|
42
|
+
throw new __1.InvalidPolymorphismError(concreteType, targetDiscriminator);
|
|
43
|
+
}
|
|
44
|
+
if (!sourceIdsCategorized[concreteType]) {
|
|
45
|
+
sourceIdsCategorized[concreteType] = [];
|
|
46
|
+
}
|
|
47
|
+
sourceIdsCategorized[concreteType].push(value[sourceKey]);
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
const concreteType = relationMeta.target().name;
|
|
52
|
+
if (!getTargetRepoDict[concreteType]) {
|
|
53
|
+
throw new __1.InvalidPolymorphismError(concreteType);
|
|
54
|
+
}
|
|
55
|
+
entities.forEach((value, index, allEntites) => {
|
|
56
|
+
if (!sourceIdsCategorized[concreteType]) {
|
|
57
|
+
sourceIdsCategorized[concreteType] = [];
|
|
58
|
+
}
|
|
59
|
+
sourceIdsCategorized[concreteType].push(value[sourceKey]);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
// Ensure targetKey is included otherwise flatten function cannot work
|
|
63
|
+
const changedTargetKeyField = (0, __1.includeFieldIfNot)(scope === null || scope === void 0 ? void 0 : scope.fields, targetKey);
|
|
64
|
+
let needToRemoveTargetKeyFieldLater = false;
|
|
65
|
+
if (changedTargetKeyField !== false) {
|
|
66
|
+
scope.fields = changedTargetKeyField;
|
|
67
|
+
needToRemoveTargetKeyFieldLater = true;
|
|
68
|
+
}
|
|
69
|
+
// Each sourceIds array with same target type extract target instances
|
|
70
|
+
const targetCategorized = {};
|
|
71
|
+
for (const k of Object.keys(sourceIdsCategorized)) {
|
|
72
|
+
const targetRepo = await getTargetRepoDict[k]();
|
|
73
|
+
const targetsFound = await (0, relation_helpers_1.findByForeignKeys)(targetRepo, targetKey, sourceIdsCategorized[k], scope, Object.assign((0, lodash_1.cloneDeep)(options !== null && options !== void 0 ? options : {}), { polymorphicType: k }));
|
|
74
|
+
targetCategorized[k] = (0, relation_helpers_1.flattenTargetsOfOneToOneRelation)(sourceIdsCategorized[k], targetsFound, targetKey);
|
|
75
|
+
// Remove targetKey if should be excluded but included above
|
|
76
|
+
if (needToRemoveTargetKeyFieldLater) {
|
|
77
|
+
targetCategorized[k] = targetCategorized[k].map(e => {
|
|
78
|
+
if (e) {
|
|
79
|
+
delete e[targetKey];
|
|
80
|
+
}
|
|
81
|
+
return e;
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Merge
|
|
86
|
+
// Why the order is correct:
|
|
87
|
+
// e.g. target model 1 = a, target model 2 = b
|
|
88
|
+
// all entities: [S(a-1), S(a-2), S(b-3), S(a-4), S(b-5)]
|
|
89
|
+
// a-result: [a-1, a-2, a-4]
|
|
90
|
+
// b-result: [b-3, b-4]
|
|
91
|
+
// merged:
|
|
92
|
+
// entities[1]->a => targets: [a-1 from a-result.shift()]
|
|
93
|
+
// entities[2]->a => targets: [a-1, a-2 from a-result.shift()]
|
|
94
|
+
// entities[3]->b => targets: [a-1, a-2, b-3 from b-result.shift()]
|
|
95
|
+
// entities[4]->a => targets: [a-1, a-2, b-3, a-4 from a-result.shift()]
|
|
96
|
+
// entities[5]->b => targets: [a-1, a-2, b-3, a-4, b-5 from b-result.shift()]
|
|
97
|
+
if (targetDiscriminator) {
|
|
98
|
+
const allTargets = [];
|
|
99
|
+
entities.forEach((value, index, allEntites) => {
|
|
100
|
+
allTargets.push(targetCategorized[String(value[targetDiscriminator])].shift());
|
|
101
|
+
});
|
|
102
|
+
return allTargets;
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
return targetCategorized[relationMeta.target().name];
|
|
106
|
+
}
|
|
32
107
|
};
|
|
33
108
|
}
|
|
34
109
|
exports.createHasOneInclusionResolver = createHasOneInclusionResolver;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"has-one.inclusion-resolver.js","sourceRoot":"","sources":["../../../src/relations/has-one/has-one.inclusion-resolver.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;
|
|
1
|
+
{"version":3,"file":"has-one.inclusion-resolver.js","sourceRoot":"","sources":["../../../src/relations/has-one/has-one.inclusion-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,11 +18,17 @@ export interface HasOneRepositoryFactory<Target extends Entity, ForeignKeyType>
|
|
|
18
18
|
* via a HasOne relation, then, the relational repository returned by the
|
|
19
19
|
* factory function would be constrained by a Customer model instance's id(s).
|
|
20
20
|
*
|
|
21
|
+
* If the target model is polymorphic, i.e. stored within different repositories,
|
|
22
|
+
* supply the targetRepositoryGetter with a dictionary in the form of {[typeName: string]: repositoryGetter}
|
|
23
|
+
*
|
|
21
24
|
* @param relationMetadata - The relation metadata used to describe the
|
|
22
25
|
* relationship and determine how to apply the constraint.
|
|
23
|
-
* @param targetRepositoryGetter - The repository
|
|
24
|
-
* relation attached to a datasource.
|
|
26
|
+
* @param targetRepositoryGetter - The repository or a dictionary of classname - repository,
|
|
27
|
+
* which represents the target model of a relation attached to a datasource.
|
|
28
|
+
* For the dictionary, the key is the class name of the concrete class the the polymorphic model.
|
|
25
29
|
* @returns The factory function which accepts a foreign key value to constrain
|
|
26
30
|
* the given target repository
|
|
27
31
|
*/
|
|
28
|
-
export declare function createHasOneRepositoryFactory<Target extends Entity, TargetID, ForeignKeyType>(relationMetadata: HasOneDefinition, targetRepositoryGetter: Getter<EntityCrudRepository<Target, TargetID>>
|
|
32
|
+
export declare function createHasOneRepositoryFactory<Target extends Entity, TargetID, ForeignKeyType>(relationMetadata: HasOneDefinition, targetRepositoryGetter: Getter<EntityCrudRepository<Target, TargetID>> | {
|
|
33
|
+
[repoType: string]: Getter<EntityCrudRepository<Target, TargetID>>;
|
|
34
|
+
}): HasOneRepositoryFactory<Target, ForeignKeyType>;
|
|
@@ -17,20 +17,30 @@ const debug = (0, debug_1.default)('loopback:repository:relations:has-one:reposi
|
|
|
17
17
|
* via a HasOne relation, then, the relational repository returned by the
|
|
18
18
|
* factory function would be constrained by a Customer model instance's id(s).
|
|
19
19
|
*
|
|
20
|
+
* If the target model is polymorphic, i.e. stored within different repositories,
|
|
21
|
+
* supply the targetRepositoryGetter with a dictionary in the form of {[typeName: string]: repositoryGetter}
|
|
22
|
+
*
|
|
20
23
|
* @param relationMetadata - The relation metadata used to describe the
|
|
21
24
|
* relationship and determine how to apply the constraint.
|
|
22
|
-
* @param targetRepositoryGetter - The repository
|
|
23
|
-
* relation attached to a datasource.
|
|
25
|
+
* @param targetRepositoryGetter - The repository or a dictionary of classname - repository,
|
|
26
|
+
* which represents the target model of a relation attached to a datasource.
|
|
27
|
+
* For the dictionary, the key is the class name of the concrete class the the polymorphic model.
|
|
24
28
|
* @returns The factory function which accepts a foreign key value to constrain
|
|
25
29
|
* the given target repository
|
|
26
30
|
*/
|
|
27
31
|
function createHasOneRepositoryFactory(relationMetadata, targetRepositoryGetter) {
|
|
28
32
|
const meta = (0, has_one_helpers_1.resolveHasOneMetadata)(relationMetadata);
|
|
33
|
+
// resolve the repositoryGetter into a dictionary
|
|
34
|
+
if (typeof targetRepositoryGetter === 'function') {
|
|
35
|
+
targetRepositoryGetter = {
|
|
36
|
+
[meta.target().name]: targetRepositoryGetter,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
29
39
|
debug('Resolved HasOne relation metadata: %o', meta);
|
|
30
40
|
const result = function (fkValue) {
|
|
31
41
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
32
42
|
const constraint = { [meta.keyTo]: fkValue };
|
|
33
|
-
return new has_one_repository_1.DefaultHasOneRepository(targetRepositoryGetter, constraint);
|
|
43
|
+
return new has_one_repository_1.DefaultHasOneRepository(targetRepositoryGetter, constraint, relationMetadata.target);
|
|
34
44
|
};
|
|
35
45
|
result.inclusionResolver = (0, has_one_inclusion_resolver_1.createHasOneInclusionResolver)(meta, targetRepositoryGetter);
|
|
36
46
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"has-one.repository-factory.js","sourceRoot":"","sources":["../../../src/relations/has-one/has-one.repository-factory.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,0DAAiC;AAKjC,uDAAwD;AACxD,6EAA2E;AAC3E,6DAA+E;AAE/E,MAAM,KAAK,GAAG,IAAA,eAAY,EACxB,0DAA0D,CAC3D,CAAC;AAgBF
|
|
1
|
+
{"version":3,"file":"has-one.repository-factory.js","sourceRoot":"","sources":["../../../src/relations/has-one/has-one.repository-factory.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,0DAAiC;AAKjC,uDAAwD;AACxD,6EAA2E;AAC3E,6DAA+E;AAE/E,MAAM,KAAK,GAAG,IAAA,eAAY,EACxB,0DAA0D,CAC3D,CAAC;AAgBF;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,6BAA6B,CAK3C,gBAAkC,EAClC,sBAIK;IAEL,MAAM,IAAI,GAAG,IAAA,uCAAqB,EAAC,gBAAgB,CAAC,CAAC;IACrD,iDAAiD;IACjD,IAAI,OAAO,sBAAsB,KAAK,UAAU,EAAE;QAChD,sBAAsB,GAAG;YACvB,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,sBAErB;SACF,CAAC;KACH;IACD,KAAK,CAAC,uCAAuC,EAAE,IAAI,CAAC,CAAC;IACrD,MAAM,MAAM,GAAoD,UAC9D,OAAuB;QAEvB,8DAA8D;QAC9D,MAAM,UAAU,GAAQ,EAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,EAAC,CAAC;QAChD,OAAO,IAAI,4CAAuB,CAKhC,sBAEC,EACD,UAAgC,EAChC,gBAAgB,CAAC,MAAM,CACxB,CAAC;IACJ,CAAC,CAAC;IACF,MAAM,CAAC,iBAAiB,GAAG,IAAA,0DAA6B,EAKtD,IAAI,EACJ,sBAEC,CACF,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAlDD,sEAkDC"}
|