UNPKG

ts-odata-client

Version:
89 lines (88 loc) 4.13 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.ODataQueryProvider = void 0; var ODataQuery_1 = require("./ODataQuery"); var ProxyPropertyPredicate_1 = require("./ProxyPropertyPredicate"); var ProxyFilterTypes_1 = require("./ProxyFilterTypes"); var ProxyTypes_1 = require("./ProxyTypes"); /** * Base type used by all @type {ODataQueryProvider} implementations. */ var ODataQueryProvider = /** @class */ (function () { function ODataQueryProvider() { this.lambdaProxyCounter = 0; } /** * Creates a new @type {ODataQuery} using the current provider. * @param expression The @type {Expression} the query will be based on. */ ODataQueryProvider.prototype.createQuery = function (expression) { return new ODataQuery_1.ODataQuery(this, expression); }; ODataQueryProvider.prototype[ProxyFilterTypes_1.createProxiedEntity] = function (isLambdaProxy) { var _a; var _this = this; if (isLambdaProxy === void 0) { isLambdaProxy = false; } var lambdaVariableName = isLambdaProxy ? "p".concat(this.lambdaProxyCounter++) : ""; return new Proxy((_a = {}, _a[ProxyTypes_1.lambdaVariable] = lambdaVariableName, _a[ProxyTypes_1.proxyProperties] = new Array(), _a), { get: function (instance, property) { if (typeof property === "symbol") { switch (property) { case ProxyTypes_1.lambdaVariable: return instance[ProxyTypes_1.lambdaVariable]; case ProxyTypes_1.proxyProperties: return instance[ProxyTypes_1.proxyProperties]; default: throw new Error("Unkonwn symbol"); } } var path = [property]; if (isLambdaProxy) { path.unshift(lambdaVariableName); } var proxyProperty = _this.createPropertyProxy(path); instance[ProxyTypes_1.proxyProperties].push(proxyProperty); return proxyProperty; }, }); }; ODataQueryProvider.prototype.createPropertyProxy = function (navigationPath) { var _a; var _this = this; if (navigationPath.length === 0) throw new Error("PropertyProxy must be initialized with at least one proprety path"); var target = (_a = {}, _a[ProxyTypes_1.propertyPath] = navigationPath, _a[ProxyTypes_1.proxyProperties] = new Array(), _a); var predicate = new ProxyPropertyPredicate_1.ProxyPropertyPredicate(target, this); return new Proxy(target, { get: function (target, property) { if (typeof property === "symbol") { switch (property) { case ProxyTypes_1.propertyPath: return target[ProxyTypes_1.propertyPath]; case ProxyTypes_1.proxyProperties: return target[ProxyTypes_1.proxyProperties]; default: throw new Error("Unknown symbol"); } } if (property.startsWith("$")) { return predicate[property.slice(1)].bind(predicate); } var propertyProxy = _this.createPropertyProxy(__spreadArray(__spreadArray([], navigationPath, true), [property], false)); target[ProxyTypes_1.proxyProperties].push(propertyProxy); return propertyProxy; }, }); }; return ODataQueryProvider; }()); exports.ODataQueryProvider = ODataQueryProvider;