sanitize method
Returns a new sanitized map. The input is never mutated.
Implementation
@override
Map<String, dynamic> sanitize(Map<String, dynamic> data) {
Object walk(Object? v) {
if (v is String) {
if (v.length > maxString) {
return v.substring(0, maxString) + overflowMarker;
}
return v;
} else if (v is List) {
if (v.length > maxList) {
final head = v.take(maxList).map(walk).toList();
return [
...head,
'[$overflowMarker ${v.length - maxList} more items]'
];
}
return v.map(walk).toList();
} else if (v is Map<String, dynamic>) {
if (v.length > maxMapEntries) {
final keys = v.keys.take(maxMapEntries).toList(growable: false);
final trimmed = <String, dynamic>{};
for (final k in keys) {
trimmed[k] = walk(v[k]);
}
trimmed['__truncated__'] =
'${v.length - maxMapEntries} more entries $overflowMarker';
return trimmed;
}
return v.map((k, val) => MapEntry(k, walk(val)));
}
return v ?? '';
}
return walk(data) as Map<String, dynamic>;
}