normalizeGraphQLData static method

dynamic normalizeGraphQLData(
  1. dynamic data, {
  2. String? parentKey,
  3. bool? convertEnums,
})

Implementation

static dynamic normalizeGraphQLData(dynamic data,
    {String? parentKey, bool? convertEnums}) {
  convertEnums = convertEnums ?? convertQueryEnums;

  if (data is Map) {
    final map =
        data is Map<String, dynamic> ? data : Map<String, dynamic>.from(data);
    final normalizedData = <String, dynamic>{};
    for (final entry in map.entries) {
      final key = entry.key;
      final value = entry.value;

      if (key == '__typename') {
        normalizedData['runtimeType'] =
            value.toString()[0].toLowerCase() + value.toString().substring(1);
        continue;
      }

      bool wasConverted = false;
      // Only convert if explicitly mapped to a known enum type
      if (convertEnums && value != null) {
        final enumType = _fieldToEnumType[key];
        if (enumType != null && _knownEnumTypes.contains(enumType)) {
          if (value is List) {
            normalizedData[key] = value
                .map((item) => _convertEnumToDartFormat(item.toString()))
                .toList();
            wasConverted = true;
          } else if (value is String) {
            normalizedData[key] = _convertEnumToDartFormat(value);
            wasConverted = true;
          }
        }
      }

      if (!wasConverted) {
        normalizedData[key] = normalizeGraphQLData(value,
            parentKey: key, convertEnums: convertEnums);
      }
    }
    return normalizedData;
  }

  if (data is List) {
    // Try to infer from parent key if it's a list of enums
    final enumType = parentKey != null ? _fieldToEnumType[parentKey] : null;
    if (convertEnums &&
        enumType != null &&
        _knownEnumTypes.contains(enumType)) {
      return data
          .map((item) => _convertEnumToDartFormat(item.toString()))
          .toList();
    }

    return data
        .map((item) => normalizeGraphQLData(item, convertEnums: convertEnums))
        .toList();
  }

  return data;
}