sanitize method

  1. @override
Map<String, dynamic> sanitize(
  1. Map<String, dynamic> data
)
override

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