UNPKG

1.38 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 {HasOneDefinition, RelationType} from '../relation.types';
9
10/*
11 * Decorator for hasOne
12 * infers foreign key name from target model name unless explicitly specified
13 * @param targetResolver - Target model for hasOne relation
14 * @param definition - Optional metadata for setting up hasOne relation
15 * @returns A property decorator
16 */
17export function hasOne<T extends Entity>(
18 targetResolver: EntityResolver<T>,
19 definition?: Partial<HasOneDefinition>,
20) {
21 return function (decoratedTarget: object, key: string) {
22 // property.array(targetResolver)(decoratedTarget, key);
23
24 const meta: HasOneDefinition = Object.assign(
25 // default values, can be customized by the caller
26 {},
27 // properties provided by the caller
28 definition,
29 // properties enforced by the decorator
30 {
31 type: RelationType.hasOne,
32 targetsMany: false,
33 name: key,
34 source: decoratedTarget.constructor,
35 target: targetResolver,
36 },
37 );
38 relation(meta)(decoratedTarget, key);
39 };
40}