collapseHookSummaries static method
Collapses consecutive hook summary messages with the same hookLabel into a single summary.
Implementation
static List<RenderableMessage> collapseHookSummaries(
List<RenderableMessage> messages,
) {
final result = <RenderableMessage>[];
var i = 0;
while (i < messages.length) {
final msg = messages[i];
if (_isLabeledHookSummary(msg)) {
final label = msg.hookLabel;
final group = <RenderableMessage>[];
while (i < messages.length) {
final next = messages[i];
if (!_isLabeledHookSummary(next) || next.hookLabel != label) break;
group.add(next);
i++;
}
if (group.length == 1) {
result.add(msg);
} else {
result.add(
RenderableMessage(
type: msg.type,
uuid: msg.uuid,
timestamp: msg.timestamp,
subtype: msg.subtype,
hookLabel: msg.hookLabel,
hookCount: group.fold<int>(0, (s, m) => s + m.hookCount),
hookInfos: group.expand((m) => m.hookInfos).toList(),
hookErrors: group.expand((m) => m.hookErrors).toList(),
preventedContinuation: group.any((m) => m.preventedContinuation),
hasOutput: group.any((m) => m.hasOutput),
totalDurationMs: group
.map((m) => m.totalDurationMs ?? 0)
.reduce((a, b) => max(a, b)),
),
);
}
} else {
result.add(msg);
i++;
}
}
return result;
}