UNPKG

1.37 kBPlain TextView Raw
1// Copyright IBM Corp. and LoopBack contributors 2018,2020. All Rights Reserved.
2// Node module: @loopback/repository
3// This file is licensed under the MIT License.
4// License text available at https://opensource.org/licenses/MIT
5
6import {Entity, EntityResolver} from '../../model';
7import {relation} from '../relation.decorator';
8import {HasManyDefinition, RelationType} from '../relation.types';
9
10/**
11 * Decorator for hasMany
12 * Calls property.array decorator underneath the hood and infers foreign key
13 * name from target model name unless explicitly specified
14 * @param targetResolver - Target model for hasMany relation
15 * @param definition - Optional metadata for setting up hasMany relation
16 * @returns A property decorator
17 */
18export function hasMany<T extends Entity>(
19 targetResolver: EntityResolver<T>,
20 definition?: Partial<HasManyDefinition>,
21) {
22 return function (decoratedTarget: object, key: string) {
23 const meta: HasManyDefinition = Object.assign(
24 // default values, can be customized by the caller
25 {name: key},
26 // properties provided by the caller
27 definition,
28 // properties enforced by the decorator
29 {
30 type: RelationType.hasMany,
31 targetsMany: true,
32 source: decoratedTarget.constructor,
33 target: targetResolver,
34 },
35 );
36 relation(meta)(decoratedTarget, key);
37 };
38}