splitPathInFrontmatter function

List<String> splitPathInFrontmatter(
  1. dynamic input
)

Split paths in frontmatter, respecting brace patterns.

Implementation

List<String> splitPathInFrontmatter(dynamic input) {
  if (input is List) {
    return input
        .expand<String>((item) => splitPathInFrontmatter(item))
        .toList();
  }
  if (input is! String) return [];

  final parts = <String>[];
  var current = StringBuffer();
  var braceDepth = 0;

  for (var i = 0; i < input.length; i++) {
    final char = input[i];
    if (char == '{') {
      braceDepth++;
      current.write(char);
    } else if (char == '}') {
      braceDepth--;
      current.write(char);
    } else if (char == ',' && braceDepth == 0) {
      final trimmed = current.toString().trim();
      if (trimmed.isNotEmpty) parts.add(trimmed);
      current = StringBuffer();
    } else {
      current.write(char);
    }
  }

  final trimmed = current.toString().trim();
  if (trimmed.isNotEmpty) parts.add(trimmed);

  return parts
      .where((p) => p.isNotEmpty)
      .expand((pattern) => expandBraces(pattern))
      .toList();
}