@forestadmin/datasource-replica 1.0.0 → 1.0.1
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/cache-interface/collection.d.ts +54 -0
- package/dist/cache-interface/collection.js +89 -0
- package/dist/cache-interface/datasource.d.ts +14 -0
- package/dist/cache-interface/datasource.js +33 -0
- package/dist/decorators/schema/collection.d.ts +8 -0
- package/dist/decorators/schema/collection.js +35 -0
- package/dist/decorators/schema/data-source.d.ts +9 -0
- package/dist/decorators/schema/data-source.js +18 -0
- package/dist/decorators/sync/collection.d.ts +15 -0
- package/dist/decorators/sync/collection.js +107 -0
- package/dist/decorators/sync/data-source.d.ts +9 -0
- package/dist/decorators/sync/data-source.js +15 -0
- package/dist/decorators/write/collection.d.ts +11 -0
- package/dist/decorators/write/collection.js +54 -0
- package/dist/decorators/write/data-source.d.ts +8 -0
- package/dist/decorators/write/data-source.js +23 -0
- package/dist/flattener.d.ts +3 -0
- package/dist/flattener.js +59 -0
- package/dist/index.d.ts +6 -0
- package/dist/options/flattener/options.d.ts +5 -0
- package/dist/options/flattener/options.js +103 -0
- package/dist/options/flattener/schema.d.ts +8 -0
- package/dist/options/flattener/schema.js +39 -0
- package/dist/options/index.d.ts +5 -0
- package/dist/options/index.js +37 -0
- package/dist/options/schema/analyzer.d.ts +11 -0
- package/dist/options/schema/analyzer.js +53 -0
- package/dist/options/schema/index.d.ts +6 -0
- package/dist/options/schema/index.js +43 -0
- package/dist/options/utils.d.ts +3 -0
- package/dist/options/utils.js +8 -0
- package/dist/sequelize.d.ts +6 -0
- package/dist/sequelize.js +122 -0
- package/dist/synchronization/analysis-passthrough.d.ts +20 -0
- package/dist/synchronization/analysis-passthrough.js +79 -0
- package/dist/synchronization/cache-target.d.ts +15 -0
- package/dist/synchronization/cache-target.js +85 -0
- package/dist/synchronization/customer-source.d.ts +31 -0
- package/dist/synchronization/customer-source.js +188 -0
- package/dist/types.d.ts +176 -0
- package/dist/types.js +11 -0
- package/dist/utils.d.ts +7 -0
- package/dist/utils.js +35 -0
- package/package.json +3 -3
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { TAggregateResult, TAggregation, TFilter, TPaginatedFilter, TRow } from '@forestadmin/datasource-customizer';
|
|
2
|
+
import { Caller, Collection } from '@forestadmin/datasource-toolkit';
|
|
3
|
+
export default class CacheCollectionInterface {
|
|
4
|
+
private collection;
|
|
5
|
+
private caller;
|
|
6
|
+
constructor(collection: Collection, caller: Caller);
|
|
7
|
+
/**
|
|
8
|
+
* List multiple records
|
|
9
|
+
* @param filter the filter used to select the records to list
|
|
10
|
+
* @param projection an array of fields name representing the data to select
|
|
11
|
+
* @example
|
|
12
|
+
* .list({
|
|
13
|
+
* conditionTree: {
|
|
14
|
+
* aggregator: 'And',
|
|
15
|
+
* conditions: [{
|
|
16
|
+
* field: 'amountInEur',
|
|
17
|
+
* operator: 'GreaterThan',
|
|
18
|
+
* value: 1000
|
|
19
|
+
* }, {
|
|
20
|
+
* field: 'description',
|
|
21
|
+
* operator: 'Contains',
|
|
22
|
+
* value: 'Refund',
|
|
23
|
+
* }],
|
|
24
|
+
* page: { limit: 10, skip: 0 },
|
|
25
|
+
* sort: [{ field: 'id', ascending: true }]
|
|
26
|
+
* }
|
|
27
|
+
* }, ['id', 'amountInEur', 'description']);
|
|
28
|
+
*/
|
|
29
|
+
list(filter: TPaginatedFilter, projection: string[]): Promise<TRow[]>;
|
|
30
|
+
/**
|
|
31
|
+
* Aggregate a list of records
|
|
32
|
+
* @param filter the filter used to list the records to aggregate
|
|
33
|
+
* @param aggregation the aggregation to apply
|
|
34
|
+
* @param limit the maximum number of result to return
|
|
35
|
+
* @example
|
|
36
|
+
* .aggregate({
|
|
37
|
+
* conditionTree: {
|
|
38
|
+
* field: "user:company:id",
|
|
39
|
+
* operator: "In",
|
|
40
|
+
* value: records.map((r) => r.id),
|
|
41
|
+
* },
|
|
42
|
+
* }, {
|
|
43
|
+
* operation: "Sum",
|
|
44
|
+
* field: "amountInEur",
|
|
45
|
+
* groups: [{ field: "user:company:id" }],
|
|
46
|
+
* }, 10);
|
|
47
|
+
*/
|
|
48
|
+
aggregate(filter: TFilter, aggregation: TAggregation, limit?: number): Promise<TAggregateResult[]>;
|
|
49
|
+
private buildFilter;
|
|
50
|
+
private buildPaginatedFilter;
|
|
51
|
+
private buildProjection;
|
|
52
|
+
private buildAggregation;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=collection.d.ts.map
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const datasource_toolkit_1 = require("@forestadmin/datasource-toolkit");
|
|
4
|
+
class CacheCollectionInterface {
|
|
5
|
+
constructor(collection, caller) {
|
|
6
|
+
this.caller = caller;
|
|
7
|
+
this.collection = collection;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* List multiple records
|
|
11
|
+
* @param filter the filter used to select the records to list
|
|
12
|
+
* @param projection an array of fields name representing the data to select
|
|
13
|
+
* @example
|
|
14
|
+
* .list({
|
|
15
|
+
* conditionTree: {
|
|
16
|
+
* aggregator: 'And',
|
|
17
|
+
* conditions: [{
|
|
18
|
+
* field: 'amountInEur',
|
|
19
|
+
* operator: 'GreaterThan',
|
|
20
|
+
* value: 1000
|
|
21
|
+
* }, {
|
|
22
|
+
* field: 'description',
|
|
23
|
+
* operator: 'Contains',
|
|
24
|
+
* value: 'Refund',
|
|
25
|
+
* }],
|
|
26
|
+
* page: { limit: 10, skip: 0 },
|
|
27
|
+
* sort: [{ field: 'id', ascending: true }]
|
|
28
|
+
* }
|
|
29
|
+
* }, ['id', 'amountInEur', 'description']);
|
|
30
|
+
*/
|
|
31
|
+
list(filter, projection) {
|
|
32
|
+
const filterInstance = this.buildPaginatedFilter(filter);
|
|
33
|
+
const projectionInstance = this.buildProjection(projection);
|
|
34
|
+
const rows = this.collection.list(this.caller, filterInstance, projectionInstance);
|
|
35
|
+
return rows;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Aggregate a list of records
|
|
39
|
+
* @param filter the filter used to list the records to aggregate
|
|
40
|
+
* @param aggregation the aggregation to apply
|
|
41
|
+
* @param limit the maximum number of result to return
|
|
42
|
+
* @example
|
|
43
|
+
* .aggregate({
|
|
44
|
+
* conditionTree: {
|
|
45
|
+
* field: "user:company:id",
|
|
46
|
+
* operator: "In",
|
|
47
|
+
* value: records.map((r) => r.id),
|
|
48
|
+
* },
|
|
49
|
+
* }, {
|
|
50
|
+
* operation: "Sum",
|
|
51
|
+
* field: "amountInEur",
|
|
52
|
+
* groups: [{ field: "user:company:id" }],
|
|
53
|
+
* }, 10);
|
|
54
|
+
*/
|
|
55
|
+
async aggregate(filter, aggregation, limit) {
|
|
56
|
+
const filterInstance = this.buildFilter(filter);
|
|
57
|
+
const aggregationInstance = this.buildAggregation(aggregation);
|
|
58
|
+
const result = await this.collection.aggregate(this.caller, filterInstance, aggregationInstance, limit);
|
|
59
|
+
return result;
|
|
60
|
+
}
|
|
61
|
+
buildFilter(filter) {
|
|
62
|
+
return filter
|
|
63
|
+
? new datasource_toolkit_1.Filter({
|
|
64
|
+
...filter,
|
|
65
|
+
conditionTree: filter.conditionTree
|
|
66
|
+
? datasource_toolkit_1.ConditionTreeFactory.fromPlainObject(filter.conditionTree)
|
|
67
|
+
: undefined,
|
|
68
|
+
})
|
|
69
|
+
: null;
|
|
70
|
+
}
|
|
71
|
+
buildPaginatedFilter(filter) {
|
|
72
|
+
return new datasource_toolkit_1.PaginatedFilter({
|
|
73
|
+
...filter,
|
|
74
|
+
conditionTree: filter?.conditionTree
|
|
75
|
+
? datasource_toolkit_1.ConditionTreeFactory.fromPlainObject(filter.conditionTree)
|
|
76
|
+
: undefined,
|
|
77
|
+
sort: filter.sort ? new datasource_toolkit_1.Sort(...filter.sort) : undefined,
|
|
78
|
+
page: filter.page ? new datasource_toolkit_1.Page(filter.page.skip, filter.page.limit) : undefined,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
buildProjection(projection) {
|
|
82
|
+
return new datasource_toolkit_1.Projection(...projection);
|
|
83
|
+
}
|
|
84
|
+
buildAggregation(aggregation) {
|
|
85
|
+
return new datasource_toolkit_1.Aggregation(aggregation);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
exports.default = CacheCollectionInterface;
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jYWNoZS1pbnRlcmZhY2UvY29sbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQU9BLHdFQVV5QztBQUV6QyxNQUFxQix3QkFBd0I7SUFJM0MsWUFBWSxVQUFzQixFQUFFLE1BQWM7UUFDaEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FxQkc7SUFDSCxJQUFJLENBQUMsTUFBd0IsRUFBRSxVQUFvQjtRQUNqRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFFbkYsT0FBTyxJQUF1QixDQUFDO0lBQ2pDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FpQkc7SUFDSCxLQUFLLENBQUMsU0FBUyxDQUNiLE1BQWUsRUFDZixXQUF5QixFQUN6QixLQUFjO1FBRWQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoRCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMvRCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUM1QyxJQUFJLENBQUMsTUFBTSxFQUNYLGNBQWMsRUFDZCxtQkFBbUIsRUFDbkIsS0FBSyxDQUNOLENBQUM7UUFFRixPQUFPLE1BQTRCLENBQUM7SUFDdEMsQ0FBQztJQUVPLFdBQVcsQ0FBQyxNQUFlO1FBQ2pDLE9BQU8sTUFBTTtZQUNYLENBQUMsQ0FBQyxJQUFJLDJCQUFNLENBQUM7Z0JBQ1QsR0FBRyxNQUFNO2dCQUNULGFBQWEsRUFBRSxNQUFNLENBQUMsYUFBYTtvQkFDakMsQ0FBQyxDQUFDLHlDQUFvQixDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO29CQUM1RCxDQUFDLENBQUMsU0FBUzthQUNkLENBQUM7WUFDSixDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ1gsQ0FBQztJQUVPLG9CQUFvQixDQUFDLE1BQXdCO1FBQ25ELE9BQU8sSUFBSSxvQ0FBZSxDQUFDO1lBQ3pCLEdBQUcsTUFBTTtZQUNULGFBQWEsRUFBRSxNQUFNLEVBQUUsYUFBYTtnQkFDbEMsQ0FBQyxDQUFDLHlDQUFvQixDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDO2dCQUM1RCxDQUFDLENBQUMsU0FBUztZQUNiLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLHlCQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7WUFDeEQsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUkseUJBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO1NBQzlFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxlQUFlLENBQUMsVUFBb0I7UUFDMUMsT0FBTyxJQUFJLCtCQUFVLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsV0FBeUI7UUFDaEQsT0FBTyxJQUFJLGdDQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdEMsQ0FBQztDQUNGO0FBdkdELDJDQXVHQyJ9
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { DataSource } from '@forestadmin/datasource-toolkit';
|
|
2
|
+
import CacheCollectionInterface from './collection';
|
|
3
|
+
/** DataSource wrapper which accepts plain objects in all methods */
|
|
4
|
+
export default class CacheDataSourceInterface {
|
|
5
|
+
private dataSource;
|
|
6
|
+
private caller;
|
|
7
|
+
constructor(dataSource: DataSource);
|
|
8
|
+
/**
|
|
9
|
+
* Get a collection from a datasource
|
|
10
|
+
* @param name the name of the collection
|
|
11
|
+
*/
|
|
12
|
+
getCollection(name: string): CacheCollectionInterface;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=datasource.d.ts.map
|
|
@@ -0,0 +1,33 @@
|
|
|
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_1 = __importDefault(require("./collection"));
|
|
7
|
+
/** DataSource wrapper which accepts plain objects in all methods */
|
|
8
|
+
class CacheDataSourceInterface {
|
|
9
|
+
constructor(dataSource) {
|
|
10
|
+
this.caller = {
|
|
11
|
+
id: 0,
|
|
12
|
+
email: 'datasource-replica@forestadmin.com',
|
|
13
|
+
firstName: 'Datasource',
|
|
14
|
+
lastName: 'Replica',
|
|
15
|
+
renderingId: 0,
|
|
16
|
+
role: 'system',
|
|
17
|
+
tags: {},
|
|
18
|
+
team: 'system',
|
|
19
|
+
timezone: 'UTC',
|
|
20
|
+
requestId: '',
|
|
21
|
+
};
|
|
22
|
+
this.dataSource = dataSource;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get a collection from a datasource
|
|
26
|
+
* @param name the name of the collection
|
|
27
|
+
*/
|
|
28
|
+
getCollection(name) {
|
|
29
|
+
return new collection_1.default(this.dataSource.getCollection(name), this.caller);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.default = CacheDataSourceInterface;
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jYWNoZS1pbnRlcmZhY2UvZGF0YXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLDhEQUFvRDtBQUVwRCxvRUFBb0U7QUFDcEUsTUFBcUIsd0JBQXdCO0lBZTNDLFlBQVksVUFBc0I7UUFiMUIsV0FBTSxHQUFXO1lBQ3ZCLEVBQUUsRUFBRSxDQUFDO1lBQ0wsS0FBSyxFQUFFLG9DQUFvQztZQUMzQyxTQUFTLEVBQUUsWUFBWTtZQUN2QixRQUFRLEVBQUUsU0FBUztZQUNuQixXQUFXLEVBQUUsQ0FBQztZQUNkLElBQUksRUFBRSxRQUFRO1lBQ2QsSUFBSSxFQUFFLEVBQUU7WUFDUixJQUFJLEVBQUUsUUFBUTtZQUNkLFFBQVEsRUFBRSxLQUFLO1lBQ2YsU0FBUyxFQUFFLEVBQUU7U0FDZCxDQUFDO1FBR0EsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7T0FHRztJQUNILGFBQWEsQ0FBQyxJQUFZO1FBQ3hCLE9BQU8sSUFBSSxvQkFBd0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEYsQ0FBQztDQUNGO0FBMUJELDJDQTBCQyJ9
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { CollectionDecorator, CollectionSchema } from '@forestadmin/datasource-toolkit';
|
|
2
|
+
import SchemaDataSourceDecorator from './data-source';
|
|
3
|
+
export default class SchemaCollectionDecorator extends CollectionDecorator {
|
|
4
|
+
dataSource: SchemaDataSourceDecorator;
|
|
5
|
+
protected refineSchema(subSchema: CollectionSchema): CollectionSchema;
|
|
6
|
+
private computeType;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=collection.d.ts.map
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const datasource_toolkit_1 = require("@forestadmin/datasource-toolkit");
|
|
4
|
+
const types_1 = require("../../types");
|
|
5
|
+
class SchemaCollectionDecorator extends datasource_toolkit_1.CollectionDecorator {
|
|
6
|
+
refineSchema(subSchema) {
|
|
7
|
+
const baseFields = this.dataSource.getFields(this.name);
|
|
8
|
+
const newSchema = { ...subSchema, fields: { ...subSchema.fields } };
|
|
9
|
+
for (const [key, field] of Object.entries(newSchema.fields)) {
|
|
10
|
+
if (field.type === 'Column') {
|
|
11
|
+
const baseField = baseFields[key];
|
|
12
|
+
newSchema.fields[key] = {
|
|
13
|
+
...field,
|
|
14
|
+
columnType: this.computeType(baseField),
|
|
15
|
+
isReadOnly: baseField.isReadOnly,
|
|
16
|
+
defaultValue: baseField.defaultValue,
|
|
17
|
+
validation: baseField.validation,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return newSchema;
|
|
22
|
+
}
|
|
23
|
+
computeType(field) {
|
|
24
|
+
if ((0, types_1.isLeafField)(field)) {
|
|
25
|
+
return field.type === 'Integer' ? 'Number' : field.type;
|
|
26
|
+
}
|
|
27
|
+
if (Array.isArray(field)) {
|
|
28
|
+
return [this.computeType(field[0])];
|
|
29
|
+
}
|
|
30
|
+
const entries = Object.entries(field).map(([key, value]) => [key, this.computeType(value)]);
|
|
31
|
+
return Object.fromEntries(entries);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.default = SchemaCollectionDecorator;
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWNvcmF0b3JzL3NjaGVtYS9jb2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsd0VBQW9HO0FBR3BHLHVDQUE0RDtBQUU1RCxNQUFxQix5QkFBMEIsU0FBUSx3Q0FBbUI7SUFHckQsWUFBWSxDQUFDLFNBQTJCO1FBQ3pELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RCxNQUFNLFNBQVMsR0FBRyxFQUFFLEdBQUcsU0FBUyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7UUFFcEUsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzNELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7Z0JBQzNCLE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQWMsQ0FBQztnQkFDL0MsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRztvQkFDdEIsR0FBRyxLQUFLO29CQUNSLFVBQVUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztvQkFDdkMsVUFBVSxFQUFFLFNBQVMsQ0FBQyxVQUFVO29CQUNoQyxZQUFZLEVBQUUsU0FBUyxDQUFDLFlBQVk7b0JBQ3BDLFVBQVUsRUFBRSxTQUFTLENBQUMsVUFBVTtpQkFDakMsQ0FBQzthQUNIO1NBQ0Y7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRU8sV0FBVyxDQUFDLEtBQVk7UUFDOUIsSUFBSSxJQUFBLG1CQUFXLEVBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdEIsT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO1NBQ3pEO1FBRUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDckM7UUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU1RixPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckMsQ0FBQztDQUNGO0FBcENELDRDQW9DQyJ9
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { DataSource, DataSourceDecorator } from '@forestadmin/datasource-toolkit';
|
|
2
|
+
import SchemaCollectionDecorator from './collection';
|
|
3
|
+
import { CollectionReplicaSchema, ResolvedOptions } from '../../types';
|
|
4
|
+
export default class SchemaDataSourceDecorator extends DataSourceDecorator<SchemaCollectionDecorator> {
|
|
5
|
+
private readonly flatSchema;
|
|
6
|
+
constructor(childDataSource: DataSource, options: ResolvedOptions);
|
|
7
|
+
getFields(name: string): CollectionReplicaSchema['fields'];
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=data-source.d.ts.map
|
|
@@ -0,0 +1,18 @@
|
|
|
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 SchemaDataSourceDecorator extends datasource_toolkit_1.DataSourceDecorator {
|
|
9
|
+
constructor(childDataSource, options) {
|
|
10
|
+
super(childDataSource, collection_1.default);
|
|
11
|
+
this.flatSchema = options.flattenSchema;
|
|
12
|
+
}
|
|
13
|
+
getFields(name) {
|
|
14
|
+
return this.flatSchema.find(c => c.name === name).fields;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.default = SchemaDataSourceDecorator;
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVjb3JhdG9ycy9zY2hlbWEvZGF0YS1zb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx3RUFBa0Y7QUFFbEYsOERBQXFEO0FBR3JELE1BQXFCLHlCQUEwQixTQUFRLHdDQUE4QztJQUduRyxZQUFZLGVBQTJCLEVBQUUsT0FBd0I7UUFDL0QsS0FBSyxDQUFDLGVBQWUsRUFBRSxvQkFBeUIsQ0FBQyxDQUFDO1FBRWxELElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztJQUMxQyxDQUFDO0lBRUQsU0FBUyxDQUFDLElBQVk7UUFDcEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQzNELENBQUM7Q0FDRjtBQVpELDRDQVlDIn0=
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type TriggerSyncDataSourceDecorator from './data-source';
|
|
2
|
+
import type { AggregateResult, Aggregation, Caller, Filter, PaginatedFilter, Projection, RecordData } from '@forestadmin/datasource-toolkit';
|
|
3
|
+
import { CollectionDecorator } from '@forestadmin/datasource-toolkit';
|
|
4
|
+
export default class SyncCollectionDecorator extends CollectionDecorator {
|
|
5
|
+
dataSource: TriggerSyncDataSourceDecorator;
|
|
6
|
+
create(caller: Caller, data: RecordData[]): Promise<RecordData[]>;
|
|
7
|
+
update(caller: Caller, filter: Filter, patch: RecordData): Promise<void>;
|
|
8
|
+
delete(caller: Caller, filter: Filter): Promise<void>;
|
|
9
|
+
list(caller: Caller, filter: PaginatedFilter, projection: Projection): Promise<RecordData[]>;
|
|
10
|
+
aggregate(caller: Caller, filter: Filter, aggregation: Aggregation, limit?: number): Promise<AggregateResult[]>;
|
|
11
|
+
private getLinkedCollections;
|
|
12
|
+
private getCollectionsFromProjection;
|
|
13
|
+
private getCollectionFromPath;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=collection.d.ts.map
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const datasource_toolkit_1 = require("@forestadmin/datasource-toolkit");
|
|
4
|
+
class SyncCollectionDecorator extends datasource_toolkit_1.CollectionDecorator {
|
|
5
|
+
async create(caller, data) {
|
|
6
|
+
const { options } = this.dataSource;
|
|
7
|
+
const records = await this.childCollection.create(caller, data);
|
|
8
|
+
if (options.pullDeltaOnAfterWrite) {
|
|
9
|
+
await options.source.queuePullDelta({
|
|
10
|
+
name: 'after-create',
|
|
11
|
+
collection: this.name,
|
|
12
|
+
caller,
|
|
13
|
+
affectedCollections: [this.name],
|
|
14
|
+
records,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
return records;
|
|
18
|
+
}
|
|
19
|
+
async update(caller, filter, patch) {
|
|
20
|
+
const { options } = this.dataSource;
|
|
21
|
+
await super.update(caller, filter, patch);
|
|
22
|
+
if (options.pullDeltaOnAfterWrite) {
|
|
23
|
+
await options.source.queuePullDelta({
|
|
24
|
+
name: 'after-update',
|
|
25
|
+
collection: this.name,
|
|
26
|
+
affectedCollections: [this.name],
|
|
27
|
+
caller,
|
|
28
|
+
filter: filter,
|
|
29
|
+
patch,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async delete(caller, filter) {
|
|
34
|
+
const { options } = this.dataSource;
|
|
35
|
+
await super.delete(caller, filter);
|
|
36
|
+
if (options.pullDeltaOnAfterWrite) {
|
|
37
|
+
// Deletes may cascade to other collections!
|
|
38
|
+
// Let's find out which one are affected assuming that all deletes cascade
|
|
39
|
+
// (which is the worst case scenario)
|
|
40
|
+
await options.source.queuePullDelta({
|
|
41
|
+
name: 'after-delete',
|
|
42
|
+
collection: this.name,
|
|
43
|
+
affectedCollections: this.getLinkedCollections(new Set()),
|
|
44
|
+
caller,
|
|
45
|
+
filter: filter,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
async list(caller, filter, projection) {
|
|
50
|
+
const { options } = this.dataSource;
|
|
51
|
+
if (options.pullDeltaOnBeforeAccess) {
|
|
52
|
+
await options.source.queuePullDelta({
|
|
53
|
+
name: 'before-list',
|
|
54
|
+
collection: this.name,
|
|
55
|
+
affectedCollections: this.getCollectionsFromProjection(projection),
|
|
56
|
+
caller,
|
|
57
|
+
filter: filter,
|
|
58
|
+
projection,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
return super.list(caller, filter, projection);
|
|
62
|
+
}
|
|
63
|
+
async aggregate(caller, filter, aggregation, limit) {
|
|
64
|
+
const { options } = this.dataSource;
|
|
65
|
+
if (options.pullDeltaOnBeforeAccess) {
|
|
66
|
+
await options.source.queuePullDelta({
|
|
67
|
+
name: 'before-aggregate',
|
|
68
|
+
collection: this.name,
|
|
69
|
+
affectedCollections: this.getCollectionsFromProjection(aggregation.projection),
|
|
70
|
+
caller,
|
|
71
|
+
filter: filter,
|
|
72
|
+
aggregation,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
return super.aggregate(caller, filter, aggregation, limit);
|
|
76
|
+
}
|
|
77
|
+
getLinkedCollections(exclude) {
|
|
78
|
+
const set = new Set();
|
|
79
|
+
set.add(this.name);
|
|
80
|
+
Object.values(this.schema.fields).forEach(f => {
|
|
81
|
+
if (f.type === 'ManyToOne' || f.type === 'OneToOne') {
|
|
82
|
+
const collection = this.dataSource.getCollection(f.foreignCollection);
|
|
83
|
+
if (!exclude.has(collection.name)) {
|
|
84
|
+
collection.getLinkedCollections(set).forEach(c => set.add(c));
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
return [...set];
|
|
89
|
+
}
|
|
90
|
+
getCollectionsFromProjection(projection) {
|
|
91
|
+
const set = new Set();
|
|
92
|
+
for (const field of projection)
|
|
93
|
+
set.add(this.getCollectionFromPath(field));
|
|
94
|
+
return [...set];
|
|
95
|
+
}
|
|
96
|
+
getCollectionFromPath(path) {
|
|
97
|
+
const [prefix, suffix] = path.split(/:(.*)/);
|
|
98
|
+
const schema = this.childCollection.schema.fields[prefix];
|
|
99
|
+
// FIXME need to handle many to many relationships here
|
|
100
|
+
// the through table is not included, and it should be
|
|
101
|
+
return schema.type === 'Column'
|
|
102
|
+
? this.name
|
|
103
|
+
: this.dataSource.getCollection(schema.foreignCollection).getCollectionFromPath(suffix);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
exports.default = SyncCollectionDecorator;
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWNvcmF0b3JzL3N5bmMvY29sbGVjdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVlBLHdFQUFzRTtBQUV0RSxNQUFxQix1QkFBd0IsU0FBUSx3Q0FBbUI7SUFHN0QsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFjLEVBQUUsSUFBa0I7UUFDdEQsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDcEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFaEUsSUFBSSxPQUFPLENBQUMscUJBQXFCLEVBQUU7WUFDakMsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztnQkFDbEMsSUFBSSxFQUFFLGNBQWM7Z0JBQ3BCLFVBQVUsRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDckIsTUFBTTtnQkFDTixtQkFBbUIsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQ2hDLE9BQU87YUFDUixDQUFDLENBQUM7U0FDSjtRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFUSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQWMsRUFBRSxNQUFjLEVBQUUsS0FBaUI7UUFDckUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFFcEMsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFMUMsSUFBSSxPQUFPLENBQUMscUJBQXFCLEVBQUU7WUFDakMsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztnQkFDbEMsSUFBSSxFQUFFLGNBQWM7Z0JBQ3BCLFVBQVUsRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDckIsbUJBQW1CLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNoQyxNQUFNO2dCQUNOLE1BQU0sRUFBRSxNQUE0QjtnQkFDcEMsS0FBSzthQUNOLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVRLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBYyxFQUFFLE1BQWM7UUFDbEQsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFFcEMsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVuQyxJQUFJLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRTtZQUNqQyw0Q0FBNEM7WUFDNUMsMEVBQTBFO1lBQzFFLHFDQUFxQztZQUNyQyxNQUFNLE9BQU8sQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDO2dCQUNsQyxJQUFJLEVBQUUsY0FBYztnQkFDcEIsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNyQixtQkFBbUIsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDekQsTUFBTTtnQkFDTixNQUFNLEVBQUUsTUFBNEI7YUFDckMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRVEsS0FBSyxDQUFDLElBQUksQ0FDakIsTUFBYyxFQUNkLE1BQXVCLEVBQ3ZCLFVBQXNCO1FBRXRCLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRXBDLElBQUksT0FBTyxDQUFDLHVCQUF1QixFQUFFO1lBQ25DLE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7Z0JBQ2xDLElBQUksRUFBRSxhQUFhO2dCQUNuQixVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ3JCLG1CQUFtQixFQUFFLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxVQUFVLENBQUM7Z0JBQ2xFLE1BQU07Z0JBQ04sTUFBTSxFQUFFLE1BQXFDO2dCQUM3QyxVQUFVO2FBQ1gsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRVEsS0FBSyxDQUFDLFNBQVMsQ0FDdEIsTUFBYyxFQUNkLE1BQWMsRUFDZCxXQUF3QixFQUN4QixLQUFjO1FBRWQsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFFcEMsSUFBSSxPQUFPLENBQUMsdUJBQXVCLEVBQUU7WUFDbkMsTUFBTSxPQUFPLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQztnQkFDbEMsSUFBSSxFQUFFLGtCQUFrQjtnQkFDeEIsVUFBVSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNyQixtQkFBbUIsRUFBRSxJQUFJLENBQUMsNEJBQTRCLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztnQkFDOUUsTUFBTTtnQkFDTixNQUFNLEVBQUUsTUFBNEI7Z0JBQ3BDLFdBQVc7YUFDWixDQUFDLENBQUM7U0FDSjtRQUVELE9BQU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRU8sb0JBQW9CLENBQUMsT0FBb0I7UUFDL0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUM5QixHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVuQixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzVDLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxXQUFXLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxVQUFVLEVBQUU7Z0JBQ25ELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUV0RSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ2pDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQy9EO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFTyw0QkFBNEIsQ0FBQyxVQUFzQjtRQUN6RCxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBQzlCLEtBQUssTUFBTSxLQUFLLElBQUksVUFBVTtZQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFM0UsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUVPLHFCQUFxQixDQUFDLElBQVk7UUFDeEMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUxRCx1REFBdUQ7UUFDdkQsc0RBQXNEO1FBQ3RELE9BQU8sTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRO1lBQzdCLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSTtZQUNYLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1RixDQUFDO0NBQ0Y7QUFySUQsMENBcUlDIn0=
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ResolvedOptions } from '../../types';
|
|
2
|
+
import type { DataSource } from '@forestadmin/datasource-toolkit';
|
|
3
|
+
import { DataSourceDecorator } from '@forestadmin/datasource-toolkit';
|
|
4
|
+
import SyncCollectionDecorator from './collection';
|
|
5
|
+
export default class TriggerSyncDataSourceDecorator extends DataSourceDecorator<SyncCollectionDecorator> {
|
|
6
|
+
options: ResolvedOptions;
|
|
7
|
+
constructor(childDataSource: DataSource, options: ResolvedOptions);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=data-source.d.ts.map
|
|
@@ -0,0 +1,15 @@
|
|
|
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 TriggerSyncDataSourceDecorator extends datasource_toolkit_1.DataSourceDecorator {
|
|
9
|
+
constructor(childDataSource, options) {
|
|
10
|
+
super(childDataSource, collection_1.default);
|
|
11
|
+
this.options = options;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
exports.default = TriggerSyncDataSourceDecorator;
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVjb3JhdG9ycy9zeW5jL2RhdGEtc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBR0Esd0VBQXNFO0FBRXRFLDhEQUFtRDtBQUVuRCxNQUFxQiw4QkFBK0IsU0FBUSx3Q0FBNEM7SUFHdEcsWUFBWSxlQUEyQixFQUFFLE9BQXdCO1FBQy9ELEtBQUssQ0FBQyxlQUFlLEVBQUUsb0JBQXVCLENBQUMsQ0FBQztRQUVoRCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN6QixDQUFDO0NBQ0Y7QUFSRCxpREFRQyJ9
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type WriteDataSourceDecorator from './data-source';
|
|
2
|
+
import type { Caller, Filter, RecordData } from '@forestadmin/datasource-toolkit';
|
|
3
|
+
import { CollectionDecorator } from '@forestadmin/datasource-toolkit';
|
|
4
|
+
export default class WriteCollectionDecorator extends CollectionDecorator {
|
|
5
|
+
dataSource: WriteDataSourceDecorator;
|
|
6
|
+
create(caller: Caller, data: RecordData[]): Promise<RecordData[]>;
|
|
7
|
+
update(caller: Caller, filter: Filter, patch: RecordData): Promise<void>;
|
|
8
|
+
delete(caller: Caller, filter: Filter): Promise<void>;
|
|
9
|
+
private get options();
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=collection.d.ts.map
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const datasource_toolkit_1 = require("@forestadmin/datasource-toolkit");
|
|
4
|
+
class WriteCollectionDecorator extends datasource_toolkit_1.CollectionDecorator {
|
|
5
|
+
async create(caller, data) {
|
|
6
|
+
// we actually can't tell the db not to perform the creation...
|
|
7
|
+
if (!this.options.createRecordHandler) {
|
|
8
|
+
throw new datasource_toolkit_1.UnprocessableError('This collection does not supports creations');
|
|
9
|
+
}
|
|
10
|
+
if (this.dataSource.options.schema.find(({ name }) => name === this.name)) {
|
|
11
|
+
// I am a root collection, I can forward the creation to the target
|
|
12
|
+
const promises = data.map(async (record) => {
|
|
13
|
+
const newRecord = await this.options.createRecordHandler(this.name, record);
|
|
14
|
+
Object.assign(record, newRecord ?? {});
|
|
15
|
+
});
|
|
16
|
+
await Promise.all(promises);
|
|
17
|
+
}
|
|
18
|
+
return this.childCollection.create(caller, data);
|
|
19
|
+
}
|
|
20
|
+
async update(caller, filter, patch) {
|
|
21
|
+
if (!this.options.updateRecordHandler) {
|
|
22
|
+
throw new datasource_toolkit_1.UnprocessableError('This collection does not supports updates');
|
|
23
|
+
}
|
|
24
|
+
if (this.dataSource.options.schema.find(({ name }) => name === this.name)) {
|
|
25
|
+
// I am a root collection, I can forward the update to the target
|
|
26
|
+
const recordsPks = await super.list(caller, filter, new datasource_toolkit_1.Projection().withPks(this));
|
|
27
|
+
const promises = recordsPks.map(async (record) => {
|
|
28
|
+
Object.assign(record, patch);
|
|
29
|
+
await this.options.updateRecordHandler(this.name, record);
|
|
30
|
+
});
|
|
31
|
+
await Promise.all(promises);
|
|
32
|
+
}
|
|
33
|
+
return super.update(caller, filter, patch);
|
|
34
|
+
}
|
|
35
|
+
async delete(caller, filter) {
|
|
36
|
+
if (!this.options.deleteRecordHandler) {
|
|
37
|
+
throw new datasource_toolkit_1.UnprocessableError('This collection does not supports deletes');
|
|
38
|
+
}
|
|
39
|
+
if (this.dataSource.options.schema.find(({ name }) => name === this.name)) {
|
|
40
|
+
// I am a root collection, I can forward the delete to the target
|
|
41
|
+
const recordsPks = await super.list(caller, filter, new datasource_toolkit_1.Projection().withPks(this));
|
|
42
|
+
const promises = recordsPks.map(async (record) => {
|
|
43
|
+
await this.options.deleteRecordHandler(this.name, record);
|
|
44
|
+
});
|
|
45
|
+
await Promise.all(promises);
|
|
46
|
+
}
|
|
47
|
+
return super.delete(caller, filter);
|
|
48
|
+
}
|
|
49
|
+
get options() {
|
|
50
|
+
return this.dataSource.options;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.default = WriteCollectionDecorator;
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kZWNvcmF0b3JzL3dyaXRlL2NvbGxlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFJQSx3RUFJeUM7QUFFekMsTUFBcUIsd0JBQXlCLFNBQVEsd0NBQW1CO0lBRzlELEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBYyxFQUFFLElBQWtCO1FBQ3RELCtEQUErRDtRQUMvRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRTtZQUNyQyxNQUFNLElBQUksdUNBQWtCLENBQUMsNkNBQTZDLENBQUMsQ0FBQztTQUM3RTtRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDekUsbUVBQW1FO1lBQ25FLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFDLE1BQU0sRUFBQyxFQUFFO2dCQUN2QyxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDNUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3pDLENBQUMsQ0FBQyxDQUFDO1lBRUgsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzdCO1FBRUQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVRLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBYyxFQUFFLE1BQWMsRUFBRSxLQUFpQjtRQUNyRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRTtZQUNyQyxNQUFNLElBQUksdUNBQWtCLENBQUMsMkNBQTJDLENBQUMsQ0FBQztTQUMzRTtRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDekUsaUVBQWlFO1lBQ2pFLE1BQU0sVUFBVSxHQUFHLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksK0JBQVUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3BGLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFDLE1BQU0sRUFBQyxFQUFFO2dCQUM3QyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDN0IsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDNUQsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDN0I7UUFFRCxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRVEsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFjLEVBQUUsTUFBYztRQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRTtZQUNyQyxNQUFNLElBQUksdUNBQWtCLENBQUMsMkNBQTJDLENBQUMsQ0FBQztTQUMzRTtRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDekUsaUVBQWlFO1lBQ2pFLE1BQU0sVUFBVSxHQUFHLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksK0JBQVUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3BGLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFDLE1BQU0sRUFBQyxFQUFFO2dCQUM3QyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM1RCxDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUM3QjtRQUVELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQVksT0FBTztRQUNqQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBbUMsQ0FBQztJQUM3RCxDQUFDO0NBQ0Y7QUE5REQsMkNBOERDIn0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ResolvedOptions } from '../../types';
|
|
2
|
+
import type { DataSource } from '@forestadmin/datasource-toolkit';
|
|
3
|
+
import { DataSourceDecorator } from '@forestadmin/datasource-toolkit';
|
|
4
|
+
export default class WriteDataSourceDecorator extends DataSourceDecorator {
|
|
5
|
+
options: ResolvedOptions;
|
|
6
|
+
constructor(childDataSource: DataSource, options: ResolvedOptions);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=data-source.d.ts.map
|
|
@@ -0,0 +1,23 @@
|
|
|
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 WriteDataSourceDecorator extends datasource_toolkit_1.DataSourceDecorator {
|
|
9
|
+
constructor(childDataSource, options) {
|
|
10
|
+
super(childDataSource, collection_1.default);
|
|
11
|
+
this.options = options;
|
|
12
|
+
childDataSource.collections.forEach(collection => {
|
|
13
|
+
if ((options.flattenOptions[collection.name]?.asModels.length ||
|
|
14
|
+
options.flattenOptions[collection.name]?.asFields.length) &&
|
|
15
|
+
(options.createRecordHandler || options.updateRecordHandler || options.deleteRecordHandler)) {
|
|
16
|
+
throw new Error('Cannot use flattenOptions with' +
|
|
17
|
+
' createRecordHandler, updateRecordHandler or deleteRecordHandler.');
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
exports.default = WriteDataSourceDecorator;
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZGVjb3JhdG9ycy93cml0ZS9kYXRhLXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUdBLHdFQUFzRTtBQUV0RSw4REFBb0Q7QUFFcEQsTUFBcUIsd0JBQXlCLFNBQVEsd0NBQW1CO0lBR3ZFLFlBQVksZUFBMkIsRUFBRSxPQUF3QjtRQUMvRCxLQUFLLENBQUMsZUFBZSxFQUFFLG9CQUF3QixDQUFDLENBQUM7UUFFakQsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFFdkIsZUFBZSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDL0MsSUFDRSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQyxNQUFNO2dCQUN2RCxPQUFPLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDO2dCQUMzRCxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsSUFBSSxPQUFPLENBQUMsbUJBQW1CLElBQUksT0FBTyxDQUFDLG1CQUFtQixDQUFDLEVBQzNGO2dCQUNBLE1BQU0sSUFBSSxLQUFLLENBQ2IsZ0NBQWdDO29CQUM5QixtRUFBbUUsQ0FDdEUsQ0FBQzthQUNIO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFyQkQsMkNBcUJDIn0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { CollectionReplicaSchema, RecordDataWithCollection } from './types';
|
|
2
|
+
export default function flattenRecord(recordWithCollection: RecordDataWithCollection, fields: CollectionReplicaSchema['fields'], asFields: string[], asModels: string[]): RecordDataWithCollection[];
|
|
3
|
+
//# sourceMappingURL=flattener.d.ts.map
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const utils_1 = require("./utils");
|
|
4
|
+
function flattenRecordRec(recordWithCollection, fields, asFields, asModels) {
|
|
5
|
+
const { collection, record } = recordWithCollection;
|
|
6
|
+
const flattenedRecords = [];
|
|
7
|
+
for (let asModelIndex = 0; asModelIndex < asModels.length; asModelIndex += 1) {
|
|
8
|
+
const asModel = asModels[asModelIndex];
|
|
9
|
+
// Build subAsModels and subAsFields + remove them from asModels and asFields
|
|
10
|
+
const subAsModels = [];
|
|
11
|
+
while (asModels[asModelIndex + 1]?.startsWith(`${asModel}.`)) {
|
|
12
|
+
// asModels must be sorted for this to work
|
|
13
|
+
subAsModels.push(asModels[asModelIndex + 1].substring(asModel.length + 1));
|
|
14
|
+
asModels.splice(asModelIndex + 1, 1);
|
|
15
|
+
}
|
|
16
|
+
const subAsFields = [];
|
|
17
|
+
for (let i = 0; i < asFields.length; i += 1) {
|
|
18
|
+
if (asFields[i].startsWith(`${asModel}.`)) {
|
|
19
|
+
subAsFields.push(asFields[i].substring(asModel.length + 1));
|
|
20
|
+
asFields.splice(i, 1);
|
|
21
|
+
i -= 1;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
// Build schema for subModel + some metadata
|
|
25
|
+
let subFields = (0, utils_1.extractValue)(fields, asModel, false);
|
|
26
|
+
const isArray = Array.isArray(subFields);
|
|
27
|
+
if (isArray)
|
|
28
|
+
[subFields] = subFields;
|
|
29
|
+
const isPrimitive = typeof subFields.type === 'string';
|
|
30
|
+
// Recurse
|
|
31
|
+
let subRecords = (0, utils_1.extractValue)(record, asModel, true);
|
|
32
|
+
if (subRecords) {
|
|
33
|
+
if (!isArray)
|
|
34
|
+
subRecords = [subRecords];
|
|
35
|
+
if (isPrimitive)
|
|
36
|
+
subRecords = subRecords.map(v => ({ value: v }));
|
|
37
|
+
for (const [index, subRecord] of subRecords.entries()) {
|
|
38
|
+
if (subRecord !== null && subRecord !== undefined) {
|
|
39
|
+
const recordId = (0, utils_1.getRecordId)(fields, record);
|
|
40
|
+
// eslint-disable-next-line no-underscore-dangle
|
|
41
|
+
subRecord._fid = isArray ? `${recordId}.${asModel}.${index}` : `${recordId}.${asModel}`;
|
|
42
|
+
// eslint-disable-next-line no-underscore-dangle
|
|
43
|
+
subRecord._fpid = recordId;
|
|
44
|
+
flattenedRecords.push(...flattenRecordRec({ collection: (0, utils_1.escape) `${collection}.${asModel}`, record: subRecord }, subFields, subAsFields, subAsModels));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
for (const asField of asFields) {
|
|
50
|
+
record[asField.replace('.', '@@@')] = (0, utils_1.extractValue)(record, asField, true);
|
|
51
|
+
}
|
|
52
|
+
flattenedRecords.push(recordWithCollection);
|
|
53
|
+
return flattenedRecords;
|
|
54
|
+
}
|
|
55
|
+
function flattenRecord(recordWithCollection, fields, asFields, asModels) {
|
|
56
|
+
return flattenRecordRec((0, utils_1.deepclone)(recordWithCollection), fields, [...asFields].sort(), [...asModels].sort());
|
|
57
|
+
}
|
|
58
|
+
exports.default = flattenRecord;
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhdHRlbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ZsYXR0ZW5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLG1DQUF1RTtBQUV2RSxTQUFTLGdCQUFnQixDQUN2QixvQkFBOEMsRUFDOUMsTUFBeUMsRUFDekMsUUFBa0IsRUFDbEIsUUFBa0I7SUFFbEIsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxvQkFBb0IsQ0FBQztJQUNwRCxNQUFNLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztJQUU1QixLQUFLLElBQUksWUFBWSxHQUFHLENBQUMsRUFBRSxZQUFZLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxZQUFZLElBQUksQ0FBQyxFQUFFO1FBQzVFLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUV2Qyw2RUFBNkU7UUFDN0UsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBRXZCLE9BQU8sUUFBUSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxFQUFFO1lBQzVELDJDQUEyQztZQUMzQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzRSxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDdEM7UUFFRCxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFFdkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMzQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxPQUFPLEdBQUcs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
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ReplicaDataSourceOptions } from './types';
|
|
2
|
+
import type { DataSourceFactory } from '@forestadmin/datasource-toolkit';
|
|
3
|
+
declare function createReplicaDataSource(rawOptions: ReplicaDataSourceOptions): DataSourceFactory;
|
|
4
|
+
export * from './types';
|
|
5
|
+
export { createReplicaDataSource };
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { CollectionReplicaSchema, ReplicaDataSourceOptions, ResolvedOptions } from '../../types';
|
|
2
|
+
type ResolvedFlattenOptions = ResolvedOptions['flattenOptions'];
|
|
3
|
+
export default function computeFlattenOptions(schema: CollectionReplicaSchema[], rawOptions: ReplicaDataSourceOptions): Promise<ResolvedFlattenOptions>;
|
|
4
|
+
export {};
|
|
5
|
+
//# sourceMappingURL=options.d.ts.map
|