mergeRequiredIntoOptionalNamespaces static method

Map<String, RequiredNamespace> mergeRequiredIntoOptionalNamespaces(
  1. Map<String, RequiredNamespace> requiredNamespaces,
  2. Map<String, RequiredNamespace> optionalNamespaces
)

Merges requiredNamespaces into optionalNamespaces, avoiding duplicates When a key exists in both maps, the values are merged by combining chains, methods, and events while removing duplicates

Implementation

static Map<String, RequiredNamespace> mergeRequiredIntoOptionalNamespaces(
  Map<String, RequiredNamespace> requiredNamespaces,
  Map<String, RequiredNamespace> optionalNamespaces,
) {
  final Map<String, RequiredNamespace> merged = Map.from(optionalNamespaces);

  for (final entry in requiredNamespaces.entries) {
    final key = entry.key;
    final requiredNamespace = entry.value;

    if (merged.containsKey(key)) {
      // Key exists in both, merge the values
      final existingNamespace = merged[key]!;

      // Merge chains (remove duplicates)
      final mergedChains = <String>{};
      if (requiredNamespace.chains != null) {
        mergedChains.addAll(requiredNamespace.chains!);
      }
      if (existingNamespace.chains != null) {
        mergedChains.addAll(existingNamespace.chains!);
      }
      final finalChains =
          mergedChains.isNotEmpty ? mergedChains.toList() : null;

      // Merge methods (remove duplicates)
      final mergedMethods = <String>{};
      mergedMethods.addAll(requiredNamespace.methods);
      mergedMethods.addAll(existingNamespace.methods);

      // Merge events (remove duplicates)
      final mergedEvents = <String>{};
      mergedEvents.addAll(requiredNamespace.events);
      mergedEvents.addAll(existingNamespace.events);

      merged[key] = RequiredNamespace(
        chains: finalChains,
        methods: mergedMethods.toList(),
        events: mergedEvents.toList(),
      );
    } else {
      // Key only exists in required, add it to merged
      merged[key] = requiredNamespace;
    }
  }

  return merged;
}