@forestadmin/datasource-customizer 1.0.0-alpha.1 → 1.0.0-alpha.3
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 +2 -2
- package/dist/collection-customizer.js +2 -2
- package/dist/datasource-customizer.js +15 -6
- package/dist/decorators/actions/types/actions.d.ts +2 -2
- package/dist/decorators/actions/types/actions.js +9 -1
- package/dist/decorators/decorators-stack.d.ts +2 -2
- package/dist/decorators/decorators-stack.js +2 -2
- package/dist/decorators/hook/types.d.ts +1 -0
- package/dist/decorators/hook/types.js +22 -1
- package/dist/decorators/publication-collection/datasource.d.ts +9 -0
- package/dist/decorators/publication-collection/datasource.js +43 -0
- package/dist/decorators/{publication → publication-field}/collection.d.ts +2 -2
- package/dist/decorators/publication-field/collection.js +63 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.js +8 -2
- package/dist/types.d.ts +2 -0
- package/package.json +2 -2
- package/dist/decorators/publication/collection.js +0 -63
|
@@ -55,7 +55,7 @@ export default class CollectionCustomizer<S extends TSchema = TSchema, N extends
|
|
|
55
55
|
* .addAction('is live', {
|
|
56
56
|
* scope: 'Single',
|
|
57
57
|
* execute: async (context, resultBuilder) => {
|
|
58
|
-
* return resultBuilder.success(
|
|
58
|
+
* return resultBuilder.success('Is live!');
|
|
59
59
|
* },
|
|
60
60
|
* })
|
|
61
61
|
*/
|
|
@@ -68,7 +68,7 @@ export default class CollectionCustomizer<S extends TSchema = TSchema, N extends
|
|
|
68
68
|
* .addField('fullName', {
|
|
69
69
|
* columnType: 'String',
|
|
70
70
|
* dependencies: ['firstName', 'lastName'],
|
|
71
|
-
* getValues: (records) => records.map(record =>
|
|
71
|
+
* getValues: (records) => records.map(record => \`${record.lastName} ${record.firstName}\`),
|
|
72
72
|
* });
|
|
73
73
|
*/
|
|
74
74
|
addField(name: string, definition: FieldDefinition<S, N>): this;
|
|
@@ -91,7 +91,7 @@ class CollectionCustomizer {
|
|
|
91
91
|
* .addAction('is live', {
|
|
92
92
|
* scope: 'Single',
|
|
93
93
|
* execute: async (context, resultBuilder) => {
|
|
94
|
-
* return resultBuilder.success(
|
|
94
|
+
* return resultBuilder.success('Is live!');
|
|
95
95
|
* },
|
|
96
96
|
* })
|
|
97
97
|
*/
|
|
@@ -110,7 +110,7 @@ class CollectionCustomizer {
|
|
|
110
110
|
* .addField('fullName', {
|
|
111
111
|
* columnType: 'String',
|
|
112
112
|
* dependencies: ['firstName', 'lastName'],
|
|
113
|
-
* getValues: (records) => records.map(record =>
|
|
113
|
+
* getValues: (records) => records.map(record => \`${record.lastName} ${record.firstName}\`),
|
|
114
114
|
* });
|
|
115
115
|
*/
|
|
116
116
|
addField(name, definition) {
|
|
@@ -6,7 +6,8 @@ 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/
|
|
9
|
+
const datasource_1 = __importDefault(require("./decorators/publication-collection/datasource"));
|
|
10
|
+
const datasource_2 = __importDefault(require("./decorators/rename-collection/datasource"));
|
|
10
11
|
const typing_generator_1 = __importDefault(require("./typing-generator"));
|
|
11
12
|
/**
|
|
12
13
|
* Allow to create a new Forest Admin agent from scratch.
|
|
@@ -31,10 +32,18 @@ class DataSourceCustomizer {
|
|
|
31
32
|
*/
|
|
32
33
|
addDataSource(factory, options) {
|
|
33
34
|
this.customizations.push(async (logger) => {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
35
|
+
let dataSource = await factory(logger);
|
|
36
|
+
if (options?.include || options?.exclude) {
|
|
37
|
+
const publicationDecorator = new datasource_1.default(dataSource);
|
|
38
|
+
publicationDecorator.keepCollectionsMatching(options.include, options.exclude);
|
|
39
|
+
dataSource = publicationDecorator;
|
|
40
|
+
}
|
|
41
|
+
if (options?.rename) {
|
|
42
|
+
const renamedDecorator = new datasource_2.default(dataSource);
|
|
43
|
+
renamedDecorator.renameCollections(options?.rename);
|
|
44
|
+
dataSource = renamedDecorator;
|
|
45
|
+
}
|
|
46
|
+
this.compositeDataSource.addDataSource(dataSource);
|
|
38
47
|
});
|
|
39
48
|
return this;
|
|
40
49
|
}
|
|
@@ -86,4 +95,4 @@ class DataSourceCustomizer {
|
|
|
86
95
|
}
|
|
87
96
|
}
|
|
88
97
|
exports.default = DataSourceCustomizer;
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXNvdXJjZS1jdXN0b21pemVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2RhdGFzb3VyY2UtY3VzdG9taXplci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUtBLG9GQUEyRDtBQUMzRCw2RkFBb0U7QUFDcEUscUZBQTREO0FBQzVELGdHQUFzRztBQUN0RywyRkFBNEY7QUFDNUYsMEVBQWlEO0FBRWpEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQXFCLG9CQUFvQjtJQUt2QztRQUZRLG1CQUFjLEdBQTBDLEVBQUUsQ0FBQztRQUdqRSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSw4QkFBbUIsRUFBYyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSwwQkFBZSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsYUFBYSxDQUFDLE9BQTBCLEVBQUUsT0FBMkI7UUFDbkUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFDLE1BQU0sRUFBQyxFQUFFO1lBQ3RDLElBQUksVUFBVSxHQUFHLE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRXZDLElBQUksT0FBTyxFQUFFLE9BQU8sSUFBSSxPQUFPLEVBQUUsT0FBTyxFQUFFO2dCQUN4QyxNQUFNLG9CQUFvQixHQUFHLElBQUksb0JBQXdDLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3RGLG9CQUFvQixDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMvRSxVQUFVLEdBQUcsb0JBQW9CLENBQUM7YUFDbkM7WUFFRCxJQUFJLE9BQU8sRUFBRSxNQUFNLEVBQUU7Z0JBQ25CLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxvQkFBbUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDN0UsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUNwRCxVQUFVLEdBQUcsZ0JBQWdCLENBQUM7YUFDL0I7WUFFRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxRQUFRLENBQUMsSUFBWSxFQUFFLFVBQThCO1FBQ25ELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDOUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsbUJBQW1CLENBQ2pCLElBQU8sRUFDUCxNQUEyRDtRQUUzRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtZQUNsQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDN0MsTUFBTSxDQUFDLElBQUksK0JBQW9CLENBQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQzFEO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQWM7UUFDaEMsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRTtZQUNqQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyx1Q0FBdUM7U0FDbkY7UUFFRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO0lBQy9CLENBQUM7SUFFRCxVQUFVO1FBQ1IsT0FBTyxLQUFLLEVBQUUsTUFBYyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxLQUFLLENBQUMsdUJBQXVCLENBQUMsV0FBbUIsRUFBRSxlQUF1QjtRQUN4RSxPQUFPLDBCQUFlLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQ2hHLENBQUM7Q0FDRjtBQTdGRCx1Q0E2RkMifQ==
|
|
@@ -4,7 +4,8 @@ import { TCollectionName, TSchema } from '../../../templates';
|
|
|
4
4
|
import ActionContext from '../context/base';
|
|
5
5
|
import ActionContextSingle from '../context/single';
|
|
6
6
|
import ResultBuilder from '../result-builder';
|
|
7
|
-
|
|
7
|
+
export { ActionContext, ActionContextSingle };
|
|
8
|
+
export interface BaseAction<S extends TSchema, N extends TCollectionName<S>, Scope extends ActionScope, Context extends ActionContext<S, N>> {
|
|
8
9
|
generateFile?: boolean;
|
|
9
10
|
scope: Scope;
|
|
10
11
|
form?: DynamicField<Context>[];
|
|
@@ -14,5 +15,4 @@ export declare type ActionGlobal<S extends TSchema = TSchema, N extends TCollect
|
|
|
14
15
|
export declare type ActionBulk<S extends TSchema = TSchema, N extends TCollectionName<S> = TCollectionName<S>> = BaseAction<S, N, 'Bulk', ActionContext<S, N>>;
|
|
15
16
|
export declare type ActionSingle<S extends TSchema = TSchema, N extends TCollectionName<S> = TCollectionName<S>> = BaseAction<S, N, 'Single', ActionContextSingle<S, N>>;
|
|
16
17
|
export declare type ActionDefinition<S extends TSchema = TSchema, N extends TCollectionName<S> = TCollectionName<S>> = ActionSingle<S, N> | ActionBulk<S, N> | ActionGlobal<S, N>;
|
|
17
|
-
export {};
|
|
18
18
|
//# sourceMappingURL=actions.d.ts.map
|
|
@@ -1,3 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
6
|
+
exports.ActionContextSingle = exports.ActionContext = void 0;
|
|
7
|
+
const base_1 = __importDefault(require("../context/base"));
|
|
8
|
+
exports.ActionContext = base_1.default;
|
|
9
|
+
const single_1 = __importDefault(require("../context/single"));
|
|
10
|
+
exports.ActionContextSingle = single_1.default;
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kZWNvcmF0b3JzL2FjdGlvbnMvdHlwZXMvYWN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFJQSwyREFBNEM7QUFJbkMsd0JBSkYsY0FBYSxDQUlFO0FBSHRCLCtEQUFvRDtBQUc1Qiw4QkFIakIsZ0JBQW1CLENBR2lCIn0=
|
|
@@ -7,7 +7,7 @@ import EmptyCollectionDecorator from './empty/collection';
|
|
|
7
7
|
import HookCollectionDecorator from './hook/collection';
|
|
8
8
|
import OperatorsEmulateCollectionDecorator from './operators-emulate/collection';
|
|
9
9
|
import OperatorsReplaceCollectionDecorator from './operators-replace/collection';
|
|
10
|
-
import
|
|
10
|
+
import PublicationFieldCollectionDecorator from './publication-field/collection';
|
|
11
11
|
import RelationCollectionDecorator from './relation/collection';
|
|
12
12
|
import RenameFieldCollectionDecorator from './rename-field/collection';
|
|
13
13
|
import SchemaCollectionDecorator from './schema/collection';
|
|
@@ -27,7 +27,7 @@ export default class DecoratorsStack {
|
|
|
27
27
|
lateComputed: DataSourceDecorator<ComputedCollectionDecorator>;
|
|
28
28
|
lateOpEmulate: DataSourceDecorator<OperatorsEmulateCollectionDecorator>;
|
|
29
29
|
lateOpReplace: DataSourceDecorator<OperatorsReplaceCollectionDecorator>;
|
|
30
|
-
publication: DataSourceDecorator<
|
|
30
|
+
publication: DataSourceDecorator<PublicationFieldCollectionDecorator>;
|
|
31
31
|
renameField: DataSourceDecorator<RenameFieldCollectionDecorator>;
|
|
32
32
|
schema: DataSourceDecorator<SchemaCollectionDecorator>;
|
|
33
33
|
search: DataSourceDecorator<SearchCollectionDecorator>;
|
|
@@ -11,7 +11,7 @@ const collection_3 = __importDefault(require("./empty/collection"));
|
|
|
11
11
|
const collection_4 = __importDefault(require("./hook/collection"));
|
|
12
12
|
const collection_5 = __importDefault(require("./operators-emulate/collection"));
|
|
13
13
|
const collection_6 = __importDefault(require("./operators-replace/collection"));
|
|
14
|
-
const collection_7 = __importDefault(require("./publication/collection"));
|
|
14
|
+
const collection_7 = __importDefault(require("./publication-field/collection"));
|
|
15
15
|
const collection_8 = __importDefault(require("./relation/collection"));
|
|
16
16
|
const collection_9 = __importDefault(require("./rename-field/collection"));
|
|
17
17
|
const collection_10 = __importDefault(require("./schema/collection"));
|
|
@@ -56,4 +56,4 @@ class DecoratorsStack {
|
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
exports.default = DecoratorsStack;
|
|
59
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy1zdGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZWNvcmF0b3JzL2RlY29yYXRvcnMtc3RhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxzRUFBNkQ7QUFDN0Qsb0VBQTBEO0FBQzFELHVFQUFnRTtBQUNoRSxrRkFBeUQ7QUFDekQsb0VBQTBEO0FBQzFELG1FQUF3RDtBQUN4RCxnRkFBaUY7QUFDakYsZ0ZBQWlGO0FBQ2pGLGdGQUFpRjtBQUNqRix1RUFBZ0U7QUFDaEUsMkVBQXVFO0FBQ3ZFLHNFQUE0RDtBQUM1RCxzRUFBNEQ7QUFDNUQsdUVBQThEO0FBQzlELDRFQUF1RTtBQUN2RSwwRUFBb0U7QUFDcEUscUVBQTBEO0FBRTFELE1BQXFCLGVBQWU7SUFzQmxDLFlBQVksVUFBc0I7UUFDaEMsSUFBSSxJQUFJLEdBQWUsVUFBVSxDQUFDO1FBRWxDLG9DQUFvQztRQUNwQyxtRkFBbUY7UUFDbkYsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSw4QkFBbUIsQ0FBQyxJQUFJLEVBQUUsb0JBQXdCLENBQUMsQ0FBQztRQUU1RSw2RkFBNkY7UUFDN0Ysc0VBQXNFO1FBQ3RFLDJGQUEyRjtRQUMzRixJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLDhCQUFtQixDQUFDLElBQUksRUFBRSxvQkFBMkIsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksOEJBQW1CLENBQUMsSUFBSSxFQUFFLG9CQUFtQyxDQUFDLENBQUM7UUFDaEcsSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSw4QkFBbUIsQ0FBQyxJQUFJLEVBQUUsb0JBQW1DLENBQUMsQ0FBQztRQUNoRyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLDhCQUFtQixDQUFDLElBQUksRUFBRSxvQkFBMkIsQ0FBQyxDQUFDO1FBQ2xGLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksOEJBQW1CLENBQUMsSUFBSSxFQUFFLG9CQUEyQixDQUFDLENBQUM7UUFDdEYsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSw4QkFBbUIsQ0FBQyxJQUFJLEVBQUUsb0JBQW1DLENBQUMsQ0FBQztRQUMvRixJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLDhCQUFtQixDQUFDLElBQUksRUFBRSxvQkFBbUMsQ0FBQyxDQUFDO1FBRS9GLDRFQUE0RTtRQUM1RSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLDhCQUFtQixDQUFDLElBQUksRUFBRSxxQkFBeUIsQ0FBQyxDQUFDO1FBQzlFLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksOEJBQW1CLENBQUMsSUFBSSxFQUFFLHFCQUEwQixDQUFDLENBQUM7UUFDaEYsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSw4QkFBbUIsQ0FBQyxJQUFJLEVBQUUscUJBQThCLENBQUMsQ0FBQztRQUN4RixJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLDhCQUFtQixDQUFDLElBQUksRUFBRSxxQkFBd0IsQ0FBQyxDQUFDO1FBRTVFLHlEQUF5RDtRQUN6RCxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLDhCQUFtQixDQUFDLElBQUksRUFBRSxxQkFBNkIsQ0FBQyxDQUFDO1FBQ3RGLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksb0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSw4QkFBbUIsQ0FBQyxJQUFJLEVBQUUsb0JBQXlCLENBQUMsQ0FBQztRQUM5RSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLDhCQUFtQixDQUFDLElBQUksRUFBRSxxQkFBeUIsQ0FBQyxDQUFDO1FBQzlFLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksOEJBQW1CLENBQUMsSUFBSSxFQUFFLG9CQUF1QixDQUFDLENBQUM7UUFFMUUsOEZBQThGO1FBQzlGLGlCQUFpQjtRQUNqQixJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLDhCQUFtQixDQUFDLElBQUksRUFBRSxvQkFBbUMsQ0FBQyxDQUFDO1FBQzdGLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksOEJBQW1CLENBQUMsSUFBSSxFQUFFLG9CQUE4QixDQUFDLENBQUM7UUFDeEYsbUNBQW1DO1FBRW5DLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLENBQUM7Q0FDRjtBQTdERCxrQ0E2REMifQ==
|
|
@@ -5,6 +5,7 @@ import { HookAfterListContext, HookBeforeListContext } from './context/list';
|
|
|
5
5
|
import { HookAfterUpdateContext, HookBeforeUpdateContext } from './context/update';
|
|
6
6
|
import { TCollectionName, TSchema } from '../../templates';
|
|
7
7
|
import HookContext from './context/hook';
|
|
8
|
+
export { HookContext, HookAfterAggregateContext, HookBeforeAggregateContext, HookAfterCreateContext, HookBeforeCreateContext, HookAfterDeleteContext, HookBeforeDeleteContext, HookAfterListContext, HookBeforeListContext, HookAfterUpdateContext, HookBeforeUpdateContext, };
|
|
8
9
|
export declare type HookHandler<C extends HookContext<S, N>, R = void, S extends TSchema = TSchema, N extends TCollectionName<S> = TCollectionName<S>> = (context: C) => Promise<R> | R;
|
|
9
10
|
export declare type HookType<P extends HookPosition = HookPosition> = Extract<keyof HooksContext[P], string>;
|
|
10
11
|
export declare type HookPosition = Extract<keyof HooksContext, string>;
|
|
@@ -1,3 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
|
|
6
|
+
exports.HookBeforeUpdateContext = exports.HookAfterUpdateContext = exports.HookBeforeListContext = exports.HookAfterListContext = exports.HookBeforeDeleteContext = exports.HookAfterDeleteContext = exports.HookBeforeCreateContext = exports.HookAfterCreateContext = exports.HookBeforeAggregateContext = exports.HookAfterAggregateContext = exports.HookContext = void 0;
|
|
7
|
+
const aggregate_1 = require("./context/aggregate");
|
|
8
|
+
Object.defineProperty(exports, "HookAfterAggregateContext", { enumerable: true, get: function () { return aggregate_1.HookAfterAggregateContext; } });
|
|
9
|
+
Object.defineProperty(exports, "HookBeforeAggregateContext", { enumerable: true, get: function () { return aggregate_1.HookBeforeAggregateContext; } });
|
|
10
|
+
const create_1 = require("./context/create");
|
|
11
|
+
Object.defineProperty(exports, "HookAfterCreateContext", { enumerable: true, get: function () { return create_1.HookAfterCreateContext; } });
|
|
12
|
+
Object.defineProperty(exports, "HookBeforeCreateContext", { enumerable: true, get: function () { return create_1.HookBeforeCreateContext; } });
|
|
13
|
+
const delete_1 = require("./context/delete");
|
|
14
|
+
Object.defineProperty(exports, "HookAfterDeleteContext", { enumerable: true, get: function () { return delete_1.HookAfterDeleteContext; } });
|
|
15
|
+
Object.defineProperty(exports, "HookBeforeDeleteContext", { enumerable: true, get: function () { return delete_1.HookBeforeDeleteContext; } });
|
|
16
|
+
const list_1 = require("./context/list");
|
|
17
|
+
Object.defineProperty(exports, "HookAfterListContext", { enumerable: true, get: function () { return list_1.HookAfterListContext; } });
|
|
18
|
+
Object.defineProperty(exports, "HookBeforeListContext", { enumerable: true, get: function () { return list_1.HookBeforeListContext; } });
|
|
19
|
+
const update_1 = require("./context/update");
|
|
20
|
+
Object.defineProperty(exports, "HookAfterUpdateContext", { enumerable: true, get: function () { return update_1.HookAfterUpdateContext; } });
|
|
21
|
+
Object.defineProperty(exports, "HookBeforeUpdateContext", { enumerable: true, get: function () { return update_1.HookBeforeUpdateContext; } });
|
|
22
|
+
const hook_1 = __importDefault(require("./context/hook"));
|
|
23
|
+
exports.HookContext = hook_1.default;
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVjb3JhdG9ycy9ob29rL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG1EQUE0RjtBQVUxRiwwR0FWTyxxQ0FBeUIsT0FVUDtBQUN6QiwyR0FYa0Msc0NBQTBCLE9BV2xDO0FBVjVCLDZDQUFtRjtBQVdqRix1R0FYTywrQkFBc0IsT0FXUDtBQUN0Qix3R0FaK0IsZ0NBQXVCLE9BWS9CO0FBWHpCLDZDQUFtRjtBQVlqRix1R0FaTywrQkFBc0IsT0FZUDtBQUN0Qix3R0FiK0IsZ0NBQXVCLE9BYS9CO0FBWnpCLHlDQUE2RTtBQWEzRSxxR0FiTywyQkFBb0IsT0FhUDtBQUNwQixzR0FkNkIsNEJBQXFCLE9BYzdCO0FBYnZCLDZDQUFtRjtBQWNqRix1R0FkTywrQkFBc0IsT0FjUDtBQUN0Qix3R0FmK0IsZ0NBQXVCLE9BZS9CO0FBYnpCLDBEQUF5QztBQUd2QyxzQkFISyxjQUFXLENBR0wifQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { DataSource } from '@forestadmin/datasource-toolkit';
|
|
2
|
+
import DataSourceDecorator from '../datasource-decorator';
|
|
3
|
+
import PublicationFieldCollectionDecorator from '../publication-field/collection';
|
|
4
|
+
export default class PublicationCollectionDataSourceDecorator extends DataSourceDecorator<PublicationFieldCollectionDecorator> {
|
|
5
|
+
constructor(childDataSource: DataSource);
|
|
6
|
+
keepCollectionsMatching(include?: string[], exclude?: string[]): void;
|
|
7
|
+
private validateCollectionNames;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=datasource.d.ts.map
|
|
@@ -0,0 +1,43 @@
|
|
|
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_decorator_1 = __importDefault(require("../datasource-decorator"));
|
|
7
|
+
const collection_1 = __importDefault(require("../publication-field/collection"));
|
|
8
|
+
class PublicationCollectionDataSourceDecorator extends datasource_decorator_1.default {
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWNvcmF0b3JzL3B1YmxpY2F0aW9uLWNvbGxlY3Rpb24vZGF0YXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLG1GQUEwRDtBQUMxRCxpRkFBa0Y7QUFFbEYsTUFBcUIsd0NBQXlDLFNBQVEsOEJBQXdEO0lBQzVILFlBQVksZUFBMkI7UUFDckMsS0FBSyxDQUFDLGVBQWUsRUFBRSxvQkFBbUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxPQUFrQixFQUFFLE9BQWtCO1FBQzVELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdkUsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUVsQywyREFBMkQ7UUFDM0QsS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUNqRCxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLE9BQU8sRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ25FLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDbkI7U0FDRjtRQUVELDZEQUE2RDtRQUM3RCxLQUFLLE1BQU0sVUFBVSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ3pELEtBQUssTUFBTSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3pFLElBQ0UsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO29CQUNqRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssWUFBWSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7b0JBRXJFLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDdEQ7U0FDRjtRQUVELHFDQUFxQztRQUNyQyxLQUFLLE1BQU0sSUFBSSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNuQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDaEM7SUFDSCxDQUFDO0lBRU8sdUJBQXVCLENBQUMsS0FBZTtRQUM3QyxLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtZQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsSUFBSSxHQUFHLENBQUMsQ0FBQzthQUN2RDtTQUNGO0lBQ0gsQ0FBQztDQUNGO0FBekNELDJEQXlDQyJ9
|
|
@@ -2,8 +2,8 @@ import { Caller, CollectionSchema, RecordData } from '@forestadmin/datasource-to
|
|
|
2
2
|
import CollectionDecorator from '../collection-decorator';
|
|
3
3
|
import DataSourceDecorator from '../datasource-decorator';
|
|
4
4
|
/** This decorator allows hiding fields */
|
|
5
|
-
export default class
|
|
6
|
-
readonly dataSource: DataSourceDecorator<
|
|
5
|
+
export default class PublicationFieldCollectionDecorator extends CollectionDecorator {
|
|
6
|
+
readonly dataSource: DataSourceDecorator<PublicationFieldCollectionDecorator>;
|
|
7
7
|
private readonly unpublished;
|
|
8
8
|
/** Show/hide fields from the schema */
|
|
9
9
|
changeFieldVisibility(name: string, visible: boolean): void;
|
|
@@ -0,0 +1,63 @@
|
|
|
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 collection_decorator_1 = __importDefault(require("../collection-decorator"));
|
|
7
|
+
/** This decorator allows hiding fields */
|
|
8
|
+
class PublicationFieldCollectionDecorator extends collection_decorator_1.default {
|
|
9
|
+
constructor() {
|
|
10
|
+
super(...arguments);
|
|
11
|
+
this.unpublished = new Set();
|
|
12
|
+
}
|
|
13
|
+
/** Show/hide fields from the schema */
|
|
14
|
+
changeFieldVisibility(name, visible) {
|
|
15
|
+
const field = this.childCollection.schema.fields[name];
|
|
16
|
+
if (!field) {
|
|
17
|
+
throw new Error(`No such field '${name}'`);
|
|
18
|
+
}
|
|
19
|
+
if (field.type === 'Column' && field.isPrimaryKey) {
|
|
20
|
+
throw new Error(`Cannot hide primary key`);
|
|
21
|
+
}
|
|
22
|
+
if (!visible)
|
|
23
|
+
this.unpublished.add(name);
|
|
24
|
+
else
|
|
25
|
+
this.unpublished.delete(name);
|
|
26
|
+
this.markSchemaAsDirty();
|
|
27
|
+
}
|
|
28
|
+
async create(caller, data) {
|
|
29
|
+
const records = await super.create(caller, data);
|
|
30
|
+
return records.map(childRecord => {
|
|
31
|
+
const record = {};
|
|
32
|
+
for (const key of Object.keys(childRecord))
|
|
33
|
+
if (!this.unpublished.has(key))
|
|
34
|
+
record[key] = childRecord[key];
|
|
35
|
+
return record;
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
refineSchema(childSchema) {
|
|
39
|
+
const fields = {};
|
|
40
|
+
for (const [name, field] of Object.entries(childSchema.fields)) {
|
|
41
|
+
if (this.isPublished(name)) {
|
|
42
|
+
fields[name] = field;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return { ...childSchema, fields };
|
|
46
|
+
}
|
|
47
|
+
isPublished(name) {
|
|
48
|
+
const field = this.childCollection.schema.fields[name];
|
|
49
|
+
return (!this.unpublished.has(name) &&
|
|
50
|
+
// Columns have no special requirements
|
|
51
|
+
(field.type === 'Column' ||
|
|
52
|
+
// Many to one, one to one and one to many need the foreign key to be published
|
|
53
|
+
(field.type === 'ManyToOne' && this.isPublished(field.foreignKey)) ||
|
|
54
|
+
((field.type === 'OneToOne' || field.type === 'OneToMany') &&
|
|
55
|
+
this.dataSource.getCollection(field.foreignCollection).isPublished(field.originKey)) ||
|
|
56
|
+
// Many to many relations depend on both foreignKey and originKey to be published
|
|
57
|
+
(field.type === 'ManyToMany' &&
|
|
58
|
+
this.dataSource.getCollection(field.throughCollection).isPublished(field.foreignKey) &&
|
|
59
|
+
this.dataSource.getCollection(field.throughCollection).isPublished(field.originKey))));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
exports.default = PublicationFieldCollectionDecorator;
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWNvcmF0b3JzL3B1YmxpY2F0aW9uLWZpZWxkL2NvbGxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxtRkFBMEQ7QUFHMUQsMENBQTBDO0FBQzFDLE1BQXFCLG1DQUFvQyxTQUFRLDhCQUFtQjtJQUFwRjs7UUFFbUIsZ0JBQVcsR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQTREeEQsQ0FBQztJQTFEQyx1Q0FBdUM7SUFDdkMscUJBQXFCLENBQUMsSUFBWSxFQUFFLE9BQWdCO1FBQ2xELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV2RCxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsSUFBSSxHQUFHLENBQUMsQ0FBQztTQUM1QztRQUVELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRTtZQUNqRCxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7U0FDNUM7UUFFRCxJQUFJLENBQUMsT0FBTztZQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDOztZQUNwQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRVEsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFjLEVBQUUsSUFBa0I7UUFDdEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVqRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDL0IsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7b0JBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVqRSxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFa0IsWUFBWSxDQUFDLFdBQTZCO1FBQzNELE1BQU0sTUFBTSxHQUFnQyxFQUFFLENBQUM7UUFFL0MsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzlELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDMUIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQzthQUN0QjtTQUNGO1FBRUQsT0FBTyxFQUFFLEdBQUcsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFTyxXQUFXLENBQUMsSUFBWTtRQUM5QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdkQsT0FBTyxDQUNMLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQzNCLHVDQUF1QztZQUN2QyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUTtnQkFDdEIsK0VBQStFO2dCQUMvRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNsRSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxVQUFVLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUM7b0JBQ3hELElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3RGLGlGQUFpRjtnQkFDakYsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFlBQVk7b0JBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO29CQUNwRixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FDMUYsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQTlERCxzREE4REMifQ==
|
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ export { default as CollectionCustomizer } from './collection-customizer';
|
|
|
2
2
|
export { default as DataSourceCustomizer } from './datasource-customizer';
|
|
3
3
|
export * from './templates';
|
|
4
4
|
export * from './types';
|
|
5
|
-
export
|
|
5
|
+
export * from './decorators/actions/types/actions';
|
|
6
6
|
export { ChartDefinition } from './decorators/chart/types';
|
|
7
7
|
export { ComputedDefinition } from './decorators/computed/types';
|
|
8
8
|
export { OperatorDefinition } from './decorators/operators-emulate/types';
|
|
@@ -10,5 +10,6 @@ export { RelationDefinition } from './decorators/relation/types';
|
|
|
10
10
|
export { SearchDefinition } from './decorators/search/types';
|
|
11
11
|
export { SegmentDefinition } from './decorators/segment/types';
|
|
12
12
|
export { WriteDefinition } from './decorators/write/types';
|
|
13
|
-
export
|
|
13
|
+
export * from './decorators/hook/types';
|
|
14
|
+
export { default as CollectionCustomizationContext } from './context/collection-context';
|
|
14
15
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -17,11 +17,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
17
17
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
18
|
};
|
|
19
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
-
exports.DataSourceCustomizer = exports.CollectionCustomizer = void 0;
|
|
20
|
+
exports.CollectionCustomizationContext = exports.DataSourceCustomizer = exports.CollectionCustomizer = void 0;
|
|
21
21
|
var collection_customizer_1 = require("./collection-customizer");
|
|
22
22
|
Object.defineProperty(exports, "CollectionCustomizer", { enumerable: true, get: function () { return __importDefault(collection_customizer_1).default; } });
|
|
23
23
|
var datasource_customizer_1 = require("./datasource-customizer");
|
|
24
24
|
Object.defineProperty(exports, "DataSourceCustomizer", { enumerable: true, get: function () { return __importDefault(datasource_customizer_1).default; } });
|
|
25
25
|
__exportStar(require("./templates"), exports);
|
|
26
26
|
__exportStar(require("./types"), exports);
|
|
27
|
-
|
|
27
|
+
// Decorators (helpers)
|
|
28
|
+
__exportStar(require("./decorators/actions/types/actions"), exports);
|
|
29
|
+
__exportStar(require("./decorators/hook/types"), exports);
|
|
30
|
+
// Context
|
|
31
|
+
var collection_context_1 = require("./context/collection-context");
|
|
32
|
+
Object.defineProperty(exports, "CollectionCustomizationContext", { enumerable: true, get: function () { return __importDefault(collection_context_1).default; } });
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxpRUFBMEU7QUFBakUsOElBQUEsT0FBTyxPQUF3QjtBQUN4QyxpRUFBMEU7QUFBakUsOElBQUEsT0FBTyxPQUF3QjtBQUV4Qyw4Q0FBNEI7QUFDNUIsMENBQXdCO0FBRXhCLHVCQUF1QjtBQUN2QixxRUFBbUQ7QUFRbkQsMERBQXdDO0FBRXhDLFVBQVU7QUFDVixtRUFBeUY7QUFBaEYscUpBQUEsT0FBTyxPQUFrQyJ9
|
package/dist/types.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forestadmin/datasource-customizer",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.3",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"license": "GPL-3.0",
|
|
6
6
|
"publishConfig": {
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"fishery": "^2.1.0"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@forestadmin/datasource-toolkit": "1.0.0-alpha.
|
|
32
|
+
"@forestadmin/datasource-toolkit": "1.0.0-alpha.3",
|
|
33
33
|
"luxon": "^2.3.0",
|
|
34
34
|
"object-hash": "^3.0.0",
|
|
35
35
|
"uuid": "^8.3.2"
|
|
@@ -1,63 +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 collection_decorator_1 = __importDefault(require("../collection-decorator"));
|
|
7
|
-
/** This decorator allows hiding fields */
|
|
8
|
-
class PublicationCollectionDecorator extends collection_decorator_1.default {
|
|
9
|
-
constructor() {
|
|
10
|
-
super(...arguments);
|
|
11
|
-
this.unpublished = new Set();
|
|
12
|
-
}
|
|
13
|
-
/** Show/hide fields from the schema */
|
|
14
|
-
changeFieldVisibility(name, visible) {
|
|
15
|
-
const field = this.childCollection.schema.fields[name];
|
|
16
|
-
if (!field) {
|
|
17
|
-
throw new Error(`No such field '${name}'`);
|
|
18
|
-
}
|
|
19
|
-
if (field.type === 'Column' && field.isPrimaryKey) {
|
|
20
|
-
throw new Error(`Cannot hide primary key`);
|
|
21
|
-
}
|
|
22
|
-
if (!visible)
|
|
23
|
-
this.unpublished.add(name);
|
|
24
|
-
else
|
|
25
|
-
this.unpublished.delete(name);
|
|
26
|
-
this.markSchemaAsDirty();
|
|
27
|
-
}
|
|
28
|
-
async create(caller, data) {
|
|
29
|
-
const records = await super.create(caller, data);
|
|
30
|
-
return records.map(childRecord => {
|
|
31
|
-
const record = {};
|
|
32
|
-
for (const key of Object.keys(childRecord))
|
|
33
|
-
if (!this.unpublished.has(key))
|
|
34
|
-
record[key] = childRecord[key];
|
|
35
|
-
return record;
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
refineSchema(childSchema) {
|
|
39
|
-
const fields = {};
|
|
40
|
-
for (const [name, field] of Object.entries(childSchema.fields)) {
|
|
41
|
-
if (this.isPublished(name)) {
|
|
42
|
-
fields[name] = field;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
return { ...childSchema, fields };
|
|
46
|
-
}
|
|
47
|
-
isPublished(name) {
|
|
48
|
-
const field = this.childCollection.schema.fields[name];
|
|
49
|
-
return (!this.unpublished.has(name) &&
|
|
50
|
-
// Columns have no special requirements
|
|
51
|
-
(field.type === 'Column' ||
|
|
52
|
-
// Many to one, one to one and one to many need the foreign key to be published
|
|
53
|
-
(field.type === 'ManyToOne' && this.isPublished(field.foreignKey)) ||
|
|
54
|
-
((field.type === 'OneToOne' || field.type === 'OneToMany') &&
|
|
55
|
-
this.dataSource.getCollection(field.foreignCollection).isPublished(field.originKey)) ||
|
|
56
|
-
// Many to many relations depend on both foreignKey and originKey to be published
|
|
57
|
-
(field.type === 'ManyToMany' &&
|
|
58
|
-
this.dataSource.getCollection(field.throughCollection).isPublished(field.foreignKey) &&
|
|
59
|
-
this.dataSource.getCollection(field.throughCollection).isPublished(field.originKey))));
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
exports.default = PublicationCollectionDecorator;
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWNvcmF0b3JzL3B1YmxpY2F0aW9uL2NvbGxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxtRkFBMEQ7QUFHMUQsMENBQTBDO0FBQzFDLE1BQXFCLDhCQUErQixTQUFRLDhCQUFtQjtJQUEvRTs7UUFFbUIsZ0JBQVcsR0FBZ0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQTREeEQsQ0FBQztJQTFEQyx1Q0FBdUM7SUFDdkMscUJBQXFCLENBQUMsSUFBWSxFQUFFLE9BQWdCO1FBQ2xELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV2RCxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsSUFBSSxHQUFHLENBQUMsQ0FBQztTQUM1QztRQUVELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRTtZQUNqRCxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7U0FDNUM7UUFFRCxJQUFJLENBQUMsT0FBTztZQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDOztZQUNwQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRVEsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFjLEVBQUUsSUFBa0I7UUFDdEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVqRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDL0IsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ2xCLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7b0JBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVqRSxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFa0IsWUFBWSxDQUFDLFdBQTZCO1FBQzNELE1BQU0sTUFBTSxHQUFnQyxFQUFFLENBQUM7UUFFL0MsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzlELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDMUIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQzthQUN0QjtTQUNGO1FBRUQsT0FBTyxFQUFFLEdBQUcsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFTyxXQUFXLENBQUMsSUFBWTtRQUM5QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdkQsT0FBTyxDQUNMLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQzNCLHVDQUF1QztZQUN2QyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUTtnQkFDdEIsK0VBQStFO2dCQUMvRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNsRSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxVQUFVLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUM7b0JBQ3hELElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3RGLGlGQUFpRjtnQkFDakYsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLFlBQVk7b0JBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO29CQUNwRixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FDMUYsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQTlERCxpREE4REMifQ==
|