@forestadmin/datasource-customizer 1.37.4 → 1.38.0
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.
|
@@ -6,6 +6,7 @@ export default class TypingGenerator {
|
|
|
6
6
|
constructor(logger: Logger, options?: {
|
|
7
7
|
maxFieldsCount?: number;
|
|
8
8
|
});
|
|
9
|
+
private static sortedEntries;
|
|
9
10
|
/**
|
|
10
11
|
* Write types to disk at a given path.
|
|
11
12
|
* This method read the file which is already there before overwriting so that customers
|
package/dist/typing-generator.js
CHANGED
|
@@ -10,6 +10,9 @@ class TypingGenerator {
|
|
|
10
10
|
};
|
|
11
11
|
this.options.maxFieldsCount = options.maxFieldsCount ?? this.options.maxFieldsCount;
|
|
12
12
|
}
|
|
13
|
+
static sortedEntries(...args) {
|
|
14
|
+
return Object.entries(...args).sort(([name1], [name2]) => name1.localeCompare(name2));
|
|
15
|
+
}
|
|
13
16
|
/**
|
|
14
17
|
* Write types to disk at a given path.
|
|
15
18
|
* This method read the file which is already there before overwriting so that customers
|
|
@@ -79,13 +82,15 @@ class TypingGenerator {
|
|
|
79
82
|
.join('\n');
|
|
80
83
|
}
|
|
81
84
|
getRow(collection) {
|
|
82
|
-
const content =
|
|
83
|
-
return field.type === 'Column'
|
|
85
|
+
const content = TypingGenerator.sortedEntries(collection.schema.fields).reduce((memo, [name, field]) => {
|
|
86
|
+
return field.type === 'Column'
|
|
87
|
+
? [...memo, ` '${name}': ${this.getType(field)};`]
|
|
88
|
+
: memo;
|
|
84
89
|
}, []);
|
|
85
90
|
return ` plain: {\n${content.join('\n')}\n };`;
|
|
86
91
|
}
|
|
87
92
|
getRelations(collection) {
|
|
88
|
-
const content =
|
|
93
|
+
const content = TypingGenerator.sortedEntries(collection.schema.fields).reduce((memo, [name, field]) => {
|
|
89
94
|
if (field.type === 'ManyToOne' || field.type === 'OneToOne') {
|
|
90
95
|
const relation = field.foreignCollection;
|
|
91
96
|
return [
|
|
@@ -108,13 +113,14 @@ class TypingGenerator {
|
|
|
108
113
|
const queue = [{ collection: mainCollection, depth: 0, prefix: '', traversed: [] }];
|
|
109
114
|
while (queue.length > 0 && result.length < this.options.maxFieldsCount) {
|
|
110
115
|
const { collection, depth, prefix, traversed } = queue.shift();
|
|
116
|
+
const sortedFields = TypingGenerator.sortedEntries(collection.schema.fields);
|
|
111
117
|
if (prefix) {
|
|
112
|
-
result.push(...
|
|
118
|
+
result.push(...sortedFields
|
|
113
119
|
.filter(([, schema]) => schema.type === 'Column')
|
|
114
120
|
.map(([name, schema]) => `'${prefix}:${name}': ${this.getType(schema)};`));
|
|
115
121
|
}
|
|
116
122
|
if (depth < maxDepth) {
|
|
117
|
-
queue.push(...
|
|
123
|
+
queue.push(...sortedFields
|
|
118
124
|
.filter(([, schema]) => schema.type === 'ManyToOne' || schema.type === 'OneToOne')
|
|
119
125
|
.map(([name, schema]) => {
|
|
120
126
|
return {
|
|
@@ -152,7 +158,12 @@ class TypingGenerator {
|
|
|
152
158
|
})}>`;
|
|
153
159
|
}
|
|
154
160
|
if (field.columnType === 'Enum') {
|
|
155
|
-
|
|
161
|
+
if (field.enumValues === undefined)
|
|
162
|
+
return 'string';
|
|
163
|
+
return ([...field.enumValues]
|
|
164
|
+
.sort((v1, v2) => v1.localeCompare(v2))
|
|
165
|
+
.map(v => `'${v.replace(/'/g, "\\'")}'`)
|
|
166
|
+
.join(' | ') ?? 'string');
|
|
156
167
|
}
|
|
157
168
|
if (typeof field.columnType === 'string') {
|
|
158
169
|
return {
|
|
@@ -168,10 +179,10 @@ class TypingGenerator {
|
|
|
168
179
|
Uuid: 'string',
|
|
169
180
|
}[field.columnType];
|
|
170
181
|
}
|
|
171
|
-
return `{${
|
|
182
|
+
return `{${TypingGenerator.sortedEntries(field.columnType)
|
|
172
183
|
.map(([key, subType]) => `${key}: ${this.getType({ columnType: subType })}`)
|
|
173
184
|
.join('; ')}}`;
|
|
174
185
|
}
|
|
175
186
|
}
|
|
176
187
|
exports.default = TypingGenerator;
|
|
177
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
188
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwaW5nLWdlbmVyYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy90eXBpbmctZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsd0VBTXlDO0FBQ3pDLDBDQUFrRDtBQUVsRCxNQUFxQixlQUFlO0lBS2xDLFlBQTZCLE1BQWMsRUFBRSxVQUF1QyxFQUFFO1FBQXpELFdBQU0sR0FBTixNQUFNLENBQVE7UUFKMUIsWUFBTyxHQUFHO1lBQ3pCLGNBQWMsRUFBRSxLQUFNO1NBQ3ZCLENBQUM7UUFHQSxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO0lBQ3RGLENBQUM7SUFFTyxNQUFNLENBQUMsYUFBYSxDQUMxQixHQUFHLElBQTBDO1FBRTdDLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLHVCQUF1QixDQUNsQyxVQUFzQixFQUN0QixXQUFtQixFQUNuQixlQUF1QjtRQUV2QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUNqRSxJQUFJLFVBQVUsR0FBa0IsSUFBSSxDQUFDO1FBRXJDLElBQUk7WUFDRixVQUFVLEdBQUcsTUFBTSxJQUFBLG1CQUFRLEVBQUMsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDakU7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxRQUFRO2dCQUFF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
|