@forestadmin-experimental/datasource-cosmos 1.6.4 → 1.7.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/datasource.d.ts +8 -0
- package/dist/datasource.d.ts.map +1 -1
- package/dist/datasource.js +24 -2
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -9
- package/dist/model-builder/model.d.ts +15 -1
- package/dist/model-builder/model.d.ts.map +1 -1
- package/dist/model-builder/model.js +59 -18
- package/package.json +1 -1
package/dist/datasource.d.ts
CHANGED
|
@@ -13,6 +13,14 @@ export default class CosmosDataSource extends BaseDataSource<CosmosCollection> {
|
|
|
13
13
|
});
|
|
14
14
|
protected createCollections(collectionModels: ModelCosmos[], logger: Logger): Promise<void>;
|
|
15
15
|
executeNativeQuery(connectionName: string, query: string, contextVariables?: Record<string, unknown>): Promise<Record<string, unknown>[]>;
|
|
16
|
+
/**
|
|
17
|
+
* Cosmos DB NoSQL treats "value", "key", "previous" and "objective" as reserved keywords,
|
|
18
|
+
* so they cannot be used as column aliases (e.g. "AS value" fails).
|
|
19
|
+
* This method allows users to use underscore-prefixed aliases (_value, _key, _previous,
|
|
20
|
+
* _objective) in their queries and automatically renames them to the names expected
|
|
21
|
+
* by Forest Admin charts.
|
|
22
|
+
*/
|
|
23
|
+
private renameReservedAliases;
|
|
16
24
|
/**
|
|
17
25
|
* Parse the query string and extract container name and build SqlQuerySpec
|
|
18
26
|
* Expected format: "SELECT * FROM containerName WHERE ..."
|
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;CAyB5B"}
|
|
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;;;;;;OAMG;IACH,OAAO,CAAC,qBAAqB;IAmB7B;;;OAGG;IACH,OAAO,CAAC,UAAU;IAwBlB;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAyB5B"}
|
package/dist/datasource.js
CHANGED
|
@@ -40,7 +40,29 @@ class CosmosDataSource extends datasource_toolkit_1.BaseDataSource {
|
|
|
40
40
|
const database = connection.instance.database(connection.databaseName);
|
|
41
41
|
const container = database.container(containerName);
|
|
42
42
|
const { resources } = await container.items.query(querySpec).fetchAll();
|
|
43
|
-
return resources;
|
|
43
|
+
return this.renameReservedAliases(resources);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Cosmos DB NoSQL treats "value", "key", "previous" and "objective" as reserved keywords,
|
|
47
|
+
* so they cannot be used as column aliases (e.g. "AS value" fails).
|
|
48
|
+
* This method allows users to use underscore-prefixed aliases (_value, _key, _previous,
|
|
49
|
+
* _objective) in their queries and automatically renames them to the names expected
|
|
50
|
+
* by Forest Admin charts.
|
|
51
|
+
*/
|
|
52
|
+
renameReservedAliases(results) {
|
|
53
|
+
const aliasMap = {
|
|
54
|
+
_value: 'value',
|
|
55
|
+
_key: 'key',
|
|
56
|
+
_previous: 'previous',
|
|
57
|
+
_objective: 'objective',
|
|
58
|
+
};
|
|
59
|
+
return results.map(row => {
|
|
60
|
+
const renamed = {};
|
|
61
|
+
for (const [k, v] of Object.entries(row)) {
|
|
62
|
+
renamed[aliasMap[k] ?? k] = v;
|
|
63
|
+
}
|
|
64
|
+
return renamed;
|
|
65
|
+
});
|
|
44
66
|
}
|
|
45
67
|
/**
|
|
46
68
|
* Parse the query string and extract container name and build SqlQuerySpec
|
|
@@ -83,4 +105,4 @@ class CosmosDataSource extends datasource_toolkit_1.BaseDataSource {
|
|
|
83
105
|
}
|
|
84
106
|
}
|
|
85
107
|
exports.default = CosmosDataSource;
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kYXRhc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0Esd0VBQXlFO0FBRXpFLDhEQUE0QztBQVE1QyxNQUFxQixnQkFBaUIsU0FBUSxtQ0FBZ0M7SUFNNUUsWUFDRSxZQUEwQixFQUMxQixnQkFBK0IsRUFDL0IsTUFBYyxFQUNkLE9BQXVFO1FBRXZFLEtBQUssRUFBRSxDQUFDO1FBRVIsSUFBSSxDQUFDLFlBQVk7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFFakMsdUJBQXVCO1FBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVqRCxJQUFJLE9BQU8sRUFBRSxvQkFBb0IsSUFBSSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztZQUNoRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLG9CQUFvQixFQUFFO2dCQUMxRCxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVk7Z0JBQzNCLFlBQVksRUFBRSxPQUFPLENBQUMsaUJBQWlCO2FBQ3hDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxNQUFNLEVBQUUsQ0FBQyxNQUFNLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRVMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLGdCQUErQixFQUFFLE1BQWM7UUFDL0UsZ0JBQWdCO1lBQ2QsMEJBQTBCO2FBQ3pCLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDOUQsT0FBTyxDQUFD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
|
package/dist/index.d.ts
CHANGED
|
@@ -51,6 +51,7 @@ export { default as TypeConverter } from './utils/type-converter';
|
|
|
51
51
|
export { default as ModelCosmos } from './model-builder/model';
|
|
52
52
|
export { configurePaginationCache, getSharedPaginationCache } from './model-builder/model';
|
|
53
53
|
export { configureRetryOptions, getSharedRetryOptions } from './model-builder/model';
|
|
54
|
+
export { configureRuLogging, isRuLoggingEnabled } from './model-builder/model';
|
|
54
55
|
export { default as PaginationCache } from './utils/pagination-cache';
|
|
55
56
|
export { withRetry, createRetryWrapper, isRateLimitError, isTransientError, } from './utils/retry-handler';
|
|
56
57
|
export { default as QueryValidator, QueryValidationError, QueryValidationErrorCode, } from './utils/query-validator';
|
|
@@ -117,6 +118,12 @@ export declare function createCosmosDataSource(endpoint: string, key: string, da
|
|
|
117
118
|
* Allows you to define collections and their fields explicitly
|
|
118
119
|
*/
|
|
119
120
|
schema?: ManualSchemaConfig;
|
|
121
|
+
/**
|
|
122
|
+
* Enable logging of Request Unit (RU) consumption for each Cosmos DB operation
|
|
123
|
+
* Useful for monitoring and optimizing database costs
|
|
124
|
+
* Default: false
|
|
125
|
+
*/
|
|
126
|
+
logRuConsumption?: boolean;
|
|
120
127
|
}): DataSourceFactory;
|
|
121
128
|
/**
|
|
122
129
|
* Create a Cosmos DB datasource for the local emulator
|
|
@@ -140,5 +147,11 @@ export declare function createCosmosDataSourceForEmulator(databaseName?: string,
|
|
|
140
147
|
introspectionConfig?: IntrospectionConfig;
|
|
141
148
|
disableIntrospection?: boolean;
|
|
142
149
|
schema?: ManualSchemaConfig;
|
|
150
|
+
/**
|
|
151
|
+
* Enable logging of Request Unit (RU) consumption for each Cosmos DB operation
|
|
152
|
+
* Useful for monitoring and optimizing database costs
|
|
153
|
+
* Default: false
|
|
154
|
+
*/
|
|
155
|
+
logRuConsumption?: boolean;
|
|
143
156
|
}): DataSourceFactory;
|
|
144
157
|
//# sourceMappingURL=index.d.ts.map
|
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,EAAE,iBAAiB,EAAU,MAAM,iCAAiC,CAAC;AAG5E,OAAO,EAAE,oBAAoB,EAA2B,MAAM,yBAAyB,CAAC;AACxF,OAAqB,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -3,11 +3,12 @@ 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.QueryValidationErrorCode = exports.QueryValidationError = exports.QueryValidator = exports.isTransientError = exports.isRateLimitError = exports.createRetryWrapper = exports.withRetry = exports.PaginationCache = exports.getSharedRetryOptions = exports.configureRetryOptions = exports.getSharedPaginationCache = exports.configurePaginationCache = exports.ModelCosmos = exports.TypeConverter = exports.ArrayCollection = exports.CosmosDataSource = exports.CosmosCollection = void 0;
|
|
6
|
+
exports.createCosmosDataSourceForEmulator = exports.createCosmosDataSource = exports.createCosmosDataSourceWithExistingClient = exports.QueryValidationErrorCode = exports.QueryValidationError = exports.QueryValidator = exports.isTransientError = exports.isRateLimitError = exports.createRetryWrapper = exports.withRetry = exports.PaginationCache = exports.isRuLoggingEnabled = exports.configureRuLogging = exports.getSharedRetryOptions = exports.configureRetryOptions = exports.getSharedPaginationCache = exports.configurePaginationCache = exports.ModelCosmos = exports.TypeConverter = exports.ArrayCollection = exports.CosmosDataSource = exports.CosmosCollection = void 0;
|
|
7
7
|
const cosmos_1 = require("@azure/cosmos");
|
|
8
8
|
const datasource_1 = __importDefault(require("./datasource"));
|
|
9
9
|
const builder_1 = require("./introspection/builder");
|
|
10
10
|
const introspector_1 = __importDefault(require("./introspection/introspector"));
|
|
11
|
+
const model_1 = require("./model-builder/model");
|
|
11
12
|
const manual_schema_converter_1 = require("./utils/manual-schema-converter");
|
|
12
13
|
const virtual_collection_manager_1 = __importDefault(require("./virtual-collection-manager"));
|
|
13
14
|
var collection_1 = require("./collection");
|
|
@@ -18,14 +19,17 @@ var array_collection_1 = require("./array-collection");
|
|
|
18
19
|
Object.defineProperty(exports, "ArrayCollection", { enumerable: true, get: function () { return __importDefault(array_collection_1).default; } });
|
|
19
20
|
var type_converter_1 = require("./utils/type-converter");
|
|
20
21
|
Object.defineProperty(exports, "TypeConverter", { enumerable: true, get: function () { return __importDefault(type_converter_1).default; } });
|
|
21
|
-
var model_1 = require("./model-builder/model");
|
|
22
|
-
Object.defineProperty(exports, "ModelCosmos", { enumerable: true, get: function () { return __importDefault(model_1).default; } });
|
|
23
22
|
var model_2 = require("./model-builder/model");
|
|
24
|
-
Object.defineProperty(exports, "
|
|
25
|
-
Object.defineProperty(exports, "getSharedPaginationCache", { enumerable: true, get: function () { return model_2.getSharedPaginationCache; } });
|
|
23
|
+
Object.defineProperty(exports, "ModelCosmos", { enumerable: true, get: function () { return __importDefault(model_2).default; } });
|
|
26
24
|
var model_3 = require("./model-builder/model");
|
|
27
|
-
Object.defineProperty(exports, "
|
|
28
|
-
Object.defineProperty(exports, "
|
|
25
|
+
Object.defineProperty(exports, "configurePaginationCache", { enumerable: true, get: function () { return model_3.configurePaginationCache; } });
|
|
26
|
+
Object.defineProperty(exports, "getSharedPaginationCache", { enumerable: true, get: function () { return model_3.getSharedPaginationCache; } });
|
|
27
|
+
var model_4 = require("./model-builder/model");
|
|
28
|
+
Object.defineProperty(exports, "configureRetryOptions", { enumerable: true, get: function () { return model_4.configureRetryOptions; } });
|
|
29
|
+
Object.defineProperty(exports, "getSharedRetryOptions", { enumerable: true, get: function () { return model_4.getSharedRetryOptions; } });
|
|
30
|
+
var model_5 = require("./model-builder/model");
|
|
31
|
+
Object.defineProperty(exports, "configureRuLogging", { enumerable: true, get: function () { return model_5.configureRuLogging; } });
|
|
32
|
+
Object.defineProperty(exports, "isRuLoggingEnabled", { enumerable: true, get: function () { return model_5.isRuLoggingEnabled; } });
|
|
29
33
|
var pagination_cache_1 = require("./utils/pagination-cache");
|
|
30
34
|
Object.defineProperty(exports, "PaginationCache", { enumerable: true, get: function () { return __importDefault(pagination_cache_1).default; } });
|
|
31
35
|
var retry_handler_1 = require("./utils/retry-handler");
|
|
@@ -102,7 +106,11 @@ function createCosmosDataSource(endpoint, key, databaseName, options) {
|
|
|
102
106
|
key,
|
|
103
107
|
...options?.clientOptions,
|
|
104
108
|
});
|
|
105
|
-
const { liveQueryConnections, liveQueryDatabase, builder, virtualArrayCollections, introspectionConfig, disableIntrospection, schema, } = options || {};
|
|
109
|
+
const { liveQueryConnections, liveQueryDatabase, builder, virtualArrayCollections, introspectionConfig, disableIntrospection, schema, logRuConsumption, } = options || {};
|
|
110
|
+
// Configure RU logging if enabled
|
|
111
|
+
if (logRuConsumption) {
|
|
112
|
+
(0, model_1.configureRuLogging)(true, logger);
|
|
113
|
+
}
|
|
106
114
|
// Apply introspection config defaults
|
|
107
115
|
const finalIntrospectionConfig = {
|
|
108
116
|
sampleSize: introspectionConfig?.sampleSize ?? 100,
|
|
@@ -167,4 +175,4 @@ function createCosmosDataSourceForEmulator(databaseName, options) {
|
|
|
167
175
|
return createCosmosDataSource(endpoint, key, databaseName, options);
|
|
168
176
|
}
|
|
169
177
|
exports.createCosmosDataSourceForEmulator = createCosmosDataSourceForEmulator;
|
|
170
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
178
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsMENBQWtFO0FBR2xFLDhEQUE0QztBQUM1QyxxREFBd0Y7QUFDeEYsZ0ZBQTBGO0FBQzFGLGlEQUEyRDtBQUUzRCw2RUFBOEU7QUFDOUUsOEZBQW9FO0FBOENwRSwyQ0FBMkQ7QUFBbEQsK0hBQUEsT0FBTyxPQUFvQjtBQUNwQywyQ0FBMkQ7QUFBbEQsK0hBQUEsT0FBTyxPQUFvQjtBQUNwQyx1REFBZ0U7QUFBdkQsb0lBQUEsT0FBTyxPQUFtQjtBQUNuQyx5REFBa0U7QUFBekQsZ0lBQUEsT0FBTyxPQUFpQjtBQUNqQywrQ0FBK0Q7QUFBdEQscUhBQUEsT0FBTyxPQUFlO0FBQy9CLCtDQUEyRjtBQUFsRixpSEFBQSx3QkFBd0IsT0FBQTtBQUFFLGlIQUFBLHdCQUF3QixPQUFBO0FBQzNELCtDQUFxRjtBQUE1RSw4R0FBQSxxQkFBcUIsT0FBQTtBQUFFLDhHQUFBLHFCQUFxQixPQUFBO0FBQ3JELCtDQUErRTtBQUF0RSwyR0FBQSxrQkFBa0IsT0FBQTtBQUFFLDJHQUFBLGtCQUFrQixPQUFBO0FBQy9DLDZEQUFzRTtBQUE3RCxvSUFBQSxPQUFPLE9BQW1CO0FBQ25DLHVEQUsrQjtBQUo3QiwwR0FBQSxTQUFTLE9BQUE7QUFDVCxtSEFBQSxrQkFBa0IsT0FBQTtBQUNsQixpSEFBQSxnQkFBZ0IsT0FBQTtBQUNoQixpSEFBQSxnQkFBZ0IsT0FBQTtBQUVsQiwyREFJaUM7QUFIL0Isa0lBQUEsT0FBTyxPQUFrQjtBQUN6Qix1SEFBQSxvQkFBb0IsT0FBQTtBQUNwQiwySEFBQSx3QkFBd0IsT0FBQTtBQWExQjs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxTQUFnQix3Q0FBd0MsQ0FDdEQsTUFBb0IsRUFDcEIsWUFBcUIsRUFDckIsT0FBOEI7SUFFOUIsT0FBTyxLQUFLLEVBQUUsTUFBYyxFQUFFLEVBQUU7UUFD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
|
|
@@ -1,9 +1,19 @@
|
|
|
1
1
|
import { Container, CosmosClient, SqlQuerySpec } from '@azure/cosmos';
|
|
2
|
-
import { RecordData } from '@forestadmin/datasource-toolkit';
|
|
2
|
+
import { Logger, RecordData } from '@forestadmin/datasource-toolkit';
|
|
3
3
|
import { OverrideTypeConverter } from '../introspection/builder';
|
|
4
4
|
import PaginationCache, { PaginationCacheOptions } from '../utils/pagination-cache';
|
|
5
5
|
import { RetryOptions, configureRetryOptions, getSharedRetryOptions } from '../utils/retry-handler';
|
|
6
6
|
export { RetryOptions, configureRetryOptions, getSharedRetryOptions };
|
|
7
|
+
/**
|
|
8
|
+
* Configure RU logging for all Cosmos DB operations
|
|
9
|
+
* @param enabled Whether to enable RU consumption logging
|
|
10
|
+
* @param logger The Forest Admin logger to use for RU logging
|
|
11
|
+
*/
|
|
12
|
+
export declare function configureRuLogging(enabled: boolean, logger?: Logger): void;
|
|
13
|
+
/**
|
|
14
|
+
* Check if RU logging is enabled
|
|
15
|
+
*/
|
|
16
|
+
export declare function isRuLoggingEnabled(): boolean;
|
|
7
17
|
export interface CosmosSchema {
|
|
8
18
|
[key: string]: {
|
|
9
19
|
type: string;
|
|
@@ -99,5 +109,9 @@ export default class ModelCosmos {
|
|
|
99
109
|
* Get container name
|
|
100
110
|
*/
|
|
101
111
|
getContainerName(): string;
|
|
112
|
+
/**
|
|
113
|
+
* Log RU consumption if enabled
|
|
114
|
+
*/
|
|
115
|
+
private logRuConsumption;
|
|
102
116
|
}
|
|
103
117
|
//# sourceMappingURL=model.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/model-builder/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAkB,YAAY,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/model-builder/model.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,13 +3,35 @@ 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.configurePaginationCache = exports.getSharedPaginationCache = exports.getSharedRetryOptions = exports.configureRetryOptions = void 0;
|
|
6
|
+
exports.configurePaginationCache = exports.getSharedPaginationCache = exports.isRuLoggingEnabled = exports.configureRuLogging = exports.getSharedRetryOptions = exports.configureRetryOptions = void 0;
|
|
7
7
|
const crypto_1 = require("crypto");
|
|
8
8
|
const pagination_cache_1 = __importDefault(require("../utils/pagination-cache"));
|
|
9
9
|
const retry_handler_1 = require("../utils/retry-handler");
|
|
10
10
|
Object.defineProperty(exports, "configureRetryOptions", { enumerable: true, get: function () { return retry_handler_1.configureRetryOptions; } });
|
|
11
11
|
Object.defineProperty(exports, "getSharedRetryOptions", { enumerable: true, get: function () { return retry_handler_1.getSharedRetryOptions; } });
|
|
12
12
|
const serializer_1 = __importDefault(require("../utils/serializer"));
|
|
13
|
+
/**
|
|
14
|
+
* Shared RU logging configuration
|
|
15
|
+
*/
|
|
16
|
+
let sharedRuLoggingEnabled = false;
|
|
17
|
+
let sharedRuLogger = null;
|
|
18
|
+
/**
|
|
19
|
+
* Configure RU logging for all Cosmos DB operations
|
|
20
|
+
* @param enabled Whether to enable RU consumption logging
|
|
21
|
+
* @param logger The Forest Admin logger to use for RU logging
|
|
22
|
+
*/
|
|
23
|
+
function configureRuLogging(enabled, logger) {
|
|
24
|
+
sharedRuLoggingEnabled = enabled;
|
|
25
|
+
sharedRuLogger = logger ?? null;
|
|
26
|
+
}
|
|
27
|
+
exports.configureRuLogging = configureRuLogging;
|
|
28
|
+
/**
|
|
29
|
+
* Check if RU logging is enabled
|
|
30
|
+
*/
|
|
31
|
+
function isRuLoggingEnabled() {
|
|
32
|
+
return sharedRuLoggingEnabled;
|
|
33
|
+
}
|
|
34
|
+
exports.isRuLoggingEnabled = isRuLoggingEnabled;
|
|
13
35
|
/**
|
|
14
36
|
* Shared pagination cache instance for all models
|
|
15
37
|
* This is shared to allow cache reuse across collections and reduce memory usage
|
|
@@ -73,9 +95,10 @@ class ModelCosmos {
|
|
|
73
95
|
...unflattenedRecord,
|
|
74
96
|
};
|
|
75
97
|
// eslint-disable-next-line no-await-in-loop -- Sequential execution maintains order
|
|
76
|
-
const
|
|
98
|
+
const response = await (0, retry_handler_1.withRetry)(() => this.container.items.create(itemToCreate), this.retryOptions);
|
|
99
|
+
this.logRuConsumption('create', response.requestCharge);
|
|
77
100
|
// Flatten and serialize the response
|
|
78
|
-
createdRecords.push(serializer_1.default.serialize(resource));
|
|
101
|
+
createdRecords.push(serializer_1.default.serialize(response.resource));
|
|
79
102
|
}
|
|
80
103
|
return createdRecords;
|
|
81
104
|
}
|
|
@@ -87,13 +110,15 @@ class ModelCosmos {
|
|
|
87
110
|
for (const { id, partitionKey } of items) {
|
|
88
111
|
// Point read: directly fetch item using id + partition key (1 RU)
|
|
89
112
|
// eslint-disable-next-line no-await-in-loop -- Sequential maintains consistency
|
|
90
|
-
const
|
|
91
|
-
|
|
113
|
+
const readResponse = await (0, retry_handler_1.withRetry)(() => this.container.item(id, partitionKey).read(), this.retryOptions);
|
|
114
|
+
this.logRuConsumption('update.read', readResponse.requestCharge);
|
|
115
|
+
if (readResponse.resource) {
|
|
92
116
|
// Deep merge the unflattened patch with the existing item
|
|
93
|
-
const updatedItem = serializer_1.default.deepMerge(
|
|
117
|
+
const updatedItem = serializer_1.default.deepMerge(readResponse.resource, unflattenedPatch);
|
|
94
118
|
// Point update: directly update using id + partition key
|
|
95
119
|
// eslint-disable-next-line no-await-in-loop -- Sequential maintains consistency
|
|
96
|
-
await (0, retry_handler_1.withRetry)(() => this.container.item(id, partitionKey).replace(updatedItem), this.retryOptions);
|
|
120
|
+
const replaceResponse = await (0, retry_handler_1.withRetry)(() => this.container.item(id, partitionKey).replace(updatedItem), this.retryOptions);
|
|
121
|
+
this.logRuConsumption('update.replace', replaceResponse.requestCharge);
|
|
97
122
|
}
|
|
98
123
|
}
|
|
99
124
|
}
|
|
@@ -102,7 +127,8 @@ class ModelCosmos {
|
|
|
102
127
|
for (const { id, partitionKey } of items) {
|
|
103
128
|
// Point delete: directly delete using id + partition key
|
|
104
129
|
// eslint-disable-next-line no-await-in-loop -- Sequential maintains consistency
|
|
105
|
-
await (0, retry_handler_1.withRetry)(() => this.container.item(id, partitionKey).delete(), this.retryOptions);
|
|
130
|
+
const response = await (0, retry_handler_1.withRetry)(() => this.container.item(id, partitionKey).delete(), this.retryOptions);
|
|
131
|
+
this.logRuConsumption('delete', response.requestCharge);
|
|
106
132
|
}
|
|
107
133
|
}
|
|
108
134
|
async query(querySpec, offset, limit, partitionKey) {
|
|
@@ -114,8 +140,9 @@ class ModelCosmos {
|
|
|
114
140
|
}
|
|
115
141
|
// If no pagination parameters, fetch all (backward compatibility)
|
|
116
142
|
if (offset === undefined && limit === undefined) {
|
|
117
|
-
const
|
|
118
|
-
|
|
143
|
+
const response = await (0, retry_handler_1.withRetry)(() => this.container.items.query(querySpec, queryOptions).fetchAll(), this.retryOptions);
|
|
144
|
+
this.logRuConsumption('query.fetchAll', response.requestCharge);
|
|
145
|
+
return response.resources.map(item => serializer_1.default.serialize(item));
|
|
119
146
|
}
|
|
120
147
|
const effectiveOffset = offset || 0;
|
|
121
148
|
const effectiveLimit = limit || 100; // Default limit if not specified
|
|
@@ -151,7 +178,8 @@ class ModelCosmos {
|
|
|
151
178
|
// Iterate through pages until we have enough items
|
|
152
179
|
// eslint-disable-next-line no-restricted-syntax
|
|
153
180
|
for await (const response of queryIterator.getAsyncIterator()) {
|
|
154
|
-
const { resources: page, continuationToken } = response;
|
|
181
|
+
const { resources: page, continuationToken, requestCharge } = response;
|
|
182
|
+
this.logRuConsumption('query.page', requestCharge);
|
|
155
183
|
// Store continuation token for future use at regular intervals
|
|
156
184
|
const cacheInterval = this.paginationCache.getCacheInterval();
|
|
157
185
|
if (continuationToken && currentOffset > 0 && currentOffset % cacheInterval < pageSize) {
|
|
@@ -190,8 +218,9 @@ class ModelCosmos {
|
|
|
190
218
|
if (partitionKey !== undefined) {
|
|
191
219
|
queryOptions.partitionKey = partitionKey;
|
|
192
220
|
}
|
|
193
|
-
const
|
|
194
|
-
|
|
221
|
+
const response = await (0, retry_handler_1.withRetry)(() => this.container.items.query(querySpec, queryOptions).fetchAll(), this.retryOptions);
|
|
222
|
+
this.logRuConsumption('aggregate', response.requestCharge);
|
|
223
|
+
return response.resources.map(item => serializer_1.default.serialize(item));
|
|
195
224
|
}
|
|
196
225
|
async count(querySpec, partitionKey) {
|
|
197
226
|
// Build query options with partition key if provided
|
|
@@ -204,13 +233,15 @@ class ModelCosmos {
|
|
|
204
233
|
const countQuery = {
|
|
205
234
|
query: 'SELECT VALUE COUNT(1) FROM c',
|
|
206
235
|
};
|
|
207
|
-
const
|
|
208
|
-
|
|
236
|
+
const response = await (0, retry_handler_1.withRetry)(() => this.container.items.query(countQuery, queryOptions).fetchAll(), this.retryOptions);
|
|
237
|
+
this.logRuConsumption('count', response.requestCharge);
|
|
238
|
+
return response.resources[0] || 0;
|
|
209
239
|
}
|
|
210
240
|
// Convert the query to a COUNT query to avoid fetching all records
|
|
211
241
|
const countQuery = this.convertToCountQuery(querySpec);
|
|
212
|
-
const
|
|
213
|
-
|
|
242
|
+
const response = await (0, retry_handler_1.withRetry)(() => this.container.items.query(countQuery, queryOptions).fetchAll(), this.retryOptions);
|
|
243
|
+
this.logRuConsumption('count', response.requestCharge);
|
|
244
|
+
return response.resources[0] || 0;
|
|
214
245
|
}
|
|
215
246
|
/**
|
|
216
247
|
* Convert a SELECT query to a COUNT query
|
|
@@ -267,6 +298,16 @@ class ModelCosmos {
|
|
|
267
298
|
getContainerName() {
|
|
268
299
|
return this.containerName;
|
|
269
300
|
}
|
|
301
|
+
/**
|
|
302
|
+
* Log RU consumption if enabled
|
|
303
|
+
*/
|
|
304
|
+
logRuConsumption(operation, requestCharge) {
|
|
305
|
+
if (!sharedRuLoggingEnabled || requestCharge === undefined) {
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
const message = `[Cosmos RU] ${this.name}.${operation}: ${requestCharge} RUs`;
|
|
309
|
+
sharedRuLogger?.('Info', message);
|
|
310
|
+
}
|
|
270
311
|
}
|
|
271
312
|
exports.default = ModelCosmos;
|
|
272
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwtYnVpbGRlci9tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFQSxtQ0FBb0M7QUFHcEMsaUZBQW9GO0FBQ3BGLDBEQUtnQztBQUdULHNHQU5yQixxQ0FBcUIsT0FNcUI7QUFBRSxzR0FMNUMscUNBQXFCLE9BSzRDO0FBRm5FLHFFQUE2QztBQWlCN0M7OztHQUdHO0FBQ0gsSUFBSSxxQkFBcUIsR0FBMkIsSUFBSSxDQUFDO0FBRXpEOzs7R0FHRztBQUNILFNBQWdCLHdCQUF3QixDQUFDLE9BQWdDO0lBQ3ZFLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzNCLHFCQUFxQixHQUFHLElBQUksMEJBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsT0FBTyxxQkFBcUIsQ0FBQztBQUMvQixDQUFDO0FBTkQsNERBTUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0Isd0JBQXdCLENBQUMsT0FBK0I7SUFDdEUscUJBQXFCLEdBQUcsSUFBSSwwQkFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZELENBQUM7QUFGRCw0REFFQztBQUVELE1BQXFCLFdBQVc7SUErQzlCLFlBQ0UsWUFBMEIsRUFDMUIsSUFBWSxFQUNaLFlBQW9CLEVBQ3BCLGFBQXFCLEVBQ3JCLGdCQUF3QixFQUN4QixNQUFvQixFQUNwQixxQkFBNkMsRUFDN0MsV0FBcUI7UUFFckIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDbkMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxxQkFBcUIs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
|
|
313
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwtYnVpbGRlci9tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFQSxtQ0FBb0M7QUFHcEMsaUZBQW9GO0FBQ3BGLDBEQUtnQztBQUdULHNHQU5yQixxQ0FBcUIsT0FNcUI7QUFBRSxzR0FMNUMscUNBQXFCLE9BSzRDO0FBRm5FLHFFQUE2QztBQUk3Qzs7R0FFRztBQUNILElBQUksc0JBQXNCLEdBQUcsS0FBSyxDQUFDO0FBQ25DLElBQUksY0FBYyxHQUFrQixJQUFJLENBQUM7QUFFekM7Ozs7R0FJRztBQUNILFNBQWdCLGtCQUFrQixDQUFDLE9BQWdCLEVBQUUsTUFBZTtJQUNsRSxzQkFBc0IsR0FBRyxPQUFPLENBQUM7SUFDakMsY0FBYyxHQUFHLE1BQU0sSUFBSSxJQUFJLENBQUM7QUFDbEMsQ0FBQztBQUhELGdEQUdDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixrQkFBa0I7SUFDaEMsT0FBTyxzQkFBc0IsQ0FBQztBQUNoQyxDQUFDO0FBRkQsZ0RBRUM7QUFlRDs7O0dBR0c7QUFDSCxJQUFJLHFCQUFxQixHQUEyQixJQUFJLENBQUM7QUFFekQ7OztHQUdHO0FBQ0gsU0FBZ0Isd0JBQXdCLENBQUMsT0FBZ0M7SUFDdkUsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDM0IscUJBQXFCLEdBQUcsSUFBSSwwQkFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxPQUFPLHFCQUFxQixDQUFDO0FBQy9CLENBQUM7QUFORCw0REFNQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQix3QkFBd0IsQ0FBQyxPQUErQjtJQUN0RSxxQkFBcUIsR0FBRyxJQUFJLDBCQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdkQsQ0FBQztBQUZELDREQUVDO0FBRUQsTUFBcUIsV0FBVztJQStDOUIsWUFDRSxZQUEwQixFQUMxQixJQUFZLEVBQ1os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
|