private static String validate(String tileScheme) {
    if (Paths.get(tileScheme).isAbsolute()) {
      throw new IllegalArgumentException("tile scheme is not allowed to be absolute");
    }
    if (StringUtils.countMatches(tileScheme, Z_TEMPLATE) != 1 ||
      StringUtils.countMatches(tileScheme, X_TEMPLATE) + StringUtils.countMatches(tileScheme, X_SAFE_TEMPLATE) != 1 ||
      StringUtils.countMatches(tileScheme, Y_TEMPLATE) + StringUtils.countMatches(tileScheme, Y_SAFE_TEMPLATE) != 1) {
      throw new IllegalArgumentException(
        "tile scheme must contain ('%s' OR '%s') AND ('%s' OR '%s' ) AND '%s'"
          .formatted(X_TEMPLATE, X_SAFE_TEMPLATE, Y_TEMPLATE, Y_SAFE_TEMPLATE, Z_TEMPLATE));

    }
    if (tileScheme.contains("\\E") || tileScheme.contains("\\Q")) {
      throw new IllegalArgumentException("regex quotes are not allowed");
    }
    return tileScheme;
  }
@param tileScheme the tile scheme to use e.g. {z}/{x}/{y}.pbf
@param basePath   the base path to append the generated relative tile path to
planetiler-core/src/main/java/com/onthegomap/planetiler/files/TileSchemeEncoding.java