@sap-cloud-sdk/core
Version:
SAP Cloud SDK for JavaScript core
56 lines • 2.68 kB
JavaScript
;
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getSelectV2 = exports.getSelect = void 0;
var odata_common_1 = require("../../odata-common");
/**
* Get an object containing the given Selectables as query parameter, or an empty object if none were given.
* This retrieves where in addition to the selection (`select`) there is also an expansion (`expand`) needed.
* @typeparam EntityT - Type of the entity to get the selection for
* @param selects - The list of selectables to be transformed to query parameters
* @returns An object containing the query parameters or an empty object
*/
function getSelect(selects) {
if (selects === void 0) { selects = []; }
var select = getSelectsAsStrings(selects);
return select.length ? { select: filterSelects(select).join(',') } : {};
}
exports.getSelect = getSelect;
exports.getSelectV2 = getSelect;
function selectionLevel(select) {
return select.split('/').slice(0, -1).join('/');
}
function filterSelects(selects) {
var allFieldSelects = selects.filter(function (select) { return select.endsWith('*'); });
var selectionLevels = allFieldSelects.map(function (select) { return selectionLevel(select); });
return __spreadArray(__spreadArray([], allFieldSelects, true), selects.filter(function (select) { return !selectionLevels.includes(selectionLevel(select)); }), true);
}
function getSelectsAsStrings(selectables, initialSelect, parent) {
if (initialSelect === void 0) { initialSelect = []; }
if (parent === void 0) { parent = ''; }
return selectables.reduce(function (select, selectable) {
var fullFieldName = getPath(parent, selectable._fieldName);
if (selectable instanceof odata_common_1.Link) {
if (selectable._selects.length) {
return getSelectsAsStrings(selectable._selects, select, fullFieldName);
}
return __spreadArray(__spreadArray([], select, true), ["".concat(fullFieldName, "/*")], false);
}
return __spreadArray(__spreadArray([], select, true), [fullFieldName], false);
}, initialSelect);
}
function getPath(parent, fieldName) {
if (parent) {
return "".concat(parent, "/").concat(fieldName);
}
return fieldName;
}
//# sourceMappingURL=get-select.js.map