File tree Expand file tree Collapse file tree 2 files changed +26
-4
lines changed
packages/repository/src/relations Expand file tree Collapse file tree 2 files changed +26
-4
lines changed Original file line number Diff line number Diff line change @@ -15,7 +15,10 @@ const debug = debugFactory('loopback:repository:has-many-helpers');
1515 * Relation definition with optional metadata (e.g. `keyTo`) filled in.
1616 * @internal
1717 */
18- export type HasManyResolvedDefinition = HasManyDefinition & { keyTo : string } ;
18+ export type HasManyResolvedDefinition = HasManyDefinition & {
19+ keyFrom : string ;
20+ keyTo : string ;
21+ } ;
1922
2023/**
2124 * Resolves given hasMany metadata if target is specified to be a resolver.
@@ -54,6 +57,14 @@ export function resolveHasManyMetadata(
5457 throw new InvalidRelationError ( reason , relationMeta ) ;
5558 }
5659
60+ // TODO(bajtos) add test coverage (when keyTo is and is not set)
61+ const keyFrom = sourceModel . getIdProperties ( ) [ 0 ] ;
62+
63+ if ( relationMeta . keyTo ) {
64+ // The explict cast is needed because of a limitation of type inference
65+ return Object . assign ( relationMeta , { keyFrom} ) as HasManyResolvedDefinition ;
66+ }
67+
5768 debug (
5869 'Resolved model %s from given metadata: %o' ,
5970 targetModel . modelName ,
@@ -67,5 +78,5 @@ export function resolveHasManyMetadata(
6778 throw new InvalidRelationError ( reason , relationMeta ) ;
6879 }
6980
70- return Object . assign ( relationMeta , { keyTo : defaultFkName } ) ;
81+ return Object . assign ( relationMeta , { keyFrom , keyTo : defaultFkName } ) ;
7182}
Original file line number Diff line number Diff line change @@ -15,7 +15,10 @@ const debug = debugFactory('loopback:repository:has-one-helpers');
1515 * Relation definition with optional metadata (e.g. `keyTo`) filled in.
1616 * @internal
1717 */
18- export type HasOneResolvedDefinition = HasOneDefinition & { keyTo : string } ;
18+ export type HasOneResolvedDefinition = HasOneDefinition & {
19+ keyFrom : string ;
20+ keyTo : string ;
21+ } ;
1922
2023/**
2124 * Resolves given hasOne metadata if target is specified to be a resolver.
@@ -54,6 +57,14 @@ export function resolveHasOneMetadata(
5457 throw new InvalidRelationError ( reason , relationMeta ) ;
5558 }
5659
60+ // TODO(bajtos) add test coverage (when keyTo is and is not set)
61+ const keyFrom = sourceModel . getIdProperties ( ) [ 0 ] ;
62+
63+ if ( relationMeta . keyTo ) {
64+ // The explict cast is needed because of a limitation of type inference
65+ return Object . assign ( relationMeta , { keyFrom} ) as HasOneResolvedDefinition ;
66+ }
67+
5768 debug (
5869 'Resolved model %s from given metadata: %o' ,
5970 targetModel . modelName ,
@@ -67,5 +78,5 @@ export function resolveHasOneMetadata(
6778 throw new InvalidRelationError ( reason , relationMeta ) ;
6879 }
6980
70- return Object . assign ( relationMeta , { keyTo : defaultFkName } ) ;
81+ return Object . assign ( relationMeta , { keyFrom , keyTo : defaultFkName } ) ;
7182}
You can’t perform that action at this time.
0 commit comments