@forestadmin/datasource-sequelize 1.0.0-beta.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 +13 -0
- package/dist/collection.js +89 -0
- package/dist/datasource.d.ts +9 -0
- package/dist/datasource.js +28 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +13 -0
- package/dist/utils/aggregation.d.ts +18 -0
- package/dist/utils/aggregation.js +92 -0
- package/dist/utils/date-aggregation-converter.d.ts +11 -0
- package/dist/utils/date-aggregation-converter.js +88 -0
- package/dist/utils/model-to-collection-schema-converter.d.ts +10 -0
- package/dist/utils/model-to-collection-schema-converter.js +110 -0
- package/dist/utils/query-converter.d.ts +12 -0
- package/dist/utils/query-converter.js +112 -0
- package/dist/utils/type-converter.d.ts +11 -0
- package/dist/utils/type-converter.js +153 -0
- package/package.json +36 -0
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const sequelize_1 = require("sequelize");
|
|
4
|
+
class QueryConverter {
|
|
5
|
+
static asArray(value) {
|
|
6
|
+
if (!Array.isArray(value))
|
|
7
|
+
return [value];
|
|
8
|
+
return value;
|
|
9
|
+
}
|
|
10
|
+
static makeWhereClause(operator, field,
|
|
11
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
12
|
+
value) {
|
|
13
|
+
if (operator === null)
|
|
14
|
+
throw new Error('Invalid (null) operator.');
|
|
15
|
+
switch (operator) {
|
|
16
|
+
case 'Blank':
|
|
17
|
+
return {
|
|
18
|
+
[sequelize_1.Op.or]: [this.makeWhereClause('Missing', field), { [sequelize_1.Op.eq]: '' }],
|
|
19
|
+
};
|
|
20
|
+
case 'Contains':
|
|
21
|
+
return (0, sequelize_1.where)((0, sequelize_1.fn)('LOWER', (0, sequelize_1.col)(field)), 'LIKE', `%${value.toLocaleLowerCase()}%`);
|
|
22
|
+
case 'EndsWith':
|
|
23
|
+
return (0, sequelize_1.where)((0, sequelize_1.fn)('LOWER', (0, sequelize_1.col)(field)), 'LIKE', `%${value.toLocaleLowerCase()}`);
|
|
24
|
+
case 'Equal':
|
|
25
|
+
return { [sequelize_1.Op.eq]: value };
|
|
26
|
+
case 'GreaterThan':
|
|
27
|
+
return { [sequelize_1.Op.gt]: value };
|
|
28
|
+
case 'In':
|
|
29
|
+
return { [sequelize_1.Op.in]: this.asArray(value) };
|
|
30
|
+
case 'IncludesAll':
|
|
31
|
+
return { [sequelize_1.Op.contains]: this.asArray(value) };
|
|
32
|
+
case 'LessThan':
|
|
33
|
+
return { [sequelize_1.Op.lt]: value };
|
|
34
|
+
case 'Missing':
|
|
35
|
+
return { [sequelize_1.Op.is]: null };
|
|
36
|
+
case 'NotContains':
|
|
37
|
+
return (0, sequelize_1.where)((0, sequelize_1.fn)('LOWER', (0, sequelize_1.col)(field)), 'NOT LIKE', `%${value.toLocaleLowerCase()}%`);
|
|
38
|
+
case 'NotEqual':
|
|
39
|
+
return { [sequelize_1.Op.ne]: value };
|
|
40
|
+
case 'NotIn':
|
|
41
|
+
return { [sequelize_1.Op.notIn]: this.asArray(value) };
|
|
42
|
+
case 'Present':
|
|
43
|
+
return { [sequelize_1.Op.ne]: null };
|
|
44
|
+
case 'StartsWith':
|
|
45
|
+
return (0, sequelize_1.where)((0, sequelize_1.fn)('LOWER', (0, sequelize_1.col)(field)), 'LIKE', `${value.toLocaleLowerCase()}%`);
|
|
46
|
+
default:
|
|
47
|
+
throw new Error(`Unsupported operator: "${operator}".`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
static getWhereFromConditionTree(
|
|
51
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
52
|
+
model, conditionTree) {
|
|
53
|
+
if (!conditionTree)
|
|
54
|
+
return {};
|
|
55
|
+
const sequelizeWhereClause = {};
|
|
56
|
+
if (conditionTree.aggregator !== undefined) {
|
|
57
|
+
const { aggregator, conditions } = conditionTree;
|
|
58
|
+
if (aggregator === null) {
|
|
59
|
+
throw new Error('Invalid (null) aggregator.');
|
|
60
|
+
}
|
|
61
|
+
const sequelizeOperator = aggregator === 'And' ? sequelize_1.Op.and : sequelize_1.Op.or;
|
|
62
|
+
if (!Array.isArray(conditions)) {
|
|
63
|
+
throw new Error('Conditions must be an array.');
|
|
64
|
+
}
|
|
65
|
+
sequelizeWhereClause[sequelizeOperator] = conditions.map(condition => this.getWhereFromConditionTree(model, condition));
|
|
66
|
+
}
|
|
67
|
+
else if (conditionTree.operator !== undefined) {
|
|
68
|
+
const { field, operator, value } = conditionTree;
|
|
69
|
+
const isRelation = field.includes(':');
|
|
70
|
+
let safeField;
|
|
71
|
+
if (isRelation) {
|
|
72
|
+
const paths = field.split(':');
|
|
73
|
+
const fieldName = paths.pop();
|
|
74
|
+
const safeFieldName = paths
|
|
75
|
+
.reduce((acc, path) => acc.associations[path].target, model)
|
|
76
|
+
.getAttributes()[fieldName].field;
|
|
77
|
+
safeField = `${paths.join('.')}.${safeFieldName}`;
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
safeField = model.getAttributes()[field].field;
|
|
81
|
+
}
|
|
82
|
+
sequelizeWhereClause[isRelation ? `$${safeField}$` : safeField] = this.makeWhereClause(operator, safeField, value);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
throw new Error('Invalid ConditionTree.');
|
|
86
|
+
}
|
|
87
|
+
return sequelizeWhereClause;
|
|
88
|
+
}
|
|
89
|
+
static computeIncludeFromProjection(projection, withAttributes = true) {
|
|
90
|
+
return Object.entries(projection.relations).map(([relationName, relationProjection]) => {
|
|
91
|
+
return {
|
|
92
|
+
association: relationName,
|
|
93
|
+
attributes: withAttributes ? relationProjection.columns : [],
|
|
94
|
+
include: this.computeIncludeFromProjection(relationProjection, withAttributes),
|
|
95
|
+
};
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
static getIncludeFromProjection(projection) {
|
|
99
|
+
return this.computeIncludeFromProjection(projection, false);
|
|
100
|
+
}
|
|
101
|
+
static getIncludeWithAttributesFromProjection(projection) {
|
|
102
|
+
return this.computeIncludeFromProjection(projection);
|
|
103
|
+
}
|
|
104
|
+
static getOrderFromSort(sort) {
|
|
105
|
+
return (sort ?? []).map(({ field, ascending }) => {
|
|
106
|
+
const path = field.split(':');
|
|
107
|
+
return [...path, ascending ? 'ASC' : 'DESC'];
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
exports.default = QueryConverter;
|
|
112
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktY29udmVydGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3F1ZXJ5LWNvbnZlcnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVFBLHlDQVdtQjtBQUduQixNQUFxQixjQUFjO0lBQ3pCLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBYztRQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFMUMsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sTUFBTSxDQUFDLGVBQWUsQ0FDNUIsUUFBa0IsRUFDbEIsS0FBYTtJQUNiLDhEQUE4RDtJQUM5RCxLQUFXO1FBRVgsSUFBSSxRQUFRLEtBQUssSUFBSTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsQ0FBQztRQUVuRSxRQUFRLFFBQVEsRUFBRTtZQUNoQixLQUFLLE9BQU87Z0JBQ1YsT0FBTztvQkFDTCxDQUFDLGNBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBZSxFQUFFLEVBQUUsQ0FBQyxjQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7aUJBQ2pGLENBQUM7WUFDSixLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxJQUFBLGlCQUFLLEVBQUMsSUFBQSxjQUFFLEVBQUMsT0FBTyxFQUFFLElBQUEsZUFBRyxFQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2xGLEtBQUssVUFBVTtnQkFDYixPQUFPLElBQUEsaUJBQUssRUFBQyxJQUFBLGNBQUUsRUFBQyxPQUFPLEVBQUUsSUFBQSxlQUFHLEVBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxL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
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AbstractDataTypeConstructor, ArrayDataType } 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 readonly dataTypeToColumnType;
|
|
7
|
+
static fromDataType(dataType: AbstractDataTypeConstructor | ArrayDataType<AbstractDataTypeConstructor>): ColumnType;
|
|
8
|
+
private static readonly baseOperators;
|
|
9
|
+
static operatorsForDataType(dataType: AbstractDataTypeConstructor | ArrayDataType<AbstractDataTypeConstructor>): Set<Operator>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=type-converter.d.ts.map
|
|
@@ -0,0 +1,153 @@
|
|
|
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 fromDataType(dataType) {
|
|
13
|
+
const dataTypeName = dataType.key;
|
|
14
|
+
if (dataTypeName === 'ARRAY') {
|
|
15
|
+
const arrayDataType = dataType;
|
|
16
|
+
return [this.fromDataType(arrayDataType.options.type)];
|
|
17
|
+
}
|
|
18
|
+
const columnType = TypeConverter.dataTypeToColumnType[dataTypeName];
|
|
19
|
+
if (!columnType)
|
|
20
|
+
throw new Error(`Unsupported data type: "${dataType}".`);
|
|
21
|
+
return columnType;
|
|
22
|
+
}
|
|
23
|
+
static operatorsForDataType(dataType) {
|
|
24
|
+
const dataTypeName = dataType?.key;
|
|
25
|
+
if (dataTypeName === 'ARRAY') {
|
|
26
|
+
return new Set([...this.baseOperators, 'In', 'IncludesAll', 'NotIn']);
|
|
27
|
+
}
|
|
28
|
+
switch (dataTypeName) {
|
|
29
|
+
case 'BOOLEAN':
|
|
30
|
+
return new Set([...this.baseOperators]);
|
|
31
|
+
case 'UUID':
|
|
32
|
+
case 'UUIDV1':
|
|
33
|
+
case 'UUIDV4':
|
|
34
|
+
return new Set([
|
|
35
|
+
...this.baseOperators,
|
|
36
|
+
'Contains',
|
|
37
|
+
'EndsWith',
|
|
38
|
+
'Like',
|
|
39
|
+
'StartsWith',
|
|
40
|
+
]);
|
|
41
|
+
case 'BIGINT':
|
|
42
|
+
case 'DECIMAL':
|
|
43
|
+
case 'DOUBLE':
|
|
44
|
+
case 'FLOAT':
|
|
45
|
+
case 'INTEGER':
|
|
46
|
+
case 'MEDIUMINT':
|
|
47
|
+
case 'NUMBER':
|
|
48
|
+
case 'REAL':
|
|
49
|
+
case 'SMALLINT':
|
|
50
|
+
case 'TINYINT':
|
|
51
|
+
return new Set([...this.baseOperators, 'GreaterThan', 'In', 'LessThan', 'NotIn']);
|
|
52
|
+
case 'CHAR':
|
|
53
|
+
case 'CITEXT':
|
|
54
|
+
case 'STRING':
|
|
55
|
+
case 'TEXT':
|
|
56
|
+
return new Set([
|
|
57
|
+
...this.baseOperators,
|
|
58
|
+
'Contains',
|
|
59
|
+
'EndsWith',
|
|
60
|
+
'In',
|
|
61
|
+
'Like',
|
|
62
|
+
'LongerThan',
|
|
63
|
+
'NotContains',
|
|
64
|
+
'NotIn',
|
|
65
|
+
'ShorterThan',
|
|
66
|
+
'StartsWith',
|
|
67
|
+
]);
|
|
68
|
+
case 'DATE':
|
|
69
|
+
case 'DATEONLY':
|
|
70
|
+
case 'NOW':
|
|
71
|
+
case 'TIME':
|
|
72
|
+
return new Set([...this.baseOperators, 'GreaterThan', 'LessThan']);
|
|
73
|
+
case 'ENUM':
|
|
74
|
+
return new Set([...this.baseOperators, 'In', 'NotIn']);
|
|
75
|
+
case 'JSON':
|
|
76
|
+
case 'JSONB':
|
|
77
|
+
return new Set([...this.baseOperators]);
|
|
78
|
+
// Unsupported types.
|
|
79
|
+
case 'BLOB':
|
|
80
|
+
case 'CIDR':
|
|
81
|
+
case 'GEOGRAPHY':
|
|
82
|
+
case 'GEOMETRY':
|
|
83
|
+
case 'HSTORE':
|
|
84
|
+
case 'INET':
|
|
85
|
+
case 'MACADDR':
|
|
86
|
+
case 'RANGE':
|
|
87
|
+
case 'TSVECTOR':
|
|
88
|
+
case 'VIRTUAL':
|
|
89
|
+
default:
|
|
90
|
+
return new Set();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
exports.default = TypeConverter;
|
|
95
|
+
// TODO: Allow to differentiate NUMBER and INTEGER.
|
|
96
|
+
TypeConverter.columnTypeToDataType = {
|
|
97
|
+
Boolean: sequelize_1.DataTypes.BOOLEAN,
|
|
98
|
+
Date: sequelize_1.DataTypes.DATE,
|
|
99
|
+
Dateonly: sequelize_1.DataTypes.DATEONLY,
|
|
100
|
+
Enum: sequelize_1.DataTypes.ENUM,
|
|
101
|
+
Json: sequelize_1.DataTypes.JSON,
|
|
102
|
+
Number: sequelize_1.DataTypes.NUMBER,
|
|
103
|
+
Point: null,
|
|
104
|
+
String: sequelize_1.DataTypes.STRING,
|
|
105
|
+
Timeonly: sequelize_1.DataTypes.TIME,
|
|
106
|
+
Uuid: sequelize_1.DataTypes.UUID,
|
|
107
|
+
};
|
|
108
|
+
TypeConverter.dataTypeToColumnType = {
|
|
109
|
+
BIGINT: 'Number',
|
|
110
|
+
BLOB: null,
|
|
111
|
+
BOOLEAN: 'Boolean',
|
|
112
|
+
CHAR: 'String',
|
|
113
|
+
CIDR: null,
|
|
114
|
+
CITEXT: 'String',
|
|
115
|
+
DATE: 'Date',
|
|
116
|
+
DATEONLY: 'Dateonly',
|
|
117
|
+
DECIMAL: 'Number',
|
|
118
|
+
DOUBLE: 'Number',
|
|
119
|
+
ENUM: 'Enum',
|
|
120
|
+
FLOAT: 'Number',
|
|
121
|
+
GEOGRAPHY: null,
|
|
122
|
+
GEOMETRY: null,
|
|
123
|
+
HSTORE: null,
|
|
124
|
+
INET: null,
|
|
125
|
+
INTEGER: 'Number',
|
|
126
|
+
JSON: 'Json',
|
|
127
|
+
JSONB: 'Json',
|
|
128
|
+
JSONTYPE: null,
|
|
129
|
+
MACADDR: null,
|
|
130
|
+
MEDIUMINT: 'Number',
|
|
131
|
+
NOW: 'Date',
|
|
132
|
+
NUMBER: 'Number',
|
|
133
|
+
RANGE: null,
|
|
134
|
+
REAL: 'Number',
|
|
135
|
+
SMALLINT: 'Number',
|
|
136
|
+
STRING: 'String',
|
|
137
|
+
TEXT: 'String',
|
|
138
|
+
TIME: 'Timeonly',
|
|
139
|
+
TINYINT: 'Number',
|
|
140
|
+
TSVECTOR: null,
|
|
141
|
+
UUID: 'Uuid',
|
|
142
|
+
UUIDV1: 'Uuid',
|
|
143
|
+
UUIDV4: 'Uuid',
|
|
144
|
+
VIRTUAL: null,
|
|
145
|
+
};
|
|
146
|
+
TypeConverter.baseOperators = [
|
|
147
|
+
'Blank',
|
|
148
|
+
'Equal',
|
|
149
|
+
'Missing',
|
|
150
|
+
'NotEqual',
|
|
151
|
+
'Present',
|
|
152
|
+
];
|
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1jb252ZXJ0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdHlwZS1jb252ZXJ0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx5Q0FBb0c7QUFJcEcsTUFBcUIsYUFBYTtJQWtCaEMseURBQXlEO0lBQ2xELE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBMEI7UUFDckQsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRWhFLElBQUksQ0FBQyxRQUFRO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsVUFBVSxJQUFJLENBQUMsQ0FBQztRQUU1RSxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBeUNNLE1BQU0sQ0FBQyxZQUFZLENBQ3hCLFFBQWtGO1FBRWxGLE1BQU0sWUFBWSxHQUFJLFFBQTZCLENBQUMsR0FBRyxDQUFDO1FBRXhELElBQUksWUFBWSxLQUFLLE9BQU8sRUFBRTtZQUM1QixNQUFNLGFBQWEsR0FBRyxRQUFzRCxDQUFDO1lBRTdFLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUN4RDtRQUVELE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVwRSxJQUFJLENBQUMsVUFBVTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLFFBQVEsSUFBSSxDQUFDLENBQUM7UUFFMUUsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQVVNLE1BQU0sQ0FBQyxvQkFBb0IsQ0FDaEMsUUFBa0Y7UUFFbEYsTUFBTSxZQUFZLEdBQUcsUUFBUSxFQUFFLEdBQUcsQ0FBQztRQUVuQyxJQUFJLFlBQVksS0FBSyxPQUFPLEVBQUU7WUFDNUIsT0FBTyxJQUFJLEdBQUcsQ0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDakY7UUFFRCxRQUFRLFlBQVksRUFBRTtZQUNwQixLQUFLLFNBQVM7Z0JBQ1osT0FBTyxJQUFJLEdBQUcsQ0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDcEQsS0FBSyxNQUFNLENBQUM7WUFDWixLQUFLLFFBQVEsQ0FBQztZQUNkLEtBQUssUUFBUTtnQkFDWCxPQUFPLElBQUksR0FBRyxDQUFXO29CQUN2QixHQUFHLElBQUksQ0FBQyxhQUFhO29CQUNyQixVQUFVO29CQUNWLFVBQVU7b0JBQ1YsTUFBTTtvQkFDTixZQUFZO2lCQUNiLENBQUMsQ0FBQztZQUNMLEtBQUssUUFBUSxDQUFDO1lBQ2QsS0FBSyxTQUFTLENBQUM7WUFDZixLQUFLLFFBQVEsQ0FBQztZQUNkLEtBQUssT0FBTyxDQUFDO1lBQ2IsS0FBSyxTQUFTLENBQUM7WUFDZixLQUFLLFdBQVcsQ0FBQztZQUNqQixLQUFLLFFBQVEsQ0FBQztZQUNkLEtBQUssTUFBTSxDQUFDO1lBQ1osS0FBSyxVQUFVLENBQUM7WUFDaEIsS0FBSyxTQUFTO2dCQUNaLE9BQU8sSUFBSSxHQUFHLENBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUM5RixLQUFLLE1BQU0sQ0FBQztZQUNaLEtBQUssUUFBUSxDQUFDO1lBQ2QsS0FBSyxRQUFRLENBQUM7WUFDZCxLQUFLLE1BQU07Z0JBQ1QsT0FBTyxJQUFJLEdBQUcsQ0FBVztvQkFDdkIsR0FBRyxJQUFJLENBQUMsYUFBYTtvQkFDckIsVUFBVTtvQkFDVixVQUFVO29CQUNWLElBQUk7b0JBQ0osTUFBTTtvQkFDTixZQUFZO29CQUNaLGFBQWE7b0JBQ2IsT0FBTztvQkFDUCxhQUFhO29CQUNiLFlBQVk7aUJBQ2IsQ0FBQyxDQUFDO1lBQ0wsS0FBSyxNQUFNLENBQUM7WUFDWixLQUFLLFVBQVUsQ0FBQztZQUNoQixLQUFLLEtBQUssQ0FBQztZQUNYLEtBQUssTUFBTTtnQkFDVCxPQUFPLElBQUksR0FBRyxDQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQy9FLEtBQUssTUFBTTtnQkFDVCxPQUFPLElBQUksR0FBRyxDQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ25FLEtBQUssTUFBTSxDQUFDO1lBQ1osS0FBSyxPQUFPO2dCQUNWLE9BQU8sSUFBSSxHQUFHLENBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1lBQ3BELHFCQUFxQjtZQUNyQixLQUFLLE1BQU0sQ0FBQztZQUNaLEtBQUssTUFBTSxDQUFDO1lBQ1osS0FBSyxXQUFXLENBQUM7WUFDakIsS0FBSyxVQUFVLENBQUM7WUFDaEIsS0FBSyxRQUFRLENBQUM7WUFDZCxLQUFLLE1BQU0sQ0FBQztZQUNaLEtBQUssU0FBUyxDQUFDO1lBQ2YsS0FBSyxPQUFPLENBQUM7WUFDYixLQUFLLFVBQVUsQ0FBQztZQUNoQixLQUFLLFNBQVMsQ0FBQztZQUNmO2dCQUNFLE9BQU8sSUFBSSxHQUFHLEVBQVksQ0FBQztTQUM5QjtJQUNILENBQUM7O0FBcktILGdDQXNLQztBQXJLQyxtREFBbUQ7QUFDM0Isa0NBQW9CLEdBR3hDO0lBQ0YsT0FBTyxFQUFFLHFCQUFTLENBQUMsT0FBTztJQUMxQixJQUFJLEVBQUUscUJBQVMsQ0FBQyxJQUFJO0lBQ3BCLFFBQVEsRUFBRSxxQkFBUyxDQUFDLFFBQVE7SUFDNUIsSUFBSSxFQUFFLHFCQUFTLENBQUMsSUFBSTtJQUNwQixJQUFJLEVBQUUscUJBQVMsQ0FBQyxJQUFJO0lBQ3BCLE1BQU0sRUFBRSxxQkFBUyxDQUFDLE1BQU07SUFDeEIsS0FBSyxFQUFFLElBQUk7SUFDWCxNQUFNLEVBQUUscUJBQVMsQ0FBQyxNQUFNO0lBQ3hCLFFBQVEsRUFBRSxxQkFBUyxDQUFDLElBQUk7SUFDeEIsSUFBSSxFQUFFLHFCQUFTLENBQUMsSUFBSTtDQUNyQixDQUFDO0FBV3NCLGtDQUFvQixHQUFtQztJQUM3RSxNQUFNLEVBQUUsUUFBUTtJQUNoQixJQUFJLEVBQUUsSUFBSTtJQUNWLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLElBQUksRUFBRSxRQUFRO0lBQ2QsSUFBSSxFQUFFLElBQUk7SUFDVixNQUFNLEVBQUUsUUFBUTtJQUNoQixJQUFJLEVBQUUsTUFBTTtJQUNaLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLE9BQU8sRUFBRSxRQUFRO0lBQ2pCLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLElBQUksRUFBRSxNQUFNO0lBQ1osS0FBSyxFQUFFLFFBQVE7SUFDZixTQUFTLEVBQUUsSUFBSTtJQUNmLFFBQVEsRUFBRSxJQUFJO0lBQ2QsTUFBTSxFQUFFLElBQUk7SUFDWixJQUFJLEVBQUUsSUFBSTtJQUNWLE9BQU8sRUFBRSxRQUFRO0lBQ2pCLElBQUksRUFBRSxNQUFNO0lBQ1osS0FBSyxFQUFFLE1BQU07SUFDYixRQUFRLEVBQUUsSUFBSTtJQUNkLE9BQU8sRUFBRSxJQUFJO0lBQ2IsU0FBUyxFQUFFLFFBQVE7SUFDbkIsR0FBRyxFQUFFLE1BQU07SUFDWCxNQUFNLEVBQUUsUUFBUTtJQUNoQixLQUFLLEVBQUUsSUFBSTtJQUNYLElBQUksRUFBRSxRQUFRO0lBQ2QsUUFBUSxFQUFFLFFBQVE7SUFDbEIsTUFBTSxFQUFFLFFBQVE7SUFDaEIsSUFBSSxFQUFFLFFBQVE7SUFDZCxJQUFJLEVBQUUsVUFBVTtJQUNoQixPQUFPLEVBQUUsUUFBUTtJQUNqQixRQUFRLEVBQUUsSUFBSTtJQUNkLElBQUksRUFBRSxNQUFNO0lBQ1osTUFBTSxFQUFFLE1BQU07SUFDZCxNQUFNLEVBQUUsTUFBTTtJQUNkLE9BQU8sRUFBRSxJQUFJO0NBQ2QsQ0FBQztBQW9Cc0IsMkJBQWEsR0FBZTtJQUNsRCxPQUFPO0lBQ1AsT0FBTztJQUNQLFNBQVM7SUFDVCxVQUFVO0lBQ1YsU0FBUztDQUNWLENBQUMifQ==
|
package/package.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@forestadmin/datasource-sequelize",
|
|
3
|
+
"version": "1.0.0-beta.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-beta.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.18.0",
|
|
31
|
+
"sqlite3": "^5.0.2"
|
|
32
|
+
},
|
|
33
|
+
"peerDependencies": {
|
|
34
|
+
"sequelize": "6.18.0"
|
|
35
|
+
}
|
|
36
|
+
}
|