UNPKG

cione-comp-lib

Version:

`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`

186 lines (185 loc) 5.8 kB
import { isArray, map, keys, hasOwn, isObject, isArrayLike, isString, isRegExp, isNumber } from "../../../zrender/lib/core/util.mjs"; import { throwError } from "./log.mjs"; import { getRawValueParser, createFilterComparator } from "../data/helper/dataValueHelper.mjs"; var RELATIONAL_EXPRESSION_OP_ALIAS_MAP = { value: "eq", "<": "lt", "<=": "lte", ">": "gt", ">=": "gte", "=": "eq", "!=": "ne", "<>": "ne" }; var RegExpEvaluator = function() { function RegExpEvaluator2(rVal) { var condValue = this._condVal = isString(rVal) ? new RegExp(rVal) : isRegExp(rVal) ? rVal : null; if (condValue == null) { var errMsg = ""; throwError(errMsg); } } RegExpEvaluator2.prototype.evaluate = function(lVal) { var type = typeof lVal; return isString(type) ? this._condVal.test(lVal) : isNumber(type) ? this._condVal.test(lVal + "") : false; }; return RegExpEvaluator2; }(); var ConstConditionInternal = function() { function ConstConditionInternal2() { } ConstConditionInternal2.prototype.evaluate = function() { return this.value; }; return ConstConditionInternal2; }(); var AndConditionInternal = function() { function AndConditionInternal2() { } AndConditionInternal2.prototype.evaluate = function() { var children = this.children; for (var i = 0; i < children.length; i++) { if (!children[i].evaluate()) { return false; } } return true; }; return AndConditionInternal2; }(); var OrConditionInternal = function() { function OrConditionInternal2() { } OrConditionInternal2.prototype.evaluate = function() { var children = this.children; for (var i = 0; i < children.length; i++) { if (children[i].evaluate()) { return true; } } return false; }; return OrConditionInternal2; }(); var NotConditionInternal = function() { function NotConditionInternal2() { } NotConditionInternal2.prototype.evaluate = function() { return !this.child.evaluate(); }; return NotConditionInternal2; }(); var RelationalConditionInternal = function() { function RelationalConditionInternal2() { } RelationalConditionInternal2.prototype.evaluate = function() { var needParse = !!this.valueParser; var getValue = this.getValue; var tarValRaw = getValue(this.valueGetterParam); var tarValParsed = needParse ? this.valueParser(tarValRaw) : null; for (var i = 0; i < this.subCondList.length; i++) { if (!this.subCondList[i].evaluate(needParse ? tarValParsed : tarValRaw)) { return false; } } return true; }; return RelationalConditionInternal2; }(); function parseOption(exprOption, getters) { if (exprOption === true || exprOption === false) { var cond = new ConstConditionInternal(); cond.value = exprOption; return cond; } var errMsg = ""; if (!isObjectNotArray(exprOption)) { throwError(errMsg); } if (exprOption.and) { return parseAndOrOption("and", exprOption, getters); } else if (exprOption.or) { return parseAndOrOption("or", exprOption, getters); } else if (exprOption.not) { return parseNotOption(exprOption, getters); } return parseRelationalOption(exprOption, getters); } function parseAndOrOption(op, exprOption, getters) { var subOptionArr = exprOption[op]; var errMsg = ""; if (!isArray(subOptionArr)) { throwError(errMsg); } if (!subOptionArr.length) { throwError(errMsg); } var cond = op === "and" ? new AndConditionInternal() : new OrConditionInternal(); cond.children = map(subOptionArr, function(subOption) { return parseOption(subOption, getters); }); if (!cond.children.length) { throwError(errMsg); } return cond; } function parseNotOption(exprOption, getters) { var subOption = exprOption.not; var errMsg = ""; if (!isObjectNotArray(subOption)) { throwError(errMsg); } var cond = new NotConditionInternal(); cond.child = parseOption(subOption, getters); if (!cond.child) { throwError(errMsg); } return cond; } function parseRelationalOption(exprOption, getters) { var errMsg = ""; var valueGetterParam = getters.prepareGetValue(exprOption); var subCondList = []; var exprKeys = keys(exprOption); var parserName = exprOption.parser; var valueParser = parserName ? getRawValueParser(parserName) : null; for (var i = 0; i < exprKeys.length; i++) { var keyRaw = exprKeys[i]; if (keyRaw === "parser" || getters.valueGetterAttrMap.get(keyRaw)) { continue; } var op = hasOwn(RELATIONAL_EXPRESSION_OP_ALIAS_MAP, keyRaw) ? RELATIONAL_EXPRESSION_OP_ALIAS_MAP[keyRaw] : keyRaw; var condValueRaw = exprOption[keyRaw]; var condValueParsed = valueParser ? valueParser(condValueRaw) : condValueRaw; var evaluator = createFilterComparator(op, condValueParsed) || op === "reg" && new RegExpEvaluator(condValueParsed); if (!evaluator) { throwError(errMsg); } subCondList.push(evaluator); } if (!subCondList.length) { throwError(errMsg); } var cond = new RelationalConditionInternal(); cond.valueGetterParam = valueGetterParam; cond.valueParser = valueParser; cond.getValue = getters.getValue; cond.subCondList = subCondList; return cond; } function isObjectNotArray(val) { return isObject(val) && !isArrayLike(val); } var ConditionalExpressionParsed = function() { function ConditionalExpressionParsed2(exprOption, getters) { this._cond = parseOption(exprOption, getters); } ConditionalExpressionParsed2.prototype.evaluate = function() { return this._cond.evaluate(); }; return ConditionalExpressionParsed2; }(); function parseConditionalExpression(exprOption, getters) { return new ConditionalExpressionParsed(exprOption, getters); } export { parseConditionalExpression };