@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.
@@ -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,6 @@
1
+ import { RecordData } from '@forestadmin/datasource-toolkit';
2
+ export default class Serializer {
3
+ static serialize(record: RecordData): RecordData;
4
+ static serializeValue(value: unknown): unknown;
5
+ }
6
+ //# sourceMappingURL=serializer.d.ts.map
@@ -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,3 @@
1
+ import { ModelDefined } from 'sequelize/types';
2
+ export default function unAmbigousField(model: ModelDefined<any, any>, field: string, unAmbigous?: boolean): string;
3
+ //# sourceMappingURL=un-ambigous.d.ts.map
@@ -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
+ }