@forestadmin-experimental/datasource-cosmos 1.2.1 → 1.3.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/array-collection.d.ts +75 -0
- package/dist/array-collection.d.ts.map +1 -0
- package/dist/array-collection.js +510 -0
- package/dist/collection.d.ts +5 -0
- package/dist/collection.d.ts.map +1 -1
- package/dist/collection.js +23 -4
- package/dist/datasource.d.ts.map +1 -1
- package/dist/datasource.js +2 -3
- package/dist/index.d.ts +11 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +185 -14
- package/dist/introspection/container-introspector.d.ts +11 -2
- package/dist/introspection/container-introspector.d.ts.map +1 -1
- package/dist/introspection/container-introspector.js +77 -87
- package/dist/introspection/introspector.d.ts +18 -1
- package/dist/introspection/introspector.d.ts.map +1 -1
- package/dist/introspection/introspector.js +68 -5
- package/dist/model-builder/model.d.ts +1 -0
- package/dist/model-builder/model.d.ts.map +1 -1
- package/dist/model-builder/model.js +16 -11
- package/dist/utils/aggregation-converter.d.ts +1 -1
- package/dist/utils/aggregation-converter.d.ts.map +1 -1
- package/dist/utils/aggregation-converter.js +5 -6
- package/dist/utils/model-to-collection-schema-converter.js +2 -2
- package/dist/utils/query-converter.d.ts.map +1 -1
- package/dist/utils/query-converter.js +9 -3
- package/dist/utils/serializer.d.ts.map +1 -1
- package/dist/utils/serializer.js +6 -8
- package/dist/utils/type-converter.d.ts +11 -3
- package/dist/utils/type-converter.d.ts.map +1 -1
- package/dist/utils/type-converter.js +60 -15
- package/package.json +1 -1
package/dist/collection.js
CHANGED
|
@@ -21,6 +21,24 @@ class CosmosCollection extends datasource_toolkit_1.BaseCollection {
|
|
|
21
21
|
this.addSegments(modelSchema.segments);
|
|
22
22
|
logger('Debug', `CosmosCollection - ${this.name} added`);
|
|
23
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* Mark virtualized array fields as non-sortable
|
|
26
|
+
* This should be called after virtual collections are created from array fields
|
|
27
|
+
*/
|
|
28
|
+
markVirtualizedFieldsAsNonSortable(virtualizedFieldPaths) {
|
|
29
|
+
for (const fieldPath of virtualizedFieldPaths) {
|
|
30
|
+
const field = this.schema.fields[fieldPath];
|
|
31
|
+
if (field && field.type === 'Column') {
|
|
32
|
+
// Create a new field object with isSortable set to false
|
|
33
|
+
const updatedField = {
|
|
34
|
+
...field,
|
|
35
|
+
isSortable: false,
|
|
36
|
+
};
|
|
37
|
+
// Replace the field in the schema
|
|
38
|
+
this.schema.fields[fieldPath] = updatedField;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
24
42
|
async create(caller, data) {
|
|
25
43
|
try {
|
|
26
44
|
const recordsResponse = await this.internalModel.create(data);
|
|
@@ -63,9 +81,10 @@ class CosmosCollection extends datasource_toolkit_1.BaseCollection {
|
|
|
63
81
|
// Check if this is a Cosmos DB indexing issue with nested fields
|
|
64
82
|
if (error.message.includes('One of the input values is invalid') &&
|
|
65
83
|
querySpec.query.includes('.')) {
|
|
66
|
-
throw new Error(`Cosmos DB query failed. This may be due to querying/filtering on
|
|
67
|
-
`without proper indexing. Please configure your
|
|
68
|
-
`to include the nested paths
|
|
84
|
+
throw new Error(`Cosmos DB query failed. This may be due to querying/filtering on ` +
|
|
85
|
+
`nested fields without proper indexing. Please configure your ` +
|
|
86
|
+
`Cosmos DB container's indexing policy to include the nested paths ` +
|
|
87
|
+
`being queried. Original error: ${error.message}`);
|
|
69
88
|
}
|
|
70
89
|
throw new Error(`Failed to list records: ${error.message}`);
|
|
71
90
|
}
|
|
@@ -113,4 +132,4 @@ class CosmosCollection extends datasource_toolkit_1.BaseCollection {
|
|
|
113
132
|
}
|
|
114
133
|
}
|
|
115
134
|
exports.default = CosmosCollection;
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
135
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0Esd0VBV3lDO0FBR3pDLDBGQUFpRTtBQUNqRSx3SEFBMEU7QUFDMUUsOEVBQXFEO0FBRXJELE1BQXFCLGdCQUFpQixTQUFRLG1DQUFjO0lBSzFELFlBQ0UsVUFBc0IsRUFDdEIsS0FBa0IsRUFDbEIsTUFBYyxFQUNkLFlBQTBCO1FBRTFCLElBQUksQ0FBQyxLQUFLO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBRTlELEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUU1QyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztRQUUzQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUkseUJBQWMsRUFBRSxDQUFDO1FBRTNDLE1BQU0sV0FBVyxHQUFHLDhDQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFdkUsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsS0FBSyxLQUFLO1lBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXZDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsc0JBQXNCLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRDs7O09BR0c7SUFDSSxrQ0FBa0MsQ0FBQyxxQkFBK0I7UUFDdkUsS0FBSyxNQUFNLFNBQVMsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1lBQzlDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENB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
|
package/dist/datasource.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datasource.d.ts","sourceRoot":"","sources":["../src/datasource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAgB,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAEzE,OAAO,gBAAgB,MAAM,cAAc,CAAC;AAC5C,OAAO,WAAW,MAAM,uBAAuB,CAAC;AAOhD,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,cAAc,CAAC,gBAAgB,CAAC;IAC5E;;OAEG;IACH,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC;gBAGnC,YAAY,EAAE,YAAY,EAC1B,gBAAgB,EAAE,WAAW,EAAE,EAC/B,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QAAE,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;KAAE;cAoBzD,iBAAiB,CAAC,gBAAgB,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,MAAM;IAUlE,kBAAkB,CAC/B,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,MAAM,EACb,gBAAgB,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAC7C,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAiBrC;;;OAGG;IACH,OAAO,CAAC,UAAU;IAwBlB;;OAEG;IACH,OAAO,CAAC,mBAAmB;
|
|
1
|
+
{"version":3,"file":"datasource.d.ts","sourceRoot":"","sources":["../src/datasource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAgB,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAC;AAEzE,OAAO,gBAAgB,MAAM,cAAc,CAAC;AAC5C,OAAO,WAAW,MAAM,uBAAuB,CAAC;AAOhD,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,cAAc,CAAC,gBAAgB,CAAC;IAC5E;;OAEG;IACH,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC;gBAGnC,YAAY,EAAE,YAAY,EAC1B,gBAAgB,EAAE,WAAW,EAAE,EAC/B,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;QAAE,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;KAAE;cAoBzD,iBAAiB,CAAC,gBAAgB,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,MAAM;IAUlE,kBAAkB,CAC/B,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,MAAM,EACb,gBAAgB,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GAC7C,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAiBrC;;;OAGG;IACH,OAAO,CAAC,UAAU;IAwBlB;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAyB5B"}
|
package/dist/datasource.js
CHANGED
|
@@ -72,8 +72,7 @@ class CosmosDataSource extends datasource_toolkit_1.BaseDataSource {
|
|
|
72
72
|
if (key in values) {
|
|
73
73
|
const paramName = `@param${paramCounter}`;
|
|
74
74
|
paramCounter += 1;
|
|
75
|
-
//
|
|
76
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
75
|
+
// Context variables should contain JSON-serializable values for Cosmos DB parameters
|
|
77
76
|
parameters.push({ name: paramName, value: values[key] });
|
|
78
77
|
return paramName;
|
|
79
78
|
}
|
|
@@ -84,4 +83,4 @@ class CosmosDataSource extends datasource_toolkit_1.BaseDataSource {
|
|
|
84
83
|
}
|
|
85
84
|
}
|
|
86
85
|
exports.default = CosmosDataSource;
|
|
87
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kYXRhc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0Esd0VBQXlFO0FBRXpFLDhEQUE0QztBQVE1QyxNQUFxQixnQkFBaUIsU0FBUSxtQ0FBZ0M7SUFNNUUsWUFDRSxZQUEwQixFQUMxQixnQkFBK0IsRUFDL0IsTUFBYyxFQUNkLE9BQXVFO1FBRXZFLEtBQUssRUFBRSxDQUFDO1FBRVIsSUFBSSxDQUFDLFlBQVk7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFFakMsdUJBQXVCO1FBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVqRCxJQUFJLE9BQU8sRUFBRSxvQkFBb0IsSUFBSSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztZQUNoRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLG9CQUFvQixFQUFFO2dCQUMxRCxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVk7Z0JBQzNCLFlBQVksRUFBRSxPQUFPLENBQUMsaUJBQWlCO2FBQ3hDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRVMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLGdCQUErQixFQUFFLE1BQWM7UUFDL0UsZ0JBQWdCO1lBQ2QsMEJBQTBCO2FBQ3pCLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDOUQsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2YsTUFBTSxVQUFVLEdBQUcsSUFBSSxvQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDaEYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFUSxLQUFLLENBQUMsa0JBQWtCLENBQy9CLGNBQXNCLEVBQ3RCLEtBQWEsRUFDYixtQkFBNEMsRUFBRTtRQUU5QyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDakQsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsY0FBYyxHQUFHLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBMEIsQ0FBQztRQUN4RixNQUFNLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFFOUUsK0NBQStDO1FBQy9DLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN2RSxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRXBELE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRXhFLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7O09BR0c7SUFDSyxVQUFVLENBQ2hCLEtBQWEsRUFDYixnQkFBeUM7UUFFekMsa0VBQWtFO1FBQ2xFLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFL0MsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxrRUFBa0UsQ0FBQyxDQUFDO1FBQ3RGLENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbkMsMERBQTBEO1FBQzFELE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFFN0YsTUFBTSxTQUFTLEdBQWlCO1lBQzlCLEtBQUssRUFBRSxrQkFBa0I7WUFDekIsVUFBVTtTQUNYLENBQUM7UUFFRixPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNLLG1CQUFtQixDQUN6QixLQUFhLEVBQ2IsTUFBK0I7UUFFL0IsTUFBTSxVQUFVLEdBQStCLEVBQUUsQ0FBQztRQUNsRCxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7UUFFckIsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUM7UUFFcEMsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ3hFLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNsQixNQUFNLFNBQVMsR0FBRyxTQUFTLFlBQVksRUFBRSxDQUFDO2dCQUMxQyxZQUFZLElBQUksQ0FBQyxDQUFDO2dCQUNsQixxRkFBcUY7Z0JBQ3JGLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxDQUE4QixFQUFFLENBQUMsQ0FBQztnQkFFdEYsT0FBTyxTQUFTLENBQUM7WUFDbkIsQ0FBQztZQUVELDRFQUE0RTtZQUM1RSxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQzVDLENBQUM7Q0FDRjtBQXJIRCxtQ0FxSEMifQ==
|
package/dist/index.d.ts
CHANGED
|
@@ -1,26 +1,31 @@
|
|
|
1
1
|
import { CosmosClient, CosmosClientOptions } from '@azure/cosmos';
|
|
2
2
|
import { DataSourceFactory } from '@forestadmin/datasource-toolkit';
|
|
3
3
|
import { ConfigurationOptions } from './introspection/builder';
|
|
4
|
+
import { VirtualArrayCollectionConfig } from './introspection/introspector';
|
|
4
5
|
export { default as CosmosCollection } from './collection';
|
|
5
6
|
export { default as CosmosDataSource } from './datasource';
|
|
7
|
+
export { default as ArrayCollection } from './array-collection';
|
|
6
8
|
export { default as TypeConverter } from './utils/type-converter';
|
|
7
9
|
export { default as ModelCosmos } from './model-builder/model';
|
|
8
10
|
export type { CosmosSchema } from './model-builder/model';
|
|
11
|
+
export type { VirtualArrayCollectionConfig } from './introspection/introspector';
|
|
9
12
|
/**
|
|
10
13
|
* Create a Cosmos DB datasource with an existing CosmosClient instance
|
|
11
14
|
* @param client Existing CosmosClient instance
|
|
12
|
-
* @param databaseName
|
|
13
|
-
* @param options Optional configuration
|
|
15
|
+
* @param databaseName Optional database name for auto-introspection
|
|
16
|
+
* @param options Optional configuration builder function
|
|
14
17
|
* @example
|
|
15
|
-
*
|
|
16
|
-
*
|
|
18
|
+
* createCosmosDataSourceWithExistingClient(
|
|
19
|
+
* existingClient,
|
|
20
|
+
* 'myDatabase',
|
|
21
|
+
* configurator => configurator.addCollectionFromContainer({
|
|
17
22
|
* name: 'Users',
|
|
18
23
|
* databaseName: 'myDatabase',
|
|
19
24
|
* containerName: 'users-container'
|
|
20
25
|
* })
|
|
21
26
|
* )
|
|
22
27
|
*/
|
|
23
|
-
export declare function createCosmosDataSourceWithExistingClient(client: CosmosClient, databaseName?: string): DataSourceFactory;
|
|
28
|
+
export declare function createCosmosDataSourceWithExistingClient(client: CosmosClient, databaseName?: string, options?: ConfigurationOptions): DataSourceFactory;
|
|
24
29
|
/**
|
|
25
30
|
* Create a Cosmos DB datasource with connection details
|
|
26
31
|
* @param endpoint The Cosmos DB endpoint URL
|
|
@@ -47,6 +52,7 @@ export declare function createCosmosDataSource(endpoint: string, key: string, da
|
|
|
47
52
|
liveQueryDatabase?: string;
|
|
48
53
|
builder?: ConfigurationOptions;
|
|
49
54
|
clientOptions?: CosmosClientOptions;
|
|
55
|
+
virtualArrayCollections?: VirtualArrayCollectionConfig[];
|
|
50
56
|
}): DataSourceFactory;
|
|
51
57
|
/**
|
|
52
58
|
* Create a Cosmos DB datasource for the local emulator
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EAIL,iBAAiB,EAIlB,MAAM,iCAAiC,CAAC;AAKzC,OAAO,EAAE,oBAAoB,EAA2B,MAAM,yBAAyB,CAAC;AACxF,OAAqB,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAI1F,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC/D,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,YAAY,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAEjF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,wCAAwC,CACtD,MAAM,EAAE,YAAY,EACpB,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,iBAAiB,CAqBnB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;IACR,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,uBAAuB,CAAC,EAAE,4BAA4B,EAAE,CAAC;CAC1D,GACA,iBAAiB,CAiRnB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iCAAiC,CAC/C,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;IACR,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACrC,GACA,iBAAiB,CAOnB"}
|
package/dist/index.js
CHANGED
|
@@ -3,35 +3,43 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.createCosmosDataSourceForEmulator = exports.createCosmosDataSource = exports.createCosmosDataSourceWithExistingClient = exports.ModelCosmos = exports.TypeConverter = exports.CosmosDataSource = exports.CosmosCollection = void 0;
|
|
6
|
+
exports.createCosmosDataSourceForEmulator = exports.createCosmosDataSource = exports.createCosmosDataSourceWithExistingClient = exports.ModelCosmos = exports.TypeConverter = exports.ArrayCollection = exports.CosmosDataSource = exports.CosmosCollection = void 0;
|
|
7
7
|
const cosmos_1 = require("@azure/cosmos");
|
|
8
|
+
const datasource_toolkit_1 = require("@forestadmin/datasource-toolkit");
|
|
9
|
+
const array_collection_1 = __importDefault(require("./array-collection"));
|
|
10
|
+
const collection_1 = __importDefault(require("./collection"));
|
|
8
11
|
const datasource_1 = __importDefault(require("./datasource"));
|
|
9
12
|
const builder_1 = require("./introspection/builder");
|
|
10
13
|
const introspector_1 = __importDefault(require("./introspection/introspector"));
|
|
11
|
-
|
|
12
|
-
|
|
14
|
+
const type_converter_1 = __importDefault(require("./utils/type-converter"));
|
|
15
|
+
var collection_2 = require("./collection");
|
|
16
|
+
Object.defineProperty(exports, "CosmosCollection", { enumerable: true, get: function () { return __importDefault(collection_2).default; } });
|
|
13
17
|
var datasource_2 = require("./datasource");
|
|
14
18
|
Object.defineProperty(exports, "CosmosDataSource", { enumerable: true, get: function () { return __importDefault(datasource_2).default; } });
|
|
15
|
-
var
|
|
16
|
-
Object.defineProperty(exports, "
|
|
19
|
+
var array_collection_2 = require("./array-collection");
|
|
20
|
+
Object.defineProperty(exports, "ArrayCollection", { enumerable: true, get: function () { return __importDefault(array_collection_2).default; } });
|
|
21
|
+
var type_converter_2 = require("./utils/type-converter");
|
|
22
|
+
Object.defineProperty(exports, "TypeConverter", { enumerable: true, get: function () { return __importDefault(type_converter_2).default; } });
|
|
17
23
|
var model_1 = require("./model-builder/model");
|
|
18
24
|
Object.defineProperty(exports, "ModelCosmos", { enumerable: true, get: function () { return __importDefault(model_1).default; } });
|
|
19
25
|
/**
|
|
20
26
|
* Create a Cosmos DB datasource with an existing CosmosClient instance
|
|
21
27
|
* @param client Existing CosmosClient instance
|
|
22
|
-
* @param databaseName
|
|
23
|
-
* @param options Optional configuration
|
|
28
|
+
* @param databaseName Optional database name for auto-introspection
|
|
29
|
+
* @param options Optional configuration builder function
|
|
24
30
|
* @example
|
|
25
|
-
*
|
|
26
|
-
*
|
|
31
|
+
* createCosmosDataSourceWithExistingClient(
|
|
32
|
+
* existingClient,
|
|
33
|
+
* 'myDatabase',
|
|
34
|
+
* configurator => configurator.addCollectionFromContainer({
|
|
27
35
|
* name: 'Users',
|
|
28
36
|
* databaseName: 'myDatabase',
|
|
29
37
|
* containerName: 'users-container'
|
|
30
38
|
* })
|
|
31
39
|
* )
|
|
32
40
|
*/
|
|
33
|
-
function createCosmosDataSourceWithExistingClient(client, databaseName) {
|
|
34
|
-
return async (logger
|
|
41
|
+
function createCosmosDataSourceWithExistingClient(client, databaseName, options) {
|
|
42
|
+
return async (logger) => {
|
|
35
43
|
let collectionModels;
|
|
36
44
|
if (options) {
|
|
37
45
|
const builder = options(new builder_1.CosmosDatasourceBuilder(client));
|
|
@@ -79,7 +87,7 @@ function createCosmosDataSource(endpoint, key, databaseName, options) {
|
|
|
79
87
|
key,
|
|
80
88
|
...options?.clientOptions,
|
|
81
89
|
});
|
|
82
|
-
const { liveQueryConnections, liveQueryDatabase, builder } = options || {};
|
|
90
|
+
const { liveQueryConnections, liveQueryDatabase, builder, virtualArrayCollections } = options || {};
|
|
83
91
|
let collectionModels;
|
|
84
92
|
if (builder) {
|
|
85
93
|
const datasourceBuilder = builder(new builder_1.CosmosDatasourceBuilder(client));
|
|
@@ -95,10 +103,173 @@ function createCosmosDataSource(endpoint, key, databaseName, options) {
|
|
|
95
103
|
const message = 'No collections were introspected. Please provide a databaseName or use the builder.';
|
|
96
104
|
logger?.('Warn', message);
|
|
97
105
|
}
|
|
98
|
-
|
|
106
|
+
const datasource = new datasource_1.default(client, collectionModels, logger, {
|
|
99
107
|
liveQueryConnections,
|
|
100
108
|
liveQueryDatabase,
|
|
101
109
|
});
|
|
110
|
+
// Add virtual array collections if specified
|
|
111
|
+
if (virtualArrayCollections && virtualArrayCollections.length > 0) {
|
|
112
|
+
// Track created virtual collections for dependency resolution
|
|
113
|
+
const createdVirtualCollections = new Map();
|
|
114
|
+
for (const config of virtualArrayCollections) {
|
|
115
|
+
try {
|
|
116
|
+
logger?.('Info', `Creating virtual collection '${config.collectionName}' for array ` +
|
|
117
|
+
`field '${config.arrayFieldPath}'`);
|
|
118
|
+
// Find the parent collection (could be physical or virtual)
|
|
119
|
+
const parentCollection = datasource.getCollection(config.parentContainerName);
|
|
120
|
+
if (!parentCollection) {
|
|
121
|
+
logger?.('Warn', `Parent collection '${config.parentContainerName}' not found for ` +
|
|
122
|
+
`virtual array collection '${config.collectionName}'`);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
let arraySchema = null;
|
|
126
|
+
// Check if parent is a virtual ArrayCollection
|
|
127
|
+
const isParentVirtual = parentCollection instanceof array_collection_1.default;
|
|
128
|
+
if (isParentVirtual) {
|
|
129
|
+
// For nested virtual collections, introspect from the parent's schema
|
|
130
|
+
logger?.('Info', `Parent '${config.parentContainerName}' is a virtual collection, ` +
|
|
131
|
+
`introspecting from its schema`);
|
|
132
|
+
// Get the field schema from the parent collection
|
|
133
|
+
const parentSchema = parentCollection.schema;
|
|
134
|
+
const arrayField = parentSchema.fields[config.arrayFieldPath];
|
|
135
|
+
if (!arrayField || arrayField.type !== 'Column') {
|
|
136
|
+
logger?.('Warn', `Array field '${config.arrayFieldPath}' not found in parent ` +
|
|
137
|
+
`virtual collection '${config.parentContainerName}'`);
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
// For nested arrays, we need to fetch actual data to introspect the structure
|
|
141
|
+
// Use the parent ArrayCollection to get sample data
|
|
142
|
+
// Sequential: we need sample data to introspect array structure
|
|
143
|
+
// eslint-disable-next-line no-await-in-loop -- Sequential introspection required
|
|
144
|
+
const sampleRecords = await parentCollection.list({}, new datasource_toolkit_1.PaginatedFilter({
|
|
145
|
+
page: { limit: 100, skip: 0, apply: (records) => records },
|
|
146
|
+
}), new datasource_toolkit_1.Projection(config.arrayFieldPath));
|
|
147
|
+
// Collect array items from sample records
|
|
148
|
+
const arrayItems = [];
|
|
149
|
+
for (const record of sampleRecords) {
|
|
150
|
+
const value = record[config.arrayFieldPath];
|
|
151
|
+
if (Array.isArray(value)) {
|
|
152
|
+
arrayItems.push(...value);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
if (arrayItems.length === 0) {
|
|
156
|
+
logger?.('Warn', `No array items found in field '${config.arrayFieldPath}' of ` +
|
|
157
|
+
`virtual collection '${config.parentContainerName}'`);
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
// Analyze array items to infer schema
|
|
161
|
+
const fieldTypes = {};
|
|
162
|
+
for (const item of arrayItems) {
|
|
163
|
+
if (typeof item === 'object' && item !== null) {
|
|
164
|
+
for (const [fieldKey, value] of Object.entries(item)) {
|
|
165
|
+
if (!fieldTypes[fieldKey]) {
|
|
166
|
+
fieldTypes[fieldKey] = [];
|
|
167
|
+
}
|
|
168
|
+
const type = type_converter_1.default.inferTypeFromValue(value);
|
|
169
|
+
fieldTypes[fieldKey].push(type);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// Build schema from inferred types
|
|
174
|
+
arraySchema = {};
|
|
175
|
+
for (const [fieldName, types] of Object.entries(fieldTypes)) {
|
|
176
|
+
const uniqueTypes = Array.from(new Set(types));
|
|
177
|
+
const commonType = type_converter_1.default.getMostSpecificType(uniqueTypes);
|
|
178
|
+
const nullable = uniqueTypes.includes('null');
|
|
179
|
+
arraySchema[fieldName] = {
|
|
180
|
+
type: commonType,
|
|
181
|
+
nullable,
|
|
182
|
+
indexed: true,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
else if (!databaseName) {
|
|
189
|
+
// For physical containers, use the existing introspection method
|
|
190
|
+
// Sequential: we need to introspect the array field structure
|
|
191
|
+
logger?.('Warn', `Database name is required to introspect physical container for ` +
|
|
192
|
+
`virtual collection '${config.collectionName}'`);
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
// Sequential: we need to introspect the array field structure
|
|
196
|
+
// eslint-disable-next-line no-await-in-loop -- Sequential introspection required
|
|
197
|
+
arraySchema = await introspector_1.default.introspectArrayField(client, databaseName, config.parentContainerName, config.arrayFieldPath);
|
|
198
|
+
}
|
|
199
|
+
if (arraySchema) {
|
|
200
|
+
// Convert CosmosSchema to Forest Admin fields
|
|
201
|
+
const fields = {};
|
|
202
|
+
for (const [fieldName, fieldInfo] of Object.entries(arraySchema)) {
|
|
203
|
+
const columnType = type_converter_1.default.getColumnTypeFromDataType(fieldInfo.type);
|
|
204
|
+
const operators = type_converter_1.default.operatorsForColumnType(columnType);
|
|
205
|
+
fields[fieldName] = {
|
|
206
|
+
columnType,
|
|
207
|
+
filterOperators: operators,
|
|
208
|
+
isPrimaryKey: false,
|
|
209
|
+
isReadOnly: false,
|
|
210
|
+
isSortable: type_converter_1.default.isSortable(fieldInfo.type),
|
|
211
|
+
type: 'Column',
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
// Create collection schema with introspected fields
|
|
215
|
+
const collectionSchema = {
|
|
216
|
+
actions: {},
|
|
217
|
+
charts: [],
|
|
218
|
+
countable: true,
|
|
219
|
+
fields,
|
|
220
|
+
searchable: true,
|
|
221
|
+
segments: [],
|
|
222
|
+
};
|
|
223
|
+
// Create the virtual array collection (without virtualized child fields yet)
|
|
224
|
+
const arrayCollection = new array_collection_1.default(datasource, parentCollection, config.collectionName, config.arrayFieldPath, collectionSchema, logger, client, []);
|
|
225
|
+
// Add the collection to the datasource
|
|
226
|
+
datasource.addCollection(arrayCollection);
|
|
227
|
+
createdVirtualCollections.set(config.collectionName, arrayCollection);
|
|
228
|
+
logger?.('Info', `Successfully created virtual collection '${config.collectionName}'`);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
234
|
+
const errorStack = error instanceof Error ? error.stack : '';
|
|
235
|
+
logger?.('Warn', `Failed to create virtual array collection '${config.collectionName}': ${errorMessage}`);
|
|
236
|
+
logger?.('Debug', `Error stack: ${errorStack}`);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
// After all collections are created, set virtualized child fields
|
|
240
|
+
// For each parent collection that has virtual child collections
|
|
241
|
+
// Tell it which fields are virtualized
|
|
242
|
+
const parentCollections = new Set(virtualArrayCollections.map(c => c.parentContainerName));
|
|
243
|
+
for (const parentName of parentCollections) {
|
|
244
|
+
try {
|
|
245
|
+
const parentCollection = datasource.getCollection(parentName);
|
|
246
|
+
// Find all child virtual collections that have this collection as parent
|
|
247
|
+
const childVirtualFields = virtualArrayCollections
|
|
248
|
+
.filter(c => c.parentContainerName === parentName)
|
|
249
|
+
.map(c => c.arrayFieldPath);
|
|
250
|
+
if (childVirtualFields.length > 0) {
|
|
251
|
+
// For virtual collections (ArrayCollection), set virtualized child fields for filtering
|
|
252
|
+
if (parentCollection instanceof array_collection_1.default) {
|
|
253
|
+
parentCollection.setVirtualizedChildFields(childVirtualFields);
|
|
254
|
+
logger?.('Info', `Set virtualized child fields for virtual collection '${parentName}': ` +
|
|
255
|
+
`[${childVirtualFields.join(', ')}]`);
|
|
256
|
+
}
|
|
257
|
+
// For physical collections (CosmosCollection), mark array fields as non-sortable
|
|
258
|
+
if (parentCollection instanceof collection_1.default) {
|
|
259
|
+
parentCollection.markVirtualizedFieldsAsNonSortable(childVirtualFields);
|
|
260
|
+
logger?.('Info', `Marked virtualized array fields as non-sortable for '${parentName}': ` +
|
|
261
|
+
`[${childVirtualFields.join(', ')}]`);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
catch (error) {
|
|
266
|
+
// Parent collection might not exist
|
|
267
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
268
|
+
logger?.('Debug', `Skipping virtualized field setup for '${parentName}': ${errorMessage}`);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
return datasource;
|
|
102
273
|
};
|
|
103
274
|
}
|
|
104
275
|
exports.createCosmosDataSource = createCosmosDataSource;
|
|
@@ -123,4 +294,4 @@ function createCosmosDataSourceForEmulator(databaseName, options) {
|
|
|
123
294
|
return createCosmosDataSource(endpoint, key, databaseName, options);
|
|
124
295
|
}
|
|
125
296
|
exports.createCosmosDataSourceForEmulator = createCosmosDataSourceForEmulator;
|
|
126
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsMENBQWtFO0FBR2xFLDhEQUE0QztBQUM1QyxxREFBd0Y7QUFDeEYsZ0ZBQXdEO0FBRXhELDJDQUEyRDtBQUFsRCwrSEFBQSxPQUFPLE9BQW9CO0FBQ3BDLDJDQUEyRDtBQUFsRCwrSEFBQSxPQUFPLE9BQW9CO0FBQ3BDLHlEQUFrRTtBQUF6RCxnSUFBQSxPQUFPLE9BQWlCO0FBQ2pDLCtDQUErRDtBQUF0RCxxSEFBQSxPQUFPLE9BQWU7QUFHL0I7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILFNBQWdCLHdDQUF3QyxDQUN0RCxNQUFvQixFQUNwQixZQUFxQjtJQUVyQixPQUFPLEtBQUssRUFBRSxNQUFjLEVBQUUsT0FBOEIsRUFBRSxFQUFFO1FBQzlELElBQUksZ0JBQWdCLENBQUM7UUFFckIsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLGlDQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUE0QixDQUFDO1lBQ3hGLGdCQUFnQixHQUFHLE1BQU0sT0FBTyxDQUFDLGtDQUFrQyxFQUFFLENBQUM7UUFDeEUsQ0FBQzthQUFNLElBQUksWUFBWSxFQUFFLENBQUM7WUFDeEIsZ0JBQWdCLEdBQUcsTUFBTSxzQkFBWSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2pGLENBQUM7YUFBTSxDQUFDO1lBQ04sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLENBQUM7UUFFRCxJQUFJLGdCQUFnQixDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUM5QyxNQUFNLE9BQU8sR0FDWCxxRkFBcUYsQ0FBQztZQUN4RixNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDNUIsQ0FBQztRQUVELE9BQU8sSUFBSSxvQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDaEUsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQXhCRCw0RkF3QkM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxTQUFnQixzQkFBc0IsQ0FDcEMsUUFBZ0IsRUFDaEIsR0FBVyxFQUNYLFlBQXFCLEVBQ3JCLE9BS0M7SUFFRCxPQUFPLEtBQUssRUFBRSxNQUFjLEVBQUUsRUFBRTtRQUM5QixNQUFNLE1BQU0sR0FBRyxJQUFJLHFCQUFZLENBQUM7WUFDOUIsUUFBUTtZQUNSLEdBQUc7WUFDSCxHQUFHLE9BQU8sRUFBRSxhQUFhO1NBQzFCLENBQUMsQ0FBQztRQUVILE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO1FBRTNFLElBQUksZ0JBQWdCLENBQUM7UUFFckIsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLE1BQU0saUJBQWlCLEdBQUcsT0FBTyxDQUMvQixJQUFJLGlDQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUNULENBQUM7WUFDN0IsZ0JBQWdCLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQyxrQ0FBa0MsRUFBRSxDQUFDO1FBQ2xGLENBQUM7YUFBTSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ3hCLGdCQUFnQixHQUFHLE1BQU0sc0JBQVksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqRixDQUFDO2FBQU0sQ0FBQztZQUNOLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUN4QixDQUFDO1FBRUQsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDOUMsTUFBTSxPQUFPLEdBQ1gscUZBQXFGLENBQUM7WUFDeEYsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFFRCxPQUFPLElBQUksb0JBQWdCLENBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRTtZQUM1RCxvQkFBb0I7WUFDcEIsaUJBQWlCO1NBQ2xCLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQztBQUNKLENBQUM7QUE1Q0Qsd0RBNENDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILFNBQWdCLGlDQUFpQyxDQUMvQyxZQUFxQixFQUNyQixPQUtDO0lBRUQsc0NBQXNDO0lBQ3RDLE1BQU0sUUFBUSxHQUFHLHdCQUF3QixDQUFDO0lBQzFDLE1BQU0sR0FBRyxHQUNQLDBGQUEwRixDQUFDO0lBRTdGLE9BQU8sc0JBQXNCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdEUsQ0FBQztBQWZELDhFQWVDIn0=
|
|
297
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsMENBQWtFO0FBQ2xFLHdFQVF5QztBQUV6QywwRUFBaUQ7QUFDakQsOERBQTRDO0FBQzVDLDhEQUE0QztBQUM1QyxxREFBd0Y7QUFDeEYsZ0ZBQTBGO0FBRTFGLDRFQUF1RTtBQUV2RSwyQ0FBMkQ7QUFBbEQsK0hBQUEsT0FBTyxPQUFvQjtBQUNwQywyQ0FBMkQ7QUFBbEQsK0hBQUEsT0FBTyxPQUFvQjtBQUNwQyx1REFBZ0U7QUFBdkQsb0lBQUEsT0FBTyxPQUFtQjtBQUNuQyx5REFBa0U7QUFBekQsZ0lBQUEsT0FBTyxPQUFpQjtBQUNqQywrQ0FBK0Q7QUFBdEQscUhBQUEsT0FBTyxPQUFlO0FBSS9COzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILFNBQWdCLHdDQUF3QyxDQUN0RCxNQUFvQixFQUNwQixZQUFxQixFQUNyQixPQUE4QjtJQUU5QixPQUFPLEtBQUssRUFBRSxNQUFjLEVBQUUsRUFBRTtRQUM5QixJQUFJLGdCQUFnQixDQUFDO1FBRXJCLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxpQ0FBdUIsQ0FBQyxNQUFNLENBQUMsQ0FBNEIsQ0FBQztZQUN4RixnQkFBZ0IsR0FBRyxNQUFNLE9BQU8sQ0FBQyxrQ0FBa0MsRUFBRSxDQUFDO1FBQ3hFLENBQUM7YUFBTSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ3hCLGdCQUFnQixHQUFHLE1BQU0sc0JBQVksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqRixDQUFDO2FBQU0sQ0FBQztZQUNOLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUN4QixDQUFDO1FBRUQsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFF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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { CosmosClient } from '@azure/cosmos';
|
|
2
2
|
import { OverrideTypeConverter } from './builder';
|
|
3
|
-
import ModelCosmos from '../model-builder/model';
|
|
3
|
+
import ModelCosmos, { CosmosSchema } from '../model-builder/model';
|
|
4
4
|
export interface IntrospectionOptions {
|
|
5
5
|
/**
|
|
6
6
|
* Whether to flatten nested objects into arrow-notation fields
|
|
@@ -18,10 +18,19 @@ export interface IntrospectionOptions {
|
|
|
18
18
|
* Default: false (arrays are treated as Json type)
|
|
19
19
|
*/
|
|
20
20
|
introspectArrayItems?: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Array fields to expose as virtual collections
|
|
23
|
+
* Default: [] (no virtual collections)
|
|
24
|
+
*/
|
|
25
|
+
virtualArrayCollections?: string[];
|
|
26
|
+
}
|
|
27
|
+
export interface ArrayCollectionMetadata {
|
|
28
|
+
arrayFieldPath: string;
|
|
29
|
+
schema: CosmosSchema;
|
|
21
30
|
}
|
|
22
31
|
/**
|
|
23
32
|
* Introspect a Cosmos DB container to infer the schema from sample documents
|
|
24
33
|
* with support for complex nested objects
|
|
25
34
|
*/
|
|
26
|
-
export default function
|
|
35
|
+
export default function introspectContainer(cosmosClient: CosmosClient, collectionName: string, databaseName: string, containerName: string, partitionKeyPath?: string, sampleSize?: number, overrideTypeConverter?: OverrideTypeConverter, enableCount?: boolean, options?: IntrospectionOptions): Promise<ModelCosmos>;
|
|
27
36
|
//# sourceMappingURL=container-introspector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"container-introspector.d.ts","sourceRoot":"","sources":["../../src/introspection/container-introspector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"container-introspector.d.ts","sourceRoot":"","sources":["../../src/introspection/container-introspector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,WAAW,EAAE,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGnE,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAE/B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAE/B;;;OAGG;IACH,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,uBAAuB;IACtC,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;CACtB;AA0ND;;;GAGG;AACH,wBAA8B,mBAAmB,CAC/C,YAAY,EAAE,YAAY,EAC1B,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,gBAAgB,CAAC,EAAE,MAAM,EACzB,UAAU,SAAM,EAChB,qBAAqB,CAAC,EAAE,qBAAqB,EAC7C,WAAW,CAAC,EAAE,OAAO,EACrB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,WAAW,CAAC,CAuCtB"}
|