@forestadmin/datasource-sequelize 1.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +674 -0
- package/README.md +0 -0
- package/dist/collection.d.ts +16 -0
- package/dist/collection.js +100 -0
- package/dist/datasource.d.ts +15 -0
- package/dist/datasource.js +34 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +18 -0
- package/dist/utils/aggregation.d.ts +20 -0
- package/dist/utils/aggregation.js +78 -0
- package/dist/utils/date-aggregation-converter.d.ts +16 -0
- package/dist/utils/date-aggregation-converter.js +93 -0
- package/dist/utils/error-handler.d.ts +4 -0
- package/dist/utils/error-handler.js +30 -0
- package/dist/utils/model-to-collection-schema-converter.d.ts +10 -0
- package/dist/utils/model-to-collection-schema-converter.js +122 -0
- package/dist/utils/query-converter.d.ts +19 -0
- package/dist/utils/query-converter.js +138 -0
- package/dist/utils/serializer.d.ts +6 -0
- package/dist/utils/serializer.js +29 -0
- package/dist/utils/type-converter.d.ts +11 -0
- package/dist/utils/type-converter.js +126 -0
- package/dist/utils/un-ambigous.d.ts +3 -0
- package/dist/utils/un-ambigous.js +24 -0
- package/package.json +35 -0
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const datasource_toolkit_1 = require("@forestadmin/datasource-toolkit");
|
|
7
|
+
const sequelize_1 = require("sequelize");
|
|
8
|
+
const un_ambigous_1 = __importDefault(require("./un-ambigous"));
|
|
9
|
+
class QueryConverter {
|
|
10
|
+
constructor(model) {
|
|
11
|
+
this.model = model;
|
|
12
|
+
this.dialect = this.model.sequelize.getDialect();
|
|
13
|
+
this.col = this.model.sequelize.col;
|
|
14
|
+
this.fn = this.model.sequelize.fn;
|
|
15
|
+
this.where = this.model.sequelize.where;
|
|
16
|
+
}
|
|
17
|
+
asArray(value) {
|
|
18
|
+
if (!Array.isArray(value))
|
|
19
|
+
return [value];
|
|
20
|
+
return value;
|
|
21
|
+
}
|
|
22
|
+
makeWhereClause(field, operator,
|
|
23
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
24
|
+
value) {
|
|
25
|
+
if (operator === null)
|
|
26
|
+
throw new Error('Invalid (null) operator.');
|
|
27
|
+
switch (operator) {
|
|
28
|
+
case 'Blank':
|
|
29
|
+
return {
|
|
30
|
+
[sequelize_1.Op.or]: [this.makeWhereClause(field, 'Missing'), { [sequelize_1.Op.eq]: '' }],
|
|
31
|
+
};
|
|
32
|
+
case 'Like':
|
|
33
|
+
if (this.dialect === 'sqlite')
|
|
34
|
+
return this.where(this.col(field), 'GLOB', value.replace(/%/g, '*').replace(/_/g, '?'));
|
|
35
|
+
if (this.dialect === 'mysql' || this.dialect === 'mariadb')
|
|
36
|
+
return this.where(this.fn('BINARY', this.col(field)), 'LIKE', value);
|
|
37
|
+
return { [sequelize_1.Op.like]: value };
|
|
38
|
+
case 'ILike':
|
|
39
|
+
if (this.dialect === 'postgres')
|
|
40
|
+
return { [sequelize_1.Op.iLike]: value };
|
|
41
|
+
if (this.dialect === 'mysql' || this.dialect === 'mariadb' || this.dialect === 'sqlite')
|
|
42
|
+
return { [sequelize_1.Op.like]: value };
|
|
43
|
+
return this.where(this.fn('LOWER', this.col(field)), 'LIKE', value.toLocaleLowerCase());
|
|
44
|
+
case 'NotContains':
|
|
45
|
+
return {
|
|
46
|
+
[sequelize_1.Op.not]: this.makeWhereClause(field, 'Like', `%${value}%`),
|
|
47
|
+
};
|
|
48
|
+
case 'Equal':
|
|
49
|
+
return { [sequelize_1.Op.eq]: value };
|
|
50
|
+
case 'GreaterThan':
|
|
51
|
+
return { [sequelize_1.Op.gt]: value };
|
|
52
|
+
case 'In':
|
|
53
|
+
return { [sequelize_1.Op.in]: this.asArray(value) };
|
|
54
|
+
case 'IncludesAll':
|
|
55
|
+
return { [sequelize_1.Op.contains]: this.asArray(value) };
|
|
56
|
+
case 'LessThan':
|
|
57
|
+
return { [sequelize_1.Op.lt]: value };
|
|
58
|
+
case 'Missing':
|
|
59
|
+
return { [sequelize_1.Op.is]: null };
|
|
60
|
+
case 'NotEqual':
|
|
61
|
+
return { [sequelize_1.Op.ne]: value };
|
|
62
|
+
case 'NotIn':
|
|
63
|
+
return { [sequelize_1.Op.notIn]: this.asArray(value) };
|
|
64
|
+
case 'Present':
|
|
65
|
+
return { [sequelize_1.Op.ne]: null };
|
|
66
|
+
default:
|
|
67
|
+
throw new Error(`Unsupported operator: "${operator}".`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/*
|
|
71
|
+
* Delete and update sequelize methods does not provide the include options.
|
|
72
|
+
* This method is developed to by pass this problem.
|
|
73
|
+
*/
|
|
74
|
+
async getWhereFromConditionTreeToByPassInclude(conditionTree) {
|
|
75
|
+
const include = conditionTree ? this.getIncludeFromProjection(conditionTree.projection) : [];
|
|
76
|
+
const whereOptions = this.getWhereFromConditionTree(conditionTree);
|
|
77
|
+
if (include.length === 0) {
|
|
78
|
+
return whereOptions;
|
|
79
|
+
}
|
|
80
|
+
const keys = [...this.model.primaryKeyAttributes];
|
|
81
|
+
const records = await this.model.findAll({ attributes: keys, where: whereOptions, include });
|
|
82
|
+
const conditions = records.map(record => {
|
|
83
|
+
const equals = keys.map(pk => new datasource_toolkit_1.ConditionTreeLeaf(pk, 'Equal', record.get(pk)));
|
|
84
|
+
return datasource_toolkit_1.ConditionTreeFactory.intersect(...equals);
|
|
85
|
+
});
|
|
86
|
+
const union = datasource_toolkit_1.ConditionTreeFactory.union(...conditions);
|
|
87
|
+
return this.getWhereFromConditionTree(union);
|
|
88
|
+
}
|
|
89
|
+
getWhereFromConditionTree(conditionTree) {
|
|
90
|
+
if (!conditionTree)
|
|
91
|
+
return {};
|
|
92
|
+
const sequelizeWhereClause = {};
|
|
93
|
+
if (conditionTree.aggregator !== undefined) {
|
|
94
|
+
const { aggregator, conditions } = conditionTree;
|
|
95
|
+
if (aggregator === null) {
|
|
96
|
+
throw new Error('Invalid (null) aggregator.');
|
|
97
|
+
}
|
|
98
|
+
const sequelizeOperator = aggregator === 'And' ? sequelize_1.Op.and : sequelize_1.Op.or;
|
|
99
|
+
if (!Array.isArray(conditions)) {
|
|
100
|
+
throw new Error('Conditions must be an array.');
|
|
101
|
+
}
|
|
102
|
+
sequelizeWhereClause[sequelizeOperator] = conditions.map(condition => this.getWhereFromConditionTree(condition));
|
|
103
|
+
}
|
|
104
|
+
else if (conditionTree.operator !== undefined) {
|
|
105
|
+
const { field, operator, value } = conditionTree;
|
|
106
|
+
const isRelation = field.includes(':');
|
|
107
|
+
const safeField = (0, un_ambigous_1.default)(this.model, field);
|
|
108
|
+
sequelizeWhereClause[isRelation ? `$${safeField}$` : safeField] = this.makeWhereClause(safeField, operator, value);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
throw new Error('Invalid ConditionTree.');
|
|
112
|
+
}
|
|
113
|
+
return sequelizeWhereClause;
|
|
114
|
+
}
|
|
115
|
+
computeIncludeFromProjection(projection, withAttributes = true) {
|
|
116
|
+
return Object.entries(projection.relations).map(([relationName, relationProjection]) => {
|
|
117
|
+
return {
|
|
118
|
+
association: relationName,
|
|
119
|
+
attributes: withAttributes ? relationProjection.columns : [],
|
|
120
|
+
include: this.computeIncludeFromProjection(relationProjection, withAttributes),
|
|
121
|
+
};
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
getIncludeFromProjection(projection) {
|
|
125
|
+
return this.computeIncludeFromProjection(projection, false);
|
|
126
|
+
}
|
|
127
|
+
getIncludeWithAttributesFromProjection(projection) {
|
|
128
|
+
return this.computeIncludeFromProjection(projection);
|
|
129
|
+
}
|
|
130
|
+
getOrderFromSort(sort) {
|
|
131
|
+
return (sort ?? []).map(({ field, ascending }) => {
|
|
132
|
+
const path = field.split(':');
|
|
133
|
+
return [...path, ascending ? 'ASC' : 'DESC'];
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
exports.default = QueryConverter;
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY29udmVydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3F1ZXJ5LWNvbnZlcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHdFQVF5QztBQUN6Qyx5Q0FTbUI7QUFFbkIsZ0VBQTRDO0FBRTVDLE1BQXFCLGNBQWM7SUFPakMsWUFBWSxLQUFxQztRQUMvQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBYSxDQUFDO1FBQzVELElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO0lBQzFDLENBQUM7SUFFTyxPQUFPLENBQUMsS0FBYztRQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFMUMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sZUFBZSxDQUNyQixLQUFhLEVBQ2IsUUFBa0I7SUFDbEIsOERBQThEO0lBQzlELEtBQVc7UUFHWCxJQUFJLFFBQVEsS0FBSyxJQUFJO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO1FBRW5FLFFBQVEsUUFBUSxFQUFFO1lBQ2hCLEtBQUssT0FBTztnQkFDVixPQUFPO29CQUNMLENBQUMsY0FBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFD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
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
class Serializer {
|
|
4
|
+
static serialize(record) {
|
|
5
|
+
Object.entries(record).forEach(([name, value]) => {
|
|
6
|
+
if (value instanceof Date)
|
|
7
|
+
record[name] = this.serializeValue(value);
|
|
8
|
+
if (Array.isArray(value))
|
|
9
|
+
this.serializeValue(value); // the change is by references
|
|
10
|
+
if (value instanceof Object)
|
|
11
|
+
return this.serialize(record[name]);
|
|
12
|
+
});
|
|
13
|
+
return record;
|
|
14
|
+
}
|
|
15
|
+
static serializeValue(value) {
|
|
16
|
+
if (value instanceof Date)
|
|
17
|
+
return value.toISOString();
|
|
18
|
+
if (Array.isArray(value)) {
|
|
19
|
+
value.forEach((v, i) => {
|
|
20
|
+
// serialize by reference to improve performances by avoiding the copies
|
|
21
|
+
if (value instanceof Date)
|
|
22
|
+
value[i] = v.toISOString();
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
return value;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.default = Serializer;
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9zZXJpYWxpemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsTUFBcUIsVUFBVTtJQUM3QixNQUFNLENBQUMsU0FBUyxDQUFDLE1BQWtCO1FBQ2pDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUMvQyxJQUFJLEtBQUssWUFBWSxJQUFJO2dCQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLDhCQUE4QjtZQUNwRixJQUFJLEtBQUssWUFBWSxNQUFNO2dCQUFFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNuRSxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQWM7UUFDbEMsSUFBSSxLQUFLLFlBQVksSUFBSTtZQUFFLE9BQU8sS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRXRELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNyQix3RUFBd0U7Z0JBQ3hFLElBQUksS0FBSyxZQUFZLElBQUk7b0JBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN4RCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0NBQ0Y7QUF2QkQsNkJBdUJDIn0=
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AbstractDataType, AbstractDataTypeConstructor } from 'sequelize';
|
|
2
|
+
import { ColumnType, Operator, PrimitiveTypes } from '@forestadmin/datasource-toolkit';
|
|
3
|
+
export default class TypeConverter {
|
|
4
|
+
private static readonly columnTypeToDataType;
|
|
5
|
+
static fromColumnType(columnType: PrimitiveTypes): AbstractDataTypeConstructor;
|
|
6
|
+
private static getColumnTypeFromDataType;
|
|
7
|
+
static fromDataType(dataType: AbstractDataType): ColumnType;
|
|
8
|
+
private static readonly baseOperators;
|
|
9
|
+
static operatorsForColumnType(columnType: ColumnType): Set<Operator>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=type-converter.d.ts.map
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const sequelize_1 = require("sequelize");
|
|
4
|
+
class TypeConverter {
|
|
5
|
+
// TODO: Handle all ColumnTypes, not only PrimitiveTypes?
|
|
6
|
+
static fromColumnType(columnType) {
|
|
7
|
+
const dataType = TypeConverter.columnTypeToDataType[columnType];
|
|
8
|
+
if (!dataType)
|
|
9
|
+
throw new Error(`Unsupported column type: "${columnType}".`);
|
|
10
|
+
return dataType;
|
|
11
|
+
}
|
|
12
|
+
static getColumnTypeFromDataType(dataType) {
|
|
13
|
+
switch (dataType.key) {
|
|
14
|
+
case sequelize_1.DataTypes.BOOLEAN.key:
|
|
15
|
+
return 'Boolean';
|
|
16
|
+
case sequelize_1.DataTypes.DATE.key:
|
|
17
|
+
case sequelize_1.DataTypes.NOW.key:
|
|
18
|
+
return 'Date';
|
|
19
|
+
case sequelize_1.DataTypes.DATEONLY.key:
|
|
20
|
+
return 'Dateonly';
|
|
21
|
+
case sequelize_1.DataTypes.ENUM.key:
|
|
22
|
+
return 'Enum';
|
|
23
|
+
case sequelize_1.DataTypes.JSON.key:
|
|
24
|
+
case sequelize_1.DataTypes.JSONB.key:
|
|
25
|
+
return 'Json';
|
|
26
|
+
case sequelize_1.DataTypes.BIGINT.key:
|
|
27
|
+
case sequelize_1.DataTypes.DECIMAL.key:
|
|
28
|
+
case sequelize_1.DataTypes.DOUBLE.key:
|
|
29
|
+
case sequelize_1.DataTypes.FLOAT.key:
|
|
30
|
+
case sequelize_1.DataTypes.INTEGER.key:
|
|
31
|
+
case sequelize_1.DataTypes.MEDIUMINT.key:
|
|
32
|
+
case sequelize_1.DataTypes.NUMBER.key:
|
|
33
|
+
case sequelize_1.DataTypes.REAL.key:
|
|
34
|
+
case sequelize_1.DataTypes.SMALLINT.key:
|
|
35
|
+
case sequelize_1.DataTypes.TINYINT.key:
|
|
36
|
+
return 'Number';
|
|
37
|
+
case sequelize_1.DataTypes.CHAR.key:
|
|
38
|
+
case sequelize_1.DataTypes.CITEXT.key:
|
|
39
|
+
case sequelize_1.DataTypes.STRING.key:
|
|
40
|
+
case sequelize_1.DataTypes.TEXT.key:
|
|
41
|
+
return 'String';
|
|
42
|
+
case sequelize_1.DataTypes.TIME.key:
|
|
43
|
+
return 'Timeonly';
|
|
44
|
+
case sequelize_1.DataTypes.UUID.key:
|
|
45
|
+
case sequelize_1.DataTypes.UUIDV1.key:
|
|
46
|
+
case sequelize_1.DataTypes.UUIDV4.key:
|
|
47
|
+
return 'Uuid';
|
|
48
|
+
default:
|
|
49
|
+
throw new Error(`Unsupported data type: "${dataType}"`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
static fromDataType(dataType) {
|
|
53
|
+
if (dataType.key === sequelize_1.DataTypes.ARRAY.key) {
|
|
54
|
+
const arrayDataType = dataType;
|
|
55
|
+
return [TypeConverter.fromDataType(arrayDataType.type)];
|
|
56
|
+
}
|
|
57
|
+
return TypeConverter.getColumnTypeFromDataType(dataType);
|
|
58
|
+
}
|
|
59
|
+
static operatorsForColumnType(columnType) {
|
|
60
|
+
if (Array.isArray(columnType)) {
|
|
61
|
+
return new Set([...TypeConverter.baseOperators, 'In', 'IncludesAll', 'NotIn']);
|
|
62
|
+
}
|
|
63
|
+
switch (columnType) {
|
|
64
|
+
case 'Boolean':
|
|
65
|
+
return new Set([...TypeConverter.baseOperators]);
|
|
66
|
+
case 'Uuid':
|
|
67
|
+
return new Set([
|
|
68
|
+
...TypeConverter.baseOperators,
|
|
69
|
+
'Contains',
|
|
70
|
+
'EndsWith',
|
|
71
|
+
'Like',
|
|
72
|
+
'StartsWith',
|
|
73
|
+
]);
|
|
74
|
+
case 'Number':
|
|
75
|
+
return new Set([
|
|
76
|
+
...TypeConverter.baseOperators,
|
|
77
|
+
'GreaterThan',
|
|
78
|
+
'In',
|
|
79
|
+
'LessThan',
|
|
80
|
+
'NotIn',
|
|
81
|
+
]);
|
|
82
|
+
case 'String':
|
|
83
|
+
return new Set([
|
|
84
|
+
...TypeConverter.baseOperators,
|
|
85
|
+
'In',
|
|
86
|
+
'Like',
|
|
87
|
+
'ILike',
|
|
88
|
+
'LongerThan',
|
|
89
|
+
'NotContains',
|
|
90
|
+
'NotIn',
|
|
91
|
+
'ShorterThan',
|
|
92
|
+
]);
|
|
93
|
+
case 'Date':
|
|
94
|
+
case 'Dateonly':
|
|
95
|
+
return new Set([...TypeConverter.baseOperators, 'GreaterThan', 'LessThan']);
|
|
96
|
+
case 'Enum':
|
|
97
|
+
return new Set([...TypeConverter.baseOperators, 'In', 'NotIn']);
|
|
98
|
+
case 'Json':
|
|
99
|
+
return new Set([...TypeConverter.baseOperators]);
|
|
100
|
+
default:
|
|
101
|
+
return new Set();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
exports.default = TypeConverter;
|
|
106
|
+
// TODO: Allow to differentiate NUMBER and INTEGER.
|
|
107
|
+
TypeConverter.columnTypeToDataType = {
|
|
108
|
+
Boolean: sequelize_1.DataTypes.BOOLEAN,
|
|
109
|
+
Date: sequelize_1.DataTypes.DATE,
|
|
110
|
+
Dateonly: sequelize_1.DataTypes.DATEONLY,
|
|
111
|
+
Enum: sequelize_1.DataTypes.ENUM,
|
|
112
|
+
Json: sequelize_1.DataTypes.JSON,
|
|
113
|
+
Number: sequelize_1.DataTypes.NUMBER,
|
|
114
|
+
Point: null,
|
|
115
|
+
String: sequelize_1.DataTypes.STRING,
|
|
116
|
+
Timeonly: sequelize_1.DataTypes.TIME,
|
|
117
|
+
Uuid: sequelize_1.DataTypes.UUID,
|
|
118
|
+
};
|
|
119
|
+
TypeConverter.baseOperators = [
|
|
120
|
+
'Blank',
|
|
121
|
+
'Equal',
|
|
122
|
+
'Missing',
|
|
123
|
+
'NotEqual',
|
|
124
|
+
'Present',
|
|
125
|
+
];
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1jb252ZXJ0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdHlwZS1jb252ZXJ0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx5Q0FBb0c7QUFJcEcsTUFBcUIsYUFBYTtJQWtCaEMseURBQXlEO0lBQ2xELE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBMEI7UUFDckQsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRWhFLElBQUksQ0FBQyxRQUFRO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsVUFBVSxJQUFJLENBQUMsQ0FBQztRQUU1RSxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRU8sTUFBTSxDQUFDLHlCQUF5QixDQUFDLFFBQTBCO1FBQ2pFLFFBQVEsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNwQixLQUFLLHFCQUFTLENBQUMsT0FBTyxDQUFDLEdBQUc7Z0JBQ3hCLE9BQU8sU0FBUyxDQUFDO1lBQ25CLEtBQUsscUJBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQ3hCLEtBQUsscUJBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRztnQkFDcEIsT0FBTyxNQUFNLENBQUM7WUFDaEIsS0FBSyxxQkFBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHO2dCQUN6QixPQUFPLFVBQVUsQ0FBQztZQUNwQixLQUFLLHFCQUFTLENBQUMsSUFBSSxDQUFDLEdBQUc7Z0JBQ3JCLE9BQU8sTUFBTSxDQUFDO1lBQ2hCLEtBQUsscUJBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO1lBQ3hCLEtBQUsscUJBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRztnQkFDdEIsT0FBTyxNQUFNLENBQUM7WUFDaEIsS0FBSyxxQkFBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7WUFDMUIsS0FBSyxxQkFBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDM0Is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
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
function unAmbigousField(
|
|
4
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
5
|
+
model, field, unAmbigous = false) {
|
|
6
|
+
const isRelation = field.includes(':');
|
|
7
|
+
let safeField;
|
|
8
|
+
if (isRelation) {
|
|
9
|
+
const paths = field.split(':');
|
|
10
|
+
const relationFieldName = paths.pop();
|
|
11
|
+
const fieldName = paths
|
|
12
|
+
.reduce((acc, path) => acc.associations[path].target, model)
|
|
13
|
+
.getAttributes()[relationFieldName].field;
|
|
14
|
+
safeField = `${paths.join('.')}.${fieldName}`;
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
safeField = model.getAttributes()[field].field;
|
|
18
|
+
if (unAmbigous)
|
|
19
|
+
safeField = `${model.name}.${safeField}`;
|
|
20
|
+
}
|
|
21
|
+
return safeField;
|
|
22
|
+
}
|
|
23
|
+
exports.default = unAmbigousField;
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW4tYW1iaWdvdXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdW4tYW1iaWdvdXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSxTQUF3QixlQUFlO0FBQ3JDLDhEQUE4RDtBQUM5RCxLQUE2QixFQUM3QixLQUFhLEVBQ2IsVUFBVSxHQUFHLEtBQUs7SUFFbEIsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUV2QyxJQUFJLFNBQWlCLENBQUM7SUFFdEIsSUFBSSxVQUFVLEVBQUU7UUFDZCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sU0FBUyxHQUFHLEtBQUs7YUFDcEIsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDO2FBQzNELGFBQWEsRUFBRSxDQUFDLGlCQUFpQixDQUFDLENBQUMsS0FBSyxDQUFDO1FBQzVDLFNBQVMsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksU0FBUyxFQUFFLENBQUM7S0FDL0M7U0FBTTtRQUNMLFNBQVMsR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQy9DLElBQUksVUFBVTtZQUFFLFNBQVMsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLElBQUksU0FBUyxFQUFFLENBQUM7S0FDMUQ7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBdkJELGtDQXVCQyJ9
|
package/package.json
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@forestadmin/datasource-sequelize",
|
|
3
|
+
"version": "1.0.0-alpha.1",
|
|
4
|
+
"main": "dist/index.js",
|
|
5
|
+
"license": "GPL-3.0",
|
|
6
|
+
"publishConfig": {
|
|
7
|
+
"access": "public"
|
|
8
|
+
},
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/ForestAdmin/agent-nodejs.git",
|
|
12
|
+
"directory": "packages/datasource-sequelize"
|
|
13
|
+
},
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"@forestadmin/datasource-toolkit": "1.0.0-alpha.1"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist/**/*.js",
|
|
19
|
+
"dist/**/*.d.ts"
|
|
20
|
+
],
|
|
21
|
+
"scripts": {
|
|
22
|
+
"build": "tsc",
|
|
23
|
+
"build:watch": "tsc --watch",
|
|
24
|
+
"clean": "rm -rf coverage dist",
|
|
25
|
+
"lint": "eslint src test",
|
|
26
|
+
"test": "jest"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"fishery": "^2.1.0",
|
|
30
|
+
"sequelize": "6.21.3"
|
|
31
|
+
},
|
|
32
|
+
"peerDependencies": {
|
|
33
|
+
"sequelize": ">= 6.12.0 < 7"
|
|
34
|
+
}
|
|
35
|
+
}
|