truncateOutput function
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;
}