breeze2-odata4
Version:
Library to allow OData 4 support for breezejs 2
90 lines • 3.56 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var breeze_client_1 = require("breeze-client");
var OData4PredicateVisitor = (function () {
function OData4PredicateVisitor() {
}
OData4PredicateVisitor.register = function () {
var visitor = new OData4PredicateVisitor();
var PredicatePrototype = breeze_client_1.Predicate.prototype;
PredicatePrototype.toODataFragment = function (context) {
return this.visit(context, visitor);
};
};
OData4PredicateVisitor.prototype.passthruPredicate = function () {
return this.value;
};
OData4PredicateVisitor.prototype.unaryPredicate = function (context) {
var predVal = this.pred.visit(context);
var op = this.op.key;
return op + " (" + predVal + ")";
};
OData4PredicateVisitor.prototype.binaryPredicate = function (context) {
var expr1Val = this.expr1.visit(context);
var expr2Val = this.expr2.visit(context);
var prefix = context.prefix;
if (prefix) {
expr1Val = prefix + "/" + expr1Val;
}
var op = this.op.key;
if (op === 'in') {
var result = expr2Val.map(function (v) { return "(" + expr1Val + " eq " + v + ")"; }).join(' or ');
return result;
}
else if (this.op.isFunction) {
return op + "(" + expr1Val + "," + expr2Val + ")";
}
else {
return expr1Val + " " + op + " " + expr2Val;
}
};
OData4PredicateVisitor.prototype.andOrPredicate = function (context) {
var op = this.op.key;
var result = this.preds
.map(function (pred) { return "(" + pred.visit(context) + ")"; })
.join(" " + op + " ");
return result;
};
OData4PredicateVisitor.prototype.anyAllPredicate = function (context) {
var op = this.op.key;
var exprVal = this.expr.visit(context);
if (!this.pred.op) {
return exprVal + "/" + op + "()";
}
var prefix = context.prefix;
var idx = 1;
if (prefix) {
exprVal = prefix + "/" + exprVal;
idx = Number(prefix.substring(1)) + 1;
}
prefix = "x" + idx;
var newContext = Object.assign({}, context, {
entityType: this.expr.dataType,
prefix: prefix
});
var newPredVal = this.pred.visit(newContext);
return exprVal + "/" + op + "(" + prefix + ": " + newPredVal + ")";
};
OData4PredicateVisitor.prototype.litExpr = function () {
var _this = this;
if (Array.isArray(this.value)) {
return this.value.map(function (v) { return _this.dataType.fmtOData(v); });
}
else {
return this.dataType.fmtOData(this.value);
}
};
OData4PredicateVisitor.prototype.propExpr = function (context) {
var entityType = context.entityType;
return entityType
? entityType.clientPropertyPathToServer(this.propertyPath, '/')
: this.propertyPath;
};
OData4PredicateVisitor.prototype.fnExpr = function (context) {
var exprVals = this.exprs.map(function (expr) { return expr.visit(context); });
return this.fnName + "(" + exprVals + ")";
};
return OData4PredicateVisitor;
}());
exports.OData4PredicateVisitor = OData4PredicateVisitor;
//# sourceMappingURL=breeze-odata4-predicateVisitor.js.map