@loopback/repository 4.1.2 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/dist/errors/index.d.ts +1 -0
  2. package/dist/errors/index.js +1 -0
  3. package/dist/errors/index.js.map +1 -1
  4. package/dist/errors/invalid-polymorphism.error.d.ts +5 -0
  5. package/dist/errors/invalid-polymorphism.error.js +22 -0
  6. package/dist/errors/invalid-polymorphism.error.js.map +1 -0
  7. package/dist/model.d.ts +7 -1
  8. package/dist/model.js +14 -0
  9. package/dist/model.js.map +1 -1
  10. package/dist/relations/belongs-to/belongs-to.accessor.d.ts +6 -2
  11. package/dist/relations/belongs-to/belongs-to.accessor.js +18 -5
  12. package/dist/relations/belongs-to/belongs-to.accessor.js.map +1 -1
  13. package/dist/relations/belongs-to/belongs-to.helpers.d.ts +3 -0
  14. package/dist/relations/belongs-to/belongs-to.helpers.js +32 -8
  15. package/dist/relations/belongs-to/belongs-to.helpers.js.map +1 -1
  16. package/dist/relations/belongs-to/belongs-to.inclusion-resolver.d.ts +5 -2
  17. package/dist/relations/belongs-to/belongs-to.inclusion-resolver.js +81 -8
  18. package/dist/relations/belongs-to/belongs-to.inclusion-resolver.js.map +1 -1
  19. package/dist/relations/belongs-to/belongs-to.repository.d.ts +28 -5
  20. package/dist/relations/belongs-to/belongs-to.repository.js +49 -10
  21. package/dist/relations/belongs-to/belongs-to.repository.js.map +1 -1
  22. package/dist/relations/has-many/has-many-through.helpers.d.ts +3 -0
  23. package/dist/relations/has-many/has-many-through.helpers.js +25 -1
  24. package/dist/relations/has-many/has-many-through.helpers.js.map +1 -1
  25. package/dist/relations/has-many/has-many-through.inclusion-resolver.d.ts +3 -1
  26. package/dist/relations/has-many/has-many-through.inclusion-resolver.js +92 -21
  27. package/dist/relations/has-many/has-many-through.inclusion-resolver.js.map +1 -1
  28. package/dist/relations/has-many/has-many-through.repository-factory.d.ts +3 -1
  29. package/dist/relations/has-many/has-many-through.repository-factory.js +7 -1
  30. package/dist/relations/has-many/has-many-through.repository-factory.js.map +1 -1
  31. package/dist/relations/has-many/has-many-through.repository.d.ts +66 -11
  32. package/dist/relations/has-many/has-many-through.repository.js +211 -35
  33. package/dist/relations/has-many/has-many-through.repository.js.map +1 -1
  34. package/dist/relations/has-one/has-one.helpers.d.ts +3 -0
  35. package/dist/relations/has-one/has-one.helpers.js +34 -8
  36. package/dist/relations/has-one/has-one.helpers.js.map +1 -1
  37. package/dist/relations/has-one/has-one.inclusion-resolver.d.ts +6 -3
  38. package/dist/relations/has-one/has-one.inclusion-resolver.js +82 -7
  39. package/dist/relations/has-one/has-one.inclusion-resolver.js.map +1 -1
  40. package/dist/relations/has-one/has-one.repository-factory.d.ts +9 -3
  41. package/dist/relations/has-one/has-one.repository-factory.js +13 -3
  42. package/dist/relations/has-one/has-one.repository-factory.js.map +1 -1
  43. package/dist/relations/has-one/has-one.repository.d.ts +58 -11
  44. package/dist/relations/has-one/has-one.repository.js +118 -15
  45. package/dist/relations/has-one/has-one.repository.js.map +1 -1
  46. package/dist/relations/index.d.ts +2 -0
  47. package/dist/relations/index.js +2 -0
  48. package/dist/relations/index.js.map +1 -1
  49. package/dist/relations/references-many/index.d.ts +4 -0
  50. package/dist/relations/references-many/index.js +12 -0
  51. package/dist/relations/references-many/index.js.map +1 -0
  52. package/dist/relations/references-many/references-many.accessor.d.ts +17 -0
  53. package/dist/relations/references-many/references-many.accessor.js +40 -0
  54. package/dist/relations/references-many/references-many.accessor.js.map +1 -0
  55. package/dist/relations/references-many/references-many.decorator.d.ts +11 -0
  56. package/dist/relations/references-many/references-many.decorator.js +73 -0
  57. package/dist/relations/references-many/references-many.decorator.js.map +1 -0
  58. package/dist/relations/references-many/references-many.helpers.d.ts +17 -0
  59. package/dist/relations/references-many/references-many.helpers.js +63 -0
  60. package/dist/relations/references-many/references-many.helpers.js.map +1 -0
  61. package/dist/relations/references-many/references-many.inclusion-resolver.d.ts +14 -0
  62. package/dist/relations/references-many/references-many.inclusion-resolver.js +42 -0
  63. package/dist/relations/references-many/references-many.inclusion-resolver.js.map +1 -0
  64. package/dist/relations/references-many/references-many.repository.d.ts +28 -0
  65. package/dist/relations/references-many/references-many.repository.js +33 -0
  66. package/dist/relations/references-many/references-many.repository.js.map +1 -0
  67. package/dist/relations/relation.decorator.d.ts +0 -6
  68. package/dist/relations/relation.decorator.js +1 -13
  69. package/dist/relations/relation.decorator.js.map +1 -1
  70. package/dist/relations/relation.filter.solver.d.ts +2 -0
  71. package/dist/relations/relation.filter.solver.js +57 -0
  72. package/dist/relations/relation.filter.solver.js.map +1 -0
  73. package/dist/relations/relation.helpers.js +16 -1
  74. package/dist/relations/relation.helpers.js.map +1 -1
  75. package/dist/relations/relation.types.d.ts +52 -1
  76. package/dist/relations/relation.types.js.map +1 -1
  77. package/dist/repositories/legacy-juggler-bridge.d.ts +35 -8
  78. package/dist/repositories/legacy-juggler-bridge.js +36 -14
  79. package/dist/repositories/legacy-juggler-bridge.js.map +1 -1
  80. package/package.json +13 -13
  81. package/src/errors/index.ts +1 -0
  82. package/src/errors/invalid-polymorphism.error.ts +28 -0
  83. package/src/model.ts +19 -0
  84. package/src/relations/belongs-to/belongs-to.accessor.ts +35 -6
  85. package/src/relations/belongs-to/belongs-to.helpers.ts +36 -9
  86. package/src/relations/belongs-to/belongs-to.inclusion-resolver.ts +108 -17
  87. package/src/relations/belongs-to/belongs-to.repository.ts +77 -17
  88. package/src/relations/has-many/has-many-through.helpers.ts +27 -1
  89. package/src/relations/has-many/has-many-through.inclusion-resolver.ts +117 -26
  90. package/src/relations/has-many/has-many-through.repository-factory.ts +21 -3
  91. package/src/relations/has-many/has-many-through.repository.ts +343 -76
  92. package/src/relations/has-one/has-one.helpers.ts +40 -13
  93. package/src/relations/has-one/has-one.inclusion-resolver.ts +109 -15
  94. package/src/relations/has-one/has-one.repository-factory.ts +34 -6
  95. package/src/relations/has-one/has-one.repository.ts +188 -35
  96. package/src/relations/index.ts +2 -0
  97. package/src/relations/references-many/index.ts +9 -0
  98. package/src/relations/references-many/references-many.accessor.ts +76 -0
  99. package/src/relations/references-many/references-many.decorator.ts +100 -0
  100. package/src/relations/references-many/references-many.helpers.ts +82 -0
  101. package/src/relations/references-many/references-many.inclusion-resolver.ts +80 -0
  102. package/src/relations/references-many/references-many.repository.ts +55 -0
  103. package/src/relations/relation.decorator.ts +0 -12
  104. package/src/relations/relation.filter.solver.ts +56 -0
  105. package/src/relations/relation.helpers.ts +16 -1
  106. package/src/relations/relation.types.ts +51 -0
  107. package/src/repositories/legacy-juggler-bridge.ts +78 -14
@@ -1 +1 @@
1
- {"version":3,"file":"legacy-juggler-bridge.js","sourceRoot":"","sources":["../../src/repositories/legacy-juggler-bridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"legacy-juggler-bridge.js","sourceRoot":"","sources":["../../src/repositories/legacy-juggler-bridge.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@loopback/repository",
3
3
  "description": "Define and implement a common set of interfaces for interacting with databases",
4
- "version": "4.1.2",
4
+ "version": "5.0.0",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -13,7 +13,7 @@
13
13
  "directory": "packages/repository"
14
14
  },
15
15
  "engines": {
16
- "node": "12 || 14 || 16 || 17"
16
+ "node": "14 || 16 || 17 || 18"
17
17
  },
18
18
  "scripts": {
19
19
  "acceptance": "lb-mocha \"dist/__tests__/acceptance/**/*.js\"",
@@ -33,26 +33,26 @@
33
33
  "!*/__tests__"
34
34
  ],
35
35
  "peerDependencies": {
36
- "@loopback/core": "^3.1.2"
36
+ "@loopback/core": "^4.0.0"
37
37
  },
38
38
  "dependencies": {
39
- "@loopback/filter": "^2.1.2",
39
+ "@loopback/filter": "^3.0.0",
40
40
  "@types/debug": "^4.1.7",
41
41
  "debug": "^4.3.4",
42
42
  "lodash": "^4.17.21",
43
43
  "loopback-datasource-juggler": "^4.27.1",
44
- "tslib": "^2.3.1"
44
+ "tslib": "^2.4.0"
45
45
  },
46
46
  "devDependencies": {
47
- "@loopback/build": "^8.1.2",
48
- "@loopback/core": "^3.1.2",
49
- "@loopback/eslint-config": "^12.0.4",
50
- "@loopback/testlab": "^4.1.2",
47
+ "@loopback/build": "^9.0.0",
48
+ "@loopback/core": "^4.0.0",
49
+ "@loopback/eslint-config": "^13.0.0",
50
+ "@loopback/testlab": "^5.0.0",
51
51
  "@types/bson": "^4.0.5",
52
52
  "@types/json-schema": "^7.0.11",
53
- "@types/lodash": "^4.14.180",
54
- "@types/node": "^12.20.47",
55
- "bson": "4.6.2"
53
+ "@types/lodash": "^4.14.182",
54
+ "@types/node": "^12.20.50",
55
+ "bson": "4.6.3"
56
56
  },
57
- "gitHead": "22d993c73a7b4ccdb36f2e26ea52460dc46fbd11"
57
+ "gitHead": "61453a3d7a16f9f37875a3f2c2a071568eb3e3af"
58
58
  }
@@ -5,3 +5,4 @@
5
5
 
6
6
  export * from './entity-not-found.error';
7
7
  export * from './invalid-relation.error';
8
+ export * from './invalid-polymorphism.error';
@@ -0,0 +1,28 @@
1
+ export class InvalidPolymorphismError<Props extends object = {}> extends Error {
2
+ code: string;
3
+
4
+ constructor(
5
+ typeName: string,
6
+ discriminator?: string,
7
+ extraProperties?: Props,
8
+ ) {
9
+ const message = discriminator
10
+ ? `Invalid class name ${typeName} by discriminator ${discriminator}. Please check polymorphic types and the discriminator.`
11
+ : `Invalid class name ${typeName}. Please check polymorphic types and the discriminator.`;
12
+ super(message);
13
+
14
+ Error.captureStackTrace(this, this.constructor);
15
+
16
+ this.code = 'INVALID_POLYMORPHISM';
17
+
18
+ Object.assign(this, extraProperties);
19
+ }
20
+ }
21
+
22
+ export function isInvalidPolymorphismError(
23
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
24
+ e: any,
25
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
26
+ ): e is InvalidPolymorphismError<any> {
27
+ return e instanceof InvalidPolymorphismError;
28
+ }
package/src/model.ts CHANGED
@@ -8,6 +8,7 @@ import {
8
8
  BelongsToDefinition,
9
9
  HasManyDefinition,
10
10
  HasOneDefinition,
11
+ ReferencesManyDefinition,
11
12
  JsonSchema,
12
13
  RelationMetadata,
13
14
  RelationType,
@@ -240,6 +241,24 @@ export class ModelDefinition {
240
241
  return this.addRelation(meta);
241
242
  }
242
243
 
244
+ /**
245
+ * Define a new referencesMany relation.
246
+ * @param name - The name of the referencesMany relation.
247
+ * @param definition - The definition of the referencesMany relation.
248
+ */
249
+ referencesMany(
250
+ name: string,
251
+ definition: Omit<ReferencesManyDefinition, 'name' | 'type' | 'targetsMany'>,
252
+ ): this {
253
+ const meta: ReferencesManyDefinition = {
254
+ ...definition,
255
+ name,
256
+ type: RelationType.referencesMany,
257
+ targetsMany: true,
258
+ };
259
+ return this.addRelation(meta);
260
+ }
261
+
243
262
  /**
244
263
  * Get an array of names of ID properties, which are specified in
245
264
  * the model settings or properties with `id` attribute.
@@ -22,7 +22,7 @@ export interface BelongsToAccessor<Target extends Entity, SourceId> {
22
22
  /**
23
23
  * Invoke the function to obtain HasManyRepository.
24
24
  */
25
- (sourceId: SourceId): Promise<Target>;
25
+ (sourceId: SourceId, polymorphicTypes?: string | string[]): Promise<Target>;
26
26
 
27
27
  /**
28
28
  * Use `resolver` property to obtain an InclusionResolver for this relation.
@@ -32,6 +32,8 @@ export interface BelongsToAccessor<Target extends Entity, SourceId> {
32
32
 
33
33
  /**
34
34
  * Enforces a BelongsTo constraint on a repository
35
+ * If the target model is polymorphic, i.e. stored within different repositories,
36
+ * supply the targetRepositoryGetter with a dictionary in the form of {[typeName: string]: repositoryGetter}
35
37
  */
36
38
  export function createBelongsToAccessor<
37
39
  Target extends Entity,
@@ -40,13 +42,35 @@ export function createBelongsToAccessor<
40
42
  SourceId,
41
43
  >(
42
44
  belongsToMetadata: BelongsToDefinition,
43
- targetRepoGetter: Getter<EntityCrudRepository<Target, TargetId>>,
45
+ targetRepositoryGetter:
46
+ | Getter<EntityCrudRepository<Target, TargetId>>
47
+ | {
48
+ [repoType: string]: Getter<EntityCrudRepository<Target, TargetId>>;
49
+ },
44
50
  sourceRepository: EntityCrudRepository<Source, SourceId>,
45
51
  ): BelongsToAccessor<Target, SourceId> {
46
52
  const meta = resolveBelongsToMetadata(belongsToMetadata);
53
+ // resolve the repositoryGetter into a dictionary
54
+ if (typeof targetRepositoryGetter === 'function') {
55
+ targetRepositoryGetter = {
56
+ [meta.target().name]: targetRepositoryGetter as Getter<
57
+ EntityCrudRepository<Target, TargetId>
58
+ >,
59
+ };
60
+ }
47
61
  debug('Resolved BelongsTo relation metadata: %o', meta);
48
62
  const result: BelongsToAccessor<Target, SourceId> =
49
- async function getTargetInstanceOfBelongsTo(sourceId: SourceId) {
63
+ async function getTargetInstanceOfBelongsTo(
64
+ sourceId: SourceId,
65
+ polymorphicTypes?: string | string[],
66
+ ) {
67
+ if (meta.polymorphic !== false) {
68
+ if (!polymorphicTypes || polymorphicTypes.length === 0) {
69
+ console.warn(
70
+ 'It is highly recommended to specify the polymorphicTypes param when using polymorphic types.',
71
+ );
72
+ }
73
+ }
50
74
  const foreignKey = meta.keyFrom;
51
75
  const primaryKey = meta.keyTo;
52
76
  const sourceModel = await sourceRepository.findById(sourceId);
@@ -60,15 +84,20 @@ export function createBelongsToAccessor<
60
84
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
61
85
  const constraint: any = {[primaryKey]: foreignKeyValue};
62
86
  const constrainedRepo = new DefaultBelongsToRepository(
63
- targetRepoGetter,
87
+ targetRepositoryGetter as {
88
+ [repoType: string]: Getter<EntityCrudRepository<Target, TargetId>>;
89
+ },
64
90
  constraint as DataObject<Target>,
91
+ belongsToMetadata.target,
65
92
  );
66
- return constrainedRepo.get();
93
+ return constrainedRepo.get({polymorphicType: polymorphicTypes});
67
94
  };
68
95
 
69
96
  result.inclusionResolver = createBelongsToInclusionResolver(
70
97
  meta,
71
- targetRepoGetter,
98
+ targetRepositoryGetter as {
99
+ [repoType: string]: Getter<EntityCrudRepository<Target, TargetId>>;
100
+ },
72
101
  );
73
102
  return result;
74
103
  }
@@ -18,6 +18,7 @@ const debug = debugFactory('loopback:repository:relations:belongs-to:helpers');
18
18
  export type BelongsToResolvedDefinition = BelongsToDefinition & {
19
19
  keyFrom: string;
20
20
  keyTo: string;
21
+ polymorphic: false | {discriminator: string};
21
22
  };
22
23
 
23
24
  /**
@@ -27,7 +28,9 @@ export type BelongsToResolvedDefinition = BelongsToDefinition & {
27
28
  * @param relationMeta - belongsTo metadata to resolve
28
29
  * @internal
29
30
  */
30
- export function resolveBelongsToMetadata(relationMeta: BelongsToDefinition) {
31
+ export function resolveBelongsToMetadata(
32
+ relationMeta: BelongsToDefinition,
33
+ ): BelongsToResolvedDefinition {
31
34
  if ((relationMeta.type as RelationType) !== RelationType.belongsTo) {
32
35
  const reason = 'relation type must be BelongsTo';
33
36
  throw new InvalidRelationError(reason, relationMeta);
@@ -61,18 +64,42 @@ export function resolveBelongsToMetadata(relationMeta: BelongsToDefinition) {
61
64
  const targetProperties = targetModel.definition.properties;
62
65
  debug('relation metadata from %o: %o', targetName, targetProperties);
63
66
 
67
+ let keyTo;
64
68
  if (relationMeta.keyTo && targetProperties[relationMeta.keyTo]) {
65
69
  // The explicit cast is needed because of a limitation of type inference
66
- return Object.assign(relationMeta, {
67
- keyFrom,
68
- }) as BelongsToResolvedDefinition;
70
+ keyTo = relationMeta.keyTo;
71
+ } else {
72
+ keyTo = targetModel.definition.idProperties()[0];
73
+ if (!keyTo) {
74
+ const reason = `${targetName} does not have any primary key (id property)`;
75
+ throw new InvalidRelationError(reason, relationMeta);
76
+ }
69
77
  }
70
78
 
71
- const targetPrimaryKey = targetModel.definition.idProperties()[0];
72
- if (!targetPrimaryKey) {
73
- const reason = `${targetName} does not have any primary key (id property)`;
74
- throw new InvalidRelationError(reason, relationMeta);
79
+ let polymorphic: false | {discriminator: string};
80
+ if (
81
+ relationMeta.polymorphic === undefined ||
82
+ relationMeta.polymorphic === false ||
83
+ !relationMeta.polymorphic
84
+ ) {
85
+ const polymorphicFalse = false as const;
86
+ polymorphic = polymorphicFalse;
87
+ } else {
88
+ if (relationMeta.polymorphic === true) {
89
+ const polymorphicObject: {discriminator: string} = {
90
+ discriminator: camelCase(relationMeta.target().name + '_type'),
91
+ };
92
+ polymorphic = polymorphicObject;
93
+ } else {
94
+ const polymorphicObject: {discriminator: string} =
95
+ relationMeta.polymorphic as {discriminator: string};
96
+ polymorphic = polymorphicObject;
97
+ }
75
98
  }
76
99
 
77
- return Object.assign(relationMeta, {keyFrom, keyTo: targetPrimaryKey});
100
+ return Object.assign(relationMeta, {
101
+ keyFrom,
102
+ keyTo: keyTo,
103
+ polymorphic: polymorphic,
104
+ });
78
105
  }
@@ -4,6 +4,7 @@
4
4
  // License text available at https://opensource.org/licenses/MIT
5
5
 
6
6
  import {Filter, InclusionFilter} from '@loopback/filter';
7
+ import {includeFieldIfNot, InvalidPolymorphismError} from '../../';
7
8
  import {AnyObject, Options} from '../../common-types';
8
9
  import {Entity} from '../../model';
9
10
  import {EntityCrudRepository} from '../../repositories';
@@ -28,7 +29,8 @@ import {resolveBelongsToMetadata} from './belongs-to.helpers';
28
29
  * Notice: scope field for inclusion is not supported yet
29
30
  *
30
31
  * @param meta - resolved BelongsToMetadata
31
- * @param getTargetRepo - target repository i.e where related instances are
32
+ * @param getTargetRepoDict - dictionary of target model type - target repository
33
+ * i.e where related instances for different types are
32
34
  */
33
35
  export function createBelongsToInclusionResolver<
34
36
  Target extends Entity,
@@ -36,36 +38,125 @@ export function createBelongsToInclusionResolver<
36
38
  TargetRelations extends object,
37
39
  >(
38
40
  meta: BelongsToDefinition,
39
- getTargetRepo: Getter<
40
- EntityCrudRepository<Target, TargetID, TargetRelations>
41
- >,
41
+ getTargetRepoDict: {
42
+ [repoType: string]: Getter<
43
+ EntityCrudRepository<Target, TargetID, TargetRelations>
44
+ >;
45
+ },
42
46
  ): InclusionResolver<Entity, Target> {
43
47
  const relationMeta = resolveBelongsToMetadata(meta);
44
48
 
45
- return async function fetchIncludedModels(
49
+ return async function fetchBelongsToModel(
46
50
  entities: Entity[],
47
51
  inclusion: InclusionFilter,
48
52
  options?: Options,
49
- ): Promise<((Target & TargetRelations) | undefined)[]> {
53
+ ): Promise<((Target & object) | undefined)[]> {
50
54
  if (!entities.length) return [];
51
55
 
56
+ // Source ids are grouped by their target polymorphic types
57
+ // Each type search for target instances and then merge together in a merge-sort-like manner
58
+
52
59
  const sourceKey = relationMeta.keyFrom;
53
- const sourceIds = entities.map(e => (e as AnyObject)[sourceKey]);
54
60
  const targetKey = relationMeta.keyTo as StringKeyOf<Target>;
55
- const dedupedSourceIds = deduplicate(sourceIds);
61
+ const targetDiscriminator: keyof Entity | undefined =
62
+ relationMeta.polymorphic
63
+ ? (relationMeta.polymorphic.discriminator as keyof Entity)
64
+ : undefined;
56
65
 
57
66
  const scope =
58
67
  typeof inclusion === 'string' ? {} : (inclusion.scope as Filter<Target>);
59
68
 
60
- const targetRepo = await getTargetRepo();
61
- const targetsFound = await findByForeignKeys(
62
- targetRepo,
63
- targetKey,
64
- dedupedSourceIds.filter(e => e),
65
- scope,
66
- options,
67
- );
69
+ // sourceIds in {targetType -> sourceId}
70
+ const sourceIdsCategorized: {
71
+ [concreteItemType: string]: Target[StringKeyOf<Target>][];
72
+ } = {};
73
+ if (targetDiscriminator) {
74
+ entities.forEach((value, index, allEntites) => {
75
+ const concreteType = String(value[targetDiscriminator]);
76
+ if (!getTargetRepoDict[concreteType]) {
77
+ throw new InvalidPolymorphismError(concreteType, targetDiscriminator);
78
+ }
79
+ if (!sourceIdsCategorized[concreteType]) {
80
+ sourceIdsCategorized[concreteType] = [];
81
+ }
82
+ sourceIdsCategorized[concreteType].push(
83
+ (value as AnyObject)[sourceKey],
84
+ );
85
+ });
86
+ } else {
87
+ const concreteType = relationMeta.target().name;
88
+ if (!getTargetRepoDict[concreteType]) {
89
+ throw new InvalidPolymorphismError(concreteType);
90
+ }
91
+ entities.forEach((value, index, allEntites) => {
92
+ if (!sourceIdsCategorized[concreteType]) {
93
+ sourceIdsCategorized[concreteType] = [];
94
+ }
95
+ sourceIdsCategorized[concreteType].push(
96
+ (value as AnyObject)[sourceKey],
97
+ );
98
+ });
99
+ }
100
+
101
+ // Ensure targetKey is included otherwise flatten function cannot work
102
+ const changedTargetKeyField = includeFieldIfNot(scope?.fields, targetKey);
103
+ let needToRemoveTargetKeyFieldLater = false;
104
+ if (changedTargetKeyField !== false) {
105
+ scope.fields = changedTargetKeyField;
106
+ needToRemoveTargetKeyFieldLater = true;
107
+ }
108
+ // Each sourceIds array with same target type extract target instances
109
+ const targetCategorized: {
110
+ [concreteItemType: string]: ((Target & TargetRelations) | undefined)[];
111
+ } = {};
112
+ for (const k of Object.keys(sourceIdsCategorized)) {
113
+ const targetRepo = await getTargetRepoDict[k]();
114
+ const targetsFound = await findByForeignKeys(
115
+ targetRepo,
116
+ targetKey,
117
+ deduplicate(sourceIdsCategorized[k]).filter(e => e),
118
+ scope,
119
+ options,
120
+ );
121
+ targetCategorized[k] = flattenTargetsOfOneToOneRelation(
122
+ sourceIdsCategorized[k],
123
+ targetsFound,
124
+ targetKey,
125
+ );
126
+
127
+ // Remove targetKey if should be excluded but included above
128
+ if (needToRemoveTargetKeyFieldLater) {
129
+ targetCategorized[k] = targetCategorized[k].map(e => {
130
+ if (e) {
131
+ delete e[targetKey];
132
+ }
133
+ return e;
134
+ });
135
+ }
136
+ }
68
137
 
69
- return flattenTargetsOfOneToOneRelation(sourceIds, targetsFound, targetKey);
138
+ // Merge
139
+ // Why the order is correct:
140
+ // e.g. target model 1 = a, target model 2 = b
141
+ // all entities: [S(a-1), S(a-2), S(b-3), S(a-4), S(b-5)]
142
+ // a-result: [a-1, a-2, a-4]
143
+ // b-result: [b-3, b-4]
144
+ // merged:
145
+ // entities[1]->a => targets: [a-1 from a-result.shift()]
146
+ // entities[2]->a => targets: [a-1, a-2 from a-result.shift()]
147
+ // entities[3]->b => targets: [a-1, a-2, b-3 from b-result.shift()]
148
+ // entities[4]->a => targets: [a-1, a-2, b-3, a-4 from a-result.shift()]
149
+ // entities[5]->b => targets: [a-1, a-2, b-3, a-4, b-5 from b-result.shift()]
150
+ if (targetDiscriminator) {
151
+ const allTargets: ((Target & TargetRelations) | undefined)[] = [];
152
+ entities.forEach((value, index, allEntites) => {
153
+ allTargets.push(
154
+ targetCategorized[String(value[targetDiscriminator])].shift(),
155
+ );
156
+ });
157
+ return allTargets;
158
+ } else {
159
+ return targetCategorized[relationMeta.target().name];
160
+ }
70
161
  };
71
162
  }
@@ -4,11 +4,11 @@
4
4
  // License text available at https://opensource.org/licenses/MIT
5
5
 
6
6
  import {Getter} from '@loopback/core';
7
+ import {cloneDeep} from 'lodash';
8
+ import {EntityNotFoundError, TypeResolver} from '../../';
7
9
  import {DataObject, Options} from '../../common-types';
8
- import {EntityNotFoundError} from '../../errors';
9
10
  import {Entity} from '../../model';
10
11
  import {constrainFilter, EntityCrudRepository} from '../../repositories';
11
-
12
12
  /**
13
13
  * CRUD operations for a target repository of a BelongsTo relation
14
14
  */
@@ -16,10 +16,16 @@ export interface BelongsToRepository<Target extends Entity> {
16
16
  /**
17
17
  * Gets the target model instance
18
18
  * @param options
19
+ * options.polymorphicType - a string or a string array of polymorphic type names
20
+ * to specify which repositories should are expected to be searched
21
+ * It is highly recommended to contain this param especially for
22
+ * datasources using deplicated ids across tables
19
23
  * @returns A promise resolved with the target object or rejected
20
24
  * with an EntityNotFoundError when target model instance was not found.
21
25
  */
22
- get(options?: Options): Promise<Target>;
26
+ get(
27
+ options?: Options & {polymorphicType?: string | string[]},
28
+ ): Promise<Target>;
23
29
  }
24
30
 
25
31
  export class DefaultBelongsToRepository<
@@ -30,26 +36,80 @@ export class DefaultBelongsToRepository<
30
36
  {
31
37
  /**
32
38
  * Constructor of DefaultBelongsToEntityCrudRepository
33
- * @param getTargetRepository - the getter of the related target model repository instance
39
+ * @param getTargetRepository - either a dictionary of target model type - target repository instance
40
+ * or a single target repository instance
41
+ * e.g. if the target is of a non-polymorphic type "Student", put the studentRepositoryGetterInstance
42
+ * if the target is of a polymorphic type "Person" which can be either a "Student" or a "Teacher"
43
+ * then put "{Student: studentRepositoryGetterInstance, Teacher: teacherRepositoryGetterInstance}"
34
44
  * @param constraint - the key value pair representing foreign key name to constrain
35
45
  * the target repository instance
46
+ * @param targetResolver - () => Target to resolve the target class
47
+ * e.g. if the target is of type "Student", then put "() => Student"
36
48
  */
49
+
37
50
  constructor(
38
- public getTargetRepository: Getter<TargetRepository>,
51
+ public getTargetRepository:
52
+ | Getter<TargetRepository>
53
+ | {
54
+ [repoType: string]: Getter<TargetRepository>;
55
+ },
39
56
  public constraint: DataObject<TargetEntity>,
40
- ) {}
57
+ public targetResolver: TypeResolver<Entity, typeof Entity>,
58
+ ) {
59
+ if (typeof getTargetRepository === 'function') {
60
+ this.getTargetRepositoryDict = {
61
+ [targetResolver().name]:
62
+ getTargetRepository as Getter<TargetRepository>,
63
+ };
64
+ } else {
65
+ this.getTargetRepositoryDict = getTargetRepository as {
66
+ [repoType: string]: Getter<TargetRepository>;
67
+ };
68
+ }
69
+ }
70
+
71
+ public getTargetRepositoryDict: {
72
+ [repoType: string]: Getter<TargetRepository>;
73
+ };
41
74
 
42
- async get(options?: Options): Promise<TargetEntity> {
43
- const targetRepo = await this.getTargetRepository();
44
- const result = await targetRepo.find(
45
- constrainFilter(undefined, this.constraint),
46
- options,
47
- );
48
- if (!result.length) {
49
- // We don't have a direct access to the foreign key value here :(
50
- const id = 'constraint ' + JSON.stringify(this.constraint);
51
- throw new EntityNotFoundError(targetRepo.entityClass, id);
75
+ async get(
76
+ options?: Options & {polymorphicType?: string | string[]},
77
+ ): Promise<TargetEntity> {
78
+ let polymorphicTypes = options?.polymorphicType;
79
+ let allKeys: string[];
80
+ if (Object.keys(this.getTargetRepositoryDict).length <= 1) {
81
+ allKeys = Object.keys(this.getTargetRepositoryDict);
82
+ } else if (!polymorphicTypes || polymorphicTypes.length === 0) {
83
+ console.warn(
84
+ 'It is highly recommended to specify the polymorphicTypes param when using polymorphic types.',
85
+ );
86
+ allKeys = Object.keys(this.getTargetRepositoryDict);
87
+ } else {
88
+ if (typeof polymorphicTypes === 'string') {
89
+ polymorphicTypes = [polymorphicTypes];
90
+ }
91
+ allKeys = [];
92
+ new Set(polymorphicTypes!).forEach(element => {
93
+ if (Object.keys(this.getTargetRepositoryDict).includes(element)) {
94
+ allKeys.push(element);
95
+ }
96
+ });
97
+ }
98
+ let result: TargetEntity[] = [];
99
+ for (const key of allKeys) {
100
+ const targetRepository = await this.getTargetRepositoryDict[key]();
101
+ result = result.concat(
102
+ await targetRepository.find(
103
+ constrainFilter(undefined, this.constraint),
104
+ Object.assign(cloneDeep(options ?? {}), {polymorphicType: key}),
105
+ ),
106
+ );
107
+ if (result.length >= 1) {
108
+ return result[0];
109
+ }
52
110
  }
53
- return result[0];
111
+ // We don't have a direct access to the foreign key value here :(
112
+ const id = 'constraint ' + JSON.stringify(this.constraint);
113
+ throw new EntityNotFoundError(this.targetResolver().name, id);
54
114
  }
55
115
  }
@@ -25,6 +25,7 @@ export type HasManyThroughResolvedDefinition = HasManyDefinition & {
25
25
  through: {
26
26
  keyTo: string;
27
27
  keyFrom: string;
28
+ polymorphic: false | {discriminator: string};
28
29
  };
29
30
  };
30
31
 
@@ -308,7 +309,10 @@ export function resolveHasManyThroughMetadata(
308
309
  relationMeta.through.keyFrom &&
309
310
  throughModelProperties[relationMeta.through.keyFrom] &&
310
311
  relationMeta.keyTo &&
311
- targetModelProperties[relationMeta.keyTo]
312
+ targetModelProperties[relationMeta.keyTo] &&
313
+ (relationMeta.through.polymorphic === false ||
314
+ (typeof relationMeta.through.polymorphic === 'object' &&
315
+ relationMeta.through.polymorphic.discriminator.length > 0))
312
316
  ) {
313
317
  // The explicit cast is needed because of a limitation of type inference
314
318
  return relationMeta as HasManyThroughResolvedDefinition;
@@ -349,6 +353,27 @@ export function resolveHasManyThroughMetadata(
349
353
  throw new InvalidRelationError(reason, relationMeta);
350
354
  }
351
355
 
356
+ let throughPolymorphic: false | {discriminator: string};
357
+ if (
358
+ relationMeta.through.polymorphic === undefined ||
359
+ relationMeta.through.polymorphic === false ||
360
+ !relationMeta.through.polymorphic
361
+ ) {
362
+ const polymorphicFalse = false as const;
363
+ throughPolymorphic = polymorphicFalse;
364
+ } else {
365
+ if (relationMeta.through.polymorphic === true) {
366
+ const polymorphicObject: {discriminator: string} = {
367
+ discriminator: camelCase(relationMeta.target().name + '_type'),
368
+ };
369
+ throughPolymorphic = polymorphicObject;
370
+ } else {
371
+ const polymorphicObject: {discriminator: string} = relationMeta.through
372
+ .polymorphic as {discriminator: string};
373
+ throughPolymorphic = polymorphicObject;
374
+ }
375
+ }
376
+
352
377
  return Object.assign(relationMeta, {
353
378
  keyTo: targetPrimaryKey,
354
379
  keyFrom: relationMeta.keyFrom!,
@@ -356,6 +381,7 @@ export function resolveHasManyThroughMetadata(
356
381
  ...relationMeta.through,
357
382
  keyTo: targetFkName,
358
383
  keyFrom: sourceFkName,
384
+ polymorphic: throughPolymorphic,
359
385
  },
360
386
  });
361
387
  }