1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.resolveModelGetter = exports.getSequelizeTypeByDesignType = exports.addOptions = exports.setOptions = exports.getOptions = exports.getModelName = exports.setModelName = void 0;
|
4 | const model_1 = require("../model/model");
|
5 | const data_type_service_1 = require("../../sequelize/data-type/data-type-service");
|
6 | const MODEL_NAME_KEY = 'sequelize:modelName';
|
7 | const OPTIONS_KEY = 'sequelize:options';
|
8 |
|
9 |
|
10 |
|
11 |
|
12 | function setModelName(target, modelName) {
|
13 | Reflect.defineMetadata(MODEL_NAME_KEY, modelName, target);
|
14 | }
|
15 | exports.setModelName = setModelName;
|
16 |
|
17 |
|
18 |
|
19 |
|
20 | function getModelName(target) {
|
21 | return Reflect.getMetadata(MODEL_NAME_KEY, target);
|
22 | }
|
23 | exports.getModelName = getModelName;
|
24 |
|
25 |
|
26 |
|
27 |
|
28 | function getOptions(target) {
|
29 | const options = Reflect.getMetadata(OPTIONS_KEY, target);
|
30 | if (options) {
|
31 | return Object.assign({}, options);
|
32 | }
|
33 | }
|
34 | exports.getOptions = getOptions;
|
35 |
|
36 |
|
37 |
|
38 | function setOptions(target, options) {
|
39 | Reflect.defineMetadata(OPTIONS_KEY, Object.assign({}, options), target);
|
40 | }
|
41 | exports.setOptions = setOptions;
|
42 |
|
43 |
|
44 |
|
45 | function addOptions(target, options) {
|
46 | let _options = getOptions(target);
|
47 | if (!_options) {
|
48 | _options = {};
|
49 | }
|
50 | setOptions(target, Object.assign(Object.assign(Object.assign({}, _options), options), { validate: Object.assign(Object.assign({}, (_options.validate || {})), (options.validate || {})) }));
|
51 | }
|
52 | exports.addOptions = addOptions;
|
53 |
|
54 |
|
55 |
|
56 |
|
57 |
|
58 | function getSequelizeTypeByDesignType(target, propertyName) {
|
59 | const type = Reflect.getMetadata('design:type', target, propertyName);
|
60 | const dataType = (0, data_type_service_1.inferDataType)(type);
|
61 | if (dataType) {
|
62 | return dataType;
|
63 | }
|
64 | throw new Error(`Specified type of property '${propertyName}'
|
65 | cannot be automatically resolved to a sequelize data type. Please
|
66 | define the data type manually`);
|
67 | }
|
68 | exports.getSequelizeTypeByDesignType = getSequelizeTypeByDesignType;
|
69 |
|
70 |
|
71 |
|
72 |
|
73 |
|
74 |
|
75 | function resolveModelGetter(options) {
|
76 | const maybeModelGetter = (value) => typeof value === 'function' && value.length === 0;
|
77 | const isModel = (value) => value && value.prototype && value.prototype instanceof model_1.Model;
|
78 | const isOptionObjectOrArray = (value) => value && typeof value === 'object';
|
79 | return Object.keys(options).reduce((acc, key) => {
|
80 | const value = options[key];
|
81 | if (maybeModelGetter(value)) {
|
82 | const maybeModel = value();
|
83 | if (isModel(maybeModel)) {
|
84 | acc[key] = maybeModel;
|
85 | }
|
86 | }
|
87 | else if (isOptionObjectOrArray(value)) {
|
88 | acc[key] = resolveModelGetter(value);
|
89 | }
|
90 | return acc;
|
91 | }, Array.isArray(options) ? [...options] : Object.assign({}, options));
|
92 | }
|
93 | exports.resolveModelGetter = resolveModelGetter;
|
94 |
|
\ | No newline at end of file |