renderProjection function

String renderProjection(
  1. CodemapProjection projection
)

Aligned plain-text rendering for terminals.

Implementation

String renderProjection(CodemapProjection projection) {
  final header =
      'codemap lanes: ${projection.findings.length} declared; receipts '
      'scanned=${projection.scanned} corrupt=${projection.corruptCount} '
      'orphan=${projection.orphanCount}';
  final rows = <List<String>>[
    <String>['ID', 'TRIGGER', 'FINDING', 'AGE', 'NOTE'],
    for (final finding in projection.findings)
      <String>[
        finding.id,
        finding.trigger,
        finding.code,
        if (finding.ageS == null) '-' else _humanAge(finding.ageS!),
        finding.message,
      ],
  ];
  final widths = <int>[
    for (var column = 0; column < 5; column++)
      rows.fold(
        0,
        (max, row) =>
            row[column].length > max ? row[column].length : max,
      ),
  ];
  return [
    header,
    for (final row in rows)
      [
        for (var column = 0; column < row.length; column++)
          row[column].padRight(widths[column]),
      ].join('  ').trimRight(),
  ].join('\n');
}