UNPKG

dmn-js-decision-table-custom-z

Version:

A decision table view for dmn-js

79 lines (70 loc) 2.43 kB
import { keys } from 'min-dash'; // eslint-disable-next-line var COMPARISON_REGULAR_EXPRESSION = /^(-?(?:[0-9]|\.[0-9])+)$|^((?:<|>|=){0,2})\s*(-?(?:[0-9]|\.[0-9])+)$/; // eslint-disable-next-line var RANGE_REGULAR_EXPRESSION = /^(\[|\]){1}(-?(?:[0-9]|\.[0-9])+){1,}\.\.(-?(?:[0-9]|\.[0-9])+){1,}(\[|\]){1}$/; export var operators = { equals: '=', less: '<', lessEquals: '<=', greater: '>', greaterEquals: '>=' }; function getOperatorName(string) { return keys(operators).filter(function (key) { return string === operators[key]; })[0]; } export function parseString(string) { if (!string || isEmptyString(string.trim())) { return { type: 'comparison' }; } var comparisonMatches = string.match(COMPARISON_REGULAR_EXPRESSION), rangeMatches = string.match(RANGE_REGULAR_EXPRESSION); if (comparisonMatches) { if (isNumber(comparisonMatches)) { return { type: 'comparison', value: parseFloat(comparisonMatches[1]), operator: 'equals' }; } else if (isComparison(comparisonMatches)) { return { type: 'comparison', value: parseFloat(comparisonMatches[3]), operator: getOperatorName(comparisonMatches[2]) }; } } else if (rangeMatches) { return { type: 'range', values: [rangeMatches[2], rangeMatches[3]].map(function (value) { return parseFloat(value); }), start: rangeMatches[1] === ']' ? 'exclude' : 'include', end: rangeMatches[4] === '[' ? 'exclude' : 'include' }; } } export function isEmptyString(string) { return string === ''; } function isNumber(matches) { return matches[0] && matches[1] && !matches[2] && !matches[3]; } function isComparison(matches) { return matches[0] && !matches[1] && matches[2] && matches[3]; } export function getComparisonString(comparisonOperator, comparisonValue) { if (comparisonOperator === 'equals') { return "".concat(comparisonValue); } else { return "".concat(operators[comparisonOperator], " ").concat(comparisonValue); } } export function getRangeString(rangeStartValue, rangeEndValue, rangeStartType, rangeEndType) { var rangeStartChar = rangeStartType === 'exclude' ? ']' : '[', rangeEndChar = rangeEndType === 'exclude' ? '[' : ']'; return "".concat(rangeStartChar).concat(rangeStartValue, "..").concat(rangeEndValue).concat(rangeEndChar); } //# sourceMappingURL=Utils.js.map