recursiveReplace function

Map recursiveReplace(
  1. Map input, {
  2. ReplacePatternsSettings settings = const ReplacePatternsSettings(),
})

Performs recursive replacement of string values within a map using placeholders defined by the map's own key-value pairs. It supports nested structures (maps and lists) and replaces placeholders in strings with corresponding values.

Implementation

Map recursiveReplace(
  Map input, {
  ReplacePatternsSettings settings = const ReplacePatternsSettings(),
}) {
  final data = expandFlattenedJson(
    flattenJson(input, separator: settings.separator),
    separator: settings.separator,
  );

  dynamic $replace<T>(dynamic inputKey, dynamic inputValue) {
    dynamic r;
    if (inputValue is Map) {
      r = {};
      for (final e in inputValue.entries) {
        final k = e.key;

        final v = e.value;
        final res = $replace(k, v);
        final localKey = '$settings.separator$k';
        data[localKey] = res;
        r[k] = res;
      }
    } else if (inputValue is List) {
      r = <dynamic>[];
      for (var n = 0; n < inputValue.length; n++) {
        final k = '$inputKey$settings.separator$n';
        final v = inputValue[n];
        final res = $replace(k, v);
        final localKey = '$settings.separator$k';
        data[localKey] = res;
        r.add(res);
      }
    } else if (inputValue is String) {
      r = replacePatterns(
        inputValue,
        data,
        settings: settings,
      );
    } else {
      r = inputValue;
    }
    return r;
  }

  final res = $replace('', input);
  return res;
}