canonicalJsonValue function

Object? canonicalJsonValue(
  1. Object? value
)

Recursively processes an object to create a canonical JSON representation.

Binds: Part A — extract a shared canonical-JSON util.

Implementation

Object? canonicalJsonValue(Object? value) {
  if (value == null) return null;
  if (value is num || value is String || value is bool) {
    return value;
  }
  if (value is Enum) {
    return value.name;
  }
  if (value is Map) {
    final sortedKeys = value.keys.map((k) => k.toString()).toList()..sort();
    final result = <String, Object?>{};
    for (final key in sortedKeys) {
      result[key] = canonicalJsonValue(value[key]);
    }
    return result;
  }
  if (value is Set) {
    return value.map(canonicalJsonValue).toList();
  }
  if (value is List) {
    return value.map(canonicalJsonValue).toList();
  }
  try {
    return canonicalJsonValue((value as dynamic).toJson());
  } catch (_) {
    return value.toString();
  }
}