ts-odata-client
Version:
OData TypeScript Client
89 lines (88 loc) • 4.13 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.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;