UNPKG

2.09 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.getForeignKeys = exports.addForeignKey = exports.getForeignKeyOptions = void 0;
4const FOREIGN_KEYS_KEY = 'sequelize:foreignKeys';
5function getForeignKeyOptions(relatedClass, classWithForeignKey, foreignKey) {
6 let foreignKeyOptions = {};
7 if (typeof foreignKey === 'string') {
8 foreignKeyOptions.name = foreignKey;
9 }
10 else if (foreignKey && typeof foreignKey === 'object') {
11 foreignKeyOptions = Object.assign({}, foreignKey);
12 }
13 if (!foreignKeyOptions.name && classWithForeignKey) {
14 const foreignKeys = getForeignKeys(classWithForeignKey.prototype) || [];
15 for (const key of foreignKeys) {
16 if (key.relatedClassGetter() === relatedClass ||
17 relatedClass.prototype instanceof key.relatedClassGetter()) {
18 foreignKeyOptions.name = key.foreignKey;
19 break;
20 }
21 }
22 }
23 if (!foreignKeyOptions.name) {
24 throw new Error(`Foreign key for "${relatedClass.name}" is missing ` +
25 `on "${classWithForeignKey.name}".`);
26 }
27 return foreignKeyOptions;
28}
29exports.getForeignKeyOptions = getForeignKeyOptions;
30/**
31 * Adds foreign key meta data for specified class
32 */
33function addForeignKey(target, relatedClassGetter, foreignKey) {
34 let foreignKeys = getForeignKeys(target);
35 if (!foreignKeys) {
36 foreignKeys = [];
37 }
38 foreignKeys.push({
39 relatedClassGetter,
40 foreignKey,
41 });
42 setForeignKeys(target, foreignKeys);
43}
44exports.addForeignKey = addForeignKey;
45/**
46 * Returns foreign key meta data from specified class
47 */
48function getForeignKeys(target) {
49 const foreignKeys = Reflect.getMetadata(FOREIGN_KEYS_KEY, target);
50 if (foreignKeys) {
51 return [...foreignKeys];
52 }
53}
54exports.getForeignKeys = getForeignKeys;
55/**
56 * Sets foreign key meta data
57 */
58function setForeignKeys(target, foreignKeys) {
59 Reflect.defineMetadata(FOREIGN_KEYS_KEY, foreignKeys, target);
60}
61//# sourceMappingURL=foreign-key-service.js.map
\No newline at end of file