@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.
Files changed (107) hide show
  1. package/dist/errors/index.d.ts +1 -0
  2. package/dist/errors/index.js +1 -0
  3. package/dist/errors/index.js.map +1 -1
  4. package/dist/errors/invalid-polymorphism.error.d.ts +5 -0
  5. package/dist/errors/invalid-polymorphism.error.js +22 -0
  6. package/dist/errors/invalid-polymorphism.error.js.map +1 -0
  7. package/dist/model.d.ts +7 -1
  8. package/dist/model.js +14 -0
  9. package/dist/model.js.map +1 -1
  10. package/dist/relations/belongs-to/belongs-to.accessor.d.ts +6 -2
  11. package/dist/relations/belongs-to/belongs-to.accessor.js +18 -5
  12. package/dist/relations/belongs-to/belongs-to.accessor.js.map +1 -1
  13. package/dist/relations/belongs-to/belongs-to.helpers.d.ts +3 -0
  14. package/dist/relations/belongs-to/belongs-to.helpers.js +32 -8
  15. package/dist/relations/belongs-to/belongs-to.helpers.js.map +1 -1
  16. package/dist/relations/belongs-to/belongs-to.inclusion-resolver.d.ts +5 -2
  17. package/dist/relations/belongs-to/belongs-to.inclusion-resolver.js +81 -8
  18. package/dist/relations/belongs-to/belongs-to.inclusion-resolver.js.map +1 -1
  19. package/dist/relations/belongs-to/belongs-to.repository.d.ts +28 -5
  20. package/dist/relations/belongs-to/belongs-to.repository.js +49 -10
  21. package/dist/relations/belongs-to/belongs-to.repository.js.map +1 -1
  22. package/dist/relations/has-many/has-many-through.helpers.d.ts +3 -0
  23. package/dist/relations/has-many/has-many-through.helpers.js +25 -1
  24. package/dist/relations/has-many/has-many-through.helpers.js.map +1 -1
  25. package/dist/relations/has-many/has-many-through.inclusion-resolver.d.ts +3 -1
  26. package/dist/relations/has-many/has-many-through.inclusion-resolver.js +92 -21
  27. package/dist/relations/has-many/has-many-through.inclusion-resolver.js.map +1 -1
  28. package/dist/relations/has-many/has-many-through.repository-factory.d.ts +3 -1
  29. package/dist/relations/has-many/has-many-through.repository-factory.js +7 -1
  30. package/dist/relations/has-many/has-many-through.repository-factory.js.map +1 -1
  31. package/dist/relations/has-many/has-many-through.repository.d.ts +66 -11
  32. package/dist/relations/has-many/has-many-through.repository.js +211 -35
  33. package/dist/relations/has-many/has-many-through.repository.js.map +1 -1
  34. package/dist/relations/has-one/has-one.helpers.d.ts +3 -0
  35. package/dist/relations/has-one/has-one.helpers.js +34 -8
  36. package/dist/relations/has-one/has-one.helpers.js.map +1 -1
  37. package/dist/relations/has-one/has-one.inclusion-resolver.d.ts +6 -3
  38. package/dist/relations/has-one/has-one.inclusion-resolver.js +82 -7
  39. package/dist/relations/has-one/has-one.inclusion-resolver.js.map +1 -1
  40. package/dist/relations/has-one/has-one.repository-factory.d.ts +9 -3
  41. package/dist/relations/has-one/has-one.repository-factory.js +13 -3
  42. package/dist/relations/has-one/has-one.repository-factory.js.map +1 -1
  43. package/dist/relations/has-one/has-one.repository.d.ts +58 -11
  44. package/dist/relations/has-one/has-one.repository.js +118 -15
  45. package/dist/relations/has-one/has-one.repository.js.map +1 -1
  46. package/dist/relations/index.d.ts +2 -0
  47. package/dist/relations/index.js +2 -0
  48. package/dist/relations/index.js.map +1 -1
  49. package/dist/relations/references-many/index.d.ts +4 -0
  50. package/dist/relations/references-many/index.js +12 -0
  51. package/dist/relations/references-many/index.js.map +1 -0
  52. package/dist/relations/references-many/references-many.accessor.d.ts +17 -0
  53. package/dist/relations/references-many/references-many.accessor.js +40 -0
  54. package/dist/relations/references-many/references-many.accessor.js.map +1 -0
  55. package/dist/relations/references-many/references-many.decorator.d.ts +11 -0
  56. package/dist/relations/references-many/references-many.decorator.js +73 -0
  57. package/dist/relations/references-many/references-many.decorator.js.map +1 -0
  58. package/dist/relations/references-many/references-many.helpers.d.ts +17 -0
  59. package/dist/relations/references-many/references-many.helpers.js +63 -0
  60. package/dist/relations/references-many/references-many.helpers.js.map +1 -0
  61. package/dist/relations/references-many/references-many.inclusion-resolver.d.ts +14 -0
  62. package/dist/relations/references-many/references-many.inclusion-resolver.js +42 -0
  63. package/dist/relations/references-many/references-many.inclusion-resolver.js.map +1 -0
  64. package/dist/relations/references-many/references-many.repository.d.ts +28 -0
  65. package/dist/relations/references-many/references-many.repository.js +33 -0
  66. package/dist/relations/references-many/references-many.repository.js.map +1 -0
  67. package/dist/relations/relation.decorator.d.ts +0 -6
  68. package/dist/relations/relation.decorator.js +1 -13
  69. package/dist/relations/relation.decorator.js.map +1 -1
  70. package/dist/relations/relation.filter.solver.d.ts +2 -0
  71. package/dist/relations/relation.filter.solver.js +57 -0
  72. package/dist/relations/relation.filter.solver.js.map +1 -0
  73. package/dist/relations/relation.helpers.js +16 -1
  74. package/dist/relations/relation.helpers.js.map +1 -1
  75. package/dist/relations/relation.types.d.ts +52 -1
  76. package/dist/relations/relation.types.js.map +1 -1
  77. package/dist/repositories/legacy-juggler-bridge.d.ts +35 -8
  78. package/dist/repositories/legacy-juggler-bridge.js +36 -14
  79. package/dist/repositories/legacy-juggler-bridge.js.map +1 -1
  80. package/package.json +13 -13
  81. package/src/errors/index.ts +1 -0
  82. package/src/errors/invalid-polymorphism.error.ts +28 -0
  83. package/src/model.ts +19 -0
  84. package/src/relations/belongs-to/belongs-to.accessor.ts +35 -6
  85. package/src/relations/belongs-to/belongs-to.helpers.ts +36 -9
  86. package/src/relations/belongs-to/belongs-to.inclusion-resolver.ts +108 -17
  87. package/src/relations/belongs-to/belongs-to.repository.ts +77 -17
  88. package/src/relations/has-many/has-many-through.helpers.ts +27 -1
  89. package/src/relations/has-many/has-many-through.inclusion-resolver.ts +117 -26
  90. package/src/relations/has-many/has-many-through.repository-factory.ts +21 -3
  91. package/src/relations/has-many/has-many-through.repository.ts +343 -76
  92. package/src/relations/has-one/has-one.helpers.ts +40 -13
  93. package/src/relations/has-one/has-one.inclusion-resolver.ts +109 -15
  94. package/src/relations/has-one/has-one.repository-factory.ts +34 -6
  95. package/src/relations/has-one/has-one.repository.ts +188 -35
  96. package/src/relations/index.ts +2 -0
  97. package/src/relations/references-many/index.ts +9 -0
  98. package/src/relations/references-many/references-many.accessor.ts +76 -0
  99. package/src/relations/references-many/references-many.decorator.ts +100 -0
  100. package/src/relations/references-many/references-many.helpers.ts +82 -0
  101. package/src/relations/references-many/references-many.inclusion-resolver.ts +80 -0
  102. package/src/relations/references-many/references-many.repository.ts +55 -0
  103. package/src/relations/relation.decorator.ts +0 -12
  104. package/src/relations/relation.filter.solver.ts +56 -0
  105. package/src/relations/relation.helpers.ts +16 -1
  106. package/src/relations/relation.types.ts +51 -0
  107. 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
- const targetRepository = await this.getTargetRepository();
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
- const targetRepository = await this.getTargetRepository();
34
- const throughRepository = await this.getThroughRepository();
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 throughInstances = await throughRepository.find((0, __1.constrainFilter)(undefined, sourceConstraint), options === null || options === void 0 ? void 0 : options.throughOptions);
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
- const sourceConstraint = this.getThroughConstraintFromSource();
44
- const throughInstances = await throughRepository.find((0, __1.constrainFilter)(undefined, sourceConstraint), options === null || options === void 0 ? void 0 : options.throughOptions);
45
- if (where) {
46
- // only delete related through models
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
- // otherwise, delete through models that relate to the sourceId
59
- const targetFkValues = this.getTargetKeys(throughInstances);
60
- // delete through instances that have the targets that are going to be deleted
61
- const throughFkConstraint = this.getThroughConstraintFromTarget(targetFkValues);
62
- await throughRepository.deleteAll((0, __1.constrainWhereOr)({}, [sourceConstraint, throughFkConstraint]));
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
- // delete target(s)
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
- const targetRepository = await this.getTargetRepository();
71
- const throughRepository = await this.getThroughRepository();
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 throughInstances = await throughRepository.find((0, __1.constrainFilter)(undefined, sourceConstraint), options === null || options === void 0 ? void 0 : options.throughOptions);
74
- const targetConstraint = this.getTargetConstraintFromThroughModels(throughInstances);
75
- return targetRepository.updateAll((0, __1.constrainDataObject)(dataObject, targetConstraint), (0, __1.constrainWhere)(where, targetConstraint), options);
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
- return Object.assign(relationMeta, { keyFrom });
53
+ keyTo = relationMeta.keyTo;
53
54
  }
54
- debug('Resolved model %s from given metadata: %o', targetModel.modelName, targetModel);
55
- const defaultFkName = (0, lodash_1.camelCase)(sourceModel.modelName + '_id');
56
- const hasDefaultFkProperty = targetModelProperties[defaultFkName];
57
- if (!hasDefaultFkProperty) {
58
- const reason = `target model ${targetModel.name} is missing definition of foreign key ${defaultFkName}`;
59
- throw new errors_1.InvalidRelationError(reason, relationMeta);
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, { keyFrom, keyTo: defaultFkName });
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;AAW5E;;;;;;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,iEAAiE;IACjE,qCAAqC;IACrC,IAAI,YAAY,CAAC,KAAK,IAAI,qBAAqB,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;QACnE,wEAAwE;QACxE,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,EAAC,OAAO,EAAC,CAA6B,CAAC;KAC3E;IAED,KAAK,CACH,2CAA2C,EAC3C,WAAW,CAAC,SAAS,EACrB,WAAW,CACZ,CAAC;IACF,MAAM,aAAa,GAAG,IAAA,kBAAS,EAAC,WAAW,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC;IAC/D,MAAM,oBAAoB,GAAG,qBAAqB,CAAC,aAAa,CAAC,CAAC;IAElE,IAAI,CAAC,oBAAoB,EAAE;QACzB,MAAM,MAAM,GAAG,gBAAgB,WAAW,CAAC,IAAI,yCAAyC,aAAa,EAAE,CAAC;QACxG,MAAM,IAAI,6BAAoB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;KACtD;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,EAAC,OAAO,EAAE,KAAK,EAAE,aAAa,EAAC,CAAC,CAAC;AACtE,CAAC;AAtDD,sDAsDC"}
1
+ {"version":3,"file":"has-one.helpers.js","sourceRoot":"","sources":["../../../src/relations/has-one/has-one.helpers.ts"],"names":[],"mappings":"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"}
@@ -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 getTargetRepo
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, getTargetRepo: Getter<EntityCrudRepository<Target, TargetID, TargetRelations>>): InclusionResolver<Entity, Target>;
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 getTargetRepo
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, getTargetRepo) {
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
- const targetRepo = await getTargetRepo();
30
- const targetsFound = await (0, relation_helpers_1.findByForeignKeys)(targetRepo, targetKey, sourceIds, scope, options);
31
- return (0, relation_helpers_1.flattenTargetsOfOneToOneRelation)(sourceIds, targetsFound, targetKey);
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;;;AAMhE,0DAI6B;AAE7B,uDAAwD;AAExD;;;;;;;;;GASG;AACH,SAAgB,6BAA6B,CAK3C,IAAsB,EACtB,aAEC;IAED,MAAM,YAAY,GAAG,IAAA,uCAAqB,EAAC,IAAI,CAAC,CAAC;IAEjD,OAAO,KAAK,UAAU,gBAAgB,CACpC,QAAkB,EAClB,SAA0B,EAC1B,OAAiB;QAEjB,IAAI,CAAC,QAAQ,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAEhC,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;QACvC,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAe,CAAC,SAAS,CAAC,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,YAAY,CAAC,KAA4B,CAAC;QAE5D,MAAM,KAAK,GACT,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAE,SAAS,CAAC,KAAwB,CAAC;QAE3E,MAAM,UAAU,GAAG,MAAM,aAAa,EAAE,CAAC;QACzC,MAAM,YAAY,GAAG,MAAM,IAAA,oCAAiB,EAC1C,UAAU,EACV,SAAS,EACT,SAAS,EACT,KAAK,EACL,OAAO,CACR,CAAC;QAEF,OAAO,IAAA,mDAAgC,EAAC,SAAS,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;IAC9E,CAAC,CAAC;AACJ,CAAC;AArCD,sEAqCC"}
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 which represents the target model of a
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>>): HasOneRepositoryFactory<Target, ForeignKeyType>;
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 which represents the target model of a
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;;;;;;;;;;;;GAYG;AACH,SAAgB,6BAA6B,CAK3C,gBAAkC,EAClC,sBAAsE;IAEtE,MAAM,IAAI,GAAG,IAAA,uCAAqB,EAAC,gBAAgB,CAAC,CAAC;IACrD,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,CAIhC,sBAAsB,EAAE,UAAgC,CAAC,CAAC;IAC9D,CAAC,CAAC;IACF,MAAM,CAAC,iBAAiB,GAAG,IAAA,0DAA6B,EACtD,IAAI,EACJ,sBAAsB,CACvB,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AA1BD,sEA0BC"}
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"}