layerRegistered function

List<RedactionMatch> layerRegistered(
  1. String text,
  2. List<String> secrets
)

Finds every occurrence of every value in secrets inside text.

Pure function: returns matches ordered left-to-right, non-overlapping (longer values claim their spans first).

Implementation

List<RedactionMatch> layerRegistered(String text, List<String> secrets) {
  if (text.isEmpty || secrets.isEmpty) return const [];
  // Longest-first so overlapping secrets collapse into the longest span.
  final sorted = [...secrets]..sort((a, b) => b.length.compareTo(a.length));
  final claimed = <RedactionMatch>[];
  for (final secret in sorted) {
    if (secret.isEmpty) continue;
    var from = 0;
    while (true) {
      final index = text.indexOf(secret, from);
      if (index < 0) break;
      final match = RedactionMatch(
        start: index,
        end: index + secret.length,
        layer: RedactionLayer.registered,
        kindLabel: registeredSecretLabel,
      );
      if (!claimed.any(match.overlaps)) claimed.add(match);
      from = index + 1;
    }
  }
  claimed.sort((a, b) => a.start.compareTo(b.start));
  return claimed;
}