private static void handleMergeOperator(Object parsed, Set<Object> parentNodes) {
    if (!parentNodes.add(parsed)) {
      throw new FileFormatException("Illegal recursive reference in yaml file");
    }
    if (parsed instanceof Map<?, ?> map) {
      Object toMerge = map.remove("<<");
      if (toMerge != null) {
        var orig = new LinkedHashMap<>(map);
        // to preserve the map key order we insert the merged operator objects first, then the original ones
        map.clear();
        mergeInto(map, toMerge, false, parentNodes);
        mergeInto(map, orig, true, parentNodes);
      }
      for (var value : map.values()) {
        handleMergeOperator(value, parentNodes);
      }
    } else if (parsed instanceof List<?> list) {
      for (var item : list) {
        handleMergeOperator(item, parentNodes);
      }
    }
    parentNodes.remove(parsed);
  }
SnakeYaml doesn't handle the <a href="https://yaml.org/type/merge.html">merge operator</a> so manually post-process
the parsed yaml object to merge referenced objects into the parent one.
planetiler-core/src/main/java/com/onthegomap/planetiler/util/YAML.java