in libs/logic-apps-shared/src/parsers/lib/expression/evaluator.ts [73:145]
private _fuzzyEvaluate(expression: string): any {
const intl = getIntl();
// NOTE: This method is best effort to evaluate if the value is template expression,
if (!expression) {
throw new ExpressionEvaluatorException(
intl.formatMessage({ defaultMessage: 'Empty value', id: 'AEguAy', description: 'Error message on expression evaluation' }),
ExpressionEvaluatorErrorCode.EMPTY_VALUE
);
}
const { context } = this._options;
if (context) {
const ast = ExpressionParser.parseTemplateExpression(expression);
let func = ast;
let isInterpolated = false;
if (isStringInterpolation(ast) && ast.segments.length === 1) {
func = ast.segments[0];
isInterpolated = true;
}
if (isFunction(func)) {
const functionName = func.name.toUpperCase();
if (
functionName === ExpressionFunctionNames.PARAMETERS ||
(functionName === ExpressionFunctionNames.APPSETTING && func.arguments.length === 1)
) {
const arg = func.arguments[0];
if (isStringLiteral(arg)) {
const result =
functionName === ExpressionFunctionNames.PARAMETERS ? context.parameters[arg.value] : context.appsettings[arg.value];
if (isInterpolated) {
if (result === undefined || result === null || typeof result === 'string') {
return result;
}
} else {
return result;
}
}
}
}
}
if (/^@@/.test(expression)) {
return expression.substr(1);
}
if (/@@{/.test(expression)) {
return expression.replace(/@@{/g, '@{');
}
if (/^@/.test(expression)) {
throw new ExpressionEvaluatorException(
intl.formatMessage(
{ defaultMessage: `Unrecognized expression ''{expression}''`, id: 'Rq2U5n', description: 'Error message on invalid expression' },
{ expression }
),
ExpressionEvaluatorErrorCode.UNRECOGNIZED_EXPRESSION
);
}
if (/@{/.test(expression)) {
throw new ExpressionEvaluatorException(
intl.formatMessage(
{ defaultMessage: `Unrecognized expression ''{expression}''`, id: 'Rq2U5n', description: 'Error message on invalid expression' },
{ expression }
),
ExpressionEvaluatorErrorCode.UNRECOGNIZED_EXPRESSION
);
}
return expression;
}