UNPKG

dogmaql.driver.redis

Version:

Redis driver for DogmaQL (Dogma Query Language).

125 lines (123 loc) 5.55 kB
"use strict"; var _dogmalang = require("dogmalang"); const $LuaTrans = class LuaTrans { constructor() { {} } }; const LuaTrans = new Proxy($LuaTrans, { apply(receiver, self, args) { return new $LuaTrans(...args); } });module.exports = exports = LuaTrans; LuaTrans.prototype.transform = function (exp) { _dogmalang.dogma.paramExpected("exp", exp, null);{ return this._transNode(exp.root); } }; LuaTrans.prototype.transformSet = function (exp) { _dogmalang.dogma.paramExpected("exp", exp, null);{ return this._transNode(exp.root); } }; LuaTrans.prototype._transNode = function (node) { let code = "";_dogmalang.dogma.paramExpected("node", node, null);{ const $aux15187793585715 = (0, _dogmalang.typename)(node);if ($aux15187793585715 == "UnaryOp") { code = this._transUnaryOp(node); } else if ($aux15187793585715 == "BinOp") { code = this._transBinOp(node); } else if ($aux15187793585715 == "TernaryOp") { code = this._transTernaryOp(node); } else if ($aux15187793585715 == "Name") { code = this._transName(node); } else if ($aux15187793585715 == "NaryOp") { code = this._transNaryOp(node); } else if ($aux15187793585715 == "SubExp") { code = this._transNode(node.value.root); } else { /* istanbul ignore else */if (_dogmalang.dogma.is(node, "Literal")) { code = this._transLiteral(node); } else { _dogmalang.dogma.raise("'%s' node type not processed.", (0, _dogmalang.typename)(node)); } } }return code; }; LuaTrans.prototype._transName = function (node) { _dogmalang.dogma.paramExpected("node", node, null);{ return node.value; } }; LuaTrans.prototype._transLiteral = function (node) { let code = "";_dogmalang.dogma.paramExpected("node", node, null);{ const val = node.value;const $aux15187793584596 = (0, _dogmalang.typename)(val);if ($aux15187793584596 == "text") { code = (0, _dogmalang.fmt)("\"%s\"", val); } else if ($aux15187793584596 == "bool") { code = (0, _dogmalang.text)(val); } else if ($aux15187793584596 == "num") { code = (0, _dogmalang.text)(val); } else { code = "nil"; } }return code; }; LuaTrans.prototype._transUnaryOp = function (node) { _dogmalang.dogma.paramExpected("node", node, null);{ return (0, _dogmalang.fmt)("(not %s)", this._transNode(node.child)); } }; LuaTrans.prototype._transBinOp = function (node) { let code = "";_dogmalang.dogma.paramExpected("node", node, null);{ /* istanbul ignore else */if (_dogmalang.dogma.includes(["==", "<", "<=", ">", ">=", "+", "-", ".", "and", "or"], node.op)) { code = (0, _dogmalang.fmt)("(%s %s %s)", this._transNode(node.left), node.op, this._transNode(node.right)); } else if (node.op == "!=") { code = (0, _dogmalang.fmt)("(%s ~= %s)", this._transNode(node.left), this._transNode(node.right)); } else if (_dogmalang.dogma.includes(["like", "notlike"], node.op)) { code = this._transLikeOp(node); } else if (_dogmalang.dogma.includes(["in", "notin"], node.op)) { code = this._transInOp(node); } else if (node.op == "[]") { code = this._transIndexOp(node); } else if (node.op == "=") { code = this._transSetOp(node); } else if (node.op == "+=") { code = this._transIncOp(node); } else { _dogmalang.dogma.raise("invalid operator: '%s'.", node.op); } }return code; }; LuaTrans.prototype._transSetOp = function (node) { _dogmalang.dogma.paramExpected("node", node, null);{ return (0, _dogmalang.fmt)("%s = %s", this._transNode(node.left), this._transNode(node.right)); } }; LuaTrans.prototype._transIncOp = function (node) { _dogmalang.dogma.paramExpected("node", node, null);{ return (0, _dogmalang.fmt)("%s = (type(%s) == 'string' and %s .. %s or %s + %s)", this._transNode(node.left), this._transNode(node.left), this._transNode(node.left), this._transNode(node.right), this._transNode(node.left), this._transNode(node.right)); } }; LuaTrans.prototype._transIndexOp = function (node) { _dogmalang.dogma.paramExpected("node", node, null);{ return (0, _dogmalang.fmt)("(type(%s) == 'string' and %s:sub(%s+1, %s+1) or %s[%s+1])", this._transNode(node.left), this._transNode(node.left), this._transNode(node.right), this._transNode(node.right), this._transNode(node.left), this._transNode(node.right)); } }; LuaTrans.prototype._transLikeOp = function (node) { _dogmalang.dogma.paramExpected("node", node, null);{ return (0, _dogmalang.fmt)("(%s%s:match(%s))", node.op == "notlike" ? "not " : "", this._transNode(node.left), this._transNode(node.right)); } }; LuaTrans.prototype._transTernaryOp = function (node) { _dogmalang.dogma.paramExpected("node", node, null);{ return (0, _dogmalang.fmt)("(%s >= %s and %s <= %s)", this._transNode(node.left), this._transNode(node.middle), this._transNode(node.left), this._transNode(node.right)); } }; LuaTrans.prototype._transNaryOp = function (node) { let code = "";_dogmalang.dogma.paramExpected("node", node, null);{ const name = _dogmalang.dogma.getItem(node.children, 0).value; /* istanbul ignore else */if (name == "exists") { code = (0, _dogmalang.fmt)("(%s ~= nil)", this.transform(_dogmalang.dogma.getItem(node.children, 1))); } else if (name == "len") { code = (0, _dogmalang.fmt)("#%s", this.transform(_dogmalang.dogma.getItem(node.children, 1))); } else { _dogmalang.dogma.raise("invalid function name: '%s'. Allowed: 'exists' and 'len'.", name); } }return code; };