docs: public Map<String, Object> getAllProperties() {
          Map<String, Object> map = new HashMap<>();
  
          Arrays
              .stream(catalog)
              .filter(Objects::nonNull)
              .map(Map::entrySet)
              .flatMap(Collection::stream)
              .forEach((Map.Entry<String, Object> entry) -> {
                  String k = entry.getKey();
                  Object value = resolvePlaceHoldersIfNecessary(entry.getValue());
                  Map finalMap = map;
                  int index = k.indexOf('.');
                  if (index != -1) {
                      String[] keys = k.split("\\.");
                      for (int i = 0; i < keys.length - 1; i++) {
                          if (!finalMap.containsKey(keys[i])) {
                              finalMap.put(keys[i], new HashMap<>());
                          }
                          Object next = finalMap.get(keys[i]);
                          if (next instanceof Map) {
                              finalMap = ((Map) next);
                          }
                      }
                      finalMap.put(keys[keys.length - 1], value);
                  } else {
                      finalMap.put(k, value);
                  }
              });
  
          return map;
      }