@loopback/repository 4.1.2 → 5.0.2

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 (250) hide show
  1. package/LICENSE +1 -1
  2. package/dist/connectors/connector.js +1 -1
  3. package/dist/connectors/connector.js.map +1 -1
  4. package/dist/connectors/crud.connector.js +1 -1
  5. package/dist/connectors/crud.connector.js.map +1 -1
  6. package/dist/connectors/index.js +1 -1
  7. package/dist/connectors/index.js.map +1 -1
  8. package/dist/connectors/kv.connector.js +1 -1
  9. package/dist/connectors/kv.connector.js.map +1 -1
  10. package/dist/datasource.js +1 -1
  11. package/dist/datasource.js.map +1 -1
  12. package/dist/decorators/index.js +1 -1
  13. package/dist/decorators/index.js.map +1 -1
  14. package/dist/decorators/metadata.js +1 -1
  15. package/dist/decorators/metadata.js.map +1 -1
  16. package/dist/decorators/model.decorator.js +1 -1
  17. package/dist/decorators/model.decorator.js.map +1 -1
  18. package/dist/decorators/repository.decorator.js +1 -1
  19. package/dist/decorators/repository.decorator.js.map +1 -1
  20. package/dist/define-model-class.js +1 -1
  21. package/dist/define-model-class.js.map +1 -1
  22. package/dist/define-repository-class.js +1 -1
  23. package/dist/define-repository-class.js.map +1 -1
  24. package/dist/errors/entity-not-found.error.js +1 -1
  25. package/dist/errors/entity-not-found.error.js.map +1 -1
  26. package/dist/errors/index.d.ts +1 -0
  27. package/dist/errors/index.js +2 -1
  28. package/dist/errors/index.js.map +1 -1
  29. package/dist/errors/invalid-polymorphism.error.d.ts +5 -0
  30. package/dist/errors/invalid-polymorphism.error.js +22 -0
  31. package/dist/errors/invalid-polymorphism.error.js.map +1 -0
  32. package/dist/errors/invalid-relation.error.d.ts +1 -1
  33. package/dist/errors/invalid-relation.error.js +1 -1
  34. package/dist/errors/invalid-relation.error.js.map +1 -1
  35. package/dist/index.js +1 -1
  36. package/dist/index.js.map +1 -1
  37. package/dist/mixins/index.js +1 -1
  38. package/dist/mixins/index.js.map +1 -1
  39. package/dist/mixins/repository.mixin.d.ts +49 -50
  40. package/dist/mixins/repository.mixin.js +1 -1
  41. package/dist/mixins/repository.mixin.js.map +1 -1
  42. package/dist/model.d.ts +7 -1
  43. package/dist/model.js +15 -1
  44. package/dist/model.js.map +1 -1
  45. package/dist/relations/belongs-to/belongs-to.accessor.d.ts +6 -2
  46. package/dist/relations/belongs-to/belongs-to.accessor.js +19 -6
  47. package/dist/relations/belongs-to/belongs-to.accessor.js.map +1 -1
  48. package/dist/relations/belongs-to/belongs-to.decorator.js +1 -1
  49. package/dist/relations/belongs-to/belongs-to.decorator.js.map +1 -1
  50. package/dist/relations/belongs-to/belongs-to.helpers.d.ts +3 -0
  51. package/dist/relations/belongs-to/belongs-to.helpers.js +33 -9
  52. package/dist/relations/belongs-to/belongs-to.helpers.js.map +1 -1
  53. package/dist/relations/belongs-to/belongs-to.inclusion-resolver.d.ts +5 -2
  54. package/dist/relations/belongs-to/belongs-to.inclusion-resolver.js +82 -9
  55. package/dist/relations/belongs-to/belongs-to.inclusion-resolver.js.map +1 -1
  56. package/dist/relations/belongs-to/belongs-to.repository.d.ts +28 -5
  57. package/dist/relations/belongs-to/belongs-to.repository.js +50 -11
  58. package/dist/relations/belongs-to/belongs-to.repository.js.map +1 -1
  59. package/dist/relations/belongs-to/index.d.ts +2 -2
  60. package/dist/relations/belongs-to/index.js +3 -3
  61. package/dist/relations/belongs-to/index.js.map +1 -1
  62. package/dist/relations/has-many/has-many-through.helpers.d.ts +3 -0
  63. package/dist/relations/has-many/has-many-through.helpers.js +26 -2
  64. package/dist/relations/has-many/has-many-through.helpers.js.map +1 -1
  65. package/dist/relations/has-many/has-many-through.inclusion-resolver.d.ts +3 -1
  66. package/dist/relations/has-many/has-many-through.inclusion-resolver.js +93 -22
  67. package/dist/relations/has-many/has-many-through.inclusion-resolver.js.map +1 -1
  68. package/dist/relations/has-many/has-many-through.repository-factory.d.ts +3 -1
  69. package/dist/relations/has-many/has-many-through.repository-factory.js +8 -2
  70. package/dist/relations/has-many/has-many-through.repository-factory.js.map +1 -1
  71. package/dist/relations/has-many/has-many-through.repository.d.ts +66 -11
  72. package/dist/relations/has-many/has-many-through.repository.js +212 -36
  73. package/dist/relations/has-many/has-many-through.repository.js.map +1 -1
  74. package/dist/relations/has-many/has-many.decorator.js +1 -1
  75. package/dist/relations/has-many/has-many.decorator.js.map +1 -1
  76. package/dist/relations/has-many/has-many.helpers.js +1 -1
  77. package/dist/relations/has-many/has-many.helpers.js.map +1 -1
  78. package/dist/relations/has-many/has-many.inclusion-resolver.js +1 -1
  79. package/dist/relations/has-many/has-many.inclusion-resolver.js.map +1 -1
  80. package/dist/relations/has-many/has-many.repository-factory.js +1 -1
  81. package/dist/relations/has-many/has-many.repository-factory.js.map +1 -1
  82. package/dist/relations/has-many/has-many.repository.js +1 -1
  83. package/dist/relations/has-many/has-many.repository.js.map +1 -1
  84. package/dist/relations/has-many/index.d.ts +2 -2
  85. package/dist/relations/has-many/index.js +3 -3
  86. package/dist/relations/has-many/index.js.map +1 -1
  87. package/dist/relations/has-one/has-one.decorator.js +1 -1
  88. package/dist/relations/has-one/has-one.decorator.js.map +1 -1
  89. package/dist/relations/has-one/has-one.helpers.d.ts +3 -0
  90. package/dist/relations/has-one/has-one.helpers.js +35 -9
  91. package/dist/relations/has-one/has-one.helpers.js.map +1 -1
  92. package/dist/relations/has-one/has-one.inclusion-resolver.d.ts +6 -3
  93. package/dist/relations/has-one/has-one.inclusion-resolver.js +83 -8
  94. package/dist/relations/has-one/has-one.inclusion-resolver.js.map +1 -1
  95. package/dist/relations/has-one/has-one.repository-factory.d.ts +9 -3
  96. package/dist/relations/has-one/has-one.repository-factory.js +14 -4
  97. package/dist/relations/has-one/has-one.repository-factory.js.map +1 -1
  98. package/dist/relations/has-one/has-one.repository.d.ts +58 -11
  99. package/dist/relations/has-one/has-one.repository.js +119 -16
  100. package/dist/relations/has-one/has-one.repository.js.map +1 -1
  101. package/dist/relations/has-one/index.js +1 -1
  102. package/dist/relations/has-one/index.js.map +1 -1
  103. package/dist/relations/index.d.ts +2 -0
  104. package/dist/relations/index.js +3 -1
  105. package/dist/relations/index.js.map +1 -1
  106. package/dist/relations/references-many/index.d.ts +4 -0
  107. package/dist/relations/references-many/index.js +12 -0
  108. package/dist/relations/references-many/index.js.map +1 -0
  109. package/dist/relations/references-many/references-many.accessor.d.ts +17 -0
  110. package/dist/relations/references-many/references-many.accessor.js +40 -0
  111. package/dist/relations/references-many/references-many.accessor.js.map +1 -0
  112. package/dist/relations/references-many/references-many.decorator.d.ts +11 -0
  113. package/dist/relations/references-many/references-many.decorator.js +73 -0
  114. package/dist/relations/references-many/references-many.decorator.js.map +1 -0
  115. package/dist/relations/references-many/references-many.helpers.d.ts +17 -0
  116. package/dist/relations/references-many/references-many.helpers.js +63 -0
  117. package/dist/relations/references-many/references-many.helpers.js.map +1 -0
  118. package/dist/relations/references-many/references-many.inclusion-resolver.d.ts +14 -0
  119. package/dist/relations/references-many/references-many.inclusion-resolver.js +42 -0
  120. package/dist/relations/references-many/references-many.inclusion-resolver.js.map +1 -0
  121. package/dist/relations/references-many/references-many.repository.d.ts +28 -0
  122. package/dist/relations/references-many/references-many.repository.js +33 -0
  123. package/dist/relations/references-many/references-many.repository.js.map +1 -0
  124. package/dist/relations/relation.decorator.d.ts +0 -6
  125. package/dist/relations/relation.decorator.js +2 -14
  126. package/dist/relations/relation.decorator.js.map +1 -1
  127. package/dist/relations/relation.filter.solver.d.ts +2 -0
  128. package/dist/relations/relation.filter.solver.js +57 -0
  129. package/dist/relations/relation.filter.solver.js.map +1 -0
  130. package/dist/relations/relation.helpers.js +18 -3
  131. package/dist/relations/relation.helpers.js.map +1 -1
  132. package/dist/relations/relation.types.d.ts +52 -1
  133. package/dist/relations/relation.types.js +1 -1
  134. package/dist/relations/relation.types.js.map +1 -1
  135. package/dist/repositories/constraint-utils.js +1 -1
  136. package/dist/repositories/constraint-utils.js.map +1 -1
  137. package/dist/repositories/index.d.ts +2 -2
  138. package/dist/repositories/index.js +3 -3
  139. package/dist/repositories/index.js.map +1 -1
  140. package/dist/repositories/kv.repository.bridge.js +1 -1
  141. package/dist/repositories/kv.repository.bridge.js.map +1 -1
  142. package/dist/repositories/kv.repository.d.ts +2 -2
  143. package/dist/repositories/kv.repository.js +1 -1
  144. package/dist/repositories/kv.repository.js.map +1 -1
  145. package/dist/repositories/legacy-juggler-bridge.d.ts +36 -9
  146. package/dist/repositories/legacy-juggler-bridge.js +38 -16
  147. package/dist/repositories/legacy-juggler-bridge.js.map +1 -1
  148. package/dist/repositories/repository.js +1 -1
  149. package/dist/repositories/repository.js.map +1 -1
  150. package/dist/type-resolver.js +1 -1
  151. package/dist/type-resolver.js.map +1 -1
  152. package/dist/types/any.js +1 -1
  153. package/dist/types/any.js.map +1 -1
  154. package/dist/types/array.js +1 -1
  155. package/dist/types/array.js.map +1 -1
  156. package/dist/types/boolean.js +1 -1
  157. package/dist/types/boolean.js.map +1 -1
  158. package/dist/types/buffer.js +1 -1
  159. package/dist/types/buffer.js.map +1 -1
  160. package/dist/types/date.js +1 -1
  161. package/dist/types/date.js.map +1 -1
  162. package/dist/types/index.js +1 -1
  163. package/dist/types/index.js.map +1 -1
  164. package/dist/types/model.js +1 -1
  165. package/dist/types/model.js.map +1 -1
  166. package/dist/types/null.js +1 -1
  167. package/dist/types/null.js.map +1 -1
  168. package/dist/types/number.js +1 -1
  169. package/dist/types/number.js.map +1 -1
  170. package/dist/types/object.js +1 -1
  171. package/dist/types/object.js.map +1 -1
  172. package/dist/types/string.js +1 -1
  173. package/dist/types/string.js.map +1 -1
  174. package/dist/types/type.js +1 -1
  175. package/dist/types/type.js.map +1 -1
  176. package/dist/types/union.js +1 -1
  177. package/dist/types/union.js.map +1 -1
  178. package/package.json +15 -15
  179. package/src/connectors/connector.ts +1 -1
  180. package/src/connectors/crud.connector.ts +1 -1
  181. package/src/connectors/index.ts +1 -1
  182. package/src/connectors/kv.connector.ts +1 -1
  183. package/src/datasource.ts +1 -1
  184. package/src/decorators/index.ts +1 -1
  185. package/src/decorators/metadata.ts +1 -1
  186. package/src/decorators/model.decorator.ts +1 -1
  187. package/src/decorators/repository.decorator.ts +1 -1
  188. package/src/define-model-class.ts +1 -1
  189. package/src/define-repository-class.ts +1 -1
  190. package/src/errors/entity-not-found.error.ts +1 -1
  191. package/src/errors/index.ts +2 -1
  192. package/src/errors/invalid-polymorphism.error.ts +28 -0
  193. package/src/errors/invalid-relation.error.ts +2 -2
  194. package/src/index.ts +1 -1
  195. package/src/mixins/index.ts +1 -1
  196. package/src/mixins/repository.mixin.ts +1 -6
  197. package/src/model.ts +20 -1
  198. package/src/relations/belongs-to/belongs-to.accessor.ts +36 -7
  199. package/src/relations/belongs-to/belongs-to.decorator.ts +2 -2
  200. package/src/relations/belongs-to/belongs-to.helpers.ts +37 -10
  201. package/src/relations/belongs-to/belongs-to.inclusion-resolver.ts +109 -18
  202. package/src/relations/belongs-to/belongs-to.repository.ts +78 -18
  203. package/src/relations/belongs-to/index.ts +3 -3
  204. package/src/relations/has-many/has-many-through.helpers.ts +28 -2
  205. package/src/relations/has-many/has-many-through.inclusion-resolver.ts +118 -27
  206. package/src/relations/has-many/has-many-through.repository-factory.ts +22 -4
  207. package/src/relations/has-many/has-many-through.repository.ts +344 -77
  208. package/src/relations/has-many/has-many.decorator.ts +1 -1
  209. package/src/relations/has-many/has-many.helpers.ts +1 -1
  210. package/src/relations/has-many/has-many.inclusion-resolver.ts +1 -1
  211. package/src/relations/has-many/has-many.repository-factory.ts +1 -1
  212. package/src/relations/has-many/has-many.repository.ts +1 -1
  213. package/src/relations/has-many/index.ts +3 -3
  214. package/src/relations/has-one/has-one.decorator.ts +1 -1
  215. package/src/relations/has-one/has-one.helpers.ts +41 -14
  216. package/src/relations/has-one/has-one.inclusion-resolver.ts +110 -16
  217. package/src/relations/has-one/has-one.repository-factory.ts +35 -7
  218. package/src/relations/has-one/has-one.repository.ts +189 -36
  219. package/src/relations/has-one/index.ts +1 -1
  220. package/src/relations/index.ts +3 -1
  221. package/src/relations/references-many/index.ts +9 -0
  222. package/src/relations/references-many/references-many.accessor.ts +76 -0
  223. package/src/relations/references-many/references-many.decorator.ts +100 -0
  224. package/src/relations/references-many/references-many.helpers.ts +82 -0
  225. package/src/relations/references-many/references-many.inclusion-resolver.ts +80 -0
  226. package/src/relations/references-many/references-many.repository.ts +55 -0
  227. package/src/relations/relation.decorator.ts +1 -13
  228. package/src/relations/relation.filter.solver.ts +56 -0
  229. package/src/relations/relation.helpers.ts +18 -3
  230. package/src/relations/relation.types.ts +52 -1
  231. package/src/repositories/constraint-utils.ts +1 -1
  232. package/src/repositories/index.ts +3 -3
  233. package/src/repositories/kv.repository.bridge.ts +1 -1
  234. package/src/repositories/kv.repository.ts +3 -3
  235. package/src/repositories/legacy-juggler-bridge.ts +80 -16
  236. package/src/repositories/repository.ts +1 -1
  237. package/src/type-resolver.ts +1 -1
  238. package/src/types/any.ts +1 -1
  239. package/src/types/array.ts +1 -1
  240. package/src/types/boolean.ts +1 -1
  241. package/src/types/buffer.ts +1 -1
  242. package/src/types/date.ts +1 -1
  243. package/src/types/index.ts +1 -1
  244. package/src/types/model.ts +1 -1
  245. package/src/types/null.ts +1 -1
  246. package/src/types/number.ts +1 -1
  247. package/src/types/object.ts +1 -1
  248. package/src/types/string.ts +1 -1
  249. package/src/types/type.ts +1 -1
  250. package/src/types/union.ts +1 -1
package/dist/model.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ export interface BelongsToAccessor<Target extends Entity, SourceId> {
5
5
  /**
6
6
  * Invoke the function to obtain HasManyRepository.
7
7
  */
8
- (sourceId: SourceId): Promise<Target>;
8
+ (sourceId: SourceId, polymorphicTypes?: string | string[]): Promise<Target>;
9
9
  /**
10
10
  * Use `resolver` property to obtain an InclusionResolver for this relation.
11
11
  */
@@ -13,5 +13,9 @@ export interface BelongsToAccessor<Target extends Entity, SourceId> {
13
13
  }
14
14
  /**
15
15
  * Enforces a BelongsTo constraint on a repository
16
+ * If the target model is polymorphic, i.e. stored within different repositories,
17
+ * supply the targetRepositoryGetter with a dictionary in the form of {[typeName: string]: repositoryGetter}
16
18
  */
17
- export declare function createBelongsToAccessor<Target extends Entity, TargetId, Source extends Entity, SourceId>(belongsToMetadata: BelongsToDefinition, targetRepoGetter: Getter<EntityCrudRepository<Target, TargetId>>, sourceRepository: EntityCrudRepository<Source, SourceId>): BelongsToAccessor<Target, SourceId>;
19
+ export declare function createBelongsToAccessor<Target extends Entity, TargetId, Source extends Entity, SourceId>(belongsToMetadata: BelongsToDefinition, targetRepositoryGetter: Getter<EntityCrudRepository<Target, TargetId>> | {
20
+ [repoType: string]: Getter<EntityCrudRepository<Target, TargetId>>;
21
+ }, sourceRepository: EntityCrudRepository<Source, SourceId>): BelongsToAccessor<Target, SourceId>;
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- // Copyright IBM Corp. 2018,2019. All Rights Reserved.
2
+ // Copyright IBM Corp. and LoopBack contributors 2018,2019. All Rights Reserved.
3
3
  // Node module: @loopback/repository
4
4
  // This file is licensed under the MIT License.
5
5
  // License text available at https://opensource.org/licenses/MIT
@@ -13,11 +13,24 @@ const belongs_to_repository_1 = require("./belongs-to.repository");
13
13
  const debug = (0, debug_1.default)('loopback:repository:relations:belongs-to:accessor');
14
14
  /**
15
15
  * Enforces a BelongsTo constraint on a repository
16
+ * If the target model is polymorphic, i.e. stored within different repositories,
17
+ * supply the targetRepositoryGetter with a dictionary in the form of {[typeName: string]: repositoryGetter}
16
18
  */
17
- function createBelongsToAccessor(belongsToMetadata, targetRepoGetter, sourceRepository) {
19
+ function createBelongsToAccessor(belongsToMetadata, targetRepositoryGetter, sourceRepository) {
18
20
  const meta = (0, belongs_to_helpers_1.resolveBelongsToMetadata)(belongsToMetadata);
21
+ // resolve the repositoryGetter into a dictionary
22
+ if (typeof targetRepositoryGetter === 'function') {
23
+ targetRepositoryGetter = {
24
+ [meta.target().name]: targetRepositoryGetter,
25
+ };
26
+ }
19
27
  debug('Resolved BelongsTo relation metadata: %o', meta);
20
- const result = async function getTargetInstanceOfBelongsTo(sourceId) {
28
+ const result = async function getTargetInstanceOfBelongsTo(sourceId, polymorphicTypes) {
29
+ if (meta.polymorphic !== false) {
30
+ if (!polymorphicTypes || polymorphicTypes.length === 0) {
31
+ console.warn('It is highly recommended to specify the polymorphicTypes param when using polymorphic types.');
32
+ }
33
+ }
21
34
  const foreignKey = meta.keyFrom;
22
35
  const primaryKey = meta.keyTo;
23
36
  const sourceModel = await sourceRepository.findById(sourceId);
@@ -30,10 +43,10 @@ function createBelongsToAccessor(belongsToMetadata, targetRepoGetter, sourceRepo
30
43
  }
31
44
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
32
45
  const constraint = { [primaryKey]: foreignKeyValue };
33
- const constrainedRepo = new belongs_to_repository_1.DefaultBelongsToRepository(targetRepoGetter, constraint);
34
- return constrainedRepo.get();
46
+ const constrainedRepo = new belongs_to_repository_1.DefaultBelongsToRepository(targetRepositoryGetter, constraint, belongsToMetadata.target);
47
+ return constrainedRepo.get({ polymorphicType: polymorphicTypes });
35
48
  };
36
- result.inclusionResolver = (0, belongs_to_inclusion_resolver_1.createBelongsToInclusionResolver)(meta, targetRepoGetter);
49
+ result.inclusionResolver = (0, belongs_to_inclusion_resolver_1.createBelongsToInclusionResolver)(meta, targetRepositoryGetter);
37
50
  return result;
38
51
  }
39
52
  exports.createBelongsToAccessor = createBelongsToAccessor;
@@ -1 +1 @@
1
- {"version":3,"file":"belongs-to.accessor.js","sourceRoot":"","sources":["../../../src/relations/belongs-to/belongs-to.accessor.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,0DAAiC;AASjC,6DAA8D;AAC9D,mFAAiF;AACjF,mEAAmE;AAEnE,MAAM,KAAK,GAAG,IAAA,eAAY,EAAC,mDAAmD,CAAC,CAAC;AAchF;;GAEG;AACH,SAAgB,uBAAuB,CAMrC,iBAAsC,EACtC,gBAAgE,EAChE,gBAAwD;IAExD,MAAM,IAAI,GAAG,IAAA,6CAAwB,EAAC,iBAAiB,CAAC,CAAC;IACzD,KAAK,CAAC,0CAA0C,EAAE,IAAI,CAAC,CAAC;IACxD,MAAM,MAAM,GACV,KAAK,UAAU,4BAA4B,CAAC,QAAkB;QAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;QAC9B,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC9D,MAAM,eAAe,GAAG,WAAW,CAAC,UAA0B,CAAC,CAAC;QAChE,6CAA6C;QAC7C,oEAAoE;QACpE,oEAAoE;QACpE,IAAI,CAAC,eAAe,EAAE;YACpB,OAAO,SAA8B,CAAC;SACvC;QACD,8DAA8D;QAC9D,MAAM,UAAU,GAAQ,EAAC,CAAC,UAAU,CAAC,EAAE,eAAe,EAAC,CAAC;QACxD,MAAM,eAAe,GAAG,IAAI,kDAA0B,CACpD,gBAAgB,EAChB,UAAgC,CACjC,CAAC;QACF,OAAO,eAAe,CAAC,GAAG,EAAE,CAAC;IAC/B,CAAC,CAAC;IAEJ,MAAM,CAAC,iBAAiB,GAAG,IAAA,gEAAgC,EACzD,IAAI,EACJ,gBAAgB,CACjB,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAtCD,0DAsCC"}
1
+ {"version":3,"file":"belongs-to.accessor.js","sourceRoot":"","sources":["../../../src/relations/belongs-to/belongs-to.accessor.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,0DAAiC;AASjC,6DAA8D;AAC9D,mFAAiF;AACjF,mEAAmE;AAEnE,MAAM,KAAK,GAAG,IAAA,eAAY,EAAC,mDAAmD,CAAC,CAAC;AAchF;;;;GAIG;AACH,SAAgB,uBAAuB,CAMrC,iBAAsC,EACtC,sBAIK,EACL,gBAAwD;IAExD,MAAM,IAAI,GAAG,IAAA,6CAAwB,EAAC,iBAAiB,CAAC,CAAC;IACzD,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,0CAA0C,EAAE,IAAI,CAAC,CAAC;IACxD,MAAM,MAAM,GACV,KAAK,UAAU,4BAA4B,CACzC,QAAkB,EAClB,gBAAoC;QAEpC,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE;YAC9B,IAAI,CAAC,gBAAgB,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE;gBACtD,OAAO,CAAC,IAAI,CACV,8FAA8F,CAC/F,CAAC;aACH;SACF;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;QAC9B,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC9D,MAAM,eAAe,GAAG,WAAW,CAAC,UAA0B,CAAC,CAAC;QAChE,6CAA6C;QAC7C,oEAAoE;QACpE,oEAAoE;QACpE,IAAI,CAAC,eAAe,EAAE;YACpB,OAAO,SAA8B,CAAC;SACvC;QACD,8DAA8D;QAC9D,MAAM,UAAU,GAAQ,EAAC,CAAC,UAAU,CAAC,EAAE,eAAe,EAAC,CAAC;QACxD,MAAM,eAAe,GAAG,IAAI,kDAA0B,CACpD,sBAEC,EACD,UAAgC,EAChC,iBAAiB,CAAC,MAAM,CACzB,CAAC;QACF,OAAO,eAAe,CAAC,GAAG,CAAC,EAAC,eAAe,EAAE,gBAAgB,EAAC,CAAC,CAAC;IAClE,CAAC,CAAC;IAEJ,MAAM,CAAC,iBAAiB,GAAG,IAAA,gEAAgC,EACzD,IAAI,EACJ,sBAEC,CACF,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAjED,0DAiEC"}
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- // Copyright IBM Corp. 2018,2020. All Rights Reserved.
2
+ // Copyright IBM Corp. and LoopBack contributors 2018,2020. All Rights Reserved.
3
3
  // Node module: @loopback/repository
4
4
  // This file is licensed under the MIT License.
5
5
  // License text available at https://opensource.org/licenses/MIT
@@ -1 +1 @@
1
- {"version":3,"file":"belongs-to.decorator.js","sourceRoot":"","sources":["../../../src/relations/belongs-to/belongs-to.decorator.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;AAEhE,yCAAmE;AACnE,iDAA0C;AAC1C,8DAA+C;AAE/C,sDAAoE;AAEpE;;;;;;;GAOG;AACH,SAAgB,SAAS,CACvB,cAAiC,EACjC,UAAyC,EACzC,kBAAgD;IAEhD,OAAO,UAAU,eAAuB,EAAE,YAAoB;;QAC5D,MAAM,QAAQ,GACZ,MAAA,wBAAiB,CAAC,wBAAwB,CACxC,eAAe,EACf,YAAY,CACb,mCAAI,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,IAAI,CAAC;QAEhC,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,YAAY,GAAG,uBAAgB,CAAC,aAAa,CACjD,eAAe,EACf,YAAY,CACb,CAAC;YACF,MAAM,IAAI,KAAK,CACb,uCAAuC,YAAY,WAAW;gBAC5D,iEAAiE;gBACjE,qEAAqE;gBACrE,iEAAiE,CACpE,CAAC;SACH;QAED,MAAM,QAAQ,GAAuB,MAAM,CAAC,MAAM,CAChD,EAAE;QACF,oCAAoC;QACpC,kBAAkB;QAClB,uCAAuC;QACvC;YACE,IAAI,EAAE,QAAQ;YACd,qEAAqE;YACrE,2DAA2D;YAC3D,kBAAkB;SACnB,CACF,CAAC;QACF,IAAA,qBAAQ,EAAC,QAAQ,CAAC,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;QAElD,iEAAiE;QACjE,4EAA4E;QAC5E,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAErD,MAAM,IAAI,GAAwB,MAAM,CAAC,MAAM;QAC7C,kDAAkD;QAClD;YACE,OAAO,EAAE,YAAY;YACrB,IAAI,EAAE,YAAY;SACnB;QACD,oCAAoC;QACpC,UAAU;QACV,uCAAuC;QACvC;YACE,IAAI,EAAE,6BAAY,CAAC,SAAS;YAC5B,WAAW,EAAE,KAAK;YAClB,MAAM,EAAE,eAAe,CAAC,WAAW;YACnC,MAAM,EAAE,cAAc;SACvB,CACF,CAAC;QACF,IAAA,6BAAQ,EAAC,IAAI,CAAC,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;IAChD,CAAC,CAAC;AACJ,CAAC;AA7DD,8BA6DC"}
1
+ {"version":3,"file":"belongs-to.decorator.js","sourceRoot":"","sources":["../../../src/relations/belongs-to/belongs-to.decorator.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;AAEhE,yCAAmE;AACnE,iDAA0C;AAE1C,8DAA+C;AAC/C,sDAAoE;AAEpE;;;;;;;GAOG;AACH,SAAgB,SAAS,CACvB,cAAiC,EACjC,UAAyC,EACzC,kBAAgD;IAEhD,OAAO,UAAU,eAAuB,EAAE,YAAoB;;QAC5D,MAAM,QAAQ,GACZ,MAAA,wBAAiB,CAAC,wBAAwB,CACxC,eAAe,EACf,YAAY,CACb,mCAAI,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,IAAI,CAAC;QAEhC,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,YAAY,GAAG,uBAAgB,CAAC,aAAa,CACjD,eAAe,EACf,YAAY,CACb,CAAC;YACF,MAAM,IAAI,KAAK,CACb,uCAAuC,YAAY,WAAW;gBAC5D,iEAAiE;gBACjE,qEAAqE;gBACrE,iEAAiE,CACpE,CAAC;SACH;QAED,MAAM,QAAQ,GAAuB,MAAM,CAAC,MAAM,CAChD,EAAE;QACF,oCAAoC;QACpC,kBAAkB;QAClB,uCAAuC;QACvC;YACE,IAAI,EAAE,QAAQ;YACd,qEAAqE;YACrE,2DAA2D;YAC3D,kBAAkB;SACnB,CACF,CAAC;QACF,IAAA,qBAAQ,EAAC,QAAQ,CAAC,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;QAElD,iEAAiE;QACjE,4EAA4E;QAC5E,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAErD,MAAM,IAAI,GAAwB,MAAM,CAAC,MAAM;QAC7C,kDAAkD;QAClD;YACE,OAAO,EAAE,YAAY;YACrB,IAAI,EAAE,YAAY;SACnB;QACD,oCAAoC;QACpC,UAAU;QACV,uCAAuC;QACvC;YACE,IAAI,EAAE,6BAAY,CAAC,SAAS;YAC5B,WAAW,EAAE,KAAK;YAClB,MAAM,EAAE,eAAe,CAAC,WAAW;YACnC,MAAM,EAAE,cAAc;SACvB,CACF,CAAC;QACF,IAAA,6BAAQ,EAAC,IAAI,CAAC,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;IAChD,CAAC,CAAC;AACJ,CAAC;AA7DD,8BA6DC"}
@@ -6,6 +6,9 @@ import { BelongsToDefinition } from '../relation.types';
6
6
  export declare type BelongsToResolvedDefinition = BelongsToDefinition & {
7
7
  keyFrom: string;
8
8
  keyTo: string;
9
+ polymorphic: false | {
10
+ discriminator: string;
11
+ };
9
12
  };
10
13
  /**
11
14
  * Resolves given belongsTo metadata if target is specified to be a resolver.
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- // Copyright IBM Corp. 2019. All Rights Reserved.
2
+ // Copyright IBM Corp. and LoopBack contributors 2019. All Rights Reserved.
3
3
  // Node module: @loopback/repository
4
4
  // This file is licensed under the MIT License.
5
5
  // License text available at https://opensource.org/licenses/MIT
@@ -46,18 +46,42 @@ function resolveBelongsToMetadata(relationMeta) {
46
46
  }
47
47
  const targetProperties = targetModel.definition.properties;
48
48
  debug('relation metadata from %o: %o', targetName, targetProperties);
49
+ let keyTo;
49
50
  if (relationMeta.keyTo && targetProperties[relationMeta.keyTo]) {
50
51
  // The explicit cast is needed because of a limitation of type inference
51
- return Object.assign(relationMeta, {
52
- keyFrom,
53
- });
52
+ keyTo = relationMeta.keyTo;
54
53
  }
55
- const targetPrimaryKey = targetModel.definition.idProperties()[0];
56
- if (!targetPrimaryKey) {
57
- const reason = `${targetName} does not have any primary key (id property)`;
58
- throw new errors_1.InvalidRelationError(reason, relationMeta);
54
+ else {
55
+ keyTo = targetModel.definition.idProperties()[0];
56
+ if (!keyTo) {
57
+ const reason = `${targetName} does not have any primary key (id property)`;
58
+ throw new errors_1.InvalidRelationError(reason, relationMeta);
59
+ }
60
+ }
61
+ let polymorphic;
62
+ if (relationMeta.polymorphic === undefined ||
63
+ relationMeta.polymorphic === false ||
64
+ !relationMeta.polymorphic) {
65
+ const polymorphicFalse = false;
66
+ polymorphic = polymorphicFalse;
67
+ }
68
+ else {
69
+ if (relationMeta.polymorphic === true) {
70
+ const polymorphicObject = {
71
+ discriminator: (0, lodash_1.camelCase)(relationMeta.target().name + '_type'),
72
+ };
73
+ polymorphic = polymorphicObject;
74
+ }
75
+ else {
76
+ const polymorphicObject = relationMeta.polymorphic;
77
+ polymorphic = polymorphicObject;
78
+ }
59
79
  }
60
- return Object.assign(relationMeta, { keyFrom, keyTo: targetPrimaryKey });
80
+ return Object.assign(relationMeta, {
81
+ keyFrom,
82
+ keyTo: keyTo,
83
+ polymorphic: polymorphic,
84
+ });
61
85
  }
62
86
  exports.resolveBelongsToMetadata = resolveBelongsToMetadata;
63
87
  //# sourceMappingURL=belongs-to.helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"belongs-to.helpers.js","sourceRoot":"","sources":["../../../src/relations/belongs-to/belongs-to.helpers.ts"],"names":[],"mappings":";AAAA,iDAAiD;AACjD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,0DAAiC;AACjC,mCAAiC;AACjC,yCAAkD;AAClD,uDAAmD;AACnD,sDAAoE;AAEpE,MAAM,KAAK,GAAG,IAAA,eAAY,EAAC,kDAAkD,CAAC,CAAC;AAW/E;;;;;;GAMG;AACH,SAAgB,wBAAwB,CAAC,YAAiC;IACxE,IAAK,YAAY,CAAC,IAAqB,KAAK,6BAAY,CAAC,SAAS,EAAE;QAClE,MAAM,MAAM,GAAG,iCAAiC,CAAC;QACjD,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;IAED,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,WAAW,CAAC,SAAS,CAAC;IACzC,KAAK,CAAC,2CAA2C,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IAE5E,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,IAAA,kBAAS,EAAC,UAAU,GAAG,KAAK,CAAC,CAAC;KACzC;IAED,MAAM,gBAAgB,GAAG,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC;IAC3D,KAAK,CAAC,+BAA+B,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC;IAErE,IAAI,YAAY,CAAC,KAAK,IAAI,gBAAgB,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;QAC9D,wEAAwE;QACxE,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE;YACjC,OAAO;SACR,CAAgC,CAAC;KACnC;IAED,MAAM,gBAAgB,GAAG,WAAW,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;IAClE,IAAI,CAAC,gBAAgB,EAAE;QACrB,MAAM,MAAM,GAAG,GAAG,UAAU,8CAA8C,CAAC;QAC3E,MAAM,IAAI,6BAAoB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;KACtD;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,EAAC,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAC,CAAC,CAAC;AACzE,CAAC;AAhDD,4DAgDC"}
1
+ {"version":3,"file":"belongs-to.helpers.js","sourceRoot":"","sources":["../../../src/relations/belongs-to/belongs-to.helpers.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,9 @@ import { BelongsToDefinition, Getter, InclusionResolver } from '../relation.type
9
9
  * Notice: scope field for inclusion is not supported yet
10
10
  *
11
11
  * @param meta - resolved BelongsToMetadata
12
- * @param getTargetRepo - target repository i.e where related instances are
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 createBelongsToInclusionResolver<Target extends Entity, TargetID, TargetRelations extends object>(meta: BelongsToDefinition, getTargetRepo: Getter<EntityCrudRepository<Target, TargetID, TargetRelations>>): InclusionResolver<Entity, Target>;
15
+ export declare function createBelongsToInclusionResolver<Target extends Entity, TargetID, TargetRelations extends object>(meta: BelongsToDefinition, getTargetRepoDict: {
16
+ [repoType: string]: Getter<EntityCrudRepository<Target, TargetID, TargetRelations>>;
17
+ }): InclusionResolver<Entity, Target>;
@@ -1,10 +1,11 @@
1
1
  "use strict";
2
- // Copyright IBM Corp. 2019,2020. All Rights Reserved.
2
+ // Copyright IBM Corp. and LoopBack contributors 2019,2020. All Rights Reserved.
3
3
  // Node module: @loopback/repository
4
4
  // This file is licensed under the MIT License.
5
5
  // License text available at https://opensource.org/licenses/MIT
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.createBelongsToInclusionResolver = void 0;
8
+ const __1 = require("../../");
8
9
  const relation_helpers_1 = require("../relation.helpers");
9
10
  const belongs_to_helpers_1 = require("./belongs-to.helpers");
10
11
  /**
@@ -15,21 +16,93 @@ const belongs_to_helpers_1 = require("./belongs-to.helpers");
15
16
  * Notice: scope field for inclusion is not supported yet
16
17
  *
17
18
  * @param meta - resolved BelongsToMetadata
18
- * @param getTargetRepo - target repository i.e where related instances are
19
+ * @param getTargetRepoDict - dictionary of target model type - target repository
20
+ * i.e where related instances for different types are
19
21
  */
20
- function createBelongsToInclusionResolver(meta, getTargetRepo) {
22
+ function createBelongsToInclusionResolver(meta, getTargetRepoDict) {
21
23
  const relationMeta = (0, belongs_to_helpers_1.resolveBelongsToMetadata)(meta);
22
- return async function fetchIncludedModels(entities, inclusion, options) {
24
+ return async function fetchBelongsToModel(entities, inclusion, options) {
23
25
  if (!entities.length)
24
26
  return [];
27
+ // Source ids are grouped by their target polymorphic types
28
+ // Each type search for target instances and then merge together in a merge-sort-like manner
25
29
  const sourceKey = relationMeta.keyFrom;
26
- const sourceIds = entities.map(e => e[sourceKey]);
27
30
  const targetKey = relationMeta.keyTo;
28
- const dedupedSourceIds = (0, relation_helpers_1.deduplicate)(sourceIds);
31
+ const targetDiscriminator = relationMeta.polymorphic
32
+ ? relationMeta.polymorphic.discriminator
33
+ : undefined;
29
34
  const scope = typeof inclusion === 'string' ? {} : inclusion.scope;
30
- const targetRepo = await getTargetRepo();
31
- const targetsFound = await (0, relation_helpers_1.findByForeignKeys)(targetRepo, targetKey, dedupedSourceIds.filter(e => e), scope, options);
32
- return (0, relation_helpers_1.flattenTargetsOfOneToOneRelation)(sourceIds, targetsFound, targetKey);
35
+ // sourceIds in {targetType -> sourceId}
36
+ const sourceIdsCategorized = {};
37
+ if (targetDiscriminator) {
38
+ entities.forEach((value, index, allEntites) => {
39
+ const concreteType = String(value[targetDiscriminator]);
40
+ if (!getTargetRepoDict[concreteType]) {
41
+ throw new __1.InvalidPolymorphismError(concreteType, targetDiscriminator);
42
+ }
43
+ if (!sourceIdsCategorized[concreteType]) {
44
+ sourceIdsCategorized[concreteType] = [];
45
+ }
46
+ sourceIdsCategorized[concreteType].push(value[sourceKey]);
47
+ });
48
+ }
49
+ else {
50
+ const concreteType = relationMeta.target().name;
51
+ if (!getTargetRepoDict[concreteType]) {
52
+ throw new __1.InvalidPolymorphismError(concreteType);
53
+ }
54
+ entities.forEach((value, index, allEntites) => {
55
+ if (!sourceIdsCategorized[concreteType]) {
56
+ sourceIdsCategorized[concreteType] = [];
57
+ }
58
+ sourceIdsCategorized[concreteType].push(value[sourceKey]);
59
+ });
60
+ }
61
+ // Ensure targetKey is included otherwise flatten function cannot work
62
+ const changedTargetKeyField = (0, __1.includeFieldIfNot)(scope === null || scope === void 0 ? void 0 : scope.fields, targetKey);
63
+ let needToRemoveTargetKeyFieldLater = false;
64
+ if (changedTargetKeyField !== false) {
65
+ scope.fields = changedTargetKeyField;
66
+ needToRemoveTargetKeyFieldLater = true;
67
+ }
68
+ // Each sourceIds array with same target type extract target instances
69
+ const targetCategorized = {};
70
+ for (const k of Object.keys(sourceIdsCategorized)) {
71
+ const targetRepo = await getTargetRepoDict[k]();
72
+ const targetsFound = await (0, relation_helpers_1.findByForeignKeys)(targetRepo, targetKey, (0, relation_helpers_1.deduplicate)(sourceIdsCategorized[k]).filter(e => e), scope, options);
73
+ targetCategorized[k] = (0, relation_helpers_1.flattenTargetsOfOneToOneRelation)(sourceIdsCategorized[k], targetsFound, targetKey);
74
+ // Remove targetKey if should be excluded but included above
75
+ if (needToRemoveTargetKeyFieldLater) {
76
+ targetCategorized[k] = targetCategorized[k].map(e => {
77
+ if (e) {
78
+ delete e[targetKey];
79
+ }
80
+ return e;
81
+ });
82
+ }
83
+ }
84
+ // Merge
85
+ // Why the order is correct:
86
+ // e.g. target model 1 = a, target model 2 = b
87
+ // all entities: [S(a-1), S(a-2), S(b-3), S(a-4), S(b-5)]
88
+ // a-result: [a-1, a-2, a-4]
89
+ // b-result: [b-3, b-4]
90
+ // merged:
91
+ // entities[1]->a => targets: [a-1 from a-result.shift()]
92
+ // entities[2]->a => targets: [a-1, a-2 from a-result.shift()]
93
+ // entities[3]->b => targets: [a-1, a-2, b-3 from b-result.shift()]
94
+ // entities[4]->a => targets: [a-1, a-2, b-3, a-4 from a-result.shift()]
95
+ // entities[5]->b => targets: [a-1, a-2, b-3, a-4, b-5 from b-result.shift()]
96
+ if (targetDiscriminator) {
97
+ const allTargets = [];
98
+ entities.forEach((value, index, allEntites) => {
99
+ allTargets.push(targetCategorized[String(value[targetDiscriminator])].shift());
100
+ });
101
+ return allTargets;
102
+ }
103
+ else {
104
+ return targetCategorized[relationMeta.target().name];
105
+ }
33
106
  };
34
107
  }
35
108
  exports.createBelongsToInclusionResolver = createBelongsToInclusionResolver;
@@ -1 +1 @@
1
- {"version":3,"file":"belongs-to.inclusion-resolver.js","sourceRoot":"","sources":["../../../src/relations/belongs-to/belongs-to.inclusion-resolver.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;AAMhE,0DAK6B;AAM7B,6DAA8D;AAE9D;;;;;;;;;GASG;AACH,SAAgB,gCAAgC,CAK9C,IAAyB,EACzB,aAEC;IAED,MAAM,YAAY,GAAG,IAAA,6CAAwB,EAAC,IAAI,CAAC,CAAC;IAEpD,OAAO,KAAK,UAAU,mBAAmB,CACvC,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;QAC5D,MAAM,gBAAgB,GAAG,IAAA,8BAAW,EAAC,SAAS,CAAC,CAAC;QAEhD,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,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAC/B,KAAK,EACL,OAAO,CACR,CAAC;QAEF,OAAO,IAAA,mDAAgC,EAAC,SAAS,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;IAC9E,CAAC,CAAC;AACJ,CAAC;AAtCD,4EAsCC"}
1
+ {"version":3,"file":"belongs-to.inclusion-resolver.js","sourceRoot":"","sources":["../../../src/relations/belongs-to/belongs-to.inclusion-resolver.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { Getter } from '@loopback/core';
2
+ import { TypeResolver } from '../../';
2
3
  import { DataObject, Options } from '../../common-types';
3
4
  import { Entity } from '../../model';
4
5
  import { EntityCrudRepository } from '../../repositories';
@@ -9,20 +10,42 @@ export interface BelongsToRepository<Target extends Entity> {
9
10
  /**
10
11
  * Gets the target model instance
11
12
  * @param options
13
+ * options.polymorphicType - a string or a string array of polymorphic type names
14
+ * to specify which repositories should are expected to be searched
15
+ * It is highly recommended to contain this param especially for
16
+ * datasources using deplicated ids across tables
12
17
  * @returns A promise resolved with the target object or rejected
13
18
  * with an EntityNotFoundError when target model instance was not found.
14
19
  */
15
- get(options?: Options): Promise<Target>;
20
+ get(options?: Options & {
21
+ polymorphicType?: string | string[];
22
+ }): Promise<Target>;
16
23
  }
17
24
  export declare class DefaultBelongsToRepository<TargetEntity extends Entity, TargetId, TargetRepository extends EntityCrudRepository<TargetEntity, TargetId>> implements BelongsToRepository<TargetEntity> {
18
- getTargetRepository: Getter<TargetRepository>;
25
+ getTargetRepository: Getter<TargetRepository> | {
26
+ [repoType: string]: Getter<TargetRepository>;
27
+ };
19
28
  constraint: DataObject<TargetEntity>;
29
+ targetResolver: TypeResolver<Entity, typeof Entity>;
20
30
  /**
21
31
  * Constructor of DefaultBelongsToEntityCrudRepository
22
- * @param getTargetRepository - the getter of the related target model repository instance
32
+ * @param getTargetRepository - either a dictionary of target model type - target repository instance
33
+ * or a single target repository instance
34
+ * e.g. if the target is of a non-polymorphic type "Student", put the studentRepositoryGetterInstance
35
+ * if the target is of a polymorphic type "Person" which can be either a "Student" or a "Teacher"
36
+ * then put "{Student: studentRepositoryGetterInstance, Teacher: teacherRepositoryGetterInstance}"
23
37
  * @param constraint - the key value pair representing foreign key name to constrain
24
38
  * the target repository instance
39
+ * @param targetResolver - () => Target to resolve the target class
40
+ * e.g. if the target is of type "Student", then put "() => Student"
25
41
  */
26
- constructor(getTargetRepository: Getter<TargetRepository>, constraint: DataObject<TargetEntity>);
27
- get(options?: Options): Promise<TargetEntity>;
42
+ constructor(getTargetRepository: Getter<TargetRepository> | {
43
+ [repoType: string]: Getter<TargetRepository>;
44
+ }, constraint: DataObject<TargetEntity>, targetResolver: TypeResolver<Entity, typeof Entity>);
45
+ getTargetRepositoryDict: {
46
+ [repoType: string]: Getter<TargetRepository>;
47
+ };
48
+ get(options?: Options & {
49
+ polymorphicType?: string | string[];
50
+ }): Promise<TargetEntity>;
28
51
  }
@@ -1,32 +1,71 @@
1
1
  "use strict";
2
- // Copyright IBM Corp. 2018,2020. All Rights Reserved.
2
+ // Copyright IBM Corp. and LoopBack contributors 2018,2020. All Rights Reserved.
3
3
  // Node module: @loopback/repository
4
4
  // This file is licensed under the MIT License.
5
5
  // License text available at https://opensource.org/licenses/MIT
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.DefaultBelongsToRepository = void 0;
8
- const errors_1 = require("../../errors");
8
+ const lodash_1 = require("lodash");
9
+ const __1 = require("../../");
9
10
  const repositories_1 = require("../../repositories");
10
11
  class DefaultBelongsToRepository {
11
12
  /**
12
13
  * Constructor of DefaultBelongsToEntityCrudRepository
13
- * @param getTargetRepository - the getter of the related target model repository instance
14
+ * @param getTargetRepository - either a dictionary of target model type - target repository instance
15
+ * or a single target repository instance
16
+ * e.g. if the target is of a non-polymorphic type "Student", put the studentRepositoryGetterInstance
17
+ * if the target is of a polymorphic type "Person" which can be either a "Student" or a "Teacher"
18
+ * then put "{Student: studentRepositoryGetterInstance, Teacher: teacherRepositoryGetterInstance}"
14
19
  * @param constraint - the key value pair representing foreign key name to constrain
15
20
  * the target repository instance
21
+ * @param targetResolver - () => Target to resolve the target class
22
+ * e.g. if the target is of type "Student", then put "() => Student"
16
23
  */
17
- constructor(getTargetRepository, constraint) {
24
+ constructor(getTargetRepository, constraint, targetResolver) {
18
25
  this.getTargetRepository = getTargetRepository;
19
26
  this.constraint = constraint;
27
+ this.targetResolver = targetResolver;
28
+ if (typeof getTargetRepository === 'function') {
29
+ this.getTargetRepositoryDict = {
30
+ [targetResolver().name]: getTargetRepository,
31
+ };
32
+ }
33
+ else {
34
+ this.getTargetRepositoryDict = getTargetRepository;
35
+ }
20
36
  }
21
37
  async get(options) {
22
- const targetRepo = await this.getTargetRepository();
23
- const result = await targetRepo.find((0, repositories_1.constrainFilter)(undefined, this.constraint), options);
24
- if (!result.length) {
25
- // We don't have a direct access to the foreign key value here :(
26
- const id = 'constraint ' + JSON.stringify(this.constraint);
27
- throw new errors_1.EntityNotFoundError(targetRepo.entityClass, id);
38
+ let polymorphicTypes = options === null || options === void 0 ? void 0 : options.polymorphicType;
39
+ let allKeys;
40
+ if (Object.keys(this.getTargetRepositoryDict).length <= 1) {
41
+ allKeys = Object.keys(this.getTargetRepositoryDict);
42
+ }
43
+ else if (!polymorphicTypes || polymorphicTypes.length === 0) {
44
+ console.warn('It is highly recommended to specify the polymorphicTypes param when using polymorphic types.');
45
+ allKeys = Object.keys(this.getTargetRepositoryDict);
46
+ }
47
+ else {
48
+ if (typeof polymorphicTypes === 'string') {
49
+ polymorphicTypes = [polymorphicTypes];
50
+ }
51
+ allKeys = [];
52
+ new Set(polymorphicTypes).forEach(element => {
53
+ if (Object.keys(this.getTargetRepositoryDict).includes(element)) {
54
+ allKeys.push(element);
55
+ }
56
+ });
57
+ }
58
+ let result = [];
59
+ for (const key of allKeys) {
60
+ const targetRepository = await this.getTargetRepositoryDict[key]();
61
+ result = result.concat(await targetRepository.find((0, repositories_1.constrainFilter)(undefined, this.constraint), Object.assign((0, lodash_1.cloneDeep)(options !== null && options !== void 0 ? options : {}), { polymorphicType: key })));
62
+ if (result.length >= 1) {
63
+ return result[0];
64
+ }
28
65
  }
29
- return result[0];
66
+ // We don't have a direct access to the foreign key value here :(
67
+ const id = 'constraint ' + JSON.stringify(this.constraint);
68
+ throw new __1.EntityNotFoundError(this.targetResolver().name, id);
30
69
  }
31
70
  }
32
71
  exports.DefaultBelongsToRepository = DefaultBelongsToRepository;
@@ -1 +1 @@
1
- {"version":3,"file":"belongs-to.repository.js","sourceRoot":"","sources":["../../../src/relations/belongs-to/belongs-to.repository.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;AAIhE,yCAAiD;AAEjD,qDAAyE;AAezE,MAAa,0BAA0B;IAMrC;;;;;OAKG;IACH,YACS,mBAA6C,EAC7C,UAAoC;QADpC,wBAAmB,GAAnB,mBAAmB,CAA0B;QAC7C,eAAU,GAAV,UAAU,CAA0B;IAC1C,CAAC;IAEJ,KAAK,CAAC,GAAG,CAAC,OAAiB;QACzB,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAClC,IAAA,8BAAe,EAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,EAC3C,OAAO,CACR,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YAClB,iEAAiE;YACjE,MAAM,EAAE,GAAG,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC3D,MAAM,IAAI,4BAAmB,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;SAC3D;QACD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;CACF;AA9BD,gEA8BC"}
1
+ {"version":3,"file":"belongs-to.repository.js","sourceRoot":"","sources":["../../../src/relations/belongs-to/belongs-to.repository.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;AAGhE,mCAAiC;AACjC,8BAAyD;AAGzD,qDAAyE;AAoBzE,MAAa,0BAA0B;IAMrC;;;;;;;;;;;OAWG;IAEH,YACS,mBAIF,EACE,UAAoC,EACpC,cAAmD;QANnD,wBAAmB,GAAnB,mBAAmB,CAIrB;QACE,eAAU,GAAV,UAAU,CAA0B;QACpC,mBAAc,GAAd,cAAc,CAAqC;QAE1D,IAAI,OAAO,mBAAmB,KAAK,UAAU,EAAE;YAC7C,IAAI,CAAC,uBAAuB,GAAG;gBAC7B,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,EACrB,mBAA+C;aAClD,CAAC;SACH;aAAM;YACL,IAAI,CAAC,uBAAuB,GAAG,mBAE9B,CAAC;SACH;IACH,CAAC;IAMD,KAAK,CAAC,GAAG,CACP,OAAyD;QAEzD,IAAI,gBAAgB,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,eAAe,CAAC;QAChD,IAAI,OAAiB,CAAC;QACtB,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE;YACzD,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;SACrD;aAAM,IAAI,CAAC,gBAAgB,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE;YAC7D,OAAO,CAAC,IAAI,CACV,8FAA8F,CAC/F,CAAC;YACF,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;SACrD;aAAM;YACL,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE;gBACxC,gBAAgB,GAAG,CAAC,gBAAgB,CAAC,CAAC;aACvC;YACD,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,CAAC,gBAAiB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBAC3C,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;oBAC/D,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;iBACvB;YACH,CAAC,CAAC,CAAC;SACJ;QACD,IAAI,MAAM,GAAmB,EAAE,CAAC;QAChC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;YACzB,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,EAAE,CAAC;YACnE,MAAM,GAAG,MAAM,CAAC,MAAM,CACpB,MAAM,gBAAgB,CAAC,IAAI,CACzB,IAAA,8BAAe,EAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,EAC3C,MAAM,CAAC,MAAM,CAAC,IAAA,kBAAS,EAAC,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,CAAC,EAAE,EAAC,eAAe,EAAE,GAAG,EAAC,CAAC,CAChE,CACF,CAAC;YACF,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;gBACtB,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;aAClB;SACF;QACD,iEAAiE;QACjE,MAAM,EAAE,GAAG,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3D,MAAM,IAAI,uBAAmB,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAChE,CAAC;CACF;AApFD,gEAoFC"}
@@ -1,4 +1,4 @@
1
- export * from './belongs-to.decorator';
2
- export * from './belongs-to.repository';
3
1
  export * from './belongs-to.accessor';
2
+ export * from './belongs-to.decorator';
4
3
  export * from './belongs-to.inclusion-resolver';
4
+ export * from './belongs-to.repository';
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
- // Copyright IBM Corp. 2018,2020. All Rights Reserved.
2
+ // Copyright IBM Corp. and LoopBack contributors 2018,2020. All Rights Reserved.
3
3
  // Node module: @loopback/repository
4
4
  // This file is licensed under the MIT License.
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
- tslib_1.__exportStar(require("./belongs-to.decorator"), exports);
9
- tslib_1.__exportStar(require("./belongs-to.repository"), exports);
10
8
  tslib_1.__exportStar(require("./belongs-to.accessor"), exports);
9
+ tslib_1.__exportStar(require("./belongs-to.decorator"), exports);
11
10
  tslib_1.__exportStar(require("./belongs-to.inclusion-resolver"), exports);
11
+ tslib_1.__exportStar(require("./belongs-to.repository"), exports);
12
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/relations/belongs-to/index.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;AAEhE,iEAAuC;AACvC,kEAAwC;AACxC,gEAAsC;AACtC,0EAAgD"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/relations/belongs-to/index.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;AAEhE,gEAAsC;AACtC,iEAAuC;AACvC,0EAAgD;AAChD,kEAAwC"}
@@ -5,6 +5,9 @@ export declare type HasManyThroughResolvedDefinition = HasManyDefinition & {
5
5
  through: {
6
6
  keyTo: string;
7
7
  keyFrom: string;
8
+ polymorphic: false | {
9
+ discriminator: string;
10
+ };
8
11
  };
9
12
  };
10
13
  /**
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
- // Copyright IBM Corp. 2020. All Rights Reserved.
2
+ // Copyright IBM Corp. and LoopBack contributors 2020. All Rights Reserved.
3
3
  // Node module: @loopback/repository
4
4
  // This file is licensed under the MIT License.
5
5
  // License text available at https://opensource.org/licenses/MIT
@@ -246,7 +246,10 @@ function resolveHasManyThroughMetadata(relationMeta) {
246
246
  relationMeta.through.keyFrom &&
247
247
  throughModelProperties[relationMeta.through.keyFrom] &&
248
248
  relationMeta.keyTo &&
249
- targetModelProperties[relationMeta.keyTo]) {
249
+ targetModelProperties[relationMeta.keyTo] &&
250
+ (relationMeta.through.polymorphic === false ||
251
+ (typeof relationMeta.through.polymorphic === 'object' &&
252
+ relationMeta.through.polymorphic.discriminator.length > 0))) {
250
253
  // The explicit cast is needed because of a limitation of type inference
251
254
  return relationMeta;
252
255
  }
@@ -268,6 +271,26 @@ function resolveHasManyThroughMetadata(relationMeta) {
268
271
  const reason = `target model ${targetModel.modelName} does not have any primary key (id property)`;
269
272
  throw new __1.InvalidRelationError(reason, relationMeta);
270
273
  }
274
+ let throughPolymorphic;
275
+ if (relationMeta.through.polymorphic === undefined ||
276
+ relationMeta.through.polymorphic === false ||
277
+ !relationMeta.through.polymorphic) {
278
+ const polymorphicFalse = false;
279
+ throughPolymorphic = polymorphicFalse;
280
+ }
281
+ else {
282
+ if (relationMeta.through.polymorphic === true) {
283
+ const polymorphicObject = {
284
+ discriminator: (0, lodash_1.camelCase)(relationMeta.target().name + '_type'),
285
+ };
286
+ throughPolymorphic = polymorphicObject;
287
+ }
288
+ else {
289
+ const polymorphicObject = relationMeta.through
290
+ .polymorphic;
291
+ throughPolymorphic = polymorphicObject;
292
+ }
293
+ }
271
294
  return Object.assign(relationMeta, {
272
295
  keyTo: targetPrimaryKey,
273
296
  keyFrom: relationMeta.keyFrom,
@@ -275,6 +298,7 @@ function resolveHasManyThroughMetadata(relationMeta) {
275
298
  ...relationMeta.through,
276
299
  keyTo: targetFkName,
277
300
  keyFrom: sourceFkName,
301
+ polymorphic: throughPolymorphic,
278
302
  },
279
303
  });
280
304
  }