@forestadmin/datasource-sequelize 1.13.1 → 1.13.2
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/dist/collection.js +3 -3
- package/dist/utils/serializer.d.ts +4 -1
- package/dist/utils/serializer.js +12 -6
- package/package.json +1 -1
package/dist/collection.js
CHANGED
|
@@ -60,7 +60,7 @@ class SequelizeCollection extends datasource_toolkit_1.BaseCollection {
|
|
|
60
60
|
return records.map(record => {
|
|
61
61
|
const plainRecord = record.get({ plain: true });
|
|
62
62
|
const filteredRecord = Object.fromEntries(Object.entries(plainRecord).filter(([key]) => nonVirtualFields.includes(key)));
|
|
63
|
-
return serializer_1.default.serialize(filteredRecord);
|
|
63
|
+
return serializer_1.default.serialize(filteredRecord, attributes);
|
|
64
64
|
});
|
|
65
65
|
}
|
|
66
66
|
async list(caller, filter, projection) {
|
|
@@ -86,7 +86,7 @@ class SequelizeCollection extends datasource_toolkit_1.BaseCollection {
|
|
|
86
86
|
subQuery: false,
|
|
87
87
|
};
|
|
88
88
|
const records = await this.model.findAll(query);
|
|
89
|
-
const rawRecords = records.map(record => serializer_1.default.serialize(record.get({ plain: true })));
|
|
89
|
+
const rawRecords = records.map(record => serializer_1.default.serialize(record.get({ plain: true }), this.model.rawAttributes));
|
|
90
90
|
// Use projection to filter out the unwanted primary keys that were added to the projection
|
|
91
91
|
// so that sequelize can do its job.
|
|
92
92
|
return projection.apply(rawRecords);
|
|
@@ -135,4 +135,4 @@ class SequelizeCollection extends datasource_toolkit_1.BaseCollection {
|
|
|
135
135
|
}
|
|
136
136
|
}
|
|
137
137
|
exports.default = SequelizeCollection;
|
|
138
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBbUJBLHdFQUE4RjtBQUM5Rix5Q0FBa0Q7QUFFbEQsc0VBQW1EO0FBQ25ELDBFQUFpRDtBQUNqRCx3SEFBMEU7QUFDMUUsOEVBQXFEO0FBQ3JELG9FQUE0QztBQUk1QyxNQUFxQixtQkFBb0IsU0FBUSxtQ0FBYztJQVM3RCxZQUNFLElBQVksRUFDWixVQUFzQjtJQUN0Qiw4REFBOEQ7SUFDOUQsS0FBNkIsRUFDN0IsTUFBZTtRQUVmLElBQUksQ0FBQyxLQUFLO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBRTlELEtBQUssQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ3RCLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztZQUMxQixLQUFLO1lBQ0w7Ozs7Ozs7Ozs7ZUFVRztZQUNILFFBQVEsRUFBRSxLQUFLLEVBQ2IsR0FBVyxFQUNYLFlBQTBCLEVBQzFCLE9BQThDLEVBQzlDLEVBQUU7Z0JBQ0YsTUFBTSxHQUFHLEdBQUcsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7Z0JBQ25ELE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFO29CQUM5QyxJQUFJLEVBQUUsc0JBQVUsQ0FBQyxHQUFHO29CQUNwQixLQUFLLEVBQUUsS0FBSztvQkFDWixHQUFHLEVBQUUsSUFBSTtvQkFDVCxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDO2lCQUN2RSxDQUFDLENBQUM7Z0JBRUgsT0FBTyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMs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
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import type { RecordData } from '@forestadmin/datasource-toolkit';
|
|
2
|
+
import type { ModelAttributeColumnOptions } from 'sequelize';
|
|
3
|
+
type RawAttributes = Record<string, ModelAttributeColumnOptions>;
|
|
2
4
|
export default class Serializer {
|
|
3
|
-
static serialize(record: RecordData): RecordData;
|
|
5
|
+
static serialize(record: RecordData, rawAttributes?: RawAttributes): RecordData;
|
|
4
6
|
static serializeValue(value: unknown): unknown;
|
|
5
7
|
static serializeDate(date: Date): string;
|
|
6
8
|
}
|
|
9
|
+
export {};
|
|
7
10
|
//# sourceMappingURL=serializer.d.ts.map
|
package/dist/utils/serializer.js
CHANGED
|
@@ -1,14 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const sequelize_1 = require("sequelize");
|
|
3
4
|
class Serializer {
|
|
4
|
-
static serialize(record) {
|
|
5
|
+
static serialize(record, rawAttributes) {
|
|
5
6
|
Object.entries(record).forEach(([name, value]) => {
|
|
6
|
-
if (value instanceof Date)
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
if (value instanceof Date) {
|
|
8
|
+
const typeKey = rawAttributes?.[name]?.type?.key;
|
|
9
|
+
const iso = this.serializeDate(value);
|
|
10
|
+
record[name] = typeKey === sequelize_1.DataTypes.DATEONLY.key && iso ? iso.slice(0, 10) : iso;
|
|
11
|
+
}
|
|
12
|
+
else if (Array.isArray(value)) {
|
|
9
13
|
this.serializeValue(value); // the change is by references
|
|
10
|
-
|
|
14
|
+
}
|
|
15
|
+
else if (value instanceof Object) {
|
|
11
16
|
return this.serialize(record[name]);
|
|
17
|
+
}
|
|
12
18
|
});
|
|
13
19
|
return record;
|
|
14
20
|
}
|
|
@@ -34,4 +40,4 @@ class Serializer {
|
|
|
34
40
|
}
|
|
35
41
|
}
|
|
36
42
|
exports.default = Serializer;
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXplci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9zZXJpYWxpemVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0EseUNBQXNDO0FBSXRDLE1BQXFCLFVBQVU7SUFDN0IsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFrQixFQUFFLGFBQTZCO1FBQ2hFLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUMvQyxJQUFJLEtBQUssWUFBWSxJQUFJLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxPQUFPLEdBQUksYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBeUIsRUFBRSxHQUFHLENBQUM7Z0JBQ3ZFLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLEtBQUsscUJBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUNwRixDQUFDO2lCQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsOEJBQThCO1lBQzVELENBQUM7aUJBQU0sSUFBSSxLQUFLLFlBQVksTUFBTSxFQUFFLENBQUM7Z0JBQ25DLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN0QyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFjO1FBQ2xDLElBQUksS0FBSyxZQUFZLElBQUk7WUFBRSxPQUFPLFVBQVUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbEUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDckIsd0VBQXdFO2dCQUN4RSxJQUFJLENBQUMsWUFBWSxJQUFJO29CQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hFLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBVTtRQUM3QixJQUFJLENBQUM7WUFDSCxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUM1QixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7Q0FDRjtBQXJDRCw2QkFxQ0MifQ==
|