@forestadmin/datasource-customizer 1.12.1 → 1.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/collection-customizer.d.ts +1 -1
- package/dist/collection-customizer.js +1 -1
- package/dist/context/relaxed-wrappers/collection.d.ts +1 -0
- package/dist/context/relaxed-wrappers/collection.js +5 -1
- package/dist/datasource-customizer.d.ts +7 -0
- package/dist/datasource-customizer.js +14 -2
- package/dist/decorators/composite-datasource.d.ts +6 -7
- package/dist/decorators/composite-datasource.js +34 -22
- package/dist/decorators/decorators-stack.d.ts +4 -4
- package/dist/decorators/decorators-stack.js +19 -19
- package/dist/decorators/publication/collection.d.ts +14 -0
- package/dist/decorators/publication/collection.js +72 -0
- package/dist/decorators/publication/datasource.d.ts +13 -0
- package/dist/decorators/publication/datasource.js +51 -0
- package/dist/decorators/rename-collection/collection.d.ts +5 -2
- package/dist/decorators/rename-collection/collection.js +12 -25
- package/dist/decorators/rename-collection/datasource.d.ts +16 -2
- package/dist/decorators/rename-collection/datasource.js +50 -12
- package/package.json +2 -2
- package/dist/decorators/publication-collection/datasource.d.ts +0 -8
- package/dist/decorators/publication-collection/datasource.js +0 -43
- package/dist/decorators/publication-field/collection.d.ts +0 -12
- package/dist/decorators/publication-field/collection.js +0 -60
|
@@ -59,7 +59,7 @@ export default class CollectionCustomizer<S extends TSchema = TSchema, N extends
|
|
|
59
59
|
*/
|
|
60
60
|
renameField(oldName: TColumnName<S, N>, newName: string): this;
|
|
61
61
|
/**
|
|
62
|
-
* Remove
|
|
62
|
+
* Remove fields from the exported schema (they will still be usable within the agent).
|
|
63
63
|
* @param names the fields to remove
|
|
64
64
|
* @see {@link https://docs.forestadmin.com/developer-guide-agents-nodejs/agent-customization/fields/import-rename-delete#renaming-and-removing-fields Documentation Link}
|
|
65
65
|
* @example
|
|
@@ -67,7 +67,7 @@ class CollectionCustomizer {
|
|
|
67
67
|
});
|
|
68
68
|
}
|
|
69
69
|
/**
|
|
70
|
-
* Remove
|
|
70
|
+
* Remove fields from the exported schema (they will still be usable within the agent).
|
|
71
71
|
* @param names the fields to remove
|
|
72
72
|
* @see {@link https://docs.forestadmin.com/developer-guide-agents-nodejs/agent-customization/fields/import-rename-delete#renaming-and-removing-fields Documentation Link}
|
|
73
73
|
* @example
|
|
@@ -4,6 +4,7 @@ import { TAggregateResult, TAggregation, TCollectionName, TFieldName, TFilter, T
|
|
|
4
4
|
export default class RelaxedCollection<S extends TSchema = TSchema, N extends TCollectionName<S> = TCollectionName<S>> {
|
|
5
5
|
private collection;
|
|
6
6
|
private caller;
|
|
7
|
+
get nativeDriver(): any;
|
|
7
8
|
get schema(): CollectionSchema;
|
|
8
9
|
constructor(collection: Collection, caller: Caller);
|
|
9
10
|
/**
|
|
@@ -3,6 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const datasource_toolkit_1 = require("@forestadmin/datasource-toolkit");
|
|
4
4
|
/** Collection wrapper which accepts plain objects in all methods */
|
|
5
5
|
class RelaxedCollection {
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
7
|
+
get nativeDriver() {
|
|
8
|
+
return this.collection.nativeDriver;
|
|
9
|
+
}
|
|
6
10
|
get schema() {
|
|
7
11
|
return this.collection.schema;
|
|
8
12
|
}
|
|
@@ -162,4 +166,4 @@ class RelaxedCollection {
|
|
|
162
166
|
}
|
|
163
167
|
}
|
|
164
168
|
exports.default = RelaxedCollection;
|
|
165
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0L3JlbGF4ZWQtd3JhcHBlcnMvY29sbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHdFQWV5QztBQWN6QyxvRUFBb0U7QUFDcEUsTUFBcUIsaUJBQWlCO0lBT3BDLDhEQUE4RDtJQUM5RCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxZQUFZLFVBQXNCLEVBQUUsTUFBYztRQUNoRCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7O09BaUJHO0lBQ0gsT0FBTyxDQUFDLElBQVksRUFBRSxVQUFzQixFQUFFLE1BQXNCO1FBQ2xFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFaEQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUVELE9BQU8sQ0FBQyxJQUFZLEVBQUUsVUFBdUIsRUFBRSxNQUFzQjtRQUNuRSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWhELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNI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
|
|
@@ -58,6 +58,13 @@ export default class DataSourceCustomizer<S extends TSchema = TSchema> {
|
|
|
58
58
|
* @param name name of the collection
|
|
59
59
|
*/
|
|
60
60
|
getCollection<N extends TCollectionName<S>>(name: N): CollectionCustomizer<S, N>;
|
|
61
|
+
/**
|
|
62
|
+
* Remove collections from the exported schema (they will still be usable within the agent).
|
|
63
|
+
* @param names the collections to remove
|
|
64
|
+
* @example
|
|
65
|
+
* .removeField('aCollectionToRemove', 'anotherCollectionToRemove');
|
|
66
|
+
*/
|
|
67
|
+
removeCollection(...names: TCollectionName<S>[]): this;
|
|
61
68
|
/**
|
|
62
69
|
* Load a plugin across all collections
|
|
63
70
|
* @param plugin instance of the plugin
|
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const collection_customizer_1 = __importDefault(require("./collection-customizer"));
|
|
7
7
|
const composite_datasource_1 = __importDefault(require("./decorators/composite-datasource"));
|
|
8
8
|
const decorators_stack_1 = __importDefault(require("./decorators/decorators-stack"));
|
|
9
|
-
const datasource_1 = __importDefault(require("./decorators/publication
|
|
9
|
+
const datasource_1 = __importDefault(require("./decorators/publication/datasource"));
|
|
10
10
|
const datasource_2 = __importDefault(require("./decorators/rename-collection/datasource"));
|
|
11
11
|
const typing_generator_1 = __importDefault(require("./typing-generator"));
|
|
12
12
|
/**
|
|
@@ -95,6 +95,18 @@ class DataSourceCustomizer {
|
|
|
95
95
|
getCollection(name) {
|
|
96
96
|
return new collection_customizer_1.default(this, this.stack, name);
|
|
97
97
|
}
|
|
98
|
+
/**
|
|
99
|
+
* Remove collections from the exported schema (they will still be usable within the agent).
|
|
100
|
+
* @param names the collections to remove
|
|
101
|
+
* @example
|
|
102
|
+
* .removeField('aCollectionToRemove', 'anotherCollectionToRemove');
|
|
103
|
+
*/
|
|
104
|
+
removeCollection(...names) {
|
|
105
|
+
this.stack.queueCustomization(async () => {
|
|
106
|
+
this.stack.publication.keepCollectionsMatching(undefined, names);
|
|
107
|
+
});
|
|
108
|
+
return this;
|
|
109
|
+
}
|
|
98
110
|
/**
|
|
99
111
|
* Load a plugin across all collections
|
|
100
112
|
* @param plugin instance of the plugin
|
|
@@ -122,4 +134,4 @@ class DataSourceCustomizer {
|
|
|
122
134
|
}
|
|
123
135
|
}
|
|
124
136
|
exports.default = DataSourceCustomizer;
|
|
125
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXNvdXJjZS1jdXN0b21pemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2RhdGFzb3VyY2UtY3VzdG9taXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQVFBLG9GQUEyRDtBQUUzRCw2RkFBb0U7QUFDcEUscUZBQTREO0FBQzVELHFGQUFpRjtBQUNqRiwyRkFBNEY7QUFHNUYsMEVBQWlEO0FBRWpEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQXFCLG9CQUFvQjtJQUl2Qzs7T0FFRztJQUNILElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUMvQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUEwQixDQUFDLENBQ2pELENBQUM7SUFDSixDQUFDO0lBRUQ7UUFDRSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSw4QkFBbUIsRUFBYyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSwwQkFBZSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsYUFBYSxDQUFDLE9BQTBCLEVBQUUsT0FBMkI7UUFDbkUsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUMsTUFBTSxFQUFDLEVBQUU7WUFDM0MsSUFBSSxVQUFVLEdBQUcsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFdkMsSUFBSSxPQUFPLEVBQUUsT0FBTyxJQUFJLE9BQU8sRUFBRSxPQUFPLEVBQUU7Z0JBQ3hDLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxvQkFBOEIsQ0FBQyxVQUFVLENB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
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export default class CompositeDatasource<T extends Collection = Collection>
|
|
3
|
-
private
|
|
4
|
-
constructor();
|
|
5
|
-
addDataSource(dataSource: DataSource): CompositeDatasource;
|
|
1
|
+
import { Caller, Chart, Collection, DataSource, DataSourceSchema } from '@forestadmin/datasource-toolkit';
|
|
2
|
+
export default class CompositeDatasource<T extends Collection = Collection> implements DataSource<T> {
|
|
3
|
+
private dataSources;
|
|
6
4
|
get schema(): DataSourceSchema;
|
|
5
|
+
get collections(): T[];
|
|
6
|
+
getCollection(name: string): T;
|
|
7
|
+
addDataSource(dataSource: DataSource): void;
|
|
7
8
|
renderChart(caller: Caller, name: string): Promise<Chart>;
|
|
8
|
-
private addCollections;
|
|
9
|
-
private addCharts;
|
|
10
9
|
}
|
|
11
10
|
//# sourceMappingURL=composite-datasource.d.ts.map
|
|
@@ -1,38 +1,50 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
4
|
-
class CompositeDatasource extends datasource_toolkit_1.BaseDataSource {
|
|
3
|
+
class CompositeDatasource {
|
|
5
4
|
constructor() {
|
|
6
|
-
|
|
7
|
-
this.datasourceChartMapping = {};
|
|
8
|
-
}
|
|
9
|
-
addDataSource(dataSource) {
|
|
10
|
-
this.addCollections(dataSource);
|
|
11
|
-
this.addCharts(dataSource);
|
|
12
|
-
return this;
|
|
5
|
+
this.dataSources = [];
|
|
13
6
|
}
|
|
14
7
|
get schema() {
|
|
15
|
-
return { charts:
|
|
8
|
+
return { charts: this.dataSources.flatMap(dataSource => dataSource.schema.charts) };
|
|
9
|
+
}
|
|
10
|
+
get collections() {
|
|
11
|
+
return this.dataSources.flatMap(dataSource => dataSource.collections);
|
|
16
12
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
13
|
+
getCollection(name) {
|
|
14
|
+
for (const collection of this.dataSources) {
|
|
15
|
+
try {
|
|
16
|
+
return collection.getCollection(name);
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
// Ignore
|
|
20
|
+
}
|
|
20
21
|
}
|
|
21
|
-
|
|
22
|
+
throw new Error(`Collection '${name}' not found. List of available collections: ${this.collections
|
|
23
|
+
.map(c => c.name)
|
|
24
|
+
.sort()
|
|
25
|
+
.join(', ')}`);
|
|
22
26
|
}
|
|
23
|
-
|
|
27
|
+
addDataSource(dataSource) {
|
|
24
28
|
for (const collection of dataSource.collections) {
|
|
25
|
-
this.
|
|
29
|
+
if (this.collections.some(c => c.name === collection.name)) {
|
|
30
|
+
throw new Error(`Collection '${collection.name}' already exists`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
for (const chart of dataSource.schema.charts) {
|
|
34
|
+
if (this.schema.charts.includes(chart)) {
|
|
35
|
+
throw new Error(`Chart '${chart}' is already defined in datasource.`);
|
|
36
|
+
}
|
|
26
37
|
}
|
|
38
|
+
this.dataSources.push(dataSource);
|
|
27
39
|
}
|
|
28
|
-
|
|
29
|
-
for (const
|
|
30
|
-
if (
|
|
31
|
-
|
|
40
|
+
async renderChart(caller, name) {
|
|
41
|
+
for (const dataSource of this.dataSources) {
|
|
42
|
+
if (dataSource.schema.charts.includes(name)) {
|
|
43
|
+
return dataSource.renderChart(caller, name);
|
|
32
44
|
}
|
|
33
|
-
this.datasourceChartMapping[chartName] = dataSource;
|
|
34
45
|
}
|
|
46
|
+
throw new Error(`Chart '${name}' is not defined in the dataSource.`);
|
|
35
47
|
}
|
|
36
48
|
}
|
|
37
49
|
exports.default = CompositeDatasource;
|
|
38
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9zaXRlLWRhdGFzb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGVjb3JhdG9ycy9jb21wb3NpdGUtZGF0YXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVFBLE1BQXFCLG1CQUFtQjtJQUF4QztRQUdVLGdCQUFXLEdBQWlCLEVBQUUsQ0FBQztJQW9EekMsQ0FBQztJQWxEQyxJQUFJLE1BQU07UUFDUixPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0lBQ3RGLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBUSxDQUFDO0lBQy9FLENBQUM7SUFFRCxhQUFhLENBQUMsSUFBWTtRQUN4QixLQUFLLE1BQU0sVUFBVSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDekMsSUFBSTtnQkFDRixPQUFPLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFNLENBQUM7YUFDNUM7WUFBQyxPQUFPLEtBQUssRUFBRTtnQkFDZCxTQUFTO2FBQ1Y7U0FDRjtRQUVELE1BQU0sSUFBSSxLQUFLLENBQ2IsZUFBZSxJQUFJLCtDQUErQyxJQUFJLENBQUMsV0FBVzthQUMvRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2FBQ2hCLElBQUksRUFBRTthQUNOLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUNoQixDQUFDO0lBQ0osQ0FBQztJQUVELGFBQWEsQ0FBQyxVQUFzQjtRQUNsQyxLQUFLLE1BQU0sVUFBVSxJQUFJLFVBQVUsQ0FBQyxXQUFXLEVBQUU7WUFDL0MsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMxRCxNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsVUFBVSxDQUFDLElBQUksa0JBQWtCLENBQUMsQ0FBQzthQUNuRTtTQUNGO1FBRUQsS0FBSyxNQUFNLEtBQUssSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtZQUM1QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUsscUNBQXFDLENBQUMsQ0FBQzthQUN2RTtTQUNGO1FBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBYyxFQUFFLElBQVk7UUFDNUMsS0FBSyxNQUFNLFVBQVUsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3pDLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMzQyxPQUFPLFVBQVUsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQzdDO1NBQ0Y7UUFFRCxNQUFNLElBQUksS0FBSyxDQUFDLFVBQVUsSUFBSSxxQ0FBcUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7Q0FDRjtBQXZERCxzQ0F1REMifQ==
|
|
@@ -5,7 +5,7 @@ import ChartDataSourceDecorator from './chart/datasource';
|
|
|
5
5
|
import ComputedCollectionDecorator from './computed/collection';
|
|
6
6
|
import HookCollectionDecorator from './hook/collection';
|
|
7
7
|
import OperatorsEmulateCollectionDecorator from './operators-emulate/collection';
|
|
8
|
-
import
|
|
8
|
+
import PublicationDataSourceDecorator from './publication/datasource';
|
|
9
9
|
import RelationCollectionDecorator from './relation/collection';
|
|
10
10
|
import RenameFieldCollectionDecorator from './rename-field/collection';
|
|
11
11
|
import SchemaCollectionDecorator from './schema/collection';
|
|
@@ -20,10 +20,11 @@ export default class DecoratorsStack {
|
|
|
20
20
|
chart: ChartDataSourceDecorator;
|
|
21
21
|
earlyComputed: DataSourceDecorator<ComputedCollectionDecorator>;
|
|
22
22
|
earlyOpEmulate: DataSourceDecorator<OperatorsEmulateCollectionDecorator>;
|
|
23
|
-
|
|
23
|
+
hook: DataSourceDecorator<HookCollectionDecorator>;
|
|
24
24
|
lateComputed: DataSourceDecorator<ComputedCollectionDecorator>;
|
|
25
25
|
lateOpEmulate: DataSourceDecorator<OperatorsEmulateCollectionDecorator>;
|
|
26
|
-
publication:
|
|
26
|
+
publication: PublicationDataSourceDecorator;
|
|
27
|
+
relation: DataSourceDecorator<RelationCollectionDecorator>;
|
|
27
28
|
renameField: DataSourceDecorator<RenameFieldCollectionDecorator>;
|
|
28
29
|
schema: DataSourceDecorator<SchemaCollectionDecorator>;
|
|
29
30
|
search: DataSourceDecorator<SearchCollectionDecorator>;
|
|
@@ -31,7 +32,6 @@ export default class DecoratorsStack {
|
|
|
31
32
|
sortEmulate: DataSourceDecorator<SortEmulateCollectionDecorator>;
|
|
32
33
|
validation: DataSourceDecorator<ValidationCollectionDecorator>;
|
|
33
34
|
write: WriteDataSourceDecorator;
|
|
34
|
-
hook: DataSourceDecorator<HookCollectionDecorator>;
|
|
35
35
|
dataSource: DataSource;
|
|
36
36
|
private customizations;
|
|
37
37
|
constructor(dataSource: DataSource);
|
|
@@ -12,15 +12,15 @@ const collection_4 = __importDefault(require("./empty/collection"));
|
|
|
12
12
|
const collection_5 = __importDefault(require("./hook/collection"));
|
|
13
13
|
const collection_6 = __importDefault(require("./operators-emulate/collection"));
|
|
14
14
|
const collection_7 = __importDefault(require("./operators-equivalence/collection"));
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
const
|
|
21
|
-
const
|
|
22
|
-
const
|
|
23
|
-
const
|
|
15
|
+
const datasource_2 = __importDefault(require("./publication/datasource"));
|
|
16
|
+
const collection_8 = __importDefault(require("./relation/collection"));
|
|
17
|
+
const collection_9 = __importDefault(require("./rename-field/collection"));
|
|
18
|
+
const collection_10 = __importDefault(require("./schema/collection"));
|
|
19
|
+
const collection_11 = __importDefault(require("./search/collection"));
|
|
20
|
+
const collection_12 = __importDefault(require("./segment/collection"));
|
|
21
|
+
const collection_13 = __importDefault(require("./sort-emulate/collection"));
|
|
22
|
+
const collection_14 = __importDefault(require("./validation/collection"));
|
|
23
|
+
const datasource_3 = __importDefault(require("./write/datasource"));
|
|
24
24
|
class DecoratorsStack {
|
|
25
25
|
constructor(dataSource) {
|
|
26
26
|
this.customizations = [];
|
|
@@ -35,26 +35,26 @@ class DecoratorsStack {
|
|
|
35
35
|
last = this.earlyComputed = new datasource_toolkit_1.DataSourceDecorator(last, collection_3.default);
|
|
36
36
|
last = this.earlyOpEmulate = new datasource_toolkit_1.DataSourceDecorator(last, collection_6.default);
|
|
37
37
|
last = new datasource_toolkit_1.DataSourceDecorator(last, collection_7.default);
|
|
38
|
-
last = this.relation = new datasource_toolkit_1.DataSourceDecorator(last,
|
|
38
|
+
last = this.relation = new datasource_toolkit_1.DataSourceDecorator(last, collection_8.default);
|
|
39
39
|
last = this.lateComputed = new datasource_toolkit_1.DataSourceDecorator(last, collection_3.default);
|
|
40
40
|
last = this.lateOpEmulate = new datasource_toolkit_1.DataSourceDecorator(last, collection_6.default);
|
|
41
41
|
last = new datasource_toolkit_1.DataSourceDecorator(last, collection_7.default);
|
|
42
42
|
// Step 2: Those need access to all fields. They can be loaded in any order.
|
|
43
|
-
last = this.search = new datasource_toolkit_1.DataSourceDecorator(last,
|
|
44
|
-
last = this.segment = new datasource_toolkit_1.DataSourceDecorator(last,
|
|
45
|
-
last = this.sortEmulate = new datasource_toolkit_1.DataSourceDecorator(last,
|
|
43
|
+
last = this.search = new datasource_toolkit_1.DataSourceDecorator(last, collection_11.default);
|
|
44
|
+
last = this.segment = new datasource_toolkit_1.DataSourceDecorator(last, collection_12.default);
|
|
45
|
+
last = this.sortEmulate = new datasource_toolkit_1.DataSourceDecorator(last, collection_13.default);
|
|
46
46
|
// Step 3: Access to all fields AND emulated capabilities
|
|
47
47
|
last = this.chart = new datasource_1.default(last);
|
|
48
48
|
last = this.action = new datasource_toolkit_1.DataSourceDecorator(last, collection_1.default);
|
|
49
|
-
last = this.schema = new datasource_toolkit_1.DataSourceDecorator(last,
|
|
50
|
-
last = this.write = new
|
|
49
|
+
last = this.schema = new datasource_toolkit_1.DataSourceDecorator(last, collection_10.default);
|
|
50
|
+
last = this.write = new datasource_3.default(last);
|
|
51
51
|
last = this.hook = new datasource_toolkit_1.DataSourceDecorator(last, collection_5.default);
|
|
52
|
-
last = this.validation = new datasource_toolkit_1.DataSourceDecorator(last,
|
|
52
|
+
last = this.validation = new datasource_toolkit_1.DataSourceDecorator(last, collection_14.default);
|
|
53
53
|
last = this.binary = new datasource_toolkit_1.DataSourceDecorator(last, collection_2.default);
|
|
54
54
|
// Step 4: Renaming must be either the very first or very last so that naming in customer code
|
|
55
55
|
// is consistent.
|
|
56
|
-
last = this.publication = new
|
|
57
|
-
last = this.renameField = new datasource_toolkit_1.DataSourceDecorator(last,
|
|
56
|
+
last = this.publication = new datasource_2.default(last);
|
|
57
|
+
last = this.renameField = new datasource_toolkit_1.DataSourceDecorator(last, collection_9.default);
|
|
58
58
|
/* eslint-enable no-multi-assign */
|
|
59
59
|
this.dataSource = last;
|
|
60
60
|
}
|
|
@@ -78,4 +78,4 @@ class DecoratorsStack {
|
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
80
|
exports.default = DecoratorsStack;
|
|
81
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy1zdGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZWNvcmF0b3JzL2RlY29yYXRvcnMtc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx3RUFBMEY7QUFFMUYsc0VBQTZEO0FBQzdELHFFQUE0RDtBQUM1RCxvRUFBMEQ7QUFDMUQsdUVBQWdFO0FBQ2hFLG9FQUEwRDtBQUMxRCxtRUFBd0Q7QUFDeEQsZ0ZBQWlGO0FBQ2pGLG9GQUF5RjtBQUN6RiwwRUFBc0U7QUFDdEUsdUVBQWdFO0FBQ2hFLDJFQUF1RTtBQUN2RSxzRUFBNEQ7QUFDNUQsc0VBQTREO0FBQzVELHVFQUE4RDtBQUM5RCw0RUFBdUU7QUFDdkUsMEVBQW9FO0FBQ3BFLG9FQUEwRDtBQUUxRCxNQUFxQixlQUFlO0lBc0JsQyxZQUFZLFVBQXNCO1FBRjFCLG1CQUFjLEdBQTZDLEVBQUUsQ0FBQztRQUdwRSxJQUFJLElBQUksR0FBZSxVQUFVLENBQUM7UUFFbEMsb0NBQW9DO1FBQ3BDLG1GQUFtRjtRQUNuRixJQUFJLEdBQUcsSUFBSSx3Q0FBbUIsQ0FBQyxJQUFJLEVBQUUsb0JBQXdCLENBQUMsQ0FBQztRQUMvRCxJQUFJLEdBQUcsSUFBSSx3Q0FBbUIsQ0FBQyxJQUFJLEVBQUUsb0JBQXVDLENBQUMsQ0FBQztRQUU5RSw2RkFBNkY7UUFDN0Ysc0VBQXNFO1FBQ3RFLDJGQUEyRjtRQUMzRixJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLHdDQUFtQixDQUFDLElBQUksRUFBRSxvQkFBMkIsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksd0NBQW1CLENBQUMsSUFBSSxFQUFFLG9CQUFtQyxDQUFDLENBQUM7UUFDaEcsSUFBSSxHQUFHLElBQUksd0NBQW1CLENBQUMsSUFBSSxFQUFFLG9CQUF1QyxDQUFDLENBQUM7UUFDOUUsSUFBSSxHQUFHLElBQUksQ0FBQyxR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
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Caller, CollectionDecorator, CollectionSchema, RecordData } from '@forestadmin/datasource-toolkit';
|
|
2
|
+
import PublicationDataSourceDecorator from './datasource';
|
|
3
|
+
/** This decorator allows hiding fields */
|
|
4
|
+
export default class PublicationCollectionDecorator extends CollectionDecorator {
|
|
5
|
+
readonly dataSource: PublicationDataSourceDecorator;
|
|
6
|
+
private readonly blacklist;
|
|
7
|
+
/** Show/hide fields from the schema */
|
|
8
|
+
changeFieldVisibility(name: string, visible: boolean): void;
|
|
9
|
+
create(caller: Caller, data: RecordData[]): Promise<RecordData[]>;
|
|
10
|
+
protected refineSchema(childSchema: CollectionSchema): CollectionSchema;
|
|
11
|
+
private isPublished;
|
|
12
|
+
markSchemaAsDirty(): void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=collection.d.ts.map
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const datasource_toolkit_1 = require("@forestadmin/datasource-toolkit");
|
|
4
|
+
/** This decorator allows hiding fields */
|
|
5
|
+
class PublicationCollectionDecorator extends datasource_toolkit_1.CollectionDecorator {
|
|
6
|
+
constructor() {
|
|
7
|
+
super(...arguments);
|
|
8
|
+
this.blacklist = new Set();
|
|
9
|
+
}
|
|
10
|
+
/** Show/hide fields from the schema */
|
|
11
|
+
changeFieldVisibility(name, visible) {
|
|
12
|
+
const field = this.childCollection.schema.fields[name];
|
|
13
|
+
if (!field) {
|
|
14
|
+
throw new Error(`No such field '${name}'`);
|
|
15
|
+
}
|
|
16
|
+
if (datasource_toolkit_1.SchemaUtils.isPrimaryKey(this.childCollection.schema, name)) {
|
|
17
|
+
throw new Error(`Cannot hide primary key`);
|
|
18
|
+
}
|
|
19
|
+
if (!visible)
|
|
20
|
+
this.blacklist.add(name);
|
|
21
|
+
else
|
|
22
|
+
this.blacklist.delete(name);
|
|
23
|
+
this.markSchemaAsDirty();
|
|
24
|
+
}
|
|
25
|
+
async create(caller, data) {
|
|
26
|
+
const records = await super.create(caller, data);
|
|
27
|
+
return records.map(childRecord => {
|
|
28
|
+
const record = {};
|
|
29
|
+
for (const key of Object.keys(childRecord))
|
|
30
|
+
if (!this.blacklist.has(key))
|
|
31
|
+
record[key] = childRecord[key];
|
|
32
|
+
return record;
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
refineSchema(childSchema) {
|
|
36
|
+
const fields = {};
|
|
37
|
+
for (const [name, field] of Object.entries(childSchema.fields)) {
|
|
38
|
+
if (this.isPublished(name)) {
|
|
39
|
+
fields[name] = field;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return { ...childSchema, fields };
|
|
43
|
+
}
|
|
44
|
+
isPublished(name) {
|
|
45
|
+
// Explicitly hidden
|
|
46
|
+
if (this.blacklist.has(name))
|
|
47
|
+
return false;
|
|
48
|
+
// Implicitly hidden
|
|
49
|
+
const field = this.childCollection.schema.fields[name];
|
|
50
|
+
if (field.type === 'ManyToOne')
|
|
51
|
+
return (this.dataSource.isPublished(field.foreignCollection) &&
|
|
52
|
+
this.isPublished(field.foreignKey) &&
|
|
53
|
+
this.dataSource.getCollection(field.foreignCollection).isPublished(field.foreignKeyTarget));
|
|
54
|
+
if (field.type === 'OneToOne' || field.type === 'OneToMany')
|
|
55
|
+
return (this.dataSource.isPublished(field.foreignCollection) &&
|
|
56
|
+
this.dataSource.getCollection(field.foreignCollection).isPublished(field.originKey) &&
|
|
57
|
+
this.isPublished(field.originKeyTarget));
|
|
58
|
+
if (field.type === 'ManyToMany')
|
|
59
|
+
return (this.dataSource.isPublished(field.throughCollection) &&
|
|
60
|
+
this.dataSource.isPublished(field.foreignCollection) &&
|
|
61
|
+
this.dataSource.getCollection(field.throughCollection).isPublished(field.foreignKey) &&
|
|
62
|
+
this.dataSource.getCollection(field.throughCollection).isPublished(field.originKey) &&
|
|
63
|
+
this.isPublished(field.originKeyTarget) &&
|
|
64
|
+
this.dataSource.getCollection(field.foreignCollection).isPublished(field.foreignKeyTarget));
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
markSchemaAsDirty() {
|
|
68
|
+
return super.markSchemaAsDirty();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.default = PublicationCollectionDecorator;
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWNvcmF0b3JzL3B1YmxpY2F0aW9uL2NvbGxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx3RUFPeUM7QUFJekMsMENBQTBDO0FBQzFDLE1BQXFCLDhCQUErQixTQUFRLHdDQUFtQjtJQUEvRTs7UUFFbUIsY0FBUyxHQUFnQixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBZ0Z0RCxDQUFDO0lBOUVDLHVDQUF1QztJQUN2QyxxQkFBcUIsQ0FBQyxJQUFZLEVBQUUsT0FBZ0I7UUFDbEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXZELElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixJQUFJLEdBQUcsQ0FBQyxDQUFDO1NBQzVDO1FBRUQsSUFBSSxnQ0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRTtZQUMvRCxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7U0FDNUM7UUFFRCxJQUFJLENBQUMsT0FBTztZQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDOztZQUNsQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRVEsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFjLEVBQUUsSUFBa0I7UUFDdEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVqRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxD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
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { DataSource, DataSourceDecorator } from '@forestadmin/datasource-toolkit';
|
|
2
|
+
import PublicationCollectionDecorator from './collection';
|
|
3
|
+
export default class PublicationDataSourceDecorator extends DataSourceDecorator<PublicationCollectionDecorator> {
|
|
4
|
+
blacklist: Set<string>;
|
|
5
|
+
constructor(childDataSource: DataSource);
|
|
6
|
+
get collections(): PublicationCollectionDecorator[];
|
|
7
|
+
getCollection(name: string): PublicationCollectionDecorator;
|
|
8
|
+
keepCollectionsMatching(include?: string[], exclude?: string[]): void;
|
|
9
|
+
removeCollection(collectionName: string): void;
|
|
10
|
+
private validateCollectionNames;
|
|
11
|
+
isPublished(collectionName: string): boolean;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=datasource.d.ts.map
|
|
@@ -0,0 +1,51 @@
|
|
|
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 collection_1 = __importDefault(require("./collection"));
|
|
8
|
+
class PublicationDataSourceDecorator extends datasource_toolkit_1.DataSourceDecorator {
|
|
9
|
+
constructor(childDataSource) {
|
|
10
|
+
super(childDataSource, collection_1.default);
|
|
11
|
+
this.blacklist = new Set();
|
|
12
|
+
}
|
|
13
|
+
get collections() {
|
|
14
|
+
return this.childDataSource.collections
|
|
15
|
+
.filter(({ name }) => !this.blacklist.has(name))
|
|
16
|
+
.map(({ name }) => this.getCollection(name));
|
|
17
|
+
}
|
|
18
|
+
getCollection(name) {
|
|
19
|
+
if (this.blacklist.has(name))
|
|
20
|
+
throw new Error(`Collection "${name}" was removed.`);
|
|
21
|
+
return super.getCollection(name);
|
|
22
|
+
}
|
|
23
|
+
keepCollectionsMatching(include, exclude) {
|
|
24
|
+
this.validateCollectionNames([...(include ?? []), ...(exclude ?? [])]);
|
|
25
|
+
// List collection we're keeping from the white/black list.
|
|
26
|
+
for (const { name } of this.collections) {
|
|
27
|
+
if ((include && !include.includes(name)) || exclude?.includes(name)) {
|
|
28
|
+
this.removeCollection(name);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
removeCollection(collectionName) {
|
|
33
|
+
this.validateCollectionNames([collectionName]);
|
|
34
|
+
// Delete the collection
|
|
35
|
+
this.blacklist.add(collectionName);
|
|
36
|
+
// Tell all collections that their schema is dirty: if we removed a collection, all
|
|
37
|
+
// relations to this collection are now invalid and should be unpublished.
|
|
38
|
+
for (const collection of this.collections) {
|
|
39
|
+
collection.markSchemaAsDirty();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
validateCollectionNames(names) {
|
|
43
|
+
for (const name of names)
|
|
44
|
+
this.getCollection(name);
|
|
45
|
+
}
|
|
46
|
+
isPublished(collectionName) {
|
|
47
|
+
return !this.blacklist.has(collectionName);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.default = PublicationDataSourceDecorator;
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWNvcmF0b3JzL3B1YmxpY2F0aW9uL2RhdGFzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx3RUFBa0Y7QUFFbEYsOERBQTBEO0FBRTFELE1BQXFCLDhCQUErQixTQUFRLHdDQUFtRDtJQUc3RyxZQUFZLGVBQTJCO1FBQ3JDLEtBQUssQ0FBQyxlQUFlLEVBQUUsb0JBQThCLENBQUMsQ0FBQztRQUh6RCxjQUFTLEdBQWdCLElBQUksR0FBRyxFQUFFLENBQUM7SUFJbkMsQ0FBQztJQUVELElBQWEsV0FBVztRQUN0QixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVzthQUNwQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQy9DLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRVEsYUFBYSxDQUFDLElBQVk7UUFDakMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGVBQWUsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDO1FBRW5GLE9BQU8sS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsdUJBQXVCLENBQUMsT0FBa0IsRUFBRSxPQUFrQjtRQUM1RCxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXZFLDJEQUEyRDtRQUMzRCxLQUFLLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksT0FBTyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDbkUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzdCO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsY0FBc0I7UUFDckMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUUvQyx3QkFBd0I7UUFDeEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFbkMsbUZBQW1GO1FBQ25GLDBFQUEwRTtRQUMxRSxLQUFLLE1BQU0sVUFBVSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDekMsVUFBVSxDQUFDLGlCQUFpQixFQUFFLENBQUM7U0FDaEM7SUFDSCxDQUFDO0lBRU8sdUJBQXVCLENBQUMsS0FBZTtRQUM3QyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUs7WUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxXQUFXLENBQUMsY0FBc0I7UUFDaEMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7Q0FDRjtBQWxERCxpREFrREMifQ==
|
|
@@ -6,9 +6,12 @@ import CollectionRenameDataSourceDecorator from './datasource';
|
|
|
6
6
|
*/
|
|
7
7
|
export default class RenameCollectionCollectionDecorator extends CollectionDecorator {
|
|
8
8
|
readonly dataSource: CollectionRenameDataSourceDecorator;
|
|
9
|
-
private substitutedName;
|
|
10
9
|
get name(): string;
|
|
11
10
|
protected refineSchema(childSchema: CollectionSchema): CollectionSchema;
|
|
12
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Override visibility of the markSchemaAsDirty method so that we can call it
|
|
13
|
+
* from the datasource.
|
|
14
|
+
*/
|
|
15
|
+
markSchemaAsDirty(): void;
|
|
13
16
|
}
|
|
14
17
|
//# sourceMappingURL=collection.d.ts.map
|
|
@@ -6,42 +6,29 @@ const datasource_toolkit_1 = require("@forestadmin/datasource-toolkit");
|
|
|
6
6
|
* It should be used with RenameCollectionDataSourceDecorator, and not the raw DataSourceDecorator
|
|
7
7
|
*/
|
|
8
8
|
class RenameCollectionCollectionDecorator extends datasource_toolkit_1.CollectionDecorator {
|
|
9
|
-
constructor() {
|
|
10
|
-
super(...arguments);
|
|
11
|
-
this.substitutedName = null;
|
|
12
|
-
}
|
|
13
9
|
get name() {
|
|
14
|
-
return this.
|
|
15
|
-
}
|
|
16
|
-
/** @internal */
|
|
17
|
-
rename(name) {
|
|
18
|
-
this.substitutedName = name;
|
|
19
|
-
// Invalidate all schemas
|
|
20
|
-
for (const collection of this.dataSource.collections) {
|
|
21
|
-
collection.markSchemaAsDirty();
|
|
22
|
-
}
|
|
10
|
+
return this.dataSource.getCollectionName(super.name);
|
|
23
11
|
}
|
|
24
12
|
refineSchema(childSchema) {
|
|
25
13
|
const fields = {};
|
|
26
14
|
for (const [name, oldSchema] of Object.entries(childSchema.fields)) {
|
|
27
15
|
const schema = { ...oldSchema };
|
|
28
|
-
if (schema.type
|
|
29
|
-
schema.foreignCollection = this.
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
schema.foreignCollection = this.getNewName(schema.foreignCollection);
|
|
33
|
-
}
|
|
34
|
-
else if (schema.type === 'ManyToMany') {
|
|
35
|
-
schema.throughCollection = this.getNewName(schema.throughCollection);
|
|
36
|
-
schema.foreignCollection = this.getNewName(schema.foreignCollection);
|
|
16
|
+
if (schema.type !== 'Column') {
|
|
17
|
+
schema.foreignCollection = this.dataSource.getCollectionName(schema.foreignCollection);
|
|
18
|
+
if (schema.type === 'ManyToMany')
|
|
19
|
+
schema.throughCollection = this.dataSource.getCollectionName(schema.throughCollection);
|
|
37
20
|
}
|
|
38
21
|
fields[name] = schema;
|
|
39
22
|
}
|
|
40
23
|
return { ...childSchema, fields };
|
|
41
24
|
}
|
|
42
|
-
|
|
43
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Override visibility of the markSchemaAsDirty method so that we can call it
|
|
27
|
+
* from the datasource.
|
|
28
|
+
*/
|
|
29
|
+
markSchemaAsDirty() {
|
|
30
|
+
return super.markSchemaAsDirty();
|
|
44
31
|
}
|
|
45
32
|
}
|
|
46
33
|
exports.default = RenameCollectionCollectionDecorator;
|
|
47
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWNvcmF0b3JzL3JlbmFtZS1jb2xsZWN0aW9uL2NvbGxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx3RUFJeUM7QUFJekM7OztHQUdHO0FBQ0gsTUFBcUIsbUNBQW9DLFNBQVEsd0NBQW1CO0lBR2xGLElBQWEsSUFBSTtRQUNmLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVrQixZQUFZLENBQUMsV0FBNkI7UUFDM0QsTUFBTSxNQUFNLEdBQWdDLEVBQUUsQ0FBQztRQUUvQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDbEUsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLFNBQVMsRUFBRSxDQUFDO1lBRWhDLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7Z0JBQzVCLE1BQU0sQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUN2RixJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssWUFBWTtvQkFDOUIsTUFBTSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7YUFDMUY7WUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO1NBQ3ZCO1FBRUQsT0FBTyxFQUFFLEdBQUcsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7O09BR0c7SUFDYSxpQkFBaUI7UUFDL0IsT0FBTyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0NBQ0Y7QUFoQ0Qsc0RBZ0NDIn0=
|
|
@@ -1,10 +1,24 @@
|
|
|
1
1
|
import { DataSource, DataSourceDecorator } from '@forestadmin/datasource-toolkit';
|
|
2
2
|
import RenameCollectionCollectionDecorator from './collection';
|
|
3
3
|
export default class RenameCollectionDataSourceDecorator extends DataSourceDecorator<RenameCollectionCollectionDecorator> {
|
|
4
|
+
private fromChildName;
|
|
5
|
+
private toChildName;
|
|
4
6
|
constructor(childDataSource: DataSource);
|
|
5
|
-
|
|
6
|
-
|
|
7
|
+
get collections(): RenameCollectionCollectionDecorator[];
|
|
8
|
+
getCollection(name: string): RenameCollectionCollectionDecorator;
|
|
9
|
+
/**
|
|
10
|
+
* Helper to rename multiple collections at once.
|
|
11
|
+
* Used by the addDataSource method in DataSourceCustomizer.
|
|
12
|
+
*/
|
|
13
|
+
renameCollections(rename?: ((oldName: string) => string | null) | {
|
|
7
14
|
[oldName: string]: string;
|
|
8
15
|
}): void;
|
|
16
|
+
/**
|
|
17
|
+
* Rename a single collection
|
|
18
|
+
* Used by the renameCollection method in DataSourceCustomizer.
|
|
19
|
+
* @param currentName
|
|
20
|
+
* @param newName
|
|
21
|
+
*/
|
|
22
|
+
renameCollection(currentName: string, newName: string): void;
|
|
9
23
|
}
|
|
10
24
|
//# sourceMappingURL=datasource.d.ts.map
|
|
@@ -8,21 +8,28 @@ const collection_1 = __importDefault(require("./collection"));
|
|
|
8
8
|
class RenameCollectionDataSourceDecorator extends datasource_toolkit_1.DataSourceDecorator {
|
|
9
9
|
constructor(childDataSource) {
|
|
10
10
|
super(childDataSource, collection_1.default);
|
|
11
|
+
this.fromChildName = {};
|
|
12
|
+
this.toChildName = {};
|
|
11
13
|
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
14
|
+
get collections() {
|
|
15
|
+
return this.childDataSource.collections.map(({ name }) => super.getCollection(name));
|
|
16
|
+
}
|
|
17
|
+
getCollection(name) {
|
|
18
|
+
// Collection has been renamed, user is using the new name
|
|
19
|
+
if (this.toChildName[name]) {
|
|
20
|
+
return super.getCollection(this.toChildName[name]);
|
|
15
21
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
const collection = this._collections[oldName];
|
|
21
|
-
collection.rename(newName);
|
|
22
|
-
this._collections[newName] = collection;
|
|
23
|
-
delete this._collections[oldName];
|
|
22
|
+
// Collection has been renamed, user is using the old name
|
|
23
|
+
if (this.fromChildName[name]) {
|
|
24
|
+
throw new Error(`Collection '${name}' has been renamed to '${this.fromChildName[name]}'`);
|
|
24
25
|
}
|
|
26
|
+
// Collection has not been renamed
|
|
27
|
+
return super.getCollection(name);
|
|
25
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Helper to rename multiple collections at once.
|
|
31
|
+
* Used by the addDataSource method in DataSourceCustomizer.
|
|
32
|
+
*/
|
|
26
33
|
renameCollections(rename) {
|
|
27
34
|
const tuples = typeof rename === 'function'
|
|
28
35
|
? this.collections.map(({ name }) => [name, rename(name) ?? name])
|
|
@@ -31,6 +38,37 @@ class RenameCollectionDataSourceDecorator extends datasource_toolkit_1.DataSourc
|
|
|
31
38
|
this.renameCollection(oldName, newName);
|
|
32
39
|
}
|
|
33
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Rename a single collection
|
|
43
|
+
* Used by the renameCollection method in DataSourceCustomizer.
|
|
44
|
+
* @param currentName
|
|
45
|
+
* @param newName
|
|
46
|
+
*/
|
|
47
|
+
renameCollection(currentName, newName) {
|
|
48
|
+
// Check collection exists
|
|
49
|
+
this.getCollection(currentName);
|
|
50
|
+
// Rename collection
|
|
51
|
+
if (currentName !== newName) {
|
|
52
|
+
// Check new name is not already used
|
|
53
|
+
if (this.collections.some(({ name }) => name === newName)) {
|
|
54
|
+
throw new Error(`The given new collection name "${newName}" is already defined`);
|
|
55
|
+
}
|
|
56
|
+
// Check we don't rename a collection twice
|
|
57
|
+
if (this.toChildName[currentName]) {
|
|
58
|
+
throw new Error(`Cannot rename a collection twice: ` +
|
|
59
|
+
`${this.toChildName[currentName]}->${currentName}->${newName}`);
|
|
60
|
+
}
|
|
61
|
+
this.fromChildName[currentName] = newName;
|
|
62
|
+
this.toChildName[newName] = currentName;
|
|
63
|
+
for (const collection of this.collections) {
|
|
64
|
+
collection.markSchemaAsDirty();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/** @internal */
|
|
69
|
+
getCollectionName(childName) {
|
|
70
|
+
return this.fromChildName[childName] ?? childName;
|
|
71
|
+
}
|
|
34
72
|
}
|
|
35
73
|
exports.default = RenameCollectionDataSourceDecorator;
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWNvcmF0b3JzL3JlbmFtZS1jb2xsZWN0aW9uL2RhdGFzb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx3RUFBa0Y7QUFFbEYsOERBQStEO0FBRS9ELE1BQXFCLG1DQUFvQyxTQUFRLHdDQUF3RDtJQUl2SCxZQUFZLGVBQTJCO1FBQ3JDLEtBQUssQ0FBQyxlQUFlLEVBQUUsb0JBQW1DLENBQUMsQ0FBQztRQUp0RCxrQkFBYSxHQUEyQixFQUFFLENBQUM7UUFDM0MsZ0JBQVcsR0FBMkIsRUFBRSxDQUFDO0lBSWpELENBQUM7SUFFRCxJQUFhLFdBQVc7UUFDdEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVRLGFBQWEsQ0FBQyxJQUFZO1FBQ2pDLDBEQUEwRDtRQUMxRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDMUIsT0FBTyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUNwRDtRQUVELDBEQUEwRDtRQUMxRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLElBQUksMEJBQTBCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzNGO1FBRUQsa0NBQWtDO1FBQ2xDLE9BQU8sS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsaUJBQWlCLENBQ2YsTUFBNkU7UUFFN0UsTUFBTSxNQUFNLEdBQ1YsT0FBTyxNQUFNLEtBQUssVUFBVTtZQUMxQixDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUM7WUFDbEUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRW5DLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxNQUFNLEVBQUU7WUFDdkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztTQUN6QztJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGdCQUFnQixDQUFDLFdBQW1CLEVBQUUsT0FBZTtRQUNuRCwwQkFBMEI7UUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVoQyxvQkFBb0I7UUFDcEIsSUFBSSxXQUFXLEtBQUssT0FBTyxFQUFFO1lBQzNCLHFDQUFxQztZQUNyQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxFQUFFO2dCQUN6RCxNQUFNLElBQUksS0FBSyxDQUFDLGtDQUFrQyxPQUFPLHNCQUFzQixDQUFDLENBQUM7YUFDbEY7WUFFRCwyQ0FBMkM7WUFDM0MsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxFQUFFO2dCQUNqQyxNQUFNLElBQUksS0FBSyxDQUNiLG9DQUFvQztvQkFDbEMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxLQUFLLFdBQVcsS0FBSyxPQUFPLEVBQUUsQ0FDakUsQ0FBQzthQUNIO1lBRUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsR0FBRyxPQUFPLENBQUM7WUFDMUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxXQUFXLENBQUM7WUFFeEMsS0FBSyxNQUFNLFVBQVUsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUN6QyxVQUFVLENBQUMsaUJBQWlCLEVBQUUsQ0FBQzthQUNoQztTQUNGO0lBQ0gsQ0FBQztJQUVELGdCQUFnQjtJQUNoQixpQkFBaUIsQ0FBQyxTQUFpQjtRQUNqQyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxDQUFDO0lBQ3BELENBQUM7Q0FDRjtBQWxGRCxzREFrRkMifQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forestadmin/datasource-customizer",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.14.0",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"license": "GPL-3.0",
|
|
6
6
|
"publishConfig": {
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"@types/uuid": "^9.0.0"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@forestadmin/datasource-toolkit": "1.
|
|
31
|
+
"@forestadmin/datasource-toolkit": "1.8.0",
|
|
32
32
|
"file-type": "^16.5.4",
|
|
33
33
|
"luxon": "^3.2.1",
|
|
34
34
|
"object-hash": "^3.0.0",
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { DataSource, DataSourceDecorator } from '@forestadmin/datasource-toolkit';
|
|
2
|
-
import PublicationFieldCollectionDecorator from '../publication-field/collection';
|
|
3
|
-
export default class PublicationCollectionDataSourceDecorator extends DataSourceDecorator<PublicationFieldCollectionDecorator> {
|
|
4
|
-
constructor(childDataSource: DataSource);
|
|
5
|
-
keepCollectionsMatching(include?: string[], exclude?: string[]): void;
|
|
6
|
-
private validateCollectionNames;
|
|
7
|
-
}
|
|
8
|
-
//# sourceMappingURL=datasource.d.ts.map
|
|
@@ -1,43 +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 collection_1 = __importDefault(require("../publication-field/collection"));
|
|
8
|
-
class PublicationCollectionDataSourceDecorator extends datasource_toolkit_1.DataSourceDecorator {
|
|
9
|
-
constructor(childDataSource) {
|
|
10
|
-
super(childDataSource, collection_1.default);
|
|
11
|
-
}
|
|
12
|
-
keepCollectionsMatching(include, exclude) {
|
|
13
|
-
this.validateCollectionNames([...(include ?? []), ...(exclude ?? [])]);
|
|
14
|
-
const deleted = new Set();
|
|
15
|
-
// List collection we're keeping from the white/black list.
|
|
16
|
-
for (const name of Object.keys(this._collections)) {
|
|
17
|
-
if ((include && !include.includes(name)) || exclude?.includes(name)) {
|
|
18
|
-
deleted.add(name);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
// Delete the relations to the collections we're not keeping.
|
|
22
|
-
for (const collection of Object.values(this._collections)) {
|
|
23
|
-
for (const [fieldName, field] of Object.entries(collection.schema.fields)) {
|
|
24
|
-
if ((field.type !== 'Column' && deleted.has(field.foreignCollection)) ||
|
|
25
|
-
(field.type === 'ManyToMany' && deleted.has(field.throughCollection)))
|
|
26
|
-
collection.changeFieldVisibility(fieldName, false);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
// Delete the collections themselves.
|
|
30
|
-
for (const name of deleted.values()) {
|
|
31
|
-
delete this._collections[name];
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
validateCollectionNames(names) {
|
|
35
|
-
for (const name of names) {
|
|
36
|
-
if (!this._collections[name]) {
|
|
37
|
-
throw new Error(`Unknown collection name: "${name}"`);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
exports.default = PublicationCollectionDataSourceDecorator;
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWNvcmF0b3JzL3B1YmxpY2F0aW9uLWNvbGxlY3Rpb24vZGF0YXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHdFQUFrRjtBQUVsRixpRkFBa0Y7QUFFbEYsTUFBcUIsd0NBQXlDLFNBQVEsd0NBQXdEO0lBQzVILFlBQVksZUFBMkI7UUFDckMsS0FBSyxDQUFDLGVBQWUsRUFBRSxvQkFBbUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxPQUFrQixFQUFFLE9BQWtCO1FBQzVELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdkUsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUVsQywyREFBMkQ7UUFDM0QsS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUNqRCxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLE9BQU8sRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ25FLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDbkI7U0FDRjtRQUVELDZEQUE2RDtRQUM3RCxLQUFLLE1BQU0sVUFBVSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ3pELEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3pFLElBQ0UsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO29CQUNqRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssWUFBWSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7b0JBRXJFLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDdEQ7U0FDRjtRQUVELHFDQUFxQztRQUNyQyxLQUFLLE1BQU0sSUFBSSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNuQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDaEM7SUFDSCxDQUFDO0lBRU8sdUJBQXVCLENBQUMsS0FBZTtRQUM3QyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtZQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsSUFBSSxHQUFHLENBQUMsQ0FBQzthQUN2RDtTQUNGO0lBQ0gsQ0FBQztDQUNGO0FBekNELDJEQXlDQyJ9
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { Caller, CollectionDecorator, CollectionSchema, DataSourceDecorator, RecordData } from '@forestadmin/datasource-toolkit';
|
|
2
|
-
/** This decorator allows hiding fields */
|
|
3
|
-
export default class PublicationFieldCollectionDecorator extends CollectionDecorator {
|
|
4
|
-
readonly dataSource: DataSourceDecorator<PublicationFieldCollectionDecorator>;
|
|
5
|
-
private readonly unpublished;
|
|
6
|
-
/** Show/hide fields from the schema */
|
|
7
|
-
changeFieldVisibility(name: string, visible: boolean): void;
|
|
8
|
-
create(caller: Caller, data: RecordData[]): Promise<RecordData[]>;
|
|
9
|
-
protected refineSchema(childSchema: CollectionSchema): CollectionSchema;
|
|
10
|
-
private isPublished;
|
|
11
|
-
}
|
|
12
|
-
//# sourceMappingURL=collection.d.ts.map
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const datasource_toolkit_1 = require("@forestadmin/datasource-toolkit");
|
|
4
|
-
/** This decorator allows hiding fields */
|
|
5
|
-
class PublicationFieldCollectionDecorator extends datasource_toolkit_1.CollectionDecorator {
|
|
6
|
-
constructor() {
|
|
7
|
-
super(...arguments);
|
|
8
|
-
this.unpublished = new Set();
|
|
9
|
-
}
|
|
10
|
-
/** Show/hide fields from the schema */
|
|
11
|
-
changeFieldVisibility(name, visible) {
|
|
12
|
-
const field = this.childCollection.schema.fields[name];
|
|
13
|
-
if (!field) {
|
|
14
|
-
throw new Error(`No such field '${name}'`);
|
|
15
|
-
}
|
|
16
|
-
if (datasource_toolkit_1.SchemaUtils.isPrimaryKey(this.childCollection.schema, name)) {
|
|
17
|
-
throw new Error(`Cannot hide primary key`);
|
|
18
|
-
}
|
|
19
|
-
if (!visible)
|
|
20
|
-
this.unpublished.add(name);
|
|
21
|
-
else
|
|
22
|
-
this.unpublished.delete(name);
|
|
23
|
-
this.markSchemaAsDirty();
|
|
24
|
-
}
|
|
25
|
-
async create(caller, data) {
|
|
26
|
-
const records = await super.create(caller, data);
|
|
27
|
-
return records.map(childRecord => {
|
|
28
|
-
const record = {};
|
|
29
|
-
for (const key of Object.keys(childRecord))
|
|
30
|
-
if (!this.unpublished.has(key))
|
|
31
|
-
record[key] = childRecord[key];
|
|
32
|
-
return record;
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
refineSchema(childSchema) {
|
|
36
|
-
const fields = {};
|
|
37
|
-
for (const [name, field] of Object.entries(childSchema.fields)) {
|
|
38
|
-
if (this.isPublished(name)) {
|
|
39
|
-
fields[name] = field;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
return { ...childSchema, fields };
|
|
43
|
-
}
|
|
44
|
-
isPublished(name) {
|
|
45
|
-
const field = this.childCollection.schema.fields[name];
|
|
46
|
-
return (!this.unpublished.has(name) &&
|
|
47
|
-
// Columns have no special requirements
|
|
48
|
-
(field.type === 'Column' ||
|
|
49
|
-
// Many to one, one to one and one to many need the foreign key to be published
|
|
50
|
-
(field.type === 'ManyToOne' && this.isPublished(field.foreignKey)) ||
|
|
51
|
-
((field.type === 'OneToOne' || field.type === 'OneToMany') &&
|
|
52
|
-
this.dataSource.getCollection(field.foreignCollection).isPublished(field.originKey)) ||
|
|
53
|
-
// Many to many relations depend on both foreignKey and originKey to be published
|
|
54
|
-
(field.type === 'ManyToMany' &&
|
|
55
|
-
this.dataSource.getCollection(field.throughCollection).isPublished(field.foreignKey) &&
|
|
56
|
-
this.dataSource.getCollection(field.throughCollection).isPublished(field.originKey))));
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
exports.default = PublicationFieldCollectionDecorator;
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWNvcmF0b3JzL3B1YmxpY2F0aW9uLWZpZWxkL2NvbGxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSx3RUFReUM7QUFFekMsMENBQTBDO0FBQzFDLE1BQXFCLG1DQUFvQyxTQUFRLHdDQUFtQjtJQUFwRjs7UUFFbUIsZ0JBQVcsR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQTREeEQsQ0FBQztJQTFEQyx1Q0FBdUM7SUFDdkMscUJBQXFCLENBQUMsSUFBWSxFQUFFLE9BQWdCO1FBQ2xELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV2RCxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsSUFBSSxHQUFHLENBQUMsQ0FBQztTQUM1QztRQUVELElBQUksZ0NBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDL0QsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1NBQzVDO1FBRUQsSUFBSSxDQUFDLE9BQU87WUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7WUFDcEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVRLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBYyxFQUFFLElBQWtCO1FBQ3RELE1BQU0sT0FBTyxHQUFHLE1BQU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFakQsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQy9CLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztZQUNsQixLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO2dCQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO29CQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFakUsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRWtCLFlBQVksQ0FBQyxXQUE2QjtRQUMzRCxNQUFNLE1BQU0sR0FBZ0MsRUFBRSxDQUFDO1FBRS9DLEtBQUssTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM5RCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzFCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7YUFDdEI7U0FDRjtRQUVELE9BQU8sRUFBRSxHQUFHLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRU8sV0FBVyxDQUFDLElBQVk7UUFDOUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXZELE9BQU8sQ0FDTCxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztZQUMzQix1Q0FBdUM7WUFDdkMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVE7Z0JBQ3RCLCtFQUErRTtnQkFDL0UsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDbEUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssVUFBVSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDO29CQUN4RCxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN0RixpRkFBaUY7Z0JBQ2pGLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxZQUFZO29CQUMxQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQztvQkFDcEYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQzFGLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUE5REQsc0RBOERDIn0=
|