@forestadmin/agent 1.8.8 → 1.8.10
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.
|
@@ -50,7 +50,7 @@ class SchemaGeneratorFields {
|
|
|
50
50
|
isVirtual: false,
|
|
51
51
|
reference: null,
|
|
52
52
|
type: this.convertColumnType(column.columnType),
|
|
53
|
-
validations: validation_1.default.convertValidationList(column
|
|
53
|
+
validations: validation_1.default.convertValidationList(column),
|
|
54
54
|
};
|
|
55
55
|
}
|
|
56
56
|
static convertColumnType(type) {
|
|
@@ -130,7 +130,7 @@ class SchemaGeneratorFields {
|
|
|
130
130
|
isRequired: keyField.validation?.some(v => v.operator === 'Present') ?? false,
|
|
131
131
|
isReadOnly: Boolean(keyField.isReadOnly),
|
|
132
132
|
isSortable: Boolean(keyField.isSortable),
|
|
133
|
-
validations: validation_1.default.convertValidationList(keyField
|
|
133
|
+
validations: validation_1.default.convertValidationList(keyField),
|
|
134
134
|
reference: `${foreignCollection.name}.${relation.foreignKeyTarget}`,
|
|
135
135
|
};
|
|
136
136
|
}
|
|
@@ -163,4 +163,4 @@ SchemaGeneratorFields.relationMap = {
|
|
|
163
163
|
OneToMany: 'HasMany',
|
|
164
164
|
OneToOne: 'HasOne',
|
|
165
165
|
};
|
|
166
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
166
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdG9yLWZpZWxkcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9mb3Jlc3Qtc2NoZW1hL2dlbmVyYXRvci1maWVsZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx3RUFheUM7QUFHekMsOERBQW1EO0FBQ25ELDhEQUFtRDtBQUVuRCxNQUFxQixxQkFBcUI7SUFReEMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFzQixFQUFFLElBQVk7UUFDckQsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWhELElBQUksTUFBeUIsQ0FBQztRQUU5QixRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssUUFBUTtnQkFDWCxNQUFNLEdBQUcscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNuRSxNQUFNO1lBRVIsS0FBSyxXQUFXLENBQUM7WUFDakIsS0FBSyxXQUFXLENBQUM7WUFDakIsS0FBSyxZQUFZLENBQUM7WUFDbEIsS0FBSyxVQUFVO2dCQUNiLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3JFLE1BQU07WUFFUjtnQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7U0FDekM7UUFFRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO2FBQzFCLElBQUksRUFBRTthQUNOLE1BQU0sQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ3JDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7WUFFMUIsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVP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
|
|
@@ -1,10 +1,24 @@
|
|
|
1
1
|
import { ColumnSchema } from '@forestadmin/datasource-toolkit';
|
|
2
2
|
import { ForestServerField } from '@forestadmin/forestadmin-client';
|
|
3
3
|
type FrontendValidation = ForestServerField['validations'][number];
|
|
4
|
-
type Validation = ColumnSchema['validation'][number];
|
|
5
4
|
export default class FrontendValidationUtils {
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Those operators depend on the current time so they won't work.
|
|
7
|
+
* The reason is that we need now() to be evaluated at query time, not at schema generation time.
|
|
8
|
+
*/
|
|
9
|
+
private static excluded;
|
|
10
|
+
/** This is the list of operators which are supported in the frontend implementation */
|
|
11
|
+
private static supported;
|
|
12
|
+
/** Convert a list of our validation rules to what we'll be sending to the frontend */
|
|
13
|
+
static convertValidationList(column: ColumnSchema): FrontendValidation[];
|
|
14
|
+
/** Convert one of our validation rules to a given number of frontend validation rules */
|
|
15
|
+
private static simplifyRule;
|
|
16
|
+
/**
|
|
17
|
+
* The frontend crashes when it receives multiple rules of the same type.
|
|
18
|
+
* This method merges the rules which can be merged and drops the others.
|
|
19
|
+
*/
|
|
20
|
+
private static removeDuplicatesInPlace;
|
|
21
|
+
private static mergeInto;
|
|
8
22
|
}
|
|
9
23
|
export {};
|
|
10
24
|
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -1,28 +1,149 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const
|
|
3
|
+
const datasource_toolkit_1 = require("@forestadmin/datasource-toolkit");
|
|
4
4
|
class FrontendValidationUtils {
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
/** Convert a list of our validation rules to what we'll be sending to the frontend */
|
|
6
|
+
static convertValidationList(column) {
|
|
7
|
+
if (!column.validation)
|
|
7
8
|
return [];
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
9
|
+
const rules = column.validation.flatMap(rule => this.simplifyRule(column.columnType, rule));
|
|
10
|
+
this.removeDuplicatesInPlace(rules);
|
|
11
|
+
return rules.map(rule => this.supported[rule.operator](rule));
|
|
12
|
+
}
|
|
13
|
+
/** Convert one of our validation rules to a given number of frontend validation rules */
|
|
14
|
+
static simplifyRule(columnType, rule) {
|
|
15
|
+
// Operators which we don't want to end up the schema
|
|
16
|
+
if (this.excluded.has(rule.operator))
|
|
17
|
+
return [];
|
|
18
|
+
// Operators which are natively supported by the frontend
|
|
19
|
+
if (this.supported[rule.operator])
|
|
20
|
+
return [rule];
|
|
21
|
+
try {
|
|
22
|
+
// Add the 'Equal|NotEqual' operators to unlock the `In|NotIn -> Match` replacement rules.
|
|
23
|
+
// This is a bit hacky, but it allows to reuse the existing logic.
|
|
24
|
+
const operators = new Set(Object.keys(this.supported));
|
|
25
|
+
operators.add('Equal');
|
|
26
|
+
operators.add('NotEqual');
|
|
27
|
+
// Rewrite the rule to use only operators that the frontend supports.
|
|
28
|
+
const leaf = new datasource_toolkit_1.ConditionTreeLeaf('field', rule.operator, rule.value);
|
|
29
|
+
const timezone = 'Europe/Paris'; // we're sending the schema => use random tz
|
|
30
|
+
const tree = datasource_toolkit_1.ConditionTreeEquivalent.getEquivalentTree(leaf, operators, columnType, timezone);
|
|
31
|
+
let conditions = [];
|
|
32
|
+
if (tree instanceof datasource_toolkit_1.ConditionTreeLeaf) {
|
|
33
|
+
conditions = [tree];
|
|
34
|
+
}
|
|
35
|
+
else if (tree instanceof datasource_toolkit_1.ConditionTreeBranch && tree.aggregator === 'And') {
|
|
36
|
+
conditions = tree.conditions;
|
|
37
|
+
}
|
|
38
|
+
return conditions
|
|
39
|
+
.filter(c => c instanceof datasource_toolkit_1.ConditionTreeLeaf)
|
|
40
|
+
.filter(c => c.operator !== 'Equal' && c.operator !== 'NotEqual')
|
|
41
|
+
.flatMap(c => this.simplifyRule(columnType, c));
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// Just ignore errors, they mean that the operator is not supported by the frontend
|
|
45
|
+
// and that we don't have an automatic conversion for it.
|
|
46
|
+
//
|
|
47
|
+
// In that case we fallback to just validating the data entry in the agent (which is better
|
|
48
|
+
// than nothing but will not be as user friendly as the frontend validation).
|
|
49
|
+
}
|
|
50
|
+
// Drop the rule if we don't know how to convert it (we could log a warning here).
|
|
51
|
+
return [];
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* The frontend crashes when it receives multiple rules of the same type.
|
|
55
|
+
* This method merges the rules which can be merged and drops the others.
|
|
56
|
+
*/
|
|
57
|
+
static removeDuplicatesInPlace(rules) {
|
|
58
|
+
const used = new Map();
|
|
59
|
+
for (let i = 0; i < rules.length; i += 1) {
|
|
60
|
+
if (used.has(rules[i].operator)) {
|
|
61
|
+
const rule = rules[used.get(rules[i].operator)];
|
|
62
|
+
const [newRule] = rules.splice(i, 1);
|
|
63
|
+
i -= 1;
|
|
64
|
+
this.mergeInto(rule, newRule);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
used.set(rules[i].operator, i);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
static mergeInto(rule, newRule) {
|
|
72
|
+
if (rule.operator === 'GreaterThan' ||
|
|
73
|
+
rule.operator === 'After' ||
|
|
74
|
+
rule.operator === 'LongerThan') {
|
|
75
|
+
rule.value = rule.value < newRule.value ? newRule.value : rule.value;
|
|
76
|
+
}
|
|
77
|
+
else if (rule.operator === 'LessThan' ||
|
|
78
|
+
rule.operator === 'Before' ||
|
|
79
|
+
rule.operator === 'ShorterThan') {
|
|
80
|
+
rule.value = rule.value < newRule.value ? rule.value : newRule.value;
|
|
81
|
+
}
|
|
82
|
+
else if (rule.operator === 'Match') {
|
|
83
|
+
// Make one big regex that matches both patterns
|
|
84
|
+
// @see https://stackoverflow.com/a/870506/1897495
|
|
85
|
+
const regexp = rule.value;
|
|
86
|
+
const newRegexp = newRule.value;
|
|
87
|
+
rule.value = new RegExp(`^(?=${regexp.source})(?=${newRegexp.source}).*$`, regexp.flags);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
// Ignore the rules that we can't deduplicate (we could log a warning here).
|
|
91
|
+
}
|
|
16
92
|
}
|
|
17
93
|
}
|
|
18
94
|
exports.default = FrontendValidationUtils;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
95
|
+
/**
|
|
96
|
+
* Those operators depend on the current time so they won't work.
|
|
97
|
+
* The reason is that we need now() to be evaluated at query time, not at schema generation time.
|
|
98
|
+
*/
|
|
99
|
+
FrontendValidationUtils.excluded = new Set([
|
|
100
|
+
...['Future', 'Past', 'Today', 'Yesterday'],
|
|
101
|
+
...['PreviousMonth', 'PreviousQuarter', 'PreviousWeek', 'PreviousXDays', 'PreviousYear'],
|
|
102
|
+
...['AfterXHoursAgo', 'BeforeXHoursAgo', 'PreviousXDaysToDate'],
|
|
103
|
+
...['PreviousMonthToDate', 'PreviousQuarterToDate', 'PreviousWeekToDate', 'PreviousYearToDate'],
|
|
104
|
+
]);
|
|
105
|
+
/** This is the list of operators which are supported in the frontend implementation */
|
|
106
|
+
FrontendValidationUtils.supported = {
|
|
107
|
+
Present: () => ({ type: 'is present', message: 'Field is required' }),
|
|
108
|
+
After: rule => ({
|
|
109
|
+
type: 'is after',
|
|
110
|
+
value: rule.value,
|
|
111
|
+
message: `Value must be after ${rule.value}`,
|
|
112
|
+
}),
|
|
113
|
+
Before: rule => ({
|
|
114
|
+
type: 'is before',
|
|
115
|
+
value: rule.value,
|
|
116
|
+
message: `Value must be before ${rule.value}`,
|
|
117
|
+
}),
|
|
118
|
+
Contains: rule => ({
|
|
119
|
+
type: 'contains',
|
|
120
|
+
value: rule.value,
|
|
121
|
+
message: `Value must contain '${rule.value}'`,
|
|
122
|
+
}),
|
|
123
|
+
GreaterThan: rule => ({
|
|
124
|
+
type: 'is greater than',
|
|
125
|
+
value: rule.value,
|
|
126
|
+
message: `Value must be greater than ${rule.value}`,
|
|
127
|
+
}),
|
|
128
|
+
LessThan: rule => ({
|
|
129
|
+
type: 'is less than',
|
|
130
|
+
value: rule.value,
|
|
131
|
+
message: `Value must be lower than ${rule.value}`,
|
|
132
|
+
}),
|
|
133
|
+
LongerThan: rule => ({
|
|
134
|
+
type: 'is longer than',
|
|
135
|
+
value: rule.value,
|
|
136
|
+
message: `Value must be longer than ${rule.value} characters`,
|
|
137
|
+
}),
|
|
138
|
+
ShorterThan: rule => ({
|
|
139
|
+
type: 'is shorter than',
|
|
140
|
+
value: rule.value,
|
|
141
|
+
message: `Value must be shorter than ${rule.value} characters`,
|
|
142
|
+
}),
|
|
143
|
+
Match: rule => ({
|
|
144
|
+
type: 'is like',
|
|
145
|
+
value: rule.value.toString(),
|
|
146
|
+
message: `Value must match ${rule.value}`,
|
|
147
|
+
}),
|
|
27
148
|
};
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91dGlscy9mb3Jlc3Qtc2NoZW1hL3ZhbGlkYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx3RUFPeUM7QUFNekMsTUFBcUIsdUJBQXVCO0lBeUQxQyxzRkFBc0Y7SUFDdEYsTUFBTSxDQUFDLHFCQUFxQixDQUFDLE1BQW9CO1FBQy9DLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBRWxDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUYsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXBDLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELHlGQUF5RjtJQUNqRixNQUFNLENBQUMsWUFBWSxDQUFDLFVBQXNCLEVBQUUsSUFBZ0I7UUFDbEUscURBQXFEO1FBQ3JELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBRWhELHlEQUF5RDtRQUN6RCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVqRCxJQUFJO1lBQ0YsMEZBQTBGO1lBQzFGLGtFQUFrRTtZQUNsRSxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxD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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forestadmin/agent",
|
|
3
|
-
"version": "1.8.
|
|
3
|
+
"version": "1.8.10",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"license": "GPL-3.0",
|
|
6
6
|
"publishConfig": {
|
|
@@ -14,9 +14,9 @@
|
|
|
14
14
|
"dependencies": {
|
|
15
15
|
"@fast-csv/format": "^4.3.5",
|
|
16
16
|
"@fastify/express": "^1.1.0",
|
|
17
|
-
"@forestadmin/datasource-customizer": "1.
|
|
18
|
-
"@forestadmin/datasource-toolkit": "1.
|
|
19
|
-
"@forestadmin/forestadmin-client": "1.1.
|
|
17
|
+
"@forestadmin/datasource-customizer": "1.7.0",
|
|
18
|
+
"@forestadmin/datasource-toolkit": "1.5.0",
|
|
19
|
+
"@forestadmin/forestadmin-client": "1.1.13",
|
|
20
20
|
"@koa/cors": "^4.0.0",
|
|
21
21
|
"@koa/router": "^12.0.0",
|
|
22
22
|
"forest-ip-utils": "^1.0.1",
|