{
  "version": 3,
  "sources": ["../../../../../node_modules/.pnpm/dagre-d3-es@7.0.14/node_modules/dagre-d3-es/src/graphlib/graph.js"],
  "sourcesContent": ["import * as _ from 'lodash-es';\n\nvar DEFAULT_EDGE_NAME = '\\x00';\nvar GRAPH_NODE = '\\x00';\nvar EDGE_KEY_DELIM = '\\x01';\n\n/**\n * @typedef {string} NodeID ID of a node.\n */\n\n/**\n * @typedef {`${string}${typeof EDGE_KEY_DELIM}${string}${typeof EDGE_KEY_DELIM}${string}`} EdgeID ID of an edge.\n * @internal - All public APIs use {@link EdgeObj} instead to refer to edges.\n */\n\n/**\n * @typedef {object} EdgeObj\n * @property {NodeID} v the id of the source or tail node of an edge\n * @property {NodeID} w the id of the target or head node of an edge\n * @property {string | number} [name] Name of the edge. Needed to uniquely identify\n * multiple edges between the same pair of nodes in a multigraph.\n */\n\n/**\n * @template {unknown} T\n * @typedef {T[] | Record<any, T>} Collection\n * Lodash object that can be iterated over with `_.each`.\n *\n * Beware, objects with `.length` are treated as arrays, see\n * https://lodash.com/docs/4.17.15#forEach\n */\n\n// Implementation notes:\n//\n//  * Node id query functions should return string ids for the nodes\n//  * Edge id query functions should return an \"edgeObj\", edge object, that is\n//    composed of enough information to uniquely identify an edge: {v, w, name}.\n//  * Internally we use an \"edgeId\", a stringified form of the edgeObj, to\n//    reference edges. This is because we need a performant way to look these\n//    edges up and, object properties, which have string keys, are the closest\n//    we're going to get to a performant hashtable in JavaScript.\n\n// Implementation notes:\n//\n//  * Node id query functions should return string ids for the nodes\n//  * Edge id query functions should return an \"edgeObj\", edge object, that is\n//    composed of enough information to uniquely identify an edge: {v, w, name}.\n//  * Internally we use an \"edgeId\", a stringified form of the edgeObj, to\n//    reference edges. This is because we need a performant way to look these\n//    edges up and, object properties, which have string keys, are the closest\n//    we're going to get to a performant hashtable in JavaScript.\n\n/**\n * @typedef {object} GraphOptions\n * @property {boolean | undefined} [directed] - set to `true` to get a\n * directed graph and `false` to get an undirected graph.\n * An undirected graph does not treat the order of nodes in an edge as\n * significant.\n * In other words, `g.edge(\"a\", \"b\") === g.edge(\"b\", \"a\")` for\n * an undirected graph.\n * Default: `true`\n * @property {boolean | undefined} [multigraph] - set to `true` to allow a\n * graph to have multiple edges between the same pair of nodes.\n * Default: `false`.\n * @property {boolean | undefined} [compound] - set to `true` to allow a\n * graph to have compound nodes - nodes which can be the parent of other\n * nodes.\n * Default: `false`.\n */\n\n/**\n * Graphlib has a single graph type: {@link Graph}. To create a new instance:\n *\n * ```js\n * var g = new Graph();\n * ```\n *\n * By default this will create a directed graph that does not allow multi-edges\n * or compound nodes.\n * The following options can be used when constructing a new graph:\n *\n * * {@link GraphOptions#directed}: set to `true` to get a directed graph and `false` to get an\n *   undirected graph.\n *   An undirected graph does not treat the order of nodes in an edge as\n *   significant. In other words,\n *   `g.edge(\"a\", \"b\") === g.edge(\"b\", \"a\")` for an undirected graph.\n *   Default: `true`.\n * * {@link GraphOptions#multigraph}: set to `true` to allow a graph to have multiple edges\n *   between the same pair of nodes. Default: `false`.\n * * {@link GraphOptions#compound}: set to `true` to allow a graph to have compound nodes -\n *   nodes which can be the parent of other nodes. Default: `false`.\n *\n * To set the options, pass in an options object to the `Graph` constructor.\n * For example, to create a directed compound multigraph:\n *\n * ```js\n * var g = new Graph({ directed: true, compound: true, multigraph: true });\n * ```\n *\n * ### Node and Edge Representation\n *\n * In graphlib, a node is represented by a user-supplied String id.\n * All node related functions use this String id as a way to uniquely identify\n * the node. Here is an example of interacting with nodes:\n *\n * ```js\n * var g = new Graph();\n * g.setNode(\"my-id\", \"my-label\");\n * g.node(\"my-id\"); // returns \"my-label\"\n * ```\n *\n * Edges in graphlib are identified by the nodes they connect. For example:\n *\n * ```js\n * var g = new Graph();\n * g.setEdge(\"source\", \"target\", \"my-label\");\n * g.edge(\"source\", \"target\"); // returns \"my-label\"\n * ```\n *\n * However, we need a way to uniquely identify an edge in a single object for\n * various edge queries (e.g. {@link Graph#outEdges}).\n * We use {@link EdgeObj}s for this purpose.\n * They consist of the following properties:\n *\n * * {@link EdgeObj#v}: the id of the source or tail node of an edge\n * * {@link EdgeObj#w}: the id of the target or head node of an edge\n * * {@link EdgeObj#name} (optional): the name that uniquely identifies a multiedge.\n *\n * Any edge function that takes an edge id will also work with an {@link EdgeObj}. For example:\n *\n * ```js\n * var g = new Graph();\n * g.setEdge(\"source\", \"target\", \"my-label\");\n * g.edge({ v: \"source\", w: \"target\" }); // returns \"my-label\"\n * ```\n *\n * ### Multigraphs\n *\n * A [multigraph](https://en.wikipedia.org/wiki/Multigraph) is a graph that can\n * have more than one edge between the same pair of nodes.\n * By default graphlib graphs are not multigraphs, but a multigraph can be\n * constructed by setting the {@link GraphOptions#multigraph} property to true:\n *\n * ```js\n * var g = new Graph({ multigraph: true });\n * ```\n *\n * With multiple edges between two nodes we need some way to uniquely identify\n * each edge. We call this the {@link EdgeObj#name} property.\n * Here's an example of creating a couple of edges between the same nodes:\n *\n * ```js\n * var g = new Graph({ multigraph: true });\n * g.setEdge(\"a\", \"b\", \"edge1-label\", \"edge1\");\n * g.setEdge(\"a\", \"b\", \"edge2-label\", \"edge2\");\n * g.edge(\"a\", \"b\", \"edge1\"); // returns \"edge1-label\"\n * g.edge(\"a\", \"b\", \"edge2\"); // returns \"edge2-label\"\n * g.edges(); // returns [{ v: \"a\", w: \"b\", name: \"edge1\" },\n *            //          { v: \"a\", w: \"b\", name: \"edge2\" }]\n * ```\n *\n * A multigraph still allows an edge with no name to be created:\n *\n * ```js\n * var g = new Graph({ multigraph: true });\n * g.setEdge(\"a\", \"b\", \"my-label\");\n * g.edge({ v: \"a\", w: \"b\" }); // returns \"my-label\"\n * ```\n *\n * ### Compound Graphs\n *\n * A compound graph is one where a node can be the parent of other nodes.\n * The child nodes form a \"subgraph\".\n * Here's an example of constructing and interacting with a compound graph:\n *\n * ```js\n * var g = new Graph({ compound: true });\n * g.setParent(\"a\", \"parent\");\n * g.setParent(\"b\", \"parent\");\n * g.parent(\"a\");      // returns \"parent\"\n * g.parent(\"b\");      // returns \"parent\"\n * g.parent(\"parent\"); // returns undefined\n * ```\n *\n * ### Default Labels\n *\n * When a node or edge is created without a label, a default label can be assigned.\n * See {@link setDefaultNodeLabel} and {@link setDefaultEdgeLabel}.\n *\n * @template [GraphLabel=any] - Label of the graph.\n * @template [NodeLabel=any] - Label of a node.\n * Even though this is a \"label\", this could be any type that the user requires\n * (and may need to be an object for some layout/ranking algorithms in dagre).\n * @template [EdgeLabel=any] - Label of an edge.\n * Even though this is a \"label\", this could be any type that the user requires,\n * (and may need to be a object for ranking in dagre).\n */\nexport class Graph {\n  /**\n   * @param {GraphOptions} [opts] - Graph options.\n   */\n  constructor(opts = {}) {\n    /**\n     * @type {boolean}\n     * @private\n     */\n    this._isDirected = Object.prototype.hasOwnProperty.call(opts, 'directed')\n      ? opts.directed\n      : true;\n    /**\n     * @type {boolean}\n     * @private\n     */\n    this._isMultigraph = Object.prototype.hasOwnProperty.call(opts, 'multigraph')\n      ? opts.multigraph\n      : false;\n    /**\n     * @type {boolean}\n     * @private\n     */\n    this._isCompound = Object.prototype.hasOwnProperty.call(opts, 'compound')\n      ? opts.compound\n      : false;\n\n    /**\n     * @type {GraphLabel | undefined}\n     * Label for the graph itself\n     */\n    this._label = undefined;\n\n    /**\n     * Default label to be set when creating a new node.\n     *\n     * @private\n     * @type {(v: NodeID | number) => NodeLabel}\n     */\n    this._defaultNodeLabelFn = _.constant(undefined);\n\n    /**\n     * Default label to be set when creating a new edge\n     *\n     * @private\n     * @type {(v: NodeID, w: NodeID, name: string | undefined) => EdgeLabel}\n     */\n    this._defaultEdgeLabelFn = _.constant(undefined);\n\n    /**\n     * @type {Record<NodeID, NodeLabel>}\n     * @private\n     *\n     * v -> label\n     */\n    this._nodes = {};\n\n    if (this._isCompound) {\n      /**\n       * @type {Record<NodeID, NodeID>}\n       * @private\n       * v -> parent\n       */\n      this._parent = {};\n\n      /**\n       * @type {Record<NodeID, Record<NodeID, true>>}\n       * @private\n       * v -> children\n       */\n      this._children = {};\n      this._children[GRAPH_NODE] = {};\n    }\n\n    /**\n     * @type {Record<NodeID, Record<EdgeID, EdgeObj>>}\n     * @private\n     * v -> edgeObj\n     */\n    this._in = {};\n\n    /**\n     * @type {Record<NodeID, Record<NodeID, number>>}\n     * @private\n     * u -> v -> Number\n     */\n    this._preds = {};\n\n    /**\n     * @type {Record<NodeID, Record<EdgeID, EdgeObj>>}\n     * @private\n     * v -> edgeObj\n     */\n    this._out = {};\n\n    /**\n     * @type {Record<NodeID, Record<NodeID, number>>}\n     * @private\n     * v -> w -> Number\n     */\n    this._sucs = {};\n\n    /**\n     * @type {Record<EdgeID, EdgeObj>}\n     * @private\n     * e -> edgeObj\n     */\n    this._edgeObjs = {};\n\n    /**\n     * @type {Record<EdgeID, EdgeLabel>}\n     * @private\n     * e -> label\n     */\n    this._edgeLabels = {};\n  }\n\n  /* === Graph functions ========= */\n\n  /**\n   *\n   * @returns {boolean} `true` if the graph is [directed](https://en.wikipedia.org/wiki/Directed_graph).\n   * A directed graph treats the order of nodes in an edge as significant whereas an\n   * [undirected](https://en.wikipedia.org/wiki/Graph_(mathematics)#Undirected_graph)\n   * graph does not.\n   * This example demonstrates the difference:\n   *\n   * @example\n   *\n   * ```js\n   * var directed = new Graph({ directed: true });\n   * directed.setEdge(\"a\", \"b\", \"my-label\");\n   * directed.edge(\"a\", \"b\"); // returns \"my-label\"\n   * directed.edge(\"b\", \"a\"); // returns undefined\n   *\n   * var undirected = new Graph({ directed: false });\n   * undirected.setEdge(\"a\", \"b\", \"my-label\");\n   * undirected.edge(\"a\", \"b\"); // returns \"my-label\"\n   * undirected.edge(\"b\", \"a\"); // returns \"my-label\"\n   * ```\n   */\n  isDirected() {\n    return this._isDirected;\n  }\n  /**\n   * @returns {boolean} `true` if the graph is a multigraph.\n   */\n  isMultigraph() {\n    return this._isMultigraph;\n  }\n  /**\n   * @returns {boolean} `true` if the graph is compound.\n   */\n  isCompound() {\n    return this._isCompound;\n  }\n\n  /**\n   * Sets the label for the graph to `label`.\n   *\n   * @param {GraphLabel} label - Label for the graph.\n   * @returns {this}\n   */\n  setGraph(label) {\n    this._label = label;\n    return this;\n  }\n\n  /**\n   * @returns {GraphLabel | undefined} the currently assigned label for the graph.\n   * If no label has been assigned, returns `undefined`.\n   *\n   * @example\n   *\n   * ```js\n   * var g = new Graph();\n   * g.graph(); // returns undefined\n   * g.setGraph(\"graph-label\");\n   *  g.graph(); // returns \"graph-label\"\n   * ```\n   */\n  graph() {\n    return this._label;\n  }\n  /* === Node functions ========== */\n\n  /**\n   * Sets a new default value that is assigned to nodes that are created without\n   * a label.\n   *\n   * @param {typeof this._defaultNodeLabelFn | NodeLabel} newDefault - If a function,\n   * it is called with the id of the node being created.\n   * Otherwise, it is assigned as the label directly.\n   * @returns {this}\n   */\n  setDefaultNodeLabel(newDefault) {\n    if (!_.isFunction(newDefault)) {\n      newDefault = _.constant(newDefault);\n    }\n    this._defaultNodeLabelFn = newDefault;\n    return this;\n  }\n\n  /**\n   * @returns {number} the number of nodes in the graph.\n   */\n  nodeCount() {\n    return this._nodeCount;\n  }\n\n  /**\n   * @returns {NodeID[]} the ids of the nodes in the graph.\n   *\n   * @remarks\n   * Use {@link node()} to get the label for each node.\n   * Takes `O(|V|)` time.\n   */\n  nodes() {\n    return _.keys(this._nodes);\n  }\n  /**\n   * @returns {NodeID[]} those nodes in the graph that have no in-edges.\n   * @remarks Takes `O(|V|)` time.\n   */\n  sources() {\n    var self = this;\n    return _.filter(this.nodes(), function (v) {\n      return _.isEmpty(self._in[v]);\n    });\n  }\n  /**\n   * @returns {NodeID[]} those nodes in the graph that have no out-edges.\n   * @remarks Takes `O(|V|)` time.\n   */\n  sinks() {\n    var self = this;\n    return _.filter(this.nodes(), function (v) {\n      return _.isEmpty(self._out[v]);\n    });\n  }\n\n  /**\n   * Invokes setNode method for each node in `vs` list.\n   *\n   * @param {Collection<NodeID | number>} vs - List of node IDs to create/set.\n   * @param {NodeLabel} [value] - If set, update all nodes with this value.\n   * @returns {this}\n   * @remarks Complexity: O(|names|).\n   */\n  setNodes(vs, value) {\n    var args = arguments;\n    var self = this;\n    _.each(vs, function (v) {\n      if (args.length > 1) {\n        self.setNode(v, value);\n      } else {\n        self.setNode(v);\n      }\n    });\n    return this;\n  }\n\n  /**\n   * Creates or updates the value for the node `v` in the graph.\n   *\n   * @param {NodeID | number} v - ID of the node to create/set.\n   * @param {NodeLabel} [value] - If supplied, it is set as the value for the node.\n   * If not supplied and the node was created by this call then\n   * {@link setDefaultNodeLabel} will be used to set the node's value.\n   * @returns {this} the graph, allowing this to be chained with other functions.\n   * @remarks Takes `O(1)` time.\n   */\n  setNode(v, value) {\n    if (Object.prototype.hasOwnProperty.call(this._nodes, v)) {\n      if (arguments.length > 1) {\n        this._nodes[v] = value;\n      }\n      return this;\n    }\n\n    this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v);\n    if (this._isCompound) {\n      this._parent[v] = GRAPH_NODE;\n      this._children[v] = {};\n      this._children[GRAPH_NODE][v] = true;\n    }\n    this._in[v] = {};\n    this._preds[v] = {};\n    this._out[v] = {};\n    this._sucs[v] = {};\n    ++this._nodeCount;\n    return this;\n  }\n\n  /**\n   * Gets the label of node with specified name.\n   *\n   * @param {NodeID | number} v - Node ID.\n   * @returns {NodeLabel | undefined} the label assigned to the node with the id `v`\n   * if it is in the graph.\n   * Otherwise returns `undefined`.\n   * @remarks Takes `O(1)` time.\n   */\n  node(v) {\n    return this._nodes[v];\n  }\n\n  /**\n   * Detects whether graph has a node with specified name or not.\n   *\n   * @param {NodeID | number} v - Node ID.\n   * @returns {boolean} Returns `true` the graph has a node with the id.\n   * @remarks Takes `O(1)` time.\n   */\n  hasNode(v) {\n    return Object.prototype.hasOwnProperty.call(this._nodes, v);\n  }\n\n  /**\n   * Remove the node with the id `v` in the graph or do nothing if the node is\n   * not in the graph.\n   *\n   * If the node was removed this function also removes any incident edges.\n   *\n   * @param {NodeID | number} v - Node ID to remove.\n   * @returns {this} the graph, allowing this to be chained with other functions.\n   * @remarks Takes `O(|E|)` time.\n   */\n  removeNode(v) {\n    if (Object.prototype.hasOwnProperty.call(this._nodes, v)) {\n      var removeEdge = (e) => this.removeEdge(this._edgeObjs[e]);\n      delete this._nodes[v];\n      if (this._isCompound) {\n        this._removeFromParentsChildList(v);\n        delete this._parent[v];\n        _.each(this.children(v), (child) => {\n          this.setParent(child);\n        });\n        delete this._children[v];\n      }\n      _.each(_.keys(this._in[v]), removeEdge);\n      delete this._in[v];\n      delete this._preds[v];\n      _.each(_.keys(this._out[v]), removeEdge);\n      delete this._out[v];\n      delete this._sucs[v];\n      --this._nodeCount;\n    }\n    return this;\n  }\n\n  /**\n   * Sets the parent for `v` to `parent` if it is defined or removes the parent\n   * for `v` if `parent` is undefined.\n   *\n   * @param {NodeID | number} v - Node ID to set the parent for.\n   * @param {NodeID | number} [parent] - Parent node ID. If not defined, removes the parent.\n   * @returns {this} the graph, allowing this to be chained with other functions.\n   * @throws if the graph is not compound.\n   * @throws if setting the parent would create a cycle.\n   * @remarks Takes `O(1)` time.\n   */\n  setParent(v, parent) {\n    if (!this._isCompound) {\n      throw new Error('Cannot set parent in a non-compound graph');\n    }\n\n    if (_.isUndefined(parent)) {\n      parent = GRAPH_NODE;\n    } else {\n      // Coerce parent to string\n      parent += '';\n      for (var ancestor = parent; !_.isUndefined(ancestor); ancestor = this.parent(ancestor)) {\n        if (ancestor === v) {\n          throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle');\n        }\n      }\n\n      this.setNode(parent);\n    }\n\n    this.setNode(v);\n    this._removeFromParentsChildList(v);\n    // @ts-expect-error -- We coerced parent to a string above\n    this._parent[v] = parent;\n    this._children[parent][v] = true;\n    return this;\n  }\n\n  /**\n   * @private\n   * @param {NodeID | number} v - Node ID.\n   */\n  _removeFromParentsChildList(v) {\n    delete this._children[this._parent[v]][v];\n  }\n\n  /**\n   * Get parent node for node `v`.\n   *\n   * @param {NodeID | number} v - Node ID.\n   * @returns {NodeID | undefined} the node that is a parent of node `v`\n   * or `undefined` if node `v` does not have a parent or is not a member of\n   * the graph.\n   * Always returns `undefined` for graphs that are not compound.\n   * @remarks Takes `O(1)` time.\n   */\n  parent(v) {\n    if (this._isCompound) {\n      var parent = this._parent[v];\n      if (parent !== GRAPH_NODE) {\n        return parent;\n      }\n    }\n  }\n\n  /**\n   * Gets list of direct children of node v.\n   *\n   * @param {NodeID | number} [v] - Node ID. If not specified, gets nodes\n   * with no parent (top-level nodes).\n   * @returns {NodeID[] | undefined} all nodes that are children of node `v` or\n   * `undefined` if node `v` is not in the graph.\n   * Always returns `[]` for graphs that are not compound.\n   * @remarks Takes `O(|V|)` time.\n   */\n  children(v) {\n    if (_.isUndefined(v)) {\n      v = GRAPH_NODE;\n    }\n\n    if (this._isCompound) {\n      var children = this._children[v];\n      if (children) {\n        return _.keys(children);\n      }\n    } else if (v === GRAPH_NODE) {\n      return this.nodes();\n    } else if (this.hasNode(v)) {\n      return [];\n    }\n  }\n\n  /**\n   * @param {NodeID | number} v - Node ID.\n   * @returns {NodeID[] | undefined} all nodes that are predecessors of the\n   * specified node or `undefined` if node `v` is not in the graph.\n   * @remarks\n   * Behavior is undefined for undirected graphs - use {@link neighbors} instead.\n   * Takes `O(|V|)` time.\n   */\n  predecessors(v) {\n    var predsV = this._preds[v];\n    if (predsV) {\n      return _.keys(predsV);\n    }\n  }\n\n  /**\n   * @param {NodeID | number} v - Node ID.\n   * @returns {NodeID[] | undefined} all nodes that are successors of the\n   * specified node or `undefined` if node `v` is not in the graph.\n   * @remarks\n   * Behavior is undefined for undirected graphs - use {@link neighbors} instead.\n   * Takes `O(|V|)` time.\n   */\n  successors(v) {\n    var sucsV = this._sucs[v];\n    if (sucsV) {\n      return _.keys(sucsV);\n    }\n  }\n\n  /**\n   * @param {NodeID | number} v - Node ID.\n   * @returns {NodeID[] | undefined} all nodes that are predecessors or\n   * successors of the specified node\n   * or `undefined` if node `v` is not in the graph.\n   * @remarks Takes `O(|V|)` time.\n   */\n  neighbors(v) {\n    var preds = this.predecessors(v);\n    if (preds) {\n      return _.union(preds, this.successors(v));\n    }\n  }\n\n  /**\n   * @param {NodeID | number} v - Node ID.\n   * @returns {boolean} True if the node is a leaf (has no successors), false otherwise.\n   */\n  isLeaf(v) {\n    var neighbors;\n    if (this.isDirected()) {\n      neighbors = this.successors(v);\n    } else {\n      neighbors = this.neighbors(v);\n    }\n    return neighbors.length === 0;\n  }\n\n  /**\n   * Creates new graph with nodes filtered via `filter`.\n   * Edges incident to rejected node\n   * are also removed.\n   * \n   * In case of compound graph, if parent is rejected by `filter`,\n   * than all its children are rejected too.\n\n   * @param {(v: NodeID) => boolean} filter - Function that returns `true` for nodes to keep.\n   * @returns {Graph<GraphLabel, NodeLabel, EdgeLabel>} A new graph containing only the nodes for which `filter` returns `true`.\n   * @remarks Average-case complexity: O(|E|+|V|).\n   */\n  filterNodes(filter) {\n    /**\n     * @type {Graph<GraphLabel, NodeLabel, EdgeLabel>}\n     */\n    // @ts-expect-error\n    var copy = new this.constructor({\n      directed: this._isDirected,\n      multigraph: this._isMultigraph,\n      compound: this._isCompound,\n    });\n\n    copy.setGraph(this.graph());\n\n    var self = this;\n    _.each(this._nodes, function (value, v) {\n      if (filter(v)) {\n        copy.setNode(v, value);\n      }\n    });\n\n    _.each(this._edgeObjs, function (e) {\n      if (copy.hasNode(e.v) && copy.hasNode(e.w)) {\n        copy.setEdge(e, self.edge(e));\n      }\n    });\n\n    var parents = {};\n    function findParent(v) {\n      var parent = self.parent(v);\n      if (parent === undefined || copy.hasNode(parent)) {\n        parents[v] = parent;\n        return parent;\n      } else if (parent in parents) {\n        return parents[parent];\n      } else {\n        return findParent(parent);\n      }\n    }\n\n    if (this._isCompound) {\n      _.each(copy.nodes(), function (v) {\n        copy.setParent(v, findParent(v));\n      });\n    }\n\n    return copy;\n  }\n\n  /* === Edge functions ========== */\n\n  /**\n   * Sets a new default value that is assigned to edges that are created without\n   * a label.\n   *\n   * @param {typeof this._defaultEdgeLabelFn | EdgeLabel} newDefault - If a function,\n   * it is called with the parameters `(v, w, name)`.\n   * Otherwise, it is assigned as the label directly.\n   * @returns {this}\n   */\n  setDefaultEdgeLabel(newDefault) {\n    if (!_.isFunction(newDefault)) {\n      newDefault = _.constant(newDefault);\n    }\n    this._defaultEdgeLabelFn = newDefault;\n    return this;\n  }\n\n  /**\n   * @returns {number} the number of edges in the graph.\n   * @remarks Complexity: O(1).\n   */\n  edgeCount() {\n    return this._edgeCount;\n  }\n\n  /**\n   * Gets edges of the graph.\n   *\n   * @returns {EdgeObj[]} the {@link EdgeObj} for each edge in the graph.\n   *\n   * @remarks\n   * In case of compound graph subgraphs are not considered.\n   * Use {@link edge()} to get the label for each edge.\n   * Takes `O(|E|)` time.\n   */\n  edges() {\n    return _.values(this._edgeObjs);\n  }\n\n  /**\n   * Establish an edges path over the nodes in nodes list.\n   *\n   * If some edge is already exists, it will update its label, otherwise it will\n   * create an edge between pair of nodes with label provided or default label\n   * if no label provided.\n   *\n   * @param {Collection<NodeID>} vs - List of node IDs to create edges between.\n   * @param {EdgeLabel} [value] - If set, update all edges with this value.\n   * @returns {this}\n   * @remarks Complexity: O(|nodes|).\n   */\n  setPath(vs, value) {\n    var self = this;\n    var args = arguments;\n    _.reduce(vs, function (v, w) {\n      if (args.length > 1) {\n        self.setEdge(v, w, value);\n      } else {\n        self.setEdge(v, w);\n      }\n      return w;\n    });\n    return this;\n  }\n\n  /**\n   * Creates or updates the label for the edge (`v`, `w`) with the optionally\n   * supplied `name`.\n   *\n   * @overload\n   * @param {EdgeObj} arg0 - Edge object.\n   * @param {EdgeLabel} [value] - If supplied, it is set as the label for the edge.\n   * If not supplied and the edge was created by this call then\n   * {@link setDefaultEdgeLabel} will be used to assign the edge's label.\n   * @returns {this} the graph, allowing this to be chained with other functions.\n   * @remarks Takes `O(1)` time.\n   */\n  /**\n   * Creates or updates the label for the edge (`v`, `w`) with the optionally\n   * supplied `name`.\n   *\n   * @overload\n   * @param {NodeID | number} v - Source node ID. Number values will be coerced to strings.\n   * @param {NodeID | number} w - Target node ID. Number values will be coerced to strings.\n   * @param {EdgeLabel} [value] - If supplied, it is set as the label for the edge.\n   * If not supplied and the edge was created by this call then\n   * {@link setDefaultEdgeLabel} will be used to assign the edge's label.\n   * @param {string | number} [name] - Edge name. Only useful with multigraphs.\n   * @returns {this} the graph, allowing this to be chained with other functions.\n   * @remarks Takes `O(1)` time.\n   */\n  setEdge() {\n    var v, w, name, value;\n    var valueSpecified = false;\n    var arg0 = arguments[0];\n\n    if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) {\n      v = arg0.v;\n      w = arg0.w;\n      name = arg0.name;\n      if (arguments.length === 2) {\n        value = arguments[1];\n        valueSpecified = true;\n      }\n    } else {\n      v = arg0;\n      w = arguments[1];\n      name = arguments[3];\n      if (arguments.length > 2) {\n        value = arguments[2];\n        valueSpecified = true;\n      }\n    }\n\n    v = '' + v;\n    w = '' + w;\n    if (!_.isUndefined(name)) {\n      name = '' + name;\n    }\n\n    var e = edgeArgsToId(this._isDirected, v, w, name);\n    if (Object.prototype.hasOwnProperty.call(this._edgeLabels, e)) {\n      if (valueSpecified) {\n        this._edgeLabels[e] = value;\n      }\n      return this;\n    }\n\n    if (!_.isUndefined(name) && !this._isMultigraph) {\n      throw new Error('Cannot set a named edge when isMultigraph = false');\n    }\n\n    // It didn't exist, so we need to create it.\n    // First ensure the nodes exist.\n    this.setNode(v);\n    this.setNode(w);\n\n    this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name);\n\n    var edgeObj = edgeArgsToObj(this._isDirected, v, w, name);\n    // Ensure we add undirected edges in a consistent way.\n    v = edgeObj.v;\n    w = edgeObj.w;\n\n    Object.freeze(edgeObj);\n    this._edgeObjs[e] = edgeObj;\n    incrementOrInitEntry(this._preds[w], v);\n    incrementOrInitEntry(this._sucs[v], w);\n    this._in[w][e] = edgeObj;\n    this._out[v][e] = edgeObj;\n    this._edgeCount++;\n    return this;\n  }\n\n  /**\n   * Gets the label for the specified edge.\n   *\n   * @overload\n   * @param {EdgeObj} v - Edge object.\n   * @returns {EdgeLabel | undefined} the label for the edge (`v`, `w`) if the\n   * graph has an edge between `v` and `w` with the optional `name`.\n   * Returned `undefined` if there is no such edge in the graph.\n   * @remarks\n   * `v` and `w` can be interchanged for undirected graphs.\n   * Takes `O(1)` time.\n   */\n  /**\n   * Gets the label for the specified edge.\n   *\n   * @overload\n   * @param {NodeID | number} v - Source node ID.\n   * @param {NodeID | number} w - Target node ID.\n   * @param {string | number} [name] - Edge name. Only useful with multigraphs.\n   * @returns {EdgeLabel | undefined} the label for the edge (`v`, `w`) if the\n   * graph has an edge between `v` and `w` with the optional `name`.\n   * Returned `undefined` if there is no such edge in the graph.\n   * @remarks\n   * `v` and `w` can be interchanged for undirected graphs.\n   * Takes `O(1)` time.\n   */\n  edge(v, w, name) {\n    var e =\n      arguments.length === 1\n        ? edgeObjToId(this._isDirected, arguments[0])\n        : edgeArgsToId(this._isDirected, v, w, name);\n    return this._edgeLabels[e];\n  }\n\n  /**\n   * Detects whether the graph contains specified edge or not.\n   *\n   * @overload\n   * @param {EdgeObj} v - Edge object.\n   * @returns {boolean} `true` if the graph has an edge between `v` and `w`\n   * with the optional `name`.\n   * @remarks\n   * `v` and `w` can be interchanged for undirected graphs.\n   * No subgraphs are considered.\n   * Takes `O(1)` time.\n   */\n  /**\n   * Detects whether the graph contains specified edge or not.\n   *\n   * @overload\n   * @param {NodeID | number} v - Source node ID.\n   * @param {NodeID | number} w - Target node ID.\n   * @param {string | number} [name] - Edge name. Only useful with multigraphs.\n   * @returns {boolean} `true` if the graph has an edge between `v` and `w`\n   * with the optional `name`.\n   * @remarks\n   * `v` and `w` can be interchanged for undirected graphs.\n   * No subgraphs are considered.\n   * Takes `O(1)` time.\n   */\n  hasEdge(v, w, name) {\n    var e =\n      arguments.length === 1\n        ? edgeObjToId(this._isDirected, arguments[0])\n        : edgeArgsToId(this._isDirected, v, w, name);\n    return Object.prototype.hasOwnProperty.call(this._edgeLabels, e);\n  }\n\n  /**\n   * Removes the edge (`v`, `w`) if the graph has an edge between `v` and `w`\n   * with the optional `name`. If not this function does nothing.\n   *\n   * @overload\n   * @param {EdgeObj} v - Edge object.\n   * @returns {this}\n   * @remarks\n   * `v` and `w` can be interchanged for undirected graphs.\n   * No subgraphs are considered.\n   * Takes `O(1)` time.\n   */\n  /**\n   * Removes the edge (`v`, `w`) if the graph has an edge between `v` and `w`\n   * with the optional `name`. If not this function does nothing.\n   *\n   * @overload\n   * @param {NodeID | number} v - Source node ID.\n   * @param {NodeID | number} w - Target node ID.\n   * @param {string | number} [name] - Edge name. Only useful with multigraphs.\n   * @returns {this}\n   * @remarks\n   * `v` and `w` can be interchanged for undirected graphs.\n   * Takes `O(1)` time.\n   */\n  removeEdge(v, w, name) {\n    var e =\n      arguments.length === 1\n        ? edgeObjToId(this._isDirected, arguments[0])\n        : edgeArgsToId(this._isDirected, v, w, name);\n    var edge = this._edgeObjs[e];\n    if (edge) {\n      v = edge.v;\n      w = edge.w;\n      delete this._edgeLabels[e];\n      delete this._edgeObjs[e];\n      decrementOrRemoveEntry(this._preds[w], v);\n      decrementOrRemoveEntry(this._sucs[v], w);\n      delete this._in[w][e];\n      delete this._out[v][e];\n      this._edgeCount--;\n    }\n    return this;\n  }\n\n  /**\n   * @param {NodeID | number} v - Target node ID.\n   * @param {NodeID | number} [u] - Optionally filters edges down to just those\n   * coming from node `u`.\n   * @returns {EdgeObj[] | undefined} all edges that point to the node `v`.\n   * Returns `undefined` if node `v` is not in the graph.\n   * @remarks\n   * Behavior is undefined for undirected graphs - use {@link nodeEdges} instead.\n   * Takes `O(|E|)` time.\n   */\n  inEdges(v, u) {\n    var inV = this._in[v];\n    if (inV) {\n      var edges = _.values(inV);\n      if (!u) {\n        return edges;\n      }\n      return _.filter(edges, function (edge) {\n        return edge.v === u;\n      });\n    }\n  }\n\n  /**\n   * @param {NodeID | number} v - Target node ID.\n   * @param {NodeID | number} [w] - Optionally filters edges down to just those\n   * that point to `w`.\n   * @returns {EdgeObj[] | undefined} all edges that point to the node `v`.\n   * Returns `undefined` if node `v` is not in the graph.\n   * @remarks\n   * Behavior is undefined for undirected graphs - use {@link nodeEdges} instead.\n   * Takes `O(|E|)` time.\n   */\n  outEdges(v, w) {\n    var outV = this._out[v];\n    if (outV) {\n      var edges = _.values(outV);\n      if (!w) {\n        return edges;\n      }\n      return _.filter(edges, function (edge) {\n        return edge.w === w;\n      });\n    }\n  }\n\n  /**\n   * @param {NodeID | number} v - Target Node ID.\n   * @param {NodeID | number} [w] - If set, filters those edges down to just\n   * those between nodes `v` and `w` regardless of direction\n   * @returns {EdgeObj[] | undefined} all edges to or from node `v` regardless\n   * of direction. Returns `undefined` if node `v` is not in the graph.\n   * @remarks Takes `O(|E|)` time.\n   */\n  nodeEdges(v, w) {\n    var inEdges = this.inEdges(v, w);\n    if (inEdges) {\n      return inEdges.concat(this.outEdges(v, w));\n    }\n  }\n}\n\n/* Number of nodes in the graph. Should only be changed by the implementation. */\nGraph.prototype._nodeCount = 0;\n\n/* Number of edges in the graph. Should only be changed by the implementation. */\nGraph.prototype._edgeCount = 0;\n\n/**\n * @param {Record<NodeID, number>} map - Object mapping node IDs to counts.\n * @param {NodeID | number} k - Node ID.\n */\nfunction incrementOrInitEntry(map, k) {\n  if (map[k]) {\n    map[k]++;\n  } else {\n    map[k] = 1;\n  }\n}\n\n/**\n * @param {Record<NodeID, number>} map - Object mapping node IDs to counts.\n * @param {NodeID | number} k - Node ID.\n */\nfunction decrementOrRemoveEntry(map, k) {\n  if (!--map[k]) {\n    delete map[k];\n  }\n}\n\n/**\n * @param {boolean} isDirected - If `false`, sorts v and w to ensure a consistent ID.\n * @param {EdgeObj['v'] | number} v_ - Source node ID.\n * @param {EdgeObj['w'] | number} w_ - Target node ID.\n * @param {EdgeObj['name']} [name] - Edge name (for multiple edges between the same nodes).\n * @returns {EdgeID} Unique ID for the edge.\n */\nfunction edgeArgsToId(isDirected, v_, w_, name) {\n  var v = '' + v_;\n  var w = '' + w_;\n  if (!isDirected && v > w) {\n    var tmp = v;\n    v = w;\n    w = tmp;\n  }\n  return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (_.isUndefined(name) ? DEFAULT_EDGE_NAME : name);\n}\n\n/**\n * @param {boolean} isDirected - If `false`, sorts v and w to ensure a consistent ID.\n * @param {EdgeObj['v'] | number} v_ - Source node ID.\n * @param {EdgeObj['w'] | number} w_ - Target node ID.\n * @param {EdgeObj['name']} [name] - Edge name (for multiple edges between the same nodes).\n * @returns {EdgeObj}\n */\nfunction edgeArgsToObj(isDirected, v_, w_, name) {\n  var v = '' + v_;\n  var w = '' + w_;\n  if (!isDirected && v > w) {\n    var tmp = v;\n    v = w;\n    w = tmp;\n  }\n  var edgeObj = { v: v, w: w };\n  if (name) {\n    edgeObj.name = name;\n  }\n  return edgeObj;\n}\n\n/**\n * @param {boolean} isDirected - If `false`, sorts v and w to ensure a consistent ID.\n * @param {EdgeObj} edgeObj - Edge object.\n * @returns {EdgeID} Unique ID for the edge.\n */\nfunction edgeObjToId(isDirected, edgeObj) {\n  return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name);\n}\n"],
  "mappings": "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",
  "names": []
}
