mergeDataDeep function

dynamic mergeDataDeep(
  1. dynamic a,
  2. dynamic b, [
  3. dynamic elseFilter(
    1. dynamic
    )?
])

Implementation

dynamic mergeDataDeep(
  dynamic a,
  dynamic b, [
  dynamic Function(dynamic)? elseFilter,
]) {
  if (a is Map && b is Map) {
    final result = Map<dynamic, dynamic>.from(a);
    for (final key in b.keys) {
      if (result.containsKey(key)) {
        result[key] = mergeDataDeep(result[key], b[key], elseFilter);
      } else {
        result[key] = mergeDataDeep(null, b[key], elseFilter);
      }
    }
    return result;
  }
  if ((a is List || a is Set || a is Queue) && b is Iterable) {
    return mergeListsSetsOrQueues(a as Iterable, b, elseFilter);
  }
  if (a is Iterable && b is Iterable) {
    return mergeIterables(a, b);
  }
  if (elseFilter != null) {
    return elseFilter(b);
  } else {
    return b;
  }
}