jexl-functions-fork
Version:
Package with available JEXL functions
104 lines (103 loc) • 3.71 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.evalCriteriaParseResult = exports.parseCriteriaExpression = void 0;
var CRITERIA_OPERATORS = ['>=', '<=', '<>', '=', '>', '<'];
var DEFAULT_OPERATION = '=';
var SPLIT_REGEX = new RegExp("^(".concat(CRITERIA_OPERATORS.join('|'), ")"));
var SYSTEM_CRITERIA = ['#TRUE', '#FALSE', '#UNDEFINED', '#NULL', '#EMPTY', '#NOT_EMPTY', '#BLANK', '#NOT_BLANK'];
var isSystemCriteria = function (criteria) {
return SYSTEM_CRITERIA.includes(criteria);
};
var isSystemCriteriaParseResult = function (result) {
return !!result.systemCriteria;
};
var coerceOperand = function (operand) {
var coerced = Number(operand);
return Number.isNaN(coerced) ? operand : coerced;
};
var parseCriteriaExpression = function (expression) {
if (isSystemCriteria(expression)) {
return {
systemCriteria: expression,
};
}
var tokens = expression
.split(SPLIT_REGEX)
.filter(function (token) { return !!token; });
var _a = tokens[0], operation = _a === void 0 ? '' : _a, _b = tokens[1], operand = _b === void 0 ? '' : _b;
var isOperationExists = CRITERIA_OPERATORS.includes(operation);
return {
operator: isOperationExists ? operation : DEFAULT_OPERATION,
rightOperand: coerceOperand(isOperationExists ? operand.trimStart() : expression.trimStart()),
};
};
exports.parseCriteriaExpression = parseCriteriaExpression;
var evalOperationParseResult = function (parseResult, leftOperand) {
if (leftOperand === null || leftOperand === undefined) {
return false;
}
var typedLeftOperand = leftOperand;
switch (parseResult.operator) {
case '>=': {
return typedLeftOperand >= parseResult.rightOperand;
}
case '<=': {
return typedLeftOperand <= parseResult.rightOperand;
}
case '<>': {
return leftOperand !== parseResult.rightOperand;
}
case '=': {
return leftOperand === parseResult.rightOperand;
}
case '>': {
return typedLeftOperand > parseResult.rightOperand;
}
case '<': {
return typedLeftOperand < parseResult.rightOperand;
}
default: {
return leftOperand === parseResult.rightOperand;
}
}
};
var evalSystemCriteriaParseResult = function (parseResult, leftOperand) {
switch (parseResult.systemCriteria) {
case '#TRUE': {
return leftOperand === true;
}
case '#FALSE': {
return leftOperand === false;
}
case '#UNDEFINED': {
return leftOperand === undefined;
}
case '#NULL': {
return leftOperand === null;
}
case '#EMPTY': {
return leftOperand === null || leftOperand === undefined || leftOperand === '';
}
case '#NOT_EMPTY': {
return leftOperand !== null && leftOperand !== undefined && leftOperand !== '';
}
case '#BLANK': {
return leftOperand === '';
}
case '#NOT_BLANK': {
return leftOperand !== '';
}
default: {
return false;
}
}
};
var evalCriteriaParseResult = function (parseResult, leftOperand) {
if (isSystemCriteriaParseResult(parseResult)) {
return evalSystemCriteriaParseResult(parseResult, leftOperand);
}
return isSystemCriteriaParseResult(parseResult)
? evalSystemCriteriaParseResult(parseResult, leftOperand)
: evalOperationParseResult(parseResult, leftOperand);
};
exports.evalCriteriaParseResult = evalCriteriaParseResult;