1 |
- {"version":3,"file":"7190.83a665f83234305530d1.js","mappings":"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","sources":["webpack://grafana/../../opt/drone/yarncache/d3-dispatch-npm-2.0.0-1417ab6cc8-cf473676ae.zip/node_modules/d3-dispatch/src/dispatch.js","webpack://grafana/../../opt/drone/yarncache/d3-timer-npm-2.0.0-590adf27a0-70733c3baf.zip/node_modules/d3-timer/src/timer.js","webpack://grafana/../../opt/drone/yarncache/d3-force-npm-2.1.1-a14e5190d5-aaee5b86d7.zip/node_modules/d3-force/src/lcg.js","webpack://grafana/../../opt/drone/yarncache/d3-force-npm-2.1.1-a14e5190d5-aaee5b86d7.zip/node_modules/d3-force/src/simulation.js","webpack://grafana/../../opt/drone/yarncache/d3-force-npm-2.1.1-a14e5190d5-aaee5b86d7.zip/node_modules/d3-force/src/constant.js","webpack://grafana/../../opt/drone/yarncache/d3-force-npm-2.1.1-a14e5190d5-aaee5b86d7.zip/node_modules/d3-force/src/jiggle.js","webpack://grafana/../../opt/drone/yarncache/d3-force-npm-2.1.1-a14e5190d5-aaee5b86d7.zip/node_modules/d3-force/src/link.js","webpack://grafana/../../opt/drone/yarncache/d3-quadtree-npm-2.0.0-93642d6b98-e5f9cee19a.zip/node_modules/d3-quadtree/src/add.js","webpack://grafana/../../opt/drone/yarncache/d3-quadtree-npm-2.0.0-93642d6b98-e5f9cee19a.zip/node_modules/d3-quadtree/src/quad.js","webpack://grafana/../../opt/drone/yarncache/d3-quadtree-npm-2.0.0-93642d6b98-e5f9cee19a.zip/node_modules/d3-quadtree/src/x.js","webpack://grafana/../../opt/drone/yarncache/d3-quadtree-npm-2.0.0-93642d6b98-e5f9cee19a.zip/node_modules/d3-quadtree/src/y.js","webpack://grafana/../../opt/drone/yarncache/d3-quadtree-npm-2.0.0-93642d6b98-e5f9cee19a.zip/node_modules/d3-quadtree/src/quadtree.js","webpack://grafana/../../opt/drone/yarncache/d3-force-npm-2.1.1-a14e5190d5-aaee5b86d7.zip/node_modules/d3-force/src/collide.js","webpack://grafana/../../opt/drone/yarncache/d3-quadtree-npm-2.0.0-93642d6b98-e5f9cee19a.zip/node_modules/d3-quadtree/src/cover.js","webpack://grafana/../../opt/drone/yarncache/d3-quadtree-npm-2.0.0-93642d6b98-e5f9cee19a.zip/node_modules/d3-quadtree/src/data.js","webpack://grafana/../../opt/drone/yarncache/d3-quadtree-npm-2.0.0-93642d6b98-e5f9cee19a.zip/node_modules/d3-quadtree/src/extent.js","webpack://grafana/../../opt/drone/yarncache/d3-quadtree-npm-2.0.0-93642d6b98-e5f9cee19a.zip/node_modules/d3-quadtree/src/find.js","webpack://grafana/../../opt/drone/yarncache/d3-quadtree-npm-2.0.0-93642d6b98-e5f9cee19a.zip/node_modules/d3-quadtree/src/remove.js","webpack://grafana/../../opt/drone/yarncache/d3-quadtree-npm-2.0.0-93642d6b98-e5f9cee19a.zip/node_modules/d3-quadtree/src/root.js","webpack://grafana/../../opt/drone/yarncache/d3-quadtree-npm-2.0.0-93642d6b98-e5f9cee19a.zip/node_modules/d3-quadtree/src/size.js","webpack://grafana/../../opt/drone/yarncache/d3-quadtree-npm-2.0.0-93642d6b98-e5f9cee19a.zip/node_modules/d3-quadtree/src/visit.js","webpack://grafana/../../opt/drone/yarncache/d3-quadtree-npm-2.0.0-93642d6b98-e5f9cee19a.zip/node_modules/d3-quadtree/src/visitAfter.js","webpack://grafana/./public/app/plugins/panel/nodeGraph/layout.worker.js","webpack://grafana/../../opt/drone/yarncache/d3-force-npm-2.1.1-a14e5190d5-aaee5b86d7.zip/node_modules/d3-force/src/x.js"],"sourcesContent":["var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n let s = 1;\n return () => (s = (a * s + c) % m) / m;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer} from \"d3-timer\";\nimport lcg from \"./lcg.js\";\n\nexport function x(d) {\n return d.x;\n}\n\nexport function y(d) {\n return d.y;\n}\n\nvar initialRadius = 10,\n initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nexport default function(nodes) {\n var simulation,\n alpha = 1,\n alphaMin = 0.001,\n alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n alphaTarget = 0,\n velocityDecay = 0.6,\n forces = new Map(),\n stepper = timer(step),\n event = dispatch(\"tick\", \"end\"),\n random = lcg();\n\n if (nodes == null) nodes = [];\n\n function step() {\n tick();\n event.call(\"tick\", simulation);\n if (alpha < alphaMin) {\n stepper.stop();\n event.call(\"end\", simulation);\n }\n }\n\n function tick(iterations) {\n var i, n = nodes.length, node;\n\n if (iterations === undefined) iterations = 1;\n\n for (var k = 0; k < iterations; ++k) {\n alpha += (alphaTarget - alpha) * alphaDecay;\n\n forces.forEach(function(force) {\n force(alpha);\n });\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (node.fx == null) node.x += node.vx *= velocityDecay;\n else node.x = node.fx, node.vx = 0;\n if (node.fy == null) node.y += node.vy *= velocityDecay;\n else node.y = node.fy, node.vy = 0;\n }\n }\n\n return simulation;\n }\n\n function initializeNodes() {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.index = i;\n if (node.fx != null) node.x = node.fx;\n if (node.fy != null) node.y = node.fy;\n if (isNaN(node.x) || isNaN(node.y)) {\n var radius = initialRadius * Math.sqrt(0.5 + i), angle = i * initialAngle;\n node.x = radius * Math.cos(angle);\n node.y = radius * Math.sin(angle);\n }\n if (isNaN(node.vx) || isNaN(node.vy)) {\n node.vx = node.vy = 0;\n }\n }\n }\n\n function initializeForce(force) {\n if (force.initialize) force.initialize(nodes, random);\n return force;\n }\n\n initializeNodes();\n\n return simulation = {\n tick: tick,\n\n restart: function() {\n return stepper.restart(step), simulation;\n },\n\n stop: function() {\n return stepper.stop(), simulation;\n },\n\n nodes: function(_) {\n return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes;\n },\n\n alpha: function(_) {\n return arguments.length ? (alpha = +_, simulation) : alpha;\n },\n\n alphaMin: function(_) {\n return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n },\n\n alphaDecay: function(_) {\n return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n },\n\n alphaTarget: function(_) {\n return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n },\n\n velocityDecay: function(_) {\n return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n },\n\n randomSource: function(_) {\n return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random;\n },\n\n force: function(name, _) {\n return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n },\n\n find: function(x, y, radius) {\n var i = 0,\n n = nodes.length,\n dx,\n dy,\n d2,\n node,\n closest;\n\n if (radius == null) radius = Infinity;\n else radius *= radius;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dx = x - node.x;\n dy = y - node.y;\n d2 = dx * dx + dy * dy;\n if (d2 < radius) closest = node, radius = d2;\n }\n\n return closest;\n },\n\n on: function(name, _) {\n return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n }\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(random) {\n return (random() - 0.5) * 1e-6;\n}\n","import constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction index(d) {\n return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n var node = nodeById.get(nodeId);\n if (!node) throw new Error(\"node not found: \" + nodeId);\n return node;\n}\n\nexport default function(links) {\n var id = index,\n strength = defaultStrength,\n strengths,\n distance = constant(30),\n distances,\n nodes,\n count,\n bias,\n random,\n iterations = 1;\n\n if (links == null) links = [];\n\n function defaultStrength(link) {\n return 1 / Math.min(count[link.source.index], count[link.target.index]);\n }\n\n function force(alpha) {\n for (var k = 0, n = links.length; k < iterations; ++k) {\n for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n link = links[i], source = link.source, target = link.target;\n x = target.x + target.vx - source.x - source.vx || jiggle(random);\n y = target.y + target.vy - source.y - source.vy || jiggle(random);\n l = Math.sqrt(x * x + y * y);\n l = (l - distances[i]) / l * alpha * strengths[i];\n x *= l, y *= l;\n target.vx -= x * (b = bias[i]);\n target.vy -= y * b;\n source.vx += x * (b = 1 - b);\n source.vy += y * b;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n\n var i,\n n = nodes.length,\n m = links.length,\n nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])),\n link;\n\n for (i = 0, count = new Array(n); i < m; ++i) {\n link = links[i], link.index = i;\n if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n count[link.source.index] = (count[link.source.index] || 0) + 1;\n count[link.target.index] = (count[link.target.index] || 0) + 1;\n }\n\n for (i = 0, bias = new Array(m); i < m; ++i) {\n link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n }\n\n strengths = new Array(m), initializeStrength();\n distances = new Array(m), initializeDistance();\n }\n\n function initializeStrength() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n strengths[i] = +strength(links[i], i, links);\n }\n }\n\n function initializeDistance() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n distances[i] = +distance(links[i], i, links);\n }\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.links = function(_) {\n return arguments.length ? (links = _, initialize(), force) : links;\n };\n\n force.id = function(_) {\n return arguments.length ? (id = _, force) : id;\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initializeStrength(), force) : strength;\n };\n\n force.distance = function(_) {\n return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant(+_), initializeDistance(), force) : distance;\n };\n\n return force;\n}\n","export default function(d) {\n const x = +this._x.call(null, d),\n y = +this._y.call(null, d);\n return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n x1 = tree._x1,\n y1 = tree._y1,\n xm,\n ym,\n xp,\n yp,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n xz = new Array(n),\n yz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n\n // If there were no (valid) points, abort.\n if (x0 > x1 || y0 > y1) return this;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0).cover(x1, y1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], data[i]);\n }\n\n return this;\n}\n","export default function(node, x0, y0, x1, y1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.x1 = x1;\n this.y1 = y1;\n}\n","export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n return d[1];\n}\n\nexport default function(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add.js\";\nimport tree_cover from \"./cover.js\";\nimport tree_data from \"./data.js\";\nimport tree_extent from \"./extent.js\";\nimport tree_find from \"./find.js\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove.js\";\nimport tree_root from \"./root.js\";\nimport tree_size from \"./size.js\";\nimport tree_visit from \"./visit.js\";\nimport tree_visitAfter from \"./visitAfter.js\";\nimport tree_x, {defaultX} from \"./x.js\";\nimport tree_y, {defaultY} from \"./y.js\";\n\nexport default function quadtree(nodes, x, y) {\n var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n this._x = x;\n this._y = y;\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(4)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 4; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction x(d) {\n return d.x + d.vx;\n}\n\nfunction y(d) {\n return d.y + d.vy;\n}\n\nexport default function(radius) {\n var nodes,\n radii,\n random,\n strength = 1,\n iterations = 1;\n\n if (typeof radius !== \"function\") radius = constant(radius == null ? 1 : +radius);\n\n function force() {\n var i, n = nodes.length,\n tree,\n node,\n xi,\n yi,\n ri,\n ri2;\n\n for (var k = 0; k < iterations; ++k) {\n tree = quadtree(nodes, x, y).visitAfter(prepare);\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n ri = radii[node.index], ri2 = ri * ri;\n xi = node.x + node.vx;\n yi = node.y + node.vy;\n tree.visit(apply);\n }\n }\n\n function apply(quad, x0, y0, x1, y1) {\n var data = quad.data, rj = quad.r, r = ri + rj;\n if (data) {\n if (data.index > node.index) {\n var x = xi - data.x - data.vx,\n y = yi - data.y - data.vy,\n l = x * x + y * y;\n if (l < r * r) {\n if (x === 0) x = jiggle(random), l += x * x;\n if (y === 0) y = jiggle(random), l += y * y;\n l = (r - (l = Math.sqrt(l))) / l * strength;\n node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\n node.vy += (y *= l) * r;\n data.vx -= x * (r = 1 - r);\n data.vy -= y * r;\n }\n }\n return;\n }\n return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\n }\n }\n\n function prepare(quad) {\n if (quad.data) return quad.r = radii[quad.data.index];\n for (var i = quad.r = 0; i < 4; ++i) {\n if (quad[i] && quad[i].r > quad.r) {\n quad.r = quad[i].r;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n radii = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);\n }\n\n force.initialize = function(_nodes, _random) {\n nodes = _nodes;\n random = _random;\n initialize();\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n };\n\n return force;\n}\n","export default function(x, y) {\n if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1;\n\n // If the quadtree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing quadrant boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else {\n var z = x1 - x0 || 1,\n node = this._root,\n parent,\n i;\n\n while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n i = (y < y0) << 1 | (x < x0);\n parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n switch (i) {\n case 0: x1 = x0 + z, y1 = y0 + z; break;\n case 1: x0 = x1 - z, y1 = y0 + z; break;\n case 2: x1 = x0 + z, y0 = y1 - z; break;\n case 3: x0 = x1 - z, y0 = y1 - z; break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n return this;\n}\n","export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n","export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","import Quad from \"./quad.js\";\n\nexport default function(x, y, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n x1,\n y1,\n x2,\n y2,\n x3 = this._x1,\n y3 = this._y1,\n quads = [],\n node = this._root,\n q,\n i;\n\n if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius;\n x3 = x + radius, y3 = y + radius;\n radius *= radius;\n }\n\n while (q = quads.pop()) {\n\n // Stop searching if this quadrant can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0) continue;\n\n // Bisect the current quadrant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2;\n\n quads.push(\n new Quad(node[3], xm, ym, x2, y2),\n new Quad(node[2], x1, ym, xm, y2),\n new Quad(node[1], xm, y1, x2, ym),\n new Quad(node[0], x1, y1, xm, ym)\n );\n\n // Visit the closest quadrant first.\n if (i = (y >= ym) << 1 | (x >= xm)) {\n q = quads[quads.length - 1];\n quads[quads.length - 1] = quads[quads.length - 1 - i];\n quads[quads.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n d2 = dx * dx + dy * dy;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d;\n x3 = x + d, y3 = y + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n","export default function(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1,\n x,\n y,\n xm,\n ym,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n && node === (parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n","export default function() {\n return this._root;\n}\n","export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n }\n }\n return this;\n}\n","import Quad from \"./quad.js\";\n\nexport default function(callback) {\n var quads = [], next = [], q;\n if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.x1, q.y1);\n }\n return this;\n}\n","import { forceSimulation, forceLink, forceCollide, forceX } from 'd3-force';\n\naddEventListener('message', (event) => {\n const { nodes, edges, config } = event.data;\n layout(nodes, edges, config);\n postMessage({ nodes, edges });\n});\n\n/**\n * Use d3 force layout to lay the nodes in a sensible way. This function modifies the nodes adding the x,y positions\n * and also fills in node references in edges instead of node ids.\n */\nexport function layout(nodes, edges, config) {\n // Start with some hardcoded positions so it starts laid out from left to right\n let { roots, secondLevelRoots } = initializePositions(nodes, edges);\n\n // There always seems to be one or more root nodes each with single edge and we want to have them static on the\n // left neatly in something like grid layout\n [...roots, ...secondLevelRoots].forEach((n, index) => {\n n.fx = n.x;\n });\n\n const simulation = forceSimulation(nodes)\n .force(\n 'link',\n forceLink(edges)\n .id((d) => d.id)\n .distance(config.linkDistance)\n .strength(config.linkStrength)\n )\n // to keep the left to right layout we add force that pulls all nodes to right but because roots are fixed it will\n // apply only to non root nodes\n .force('x', forceX(config.forceX).strength(config.forceXStrength))\n // Make sure nodes don't overlap\n .force('collide', forceCollide(config.forceCollide));\n\n // 300 ticks for the simulation are recommended but less would probably work too, most movement is done in first\n // few iterations and then all the forces gets smaller https://github.com/d3/d3-force#simulation_alphaDecay\n simulation.tick(config.tick);\n simulation.stop();\n\n // We do centering here instead of using centering force to keep this more stable\n centerNodes(nodes);\n}\n\n/**\n * This initializes positions of the graph by going from the root to it's children and laying it out in a grid from left\n * to right. This works only so, so because service map graphs can have cycles and children levels are not ordered in a\n * way to minimize the edge lengths. Nevertheless this seems to make the graph easier to nudge with the forces later on\n * than with the d3 default initial positioning. Also we can fix the root positions later on for a bit more neat\n * organisation.\n *\n * This function directly modifies the nodes given and only returns references to root nodes so they do not have to be\n * found again later on.\n *\n * How the spacing could look like approximately:\n * 0 - 0 - 0 - 0\n * \\- 0 - 0 |\n * \\- 0 -/\n * 0 - 0 -/\n */\nfunction initializePositions(nodes, edges) {\n // To prevent going in cycles\n const alreadyPositioned = {};\n\n const nodesMap = nodes.reduce((acc, node) => {\n acc[node.id] = node;\n return acc;\n }, {});\n const edgesMap = edges.reduce((acc, edge) => {\n const sourceId = edge.source;\n acc[sourceId] = [...(acc[sourceId] || []), edge];\n return acc;\n }, {});\n\n let roots = nodes.filter((n) => n.incoming === 0);\n\n // For things like service maps we assume there is some root (client) node but if there is none then selecting\n // any node as a starting point should work the same.\n if (!roots.length) {\n roots = [nodes[0]];\n }\n\n let secondLevelRoots = roots.reduce((acc, r) => {\n acc.push(...(edgesMap[r.id] ? edgesMap[r.id].map((e) => nodesMap[e.target]) : []));\n return acc;\n }, []);\n\n const rootYSpacing = 300;\n const nodeYSpacing = 200;\n const nodeXSpacing = 200;\n\n let rootY = 0;\n for (const root of roots) {\n let graphLevel = [root];\n let x = 0;\n while (graphLevel.length > 0) {\n const nextGraphLevel = [];\n let y = rootY;\n for (const node of graphLevel) {\n if (alreadyPositioned[node.id]) {\n continue;\n }\n // Initialize positions based on the spacing in the grid\n node.x = x;\n node.y = y;\n alreadyPositioned[node.id] = true;\n\n // Move to next Y position for next node\n y += nodeYSpacing;\n if (edgesMap[node.id]) {\n nextGraphLevel.push(...edgesMap[node.id].map((edge) => nodesMap[edge.target]));\n }\n }\n\n graphLevel = nextGraphLevel;\n // Move to next X position for next level\n x += nodeXSpacing;\n // Reset Y back to baseline for this root\n y = rootY;\n }\n rootY += rootYSpacing;\n }\n return { roots, secondLevelRoots };\n}\n\n/**\n * Makes sure that the center of the graph based on it's bound is in 0, 0 coordinates.\n * Modifies the nodes directly.\n */\nfunction centerNodes(nodes) {\n const bounds = graphBounds(nodes);\n for (let node of nodes) {\n node.x = node.x - bounds.center.x;\n node.y = node.y - bounds.center.y;\n }\n}\n\n/**\n * Get bounds of the graph meaning the extent of the nodes in all directions.\n */\nfunction graphBounds(nodes) {\n if (nodes.length === 0) {\n return { top: 0, right: 0, bottom: 0, left: 0, center: { x: 0, y: 0 } };\n }\n\n const bounds = nodes.reduce(\n (acc, node) => {\n if (node.x > acc.right) {\n acc.right = node.x;\n }\n if (node.x < acc.left) {\n acc.left = node.x;\n }\n if (node.y > acc.bottom) {\n acc.bottom = node.y;\n }\n if (node.y < acc.top) {\n acc.top = node.y;\n }\n return acc;\n },\n { top: Infinity, right: -Infinity, bottom: -Infinity, left: Infinity }\n );\n\n const y = bounds.top + (bounds.bottom - bounds.top) / 2;\n const x = bounds.left + (bounds.right - bounds.left) / 2;\n\n return {\n ...bounds,\n center: {\n x,\n y,\n },\n };\n}\n","import constant from \"./constant.js\";\n\nexport default function(x) {\n var strength = constant(0.1),\n nodes,\n strengths,\n xz;\n\n if (typeof x !== \"function\") x = constant(x == null ? 0 : +x);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n xz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : x;\n };\n\n return force;\n}\n"],"names":["noop","value","dispatch","t","i","n","arguments","length","_","test","Error","Dispatch","this","parseTypenames","typenames","types","trim","split","map","name","indexOf","slice","hasOwnProperty","type","get","c","set","callback","concat","push","prototype","constructor","on","typename","T","copy","call","that","args","Array","apply","taskHead","taskTail","timeout","interval","clockLast","clockNow","clockSkew","clock","performance","now","Date","setFrame","window","requestAnimationFrame","bind","f","setTimeout","clearNow","Timer","_call","_time","_next","timer","delay","time","restart","wake","e","timerFlush","t0","t2","t1","Infinity","sleep","nap","poke","clearTimeout","clearInterval","setInterval","TypeError","stop","m","initialAngle","Math","PI","sqrt","nodes","simulation","alpha","alphaMin","alphaDecay","pow","alphaTarget","velocityDecay","forces","Map","stepper","step","event","random","s","lcg","tick","iterations","node","undefined","k","forEach","force","fx","x","vx","fy","y","vy","initializeNodes","index","isNaN","radius","angle","cos","sin","initializeForce","initialize","randomSource","delete","find","dx","dy","d2","closest","d","nodeById","nodeId","tree","parent","xm","ym","xp","yp","right","bottom","j","_root","leaf","data","x0","_x0","y0","_y0","x1","_x1","y1","_y1","_x","_y","next","defaultX","defaultY","quadtree","Quadtree","NaN","addAll","leaf_copy","treeProto","child","source","target","pop","add","cover","xz","yz","floor","z","visit","extent","x2","y2","q","x3","y3","quads","remove","retainer","previous","removeAll","root","size","visitAfter","addEventListener","edges","config","roots","secondLevelRoots","alreadyPositioned","nodesMap","reduce","acc","id","edgesMap","edge","sourceId","filter","incoming","r","rootYSpacing","nodeYSpacing","nodeXSpacing","rootY","graphLevel","nextGraphLevel","initializePositions","links","strengths","distances","count","bias","strength","link","min","distance","constant","l","b","jiggle","initializeStrength","initializeDistance","_nodes","_random","linkDistance","linkStrength","forceX","forceXStrength","radii","xi","yi","ri","ri2","prepare","quad","rj","forceCollide","bounds","top","left","center","graphBounds","centerNodes","layout","postMessage"],"sourceRoot":""}
|