{"version":3,"file":"chunk-RYQCIY6F-BDfd0UYu.chunk.mjs","sources":["../node_modules/lodash-es/clone.js","../node_modules/dagre-d3-es/src/graphlib/json.js","../node_modules/mermaid/dist/chunks/mermaid.core/chunk-RYQCIY6F.mjs"],"sourcesContent":["import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_SYMBOLS_FLAG = 4;\n\n/**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\nfunction clone(value) {\n  return baseClone(value, CLONE_SYMBOLS_FLAG);\n}\n\nexport default clone;\n","import * as _ from 'lodash-es';\nimport { Graph } from './graph.js';\n\n/**\n * @import { NodeID, EdgeObj, GraphOptions } from './graph.js';\n */\n\nexport { write, read };\n\n/**\n * @template [GraphLabel=any] - Label of the graph.\n * @template [NodeLabel=any] - Label of a node.\n * @template [EdgeLabel=any] - Label of an edge.\n *\n * @typedef {object} GraphJSON\n * @property {Required<GraphOptions>} options - The options used to create the graph.\n * @property {Array<{ v: NodeID; value?: NodeLabel; parent?: NodeID }>} nodes - The nodes in the graph.\n * @property {Array<EdgeObj & { value?: EdgeLabel }>} edges - The edges in the graph.\n * @property {GraphLabel} [value] - The graph's value, if any.\n */\n\n/**\n * Creates a JSON representation of the graph that can be serialized to a\n * string with\n * [JSON.stringify](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify).\n * The graph can later be restored using {@link read}.\n *\n * @example\n *\n * ```js\n * var g = new graphlib.Graph();\n * g.setNode(\"a\", { label: \"node a\" });\n * g.setNode(\"b\", { label: \"node b\" });\n * g.setEdge(\"a\", \"b\", { label: \"edge a->b\" });\n * graphlib.json.write(g);\n * // Returns the object:\n * //\n * // {\n * //   \"options\": {\n * //     \"directed\": true,\n * //     \"multigraph\": false,\n * //     \"compound\": false\n * //   },\n * //   \"nodes\": [\n * //     { \"v\": \"a\", \"value\": { \"label\": \"node a\" } },\n * //     { \"v\": \"b\", \"value\": { \"label\": \"node b\" } }\n * //   ],\n * //   \"edges\": [\n * //     { \"v\": \"a\", \"w\": \"b\", \"value\": { \"label\": \"edge a->b\" } }\n * //   ]\n * // }\n * ```\n *\n * @template [GraphLabel=any] - Label of the graph.\n * @template [NodeLabel=any] - Label of a node.\n * @template [EdgeLabel=any] - Label of an edge.\n * @param {Graph<GraphLabel, NodeLabel, EdgeLabel>} g - The graph to serialize.\n * @returns {GraphJSON<GraphLabel, NodeLabel, EdgeLabel>} The JSON representation of the graph.\n */\nfunction write(g) {\n  /** @type {GraphJSON<GraphLabel, NodeLabel, EdgeLabel>} */\n  var json = {\n    options: {\n      directed: g.isDirected(),\n      multigraph: g.isMultigraph(),\n      compound: g.isCompound(),\n    },\n    nodes: writeNodes(g),\n    edges: writeEdges(g),\n  };\n  if (!_.isUndefined(g.graph())) {\n    json.value = _.clone(g.graph());\n  }\n  return json;\n}\n\n/**\n * @template NodeLabel - Label of a node.\n *\n * @param {Graph<unknown, NodeLabel, unknown>} g - The graph to serialize.\n * @returns {Array<{ v: NodeID; value?: NodeLabel; parent?: NodeID }>} The nodes in the graph.\n */\nfunction writeNodes(g) {\n  return _.map(g.nodes(), function (v) {\n    var nodeValue = g.node(v);\n    var parent = g.parent(v);\n    /** @type {{ v: NodeID; value?: NodeLabel; parent?: NodeID }} */\n    var node = { v: v };\n    if (!_.isUndefined(nodeValue)) {\n      node.value = nodeValue;\n    }\n    if (!_.isUndefined(parent)) {\n      node.parent = parent;\n    }\n    return node;\n  });\n}\n\n/**\n * @template EdgeLabel - Label of a node.\n *\n * @param {Graph<unknown, unknown, EdgeLabel>} g - The graph to serialize.\n * @returns {Array<EdgeObj & { value?: EdgeLabel }>} The edges in the graph.\n */\nfunction writeEdges(g) {\n  return _.map(g.edges(), function (e) {\n    var edgeValue = g.edge(e);\n    /** @type {EdgeObj & { value?: EdgeLabel }} */\n    var edge = { v: e.v, w: e.w };\n    if (!_.isUndefined(e.name)) {\n      edge.name = e.name;\n    }\n    if (!_.isUndefined(edgeValue)) {\n      edge.value = edgeValue;\n    }\n    return edge;\n  });\n}\n\n/**\n * Takes JSON as input and returns the graph representation.\n *\n * @example\n *\n * For example, if we have serialized the graph in {@link write}\n * to a string named `str`, we can restore it to a graph as follows:\n *\n * ```js\n * var g2 = graphlib.json.read(JSON.parse(str));\n * // or, in order to copy the graph\n * var g3 = graphlib.json.read(graphlib.json.write(g))\n *\n * g2.nodes();\n * // ['a', 'b']\n * g2.edges()\n * // [ { v: 'a', w: 'b' } ]\n * ```\n *\n * @template [GraphLabel=any] - Label of the graph.\n * @template [NodeLabel=any] - Label of a node.\n * @template [EdgeLabel=any] - Label of an edge.\n * @param {GraphJSON<GraphLabel, NodeLabel, EdgeLabel>} json - The JSON representation of the graph.\n * @returns {Graph<GraphLabel, NodeLabel, EdgeLabel>} The restored graph.\n */\nfunction read(json) {\n  var g = new Graph(json.options).setGraph(json.value);\n  _.each(json.nodes, function (entry) {\n    g.setNode(entry.v, entry.value);\n    if (entry.parent) {\n      g.setParent(entry.v, entry.parent);\n    }\n  });\n  _.each(json.edges, function (entry) {\n    g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value);\n  });\n  return g;\n}\n","import {\n  log\n} from \"./chunk-X3CZISLH.mjs\";\nimport {\n  __name\n} from \"./chunk-Y2CYZVJY.mjs\";\n\n// src/rendering-util/layout-algorithms/dagre/mermaid-graphlib.js\nimport * as graphlib from \"dagre-d3-es/src/graphlib/index.js\";\nimport * as graphlibJson from \"dagre-d3-es/src/graphlib/json.js\";\nvar clusterDb = /* @__PURE__ */ new Map();\nvar descendants = /* @__PURE__ */ new Map();\nvar parents = /* @__PURE__ */ new Map();\nvar clear = /* @__PURE__ */ __name(() => {\n  descendants.clear();\n  parents.clear();\n  clusterDb.clear();\n}, \"clear\");\nvar isDescendant = /* @__PURE__ */ __name((id, ancestorId) => {\n  const ancestorDescendants = descendants.get(ancestorId) || [];\n  log.trace(\"In isDescendant\", ancestorId, \" \", id, \" = \", ancestorDescendants.includes(id));\n  return ancestorDescendants.includes(id);\n}, \"isDescendant\");\nvar edgeInCluster = /* @__PURE__ */ __name((edge, clusterId) => {\n  const clusterDescendants = descendants.get(clusterId) || [];\n  log.info(\"Descendants of \", clusterId, \" is \", clusterDescendants);\n  log.info(\"Edge is \", edge);\n  if (edge.v === clusterId || edge.w === clusterId) {\n    return false;\n  }\n  if (!clusterDescendants) {\n    log.debug(\"Tilt, \", clusterId, \",not in descendants\");\n    return false;\n  }\n  return clusterDescendants.includes(edge.v) || isDescendant(edge.v, clusterId) || isDescendant(edge.w, clusterId) || clusterDescendants.includes(edge.w);\n}, \"edgeInCluster\");\nvar copy = /* @__PURE__ */ __name((clusterId, graph, newGraph, rootId) => {\n  log.warn(\n    \"Copying children of \",\n    clusterId,\n    \"root\",\n    rootId,\n    \"data\",\n    graph.node(clusterId),\n    rootId\n  );\n  const nodes = graph.children(clusterId) || [];\n  if (clusterId !== rootId) {\n    nodes.push(clusterId);\n  }\n  log.warn(\"Copying (nodes) clusterId\", clusterId, \"nodes\", nodes);\n  nodes.forEach((node) => {\n    if (graph.children(node).length > 0) {\n      copy(node, graph, newGraph, rootId);\n    } else {\n      const data = graph.node(node);\n      log.info(\"cp \", node, \" to \", rootId, \" with parent \", clusterId);\n      newGraph.setNode(node, data);\n      if (rootId !== graph.parent(node)) {\n        log.warn(\"Setting parent\", node, graph.parent(node));\n        newGraph.setParent(node, graph.parent(node));\n      }\n      if (clusterId !== rootId && node !== clusterId) {\n        log.debug(\"Setting parent\", node, clusterId);\n        newGraph.setParent(node, clusterId);\n      } else {\n        log.info(\"In copy \", clusterId, \"root\", rootId, \"data\", graph.node(clusterId), rootId);\n        log.debug(\n          \"Not Setting parent for node=\",\n          node,\n          \"cluster!==rootId\",\n          clusterId !== rootId,\n          \"node!==clusterId\",\n          node !== clusterId\n        );\n      }\n      const edges = graph.edges(node);\n      log.debug(\"Copying Edges\", edges);\n      edges.forEach((edge) => {\n        log.info(\"Edge\", edge);\n        const data2 = graph.edge(edge.v, edge.w, edge.name);\n        log.info(\"Edge data\", data2, rootId);\n        try {\n          if (edgeInCluster(edge, rootId)) {\n            const rootDescendants = descendants.get(rootId) || [];\n            const vIn = rootDescendants.includes(edge.v) || isDescendant(edge.v, rootId) || edge.v === rootId;\n            const wIn = rootDescendants.includes(edge.w) || isDescendant(edge.w, rootId) || edge.w === rootId;\n            if (vIn && wIn) {\n              log.info(\"Copying as \", edge.v, edge.w, data2, edge.name);\n              newGraph.setEdge(edge.v, edge.w, data2, edge.name);\n              log.info(\"newGraph edges \", newGraph.edges(), newGraph.edge(newGraph.edges()[0]));\n            } else {\n              const newV = vIn ? rootId : edge.v;\n              const newW = wIn ? rootId : edge.w;\n              log.info(\"Rebinding cross-boundary edge as \", newV, newW, data2, edge.name);\n              graph.setEdge(newV, newW, data2, edge.name);\n            }\n          } else {\n            log.info(\n              \"Skipping copy of edge \",\n              edge.v,\n              \"-->\",\n              edge.w,\n              \" rootId: \",\n              rootId,\n              \" clusterId:\",\n              clusterId\n            );\n          }\n        } catch (e) {\n          log.error(e);\n        }\n      });\n    }\n    log.debug(\"Removing node\", node);\n    graph.removeNode(node);\n  });\n}, \"copy\");\nvar extractDescendants = /* @__PURE__ */ __name((id, graph) => {\n  const children = graph.children(id);\n  let res = [...children];\n  for (const child of children) {\n    parents.set(child, id);\n    res = [...res, ...extractDescendants(child, graph)];\n  }\n  return res;\n}, \"extractDescendants\");\nvar findCommonEdges = /* @__PURE__ */ __name((graph, id1, id2) => {\n  const edges1 = graph.edges().filter((edge) => edge.v === id1 || edge.w === id1);\n  const edges2 = graph.edges().filter((edge) => edge.v === id2 || edge.w === id2);\n  const edges1Prim = edges1.map((edge) => {\n    return { v: edge.v === id1 ? id2 : edge.v, w: edge.w === id1 ? id1 : edge.w };\n  });\n  const edges2Prim = edges2.map((edge) => {\n    return { v: edge.v, w: edge.w };\n  });\n  const result = edges1Prim.filter((edgeIn1) => {\n    return edges2Prim.some((edge) => edgeIn1.v === edge.v && edgeIn1.w === edge.w);\n  });\n  return result;\n}, \"findCommonEdges\");\nvar findNonClusterChild = /* @__PURE__ */ __name((id, graph, clusterId) => {\n  const children = graph.children(id);\n  log.trace(\"Searching children of id \", id, children);\n  if (children.length < 1) {\n    return id;\n  }\n  let reserve;\n  for (const child of children) {\n    const _id = findNonClusterChild(child, graph, clusterId);\n    const commonEdges = findCommonEdges(graph, clusterId, _id);\n    if (_id) {\n      if (commonEdges.length > 0) {\n        reserve = _id;\n      } else {\n        return _id;\n      }\n    }\n  }\n  return reserve;\n}, \"findNonClusterChild\");\nvar getAnchorId = /* @__PURE__ */ __name((id) => {\n  if (!clusterDb.has(id)) {\n    return id;\n  }\n  if (!clusterDb.get(id).externalConnections) {\n    return id;\n  }\n  if (clusterDb.has(id)) {\n    return clusterDb.get(id).id;\n  }\n  return id;\n}, \"getAnchorId\");\nvar adjustClustersAndEdges = /* @__PURE__ */ __name((graph, depth) => {\n  if (!graph || depth > 10) {\n    log.debug(\"Opting out, no graph \");\n    return;\n  } else {\n    log.debug(\"Opting in, graph \");\n  }\n  graph.nodes().forEach(function(id) {\n    const children = graph.children(id);\n    if (children.length > 0) {\n      log.warn(\n        \"Cluster identified\",\n        id,\n        \" Replacement id in edges: \",\n        findNonClusterChild(id, graph, id)\n      );\n      descendants.set(id, extractDescendants(id, graph));\n      clusterDb.set(id, { id: findNonClusterChild(id, graph, id), clusterData: graph.node(id) });\n    }\n  });\n  graph.nodes().forEach(function(id) {\n    const children = graph.children(id);\n    const edges = graph.edges();\n    if (children.length > 0) {\n      log.debug(\"Cluster identified\", id, descendants);\n      edges.forEach((edge) => {\n        const d1 = isDescendant(edge.v, id);\n        const d2 = isDescendant(edge.w, id);\n        if (d1 ^ d2) {\n          log.warn(\"Edge: \", edge, \" leaves cluster \", id);\n          log.warn(\"Descendants of XXX \", id, \": \", descendants.get(id));\n          clusterDb.get(id).externalConnections = true;\n        }\n      });\n    } else {\n      log.debug(\"Not a cluster \", id, descendants);\n    }\n  });\n  for (let id of clusterDb.keys()) {\n    const nonClusterChild = clusterDb.get(id).id;\n    const parent = graph.parent(nonClusterChild);\n    if (parent !== id && clusterDb.has(parent) && !clusterDb.get(parent).externalConnections) {\n      clusterDb.get(id).id = parent;\n    }\n    const hasDirectOutgoingEdge = graph.edges().some((edge) => edge.v === id);\n    if (nonClusterChild && clusterDb.get(id)?.externalConnections && hasDirectOutgoingEdge && isNodeInExtractableCluster(graph, nonClusterChild, id)) {\n      const safeAnchor = findSafeAnchorNode(graph, id, graph.parent(nonClusterChild));\n      if (safeAnchor) {\n        clusterDb.get(id).id = safeAnchor;\n      }\n    }\n  }\n  graph.edges().forEach(function(e) {\n    const edge = graph.edge(e);\n    log.warn(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(e));\n    log.warn(\"Edge \" + e.v + \" -> \" + e.w + \": \" + JSON.stringify(graph.edge(e)));\n    let v = e.v;\n    let w = e.w;\n    log.warn(\n      \"Fix XXX\",\n      clusterDb,\n      \"ids:\",\n      e.v,\n      e.w,\n      \"Translating: \",\n      clusterDb.get(e.v),\n      \" --- \",\n      clusterDb.get(e.w)\n    );\n    if (clusterDb.get(e.v) || clusterDb.get(e.w)) {\n      log.warn(\"Fixing and trying - removing XXX\", e.v, e.w, e.name);\n      v = getAnchorId(e.v);\n      w = getAnchorId(e.w);\n      graph.removeEdge(e.v, e.w, e.name);\n      if (v !== e.v) {\n        const parent = graph.parent(v);\n        clusterDb.get(parent).externalConnections = true;\n        edge.fromCluster = e.v;\n      }\n      if (w !== e.w) {\n        const parent = graph.parent(w);\n        clusterDb.get(parent).externalConnections = true;\n        edge.toCluster = e.w;\n      }\n      log.warn(\"Fix Replacing with XXX\", v, w, e.name);\n      graph.setEdge(v, w, edge, e.name);\n    }\n  });\n  log.warn(\"Adjusted Graph\", graphlibJson.write(graph));\n  extractor(graph, 0);\n  log.trace(clusterDb);\n}, \"adjustClustersAndEdges\");\nvar extractor = /* @__PURE__ */ __name((graph, depth) => {\n  log.warn(\"extractor - \", depth, graphlibJson.write(graph), graph.children(\"D\"));\n  if (depth > 10) {\n    log.error(\"Bailing out\");\n    return;\n  }\n  let nodes = graph.nodes();\n  let hasChildren = false;\n  for (const node of nodes) {\n    const children = graph.children(node);\n    hasChildren = hasChildren || children.length > 0;\n  }\n  if (!hasChildren) {\n    log.debug(\"Done, no node has children\", graph.nodes());\n    return;\n  }\n  log.debug(\"Nodes = \", nodes, depth);\n  for (const node of nodes) {\n    log.debug(\n      \"Extracting node\",\n      node,\n      clusterDb,\n      clusterDb.has(node) && !clusterDb.get(node).externalConnections,\n      !graph.parent(node),\n      graph.node(node),\n      graph.children(\"D\"),\n      \" Depth \",\n      depth\n    );\n    if (!clusterDb.has(node)) {\n      log.debug(\"Not a cluster\", node, depth);\n    } else if (clusterDb.get(node)?.clusterData?.explicitDir && graph.children(node) && graph.children(node).length > 0) {\n      log.warn(\"Cluster with explicit dir, creating subgraph for children\", node, depth);\n      const dir = clusterDb.get(node).clusterData.dir;\n      const clusterGraph = new graphlib.Graph({\n        multigraph: true,\n        compound: true\n      }).setGraph({\n        rankdir: dir,\n        nodesep: 50,\n        ranksep: 50,\n        marginx: 8,\n        marginy: 8\n      }).setDefaultEdgeLabel(function() {\n        return {};\n      });\n      copy(node, graph, clusterGraph, node);\n      const clusterNodeData = graph.node(node) || {};\n      graph.setNode(node, {\n        ...clusterNodeData,\n        clusterNode: true,\n        id: node,\n        clusterData: clusterDb.get(node).clusterData,\n        label: clusterDb.get(node).label,\n        graph: clusterGraph\n      });\n      log.warn(\n        \"Subgraph for cluster with explicit dir created:\",\n        node,\n        graphlibJson.write(clusterGraph)\n      );\n    } else if (!clusterDb.get(node).externalConnections && graph.children(node) && graph.children(node).length > 0) {\n      log.warn(\n        \"Cluster without external connections, without a parent and with children\",\n        node,\n        depth\n      );\n      const graphSettings = graph.graph();\n      let dir = graphSettings.rankdir === \"TB\" ? \"LR\" : \"TB\";\n      if (clusterDb.get(node)?.clusterData?.dir) {\n        dir = clusterDb.get(node).clusterData.dir;\n        log.warn(\"Fixing dir\", clusterDb.get(node).clusterData.dir, dir);\n      }\n      const clusterGraph = new graphlib.Graph({\n        multigraph: true,\n        compound: true\n      }).setGraph({\n        rankdir: dir,\n        nodesep: 50,\n        ranksep: 50,\n        marginx: 8,\n        marginy: 8\n      }).setDefaultEdgeLabel(function() {\n        return {};\n      });\n      copy(node, graph, clusterGraph, node);\n      const clusterNodeData = graph.node(node) || {};\n      graph.setNode(node, {\n        ...clusterNodeData,\n        clusterNode: true,\n        id: node,\n        clusterData: clusterDb.get(node).clusterData,\n        label: clusterDb.get(node).label,\n        graph: clusterGraph\n      });\n      log.debug(\"Old graph after copy\", graphlibJson.write(graph));\n    } else {\n      log.warn(\n        \"Cluster ** \",\n        node,\n        \" **not meeting the criteria !externalConnections:\",\n        !clusterDb.get(node).externalConnections,\n        \" no parent: \",\n        !graph.parent(node),\n        \" children \",\n        graph.children(node) && graph.children(node).length > 0,\n        graph.children(\"D\"),\n        depth\n      );\n      log.debug(clusterDb);\n    }\n  }\n  nodes = graph.nodes();\n  log.warn(\"New list of nodes\", nodes);\n  for (const node of nodes) {\n    const data = graph.node(node);\n    log.warn(\" Now next level\", node, data);\n    if (data?.clusterNode) {\n      extractor(data.graph, depth + 1);\n    }\n  }\n}, \"extractor\");\nvar sorter = /* @__PURE__ */ __name((graph, nodes) => {\n  if (nodes.length === 0) {\n    return [];\n  }\n  let result = Object.assign([], nodes);\n  nodes.forEach((node) => {\n    const children = graph.children(node);\n    const sorted = sorter(graph, children);\n    result = [...result, ...sorted];\n  });\n  return result;\n}, \"sorter\");\nvar sortNodesByHierarchy = /* @__PURE__ */ __name((graph) => sorter(graph, graph.children()), \"sortNodesByHierarchy\");\nvar isNodeInExtractableCluster = /* @__PURE__ */ __name((graph, node, rootId) => {\n  let parent = graph.parent(node);\n  while (parent && parent !== rootId) {\n    const cluster = clusterDb.get(parent);\n    if (cluster && !cluster.externalConnections) {\n      return true;\n    }\n    parent = graph.parent(parent);\n  }\n  return false;\n}, \"isNodeInExtractableCluster\");\nvar findSafeAnchorNode = /* @__PURE__ */ __name((graph, clusterId, excludedCluster) => {\n  const children = graph.children(clusterId) ?? [];\n  for (const child of children) {\n    if (child === excludedCluster || isDescendant(child, excludedCluster)) {\n      continue;\n    }\n    const candidate = findNonClusterChild(child, graph, clusterId);\n    if (!candidate) {\n      continue;\n    }\n    if (!isNodeInExtractableCluster(graph, candidate, clusterId)) {\n      return candidate;\n    }\n  }\n  return null;\n}, \"findSafeAnchorNode\");\n\nexport {\n  clusterDb,\n  clear,\n  findNonClusterChild,\n  adjustClustersAndEdges,\n  sortNodesByHierarchy\n};\n"],"names":["CLONE_SYMBOLS_FLAG","clone","value","baseClone","write","g","json","writeNodes","writeEdges","_.isUndefined","_.clone","_.map","v","nodeValue","parent","node","e","edgeValue","edge","clusterDb","descendants","parents","clear","__name","isDescendant","id","ancestorId","ancestorDescendants","log","edgeInCluster","clusterId","clusterDescendants","copy","graph","newGraph","rootId","nodes","data","edges","data2","rootDescendants","vIn","wIn","newV","newW","extractDescendants","children","res","child","findCommonEdges","id1","id2","edges1","edges2","edges1Prim","edges2Prim","edgeIn1","findNonClusterChild","reserve","_id","commonEdges","getAnchorId","adjustClustersAndEdges","depth","d1","d2","nonClusterChild","hasDirectOutgoingEdge","isNodeInExtractableCluster","safeAnchor","findSafeAnchorNode","w","graphlibJson.write","extractor","hasChildren","dir","clusterGraph","graphlib.Graph","clusterNodeData","sorter","result","sorted","sortNodesByHierarchy","cluster","excludedCluster","candidate"],"mappings":"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","x_google_ignoreList":[0,1,2]}