ts-odata-client
Version:
OData TypeScript Client
59 lines (58 loc) • 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.FilterAccessoryFunctions = void 0;
var BooleanPredicateBuilder_1 = require("./BooleanPredicateBuilder");
var Expression_1 = require("./Expression");
/**
* Provides additional functionality for the .filter() method on @type {ODataQuery}
*/
var FilterAccessoryFunctions = /** @class */ (function () {
function FilterAccessoryFunctions() {
// Ensure the methods are bound to this object;
// Even if they become detatched (e.g., destructuring)
this.and = this.and.bind(this);
this.or = this.or.bind(this);
this.not = this.not.bind(this);
}
FilterAccessoryFunctions.prototype.and = function () {
var predicates = [];
for (var _i = 0; _i < arguments.length; _i++) {
predicates[_i] = arguments[_i];
}
return this.combinePredicates.apply(this, __spreadArray(["and" /* ExpressionOperator.And */], predicates, false));
};
FilterAccessoryFunctions.prototype.or = function () {
var predicates = [];
for (var _i = 0; _i < arguments.length; _i++) {
predicates[_i] = arguments[_i];
}
return this.combinePredicates.apply(this, __spreadArray(["or" /* ExpressionOperator.Or */], predicates, false));
};
FilterAccessoryFunctions.prototype.not = function (predicate) {
return new BooleanPredicateBuilder_1.BooleanPredicateBuilder(new Expression_1.Expression("not" /* ExpressionOperator.Not */, [predicate.expression]));
};
FilterAccessoryFunctions.prototype.combinePredicates = function (operator) {
var predicates = [];
for (var _i = 1; _i < arguments.length; _i++) {
predicates[_i - 1] = arguments[_i];
}
if (predicates.length === 0)
throw new Error("At least one predicate must be provided");
return predicates.reduce(function (acc, predicate, index) {
if (index === 0)
return predicate;
return new BooleanPredicateBuilder_1.BooleanPredicateBuilder(new Expression_1.Expression(operator, [acc.expression, predicate.expression]));
});
};
return FilterAccessoryFunctions;
}());
exports.FilterAccessoryFunctions = FilterAccessoryFunctions;