bpmn-elements
Version:
Executable workflow elements based on BPMN 2.0
48 lines (47 loc) • 1.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = Expressions;
var _getPropertyValue = _interopRequireDefault(require("./getPropertyValue.js"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const isExpressionPattern = /^\${(.+?)}$/;
const expressionPattern = /\${(.+?)}/;
function Expressions() {
return {
resolveExpression,
isExpression,
hasExpression
};
}
function resolveExpression(templatedString, context, expressionFnContext) {
let result = templatedString;
while (expressionPattern.test(result)) {
const expressionMatch = result.match(expressionPattern);
const innerProperty = expressionMatch[1];
if (innerProperty === 'true') {
return true;
} else if (innerProperty === 'false') {
return false;
} else if (innerProperty === 'null') {
return null;
} else {
const n = Number(innerProperty);
if (!isNaN(n)) return n;
}
const contextValue = (0, _getPropertyValue.default)(context, innerProperty, expressionFnContext);
if (expressionMatch.input === expressionMatch[0]) {
return contextValue;
}
result = result.replace(expressionMatch[0], contextValue === undefined ? '' : contextValue);
}
return result;
}
function isExpression(text) {
if (!text) return false;
return isExpressionPattern.test(text);
}
function hasExpression(text) {
if (!text) return false;
return expressionPattern.test(text);
}