@loopback/repository
Version:
Define and implement a common set of interfaces for interacting with databases
79 lines (70 loc) • 2.35 kB
text/typescript
// Copyright IBM Corp. and LoopBack contributors 2018,2020. All Rights Reserved.
// Node module: @loopback/repository
// This file is licensed under the MIT License.
// License text available at https://opensource.org/licenses/MIT
import {PropertyDecoratorFactory} from '@loopback/core';
import {buildModelDefinition} from '../decorators';
import {Model, RelationDefinitionMap} from '../model';
import {RelationType} from './relation.types';
export const RELATIONS_KEY = 'loopback:relations';
/**
* Decorator for relations
* @param definition
* @returns A property decorator
*/
export function relation(definition?: Object) {
// Apply relation definition to the model class
return PropertyDecoratorFactory.createDecorator(RELATIONS_KEY, definition, {
decoratorName: '@relation',
});
}
/**
* Get metadata of all relations defined on a given model class.
*
* @param modelCtor - The model class (the constructor function).
* @returns A map of relation definitions
*/
export function getModelRelations(
modelCtor: typeof Model,
): RelationDefinitionMap {
// Build model definitions if `@model` is missing
const modelDef = buildModelDefinition(modelCtor);
return modelDef?.relations || {};
}
//
// placeholder decorators for relations that are not implemented yet
// TODO: move these decorators to per-relation subdirectories
//
/**
* Decorator for embedsOne
* @param definition
* @returns A property decorator
*/
export function embedsOne(definition?: Object) {
const rel = Object.assign({type: RelationType.embedsOne}, definition);
return PropertyDecoratorFactory.createDecorator(RELATIONS_KEY, rel, {
decoratorName: '@embedsOne',
});
}
/**
* Decorator for embedsMany
* @param definition
* @returns A property decorator
*/
export function embedsMany(definition?: Object) {
const rel = Object.assign({type: RelationType.embedsMany}, definition);
return PropertyDecoratorFactory.createDecorator(RELATIONS_KEY, rel, {
decoratorName: '@embedsMany',
});
}
/**
* Decorator for referencesOne
* @param definition
* @returns A property decorator
*/
export function referencesOne(definition?: Object) {
const rel = Object.assign({type: RelationType.referencesOne}, definition);
return PropertyDecoratorFactory.createDecorator(RELATIONS_KEY, rel, {
decoratorName: '@referencesOne',
});
}