UNPKG

ts-flex-query

Version:
72 lines 3.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.QueryComposer = void 0; const utils_1 = require("../../helpers/utils"); /** Creates a query text from an ODataRequest. */ class QueryComposer { constructor(params) { this.params = params; } buildFromRequest(request, partSeparator = '&') { var _a, _b, _c, _d, _e, _f; const actualSelect = [ ...(_a = request.select) !== null && _a !== void 0 ? _a : [], ...Object.keys((_b = request.expand) !== null && _b !== void 0 ? _b : {}) ]; const queryParts = { $apply: request.apply ? QueryComposer.buildApplyPart(request.apply) : undefined, $count: request.count || undefined, $filter: ((_c = request.filter) === null || _c === void 0 ? void 0 : _c.value) || undefined, $orderBy: request.orderBy && QueryComposer.buildOrderByPart(request.orderBy), $skip: request.skip || undefined, $top: request.top, $select: actualSelect.length ? actualSelect.join(',') : undefined, $expand: request.expand && Object.keys(request.expand).length ? this.buildExpandPart(request.expand) : undefined }; const finalQueryParts = (_f = (_e = (_d = this.params).customQueryComposer) === null || _e === void 0 ? void 0 : _e.call(_d, { request, defaultParts: queryParts })) !== null && _f !== void 0 ? _f : queryParts; return Object .entries(finalQueryParts) .filter((entry) => (0, utils_1.isDefined)(entry[1])) .map((entry) => `${entry[0]}=${entry[1].toString().replace('&', '%26')}`) .join(partSeparator); } static buildApplyPart(apply) { return apply.length ? apply.map(QueryComposer.serializeApply).join('/') : undefined; } static serializeApply(apply) { switch (apply.type) { case 'groupby': { const groupApply = QueryComposer.buildApplyPart(apply.groupApply) || ''; const groupByFields = apply.fields.join(','); return `groupby((${groupByFields})${groupApply && ',' + groupApply})`; } case 'aggregate': { const elements = apply.elements.map(QueryComposer.serializeAggregateElement).join(','); return `aggregate(${elements})`; } case 'filter': return `filter(${apply.value})`; default: return (0, utils_1.unexpected)(apply); } } static serializeAggregateElement(element) { return `${element.field ? element.field + ' with ' : ''}${element.aggregationFunction} as ${element.name}`; } buildExpandPart(expand) { return Object .entries(expand) .map((v) => ({ field: v[0], request: v[1] && this.buildFromRequest(v[1], ';') })) .map((v) => v.request ? `${v.field}(${v.request})` : v.field) .join(','); } static buildOrderByPart(orderBy) { return orderBy.length ? orderBy .map((element) => `${element.field}${element.mode === 'asc' ? '' : ` ${element.mode}`}`) .join(',') : undefined; } } exports.QueryComposer = QueryComposer; //# sourceMappingURL=query-composer.js.map