process method

String process({
  1. Map context = const {},
  2. List<MemberAccessor> memberAccessors = const [],
})

Evaluates the template into a string result. The template may have multiple expressions which will be concatenated into the returned value.

Implementation

String process({
  Map<dynamic, dynamic> context = const {},
  List<MemberAccessor<dynamic>> memberAccessors = const [],
}) {
  final ctx = <String, Object>{};
  for (var entry in context.entries) {
    if (entry.key != null && entry.value != null) {
      ctx[entry.key.toString()] = entry.value;
    }
  }

  final prepared = _prepare();
  var data = prepared.data;

  final evaluator = ExpressionEvaluator(
    memberAccessors: memberAccessors,
  );
  for (var entry in prepared.entries) {
    try {
      final evaled = evaluator.eval(Expression.parse(entry.content), ctx);
      data = entry.replace(
        data,
        evaled == null ? '' : evaled.toString().trim(),
      );
    } catch (e, stack) {
      _logger.severe('Unable to parse input: [${entry.content}]', e, stack);
      rethrow;
    }
  }

  return data;
}