UNPKG

ts-flex-query

Version:
42 lines 2.08 kB
"use strict"; 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