ts-odata-client
Version:
OData TypeScript Client
132 lines (131 loc) • 6.62 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.ODataQueryBase = void 0;
var FieldReference_1 = require("./FieldReference");
var Expression_1 = require("./Expression");
var FilterAccessoryFunctions_1 = require("./FilterAccessoryFunctions");
var ProxyFilterTypes_1 = require("./ProxyFilterTypes");
var ProxyTypes_1 = require("./ProxyTypes");
/**
* Represents a query against an OData source.
* This query is agnostic of the version of OData supported by the server (the provided @type {ODataQueryProvider} is responsible for translating the query into the correct syntax for the desired OData version supported by the endpoint).
*/
var ODataQueryBase = /** @class */ (function () {
function ODataQueryBase(provider, expression) {
this.provider = provider;
this.expression = expression;
}
ODataQueryBase.prototype.select = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
if (args.length === 0)
throw new Error("Parameters are required");
var firstArg = args[0];
if (typeof firstArg === "function") {
var proxy = this.provider[ProxyFilterTypes_1.createProxiedEntity]();
firstArg(proxy);
var expression_1 = new Expression_1.Expression("select" /* ExpressionOperator.Select */, __spreadArray([firstArg], getUsedPropertyPaths(proxy), true), this.expression);
return this.provider.createQuery(expression_1);
}
var expression = new Expression_1.Expression("select" /* ExpressionOperator.Select */, args.map(function (v) { return new FieldReference_1.FieldReference(v); }), this.expression);
return this.provider.createQuery(expression);
};
/**
* Returns the top n records; the most recent call to top() will be used.
* @param n
*/
ODataQueryBase.prototype.top = function (n) {
var expression = new Expression_1.Expression("top" /* ExpressionOperator.Top */, [n], this.expression);
return this.provider.createQuery(expression);
};
/**
* Omits the first n records from appear in the returned records; the most recent call to skip() will be used.
* @param n
*/
ODataQueryBase.prototype.skip = function (n) {
var expression = new Expression_1.Expression("skip" /* ExpressionOperator.Skip */, [n], this.expression);
return this.provider.createQuery(expression);
};
/**
* Determines the sort order (ascending) of the records; calls or orderBy() and orderByDescending() are cumulative.
* @param fields
*/
ODataQueryBase.prototype.orderBy = function (fields) {
var proxy = this.provider[ProxyFilterTypes_1.createProxiedEntity]();
var properties = [fields(proxy)].flat();
var expression = new Expression_1.Expression("orderBy" /* ExpressionOperator.OrderBy */, properties.map(function (f) { return new FieldReference_1.FieldReference(f[ProxyTypes_1.propertyPath].join("/")); }), this.expression);
return this.provider.createQuery(expression);
};
/**
* Determines the sort order (descending) of the records; calls to orderBy() and orderByDescending() are cumulative.
* @param fields
*/
ODataQueryBase.prototype.orderByDescending = function (fields) {
var proxy = this.provider[ProxyFilterTypes_1.createProxiedEntity]();
var properties = [fields(proxy)].flat();
var expression = new Expression_1.Expression("orderByDescending" /* ExpressionOperator.OrderByDescending */, properties.map(function (f) { return new FieldReference_1.FieldReference(f[ProxyTypes_1.propertyPath].join("/")); }), this.expression);
return this.provider.createQuery(expression);
};
/**
* Filters the records based on the provided expression; multiple calls to filter() are cumulative (as well as UNIONed (AND))
* @param predicate A function that takes in an entity proxy and returns a BooleanPredicateBuilder.
*/
ODataQueryBase.prototype.filter = function (predicate) {
if (typeof predicate === "function")
predicate = predicate(this.provider[ProxyFilterTypes_1.createProxiedEntity](), new FilterAccessoryFunctions_1.FilterAccessoryFunctions());
var expression = new Expression_1.Expression("predicate" /* ExpressionOperator.Predicate */, [predicate], this.expression);
return this.provider.createQuery(expression);
};
/**
* Includes the indicated arrays are to be returned as part of the query results.
* @param fields
*/
ODataQueryBase.prototype.expand = function () {
var fields = [];
for (var _i = 0; _i < arguments.length; _i++) {
fields[_i] = arguments[_i];
}
var expression = new Expression_1.Expression("expand" /* ExpressionOperator.Expand */, fields.map(function (f) { return new FieldReference_1.FieldReference(f); }), this.expression);
return this.provider.createQuery(expression);
};
/**
* Includes all arrays as part of the query results.
* @param fields
*/
ODataQueryBase.prototype.expandAll = function () {
var expression = new Expression_1.Expression("expandAll" /* ExpressionOperator.ExpandAll */, [], this.expression);
return this.provider.createQuery(expression);
};
ODataQueryBase.prototype.build = function () {
return this.provider.build(this.expression);
};
return ODataQueryBase;
}());
exports.ODataQueryBase = ODataQueryBase;
/**
* Function that returns all OData paths that were used by the proxy.
* @param projectTarget
* @returns An array of paths found within the object (if the same path is used more than once, the duplicates are removed)
*/
function getUsedPropertyPaths(proxy) {
var paths = [];
for (var _i = 0, _a = proxy[ProxyTypes_1.proxyProperties]; _i < _a.length; _i++) {
var p = _a[_i];
if (p[ProxyTypes_1.proxyProperties].length === 0)
paths.push(p[ProxyTypes_1.propertyPath].join("/"));
else
paths.push.apply(paths, getUsedPropertyPaths(p));
}
return Array.from(new Set(paths.flat()));
}