truncateOutput function

String truncateOutput(
  1. String output, {
  2. int maxLines = 1000,
  3. int maxChars = 100000,
})

Truncate command output to a maximum number of lines and/or characters.

Inserts a [truncated] marker if truncation occurs.

Implementation

String truncateOutput(
  String output, {
  int maxLines = 1000,
  int maxChars = 100000,
}) {
  var result = output;
  var truncated = false;

  // Truncate by character count first.
  if (result.length > maxChars) {
    result = result.substring(0, maxChars);
    truncated = true;
  }

  // Truncate by line count.
  final lines = result.split('\n');
  if (lines.length > maxLines) {
    final kept = maxLines ~/ 2;
    final headLines = lines.sublist(0, kept);
    final tailLines = lines.sublist(lines.length - kept);
    final omitted = lines.length - (kept * 2);
    result = [
      ...headLines,
      '\n... [$omitted lines truncated] ...\n',
      ...tailLines,
    ].join('\n');
    truncated = true;
  } else if (truncated) {
    result += '\n[truncated at $maxChars characters]';
  }

  return result;
}