formatTable static method

String formatTable(
  1. List<RouteData> routes
)

Formats a list of RouteData as an aligned ASCII table.

Implementation

static String formatTable(List<RouteData> routes) {
  if (routes.isEmpty) {
    return 'No registered routes found.';
  }

  const headers = ['METHOD', 'PATH', 'NAME', 'HANDLER'];
  var maxMethod = headers[0].length;
  var maxPath = headers[1].length;
  var maxName = headers[2].length;
  var maxHandler = headers[3].length;

  for (final r in routes) {
    if (r.method.length > maxMethod) maxMethod = r.method.length;
    if (r.path.length > maxPath) maxPath = r.path.length;
    final nameLen = (r.name ?? '-').length;
    if (nameLen > maxName) maxName = nameLen;
    final handlerLen = r.displayHandler.length;
    if (handlerLen > maxHandler) maxHandler = handlerLen;
  }

  final buffer = StringBuffer();
  final headerLine = '${headers[0].padRight(maxMethod + 3)}'
      '${headers[1].padRight(maxPath + 3)}'
      '${headers[2].padRight(maxName + 3)}'
      '${headers[3]}';
  buffer.writeln(headerLine);

  for (final r in routes) {
    final methodStr = r.method.padRight(maxMethod + 3);
    final pathStr = r.path.padRight(maxPath + 3);
    final nameStr = (r.name ?? '-').padRight(maxName + 3);
    final handlerStr = r.displayHandler;
    buffer.writeln('$methodStr$pathStr$nameStr$handlerStr');
  }

  return buffer.toString().trimRight();
}