_createClusteredEdge(
    fromId,
    toId,
    baseEdge,
    clusterEdgeProperties,
    extraOptions
  ) {
    // copy the options of the edge we will replace
    const clonedOptions = NetworkUtil.cloneOptions(baseEdge, "edge");
    // make sure the properties of clusterEdges are superimposed on it
    deepExtend(clonedOptions, clusterEdgeProperties);

    // set up the edge
    clonedOptions.from = fromId;
    clonedOptions.to = toId;
    clonedOptions.id = "clusterEdge:" + randomUUID();

    // apply the edge specific options to it if specified
    if (extraOptions !== undefined) {
      deepExtend(clonedOptions, extraOptions);
    }

    const newEdge = this.body.functions.createEdge(clonedOptions);
    newEdge.clusteringEdgeReplacingIds = [baseEdge.id];
    newEdge.connect();

    // Register the new edge
    this.body.edges[newEdge.id] = newEdge;

    return newEdge;
  }
Create an edge for the cluster representation.
@param {Node.id} fromId
@param {Node.id} toId
@param {vis.Edge} baseEdge
@param {object} clusterEdgeProperties
@param {object} extraOptions
@returns {Edge} newly created clustered edge
@private