deepMergeMapInmutable static method

Map<String, dynamic> deepMergeMapInmutable(
  1. Map<String, dynamic> target,
  2. Map<String, dynamic> source
)

Función que realiza una actualización profunda (deep merge) de mapas

Recibe dos mapas como parámetros:

  • target: El mapa que será actualizado y retornado
  • source: El mapa con los valores que se usarán para actualizar

La función actualiza recursivamente el mapa target con los valores de source. Si ambos valores son mapas, se hace merge recursivo. Si no, se reemplaza el valor directamente.

Implementation

static Map<String, dynamic> deepMergeMapInmutable(
  Map<String, dynamic> target,
  Map<String, dynamic> source,
) {
  // Crear una copia profunda del target para no modificar el original
  Map<String, dynamic> result = deepCopyMap(target);

  source.forEach((key, sourceValue) {
    if (result.containsKey(key)) {
      final targetValue = result[key];

      if (targetValue is Map<String, dynamic> &&
          sourceValue is Map<String, dynamic>) {
        // Hacer merge recursivo sin modificar valores existentes
        result[key] = deepMergeMapInmutable(targetValue, sourceValue);
      }
      // Si el key existe, no hacer nada más (mantener valor original)
    } else {
      // Solo agregar si el key NO existe
      result[key] = sourceValue;
    }
  });

  return result;
}