@forestadmin/agent 1.0.0-beta.6 → 1.0.0-beta.61

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.
Files changed (151) hide show
  1. package/dist/agent.d.ts +76 -0
  2. package/dist/agent.js +133 -0
  3. package/dist/framework-mounter.d.ts +43 -0
  4. package/dist/framework-mounter.js +157 -0
  5. package/dist/index.d.ts +7 -4
  6. package/dist/index.js +10 -17
  7. package/dist/routes/access/api-chart.d.ts +16 -0
  8. package/dist/routes/access/api-chart.js +47 -0
  9. package/dist/{agent/routes → routes}/access/chart.d.ts +1 -0
  10. package/dist/routes/access/chart.js +162 -0
  11. package/dist/{agent/routes → routes}/access/count-related.d.ts +0 -0
  12. package/dist/routes/access/count-related.js +31 -0
  13. package/dist/{agent/routes → routes}/access/count.d.ts +0 -0
  14. package/dist/routes/access/count.js +31 -0
  15. package/dist/{agent/routes → routes}/access/csv-related.d.ts +0 -0
  16. package/dist/routes/access/csv-related.js +33 -0
  17. package/dist/{agent/routes → routes}/access/csv.d.ts +0 -0
  18. package/dist/routes/access/csv.js +31 -0
  19. package/dist/{agent/routes → routes}/access/get.d.ts +0 -0
  20. package/dist/routes/access/get.js +29 -0
  21. package/dist/{agent/routes → routes}/access/list-related.d.ts +0 -0
  22. package/dist/routes/access/list-related.js +25 -0
  23. package/dist/{agent/routes → routes}/access/list.d.ts +0 -0
  24. package/dist/routes/access/list.js +22 -0
  25. package/dist/{agent/routes → routes}/base-route.d.ts +0 -1
  26. package/dist/routes/base-route.js +13 -0
  27. package/dist/{agent/routes → routes}/collection-route.d.ts +0 -0
  28. package/dist/{agent/routes → routes}/collection-route.js +1 -1
  29. package/dist/{agent/routes → routes}/index.d.ts +0 -0
  30. package/dist/routes/index.js +108 -0
  31. package/dist/{agent/routes → routes}/modification/action.d.ts +0 -1
  32. package/dist/routes/modification/action.js +104 -0
  33. package/dist/routes/modification/associate-related.d.ts +12 -0
  34. package/dist/routes/modification/associate-related.js +51 -0
  35. package/dist/{agent/routes → routes}/modification/create.d.ts +0 -0
  36. package/dist/routes/modification/create.js +83 -0
  37. package/dist/{agent/routes → routes}/modification/delete.d.ts +0 -0
  38. package/dist/routes/modification/delete.js +41 -0
  39. package/dist/{agent/routes → routes}/modification/dissociate-delete-related.d.ts +0 -0
  40. package/dist/routes/modification/dissociate-delete-related.js +89 -0
  41. package/dist/routes/modification/update-field.d.ts +9 -0
  42. package/dist/routes/modification/update-field.js +39 -0
  43. package/dist/{agent/routes → routes}/modification/update-relation.d.ts +0 -0
  44. package/dist/routes/modification/update-relation.js +59 -0
  45. package/dist/{agent/routes → routes}/modification/update.d.ts +0 -0
  46. package/dist/routes/modification/update.js +31 -0
  47. package/dist/{agent/routes → routes}/relation-route.d.ts +0 -0
  48. package/dist/{agent/routes → routes}/relation-route.js +1 -1
  49. package/dist/{agent/routes → routes}/security/authentication.d.ts +1 -3
  50. package/dist/routes/security/authentication.js +74 -0
  51. package/dist/{agent/routes → routes}/security/ip-whitelist.d.ts +0 -0
  52. package/dist/{agent/routes → routes}/security/ip-whitelist.js +1 -1
  53. package/dist/{agent/routes → routes}/security/scope-invalidation.d.ts +0 -0
  54. package/dist/{agent/routes → routes}/security/scope-invalidation.js +1 -1
  55. package/dist/{agent/routes → routes}/system/error-handling.d.ts +2 -0
  56. package/dist/routes/system/error-handling.js +75 -0
  57. package/dist/{agent/routes → routes}/system/healthcheck.d.ts +0 -0
  58. package/dist/{agent/routes → routes}/system/healthcheck.js +1 -1
  59. package/dist/{agent/routes → routes}/system/logger.d.ts +0 -0
  60. package/dist/routes/system/logger.js +35 -0
  61. package/dist/{agent/services → services}/index.d.ts +0 -0
  62. package/dist/{agent/services → services}/index.js +2 -2
  63. package/dist/{agent/services → services}/permissions.d.ts +0 -0
  64. package/dist/services/permissions.js +85 -0
  65. package/dist/{agent/services → services}/serializer.d.ts +0 -5
  66. package/dist/services/serializer.js +120 -0
  67. package/dist/types.d.ts +29 -10
  68. package/dist/types.js +21 -9
  69. package/dist/{agent/utils → utils}/body-parser.d.ts +0 -0
  70. package/dist/{agent/utils → utils}/body-parser.js +1 -1
  71. package/dist/utils/condition-tree-parser.d.ts +11 -0
  72. package/dist/utils/condition-tree-parser.js +53 -0
  73. package/dist/{agent/utils → utils}/context-filter-factory.d.ts +0 -0
  74. package/dist/{agent/utils → utils}/context-filter-factory.js +1 -2
  75. package/dist/{agent/utils → utils}/csv-generator.d.ts +2 -2
  76. package/dist/utils/csv-generator.js +39 -0
  77. package/dist/{agent/utils → utils}/csv-route-context.d.ts +0 -0
  78. package/dist/utils/csv-route-context.js +14 -0
  79. package/dist/{agent/utils → utils}/forest-http-api.d.ts +5 -3
  80. package/dist/utils/forest-http-api.js +180 -0
  81. package/dist/{agent/utils → utils}/forest-schema/action-values.d.ts +2 -2
  82. package/dist/utils/forest-schema/action-values.js +144 -0
  83. package/dist/{agent/utils → utils}/forest-schema/emitter.d.ts +2 -2
  84. package/dist/utils/forest-schema/emitter.js +70 -0
  85. package/dist/{agent/utils → utils}/forest-schema/filterable.d.ts +0 -0
  86. package/dist/{agent/utils → utils}/forest-schema/filterable.js +1 -1
  87. package/dist/{agent/utils → utils}/forest-schema/generator-actions.d.ts +1 -1
  88. package/dist/utils/forest-schema/generator-actions.js +99 -0
  89. package/dist/{agent/utils → utils}/forest-schema/generator-collection.d.ts +1 -1
  90. package/dist/utils/forest-schema/generator-collection.js +36 -0
  91. package/dist/{agent/utils → utils}/forest-schema/generator-fields.d.ts +1 -0
  92. package/dist/utils/forest-schema/generator-fields.js +160 -0
  93. package/dist/{agent/utils → utils}/forest-schema/generator-segments.d.ts +0 -0
  94. package/dist/{agent/utils → utils}/forest-schema/generator-segments.js +1 -1
  95. package/dist/{agent/utils → utils}/forest-schema/types.d.ts +10 -4
  96. package/dist/{agent/utils → utils}/forest-schema/types.js +1 -1
  97. package/dist/{agent/utils → utils}/forest-schema/validation.d.ts +1 -1
  98. package/dist/utils/forest-schema/validation.js +28 -0
  99. package/dist/{agent/utils → utils}/id.d.ts +0 -0
  100. package/dist/utils/id.js +43 -0
  101. package/dist/{agent/utils/http-driver-options.d.ts → utils/options-validator.d.ts} +4 -5
  102. package/dist/utils/options-validator.js +92 -0
  103. package/dist/{agent/utils → utils}/query-string.d.ts +2 -2
  104. package/dist/utils/query-string.js +134 -0
  105. package/package.json +16 -5
  106. package/CHANGELOG.md +0 -435
  107. package/dist/agent/forestadmin-http-driver.d.ts +0 -34
  108. package/dist/agent/forestadmin-http-driver.js +0 -73
  109. package/dist/agent/routes/access/chart.js +0 -147
  110. package/dist/agent/routes/access/count-related.js +0 -24
  111. package/dist/agent/routes/access/count.js +0 -24
  112. package/dist/agent/routes/access/csv-related.js +0 -33
  113. package/dist/agent/routes/access/csv.js +0 -30
  114. package/dist/agent/routes/access/get.js +0 -28
  115. package/dist/agent/routes/access/list-related.js +0 -26
  116. package/dist/agent/routes/access/list.js +0 -23
  117. package/dist/agent/routes/base-route.js +0 -16
  118. package/dist/agent/routes/index.js +0 -90
  119. package/dist/agent/routes/modification/action.js +0 -103
  120. package/dist/agent/routes/modification/associate-related.d.ts +0 -12
  121. package/dist/agent/routes/modification/associate-related.js +0 -49
  122. package/dist/agent/routes/modification/create.js +0 -81
  123. package/dist/agent/routes/modification/delete.js +0 -40
  124. package/dist/agent/routes/modification/dissociate-delete-related.js +0 -88
  125. package/dist/agent/routes/modification/update-relation.js +0 -53
  126. package/dist/agent/routes/modification/update.js +0 -29
  127. package/dist/agent/routes/security/authentication.js +0 -86
  128. package/dist/agent/routes/system/error-handling.js +0 -56
  129. package/dist/agent/routes/system/logger.js +0 -36
  130. package/dist/agent/services/permissions.js +0 -79
  131. package/dist/agent/services/serializer.js +0 -120
  132. package/dist/agent/types.d.ts +0 -23
  133. package/dist/agent/types.js +0 -22
  134. package/dist/agent/utils/csv-generator.js +0 -39
  135. package/dist/agent/utils/csv-route-context.js +0 -14
  136. package/dist/agent/utils/forest-http-api.js +0 -173
  137. package/dist/agent/utils/forest-schema/action-values.js +0 -144
  138. package/dist/agent/utils/forest-schema/emitter.js +0 -70
  139. package/dist/agent/utils/forest-schema/generator-actions.js +0 -99
  140. package/dist/agent/utils/forest-schema/generator-collection.js +0 -31
  141. package/dist/agent/utils/forest-schema/generator-fields.js +0 -131
  142. package/dist/agent/utils/forest-schema/validation.js +0 -26
  143. package/dist/agent/utils/http-driver-options.js +0 -86
  144. package/dist/agent/utils/id.js +0 -43
  145. package/dist/agent/utils/query-string.js +0 -130
  146. package/dist/builder/agent.d.ts +0 -81
  147. package/dist/builder/agent.js +0 -113
  148. package/dist/builder/collection.d.ts +0 -148
  149. package/dist/builder/collection.js +0 -226
  150. package/dist/builder/types.d.ts +0 -5
  151. package/dist/builder/types.js +0 -3
@@ -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 smart action forms.
11
- */
12
- class ForestValueConverter {
13
- /**
14
- * Proper form data parser which converts data from a smart 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,70 +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 promises_1 = require("fs/promises");
7
- const json_api_serializer_1 = __importDefault(require("json-api-serializer"));
8
- const crypto_1 = __importDefault(require("crypto"));
9
- const json_stringify_pretty_compact_1 = __importDefault(require("json-stringify-pretty-compact"));
10
- const generator_collection_1 = __importDefault(require("./generator-collection"));
11
- // Load version from package.json at startup
12
- // eslint-disable-next-line @typescript-eslint/no-var-requires
13
- const { version } = require('../../../../package.json');
14
- /**
15
- * Generate and dispatch dataSource schema on agent start.
16
- */
17
- class SchemaEmitter {
18
- static async getSerializedSchema(options, dataSource) {
19
- const schema = options.isProduction
20
- ? await SchemaEmitter.loadFromDisk(options.schemaPath)
21
- : await SchemaEmitter.generate(options.prefix, dataSource);
22
- if (!options.isProduction) {
23
- const pretty = (0, json_stringify_pretty_compact_1.default)(schema, { maxLength: 80 });
24
- await (0, promises_1.writeFile)(options.schemaPath, pretty, { encoding: 'utf-8' });
25
- }
26
- const hash = crypto_1.default.createHash('sha1').update(JSON.stringify(schema)).digest('hex');
27
- return SchemaEmitter.serialize(schema, hash);
28
- }
29
- static async loadFromDisk(schemaPath) {
30
- try {
31
- const fileContent = await (0, promises_1.readFile)(schemaPath, { encoding: 'utf-8' });
32
- return JSON.parse(fileContent);
33
- }
34
- catch (e) {
35
- throw new Error(`Cannot load ${schemaPath}. Providing a schema is mandatory in production mode.`);
36
- }
37
- }
38
- static async generate(prefix, dataSource) {
39
- const allCollectionSchemas = [];
40
- const dataSourceCollectionSchemas = dataSource.collections.map(collection => generator_collection_1.default.buildSchema(prefix, collection));
41
- allCollectionSchemas.push(...dataSourceCollectionSchemas);
42
- return Promise.all(allCollectionSchemas);
43
- }
44
- static serialize(schema, hash) {
45
- // Build serializer
46
- const serializer = new json_api_serializer_1.default();
47
- serializer.register('collections', {
48
- // Pass the metadata provided to the serialization fn
49
- topLevelMeta: (extraData) => extraData,
50
- relationships: {
51
- segments: { type: 'segments' },
52
- actions: { type: 'actions' },
53
- },
54
- });
55
- serializer.register('segments', {});
56
- serializer.register('actions', {});
57
- // Serialize
58
- return serializer.serialize('collections', schema.map(c => ({ id: c.name, ...c })), { ...SchemaEmitter.meta, schemaFileHash: hash });
59
- }
60
- }
61
- exports.default = SchemaEmitter;
62
- SchemaEmitter.meta = {
63
- liana: 'forest-nodejs-agent',
64
- liana_version: version,
65
- stack: {
66
- engine: 'nodejs',
67
- engine_version: process.versions && process.versions.node,
68
- },
69
- };
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1pdHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hZ2VudC91dGlscy9mb3Jlc3Qtc2NoZW1hL2VtaXR0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSwwQ0FBa0Q7QUFDbEQsOEVBQW9EO0FBQ3BELG9EQUE0QjtBQUM1QixrR0FBc0Q7QUFJdEQsa0ZBQStEO0FBTS9ELDRDQUE0QztBQUM1Qyw4REFBOEQ7QUFDOUQsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0FBRXhEOztHQUVHO0FBQ0gsTUFBcUIsYUFBYTtJQVVoQyxNQUFNLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUM5QixPQUFnQixFQUNoQixVQUFzQjtRQUV0QixNQUFNLE1BQU0sR0FBYyxPQUFPLENBQUMsWUFBWTtZQUM1QyxDQUFDLENBQUMsTUFBTSxhQUFhLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7WUFDdEQsQ0FBQyxDQUFDLE1BQU0sYUFBYSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRTdELElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO1lBQ3pCLE1BQU0sTUFBTSxHQUFHLElBQUEsdUNBQVMsRUFBQyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNwRCxNQUFNLElBQUEsb0JBQVMsRUFBQyxPQUFPLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1NBQ3BFO1FBRUQsTUFBTSxJQUFJLEdBQUcsZ0JBQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFF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
@@ -1,99 +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 path_1 = __importDefault(require("path"));
8
- const action_values_1 = __importDefault(require("./action-values"));
9
- class SchemaGeneratorActions {
10
- static async buildSchema(prefix, collection, name) {
11
- const schema = collection.schema.actions[name];
12
- const actionIndex = Object.keys(collection.schema.actions).indexOf(name);
13
- // Generate url-safe friendly name (which won't be unique, but that's OK).
14
- const slug = name.toLocaleLowerCase().replace(/[^a-z0-9-]+/g, '-');
15
- const fields = await SchemaGeneratorActions.buildFields(collection, name, schema);
16
- return {
17
- id: `${collection.name}-${actionIndex}-${slug}`,
18
- name,
19
- type: schema.scope.toLowerCase(),
20
- baseUrl: null,
21
- endpoint: path_1.default.join('/', prefix, '_actions', collection.name, String(actionIndex), slug),
22
- httpMethod: 'POST',
23
- redirect: null,
24
- download: Boolean(schema.generateFile),
25
- fields,
26
- hooks: {
27
- load: !schema.staticForm,
28
- // Always registering the change hook has no consequences, even if we don't use it.
29
- change: ['changeHook'],
30
- },
31
- };
32
- }
33
- /** Build schema for given field */
34
- static buildFieldSchema(dataSource, field) {
35
- const { label, description, isRequired, isReadOnly, watchChanges, type } = field;
36
- const output = { description, isRequired, isReadOnly };
37
- output.field = label;
38
- output.value = action_values_1.default.valueToForest(field, field.value);
39
- if (watchChanges)
40
- output.hook = 'changeHook';
41
- if (type === 'Collection') {
42
- const collection = dataSource.getCollection(field.collectionName);
43
- const [pk] = datasource_toolkit_1.SchemaUtils.getPrimaryKeys(collection.schema);
44
- const pkSchema = collection.schema.fields[pk];
45
- output.type = pkSchema.columnType;
46
- output.reference = `${collection.name}.${pk}`;
47
- }
48
- else if (type.endsWith('List')) {
49
- output.type = [type.substring(0, type.length - 4)];
50
- }
51
- else {
52
- output.type = type;
53
- }
54
- if (type === 'Enum' || type === 'EnumList') {
55
- output.enums = field.enumValues;
56
- }
57
- return output;
58
- }
59
- static async buildFields(collection, name, schema) {
60
- // We want the schema to be generated on usage => send dummy schema
61
- if (!schema.staticForm) {
62
- return SchemaGeneratorActions.defaultFields;
63
- }
64
- // Ask the action to generate a form
65
- const fields = await collection.getForm(name);
66
- if (fields) {
67
- // When sending to server, we need to rename 'value' into 'defaultValue'
68
- // otherwise, it does not gets applied 🤷‍♂️
69
- return fields.map(field => {
70
- const newField = SchemaGeneratorActions.buildFieldSchema(collection.dataSource, field);
71
- newField.defaultValue = newField.value;
72
- delete newField.value;
73
- return newField;
74
- });
75
- }
76
- return [];
77
- }
78
- }
79
- exports.default = SchemaGeneratorActions;
80
- /**
81
- * 'fields' sent to forestadmin-server when we want to generate the form on demand.
82
- * This works around a bug in frontend which won't call the server if no fields are defined.
83
- */
84
- SchemaGeneratorActions.defaultFields = [
85
- {
86
- field: 'Loading...',
87
- type: 'String',
88
- isReadOnly: true,
89
- defaultValue: 'Form is loading',
90
- value: undefined,
91
- description: '',
92
- enums: null,
93
- hook: null,
94
- isRequired: false,
95
- reference: null,
96
- widget: null,
97
- },
98
- ];
99
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdG9yLWFjdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYWdlbnQvdXRpbHMvZm9yZXN0LXNjaGVtYS9nZW5lcmF0b3ItYWN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHdFQVF5QztBQUN6QyxnREFBd0I7QUFHeEIsb0VBQW1EO0FBRW5ELE1BQXFCLHNCQUFzQjtJQXFCekMsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQ3RCLE1BQWMsRUFDZCxVQUFzQixFQUN0QixJQUFZO1FBRVosTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0MsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV6RSwwRUFBMEU7UUFDMUUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNuRSxNQUFNLE1BQU0sR0FBRyxNQUFNLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRWxGLE9BQU87WUFDTCxFQUFFLEVBQUUsR0FBRyxVQUFVLENBQUMsSUFBSSxJQUFJLFdBQVcsSUFBSSxJQUFJLEVBQUU7WUFDL0MsSUFBSTtZQUNKLElBQUksRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBa0M7WUFDaEUsT0FBTyxFQUFFLElBQUk7WUFDYixRQUFRLEVBQUUsY0FBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxJQUFJLENBQUM7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
@@ -1,31 +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 generator_actions_1 = __importDefault(require("./generator-actions"));
8
- const generator_fields_1 = __importDefault(require("./generator-fields"));
9
- const generator_segments_1 = __importDefault(require("./generator-segments"));
10
- class SchemaGeneratorCollection {
11
- /** Build forest-server schema for a collection */
12
- static async buildSchema(prefix, collection) {
13
- return {
14
- actions: await Promise.all(Object.keys(collection.schema.actions).map(name => generator_actions_1.default.buildSchema(prefix, collection, name))),
15
- fields: Object.keys(collection.schema.fields)
16
- .filter(name => !datasource_toolkit_1.SchemaUtils.isForeignKey(collection.schema, name))
17
- .map(name => generator_fields_1.default.buildSchema(collection, name)),
18
- icon: null,
19
- integration: null,
20
- isReadOnly: Object.values(collection.schema.fields).every(field => field.type === 'Column' && field.isReadOnly),
21
- isSearchable: collection.schema.searchable,
22
- isVirtual: false,
23
- name: collection.name,
24
- onlyForRelationships: false,
25
- paginationType: 'page',
26
- segments: collection.schema.segments.map(name => generator_segments_1.default.buildSchema(collection, name)),
27
- };
28
- }
29
- }
30
- exports.default = SchemaGeneratorCollection;
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdG9yLWNvbGxlY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYWdlbnQvdXRpbHMvZm9yZXN0LXNjaGVtYS9nZW5lcmF0b3ItY29sbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHdFQUEwRTtBQUUxRSw0RUFBeUQ7QUFDekQsMEVBQXVEO0FBQ3ZELDhFQUEyRDtBQUUzRCxNQUFxQix5QkFBeUI7SUFDNUMsa0RBQWtEO0lBQ2xELE1BQU0sQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUN0QixNQUFjLEVBQ2QsVUFBc0I7UUFFdEIsT0FBTztZQUNMLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDaEQsMkJBQXNCLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQzdELENBQ0Y7WUFDRCxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztpQkFDMUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxnQ0FBVyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO2lCQUNsRSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQywwQkFBcUIsQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ25FLElBQUksRUFBRSxJQUFJO1lBQ1YsV0FBVyxFQUFFLElBQUk7WUFDakIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQ3ZELEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FDckQ7WUFDRCxZQUFZLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVO1lBQzFDLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtZQUNyQixvQkFBb0IsRUFBRSxLQUFLO1lBQzNCLGNBQWMsRUFBRSxNQUFNO1lBQ3RCLFFBQVEsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDOUMsNEJBQXVCLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FDdEQ7U0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBOUJELDRDQThCQyJ9
@@ -1,131 +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: column.columnType,
49
- validations: validation_1.default.convertValidationList(column.validation),
50
- };
51
- }
52
- static buildToManyRelationSchema(relation, foreignCollection, baseSchema) {
53
- const key = relation.type === 'OneToMany' ? relation.originKeyTarget : relation.foreignKeyTarget;
54
- const keySchema = foreignCollection.schema.fields[key];
55
- return {
56
- type: [keySchema.columnType],
57
- defaultValue: null,
58
- isFilterable: false,
59
- isPrimaryKey: false,
60
- isRequired: false,
61
- isSortable: false,
62
- validations: [],
63
- reference: `${foreignCollection.name}.${key}`,
64
- ...baseSchema,
65
- };
66
- }
67
- static isForeignCollectionFilterable(foreignCollection) {
68
- return Object.values(foreignCollection.schema.fields).some(field => field.type === 'Column' &&
69
- filterable_1.default.isFilterable(field.columnType, field.filterOperators));
70
- }
71
- static buildOneToOneSchema(relation, foreignCollection, baseSchema) {
72
- const key = relation.originKeyTarget;
73
- const keySchema = foreignCollection.schema.fields[key];
74
- return {
75
- type: keySchema.columnType,
76
- defaultValue: null,
77
- isFilterable: SchemaGeneratorFields.isForeignCollectionFilterable(foreignCollection),
78
- isPrimaryKey: false,
79
- isRequired: false,
80
- isSortable: Boolean(keySchema.isSortable),
81
- validations: [],
82
- reference: `${foreignCollection.name}.${key}`,
83
- ...baseSchema,
84
- };
85
- }
86
- static buildManyToOneSchema(relation, collection, foreignCollection, baseSchema) {
87
- const key = relation.foreignKey;
88
- const keySchema = collection.schema.fields[key];
89
- return {
90
- type: keySchema.columnType,
91
- defaultValue: keySchema.defaultValue ?? null,
92
- isFilterable: SchemaGeneratorFields.isForeignCollectionFilterable(foreignCollection),
93
- isPrimaryKey: Boolean(keySchema.isPrimaryKey),
94
- isRequired: keySchema.validation?.some(v => v.operator === 'Present') ?? false,
95
- isSortable: Boolean(keySchema.isSortable),
96
- validations: validation_1.default.convertValidationList(keySchema.validation),
97
- reference: `${foreignCollection.name}.${relation.foreignKeyTarget}`,
98
- ...baseSchema,
99
- };
100
- }
101
- static buildRelationSchema(collection, name) {
102
- const relation = collection.schema.fields[name];
103
- const foreignCollection = collection.dataSource.getCollection(relation.foreignCollection);
104
- const relationSchema = {
105
- field: name,
106
- enums: null,
107
- integration: null,
108
- isReadOnly: false,
109
- isVirtual: false,
110
- inverseOf: datasource_toolkit_1.CollectionUtils.getInverseRelation(collection, name),
111
- relationship: SchemaGeneratorFields.relationMap[relation.type],
112
- };
113
- switch (relation.type) {
114
- case 'ManyToMany':
115
- case 'OneToMany':
116
- return SchemaGeneratorFields.buildToManyRelationSchema(relation, foreignCollection, relationSchema);
117
- case 'OneToOne':
118
- return SchemaGeneratorFields.buildOneToOneSchema(relation, foreignCollection, relationSchema);
119
- default:
120
- return SchemaGeneratorFields.buildManyToOneSchema(relation, collection, foreignCollection, relationSchema);
121
- }
122
- }
123
- }
124
- exports.default = SchemaGeneratorFields;
125
- SchemaGeneratorFields.relationMap = {
126
- ManyToMany: 'BelongsToMany',
127
- ManyToOne: 'BelongsTo',
128
- OneToMany: 'HasMany',
129
- OneToOne: 'HasOne',
130
- };
131
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdG9yLWZpZWxkcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hZ2VudC91dGlscy9mb3Jlc3Qtc2NoZW1hL2dlbmVyYXRvci1maWVsZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx3RUFVeUM7QUFFekMsOERBQW1EO0FBQ25ELDhEQUFtRDtBQUVuRCxNQUFxQixxQkFBcUI7SUFReEMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFzQixFQUFFLElBQVk7UUFDckQsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWhELElBQUksTUFBeUIsQ0FBQztRQUU5QixRQUFRLElBQUksRUFBRTtZQUNaLEtBQUssUUFBUTtnQkFDWCxNQUFNLEdBQUcscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNuRSxNQUFNO1lBRVIsS0FBSyxXQUFXLENBQUM7WUFDakIsS0FBSyxXQUFXLENBQUM7WUFDakIsS0FBSyxZQUFZLENBQUM7WUFDbEIsS0FBSyxVQUFVO2dCQUNiLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3JFLE1BQU07WUFFUjtnQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUM7U0FDekM7UUFFRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO2FBQzFCLElBQUksRUFBRTthQUNOLE1BQU0sQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ3JDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7WUFFMUIsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1gs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
@@ -1,26 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const types_1 = require("./types");
4
- class FrontendValidationUtils {
5
- static convertValidationList(predicates) {
6
- if (!predicates)
7
- return [];
8
- return predicates
9
- .map(p => {
10
- const type = FrontendValidationUtils.operatorValidationTypeMap[p.operator];
11
- return type ? { type, value: p.value, message: null } : null;
12
- })
13
- .filter(Boolean);
14
- }
15
- }
16
- exports.default = FrontendValidationUtils;
17
- FrontendValidationUtils.operatorValidationTypeMap = {
18
- Present: types_1.ValidationType.Present,
19
- GreaterThan: types_1.ValidationType.GreaterThan,
20
- LessThan: types_1.ValidationType.LessThan,
21
- LongerThan: types_1.ValidationType.LongerThan,
22
- ShorterThan: types_1.ValidationType.ShorterThan,
23
- Contains: types_1.ValidationType.Contains,
24
- Like: types_1.ValidationType.Like,
25
- };
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hZ2VudC91dGlscy9mb3Jlc3Qtc2NoZW1hL3ZhbGlkYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSxtQ0FBNEQ7QUFLNUQsTUFBcUIsdUJBQXVCO0lBVzFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxVQUF5QjtRQUNwRCxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBRTNCLE9BQU8sVUFBVTthQUNkLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNQLE1BQU0sSUFBSSxHQUFHLHVCQUF1QixDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUUzRSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDL0QsQ0FBQyxDQUFDO2FBQ0QsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JCLENBQUM7O0FBckJILDBDQXNCQztBQXJCZ0IsaURBQXlCLEdBQThDO0lBQ3BGLE9BQU8sRUFBRSxzQkFBYyxDQUFDLE9BQU87SUFDL0IsV0FBVyxFQUFFLHNCQUFjLENBQUMsV0FBVztJQUN2QyxRQUFRLEVBQUUsc0JBQWMsQ0FBQyxRQUFRO0lBQ2pDLFVBQVUsRUFBRSxzQkFBYyxDQUFDLFVBQVU7SUFDckMsV0FBVyxFQUFFLHNCQUFjLENBQUMsV0FBVztJQUN2QyxRQUFRLEVBQUUsc0JBQWMsQ0FBQyxRQUFRO0lBQ2pDLElBQUksRUFBRSxzQkFBYyxDQUFDLElBQUk7Q0FDMUIsQ0FBQyJ9
@@ -1,86 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const fs_1 = require("fs");
4
- const path_1 = require("path");
5
- const types_1 = require("../../types");
6
- class OptionsUtils {
7
- static withDefaults(options) {
8
- return Object.freeze({
9
- clientId: null,
10
- forestServerUrl: 'https://api.forestadmin.com',
11
- logger: (level, data) => console.error(OptionsUtils.loggerPrefix[level], data),
12
- prefix: '/forest',
13
- schemaPath: '.forestadmin-schema.json',
14
- permissionsCacheDurationInSeconds: 15 * 60,
15
- ...options,
16
- });
17
- }
18
- static validate(options) {
19
- OptionsUtils.checkForestServerOptions(options);
20
- OptionsUtils.checkAuthOptions(options);
21
- OptionsUtils.checkOtherOptions(options);
22
- }
23
- static checkForestServerOptions(options) {
24
- if (typeof options.envSecret !== 'string' || !/^[0-9a-f]{64}$/.test(options.envSecret)) {
25
- throw new Error('options.envSecret is invalid. You can retrieve its value from ' +
26
- 'https://www.forestadmin.com');
27
- }
28
- if (!OptionsUtils.isUrl(options.forestServerUrl)) {
29
- throw new Error('options.forestServerUrl is invalid. It should contain an URL ' +
30
- '(i.e. "https://api.forestadmin.com")');
31
- }
32
- if (!OptionsUtils.isExistingPath(options.schemaPath)) {
33
- throw new Error('options.schemaPath is invalid. It should contain a relative filepath ' +
34
- 'where the schema should be loaded/updated (i.e. "./.forestadmin-schema.json")');
35
- }
36
- }
37
- static checkAuthOptions(options) {
38
- if (!OptionsUtils.isUrl(options.agentUrl)) {
39
- throw new Error('options.agentUrl is invalid. It should contain an url where your agent is reachable ' +
40
- '(i.e. "https://api-forestadmin.mycompany.com")');
41
- }
42
- if (typeof options.authSecret !== 'string') {
43
- throw new Error('options.authSecret is invalid. Any long random string should work ' +
44
- '(i.e. "OfpssLrbgF3P4vHJTTpb"');
45
- }
46
- if (options.clientId === null) {
47
- options.logger?.(types_1.LoggerLevel.Warn, 'options.clientId was not provided. Using NodeJS cluster mode, ' +
48
- 'or multiple instances of the agent will break authentication');
49
- }
50
- else if (typeof options.clientId !== 'string') {
51
- throw new Error('options.clientId is invalid.');
52
- }
53
- }
54
- static checkOtherOptions(options) {
55
- if (typeof options.prefix !== 'string' || !/[-/a-z+]/.test(options.prefix)) {
56
- throw new Error('options.prefix is invalid. It should contain the prefix on which ' +
57
- 'forest admin routes should be mounted (i.e. "/forest")');
58
- }
59
- }
60
- static isExistingPath(string) {
61
- if (typeof string !== 'string') {
62
- return false;
63
- }
64
- const parsed = (0, path_1.parse)(string);
65
- return parsed.dir.length ? (0, fs_1.existsSync)(parsed.dir) : true;
66
- }
67
- static isUrl(string) {
68
- if (typeof string !== 'string') {
69
- return false;
70
- }
71
- try {
72
- const url = new URL(string);
73
- return url.protocol === 'http:' || url.protocol === 'https:';
74
- }
75
- catch (_) {
76
- return false;
77
- }
78
- }
79
- }
80
- exports.default = OptionsUtils;
81
- OptionsUtils.loggerPrefix = {
82
- [types_1.LoggerLevel.Info]: '\x1b[34minfo:\x1b[0m',
83
- [types_1.LoggerLevel.Warn]: '\x1b[33mwarning:\x1b[0m',
84
- [types_1.LoggerLevel.Error]: '\x1b[31merror:\x1b[0m',
85
- };
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1kcml2ZXItb3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hZ2VudC91dGlscy9odHRwLWRyaXZlci1vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMkJBQWdDO0FBQ2hDLCtCQUEwQztBQUUxQyx1Q0FBd0Q7QUFHeEQsTUFBcUIsWUFBWTtJQU8vQixNQUFNLENBQUMsWUFBWSxDQUFDLE9BQXFCO1FBQ3ZDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUNuQixRQUFRLEVBQUUsSUFBSTtZQUNkLGVBQWUsRUFBRSw2QkFBNkI7WUFDOUMsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQztZQUM5RSxNQUFNLEVBQUUsU0FBUztZQUNqQixVQUFVLEVBQUUsMEJBQTBCO1lBQ3RDLGlDQUFpQyxFQUFFLEVBQUUsR0FBRyxFQUFFO1lBQzFDLEdBQUcsT0FBTztTQUNYLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQWlDO1FBQy9DLFlBQVksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFTyxNQUFNLENBQUMsd0JBQXdCLENBQUMsT0FBaUM7UUFDdkUsSUFBSSxPQUFPLE9BQU8sQ0FBQyxTQUFTLEtBQUssUUFBUSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUN0RixNQUFNLElBQUksS0FBSyxDQUNiLGdFQUFnRTtnQkFDOUQsNkJBQTZCLENBQ2hDLENB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