@loopback/repository 4.1.0 → 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 (149) hide show
  1. package/dist/connectors/index.js +3 -3
  2. package/dist/connectors/index.js.map +1 -1
  3. package/dist/decorators/index.js +3 -3
  4. package/dist/decorators/index.js.map +1 -1
  5. package/dist/decorators/repository.decorator.js +1 -1
  6. package/dist/decorators/repository.decorator.js.map +1 -1
  7. package/dist/define-model-class.js +1 -1
  8. package/dist/define-model-class.js.map +1 -1
  9. package/dist/define-repository-class.js +1 -1
  10. package/dist/define-repository-class.js.map +1 -1
  11. package/dist/errors/index.d.ts +1 -0
  12. package/dist/errors/index.js +3 -2
  13. package/dist/errors/index.js.map +1 -1
  14. package/dist/errors/invalid-polymorphism.error.d.ts +5 -0
  15. package/dist/errors/invalid-polymorphism.error.js +22 -0
  16. package/dist/errors/invalid-polymorphism.error.js.map +1 -0
  17. package/dist/index.js +16 -16
  18. package/dist/index.js.map +1 -1
  19. package/dist/mixins/index.js +1 -1
  20. package/dist/mixins/index.js.map +1 -1
  21. package/dist/mixins/repository.mixin.js +1 -1
  22. package/dist/mixins/repository.mixin.js.map +1 -1
  23. package/dist/model.d.ts +7 -1
  24. package/dist/model.js +14 -0
  25. package/dist/model.js.map +1 -1
  26. package/dist/relations/belongs-to/belongs-to.accessor.d.ts +6 -2
  27. package/dist/relations/belongs-to/belongs-to.accessor.js +19 -6
  28. package/dist/relations/belongs-to/belongs-to.accessor.js.map +1 -1
  29. package/dist/relations/belongs-to/belongs-to.helpers.d.ts +3 -0
  30. package/dist/relations/belongs-to/belongs-to.helpers.js +33 -9
  31. package/dist/relations/belongs-to/belongs-to.helpers.js.map +1 -1
  32. package/dist/relations/belongs-to/belongs-to.inclusion-resolver.d.ts +5 -2
  33. package/dist/relations/belongs-to/belongs-to.inclusion-resolver.js +81 -8
  34. package/dist/relations/belongs-to/belongs-to.inclusion-resolver.js.map +1 -1
  35. package/dist/relations/belongs-to/belongs-to.repository.d.ts +28 -5
  36. package/dist/relations/belongs-to/belongs-to.repository.js +49 -10
  37. package/dist/relations/belongs-to/belongs-to.repository.js.map +1 -1
  38. package/dist/relations/belongs-to/index.js +4 -4
  39. package/dist/relations/belongs-to/index.js.map +1 -1
  40. package/dist/relations/has-many/has-many-through.helpers.d.ts +3 -0
  41. package/dist/relations/has-many/has-many-through.helpers.js +26 -2
  42. package/dist/relations/has-many/has-many-through.helpers.js.map +1 -1
  43. package/dist/relations/has-many/has-many-through.inclusion-resolver.d.ts +3 -1
  44. package/dist/relations/has-many/has-many-through.inclusion-resolver.js +93 -22
  45. package/dist/relations/has-many/has-many-through.inclusion-resolver.js.map +1 -1
  46. package/dist/relations/has-many/has-many-through.repository-factory.d.ts +3 -1
  47. package/dist/relations/has-many/has-many-through.repository-factory.js +7 -1
  48. package/dist/relations/has-many/has-many-through.repository-factory.js.map +1 -1
  49. package/dist/relations/has-many/has-many-through.repository.d.ts +66 -11
  50. package/dist/relations/has-many/has-many-through.repository.js +211 -35
  51. package/dist/relations/has-many/has-many-through.repository.js.map +1 -1
  52. package/dist/relations/has-many/has-many.helpers.js +1 -1
  53. package/dist/relations/has-many/has-many.helpers.js.map +1 -1
  54. package/dist/relations/has-many/has-many.inclusion-resolver.js +1 -1
  55. package/dist/relations/has-many/has-many.inclusion-resolver.js.map +1 -1
  56. package/dist/relations/has-many/has-many.repository-factory.js +1 -1
  57. package/dist/relations/has-many/has-many.repository-factory.js.map +1 -1
  58. package/dist/relations/has-many/index.js +6 -6
  59. package/dist/relations/has-many/index.js.map +1 -1
  60. package/dist/relations/has-one/has-one.helpers.d.ts +3 -0
  61. package/dist/relations/has-one/has-one.helpers.js +35 -9
  62. package/dist/relations/has-one/has-one.helpers.js.map +1 -1
  63. package/dist/relations/has-one/has-one.inclusion-resolver.d.ts +6 -3
  64. package/dist/relations/has-one/has-one.inclusion-resolver.js +82 -7
  65. package/dist/relations/has-one/has-one.inclusion-resolver.js.map +1 -1
  66. package/dist/relations/has-one/has-one.repository-factory.d.ts +9 -3
  67. package/dist/relations/has-one/has-one.repository-factory.js +14 -4
  68. package/dist/relations/has-one/has-one.repository-factory.js.map +1 -1
  69. package/dist/relations/has-one/has-one.repository.d.ts +58 -11
  70. package/dist/relations/has-one/has-one.repository.js +118 -15
  71. package/dist/relations/has-one/has-one.repository.js.map +1 -1
  72. package/dist/relations/has-one/index.js +3 -3
  73. package/dist/relations/has-one/index.js.map +1 -1
  74. package/dist/relations/index.d.ts +2 -0
  75. package/dist/relations/index.js +8 -6
  76. package/dist/relations/index.js.map +1 -1
  77. package/dist/relations/references-many/index.d.ts +4 -0
  78. package/dist/relations/references-many/index.js +12 -0
  79. package/dist/relations/references-many/index.js.map +1 -0
  80. package/dist/relations/references-many/references-many.accessor.d.ts +17 -0
  81. package/dist/relations/references-many/references-many.accessor.js +40 -0
  82. package/dist/relations/references-many/references-many.accessor.js.map +1 -0
  83. package/dist/relations/references-many/references-many.decorator.d.ts +11 -0
  84. package/dist/relations/references-many/references-many.decorator.js +73 -0
  85. package/dist/relations/references-many/references-many.decorator.js.map +1 -0
  86. package/dist/relations/references-many/references-many.helpers.d.ts +17 -0
  87. package/dist/relations/references-many/references-many.helpers.js +63 -0
  88. package/dist/relations/references-many/references-many.helpers.js.map +1 -0
  89. package/dist/relations/references-many/references-many.inclusion-resolver.d.ts +14 -0
  90. package/dist/relations/references-many/references-many.inclusion-resolver.js +42 -0
  91. package/dist/relations/references-many/references-many.inclusion-resolver.js.map +1 -0
  92. package/dist/relations/references-many/references-many.repository.d.ts +28 -0
  93. package/dist/relations/references-many/references-many.repository.js +33 -0
  94. package/dist/relations/references-many/references-many.repository.js.map +1 -0
  95. package/dist/relations/relation.decorator.d.ts +0 -6
  96. package/dist/relations/relation.decorator.js +1 -13
  97. package/dist/relations/relation.decorator.js.map +1 -1
  98. package/dist/relations/relation.filter.solver.d.ts +2 -0
  99. package/dist/relations/relation.filter.solver.js +57 -0
  100. package/dist/relations/relation.filter.solver.js.map +1 -0
  101. package/dist/relations/relation.helpers.js +19 -4
  102. package/dist/relations/relation.helpers.js.map +1 -1
  103. package/dist/relations/relation.types.d.ts +52 -1
  104. package/dist/relations/relation.types.js.map +1 -1
  105. package/dist/repositories/index.js +5 -5
  106. package/dist/repositories/index.js.map +1 -1
  107. package/dist/repositories/legacy-juggler-bridge.d.ts +35 -8
  108. package/dist/repositories/legacy-juggler-bridge.js +38 -16
  109. package/dist/repositories/legacy-juggler-bridge.js.map +1 -1
  110. package/dist/types/array.js +1 -1
  111. package/dist/types/array.js.map +1 -1
  112. package/dist/types/buffer.js +1 -1
  113. package/dist/types/buffer.js.map +1 -1
  114. package/dist/types/date.js +1 -1
  115. package/dist/types/date.js.map +1 -1
  116. package/dist/types/number.js +1 -1
  117. package/dist/types/number.js.map +1 -1
  118. package/dist/types/object.js +1 -1
  119. package/dist/types/object.js.map +1 -1
  120. package/dist/types/union.js +1 -1
  121. package/dist/types/union.js.map +1 -1
  122. package/package.json +16 -16
  123. package/src/errors/index.ts +1 -0
  124. package/src/errors/invalid-polymorphism.error.ts +28 -0
  125. package/src/model.ts +19 -0
  126. package/src/relations/belongs-to/belongs-to.accessor.ts +35 -6
  127. package/src/relations/belongs-to/belongs-to.helpers.ts +36 -9
  128. package/src/relations/belongs-to/belongs-to.inclusion-resolver.ts +108 -17
  129. package/src/relations/belongs-to/belongs-to.repository.ts +77 -17
  130. package/src/relations/has-many/has-many-through.helpers.ts +27 -1
  131. package/src/relations/has-many/has-many-through.inclusion-resolver.ts +117 -26
  132. package/src/relations/has-many/has-many-through.repository-factory.ts +21 -3
  133. package/src/relations/has-many/has-many-through.repository.ts +343 -76
  134. package/src/relations/has-one/has-one.helpers.ts +40 -13
  135. package/src/relations/has-one/has-one.inclusion-resolver.ts +109 -15
  136. package/src/relations/has-one/has-one.repository-factory.ts +34 -6
  137. package/src/relations/has-one/has-one.repository.ts +188 -35
  138. package/src/relations/index.ts +2 -0
  139. package/src/relations/references-many/index.ts +9 -0
  140. package/src/relations/references-many/references-many.accessor.ts +76 -0
  141. package/src/relations/references-many/references-many.decorator.ts +100 -0
  142. package/src/relations/references-many/references-many.helpers.ts +82 -0
  143. package/src/relations/references-many/references-many.inclusion-resolver.ts +80 -0
  144. package/src/relations/references-many/references-many.repository.ts +55 -0
  145. package/src/relations/relation.decorator.ts +0 -12
  146. package/src/relations/relation.filter.solver.ts +56 -0
  147. package/src/relations/relation.helpers.ts +16 -1
  148. package/src/relations/relation.types.ts +51 -0
  149. package/src/repositories/legacy-juggler-bridge.ts +78 -14
@@ -1,4 +1,4 @@
1
- import { Count, DataObject, Entity, EntityCrudRepository, Filter, Getter, Options, Where } from '../..';
1
+ import { Count, DataObject, Entity, EntityCrudRepository, Filter, Getter, Options, TypeResolver, Where } from '../..';
2
2
  /**
3
3
  * CRUD operations for a target repository of a HasManyThrough relation
4
4
  *
@@ -10,39 +10,69 @@ export interface HasManyThroughRepository<Target extends Entity, TargetID, Throu
10
10
  * Create a target model instance
11
11
  * @param targetModelData - The target model data
12
12
  * @param options - Options for the operation
13
+ * options.polymorphicType a string or a string array of polymorphic type names
14
+ * specify of which concrete model the created instance should be
13
15
  * @returns A promise which resolves to the newly created target model instance
14
16
  */
15
17
  create(targetModelData: DataObject<Target>, options?: Options & {
16
18
  throughData?: DataObject<Through>;
17
19
  throughOptions?: Options;
20
+ } & {
21
+ polymorphicType?: string;
18
22
  }): Promise<Target>;
19
23
  /**
20
24
  * Find target model instance(s)
21
25
  * @param filter - A filter object for where, order, limit, etc.
22
26
  * @param options - Options for the operation
27
+ * options.throughOptions.discriminator - target discriminator field on through
28
+ * options.polymorphicType a string or a string array of polymorphic type names
29
+ * to specify which repositories should are expected to be searched
30
+ * It is highly recommended to contain this param especially for
31
+ * datasources using deplicated ids across tables
23
32
  * @returns A promise which resolves with the found target instance(s)
24
33
  */
25
34
  find(filter?: Filter<Target>, options?: Options & {
26
- throughOptions?: Options;
35
+ throughOptions?: Options & {
36
+ discriminator?: string;
37
+ };
38
+ } & {
39
+ polymorphicType?: string | string[];
27
40
  }): Promise<Target[]>;
28
41
  /**
29
42
  * Delete multiple target model instances
30
43
  * @param where - Instances within the where scope are deleted
31
44
  * @param options
45
+ * options.throughOptions.discriminator - target discriminator field on through
46
+ * options.polymorphicType a string or a string array of polymorphic type names
47
+ * to specify which repositories should are expected to be searched
48
+ * It is highly recommended to contain this param especially for
49
+ * datasources using deplicated ids across tables
32
50
  * @returns A promise which resolves the deleted target model instances
33
51
  */
34
52
  delete(where?: Where<Target>, options?: Options & {
35
- throughOptions?: Options;
53
+ throughOptions?: Options & {
54
+ discriminator?: string;
55
+ };
56
+ } & {
57
+ polymorphicType?: string | string[];
36
58
  }): Promise<Count>;
37
59
  /**
38
60
  * Patch multiple target model instances
39
61
  * @param dataObject - The fields and their new values to patch
40
62
  * @param where - Instances within the where scope are patched
41
63
  * @param options
64
+ * options.throughOptions.discriminator - target discriminator field on through
65
+ * options.isPolymorphic - whether dataObject is a dictionary
42
66
  * @returns A promise which resolves the patched target model instances
43
67
  */
44
- patch(dataObject: DataObject<Target>, where?: Where<Target>, options?: Options & {
45
- throughOptions?: Options;
68
+ patch(dataObject: DataObject<Target> | {
69
+ [polymorphicType: string]: DataObject<Target>;
70
+ }, where?: Where<Target>, options?: Options & {
71
+ throughOptions?: Options & {
72
+ discriminator?: string;
73
+ };
74
+ } & {
75
+ isPolymorphic?: boolean;
46
76
  }): Promise<Count>;
47
77
  /**
48
78
  * Creates a new many-to-many association to an existing target model instance
@@ -80,26 +110,51 @@ export interface HasManyThroughRepository<Target extends Entity, TargetID, Throu
80
110
  * released.
81
111
  */
82
112
  export declare class DefaultHasManyThroughRepository<TargetEntity extends Entity, TargetID, TargetRepository extends EntityCrudRepository<TargetEntity, TargetID>, ThroughEntity extends Entity, ThroughID, ThroughRepository extends EntityCrudRepository<ThroughEntity, ThroughID>> implements HasManyThroughRepository<TargetEntity, TargetID, ThroughEntity> {
83
- getTargetRepository: Getter<TargetRepository>;
113
+ getTargetRepository: Getter<TargetRepository> | {
114
+ [repoType: string]: Getter<TargetRepository>;
115
+ };
84
116
  getThroughRepository: Getter<ThroughRepository>;
85
117
  getTargetConstraintFromThroughModels: (throughInstances: ThroughEntity[]) => DataObject<TargetEntity>;
86
118
  getTargetKeys: (throughInstances: ThroughEntity[]) => TargetID[];
87
119
  getThroughConstraintFromSource: () => DataObject<ThroughEntity>;
88
120
  getTargetIds: (targetInstances: TargetEntity[]) => TargetID[];
89
121
  getThroughConstraintFromTarget: (targetID: TargetID[]) => DataObject<ThroughEntity>;
90
- constructor(getTargetRepository: Getter<TargetRepository>, getThroughRepository: Getter<ThroughRepository>, getTargetConstraintFromThroughModels: (throughInstances: ThroughEntity[]) => DataObject<TargetEntity>, getTargetKeys: (throughInstances: ThroughEntity[]) => TargetID[], getThroughConstraintFromSource: () => DataObject<ThroughEntity>, getTargetIds: (targetInstances: TargetEntity[]) => TargetID[], getThroughConstraintFromTarget: (targetID: TargetID[]) => DataObject<ThroughEntity>);
122
+ targetResolver: TypeResolver<Entity, typeof Entity>;
123
+ throughResolver: TypeResolver<Entity, typeof Entity>;
124
+ constructor(getTargetRepository: Getter<TargetRepository> | {
125
+ [repoType: string]: Getter<TargetRepository>;
126
+ }, getThroughRepository: Getter<ThroughRepository>, getTargetConstraintFromThroughModels: (throughInstances: ThroughEntity[]) => DataObject<TargetEntity>, getTargetKeys: (throughInstances: ThroughEntity[]) => TargetID[], getThroughConstraintFromSource: () => DataObject<ThroughEntity>, getTargetIds: (targetInstances: TargetEntity[]) => TargetID[], getThroughConstraintFromTarget: (targetID: TargetID[]) => DataObject<ThroughEntity>, targetResolver: TypeResolver<Entity, typeof Entity>, throughResolver: TypeResolver<Entity, typeof Entity>);
127
+ getTargetRepositoryDict: {
128
+ [repoType: string]: Getter<TargetRepository>;
129
+ };
91
130
  create(targetModelData: DataObject<TargetEntity>, options?: Options & {
92
131
  throughData?: DataObject<ThroughEntity>;
93
132
  throughOptions?: Options;
133
+ } & {
134
+ polymorphicType?: string;
94
135
  }): Promise<TargetEntity>;
95
136
  find(filter?: Filter<TargetEntity>, options?: Options & {
96
- throughOptions?: Options;
137
+ throughOptions?: Options & {
138
+ discriminator?: string;
139
+ };
140
+ } & {
141
+ polymorphicType?: string | string[];
97
142
  }): Promise<TargetEntity[]>;
98
143
  delete(where?: Where<TargetEntity>, options?: Options & {
99
- throughOptions?: Options;
144
+ throughOptions?: Options & {
145
+ discriminator?: string;
146
+ };
147
+ } & {
148
+ polymorphicType?: string | string[];
100
149
  }): Promise<Count>;
101
- patch(dataObject: DataObject<TargetEntity>, where?: Where<TargetEntity>, options?: Options & {
102
- throughOptions?: Options;
150
+ patch(dataObject: DataObject<TargetEntity> | {
151
+ [polymorphicType: string]: DataObject<TargetEntity>;
152
+ }, where?: Where<TargetEntity>, options?: Options & {
153
+ throughOptions?: Options & {
154
+ discriminator?: string;
155
+ };
156
+ } & {
157
+ isPolymorphic?: boolean;
103
158
  }): Promise<Count>;
104
159
  link(targetId: TargetID, options?: Options & {
105
160
  throughData?: DataObject<ThroughEntity>;
@@ -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,7 +6,7 @@
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.resolveHasManyMetaHelper = exports.resolveHasManyMetadata = void 0;
8
8
  const tslib_1 = require("tslib");
9
- const debug_1 = (0, tslib_1.__importDefault)(require("debug"));
9
+ const debug_1 = tslib_1.__importDefault(require("debug"));
10
10
  const lodash_1 = require("lodash");
11
11
  const errors_1 = require("../../errors");
12
12
  const type_resolver_1 = require("../../type-resolver");
@@ -1 +1 @@
1
- {"version":3,"file":"has-many.helpers.js","sourceRoot":"","sources":["../../../src/relations/has-many/has-many.helpers.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,+DAAiC;AACjC,mCAAiC;AACjC,yCAAkD;AAClD,uDAAmD;AACnD,sDAAkE;AAElE,MAAM,KAAK,GAAG,IAAA,eAAY,EAAC,gDAAgD,CAAC,CAAC;AAW7E;;;;;;GAMG;AACH,SAAgB,sBAAsB,CACpC,YAA+B;;IAE/B,2DAA2D;IAC3D,YAAY,GAAG,wBAAwB,CAAC,YAAY,CAAC,CAAC;IAEtD,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;IAExC,IAAI,YAAY,CAAC,KAAK,IAAI,qBAAqB,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;QACnE,wEAAwE;QACxE,OAAO,YAAyC,CAAC;KAClD;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;QACjC,KAAK,EAAE,aAAa;KACQ,CAAC,CAAC;AAClC,CAAC;AAhCD,wDAgCC;AAED;;;;;;;GAOG;AACH,SAAgB,wBAAwB,CACtC,YAA+B;IAE/B,IAAK,YAAY,CAAC,IAAqB,KAAK,6BAAY,CAAC,OAAO,EAAE;QAChE,MAAM,MAAM,GAAG,+BAA+B,CAAC;QAC/C,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,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;IACD,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;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,EAAC,OAAO,EAAC,CAAsB,CAAC;AACrE,CAAC;AA5BD,4DA4BC"}
1
+ {"version":3,"file":"has-many.helpers.js","sourceRoot":"","sources":["../../../src/relations/has-many/has-many.helpers.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,0DAAiC;AACjC,mCAAiC;AACjC,yCAAkD;AAClD,uDAAmD;AACnD,sDAAkE;AAElE,MAAM,KAAK,GAAG,IAAA,eAAY,EAAC,gDAAgD,CAAC,CAAC;AAW7E;;;;;;GAMG;AACH,SAAgB,sBAAsB,CACpC,YAA+B;;IAE/B,2DAA2D;IAC3D,YAAY,GAAG,wBAAwB,CAAC,YAAY,CAAC,CAAC;IAEtD,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;IAExC,IAAI,YAAY,CAAC,KAAK,IAAI,qBAAqB,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;QACnE,wEAAwE;QACxE,OAAO,YAAyC,CAAC;KAClD;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;QACjC,KAAK,EAAE,aAAa;KACQ,CAAC,CAAC;AAClC,CAAC;AAhCD,wDAgCC;AAED;;;;;;;GAOG;AACH,SAAgB,wBAAwB,CACtC,YAA+B;IAE/B,IAAK,YAAY,CAAC,IAAqB,KAAK,6BAAY,CAAC,OAAO,EAAE;QAChE,MAAM,MAAM,GAAG,+BAA+B,CAAC;QAC/C,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,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;IACD,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;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,EAAC,OAAO,EAAC,CAAsB,CAAC;AACrE,CAAC;AA5BD,4DA4BC"}
@@ -6,7 +6,7 @@
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.createHasManyInclusionResolver = void 0;
8
8
  const tslib_1 = require("tslib");
9
- const debug_1 = (0, tslib_1.__importDefault)(require("debug"));
9
+ const debug_1 = tslib_1.__importDefault(require("debug"));
10
10
  const relation_helpers_1 = require("../relation.helpers");
11
11
  const has_many_helpers_1 = require("./has-many.helpers");
12
12
  const debug = (0, debug_1.default)('loopback:repository:relations:has-many:inclusion-resolver');
@@ -1 +1 @@
1
- {"version":3,"file":"has-many.inclusion-resolver.js","sourceRoot":"","sources":["../../../src/relations/has-many/has-many.inclusion-resolver.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;;AAGhE,+DAAiC;AAIjC,0DAI6B;AAE7B,yDAA0D;AAE1D,MAAM,KAAK,GAAG,IAAA,eAAY,EACxB,2DAA2D,CAC5D,CAAC;AAEF;;;;;;;;;GASG;AACH,SAAgB,8BAA8B,CAK5C,IAAuB,EACvB,aAEC;IAED,MAAM,YAAY,GAAG,IAAA,yCAAsB,EAAC,IAAI,CAAC,CAAC;IAElD,OAAO,KAAK,UAAU,kBAAkB,CACtC,QAAkB,EAClB,SAA0B,EAC1B,OAAiB;QAEjB,IAAI,CAAC,QAAQ,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAEhC,KAAK,CAAC,sCAAsC,EAAE,QAAQ,CAAC,CAAC;QACxD,KAAK,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC;QAE1C,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,KAAK,CAAC,aAAa,EAAE,EAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAC,CAAC,CAAC;QACxD,KAAK,CACH,gBAAgB,EAChB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAC7B,CAAC;QAEF,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,KAAK,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;QAEtC,MAAM,MAAM,GAAG,IAAA,oDAAiC,EAC9C,SAAS,EACT,YAAY,EACZ,SAAS,CACV,CAAC;QAEF,KAAK,CAAC,2BAA2B,EAAE,MAAM,CAAC,CAAC;QAC3C,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC;AAvDD,wEAuDC"}
1
+ {"version":3,"file":"has-many.inclusion-resolver.js","sourceRoot":"","sources":["../../../src/relations/has-many/has-many.inclusion-resolver.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;;AAGhE,0DAAiC;AAIjC,0DAI6B;AAE7B,yDAA0D;AAE1D,MAAM,KAAK,GAAG,IAAA,eAAY,EACxB,2DAA2D,CAC5D,CAAC;AAEF;;;;;;;;;GASG;AACH,SAAgB,8BAA8B,CAK5C,IAAuB,EACvB,aAEC;IAED,MAAM,YAAY,GAAG,IAAA,yCAAsB,EAAC,IAAI,CAAC,CAAC;IAElD,OAAO,KAAK,UAAU,kBAAkB,CACtC,QAAkB,EAClB,SAA0B,EAC1B,OAAiB;QAEjB,IAAI,CAAC,QAAQ,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAEhC,KAAK,CAAC,sCAAsC,EAAE,QAAQ,CAAC,CAAC;QACxD,KAAK,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC;QAE1C,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,KAAK,CAAC,aAAa,EAAE,EAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAC,CAAC,CAAC;QACxD,KAAK,CACH,gBAAgB,EAChB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAC7B,CAAC;QAEF,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,KAAK,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;QAEtC,MAAM,MAAM,GAAG,IAAA,oDAAiC,EAC9C,SAAS,EACT,YAAY,EACZ,SAAS,CACV,CAAC;QAEF,KAAK,CAAC,2BAA2B,EAAE,MAAM,CAAC,CAAC;QAC3C,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC;AAvDD,wEAuDC"}
@@ -6,7 +6,7 @@
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.createHasManyRepositoryFactory = void 0;
8
8
  const tslib_1 = require("tslib");
9
- const debug_1 = (0, tslib_1.__importDefault)(require("debug"));
9
+ const debug_1 = tslib_1.__importDefault(require("debug"));
10
10
  const has_many_helpers_1 = require("./has-many.helpers");
11
11
  const has_many_inclusion_resolver_1 = require("./has-many.inclusion-resolver");
12
12
  const has_many_repository_1 = require("./has-many.repository");
@@ -1 +1 @@
1
- {"version":3,"file":"has-many.repository-factory.js","sourceRoot":"","sources":["../../../src/relations/has-many/has-many.repository-factory.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,+DAAiC;AAKjC,yDAA0D;AAC1D,+EAA6E;AAC7E,+DAG+B;AAE/B,MAAM,KAAK,GAAG,IAAA,eAAY,EACxB,2DAA2D,CAC5D,CAAC;AAiBF;;;;;;;;;;;;GAYG;AACH,SAAgB,8BAA8B,CAK5C,gBAAmC,EACnC,sBAAsE;IAEtE,MAAM,IAAI,GAAG,IAAA,yCAAsB,EAAC,gBAAgB,CAAC,CAAC;IACtD,KAAK,CAAC,wCAAwC,EAAE,IAAI,CAAC,CAAC;IACtD,MAAM,MAAM,GAAqD,UAC/D,OAAuB;QAEvB,8DAA8D;QAC9D,MAAM,UAAU,GAAQ,EAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,EAAC,CAAC;QAChD,OAAO,IAAI,8CAAwB,CAIjC,sBAAsB,EAAE,UAAgC,CAAC,CAAC;IAC9D,CAAC,CAAC;IACF,MAAM,CAAC,iBAAiB,GAAG,IAAA,4DAA8B,EACvD,IAAI,EACJ,sBAAsB,CACvB,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AA1BD,wEA0BC"}
1
+ {"version":3,"file":"has-many.repository-factory.js","sourceRoot":"","sources":["../../../src/relations/has-many/has-many.repository-factory.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,0DAAiC;AAKjC,yDAA0D;AAC1D,+EAA6E;AAC7E,+DAG+B;AAE/B,MAAM,KAAK,GAAG,IAAA,eAAY,EACxB,2DAA2D,CAC5D,CAAC;AAiBF;;;;;;;;;;;;GAYG;AACH,SAAgB,8BAA8B,CAK5C,gBAAmC,EACnC,sBAAsE;IAEtE,MAAM,IAAI,GAAG,IAAA,yCAAsB,EAAC,gBAAgB,CAAC,CAAC;IACtD,KAAK,CAAC,wCAAwC,EAAE,IAAI,CAAC,CAAC;IACtD,MAAM,MAAM,GAAqD,UAC/D,OAAuB;QAEvB,8DAA8D;QAC9D,MAAM,UAAU,GAAQ,EAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,EAAC,CAAC;QAChD,OAAO,IAAI,8CAAwB,CAIjC,sBAAsB,EAAE,UAAgC,CAAC,CAAC;IAC9D,CAAC,CAAC;IACF,MAAM,CAAC,iBAAiB,GAAG,IAAA,4DAA8B,EACvD,IAAI,EACJ,sBAAsB,CACvB,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AA1BD,wEA0BC"}
@@ -5,10 +5,10 @@
5
5
  // License text available at https://opensource.org/licenses/MIT
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  const tslib_1 = require("tslib");
8
- (0, tslib_1.__exportStar)(require("./has-many.repository-factory"), exports);
9
- (0, tslib_1.__exportStar)(require("./has-many-through.repository-factory"), exports);
10
- (0, tslib_1.__exportStar)(require("./has-many-through.repository"), exports);
11
- (0, tslib_1.__exportStar)(require("./has-many.decorator"), exports);
12
- (0, tslib_1.__exportStar)(require("./has-many.inclusion-resolver"), exports);
13
- (0, tslib_1.__exportStar)(require("./has-many.repository"), exports);
8
+ tslib_1.__exportStar(require("./has-many.repository-factory"), exports);
9
+ tslib_1.__exportStar(require("./has-many-through.repository-factory"), exports);
10
+ tslib_1.__exportStar(require("./has-many-through.repository"), exports);
11
+ tslib_1.__exportStar(require("./has-many.decorator"), exports);
12
+ tslib_1.__exportStar(require("./has-many.inclusion-resolver"), exports);
13
+ tslib_1.__exportStar(require("./has-many.repository"), exports);
14
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/relations/has-many/index.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;AAEhE,6EAA8C;AAC9C,qFAAsD;AACtD,6EAA8C;AAC9C,oEAAqC;AACrC,6EAA8C;AAC9C,qEAAsC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/relations/has-many/index.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;AAEhE,wEAA8C;AAC9C,gFAAsD;AACtD,wEAA8C;AAC9C,+DAAqC;AACrC,wEAA8C;AAC9C,gEAAsC"}
@@ -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.
@@ -6,7 +6,7 @@
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.resolveHasOneMetadata = void 0;
8
8
  const tslib_1 = require("tslib");
9
- const debug_1 = (0, tslib_1.__importDefault)(require("debug"));
9
+ const debug_1 = tslib_1.__importDefault(require("debug"));
10
10
  const lodash_1 = require("lodash");
11
11
  const errors_1 = require("../../errors");
12
12
  const type_resolver_1 = require("../../type-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