private _fuzzyEvaluate()

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;
  }