ts-flex-query
Version:
Flexible and type-safe data queries
42 lines • 2.08 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ODataExecutor = void 0;
const operators_1 = require("rxjs/operators");
const odata_collection_1 = require("../expressions/odata-collection");
const definitions_1 = require("../helpers/definitions");
const query_composer_1 = require("../query-composition/query-composer");
const request_builder_1 = require("./request-builder");
class ODataExecutor {
/**
* Constructor.
* @param query The function to execute the query against the backend.
* @param unexpandableFieldChains Specifies field chains which cannot be expanded. The select OData operator is used for these fields instead.
*/
constructor(params) {
this.params = params;
}
execute(expression) {
const builder = new request_builder_1.RequestBuilder(this.params);
const includeCountResult = builder.buildWithPossibleIncludeCount(expression);
const queryText = new query_composer_1.QueryComposer(this.params).buildFromRequest(builder.result);
const rootExpression = builder.rootExpression;
if (!(rootExpression instanceof odata_collection_1.ODataCollectionExpression)) {
throw new Error('No ODataCollection root expression was found. Cannot determine OData collection name.');
}
return this.params.execute(rootExpression.name, queryText).pipe((0, operators_1.map)((response) => {
if (typeof response !== 'object') {
throw new Error(`OData response must be an object with field value, but type was: ${typeof response}`);
}
if (includeCountResult) {
const typedResponse = response;
return {
[includeCountResult.countFieldName]: typedResponse[definitions_1.oDataCountField],
[includeCountResult.elementsFieldName]: typedResponse.value
};
}
return response.value;
}));
}
}
exports.ODataExecutor = ODataExecutor;
//# sourceMappingURL=odata-executor.js.map