docs: public String expand(Map<String, ?> variables) {
      if (variables == null) {
        throw new IllegalArgumentException("variable map is required.");
      }
  
      /* resolve all expressions within the template */
      StringBuilder resolved = new StringBuilder();
      for (TemplateChunk chunk : this.templateChunks) {
        if (chunk instanceof Expression) {
          String resolvedExpression = this.resolveExpression((Expression) chunk, variables);
          if (resolvedExpression != null) {
            resolved.append(resolvedExpression);
          }
        } else {
          /* chunk is a literal value */
          resolved.append(chunk.getValue());
        }
      }
      return resolved.toString();
    }