bpmn-elements
Version:
Executable workflow elements based on BPMN 2.0
52 lines (41 loc) • 1.29 kB
JavaScript
import getPropertyValue from './getPropertyValue.js';
const isExpressionPattern = /^\${(.+?)}$/;
const expressionPattern = /\${(.+?)}/;
export default 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 = getPropertyValue(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);
}