UNPKG

ts-odata-client

Version:
132 lines (131 loc) 6.62 kB
"use strict"; 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())); }