@forestadmin/agent 1.0.0-beta.5 → 1.0.0-beta.52

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 (73) hide show
  1. package/CHANGELOG.md +500 -0
  2. package/dist/agent/forestadmin-http-driver.d.ts +5 -27
  3. package/dist/agent/forestadmin-http-driver.js +17 -47
  4. package/dist/agent/routes/access/api-chart.d.ts +16 -0
  5. package/dist/agent/routes/access/api-chart.js +47 -0
  6. package/dist/agent/routes/access/chart.js +47 -23
  7. package/dist/agent/routes/access/count-related.js +13 -6
  8. package/dist/agent/routes/access/count.js +14 -7
  9. package/dist/agent/routes/access/csv-related.js +3 -3
  10. package/dist/agent/routes/access/csv.js +4 -3
  11. package/dist/agent/routes/access/get.js +3 -2
  12. package/dist/agent/routes/access/list-related.js +2 -3
  13. package/dist/agent/routes/access/list.js +2 -3
  14. package/dist/agent/routes/base-route.d.ts +0 -1
  15. package/dist/agent/routes/base-route.js +1 -4
  16. package/dist/agent/routes/index.js +20 -2
  17. package/dist/agent/routes/modification/action.d.ts +0 -1
  18. package/dist/agent/routes/modification/action.js +11 -11
  19. package/dist/agent/routes/modification/associate-related.d.ts +3 -3
  20. package/dist/agent/routes/modification/associate-related.js +13 -11
  21. package/dist/agent/routes/modification/create.js +14 -12
  22. package/dist/agent/routes/modification/delete.js +3 -2
  23. package/dist/agent/routes/modification/dissociate-delete-related.js +19 -18
  24. package/dist/agent/routes/modification/update-field.d.ts +9 -0
  25. package/dist/agent/routes/modification/update-field.js +39 -0
  26. package/dist/agent/routes/modification/update-relation.js +19 -13
  27. package/dist/agent/routes/modification/update.js +5 -3
  28. package/dist/agent/routes/security/authentication.d.ts +1 -2
  29. package/dist/agent/routes/security/authentication.js +8 -12
  30. package/dist/agent/routes/system/error-handling.d.ts +2 -0
  31. package/dist/agent/routes/system/error-handling.js +28 -9
  32. package/dist/agent/routes/system/logger.js +4 -5
  33. package/dist/agent/services/index.js +2 -2
  34. package/dist/agent/services/serializer.d.ts +0 -5
  35. package/dist/agent/services/serializer.js +4 -4
  36. package/dist/agent/types.d.ts +2 -1
  37. package/dist/agent/types.js +2 -1
  38. package/dist/agent/utils/condition-tree-parser.d.ts +11 -0
  39. package/dist/agent/utils/condition-tree-parser.js +53 -0
  40. package/dist/agent/utils/context-filter-factory.js +1 -2
  41. package/dist/agent/utils/csv-generator.d.ts +2 -2
  42. package/dist/agent/utils/csv-generator.js +3 -3
  43. package/dist/agent/utils/forest-http-api.d.ts +1 -0
  44. package/dist/agent/utils/forest-http-api.js +58 -50
  45. package/dist/agent/utils/forest-schema/emitter.d.ts +1 -1
  46. package/dist/agent/utils/forest-schema/emitter.js +4 -4
  47. package/dist/agent/utils/forest-schema/generator-actions.d.ts +1 -1
  48. package/dist/agent/utils/forest-schema/generator-actions.js +4 -4
  49. package/dist/agent/utils/forest-schema/generator-collection.d.ts +1 -1
  50. package/dist/agent/utils/forest-schema/generator-collection.js +9 -4
  51. package/dist/agent/utils/forest-schema/generator-fields.d.ts +1 -0
  52. package/dist/agent/utils/forest-schema/generator-fields.js +56 -27
  53. package/dist/agent/utils/forest-schema/types.d.ts +9 -3
  54. package/dist/agent/utils/forest-schema/types.js +1 -1
  55. package/dist/agent/utils/query-string.d.ts +2 -2
  56. package/dist/agent/utils/query-string.js +8 -4
  57. package/dist/builder/agent.d.ts +63 -40
  58. package/dist/builder/agent.js +202 -53
  59. package/dist/builder/collection.d.ts +152 -53
  60. package/dist/builder/collection.js +219 -59
  61. package/dist/builder/decorators-stack.d.ts +24 -0
  62. package/dist/builder/decorators-stack.js +39 -0
  63. package/dist/builder/types.d.ts +15 -2
  64. package/dist/{agent/utils/http-driver-options.d.ts → builder/utils/options-validator.d.ts} +4 -4
  65. package/dist/builder/utils/options-validator.js +107 -0
  66. package/dist/builder/utils/typing-generator.d.ts +10 -0
  67. package/dist/builder/utils/typing-generator.js +98 -0
  68. package/dist/index.d.ts +5 -2
  69. package/dist/index.js +13 -5
  70. package/dist/types.d.ts +6 -9
  71. package/dist/types.js +1 -9
  72. package/package.json +15 -5
  73. package/dist/agent/utils/http-driver-options.js +0 -86
@@ -6,9 +6,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const datasource_toolkit_1 = require("@forestadmin/datasource-toolkit");
7
7
  const filterable_1 = __importDefault(require("../agent/utils/forest-schema/filterable"));
8
8
  class CollectionBuilder {
9
- constructor(agentBuilder, name) {
10
- this.agentBuilder = agentBuilder;
9
+ constructor(stack, name) {
11
10
  this.name = name;
11
+ this.stack = stack;
12
+ }
13
+ /**
14
+ * Disable count in list view pagination for improved performance.
15
+ *
16
+ * @example
17
+ * .disableCount()
18
+ */
19
+ disableCount() {
20
+ this.stack.schema.getCollection(this.name).overrideSchema({ countable: false });
21
+ return this;
12
22
  }
13
23
  /**
14
24
  * Import a field from a many to one or one to one relation.
@@ -19,7 +29,7 @@ class CollectionBuilder {
19
29
  * .importField('authorName', { path: 'author:fullName' })
20
30
  */
21
31
  importField(name, options) {
22
- const collection = this.agentBuilder.lateComputed.getCollection(this.name);
32
+ const collection = this.stack.lateComputed.getCollection(this.name);
23
33
  const schema = datasource_toolkit_1.CollectionUtils.getFieldSchema(collection, options.path);
24
34
  this.addField(name, {
25
35
  beforeRelations: options.beforeRelations,
@@ -29,58 +39,77 @@ class CollectionBuilder {
29
39
  getValues: records => records.map(r => datasource_toolkit_1.RecordUtils.getFieldValue(r, options.path)),
30
40
  enumValues: schema.enumValues,
31
41
  });
42
+ if (!schema.isReadOnly && !options.readonly) {
43
+ this.stack.write.getCollection(this.name).replaceFieldWriting(name, value => {
44
+ const path = options.path.split(':');
45
+ const writingPath = {};
46
+ path.reduce((nestedPath, currentPath, index) => {
47
+ nestedPath[currentPath] = index === path.length - 1 ? value : {};
48
+ return nestedPath[currentPath];
49
+ }, writingPath);
50
+ return writingPath;
51
+ });
52
+ }
53
+ if (schema.isReadOnly && options.readonly === false) {
54
+ throw new Error(`Readonly option should not be false because the field "${options.path}" is not writable`);
55
+ }
32
56
  for (const operator of schema.filterOperators) {
33
- const handler = (value) => ({ field: options.path, operator, value });
57
+ const handler = value => ({ field: options.path, operator, value });
34
58
  this.replaceFieldOperator(name, operator, handler);
35
59
  }
36
60
  if (schema.isSortable) {
37
- this.replaceFieldSorting(name, [{ field: options.path, ascending: true }]);
61
+ this.replaceFieldSorting(name, [
62
+ { field: options.path, ascending: true },
63
+ ]);
38
64
  }
39
65
  return this;
40
66
  }
41
67
  /**
42
68
  * Allow to rename a field of a given collection.
43
- * @param {string} oldName the current name of the field in a given collection
44
- * @param {string} newName the new name of the field
69
+ * @param oldName the current name of the field in a given collection
70
+ * @param newName the new name of the field
45
71
  * @example
46
72
  * .renameField('theCurrentNameOfTheField', 'theNewNameOfTheField');
47
73
  */
48
74
  renameField(oldName, newName) {
49
- this.agentBuilder.rename.getCollection(this.name).renameField(oldName, newName);
75
+ this.stack.renameField.getCollection(this.name).renameField(oldName, newName);
50
76
  return this;
51
77
  }
52
78
  /**
53
79
  * Remove field by setting its visibility to false.
54
- * @param {...string[]} names the fields to remove
80
+ * @param names the fields to remove
55
81
  * @example
56
- * .removeField('aFieldToRemove', 'anOtherFieldToRemove');
82
+ * .removeField('aFieldToRemove', 'anotherFieldToRemove');
57
83
  */
58
84
  removeField(...names) {
59
- const collection = this.agentBuilder.publication.getCollection(this.name);
85
+ const collection = this.stack.publication.getCollection(this.name);
60
86
  for (const name of names)
61
87
  collection.changeFieldVisibility(name, false);
62
88
  return this;
63
89
  }
64
90
  /**
65
91
  * Add a new action on the collection.
66
- * @param {string} name the name of the action
67
- * @param {ActionDefinition} definition the definition of the action
92
+ * @param name the name of the action
93
+ * @param definition the definition of the action
68
94
  * @example
69
95
  * .addAction('is live', {
70
96
  * scope: 'Single',
71
- * execute: async (context, responseBuilder) => {
72
- * return responseBuilder.success(`Is live!`);
97
+ * execute: async (context, resultBuilder) => {
98
+ * return resultBuilder.success(`Is live!`);
73
99
  * },
74
100
  * })
75
101
  */
76
102
  addAction(name, definition) {
77
- this.agentBuilder.action.getCollection(this.name).addAction(name, definition);
103
+ this.stack.action
104
+ .getCollection(this.name)
105
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
106
+ .addAction(name, definition);
78
107
  return this;
79
108
  }
80
109
  /**
81
110
  * Add a new field on the collection.
82
- * @param {string} name the name of the field
83
- * @param {FieldDefinition} definition The definition of the field
111
+ * @param name the name of the field
112
+ * @param definition The definition of the field
84
113
  * @example
85
114
  * .addField('fullName', {
86
115
  * columnType: 'String',
@@ -91,57 +120,141 @@ class CollectionBuilder {
91
120
  addField(name, definition) {
92
121
  const { beforeRelations, ...computedDefinition } = definition;
93
122
  const collection = definition.beforeRelations
94
- ? this.agentBuilder.earlyComputed.getCollection(this.name)
95
- : this.agentBuilder.lateComputed.getCollection(this.name);
123
+ ? this.stack.earlyComputed.getCollection(this.name)
124
+ : this.stack.lateComputed.getCollection(this.name);
96
125
  collection.registerComputed(name, computedDefinition);
97
126
  return this;
98
127
  }
99
128
  /**
100
- * Add a relation between two collections.
129
+ * Add a many to one relation to the collection
101
130
  * @param name name of the new relation
102
- * @param definition definition of the new relation
131
+ * @param foreignCollection name of the targeted collection
132
+ * @param options extra information about the relation
103
133
  * @example
104
- * .addRelation('author', {
105
- * type: 'ManyToOne',
106
- * foreignCollection: 'persons',
107
- * foreignKey: 'authorId'
108
- * });
134
+ * books.addManyToOneRelation('myAuthor', 'persons', { foreignKey: 'authorId' })
109
135
  */
110
- addRelation(name, definition) {
111
- this.agentBuilder.relation.getCollection(this.name).addRelation(name, definition);
136
+ addManyToOneRelation(name, foreignCollection, options) {
137
+ this.addRelation(name, {
138
+ type: 'ManyToOne',
139
+ foreignCollection,
140
+ foreignKey: options.foreignKey,
141
+ foreignKeyTarget: options.foreignKeyTarget,
142
+ });
143
+ return this;
144
+ }
145
+ /**
146
+ * Add a one to many relation to the collection
147
+ * @param name name of the new relation
148
+ * @param foreignCollection name of the targeted collection
149
+ * @param options extra information about the relation
150
+ * @example
151
+ * persons.addOneToManyRelation('writtenBooks', 'books', { originKey: 'authorId' })
152
+ */
153
+ addOneToManyRelation(name, foreignCollection, options) {
154
+ this.addRelation(name, {
155
+ type: 'OneToMany',
156
+ foreignCollection,
157
+ originKey: options.originKey,
158
+ originKeyTarget: options.originKeyTarget,
159
+ });
160
+ return this;
161
+ }
162
+ /**
163
+ * Add a one to one relation to the collection
164
+ * @param name name of the new relation
165
+ * @param foreignCollection name of the targeted collection
166
+ * @param options extra information about the relation
167
+ * @example
168
+ * persons.addOneToOneRelation('bestFriend', 'persons', { originKey: 'bestFriendId' })
169
+ */
170
+ addOneToOneRelation(name, foreignCollection, options) {
171
+ this.addRelation(name, {
172
+ type: 'OneToOne',
173
+ foreignCollection,
174
+ originKey: options.originKey,
175
+ originKeyTarget: options.originKeyTarget,
176
+ });
177
+ return this;
178
+ }
179
+ /**
180
+ * Add a many to many relation to the collection
181
+ * @param name name of the new relation
182
+ * @param foreignCollection name of the targeted collection
183
+ * @param throughCollection name of the intermediary collection
184
+ * @param options extra information about the relation
185
+ * @example
186
+ * dvds.addManyToManyRelation('rentalsOfThisDvd', 'rentals', 'dvdRentals', {
187
+ * originKey: 'dvdId',
188
+ * foreignKey: 'rentalId'
189
+ * })
190
+ */
191
+ addManyToManyRelation(name, foreignCollection, throughCollection, options) {
192
+ this.addRelation(name, {
193
+ type: 'ManyToMany',
194
+ foreignCollection,
195
+ throughCollection,
196
+ originKey: options.originKey,
197
+ originKeyTarget: options.originKeyTarget,
198
+ foreignKey: options.foreignKey,
199
+ foreignKeyTarget: options.foreignKeyTarget,
200
+ });
112
201
  return this;
113
202
  }
203
+ /**
204
+ * Add a virtual collection into the related data of a record.
205
+ *
206
+ * @param name name of the relation
207
+ * @param definition the definition of the new relation
208
+ * @example
209
+ * .addExternalRelation('states', {
210
+ * schema: { code: 'Number', name: 'String' },
211
+ * listRecords: ({ id }) => {
212
+ * return record.id == 34 ?
213
+ * [{ code: 'AL', name: 'Alabama' }, { code: 'AK', name: 'Alaska' }] :
214
+ * [{ code: 'AZ', name: 'Arizona' }, { code: 'TX', name: 'Texas' }];
215
+ * }
216
+ * })
217
+ */
218
+ addExternalRelation(name, definition) {
219
+ const { schema } = this.stack.action.getCollection(this.name);
220
+ const primaryKeys = datasource_toolkit_1.SchemaUtils.getPrimaryKeys(schema);
221
+ return this.addField(name, {
222
+ dependencies: definition.dependencies ?? primaryKeys,
223
+ columnType: [definition.schema],
224
+ getValues: async (records, context) => Promise.all(records.map(async (record) => definition.listRecords(record, context))),
225
+ });
226
+ }
114
227
  /**
115
228
  * Add a new segment on the collection.
116
- * @param {string} name the name of the segment
117
- * @param {SegmentDefinition} definition a function used to generate a condition tree
229
+ * @param name the name of the segment
230
+ * @param definition a function used to generate a condition tree
118
231
  * or a condition tree
119
232
  * @example
120
233
  * .addSegment(
121
234
  * 'Wrote more than 2 books',
122
- * new ConditionTreeLeaf('booksCount', 'GreaterThan', 2),
235
+ * { field: 'booksCount', operator: 'GreaterThan', value: 2 }
123
236
  * );
124
237
  */
125
238
  addSegment(name, definition) {
126
- this.agentBuilder.segment.getCollection(this.name).addSegment(name, definition);
239
+ this.stack.segment.getCollection(this.name).addSegment(name, definition);
127
240
  return this;
128
241
  }
129
242
  /**
130
243
  * Enable sorting on a specific field using emulation.
131
244
  * As for all the emulation method, the field sorting will be done in-memory.
132
- * @param {string} name the name of the field to enable emulation on
245
+ * @param name the name of the field to enable emulation on
133
246
  * @example
134
247
  * .emulateFieldSorting('fullName');
135
248
  */
136
249
  emulateFieldSorting(name) {
137
- this.agentBuilder.sortEmulate.getCollection(this.name).emulateFieldSorting(name);
250
+ this.stack.sortEmulate.getCollection(this.name).emulateFieldSorting(name);
138
251
  return this;
139
252
  }
140
253
  /**
141
254
  * Replace an implementation for the sorting.
142
255
  * The field sorting will be done by the datasource.
143
- * @param {string} name the name of the field to enable sort
144
- * @param {SortClause[]} equivalentSort the sort equivalent
256
+ * @param name the name of the field to enable sort
257
+ * @param equivalentSort the sort equivalent
145
258
  * @example
146
259
  * .replaceFieldSorting(
147
260
  * 'fullName',
@@ -152,7 +265,7 @@ class CollectionBuilder {
152
265
  * )
153
266
  */
154
267
  replaceFieldSorting(name, equivalentSort) {
155
- this.agentBuilder.sortEmulate
268
+ this.stack.sortEmulate
156
269
  .getCollection(this.name)
157
270
  .replaceFieldSorting(name, equivalentSort);
158
271
  return this;
@@ -165,10 +278,10 @@ class CollectionBuilder {
165
278
  * .emulateFieldFiltering('aField');
166
279
  */
167
280
  emulateFieldFiltering(name) {
168
- const collection = this.agentBuilder.lateOpEmulate.getCollection(this.name);
281
+ const collection = this.stack.lateOpEmulate.getCollection(this.name);
169
282
  const field = collection.schema.fields[name];
170
283
  for (const operator of filterable_1.default.getRequiredOperators(field.columnType)) {
171
- if (!field.filterOperators.has(operator)) {
284
+ if (!field.filterOperators?.has(operator)) {
172
285
  this.emulateFieldOperator(name, operator);
173
286
  }
174
287
  }
@@ -177,50 +290,97 @@ class CollectionBuilder {
177
290
  /**
178
291
  * Enable filtering on a specific field with a specific operator using emulation.
179
292
  * As for all the emulation method, the field filtering will be done in-memory.
180
- * @param {string} name the name of the field to enable emulation on
181
- * @param {Operator} operator the operator to emulate
293
+ * @param name the name of the field to enable emulation on
294
+ * @param operator the operator to emulate
182
295
  * @example
183
296
  * .emulateFieldOperator('aField', 'In');
184
297
  */
185
298
  emulateFieldOperator(name, operator) {
186
- const collection = this.agentBuilder.earlyOpEmulate.getCollection(this.name).schema.fields[name]
187
- ? this.agentBuilder.earlyOpEmulate.getCollection(this.name)
188
- : this.agentBuilder.lateOpEmulate.getCollection(this.name);
299
+ const collection = this.stack.earlyOpEmulate.getCollection(this.name).schema.fields[name]
300
+ ? this.stack.earlyOpEmulate.getCollection(this.name)
301
+ : this.stack.lateOpEmulate.getCollection(this.name);
189
302
  collection.emulateFieldOperator(name, operator);
190
303
  return this;
191
304
  }
192
305
  /**
193
306
  * Replace an implementation for a specific operator on a specific field.
194
307
  * The operator replacement will be done by the datasource.
195
- * @param {string} name the name of the field to filter on
196
- * @param {Operator} operator the operator to replace
197
- * @param {OperatorReplacer} replacer the proposed implementation
308
+ * @param name the name of the field to filter on
309
+ * @param operator the operator to replace
310
+ * @param replacer the proposed implementation
198
311
  * @example
199
- * .replaceFieldOperator('booksCount', 'Equal', ({ value }) => new ConditionTreeNot(
200
- * new ConditionTreeLeaf('booksCount', 'Equal', value),
201
- * ));
312
+ * .replaceFieldOperator('fullName', 'Contains', (value) => {
313
+ * return {
314
+ * aggregator: 'Or',
315
+ * conditions: [{
316
+ * field: 'firstName',
317
+ * operator: 'Contains',
318
+ * value
319
+ * }, {
320
+ * field: 'lastName',
321
+ * operator: 'Contains',
322
+ * value
323
+ * }]
324
+ * }
325
+ * });
202
326
  */
203
327
  replaceFieldOperator(name, operator, replacer) {
204
- const collection = this.agentBuilder.earlyOpEmulate.getCollection(this.name).schema.fields[name]
205
- ? this.agentBuilder.earlyOpEmulate.getCollection(this.name)
206
- : this.agentBuilder.lateOpEmulate.getCollection(this.name);
328
+ const collection = this.stack.earlyOpEmulate.getCollection(this.name).schema.fields[name]
329
+ ? this.stack.earlyOpEmulate.getCollection(this.name)
330
+ : this.stack.lateOpEmulate.getCollection(this.name);
207
331
  collection.replaceFieldOperator(name, operator, replacer);
208
332
  return this;
209
333
  }
210
334
  /**
211
335
  * Replace the write behavior of a field.
212
- * @param {string} name the name of the field
213
- * @param {WriteDefinition} definition the function or a value to represent the write behavior
336
+ * @param name the name of the field
337
+ * @param definition the function or a value to represent the write behavior
214
338
  * @example
215
- * .replaceFieldWriting('fullName', ({ patch: fullName }) => {
339
+ * .replaceFieldWriting('fullName', fullName => {
216
340
  * const [firstName, lastName] = fullName.split(' ');
217
341
  * return { firstName, lastName };
218
342
  * });
219
343
  */
220
344
  replaceFieldWriting(name, definition) {
221
- this.agentBuilder.write.getCollection(this.name).replaceFieldWriting(name, definition);
345
+ this.stack.write.getCollection(this.name).replaceFieldWriting(name, definition);
346
+ return this;
347
+ }
348
+ /**
349
+ * Replace the behavior of the search bar
350
+ * @param definition handler to describe the new behavior
351
+ * @example
352
+ * .replaceSearch(async (searchString) => {
353
+ * return { field: 'name', operator: 'Contains', value: searchString };
354
+ * });
355
+ */
356
+ replaceSearch(definition) {
357
+ this.stack.search
358
+ .getCollection(this.name)
359
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
360
+ .replaceSearch(definition);
361
+ return this;
362
+ }
363
+ addHook(position, type, handler) {
364
+ this.stack.hook
365
+ .getCollection(this.name)
366
+ .addHook(position, type, handler);
367
+ return this;
368
+ }
369
+ /**
370
+ * Add a relation between two collections.
371
+ * @param name name of the new relation
372
+ * @param definition definition of the new relation
373
+ * @example
374
+ * .addRelation('author', {
375
+ * type: 'ManyToOne',
376
+ * foreignCollection: 'persons',
377
+ * foreignKey: 'authorId'
378
+ * });
379
+ */
380
+ addRelation(name, definition) {
381
+ this.stack.relation.getCollection(this.name).addRelation(name, definition);
222
382
  return this;
223
383
  }
224
384
  }
225
385
  exports.default = CollectionBuilder;
226
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9idWlsZGVyL2NvbGxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx3RUFXeUM7QUFHekMseUZBQThFO0FBRTlFLE1BQXFCLGlCQUFpQjtJQUlwQyxZQUFZLFlBQTBCLEVBQUUsSUFBWTtRQUNsRCxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILFdBQVcsQ0FBQyxJQUFZLEVBQUUsT0FBb0Q7UUFDNUUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzRSxNQUFNLE1BQU0sR0FBRyxvQ0FBZSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBaUIsQ0FBQztRQUV4RixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRTtZQUNsQixlQUFlLEVBQUUsT0FBTyxDQUFDLGVBQWU7WUFDeEMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1lBQzdCLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWTtZQUNqQyxZQUFZLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQzVCLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxnQ0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xGLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtTQUM5QixDQUFDLENBQUM7UUFFSCxLQUFLLE1BQU0sUUFBUSxJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUU7WUFDN0MsTUFBTSxPQUFP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
386
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9idWlsZGVyL2NvbGxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx3RUFxQnlDO0FBSXpDLHlGQUE4RTtBQUU5RSxNQUFxQixpQkFBaUI7SUFPcEMsWUFBWSxLQUFzQixFQUFFLElBQVk7UUFDOUMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsWUFBWTtRQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFaEYsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILFdBQVcsQ0FDVCxJQUFZLEVBQ1osT0FBa0Y7UUFFbEYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRSxNQUFNLE1BQU0sR0FBRyxvQ0FBZSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBaUIsQ0FBQztRQUV4RixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRTtZQUNsQixlQUFlLEVBQUUsT0FBTyxDQUFDLGVBQWU7WUFDeEMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1lBQzdCLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWTtZQUNqQyxZQUFZLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQzVCLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVB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
@@ -0,0 +1,24 @@
1
+ import { ActionCollectionDecorator, ChartDataSourceDecorator, ComputedCollectionDecorator, DataSource, DataSourceDecorator, EmptyCollectionDecorator, HookCollectionDecorator, OperatorsEmulateCollectionDecorator, OperatorsReplaceCollectionDecorator, PublicationCollectionDecorator, RelationCollectionDecorator, RenameFieldCollectionDecorator, SchemaCollectionDecorator, SearchCollectionDecorator, SegmentCollectionDecorator, SortEmulateCollectionDecorator, WriteCollectionDecorator } from '@forestadmin/datasource-toolkit';
2
+ export default class DecoratorsStack {
3
+ action: DataSourceDecorator<ActionCollectionDecorator>;
4
+ chart: ChartDataSourceDecorator;
5
+ earlyComputed: DataSourceDecorator<ComputedCollectionDecorator>;
6
+ earlyOpEmulate: DataSourceDecorator<OperatorsEmulateCollectionDecorator>;
7
+ earlyOpReplace: DataSourceDecorator<OperatorsReplaceCollectionDecorator>;
8
+ empty: DataSourceDecorator<EmptyCollectionDecorator>;
9
+ relation: DataSourceDecorator<RelationCollectionDecorator>;
10
+ lateComputed: DataSourceDecorator<ComputedCollectionDecorator>;
11
+ lateOpEmulate: DataSourceDecorator<OperatorsEmulateCollectionDecorator>;
12
+ lateOpReplace: DataSourceDecorator<OperatorsReplaceCollectionDecorator>;
13
+ publication: DataSourceDecorator<PublicationCollectionDecorator>;
14
+ renameField: DataSourceDecorator<RenameFieldCollectionDecorator>;
15
+ schema: DataSourceDecorator<SchemaCollectionDecorator>;
16
+ search: DataSourceDecorator<SearchCollectionDecorator>;
17
+ segment: DataSourceDecorator<SegmentCollectionDecorator>;
18
+ sortEmulate: DataSourceDecorator<SortEmulateCollectionDecorator>;
19
+ write: DataSourceDecorator<WriteCollectionDecorator>;
20
+ hook: DataSourceDecorator<HookCollectionDecorator>;
21
+ dataSource: DataSource;
22
+ constructor(dataSource: DataSource);
23
+ }
24
+ //# sourceMappingURL=decorators-stack.d.ts.map
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const datasource_toolkit_1 = require("@forestadmin/datasource-toolkit");
4
+ class DecoratorsStack {
5
+ constructor(dataSource) {
6
+ let last = dataSource;
7
+ /* eslint-disable no-multi-assign */
8
+ // Step 0: Do not query datasource when we know the result with yield an empty set.
9
+ last = this.empty = new datasource_toolkit_1.DataSourceDecorator(last, datasource_toolkit_1.EmptyCollectionDecorator);
10
+ // Step 1: Computed-Relation-Computed sandwich (needed because some emulated relations depend
11
+ // on computed fields, and some computed fields depend on relation...)
12
+ // Note that replacement goes before emulation, as replacements may use emulated operators.
13
+ last = this.earlyComputed = new datasource_toolkit_1.DataSourceDecorator(last, datasource_toolkit_1.ComputedCollectionDecorator);
14
+ last = this.earlyOpEmulate = new datasource_toolkit_1.DataSourceDecorator(last, datasource_toolkit_1.OperatorsEmulateCollectionDecorator);
15
+ last = this.earlyOpReplace = new datasource_toolkit_1.DataSourceDecorator(last, datasource_toolkit_1.OperatorsReplaceCollectionDecorator);
16
+ last = this.relation = new datasource_toolkit_1.DataSourceDecorator(last, datasource_toolkit_1.RelationCollectionDecorator);
17
+ last = this.lateComputed = new datasource_toolkit_1.DataSourceDecorator(last, datasource_toolkit_1.ComputedCollectionDecorator);
18
+ last = this.lateOpEmulate = new datasource_toolkit_1.DataSourceDecorator(last, datasource_toolkit_1.OperatorsEmulateCollectionDecorator);
19
+ last = this.lateOpReplace = new datasource_toolkit_1.DataSourceDecorator(last, datasource_toolkit_1.OperatorsReplaceCollectionDecorator);
20
+ // Step 2: Those need access to all fields. They can be loaded in any order.
21
+ last = this.search = new datasource_toolkit_1.DataSourceDecorator(last, datasource_toolkit_1.SearchCollectionDecorator);
22
+ last = this.segment = new datasource_toolkit_1.DataSourceDecorator(last, datasource_toolkit_1.SegmentCollectionDecorator);
23
+ last = this.sortEmulate = new datasource_toolkit_1.DataSourceDecorator(last, datasource_toolkit_1.SortEmulateCollectionDecorator);
24
+ last = this.write = new datasource_toolkit_1.DataSourceDecorator(last, datasource_toolkit_1.WriteCollectionDecorator);
25
+ // Step 3: Access to all fields AND emulated capabilities
26
+ last = this.chart = new datasource_toolkit_1.ChartDataSourceDecorator(last);
27
+ last = this.action = new datasource_toolkit_1.DataSourceDecorator(last, datasource_toolkit_1.ActionCollectionDecorator);
28
+ last = this.schema = new datasource_toolkit_1.DataSourceDecorator(last, datasource_toolkit_1.SchemaCollectionDecorator);
29
+ last = this.hook = new datasource_toolkit_1.DataSourceDecorator(last, datasource_toolkit_1.HookCollectionDecorator);
30
+ // Step 4: Renaming must be either the very first or very last so that naming in customer code
31
+ // is consistent.
32
+ last = this.publication = new datasource_toolkit_1.DataSourceDecorator(last, datasource_toolkit_1.PublicationCollectionDecorator);
33
+ last = this.renameField = new datasource_toolkit_1.DataSourceDecorator(last, datasource_toolkit_1.RenameFieldCollectionDecorator);
34
+ /* eslint-enable no-multi-assign */
35
+ this.dataSource = last;
36
+ }
37
+ }
38
+ exports.default = DecoratorsStack;
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy1zdGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9idWlsZGVyL2RlY29yYXRvcnMtc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx3RUFrQnlDO0FBRXpDLE1BQXFCLGVBQWU7SUFxQmxDLFlBQVksVUFBc0I7UUFDaEMsSUFBSSxJQUFJLEdBQWUsVUFBVSxDQUFDO1FBRWxDLG9DQUFvQztRQUNwQyxtRkFBbUY7UUFDbkYsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSx3Q0FBbUIsQ0FBQyxJQUFJLEVBQUUsNkNBQXdCLENBQUMsQ0FBQztRQUU1RSw2RkFBNkY7UUFDN0Ysc0VBQXNFO1FBQ3RFLDJGQUEyRjtRQUMzRixJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLHdDQUFtQixDQUFDLElBQUksRUFBRSxnREFBMkIsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksd0NBQW1CLENBQUMsSUFBSSxFQUFFLHdEQUFtQyxDQUFDLENBQUM7UUFDaEcsSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSx3Q0FBbUIsQ0FBQyxJQUFJLEVBQUUsd0RBQW1DLENBQUMsQ0FBQztRQUNoRyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLHdDQUFtQixDQUFDLElBQUksRUFBRSxnREFBMkIsQ0FBQyxDQUFDO1FBQ2xGLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksd0NBQW1CLENBQUMsSUFBSSxFQUFFLGdEQUEyQixDQUFDLENBQUM7UUFDdEYsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSx3Q0FBbUIsQ0FBQyxJQUFJLEVBQUUsd0RBQW1DLENBQUMsQ0FBQztRQUMvRixJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLHdDQUFtQixDQUFDLElBQUksRUFBRSx3REFBbUMsQ0FBQyxDQUFDO1FBRS9GLDRFQUE0RTtRQUM1RSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLHdDQUFtQixDQUFDLElBQUksRUFBRSw4Q0FBeUIsQ0FBQyxDQUFDO1FBQzlFLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksd0NBQW1CLENBQUMsSUFBSSxFQUFFLCtDQUEwQixDQUFDLENBQUM7UUFDaEYsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSx3Q0FBbUIsQ0FBQyxJQUFJLEVBQUUsbURBQThCLENBQUMsQ0FBQztRQUN4RixJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLHdDQUFtQixDQUFDLElBQUksRUFBRSw2Q0FBd0IsQ0FBQyxDQUFDO1FBRTVFLHlEQUF5RDtRQUN6RCxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLDZDQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZELElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksd0NBQW1CLENBQUMsSUFBSSxFQUFFLDhDQUF5QixDQUFDLENBQUM7UUFDOUUsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSx3Q0FBbUIsQ0FBQyxJQUFJLEVBQUUsOENBQXlCLENBQUMsQ0FBQztRQUM5RSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLHdDQUFtQixDQUFDLElBQUksRUFBRSw0Q0FBdUIsQ0FBQyxDQUFDO1FBRTFFLDhGQUE4RjtRQUM5RixpQkFBaUI7UUFDakIsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSx3Q0FBbUIsQ0FBQyxJQUFJLEVBQUUsbURBQThCLENBQUMsQ0FBQztRQUN4RixJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLHdDQUFtQixDQUFDLElBQUksRUFBRSxtREFBOEIsQ0FBQyxDQUFDO1FBQ3hGLG1DQUFtQztRQUVuQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztJQUN6QixDQUFDO0NBQ0Y7QUEzREQsa0NBMkRDIn0=
@@ -1,5 +1,18 @@
1
- import { ComputedDefinition } from '@forestadmin/datasource-toolkit';
2
- export declare type FieldDefinition = ComputedDefinition & {
1
+ /// <reference types="node" />
2
+ import { CollectionCustomizationContext, ComputedDefinition, PrimitiveTypes, TCollectionName, TFieldName, TRow, TSchema } from '@forestadmin/datasource-toolkit';
3
+ import { IncomingMessage, ServerResponse } from 'http';
4
+ export declare type FieldDefinition<S extends TSchema = TSchema, N extends TCollectionName<S> = TCollectionName<S>> = ComputedDefinition<S, N> & {
3
5
  beforeRelations?: boolean;
4
6
  };
7
+ export declare type OneToManyEmbeddedDefinition<S extends TSchema = TSchema, N extends TCollectionName<S> = TCollectionName<S>> = {
8
+ schema: Record<string, PrimitiveTypes>;
9
+ dependencies?: TFieldName<S, N>[];
10
+ listRecords(records: TRow<S, N>, context: CollectionCustomizationContext<S, N>): Promise<unknown[]> | unknown[];
11
+ };
12
+ export declare type HttpCallback = (req: IncomingMessage, res: ServerResponse) => void;
13
+ export declare type DataSourceOptions = {
14
+ rename?: {
15
+ [oldName: string]: string;
16
+ };
17
+ };
5
18
  //# sourceMappingURL=types.d.ts.map
@@ -1,13 +1,13 @@
1
1
  import { AgentOptions } from '../../types';
2
- import { AgentOptionsWithDefaults } from '../types';
3
- export default class OptionsUtils {
2
+ import { AgentOptionsWithDefaults } from '../../agent/types';
3
+ export default class OptionsValidator {
4
4
  private static loggerPrefix;
5
5
  static withDefaults(options: AgentOptions): AgentOptionsWithDefaults;
6
- static validate(options: AgentOptionsWithDefaults): void;
6
+ static validate(options: AgentOptions): AgentOptionsWithDefaults;
7
7
  private static checkForestServerOptions;
8
8
  private static checkAuthOptions;
9
9
  private static checkOtherOptions;
10
10
  private static isExistingPath;
11
11
  private static isUrl;
12
12
  }
13
- //# sourceMappingURL=http-driver-options.d.ts.map
13
+ //# sourceMappingURL=options-validator.d.ts.map