Performance.fromJson constructor

Performance.fromJson(
  1. Map<String, dynamic> json
)

Implementation

factory Performance.fromJson(Map<String, dynamic> json) {
  // Handle both millisecond timestamps and ISO strings
  DateTime parseTimestamp(dynamic ts) {
    if (ts == null) {
      return DateTime.now().toUtc();
    }
    if (ts is int) {
      // Validate reasonable timestamp before creating DateTime
      if (ts > 0 && ts < 32503680000000) {
        return DateTime.fromMillisecondsSinceEpoch(ts, isUtc: true);
      }
      return DateTime.now().toUtc();
    }
    if (ts is String) {
      return DateTime.tryParse(ts)?.toUtc() ?? DateTime.now().toUtc();
    }
    return DateTime.now().toUtc();
  }

  return Performance(
    timestamp: parseTimestamp(json['timestamp']),
    name: JsonFactoryMixin.safeString(json['name']),
    elapsedMs: JsonFactoryMixin.safeInt(json['elapsed_ms']),
    debug: JsonFactoryMixin.safeString(json['debug']),
    steps: json['steps'] is List
        ? (json['steps'] as List)
            .whereType<Map<String, dynamic>>()
            .map(PerformanceStep.fromJson)
            .toList()
        : null,
  );
}