@forestadmin/agent 1.0.0-beta.60 → 1.0.0-beta.62
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/{builder/agent.d.ts → agent.d.ts} +16 -11
- package/dist/agent.js +133 -0
- package/dist/{builder/framework-mounter.d.ts → framework-mounter.d.ts} +0 -0
- package/dist/{builder/framework-mounter.js → framework-mounter.js} +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.js +5 -20
- package/dist/{agent/routes → routes}/access/api-chart.d.ts +0 -0
- package/dist/{agent/routes → routes}/access/api-chart.js +1 -1
- package/dist/{agent/routes → routes}/access/chart.d.ts +0 -0
- package/dist/routes/access/chart.js +162 -0
- package/dist/{agent/routes → routes}/access/count-related.d.ts +0 -0
- package/dist/{agent/routes → routes}/access/count-related.js +1 -1
- package/dist/{agent/routes → routes}/access/count.d.ts +0 -0
- package/dist/{agent/routes → routes}/access/count.js +1 -1
- package/dist/{agent/routes → routes}/access/csv-related.d.ts +0 -0
- package/dist/{agent/routes → routes}/access/csv-related.js +1 -1
- package/dist/{agent/routes → routes}/access/csv.d.ts +0 -0
- package/dist/{agent/routes → routes}/access/csv.js +1 -1
- package/dist/{agent/routes → routes}/access/get.d.ts +0 -0
- package/dist/{agent/routes → routes}/access/get.js +1 -1
- package/dist/{agent/routes → routes}/access/list-related.d.ts +0 -0
- package/dist/{agent/routes → routes}/access/list-related.js +1 -1
- package/dist/{agent/routes → routes}/access/list.d.ts +0 -0
- package/dist/{agent/routes → routes}/access/list.js +1 -1
- package/dist/{agent/routes → routes}/base-route.d.ts +0 -0
- package/dist/{agent/routes → routes}/base-route.js +1 -1
- package/dist/{agent/routes → routes}/collection-route.d.ts +0 -0
- package/dist/{agent/routes → routes}/collection-route.js +1 -1
- package/dist/{agent/routes → routes}/index.d.ts +0 -0
- package/dist/{agent/routes → routes}/index.js +1 -1
- package/dist/{agent/routes → routes}/modification/action.d.ts +0 -0
- package/dist/routes/modification/action.js +104 -0
- package/dist/{agent/routes → routes}/modification/associate-related.d.ts +0 -0
- package/dist/routes/modification/associate-related.js +51 -0
- package/dist/{agent/routes → routes}/modification/create.d.ts +0 -0
- package/dist/routes/modification/create.js +83 -0
- package/dist/{agent/routes → routes}/modification/delete.d.ts +0 -0
- package/dist/{agent/routes → routes}/modification/delete.js +1 -1
- package/dist/{agent/routes → routes}/modification/dissociate-delete-related.d.ts +0 -0
- package/dist/{agent/routes → routes}/modification/dissociate-delete-related.js +1 -1
- package/dist/{agent/routes → routes}/modification/update-field.d.ts +0 -0
- package/dist/{agent/routes → routes}/modification/update-field.js +1 -1
- package/dist/{agent/routes → routes}/modification/update-relation.d.ts +0 -0
- package/dist/routes/modification/update-relation.js +59 -0
- package/dist/{agent/routes → routes}/modification/update.d.ts +0 -0
- package/dist/routes/modification/update.js +31 -0
- package/dist/{agent/routes → routes}/relation-route.d.ts +0 -0
- package/dist/{agent/routes → routes}/relation-route.js +1 -1
- package/dist/{agent/routes → routes}/security/authentication.d.ts +0 -0
- package/dist/{agent/routes → routes}/security/authentication.js +1 -1
- package/dist/{agent/routes → routes}/security/ip-whitelist.d.ts +0 -0
- package/dist/{agent/routes → routes}/security/ip-whitelist.js +1 -1
- package/dist/{agent/routes → routes}/security/scope-invalidation.d.ts +0 -0
- package/dist/{agent/routes → routes}/security/scope-invalidation.js +1 -1
- package/dist/{agent/routes → routes}/system/error-handling.d.ts +0 -0
- package/dist/routes/system/error-handling.js +75 -0
- package/dist/{agent/routes → routes}/system/healthcheck.d.ts +0 -0
- package/dist/{agent/routes → routes}/system/healthcheck.js +1 -1
- package/dist/{agent/routes → routes}/system/logger.d.ts +0 -0
- package/dist/{agent/routes → routes}/system/logger.js +2 -2
- package/dist/{agent/services → services}/index.d.ts +0 -0
- package/dist/{agent/services → services}/index.js +1 -1
- package/dist/{agent/services → services}/permissions.d.ts +0 -0
- package/dist/{agent/services → services}/permissions.js +1 -1
- package/dist/{agent/services → services}/serializer.d.ts +0 -0
- package/dist/services/serializer.js +120 -0
- package/dist/types.d.ts +25 -1
- package/dist/types.js +21 -1
- package/dist/{agent/utils → utils}/body-parser.d.ts +0 -0
- package/dist/{agent/utils → utils}/body-parser.js +1 -1
- package/dist/{agent/utils → utils}/condition-tree-parser.d.ts +0 -0
- package/dist/utils/condition-tree-parser.js +53 -0
- package/dist/{agent/utils → utils}/context-filter-factory.d.ts +0 -0
- package/dist/{agent/utils → utils}/context-filter-factory.js +1 -1
- package/dist/{agent/utils → utils}/csv-generator.d.ts +0 -0
- package/dist/{agent/utils → utils}/csv-generator.js +1 -1
- package/dist/{agent/utils → utils}/csv-route-context.d.ts +0 -0
- package/dist/utils/csv-route-context.js +14 -0
- package/dist/{agent/utils → utils}/forest-http-api.d.ts +1 -1
- package/dist/utils/forest-http-api.js +180 -0
- package/dist/{agent/utils → utils}/forest-schema/action-values.d.ts +0 -0
- package/dist/utils/forest-schema/action-values.js +144 -0
- package/dist/{agent/utils → utils}/forest-schema/emitter.d.ts +1 -1
- package/dist/{agent/utils → utils}/forest-schema/emitter.js +2 -2
- package/dist/{agent/utils → utils}/forest-schema/filterable.d.ts +0 -0
- package/dist/{agent/utils → utils}/forest-schema/filterable.js +1 -1
- package/dist/{agent/utils → utils}/forest-schema/generator-actions.d.ts +0 -0
- package/dist/{agent/utils → utils}/forest-schema/generator-actions.js +1 -1
- package/dist/{agent/utils → utils}/forest-schema/generator-collection.d.ts +0 -0
- package/dist/{agent/utils → utils}/forest-schema/generator-collection.js +1 -1
- package/dist/{agent/utils → utils}/forest-schema/generator-fields.d.ts +0 -0
- package/dist/utils/forest-schema/generator-fields.js +160 -0
- package/dist/{agent/utils → utils}/forest-schema/generator-segments.d.ts +0 -0
- package/dist/{agent/utils → utils}/forest-schema/generator-segments.js +1 -1
- package/dist/{agent/utils → utils}/forest-schema/types.d.ts +0 -0
- package/dist/{agent/utils → utils}/forest-schema/types.js +1 -1
- package/dist/{agent/utils → utils}/forest-schema/validation.d.ts +0 -0
- package/dist/utils/forest-schema/validation.js +28 -0
- package/dist/{agent/utils → utils}/id.d.ts +0 -0
- package/dist/utils/id.js +43 -0
- package/dist/{builder/utils → utils}/options-validator.d.ts +1 -2
- package/dist/{builder/utils → utils}/options-validator.js +1 -1
- package/dist/{agent/utils → utils}/query-string.d.ts +0 -0
- package/dist/utils/query-string.js +134 -0
- package/package.json +8 -7
- package/dist/agent/forestadmin-http-driver.d.ts +0 -12
- package/dist/agent/forestadmin-http-driver.js +0 -43
- package/dist/agent/routes/access/chart.js +0 -162
- package/dist/agent/routes/modification/action.js +0 -104
- package/dist/agent/routes/modification/associate-related.js +0 -51
- package/dist/agent/routes/modification/create.js +0 -83
- package/dist/agent/routes/modification/update-relation.js +0 -59
- package/dist/agent/routes/modification/update.js +0 -31
- package/dist/agent/routes/system/error-handling.js +0 -75
- package/dist/agent/services/serializer.js +0 -120
- package/dist/agent/types.d.ts +0 -24
- package/dist/agent/types.js +0 -23
- package/dist/agent/utils/condition-tree-parser.js +0 -53
- package/dist/agent/utils/csv-route-context.js +0 -14
- package/dist/agent/utils/forest-http-api.js +0 -180
- package/dist/agent/utils/forest-schema/action-values.js +0 -144
- package/dist/agent/utils/forest-schema/generator-fields.js +0 -160
- package/dist/agent/utils/forest-schema/validation.js +0 -28
- package/dist/agent/utils/id.js +0 -43
- package/dist/agent/utils/query-string.js +0 -134
- package/dist/builder/agent.js +0 -114
- package/dist/builder/collection.d.ts +0 -256
- package/dist/builder/collection.js +0 -398
- package/dist/builder/decorators-stack.d.ts +0 -25
- package/dist/builder/decorators-stack.js +0 -40
- package/dist/builder/types.d.ts +0 -18
- package/dist/builder/types.js +0 -3
- package/dist/builder/utils/typing-generator.d.ts +0 -15
- package/dist/builder/utils/typing-generator.js +0 -125
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const datasource_toolkit_1 = require("@forestadmin/datasource-toolkit");
|
|
4
|
-
class ConditionTreeParser {
|
|
5
|
-
static fromPlainObject(collection, json) {
|
|
6
|
-
if (ConditionTreeParser.isLeaf(json)) {
|
|
7
|
-
const operator = ConditionTreeParser.toPascalCase(json.operator);
|
|
8
|
-
const value = ConditionTreeParser.parseValue(collection, { ...json, operator });
|
|
9
|
-
return new datasource_toolkit_1.ConditionTreeLeaf(json.field, operator, value);
|
|
10
|
-
}
|
|
11
|
-
if (ConditionTreeParser.isBranch(json)) {
|
|
12
|
-
const aggregator = ConditionTreeParser.toPascalCase(json.aggregator);
|
|
13
|
-
const conditions = json.conditions.map(subTree => ConditionTreeParser.fromPlainObject(collection, subTree));
|
|
14
|
-
return conditions.length !== 1
|
|
15
|
-
? new datasource_toolkit_1.ConditionTreeBranch(aggregator, conditions)
|
|
16
|
-
: conditions[0];
|
|
17
|
-
}
|
|
18
|
-
throw new Error('Failed to instantiate condition tree from json');
|
|
19
|
-
}
|
|
20
|
-
/** Handle 'In' where the frontend unexpectedly sends strings */
|
|
21
|
-
static parseValue(collection, leaf) {
|
|
22
|
-
const schema = datasource_toolkit_1.CollectionUtils.getFieldSchema(collection, leaf.field);
|
|
23
|
-
if (leaf.operator === 'In' && typeof leaf.value === 'string') {
|
|
24
|
-
if (schema.columnType === 'Boolean') {
|
|
25
|
-
return leaf.value
|
|
26
|
-
.split(',')
|
|
27
|
-
.map(bool => !['false', '0', 'no'].includes(bool.toLowerCase().trim()));
|
|
28
|
-
}
|
|
29
|
-
if (schema.columnType === 'Number') {
|
|
30
|
-
return leaf.value
|
|
31
|
-
.split(',')
|
|
32
|
-
.map(string => Number(string.trim()))
|
|
33
|
-
.filter(number => !Number.isNaN(number) && Number.isFinite(number));
|
|
34
|
-
}
|
|
35
|
-
return leaf.value.split(',').map(v => v.trim());
|
|
36
|
-
}
|
|
37
|
-
return leaf.value;
|
|
38
|
-
}
|
|
39
|
-
/** Convert snake_case to PascalCase */
|
|
40
|
-
static toPascalCase(value) {
|
|
41
|
-
const pascalCased = value.slice(0, 1).toUpperCase() +
|
|
42
|
-
value.slice(1).replace(/_[a-z]/g, match => match.slice(1).toUpperCase());
|
|
43
|
-
return pascalCased;
|
|
44
|
-
}
|
|
45
|
-
static isLeaf(raw) {
|
|
46
|
-
return typeof raw === 'object' && 'field' in raw && 'operator' in raw;
|
|
47
|
-
}
|
|
48
|
-
static isBranch(raw) {
|
|
49
|
-
return typeof raw === 'object' && 'aggregator' in raw && 'conditions' in raw;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
exports.default = ConditionTreeParser;
|
|
53
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLXRyZWUtcGFyc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FnZW50L3V0aWxzL2NvbmRpdGlvbi10cmVlLXBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHdFQVN5QztBQUV6QyxNQUFxQixtQkFBbUI7SUFDdEMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxVQUFzQixFQUFFLElBQWE7UUFDMUQsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDcEMsTUFBTSxRQUFRLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNqRSxNQUFNLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUVoRixPQUFPLElBQUksc0NBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDM0Q7UUFFRCxJQUFJLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN0QyxNQUFNLFVBQVUsR0FBRyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBZSxDQUFDO1lBQ25GLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQy9DLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQ3pELENBQUM7WUFFRixPQUFPLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQztnQkFDNUIsQ0FBQyxDQUFDLElBQUksd0NBQW1CLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQztnQkFDakQsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNuQjtRQUVELE1BQU0sSUFBSSxLQUFLLENBQUMsZ0RBQWdELENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsZ0VBQWdFO0lBQ3hELE1BQU0sQ0FBQyxVQUFVLENBQ3ZCLFVBQXNCLEVBQ3RCLElBQXlEO1FBRXpELE1BQU0sTUFBTSxHQUFHLG9DQUFlLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFpQixDQUFDO1FBRXRGLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUM1RCxJQUFJLE1BQU0sQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFO2dCQUNuQyxPQUFPLElBQUksQ0FBQyxLQUFLO3FCQUNkLEtBQUssQ0FBQyxHQUFHLENBQUM7cUJBQ1YsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDM0U7WUFFRCxJQUFJLE1BQU0sQ0FBQyxVQUFVLEtBQUssUUFBUSxFQUFFO2dCQUNsQyxPQUFPLElBQUksQ0FBQyxLQUFLO3FCQUNkLEtBQUssQ0FBQyxHQUFHLENBQUM7cUJBQ1YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO3FCQUNwQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2FBQ3ZFO1lBRUQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUNqRDtRQUVELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsdUNBQXVDO0lBQy9CLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBYTtRQUN2QyxNQUFNLFdBQVcsR0FDZixLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUU7WUFDL0IsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBRTNFLE9BQU8sV0FBdUIsQ0FBQztJQUNqQyxDQUFDO0lBRU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFZO1FBQ2hDLE9BQU8sT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLE9BQU8sSUFBSSxHQUFHLElBQUksVUFBVSxJQUFJLEdBQUcsQ0FBQztJQUN4RSxDQUFDO0lBRU8sTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFZO1FBQ2xDLE9BQU8sT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLFlBQVksSUFBSSxHQUFHLElBQUksWUFBWSxJQUFJLEdBQUcsQ0FBQztJQUMvRSxDQUFDO0NBQ0Y7QUFsRUQsc0NBa0VDIn0=
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
class CsvRouteContext {
|
|
4
|
-
static buildResponse(context) {
|
|
5
|
-
const { filename } = context.request.query;
|
|
6
|
-
context.response.type = 'text/csv; charset=utf-8';
|
|
7
|
-
context.response.attachment(`attachment; filename=${filename}`);
|
|
8
|
-
context.response.lastModified = new Date();
|
|
9
|
-
context.response.set({ 'X-Accel-Buffering': 'no' });
|
|
10
|
-
context.response.set({ 'Cache-Control': 'no-cache' });
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
exports.default = CsvRouteContext;
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3N2LXJvdXRlLWNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWdlbnQvdXRpbHMvY3N2LXJvdXRlLWNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSxNQUFxQixlQUFlO0lBQ2xDLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBZ0I7UUFDbkMsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBRTNDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLHlCQUF5QixDQUFDO1FBQ2xELE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLHdCQUF3QixRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDM0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3BELE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDeEQsQ0FBQztDQUNGO0FBVkQsa0NBVUMifQ==
|
|
@@ -1,180 +0,0 @@
|
|
|
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 object_hash_1 = __importDefault(require("object-hash"));
|
|
7
|
-
const superagent_1 = __importDefault(require("superagent"));
|
|
8
|
-
class ForestHttpApi {
|
|
9
|
-
static async getIpWhitelistConfiguration(options) {
|
|
10
|
-
try {
|
|
11
|
-
const response = await superagent_1.default
|
|
12
|
-
.get(new URL('/liana/v1/ip-whitelist-rules', options.forestServerUrl).toString())
|
|
13
|
-
.set('forest-secret-key', options.envSecret);
|
|
14
|
-
const { attributes } = response.body.data;
|
|
15
|
-
return { isFeatureEnabled: attributes.use_ip_whitelist, ipRules: attributes.rules };
|
|
16
|
-
}
|
|
17
|
-
catch (e) {
|
|
18
|
-
this.handleResponseError(e);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
static async getOpenIdIssuerMetadata(options) {
|
|
22
|
-
try {
|
|
23
|
-
const response = await superagent_1.default
|
|
24
|
-
.get(new URL('/oidc/.well-known/openid-configuration', options.forestServerUrl).toString())
|
|
25
|
-
.set('forest-secret-key', options.envSecret);
|
|
26
|
-
return response.body;
|
|
27
|
-
}
|
|
28
|
-
catch (e) {
|
|
29
|
-
this.handleResponseError(e);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
static async getUserInformation(options, renderingId, accessToken) {
|
|
33
|
-
try {
|
|
34
|
-
const url = new URL(`/liana/v2/renderings/${renderingId}/authorization`, options.forestServerUrl);
|
|
35
|
-
const response = await superagent_1.default
|
|
36
|
-
.get(url.toString())
|
|
37
|
-
.set('forest-token', accessToken)
|
|
38
|
-
.set('forest-secret-key', options.envSecret);
|
|
39
|
-
const { attributes, id } = response.body.data;
|
|
40
|
-
return {
|
|
41
|
-
id: Number(id),
|
|
42
|
-
email: attributes.email,
|
|
43
|
-
firstName: attributes.first_name,
|
|
44
|
-
lastName: attributes.last_name,
|
|
45
|
-
team: attributes.teams[0],
|
|
46
|
-
role: attributes.role,
|
|
47
|
-
tags: attributes.tags?.reduce((memo, { key, value }) => ({ ...memo, [key]: value }), {}),
|
|
48
|
-
renderingId,
|
|
49
|
-
permissionLevel: attributes.permission_level,
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
catch (e) {
|
|
53
|
-
this.handleResponseError(e);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
static async hasSchema(options, hash) {
|
|
57
|
-
try {
|
|
58
|
-
const response = await superagent_1.default
|
|
59
|
-
.post(new URL('/forest/apimaps/hashcheck', options.forestServerUrl).toString())
|
|
60
|
-
.send({ schemaFileHash: hash })
|
|
61
|
-
.set('forest-secret-key', options.envSecret);
|
|
62
|
-
return !response?.body?.sendSchema;
|
|
63
|
-
}
|
|
64
|
-
catch (e) {
|
|
65
|
-
this.handleResponseError(e);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
static async uploadSchema(options, apimap) {
|
|
69
|
-
try {
|
|
70
|
-
await superagent_1.default
|
|
71
|
-
.post(new URL('/forest/apimaps', options.forestServerUrl).toString())
|
|
72
|
-
.send(apimap)
|
|
73
|
-
.set('forest-secret-key', options.envSecret);
|
|
74
|
-
}
|
|
75
|
-
catch (e) {
|
|
76
|
-
this.handleResponseError(e);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
static async getPermissions(options, renderingId) {
|
|
80
|
-
try {
|
|
81
|
-
const { body } = await superagent_1.default
|
|
82
|
-
.get(`${options.forestServerUrl}/liana/v3/permissions`)
|
|
83
|
-
.set('forest-secret-key', options.envSecret)
|
|
84
|
-
.query(`renderingId=${renderingId}`);
|
|
85
|
-
if (!body.meta?.rolesACLActivated) {
|
|
86
|
-
throw new Error('Roles V2 are unsupported');
|
|
87
|
-
}
|
|
88
|
-
const actions = new Set();
|
|
89
|
-
const actionsByUser = {};
|
|
90
|
-
ForestHttpApi.decodeChartPermissions(body?.stats ?? {}, actions);
|
|
91
|
-
ForestHttpApi.decodeActionPermissions(body?.data?.collections ?? {}, actions, actionsByUser);
|
|
92
|
-
return {
|
|
93
|
-
actions,
|
|
94
|
-
actionsByUser,
|
|
95
|
-
scopes: ForestHttpApi.decodeScopePermissions(body?.data?.renderings?.[renderingId] ?? {}),
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
catch (e) {
|
|
99
|
-
this.handleResponseError(e);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
/** Helper to format permissions into something easy to validate against */
|
|
103
|
-
static decodeChartPermissions(chartsByType, actions) {
|
|
104
|
-
const serverCharts = Object.values(chartsByType).flat();
|
|
105
|
-
const frontendCharts = serverCharts.map(chart => ({
|
|
106
|
-
type: chart.type,
|
|
107
|
-
filters: chart.filter,
|
|
108
|
-
aggregate: chart.aggregator,
|
|
109
|
-
aggregate_field: chart.aggregateFieldName,
|
|
110
|
-
collection: chart.sourceCollectionId,
|
|
111
|
-
time_range: chart.timeRange,
|
|
112
|
-
group_by_date_field: (chart.type === 'Line' && chart.groupByFieldName) || null,
|
|
113
|
-
group_by_field: (chart.type !== 'Line' && chart.groupByFieldName) || null,
|
|
114
|
-
limit: chart.limit,
|
|
115
|
-
label_field: chart.labelFieldName,
|
|
116
|
-
relationship_field: chart.relationshipFieldName,
|
|
117
|
-
}));
|
|
118
|
-
const hashes = frontendCharts.map(chart => (0, object_hash_1.default)(chart, {
|
|
119
|
-
respectType: false,
|
|
120
|
-
excludeKeys: key => chart[key] === null || chart[key] === undefined,
|
|
121
|
-
}));
|
|
122
|
-
hashes.forEach(hash => actions.add(`chart:${hash}`));
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Helper to format permissions into something easy to validate against
|
|
126
|
-
* Note that the format the server is sending varies depending on if we're using a remote or
|
|
127
|
-
* local environment.
|
|
128
|
-
*/
|
|
129
|
-
static decodeActionPermissions(collections, actions, actionsByUser) {
|
|
130
|
-
for (const [name, settings] of Object.entries(collections)) {
|
|
131
|
-
for (const [actionName, userIds] of Object.entries(settings.collection ?? {})) {
|
|
132
|
-
const shortName = actionName.substring(0, actionName.length - 'Enabled'.length);
|
|
133
|
-
if (typeof userIds === 'boolean')
|
|
134
|
-
actions.add(`${shortName}:${name}`);
|
|
135
|
-
else
|
|
136
|
-
actionsByUser[`${shortName}:${name}`] = new Set(userIds);
|
|
137
|
-
}
|
|
138
|
-
for (const [actionName, actionPerms] of Object.entries(settings.actions ?? {})) {
|
|
139
|
-
const userIds = actionPerms.triggerEnabled;
|
|
140
|
-
if (typeof userIds === 'boolean')
|
|
141
|
-
actions.add(`custom:${actionName}:${name}`);
|
|
142
|
-
else
|
|
143
|
-
actionsByUser[`custom:${actionName}:${name}`] = new Set(userIds);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
/** Helper to format permissions into something easy to validate against */
|
|
148
|
-
static decodeScopePermissions(rendering) {
|
|
149
|
-
const scopes = {};
|
|
150
|
-
for (const [name, { scope }] of Object.entries(rendering)) {
|
|
151
|
-
scopes[name] = scope && {
|
|
152
|
-
conditionTree: scope.filter,
|
|
153
|
-
dynamicScopeValues: scope.dynamicScopesValues?.users ?? {},
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
return scopes;
|
|
157
|
-
}
|
|
158
|
-
static handleResponseError(e) {
|
|
159
|
-
if (/certificate/i.test(e.message))
|
|
160
|
-
throw new Error('ForestAdmin server TLS certificate cannot be verified. ' +
|
|
161
|
-
'Please check that your system time is set properly.');
|
|
162
|
-
if (e.response) {
|
|
163
|
-
const status = e?.response?.status;
|
|
164
|
-
// 0 == offline, 502 == bad gateway from proxy
|
|
165
|
-
if (status === 0 || status === 502)
|
|
166
|
-
throw new Error('Failed to reach ForestAdmin server. Are you online?');
|
|
167
|
-
if (status === 404)
|
|
168
|
-
throw new Error('ForestAdmin server failed to find the project related to the envSecret you configured.' +
|
|
169
|
-
' Can you check that you copied it properly in the Forest initialization?');
|
|
170
|
-
if (status === 503)
|
|
171
|
-
throw new Error('Forest is in maintenance for a few minutes. We are upgrading your experience in ' +
|
|
172
|
-
'the forest. We just need a few more minutes to get it right.');
|
|
173
|
-
throw new Error('An unexpected error occured while contacting the ForestAdmin server. ' +
|
|
174
|
-
'Please contact support@forestadmin.com for further investigations.');
|
|
175
|
-
}
|
|
176
|
-
throw e;
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
exports.default = ForestHttpApi;
|
|
180
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9yZXN0LWh0dHAtYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FnZW50L3V0aWxzL2ZvcmVzdC1odHRwLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUlBLDhEQUFxQztBQUNyQyw0REFBaUU7QUF3Q2pFLE1BQXFCLGFBQWE7SUFDaEMsTUFBTSxDQUFDLEtBQUssQ0FBQywyQkFBMkIsQ0FDdEMsT0FBb0I7UUFFcEIsSUFBSTtZQUNGLE1BQU0sUUFBUSxHQUFhLE1BQU0sb0JBQVU7aUJBQ3hDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyw4QkFBOEIsRUFBRSxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7aUJBQ2hGLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFL0MsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBRTFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNyRjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzdCO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsT0FBb0I7UUFDdkQsSUFBSTtZQUNGLE1BQU0sUUFBUSxHQUFhLE1BQU0sb0JBQVU7aUJBQ3hDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyx3Q0FBd0MsRUFBRSxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7aUJBQzFGLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFL0MsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDO1NBQ3RC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
|
|
@@ -1,144 +0,0 @@
|
|
|
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 id_1 = __importDefault(require("../id"));
|
|
7
|
-
const generator_actions_1 = __importDefault(require("./generator-actions"));
|
|
8
|
-
/**
|
|
9
|
-
* This utility class converts form values from our internal format to the format that is
|
|
10
|
-
* used in the frontend for action forms.
|
|
11
|
-
*/
|
|
12
|
-
class ForestValueConverter {
|
|
13
|
-
/**
|
|
14
|
-
* Proper form data parser which converts data from an action form result to the format
|
|
15
|
-
* that is internally used in datasources.
|
|
16
|
-
*/
|
|
17
|
-
static makeFormData(dataSource, rawData, fields) {
|
|
18
|
-
const data = {};
|
|
19
|
-
for (const [key, value] of Object.entries(rawData)) {
|
|
20
|
-
const field = fields.find(f => f.label === key);
|
|
21
|
-
// Skip fields from the default form
|
|
22
|
-
if (!generator_actions_1.default.defaultFields.map(f => f.field).includes(key)) {
|
|
23
|
-
if (field?.type === 'Collection' && value) {
|
|
24
|
-
const collection = dataSource.getCollection(field.collectionName);
|
|
25
|
-
data[key] = id_1.default.unpackId(collection.schema, value);
|
|
26
|
-
}
|
|
27
|
-
else if (field?.type === 'File') {
|
|
28
|
-
data[key] = this.parseDataUri(value);
|
|
29
|
-
}
|
|
30
|
-
else if (field?.type === 'FileList') {
|
|
31
|
-
data[key] = value?.map(v => this.parseDataUri(v));
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
data[key] = value;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
return data;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Form data parser which extracts the data from what is provided by the frontend when
|
|
42
|
-
* change hooks are called.
|
|
43
|
-
*/
|
|
44
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
45
|
-
static makeFormDataFromFields(dataSource, fields) {
|
|
46
|
-
const data = {};
|
|
47
|
-
for (const field of fields) {
|
|
48
|
-
// Skip fields from the default form
|
|
49
|
-
if (!generator_actions_1.default.defaultFields.map(f => f.field).includes(field.field)) {
|
|
50
|
-
if (field.reference && field.value) {
|
|
51
|
-
const [collectionName] = field.reference.split('.');
|
|
52
|
-
const collection = dataSource.getCollection(collectionName);
|
|
53
|
-
data[field.field] = id_1.default.unpackId(collection.schema, field.value);
|
|
54
|
-
}
|
|
55
|
-
else if (field.type === 'File') {
|
|
56
|
-
data[field.field] = this.parseDataUri(field.value);
|
|
57
|
-
}
|
|
58
|
-
else if (Array.isArray(field.type) && field.type[0] === 'File') {
|
|
59
|
-
data[field.field] = field.value?.map(v => this.parseDataUri(v));
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
data[field.field] = field.value;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
return data;
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* This last form data parser tries to guess the types from the data itself.
|
|
70
|
-
*
|
|
71
|
-
* - Fields with type "Collection" which target collections where the pk is not a string or
|
|
72
|
-
* derivative (mongoid, uuid, ...) won't be parser correctly, as we don't have enough information
|
|
73
|
-
* to properly guess the type
|
|
74
|
-
* - Fields of type "String" but where the final user entered a data-uri manually in the frontend
|
|
75
|
-
* will be wrongfully parsed.
|
|
76
|
-
*/
|
|
77
|
-
static makeFormDataUnsafe(rawData) {
|
|
78
|
-
const data = {};
|
|
79
|
-
for (const [key, value] of Object.entries(rawData)) {
|
|
80
|
-
// Skip fields from the default form
|
|
81
|
-
if (!generator_actions_1.default.defaultFields.map(f => f.field).includes(key)) {
|
|
82
|
-
if (Array.isArray(value) && value.every(v => this.isDataUri(v))) {
|
|
83
|
-
data[key] = value.map(uri => this.parseDataUri(uri));
|
|
84
|
-
}
|
|
85
|
-
else if (this.isDataUri(value)) {
|
|
86
|
-
data[key] = this.parseDataUri(value);
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
data[key] = value;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
return data;
|
|
94
|
-
}
|
|
95
|
-
static valueToForest(field, value) {
|
|
96
|
-
if (field.type === 'Enum') {
|
|
97
|
-
return field.enumValues.includes(value) ? value : null;
|
|
98
|
-
}
|
|
99
|
-
if (field.type === 'EnumList') {
|
|
100
|
-
return value?.filter(v => field.enumValues.includes(v));
|
|
101
|
-
}
|
|
102
|
-
if (field.type === 'Collection') {
|
|
103
|
-
return value?.join('|');
|
|
104
|
-
}
|
|
105
|
-
if (field.type === 'File') {
|
|
106
|
-
return this.makeDataUri(value);
|
|
107
|
-
}
|
|
108
|
-
if (field.type === 'FileList') {
|
|
109
|
-
return value?.map(f => this.makeDataUri(f));
|
|
110
|
-
}
|
|
111
|
-
return value;
|
|
112
|
-
}
|
|
113
|
-
static parseDataUri(dataUri) {
|
|
114
|
-
if (!dataUri)
|
|
115
|
-
return null;
|
|
116
|
-
// Poor man's data uri parser (spec compliants one don't get the filename).
|
|
117
|
-
// Hopefully this does not break.
|
|
118
|
-
const [header, data] = dataUri.substring(5).split(',');
|
|
119
|
-
const [mimeType, ...mediaTypes] = header.split(';');
|
|
120
|
-
const result = { mimeType, buffer: Buffer.from(data, 'base64') };
|
|
121
|
-
for (const mediaType of mediaTypes) {
|
|
122
|
-
const index = mediaType.indexOf('=');
|
|
123
|
-
if (index !== -1)
|
|
124
|
-
result[mediaType.substring(0, index)] = decodeURIComponent(mediaType.substring(index + 1));
|
|
125
|
-
}
|
|
126
|
-
return result;
|
|
127
|
-
}
|
|
128
|
-
static makeDataUri(file) {
|
|
129
|
-
if (!file)
|
|
130
|
-
return null;
|
|
131
|
-
const { mimeType, buffer, ...rest } = file;
|
|
132
|
-
const mediaTypes = Object.entries(rest)
|
|
133
|
-
.map(([key, value]) => `${key}=${encodeURIComponent(value)}`)
|
|
134
|
-
.join(';');
|
|
135
|
-
return mediaTypes.length
|
|
136
|
-
? `data:${file.mimeType};${mediaTypes};base64,${buffer.toString('base64')}`
|
|
137
|
-
: `data:${file.mimeType};base64,${buffer.toString('base64')}`;
|
|
138
|
-
}
|
|
139
|
-
static isDataUri(value) {
|
|
140
|
-
return typeof value === 'string' && value.startsWith('data:');
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
exports.default = ForestValueConverter;
|
|
144
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLXZhbHVlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hZ2VudC91dGlscy9mb3Jlc3Qtc2NoZW1hL2FjdGlvbi12YWx1ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSwrQ0FBNEI7QUFDNUIsNEVBQXlEO0FBSXpEOzs7R0FHRztBQUNILE1BQXFCLG9CQUFvQjtJQUN2Qzs7O09BR0c7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLFVBQXNCLEVBQUUsT0FBaUIsRUFBRSxNQUFxQjtRQUNsRixNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7UUFFaEIsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDbEQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssR0FBRyxDQUFDLENBQUM7WUFFaEQsb0NBQW9DO1lBQ3BDLElBQUksQ0FBQywyQkFBc0IsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDekUsSUFBSSxLQUFLLEVBQUUsSUFBSSxLQUFLLFlBQVksSUFBSSxLQUFLLEVBQUU7b0JBQ3pDLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO29CQUVsRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsWUFBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEtBQWUsQ0FBQyxDQUFDO2lCQUNsRTtxQkFBTSxJQUFJLEtBQUssRUFBRSxJQUFJLEtBQUssTUFBTSxFQUFFO29CQUNqQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdB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
|
|
@@ -1,160 +0,0 @@
|
|
|
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 filterable_1 = __importDefault(require("./filterable"));
|
|
8
|
-
const validation_1 = __importDefault(require("./validation"));
|
|
9
|
-
class SchemaGeneratorFields {
|
|
10
|
-
static buildSchema(collection, name) {
|
|
11
|
-
const { type } = collection.schema.fields[name];
|
|
12
|
-
let schema;
|
|
13
|
-
switch (type) {
|
|
14
|
-
case 'Column':
|
|
15
|
-
schema = SchemaGeneratorFields.buildColumnSchema(collection, name);
|
|
16
|
-
break;
|
|
17
|
-
case 'ManyToOne':
|
|
18
|
-
case 'OneToMany':
|
|
19
|
-
case 'ManyToMany':
|
|
20
|
-
case 'OneToOne':
|
|
21
|
-
schema = SchemaGeneratorFields.buildRelationSchema(collection, name);
|
|
22
|
-
break;
|
|
23
|
-
default:
|
|
24
|
-
throw new Error('Invalid field type');
|
|
25
|
-
}
|
|
26
|
-
return Object.entries(schema)
|
|
27
|
-
.sort()
|
|
28
|
-
.reduce((sortedSchema, [key, value]) => {
|
|
29
|
-
sortedSchema[key] = value;
|
|
30
|
-
return sortedSchema;
|
|
31
|
-
}, {});
|
|
32
|
-
}
|
|
33
|
-
static buildColumnSchema(collection, name) {
|
|
34
|
-
const column = collection.schema.fields[name];
|
|
35
|
-
return {
|
|
36
|
-
defaultValue: column.defaultValue ?? null,
|
|
37
|
-
enums: column.enumValues ?? null,
|
|
38
|
-
field: name,
|
|
39
|
-
integration: null,
|
|
40
|
-
inverseOf: null,
|
|
41
|
-
isFilterable: filterable_1.default.isFilterable(column.columnType, column.filterOperators),
|
|
42
|
-
isPrimaryKey: Boolean(column.isPrimaryKey),
|
|
43
|
-
isReadOnly: Boolean(column.isReadOnly),
|
|
44
|
-
isRequired: column.validation?.some(v => v.operator === 'Present') ?? false,
|
|
45
|
-
isSortable: Boolean(column.isSortable),
|
|
46
|
-
isVirtual: false,
|
|
47
|
-
reference: null,
|
|
48
|
-
type: this.convertColumnType(column.columnType),
|
|
49
|
-
validations: validation_1.default.convertValidationList(column.validation),
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
static convertColumnType(type) {
|
|
53
|
-
if (typeof type === 'string')
|
|
54
|
-
return type;
|
|
55
|
-
if (Array.isArray(type)) {
|
|
56
|
-
return [this.convertColumnType(type[0])];
|
|
57
|
-
}
|
|
58
|
-
return {
|
|
59
|
-
fields: Object.entries(type).map(([key, subType]) => ({
|
|
60
|
-
field: key,
|
|
61
|
-
type: this.convertColumnType(subType),
|
|
62
|
-
})),
|
|
63
|
-
};
|
|
64
|
-
}
|
|
65
|
-
static buildToManyRelationSchema(relation, collection, foreignCollection, baseSchema) {
|
|
66
|
-
let targetName;
|
|
67
|
-
let targetField;
|
|
68
|
-
let isReadOnly;
|
|
69
|
-
if (relation.type === 'OneToMany') {
|
|
70
|
-
targetName = relation.originKeyTarget;
|
|
71
|
-
targetField = collection.schema.fields[targetName];
|
|
72
|
-
const originKey = foreignCollection.schema.fields[relation.originKey];
|
|
73
|
-
isReadOnly = originKey.isReadOnly;
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
targetName = relation.foreignKeyTarget;
|
|
77
|
-
targetField = foreignCollection.schema.fields[targetName];
|
|
78
|
-
const throughSchema = collection.dataSource.getCollection(relation.throughCollection).schema;
|
|
79
|
-
const foreignKey = throughSchema.fields[relation.foreignKey];
|
|
80
|
-
const originKey = throughSchema.fields[relation.originKey];
|
|
81
|
-
isReadOnly = originKey.isReadOnly || foreignKey.isReadOnly;
|
|
82
|
-
}
|
|
83
|
-
return {
|
|
84
|
-
...baseSchema,
|
|
85
|
-
type: [targetField.columnType],
|
|
86
|
-
defaultValue: null,
|
|
87
|
-
isFilterable: false,
|
|
88
|
-
isPrimaryKey: false,
|
|
89
|
-
isRequired: false,
|
|
90
|
-
isReadOnly: Boolean(isReadOnly),
|
|
91
|
-
isSortable: false,
|
|
92
|
-
validations: [],
|
|
93
|
-
reference: `${foreignCollection.name}.${targetName}`,
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
static isForeignCollectionFilterable(foreignCollection) {
|
|
97
|
-
return Object.values(foreignCollection.schema.fields).some(field => field.type === 'Column' &&
|
|
98
|
-
filterable_1.default.isFilterable(field.columnType, field.filterOperators));
|
|
99
|
-
}
|
|
100
|
-
static buildOneToOneSchema(relation, collection, foreignCollection, baseSchema) {
|
|
101
|
-
const targetField = collection.schema.fields[relation.originKeyTarget];
|
|
102
|
-
const keyField = foreignCollection.schema.fields[relation.originKey];
|
|
103
|
-
return {
|
|
104
|
-
...baseSchema,
|
|
105
|
-
type: keyField.columnType,
|
|
106
|
-
defaultValue: null,
|
|
107
|
-
isFilterable: SchemaGeneratorFields.isForeignCollectionFilterable(foreignCollection),
|
|
108
|
-
isPrimaryKey: false,
|
|
109
|
-
isRequired: false,
|
|
110
|
-
isReadOnly: Boolean(keyField.isReadOnly),
|
|
111
|
-
isSortable: Boolean(targetField.isSortable),
|
|
112
|
-
validations: [],
|
|
113
|
-
reference: `${foreignCollection.name}.${relation.originKeyTarget}`,
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
static buildManyToOneSchema(relation, collection, foreignCollection, baseSchema) {
|
|
117
|
-
const keyField = collection.schema.fields[relation.foreignKey];
|
|
118
|
-
return {
|
|
119
|
-
...baseSchema,
|
|
120
|
-
type: keyField.columnType,
|
|
121
|
-
defaultValue: keyField.defaultValue ?? null,
|
|
122
|
-
isFilterable: SchemaGeneratorFields.isForeignCollectionFilterable(foreignCollection),
|
|
123
|
-
isPrimaryKey: Boolean(keyField.isPrimaryKey),
|
|
124
|
-
isRequired: keyField.validation?.some(v => v.operator === 'Present') ?? false,
|
|
125
|
-
isReadOnly: Boolean(keyField.isReadOnly),
|
|
126
|
-
isSortable: Boolean(keyField.isSortable),
|
|
127
|
-
validations: validation_1.default.convertValidationList(keyField.validation),
|
|
128
|
-
reference: `${foreignCollection.name}.${relation.foreignKeyTarget}`,
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
static buildRelationSchema(collection, name) {
|
|
132
|
-
const relation = collection.schema.fields[name];
|
|
133
|
-
const foreignCollection = collection.dataSource.getCollection(relation.foreignCollection);
|
|
134
|
-
const relationSchema = {
|
|
135
|
-
field: name,
|
|
136
|
-
enums: null,
|
|
137
|
-
integration: null,
|
|
138
|
-
isVirtual: false,
|
|
139
|
-
inverseOf: datasource_toolkit_1.CollectionUtils.getInverseRelation(collection, name),
|
|
140
|
-
relationship: SchemaGeneratorFields.relationMap[relation.type],
|
|
141
|
-
};
|
|
142
|
-
switch (relation.type) {
|
|
143
|
-
case 'ManyToMany':
|
|
144
|
-
case 'OneToMany':
|
|
145
|
-
return SchemaGeneratorFields.buildToManyRelationSchema(relation, collection, foreignCollection, relationSchema);
|
|
146
|
-
case 'OneToOne':
|
|
147
|
-
return SchemaGeneratorFields.buildOneToOneSchema(relation, collection, foreignCollection, relationSchema);
|
|
148
|
-
default:
|
|
149
|
-
return SchemaGeneratorFields.buildManyToOneSchema(relation, collection, foreignCollection, relationSchema);
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
exports.default = SchemaGeneratorFields;
|
|
154
|
-
SchemaGeneratorFields.relationMap = {
|
|
155
|
-
ManyToMany: 'BelongsToMany',
|
|
156
|
-
ManyToOne: 'BelongsTo',
|
|
157
|
-
OneToMany: 'HasMany',
|
|
158
|
-
OneToOne: 'HasOne',
|
|
159
|
-
};
|
|
160
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdG9yLWZpZWxkcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hZ2VudC91dGlscy9mb3Jlc3Qtc2NoZW1hL2dlbmVyYXRvci1maWVsZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx3RUFZeUM7QUFFekMsOERBQW1EO0FBQ25ELDhEQUFtRDtBQUVuRCxNQUFxQixxQkFBcUI7SUFReEMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFzQixFQUFFLElBQVk7UUFDckQsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWhELElBQUksTUFBeUIsQ0FBQztRQUU5QixRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssUUFBUTtnQkFDWCxNQUFNLEdBQUcscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNuRSxNQUFNO1lBRVIsS0FBSyxXQUFXLENBQUM7WUFDakIsS0FBSyxXQUFXLENBQUM7WUFDakIsS0FBSyxZQUFZLENBQUM7WUFDbEIsS0FBSyxVQUFVO2dCQUNiLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3JFLE1BQU07WUFFUjtnQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7U0FDekM7UUFFRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO2FBQzFCLElBQUksRUFBRTthQUNOLE1BQU0sQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ3JDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7WUFFMUIsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1gs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
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const types_1 = require("./types");
|
|
4
|
-
class FrontendValidationUtils {
|
|
5
|
-
static convertValidationList(rules) {
|
|
6
|
-
if (!rules)
|
|
7
|
-
return [];
|
|
8
|
-
return rules
|
|
9
|
-
.map(rule => {
|
|
10
|
-
const type = FrontendValidationUtils.operatorValidationTypeMap[rule.operator];
|
|
11
|
-
const error = `${rule.operator}${rule.value !== undefined ? `(${rule.value})` : ``}`;
|
|
12
|
-
const message = `Failed validation rule: '${error}'`;
|
|
13
|
-
return type ? { type, value: rule.value, message } : null;
|
|
14
|
-
})
|
|
15
|
-
.filter(Boolean);
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
exports.default = FrontendValidationUtils;
|
|
19
|
-
FrontendValidationUtils.operatorValidationTypeMap = {
|
|
20
|
-
Present: types_1.ValidationType.Present,
|
|
21
|
-
GreaterThan: types_1.ValidationType.GreaterThan,
|
|
22
|
-
LessThan: types_1.ValidationType.LessThan,
|
|
23
|
-
LongerThan: types_1.ValidationType.LongerThan,
|
|
24
|
-
ShorterThan: types_1.ValidationType.ShorterThan,
|
|
25
|
-
Contains: types_1.ValidationType.Contains,
|
|
26
|
-
Like: types_1.ValidationType.Like,
|
|
27
|
-
};
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hZ2VudC91dGlscy9mb3Jlc3Qtc2NoZW1hL3ZhbGlkYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSxtQ0FBNEQ7QUFLNUQsTUFBcUIsdUJBQXVCO0lBVzFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxLQUFvQjtRQUMvQyxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBRXRCLE9BQU8sS0FBSzthQUNULEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNWLE1BQU0sSUFBSSxHQUFHLHVCQUF1QixDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM5RSxNQUFNLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNyRixNQUFNLE9BQU8sR0FBRyw0QkFBNEIsS0FBSyxHQUFHLENBQUM7WUFFckQsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDNUQsQ0FBQyxDQUFDO2FBQ0QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JCLENBQUM7O0FBdkJILDBDQXdCQztBQXZCZ0IsaURBQXlCLEdBQThDO0lBQ3BGLE9BQU8sRUFBRSxzQkFBYyxDQUFDLE9BQU87SUFDL0IsV0FBVyxFQUFFLHNCQUFjLENBQUMsV0FBVztJQUN2QyxRQUFRLEVBQUUsc0JBQWMsQ0FBQyxRQUFRO0lBQ2pDLFVBQVUsRUFBRSxzQkFBYyxDQUFDLFVBQVU7SUFDckMsV0FBVyxFQUFFLHNCQUFjLENBQUMsV0FBVztJQUN2QyxRQUFRLEVBQUUsc0JBQWMsQ0FBQyxRQUFRO0lBQ2pDLElBQUksRUFBRSxzQkFBYyxDQUFDLElBQUk7Q0FDMUIsQ0FBQyJ9
|