Socket
Socket
Sign inDemoInstall

@dagrejs/dagre

Package Overview
Dependencies
Maintainers
3
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@dagrejs/dagre - npm Package Compare versions

Comparing version 1.0.2 to 1.0.4

9

index.d.ts

@@ -16,3 +16,3 @@ // Type definitions for dagre 1.0.1

isDirected(): boolean;
isMultiGraph(): boolean;
isMultigraph(): boolean;
setGraph(label: GraphLabel): Graph<T>;

@@ -72,2 +72,9 @@

export interface Label {
label?: string;
width?: number;
height?: number;
minRank?: number;
maxRank?: number;
borderLeft?: string[];
borderRight?: string[];
[key: string]: any;

@@ -74,0 +81,0 @@ }

26

lib/acyclic.js
"use strict";
var greedyFAS = require("./greedy-fas");
var uniqueId = require("./util").uniqueId;
let greedyFAS = require("./greedy-fas");
let uniqueId = require("./util").uniqueId;

@@ -12,7 +12,7 @@ module.exports = {

function run(g) {
var fas = (g.graph().acyclicer === "greedy"
let fas = (g.graph().acyclicer === "greedy"
? greedyFAS(g, weightFn(g))
: dfsFAS(g));
fas.forEach(function(e) {
var label = g.edge(e);
fas.forEach(e => {
let label = g.edge(e);
g.removeEdge(e);

@@ -25,3 +25,3 @@ label.forwardName = e.name;

function weightFn(g) {
return function(e) {
return e => {
return g.edge(e).weight;

@@ -33,5 +33,5 @@ };

function dfsFAS(g) {
var fas = [];
var stack = {};
var visited = {};
let fas = [];
let stack = {};
let visited = {};

@@ -44,3 +44,3 @@ function dfs(v) {

stack[v] = true;
g.outEdges(v).forEach(function(e) {
g.outEdges(v).forEach(e => {
if (stack.hasOwnProperty(e.w)) {

@@ -60,8 +60,8 @@ fas.push(e);

function undo(g) {
g.edges().forEach(function(e) {
var label = g.edge(e);
g.edges().forEach(e => {
let label = g.edge(e);
if (label.reversed) {
g.removeEdge(e);
var forwardName = label.forwardName;
let forwardName = label.forwardName;
delete label.reversed;

@@ -68,0 +68,0 @@ delete label.forwardName;

@@ -1,2 +0,2 @@

var util = require("./util");
let util = require("./util");

@@ -7,4 +7,4 @@ module.exports = addBorderSegments;

function dfs(v) {
var children = g.children(v);
var node = g.node(v);
let children = g.children(v);
let node = g.node(v);
if (children.length) {

@@ -17,3 +17,3 @@ children.forEach(dfs);

node.borderRight = [];
for (var rank = node.minRank, maxRank = node.maxRank + 1;
for (let rank = node.minRank, maxRank = node.maxRank + 1;
rank < maxRank;

@@ -31,5 +31,5 @@ ++rank) {

function addBorderNode(g, prop, prefix, sg, sgNode, rank) {
var label = { width: 0, height: 0, rank: rank, borderType: prop };
var prev = sgNode[prop][rank - 1];
var curr = util.addDummyNode(g, "border", label, prefix);
let label = { width: 0, height: 0, rank: rank, borderType: prop };
let prev = sgNode[prop][rank - 1];
let curr = util.addDummyNode(g, "border", label, prefix);
sgNode[prop][rank] = curr;

@@ -36,0 +36,0 @@ g.setParent(curr, sg);

@@ -9,3 +9,3 @@ "use strict";

function adjust(g) {
var rankDir = g.graph().rankdir.toLowerCase();
let rankDir = g.graph().rankdir.toLowerCase();
if (rankDir === "lr" || rankDir === "rl") {

@@ -17,3 +17,3 @@ swapWidthHeight(g);

function undo(g) {
var rankDir = g.graph().rankdir.toLowerCase();
let rankDir = g.graph().rankdir.toLowerCase();
if (rankDir === "bt" || rankDir === "rl") {

@@ -35,3 +35,3 @@ reverseY(g);

function swapWidthHeightOne(attrs) {
var w = attrs.width;
let w = attrs.width;
attrs.width = attrs.height;

@@ -44,4 +44,4 @@ attrs.height = w;

g.edges().forEach(function(e) {
var edge = g.edge(e);
g.edges().forEach(e => {
let edge = g.edge(e);
edge.points.forEach(reverseYOne);

@@ -61,4 +61,4 @@ if (edge.hasOwnProperty("y")) {

g.edges().forEach(function(e) {
var edge = g.edge(e);
g.edges().forEach(e => {
let edge = g.edge(e);
edge.points.forEach(swapXYOne);

@@ -72,5 +72,5 @@ if (edge.hasOwnProperty("x")) {

function swapXYOne(attrs) {
var x = attrs.x;
let x = attrs.x;
attrs.x = attrs.y;
attrs.y = x;
}

@@ -6,40 +6,40 @@ /*

module.exports = List;
class List {
constructor() {
let sentinel = {};
sentinel._next = sentinel._prev = sentinel;
this._sentinel = sentinel;
}
function List() {
var sentinel = {};
sentinel._next = sentinel._prev = sentinel;
this._sentinel = sentinel;
}
List.prototype.dequeue = function() {
var sentinel = this._sentinel;
var entry = sentinel._prev;
if (entry !== sentinel) {
unlink(entry);
return entry;
dequeue() {
let sentinel = this._sentinel;
let entry = sentinel._prev;
if (entry !== sentinel) {
unlink(entry);
return entry;
}
}
};
List.prototype.enqueue = function(entry) {
var sentinel = this._sentinel;
if (entry._prev && entry._next) {
unlink(entry);
enqueue(entry) {
let sentinel = this._sentinel;
if (entry._prev && entry._next) {
unlink(entry);
}
entry._next = sentinel._next;
sentinel._next._prev = entry;
sentinel._next = entry;
entry._prev = sentinel;
}
entry._next = sentinel._next;
sentinel._next._prev = entry;
sentinel._next = entry;
entry._prev = sentinel;
};
List.prototype.toString = function() {
var strs = [];
var sentinel = this._sentinel;
var curr = sentinel._prev;
while (curr !== sentinel) {
strs.push(JSON.stringify(curr, filterOutLinks));
curr = curr._prev;
toString() {
let strs = [];
let sentinel = this._sentinel;
let curr = sentinel._prev;
while (curr !== sentinel) {
strs.push(JSON.stringify(curr, filterOutLinks));
curr = curr._prev;
}
return "[" + strs.join(", ") + "]";
}
return "[" + strs.join(", ") + "]";
};
}

@@ -58,1 +58,3 @@ function unlink(entry) {

}
module.exports = List;

@@ -1,3 +0,3 @@

var util = require("./util");
var Graph = require("@dagrejs/graphlib").Graph;
let util = require("./util");
let Graph = require("@dagrejs/graphlib").Graph;

@@ -10,7 +10,7 @@ module.exports = {

function debugOrdering(g) {
var layerMatrix = util.buildLayerMatrix(g);
let layerMatrix = util.buildLayerMatrix(g);
var h = new Graph({ compound: true, multigraph: true }).setGraph({});
let h = new Graph({ compound: true, multigraph: true }).setGraph({});
g.nodes().forEach(function(v) {
g.nodes().forEach(v => {
h.setNode(v, { label: v });

@@ -20,10 +20,8 @@ h.setParent(v, "layer" + g.node(v).rank);

g.edges().forEach(function(e) {
h.setEdge(e.v, e.w, {}, e.name);
});
g.edges().forEach(e => h.setEdge(e.v, e.w, {}, e.name));
layerMatrix.forEach(function(layer, i) {
var layerV = "layer" + i;
layerMatrix.forEach((layer, i) => {
let layerV = "layer" + i;
h.setNode(layerV, { rank: "same" });
layer.reduce(function(u, v) {
layer.reduce((u, v) => {
h.setEdge(u, v, { style: "invis" });

@@ -30,0 +28,0 @@ return v;

@@ -1,3 +0,3 @@

var Graph = require("@dagrejs/graphlib").Graph;
var List = require("./data/list");
let Graph = require("@dagrejs/graphlib").Graph;
let List = require("./data/list");

@@ -13,3 +13,3 @@ /*

var DEFAULT_WEIGHT_FN = () => 1;
let DEFAULT_WEIGHT_FN = () => 1;

@@ -20,4 +20,4 @@ function greedyFAS(g, weightFn) {

}
var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN);
var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx);
let state = buildState(g, weightFn || DEFAULT_WEIGHT_FN);
let results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx);

@@ -29,7 +29,7 @@ // Expand multi-edges

function doGreedyFAS(g, buckets, zeroIdx) {
var results = [];
var sources = buckets[buckets.length - 1];
var sinks = buckets[0];
let results = [];
let sources = buckets[buckets.length - 1];
let sinks = buckets[0];
var entry;
let entry;
while (g.nodeCount()) {

@@ -39,3 +39,3 @@ while ((entry = sinks.dequeue())) { removeNode(g, buckets, zeroIdx, entry); }

if (g.nodeCount()) {
for (var i = buckets.length - 2; i > 0; --i) {
for (let i = buckets.length - 2; i > 0; --i) {
entry = buckets[i].dequeue();

@@ -54,7 +54,7 @@ if (entry) {

function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) {
var results = collectPredecessors ? [] : undefined;
let results = collectPredecessors ? [] : undefined;
g.inEdges(entry.v).forEach(function(edge) {
var weight = g.edge(edge);
var uEntry = g.node(edge.v);
g.inEdges(entry.v).forEach(edge => {
let weight = g.edge(edge);
let uEntry = g.node(edge.v);

@@ -69,6 +69,6 @@ if (collectPredecessors) {

g.outEdges(entry.v).forEach(function(edge) {
var weight = g.edge(edge);
var w = edge.w;
var wEntry = g.node(w);
g.outEdges(entry.v).forEach(edge => {
let weight = g.edge(edge);
let w = edge.w;
let wEntry = g.node(w);
wEntry["in"] -= weight;

@@ -84,7 +84,7 @@ assignBucket(buckets, zeroIdx, wEntry);

function buildState(g, weightFn) {
var fasGraph = new Graph();
var maxIn = 0;
var maxOut = 0;
let fasGraph = new Graph();
let maxIn = 0;
let maxOut = 0;
g.nodes().forEach(function(v) {
g.nodes().forEach(v => {
fasGraph.setNode(v, { v: v, "in": 0, out: 0 });

@@ -95,6 +95,6 @@ });

// into a single edge for the fasGraph.
g.edges().forEach(function(e) {
var prevWeight = fasGraph.edge(e.v, e.w) || 0;
var weight = weightFn(e);
var edgeWeight = prevWeight + weight;
g.edges().forEach(e => {
let prevWeight = fasGraph.edge(e.v, e.w) || 0;
let weight = weightFn(e);
let edgeWeight = prevWeight + weight;
fasGraph.setEdge(e.v, e.w, edgeWeight);

@@ -105,6 +105,6 @@ maxOut = Math.max(maxOut, fasGraph.node(e.v).out += weight);

var buckets = range(maxOut + maxIn + 3).map(() => new List());
var zeroIdx = maxIn + 1;
let buckets = range(maxOut + maxIn + 3).map(() => new List());
let zeroIdx = maxIn + 1;
fasGraph.nodes().forEach(function(v) {
fasGraph.nodes().forEach(v => {
assignBucket(buckets, zeroIdx, fasGraph.node(v));

@@ -111,0 +111,0 @@ });

"use strict";
var acyclic = require("./acyclic");
var normalize = require("./normalize");
var rank = require("./rank");
var normalizeRanks = require("./util").normalizeRanks;
var parentDummyChains = require("./parent-dummy-chains");
var removeEmptyRanks = require("./util").removeEmptyRanks;
var nestingGraph = require("./nesting-graph");
var addBorderSegments = require("./add-border-segments");
var coordinateSystem = require("./coordinate-system");
var order = require("./order");
var position = require("./position");
var util = require("./util");
var Graph = require("@dagrejs/graphlib").Graph;
let acyclic = require("./acyclic");
let normalize = require("./normalize");
let rank = require("./rank");
let normalizeRanks = require("./util").normalizeRanks;
let parentDummyChains = require("./parent-dummy-chains");
let removeEmptyRanks = require("./util").removeEmptyRanks;
let nestingGraph = require("./nesting-graph");
let addBorderSegments = require("./add-border-segments");
let coordinateSystem = require("./coordinate-system");
let order = require("./order");
let position = require("./position");
let util = require("./util");
let Graph = require("@dagrejs/graphlib").Graph;

@@ -20,8 +20,8 @@ module.exports = layout;

function layout(g, opts) {
var time = opts && opts.debugTiming ? util.time : util.notime;
time("layout", function() {
var layoutGraph =
time(" buildLayoutGraph", function() { return buildLayoutGraph(g); });
time(" runLayout", function() { runLayout(layoutGraph, time); });
time(" updateInputGraph", function() { updateInputGraph(g, layoutGraph); });
let time = opts && opts.debugTiming ? util.time : util.notime;
time("layout", () => {
let layoutGraph =
time(" buildLayoutGraph", () => buildLayoutGraph(g));
time(" runLayout", () => runLayout(layoutGraph, time));
time(" updateInputGraph", () => updateInputGraph(g, layoutGraph));
});

@@ -31,29 +31,29 @@ }

function runLayout(g, time) {
time(" makeSpaceForEdgeLabels", function() { makeSpaceForEdgeLabels(g); });
time(" removeSelfEdges", function() { removeSelfEdges(g); });
time(" acyclic", function() { acyclic.run(g); });
time(" nestingGraph.run", function() { nestingGraph.run(g); });
time(" rank", function() { rank(util.asNonCompoundGraph(g)); });
time(" injectEdgeLabelProxies", function() { injectEdgeLabelProxies(g); });
time(" removeEmptyRanks", function() { removeEmptyRanks(g); });
time(" nestingGraph.cleanup", function() { nestingGraph.cleanup(g); });
time(" normalizeRanks", function() { normalizeRanks(g); });
time(" assignRankMinMax", function() { assignRankMinMax(g); });
time(" removeEdgeLabelProxies", function() { removeEdgeLabelProxies(g); });
time(" normalize.run", function() { normalize.run(g); });
time(" parentDummyChains", function() { parentDummyChains(g); });
time(" addBorderSegments", function() { addBorderSegments(g); });
time(" order", function() { order(g); });
time(" insertSelfEdges", function() { insertSelfEdges(g); });
time(" adjustCoordinateSystem", function() { coordinateSystem.adjust(g); });
time(" position", function() { position(g); });
time(" positionSelfEdges", function() { positionSelfEdges(g); });
time(" removeBorderNodes", function() { removeBorderNodes(g); });
time(" normalize.undo", function() { normalize.undo(g); });
time(" fixupEdgeLabelCoords", function() { fixupEdgeLabelCoords(g); });
time(" undoCoordinateSystem", function() { coordinateSystem.undo(g); });
time(" translateGraph", function() { translateGraph(g); });
time(" assignNodeIntersects", function() { assignNodeIntersects(g); });
time(" reversePoints", function() { reversePointsForReversedEdges(g); });
time(" acyclic.undo", function() { acyclic.undo(g); });
time(" makeSpaceForEdgeLabels", () => makeSpaceForEdgeLabels(g));
time(" removeSelfEdges", () => removeSelfEdges(g));
time(" acyclic", () => acyclic.run(g));
time(" nestingGraph.run", () => nestingGraph.run(g));
time(" rank", () => rank(util.asNonCompoundGraph(g)));
time(" injectEdgeLabelProxies", () => injectEdgeLabelProxies(g));
time(" removeEmptyRanks", () => removeEmptyRanks(g));
time(" nestingGraph.cleanup", () => nestingGraph.cleanup(g));
time(" normalizeRanks", () => normalizeRanks(g));
time(" assignRankMinMax", () => assignRankMinMax(g));
time(" removeEdgeLabelProxies", () => removeEdgeLabelProxies(g));
time(" normalize.run", () => normalize.run(g));
time(" parentDummyChains", () => parentDummyChains(g));
time(" addBorderSegments", () => addBorderSegments(g));
time(" order", () => order(g));
time(" insertSelfEdges", () => insertSelfEdges(g));
time(" adjustCoordinateSystem", () => coordinateSystem.adjust(g));
time(" position", () => position(g));
time(" positionSelfEdges", () => positionSelfEdges(g));
time(" removeBorderNodes", () => removeBorderNodes(g));
time(" normalize.undo", () => normalize.undo(g));
time(" fixupEdgeLabelCoords", () => fixupEdgeLabelCoords(g));
time(" undoCoordinateSystem", () => coordinateSystem.undo(g));
time(" translateGraph", () => translateGraph(g));
time(" assignNodeIntersects", () => assignNodeIntersects(g));
time(" reversePoints", () => reversePointsForReversedEdges(g));
time(" acyclic.undo", () => acyclic.undo(g));
}

@@ -69,4 +69,4 @@

inputGraph.nodes().forEach(v => {
var inputLabel = inputGraph.node(v);
var layoutLabel = layoutGraph.node(v);
let inputLabel = inputGraph.node(v);
let layoutLabel = layoutGraph.node(v);

@@ -86,4 +86,4 @@ if (inputLabel) {

inputGraph.edges().forEach(e => {
var inputLabel = inputGraph.edge(e);
var layoutLabel = layoutGraph.edge(e);
let inputLabel = inputGraph.edge(e);
let layoutLabel = layoutGraph.edge(e);

@@ -101,13 +101,13 @@ inputLabel.points = layoutLabel.points;

var graphNumAttrs = ["nodesep", "edgesep", "ranksep", "marginx", "marginy"];
var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: "tb" };
var graphAttrs = ["acyclicer", "ranker", "rankdir", "align"];
var nodeNumAttrs = ["width", "height"];
var nodeDefaults = { width: 0, height: 0 };
var edgeNumAttrs = ["minlen", "weight", "width", "height", "labeloffset"];
var edgeDefaults = {
let graphNumAttrs = ["nodesep", "edgesep", "ranksep", "marginx", "marginy"];
let graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: "tb" };
let graphAttrs = ["acyclicer", "ranker", "rankdir", "align"];
let nodeNumAttrs = ["width", "height"];
let nodeDefaults = { width: 0, height: 0 };
let edgeNumAttrs = ["minlen", "weight", "width", "height", "labeloffset"];
let edgeDefaults = {
minlen: 1, weight: 1, width: 0, height: 0,
labeloffset: 10, labelpos: "r"
};
var edgeAttrs = ["labelpos"];
let edgeAttrs = ["labelpos"];

@@ -121,4 +121,4 @@ /*

function buildLayoutGraph(inputGraph) {
var g = new Graph({ multigraph: true, compound: true });
var graph = canonicalize(inputGraph.graph());
let g = new Graph({ multigraph: true, compound: true });
let graph = canonicalize(inputGraph.graph());

@@ -131,3 +131,3 @@ g.setGraph(Object.assign({},

inputGraph.nodes().forEach(v => {
var node = canonicalize(inputGraph.node(v));
let node = canonicalize(inputGraph.node(v));
const newNode = selectNumberAttrs(node, nodeNumAttrs);

@@ -145,3 +145,3 @@ Object.keys(nodeDefaults).forEach(k => {

inputGraph.edges().forEach(e => {
var edge = canonicalize(inputGraph.edge(e));
let edge = canonicalize(inputGraph.edge(e));
g.setEdge(e, Object.assign({},

@@ -165,6 +165,6 @@ edgeDefaults,

function makeSpaceForEdgeLabels(g) {
var graph = g.graph();
let graph = g.graph();
graph.ranksep /= 2;
g.edges().forEach(e => {
var edge = g.edge(e);
let edge = g.edge(e);
edge.minlen *= 2;

@@ -189,7 +189,7 @@ if (edge.labelpos.toLowerCase() !== "c") {

g.edges().forEach(e => {
var edge = g.edge(e);
let edge = g.edge(e);
if (edge.width && edge.height) {
var v = g.node(e.v);
var w = g.node(e.w);
var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e };
let v = g.node(e.v);
let w = g.node(e.w);
let label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e };
util.addDummyNode(g, "edge-proxy", label, "_ep");

@@ -201,5 +201,5 @@ }

function assignRankMinMax(g) {
var maxRank = 0;
let maxRank = 0;
g.nodes().forEach(v => {
var node = g.node(v);
let node = g.node(v);
if (node.borderTop) {

@@ -216,3 +216,3 @@ node.minRank = g.node(node.borderTop).rank;

g.nodes().forEach(v => {
var node = g.node(v);
let node = g.node(v);
if (node.dummy === "edge-proxy") {

@@ -226,15 +226,15 @@ g.edge(node.e).labelRank = node.rank;

function translateGraph(g) {
var minX = Number.POSITIVE_INFINITY;
var maxX = 0;
var minY = Number.POSITIVE_INFINITY;
var maxY = 0;
var graphLabel = g.graph();
var marginX = graphLabel.marginx || 0;
var marginY = graphLabel.marginy || 0;
let minX = Number.POSITIVE_INFINITY;
let maxX = 0;
let minY = Number.POSITIVE_INFINITY;
let maxY = 0;
let graphLabel = g.graph();
let marginX = graphLabel.marginx || 0;
let marginY = graphLabel.marginy || 0;
function getExtremes(attrs) {
var x = attrs.x;
var y = attrs.y;
var w = attrs.width;
var h = attrs.height;
let x = attrs.x;
let y = attrs.y;
let w = attrs.width;
let h = attrs.height;
minX = Math.min(minX, x - w / 2);

@@ -248,3 +248,3 @@ maxX = Math.max(maxX, x + w / 2);

g.edges().forEach(e => {
var edge = g.edge(e);
let edge = g.edge(e);
if (edge.hasOwnProperty("x")) {

@@ -259,3 +259,3 @@ getExtremes(edge);

g.nodes().forEach(v => {
var node = g.node(v);
let node = g.node(v);
node.x -= minX;

@@ -266,3 +266,3 @@ node.y -= minY;

g.edges().forEach(e => {
var edge = g.edge(e);
let edge = g.edge(e);
edge.points.forEach(p => {

@@ -282,6 +282,6 @@ p.x -= minX;

g.edges().forEach(e => {
var edge = g.edge(e);
var nodeV = g.node(e.v);
var nodeW = g.node(e.w);
var p1, p2;
let edge = g.edge(e);
let nodeV = g.node(e.v);
let nodeW = g.node(e.w);
let p1, p2;
if (!edge.points) {

@@ -302,3 +302,3 @@ edge.points = [];

g.edges().forEach(e => {
var edge = g.edge(e);
let edge = g.edge(e);
if (edge.hasOwnProperty("x")) {

@@ -318,3 +318,3 @@ if (edge.labelpos === "l" || edge.labelpos === "r") {

g.edges().forEach(e => {
var edge = g.edge(e);
let edge = g.edge(e);
if (edge.reversed) {

@@ -329,7 +329,7 @@ edge.points.reverse();

if (g.children(v).length) {
var node = g.node(v);
var t = g.node(node.borderTop);
var b = g.node(node.borderBottom);
var l = g.node(node.borderLeft[node.borderLeft.length - 1]);
var r = g.node(node.borderRight[node.borderRight.length - 1]);
let node = g.node(v);
let t = g.node(node.borderTop);
let b = g.node(node.borderBottom);
let l = g.node(node.borderLeft[node.borderLeft.length - 1]);
let r = g.node(node.borderRight[node.borderRight.length - 1]);

@@ -336,0 +336,0 @@ node.width = Math.abs(r.x - l.x);

@@ -1,6 +0,6 @@

var util = require("./util");
let util = require("./util");
module.exports = {
run: run,
cleanup: cleanup
run,
cleanup,
};

@@ -11,3 +11,3 @@

* adds appropriate edges to ensure that all cluster nodes are placed between
* these boundries, and ensures that the graph is connected.
* these boundaries, and ensures that the graph is connected.
*

@@ -33,6 +33,6 @@ * In addition we ensure, through the use of the minlen property, that nodes

function run(g) {
var root = util.addDummyNode(g, "root", {}, "_root");
var depths = treeDepths(g);
var height = Math.max(...Object.values(depths)) - 1; // Note: depths is an Object not an array
var nodeSep = 2 * height + 1;
let root = util.addDummyNode(g, "root", {}, "_root");
let depths = treeDepths(g);
let height = Math.max(...Object.values(depths)) - 1; // Note: depths is an Object not an array
let nodeSep = 2 * height + 1;

@@ -45,8 +45,6 @@ g.graph().nestingRoot = root;

// Calculate a weight that is sufficient to keep subgraphs vertically compact
var weight = sumWeights(g) + 1;
let weight = sumWeights(g) + 1;
// Create border nodes and link them up
g.children().forEach(function(child) {
dfs(g, root, nodeSep, weight, height, depths, child);
});
g.children().forEach(child => dfs(g, root, nodeSep, weight, height, depths, child));

@@ -59,3 +57,3 @@ // Save the multiplier for node layers for later removal of empty border

function dfs(g, root, nodeSep, weight, height, depths, v) {
var children = g.children(v);
let children = g.children(v);
if (!children.length) {

@@ -68,5 +66,5 @@ if (v !== root) {

var top = util.addBorderNode(g, "_bt");
var bottom = util.addBorderNode(g, "_bb");
var label = g.node(v);
let top = util.addBorderNode(g, "_bt");
let bottom = util.addBorderNode(g, "_bb");
let label = g.node(v);

@@ -78,10 +76,10 @@ g.setParent(top, v);

children.forEach(function(child) {
children.forEach(child => {
dfs(g, root, nodeSep, weight, height, depths, child);
var childNode = g.node(child);
var childTop = childNode.borderTop ? childNode.borderTop : child;
var childBottom = childNode.borderBottom ? childNode.borderBottom : child;
var thisWeight = childNode.borderTop ? weight : 2 * weight;
var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1;
let childNode = g.node(child);
let childTop = childNode.borderTop ? childNode.borderTop : child;
let childBottom = childNode.borderBottom ? childNode.borderBottom : child;
let thisWeight = childNode.borderTop ? weight : 2 * weight;
let minlen = childTop !== childBottom ? 1 : height - depths[v] + 1;

@@ -88,0 +86,0 @@ g.setEdge(top, childTop, {

"use strict";
var util = require("./util");
let util = require("./util");

@@ -32,9 +32,9 @@ module.exports = {

function normalizeEdge(g, e) {
var v = e.v;
var vRank = g.node(v).rank;
var w = e.w;
var wRank = g.node(w).rank;
var name = e.name;
var edgeLabel = g.edge(e);
var labelRank = edgeLabel.labelRank;
let v = e.v;
let vRank = g.node(v).rank;
let w = e.w;
let wRank = g.node(w).rank;
let name = e.name;
let edgeLabel = g.edge(e);
let labelRank = edgeLabel.labelRank;

@@ -45,3 +45,3 @@ if (wRank === vRank + 1) return;

var dummy, attrs, i;
let dummy, attrs, i;
for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) {

@@ -72,6 +72,6 @@ edgeLabel.points = [];

function undo(g) {
g.graph().dummyChains.forEach(function(v) {
var node = g.node(v);
var origLabel = node.edgeLabel;
var w;
g.graph().dummyChains.forEach(v => {
let node = g.node(v);
let origLabel = node.edgeLabel;
let w;
g.setEdge(node.edgeObj, origLabel);

@@ -78,0 +78,0 @@ while (node.dummy) {

module.exports = addSubgraphConstraints;
function addSubgraphConstraints(g, cg, vs) {
var prev = {},
let prev = {},
rootPrev;
vs.forEach(function(v) {
var child = g.parent(v),
vs.forEach(v => {
let child = g.parent(v),
parent,

@@ -10,0 +10,0 @@ prevChild;

@@ -5,8 +5,8 @@ module.exports = barycenter;

return movable.map(v => {
var inV = g.inEdges(v);
let inV = g.inEdges(v);
if (!inV.length) {
return { v: v };
} else {
var result = inV.reduce((acc, e) => {
var edge = g.edge(e),
let result = inV.reduce((acc, e) => {
let edge = g.edge(e),
nodeU = g.node(e.v);

@@ -13,0 +13,0 @@ return {

@@ -1,3 +0,3 @@

var Graph = require("@dagrejs/graphlib").Graph;
var util = require("../util");
let Graph = require("@dagrejs/graphlib").Graph;
let util = require("../util");

@@ -37,8 +37,8 @@ module.exports = buildLayerGraph;

function buildLayerGraph(g, rank, relationship) {
var root = createRootNode(g),
let root = createRootNode(g),
result = new Graph({ compound: true }).setGraph({ root: root })
.setDefaultNodeLabel(function(v) { return g.node(v); });
.setDefaultNodeLabel(v => g.node(v));
g.nodes().forEach(function(v) {
var node = g.node(v),
g.nodes().forEach(v => {
let node = g.node(v),
parent = g.parent(v);

@@ -51,4 +51,4 @@

// This assumes we have only short edges!
g[relationship](v).forEach(function(e) {
var u = e.v === v ? e.w : e.v,
g[relationship](v).forEach(e => {
let u = e.v === v ? e.w : e.v,
edge = result.edge(u, v),

@@ -55,0 +55,0 @@ weight = edge !== undefined ? edge.weight : 0;

"use strict";
var zipObject = require("../util").zipObject;
let zipObject = require("../util").zipObject;

@@ -24,4 +24,4 @@ module.exports = crossCount;

function crossCount(g, layering) {
var cc = 0;
for (var i = 1; i < layering.length; ++i) {
let cc = 0;
for (let i = 1; i < layering.length; ++i) {
cc += twoLayerCrossCount(g, layering[i-1], layering[i]);

@@ -36,4 +36,4 @@ }

// their head in the south layer.
var southPos = zipObject(southLayer, southLayer.map((v, i) => i));
var southEntries = northLayer.flatMap(v => {
let southPos = zipObject(southLayer, southLayer.map((v, i) => i));
let southEntries = northLayer.flatMap(v => {
return g.outEdges(v).map(e => {

@@ -45,14 +45,14 @@ return { pos: southPos[e.w], weight: g.edge(e).weight };

// Build the accumulator tree
var firstIndex = 1;
let firstIndex = 1;
while (firstIndex < southLayer.length) firstIndex <<= 1;
var treeSize = 2 * firstIndex - 1;
let treeSize = 2 * firstIndex - 1;
firstIndex -= 1;
var tree = new Array(treeSize).fill(0);
let tree = new Array(treeSize).fill(0);
// Calculate the weighted crossings
var cc = 0;
let cc = 0;
southEntries.forEach(entry => {
var index = entry.pos + firstIndex;
let index = entry.pos + firstIndex;
tree[index] += entry.weight;
var weightSum = 0;
let weightSum = 0;
while (index > 0) {

@@ -59,0 +59,0 @@ if (index % 2) {

"use strict";
var initOrder = require("./init-order");
var crossCount = require("./cross-count");
var sortSubgraph = require("./sort-subgraph");
var buildLayerGraph = require("./build-layer-graph");
var addSubgraphConstraints = require("./add-subgraph-constraints");
var Graph = require("@dagrejs/graphlib").Graph;
var util = require("../util");
let initOrder = require("./init-order");
let crossCount = require("./cross-count");
let sortSubgraph = require("./sort-subgraph");
let buildLayerGraph = require("./build-layer-graph");
let addSubgraphConstraints = require("./add-subgraph-constraints");
let Graph = require("@dagrejs/graphlib").Graph;
let util = require("../util");

@@ -29,17 +29,17 @@ module.exports = order;

function order(g) {
var maxRank = util.maxRank(g),
let maxRank = util.maxRank(g),
downLayerGraphs = buildLayerGraphs(g, util.range(1, maxRank + 1), "inEdges"),
upLayerGraphs = buildLayerGraphs(g, util.range(maxRank - 1, -1, -1), "outEdges");
var layering = initOrder(g);
let layering = initOrder(g);
assignOrder(g, layering);
var bestCC = Number.POSITIVE_INFINITY,
let bestCC = Number.POSITIVE_INFINITY,
best;
for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) {
for (let i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) {
sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2);
layering = util.buildLayerMatrix(g);
var cc = crossCount(g, layering);
let cc = crossCount(g, layering);
if (cc < bestCC) {

@@ -62,6 +62,6 @@ lastBest = 0;

function sweepLayerGraphs(layerGraphs, biasRight) {
var cg = new Graph();
let cg = new Graph();
layerGraphs.forEach(function(lg) {
var root = lg.graph().root;
var sorted = sortSubgraph(lg, root, cg, biasRight);
let root = lg.graph().root;
let sorted = sortSubgraph(lg, root, cg, biasRight);
sorted.vs.forEach((v, i) => lg.node(v).order = i);

@@ -68,0 +68,0 @@ addSubgraphConstraints(lg, cg, sorted.vs);

"use strict";
var util = require("../util");
let util = require("../util");

@@ -19,6 +19,6 @@ module.exports = initOrder;

function initOrder(g) {
var visited = {};
var simpleNodes = g.nodes().filter(v => !g.children(v).length);
var maxRank = Math.max(...simpleNodes.map(v => g.node(v).rank));
var layers = util.range(maxRank + 1).map(() => []);
let visited = {};
let simpleNodes = g.nodes().filter(v => !g.children(v).length);
let maxRank = Math.max(...simpleNodes.map(v => g.node(v).rank));
let layers = util.range(maxRank + 1).map(() => []);

@@ -28,3 +28,3 @@ function dfs(v) {

visited[v] = true;
var node = g.node(v);
let node = g.node(v);
layers[node.rank].push(v);

@@ -34,3 +34,3 @@ g.successors(v).forEach(dfs);

var orderedVs = simpleNodes.sort((a, b) => g.node(a).rank - g.node(b).rank);
let orderedVs = simpleNodes.sort((a, b) => g.node(a).rank - g.node(b).rank);
orderedVs.forEach(dfs);

@@ -37,0 +37,0 @@

"use strict";
var util = require("../util");
let util = require("../util");

@@ -33,5 +33,5 @@ module.exports = resolveConflicts;

function resolveConflicts(entries, cg) {
var mappedEntries = {};
let mappedEntries = {};
entries.forEach((entry, i) => {
var tmp = mappedEntries[entry.v] = {
let tmp = mappedEntries[entry.v] = {
indegree: 0,

@@ -50,4 +50,4 @@ "in": [],

cg.edges().forEach(e => {
var entryV = mappedEntries[e.v];
var entryW = mappedEntries[e.w];
let entryV = mappedEntries[e.v];
let entryW = mappedEntries[e.w];
if (entryV !== undefined && entryW !== undefined) {

@@ -59,3 +59,3 @@ entryW.indegree++;

var sourceSet = Object.values(mappedEntries).filter(entry => !entry.indegree);
let sourceSet = Object.values(mappedEntries).filter(entry => !entry.indegree);

@@ -66,6 +66,6 @@ return doResolveConflicts(sourceSet);

function doResolveConflicts(sourceSet) {
var entries = [];
let entries = [];
function handleIn(vEntry) {
return function(uEntry) {
return uEntry => {
if (uEntry.merged) {

@@ -83,3 +83,3 @@ return;

function handleOut(vEntry) {
return function(wEntry) {
return wEntry => {
wEntry["in"].push(vEntry);

@@ -93,3 +93,3 @@ if (--wEntry.indegree === 0) {

while (sourceSet.length) {
var entry = sourceSet.pop();
let entry = sourceSet.pop();
entries.push(entry);

@@ -106,4 +106,4 @@ entry["in"].reverse().forEach(handleIn(entry));

function mergeEntries(target, source) {
var sum = 0;
var weight = 0;
let sum = 0;
let weight = 0;

@@ -110,0 +110,0 @@ if (target.weight) {

@@ -1,4 +0,4 @@

var barycenter = require("./barycenter");
var resolveConflicts = require("./resolve-conflicts");
var sort = require("./sort");
let barycenter = require("./barycenter");
let resolveConflicts = require("./resolve-conflicts");
let sort = require("./sort");

@@ -8,7 +8,7 @@ module.exports = sortSubgraph;

function sortSubgraph(g, v, cg, biasRight) {
var movable = g.children(v);
var node = g.node(v);
var bl = node ? node.borderLeft : undefined;
var br = node ? node.borderRight: undefined;
var subgraphs = {};
let movable = g.children(v);
let node = g.node(v);
let bl = node ? node.borderLeft : undefined;
let br = node ? node.borderRight: undefined;
let subgraphs = {};

@@ -19,6 +19,6 @@ if (bl) {

var barycenters = barycenter(g, movable);
barycenters.forEach(function(entry) {
let barycenters = barycenter(g, movable);
barycenters.forEach(entry => {
if (g.children(entry.v).length) {
var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight);
let subgraphResult = sortSubgraph(g, entry.v, cg, biasRight);
subgraphs[entry.v] = subgraphResult;

@@ -31,6 +31,6 @@ if (subgraphResult.hasOwnProperty("barycenter")) {

var entries = resolveConflicts(barycenters, cg);
let entries = resolveConflicts(barycenters, cg);
expandSubgraphs(entries, subgraphs);
var result = sort(entries, biasRight);
let result = sort(entries, biasRight);

@@ -40,3 +40,3 @@ if (bl) {

if (g.predecessors(bl).length) {
var blPred = g.node(g.predecessors(bl)[0]),
let blPred = g.node(g.predecessors(bl)[0]),
brPred = g.node(g.predecessors(br)[0]);

@@ -57,4 +57,4 @@ if (!result.hasOwnProperty("barycenter")) {

function expandSubgraphs(entries, subgraphs) {
entries.forEach(function(entry) {
entry.vs = entry.vs.flatMap(function(v) {
entries.forEach(entry => {
entry.vs = entry.vs.flatMap(v => {
if (subgraphs[v]) {

@@ -61,0 +61,0 @@ return subgraphs[v].vs;

@@ -1,2 +0,2 @@

var util = require("../util");
let util = require("../util");

@@ -6,6 +6,6 @@ module.exports = sort;

function sort(entries, biasRight) {
var parts = util.partition(entries, function(entry) {
let parts = util.partition(entries, entry => {
return entry.hasOwnProperty("barycenter");
});
var sortable = parts.lhs,
let sortable = parts.lhs,
unsortable = parts.rhs.sort((a, b) => b.i - a.i),

@@ -21,3 +21,3 @@ vs = [],

sortable.forEach(function (entry) {
sortable.forEach(entry => {
vsIndex += entry.vs.length;

@@ -30,3 +30,3 @@ vs.push(entry.vs);

var result = { vs: vs.flat(true) };
let result = { vs: vs.flat(true) };
if (weight) {

@@ -40,3 +40,3 @@ result.barycenter = sum / weight;

function consumeUnsortable(vs, unsortable, index) {
var last;
let last;
while (unsortable.length && (last = unsortable[unsortable.length - 1]).i <= index) {

@@ -51,3 +51,3 @@ unsortable.pop();

function compareWithBias(bias) {
return function(entryV, entryW) {
return (entryV, entryW) => {
if (entryV.barycenter < entryW.barycenter) {

@@ -54,0 +54,0 @@ return -1;

module.exports = parentDummyChains;
function parentDummyChains(g) {
var postorderNums = postorder(g);
let postorderNums = postorder(g);
g.graph().dummyChains.forEach(function(v) {
var node = g.node(v);
var edgeObj = node.edgeObj;
var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w);
var path = pathData.path;
var lca = pathData.lca;
var pathIdx = 0;
var pathV = path[pathIdx];
var ascending = true;
g.graph().dummyChains.forEach(v => {
let node = g.node(v);
let edgeObj = node.edgeObj;
let pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w);
let path = pathData.path;
let lca = pathData.lca;
let pathIdx = 0;
let pathV = path[pathIdx];
let ascending = true;

@@ -47,8 +47,8 @@ while (v !== edgeObj.w) {

function findPath(g, postorderNums, v, w) {
var vPath = [];
var wPath = [];
var low = Math.min(postorderNums[v].low, postorderNums[w].low);
var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim);
var parent;
var lca;
let vPath = [];
let wPath = [];
let low = Math.min(postorderNums[v].low, postorderNums[w].low);
let lim = Math.max(postorderNums[v].lim, postorderNums[w].lim);
let parent;
let lca;

@@ -74,7 +74,7 @@ // Traverse up from v to find the LCA

function postorder(g) {
var result = {};
var lim = 0;
let result = {};
let lim = 0;
function dfs(v) {
var low = lim;
let low = lim;
g.children(v).forEach(dfs);

@@ -81,0 +81,0 @@ result[v] = { low: low, lim: lim++ };

"use strict";
var Graph = require("@dagrejs/graphlib").Graph;
var util = require("../util");
let Graph = require("@dagrejs/graphlib").Graph;
let util = require("../util");

@@ -42,6 +42,6 @@ /*

function findType1Conflicts(g, layering) {
var conflicts = {};
let conflicts = {};
function visitLayer(prevLayer, layer) {
var
let
// last visited node in the previous layer that is incident on an inner

@@ -56,10 +56,10 @@ // segment.

layer.forEach(function(v, i) {
var w = findOtherInnerSegmentNode(g, v),
layer.forEach((v, i) => {
let w = findOtherInnerSegmentNode(g, v),
k1 = w ? g.node(w).order : prevLayerLength;
if (w || v === lastNode) {
layer.slice(scanPos, i+1).forEach(function(scanNode) {
g.predecessors(scanNode).forEach(function(u) {
var uLabel = g.node(u),
layer.slice(scanPos, i+1).forEach(scanNode => {
g.predecessors(scanNode).forEach(u => {
let uLabel = g.node(u),
uPos = uLabel.order;

@@ -85,11 +85,11 @@ if ((uPos < k0 || k1 < uPos) &&

function findType2Conflicts(g, layering) {
var conflicts = {};
let conflicts = {};
function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) {
var v;
util.range(southPos, southEnd).forEach(function(i) {
let v;
util.range(southPos, southEnd).forEach(i => {
v = south[i];
if (g.node(v).dummy) {
g.predecessors(v).forEach(function(u) {
var uNode = g.node(u);
g.predecessors(v).forEach(u => {
let uNode = g.node(u);
if (uNode.dummy &&

@@ -106,9 +106,9 @@ (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) {

function visitLayer(north, south) {
var prevNorthPos = -1,
let prevNorthPos = -1,
nextNorthPos,
southPos = 0;
south.forEach(function(v, southLookahead) {
south.forEach((v, southLookahead) => {
if (g.node(v).dummy === "border") {
var predecessors = g.predecessors(v);
let predecessors = g.predecessors(v);
if (predecessors.length) {

@@ -139,3 +139,3 @@ nextNorthPos = g.node(predecessors[0]).order;

if (v > w) {
var tmp = v;
let tmp = v;
v = w;

@@ -145,3 +145,3 @@ w = tmp;

var conflictsV = conflicts[v];
let conflictsV = conflicts[v];
if (!conflictsV) {

@@ -155,3 +155,3 @@ conflicts[v] = conflictsV = {};

if (v > w) {
var tmp = v;
let tmp = v;
v = w;

@@ -172,3 +172,3 @@ w = tmp;

function verticalAlignment(g, layering, conflicts, neighborFn) {
var root = {},
let root = {},
align = {},

@@ -180,4 +180,4 @@ pos = {};

// generate different extreme alignments.
layering.forEach(function(layer) {
layer.forEach(function(v, order) {
layering.forEach(layer => {
layer.forEach((v, order) => {
root[v] = v;

@@ -189,11 +189,11 @@ align[v] = v;

layering.forEach(function(layer) {
var prevIdx = -1;
layer.forEach(function(v) {
var ws = neighborFn(v);
layering.forEach(layer => {
let prevIdx = -1;
layer.forEach(v => {
let ws = neighborFn(v);
if (ws.length) {
ws = ws.sort((a, b) => pos[a] - pos[b]);
var mp = (ws.length - 1) / 2;
for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) {
var w = ws[i];
let mp = (ws.length - 1) / 2;
for (let i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) {
let w = ws[i];
if (align[v] === v &&

@@ -220,3 +220,3 @@ prevIdx < pos[w] &&

// greatest coordinates without violating separation.
var xs = {},
let xs = {},
blockG = buildBlockGraph(g, layering, root, reverseSep),

@@ -226,5 +226,5 @@ borderType = reverseSep ? "borderLeft" : "borderRight";

function iterate(setXsFunc, nextNodesFunc) {
var stack = blockG.nodes();
var elem = stack.pop();
var visited = {};
let stack = blockG.nodes();
let elem = stack.pop();
let visited = {};
while (elem) {

@@ -245,3 +245,3 @@ if (visited[elem]) {

function pass1(elem) {
xs[elem] = blockG.inEdges(elem).reduce(function(acc, e) {
xs[elem] = blockG.inEdges(elem).reduce((acc, e) => {
return Math.max(acc, xs[e.v] + blockG.edge(e));

@@ -253,7 +253,7 @@ }, 0);

function pass2(elem) {
var min = blockG.outEdges(elem).reduce(function(acc, e) {
let min = blockG.outEdges(elem).reduce((acc, e) => {
return Math.min(acc, xs[e.w] - blockG.edge(e));
}, Number.POSITIVE_INFINITY);
var node = g.node(elem);
let node = g.node(elem);
if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) {

@@ -275,10 +275,10 @@ xs[elem] = Math.max(xs[elem], min);

function buildBlockGraph(g, layering, root, reverseSep) {
var blockGraph = new Graph(),
let blockGraph = new Graph(),
graphLabel = g.graph(),
sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep);
layering.forEach(function(layer) {
var u;
layer.forEach(function(v) {
var vRoot = root[v];
layering.forEach(layer => {
let u;
layer.forEach(v => {
let vRoot = root[v];
blockGraph.setNode(vRoot);

@@ -302,7 +302,7 @@ if (u) {

return Object.values(xss).reduce((currentMinAndXs, xs) => {
var max = Number.NEGATIVE_INFINITY;
var min = Number.POSITIVE_INFINITY;
let max = Number.NEGATIVE_INFINITY;
let min = Number.POSITIVE_INFINITY;
Object.entries(xs).forEach(([v, x]) => {
var halfWidth = width(g, v) / 2;
let halfWidth = width(g, v) / 2;

@@ -329,9 +329,9 @@ max = Math.max(x + halfWidth, max);

function alignCoordinates(xss, alignTo) {
var alignToVals = Object.values(alignTo),
let alignToVals = Object.values(alignTo),
alignToMin = Math.min(...alignToVals),
alignToMax = Math.max(...alignToVals);
["u", "d"].forEach(function(vert) {
["l", "r"].forEach(function(horiz) {
var alignment = vert + horiz,
["u", "d"].forEach(vert => {
["l", "r"].forEach(horiz => {
let alignment = vert + horiz,
xs = xss[alignment];

@@ -341,3 +341,3 @@

var xsVals = Object.values(xs);
let xsVals = Object.values(xs);
let delta = alignToMin - Math.min(...xsVals);

@@ -356,7 +356,7 @@ if (horiz !== "l") {

function balance(xss, align) {
return util.mapValues(xss.ul, function(num, v) {
return util.mapValues(xss.ul, (num, v) => {
if (align) {
return xss[align.toLowerCase()][v];
} else {
var xs = Object.values(xss).map(xs => xs[v]).sort((a, b) => a - b);
let xs = Object.values(xss).map(xs => xs[v]).sort((a, b) => a - b);
return (xs[1] + xs[2]) / 2;

@@ -368,12 +368,12 @@ }

function positionX(g) {
var layering = util.buildLayerMatrix(g);
var conflicts = Object.assign(
let layering = util.buildLayerMatrix(g);
let conflicts = Object.assign(
findType1Conflicts(g, layering),
findType2Conflicts(g, layering));
var xss = {};
var adjustedLayering;
["u", "d"].forEach(function(vert) {
let xss = {};
let adjustedLayering;
["u", "d"].forEach(vert => {
adjustedLayering = vert === "u" ? layering : Object.values(layering).reverse();
["l", "r"].forEach(function(horiz) {
["l", "r"].forEach(horiz => {
if (horiz === "r") {

@@ -385,5 +385,5 @@ adjustedLayering = adjustedLayering.map(inner => {

var neighborFn = (vert === "u" ? g.predecessors : g.successors).bind(g);
var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn);
var xs = horizontalCompaction(g, adjustedLayering,
let neighborFn = (vert === "u" ? g.predecessors : g.successors).bind(g);
let align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn);
let xs = horizontalCompaction(g, adjustedLayering,
align.root, align.align, horiz === "r");

@@ -398,3 +398,3 @@ if (horiz === "r") {

var smallestWidth = findSmallestWidthAlignment(g, xss);
let smallestWidth = findSmallestWidthAlignment(g, xss);
alignCoordinates(xss, smallestWidth);

@@ -405,7 +405,7 @@ return balance(xss, g.graph().align);

function sep(nodeSep, edgeSep, reverseSep) {
return function(g, v, w) {
var vLabel = g.node(v);
var wLabel = g.node(w);
var sum = 0;
var delta;
return (g, v, w) => {
let vLabel = g.node(v);
let wLabel = g.node(w);
let sum = 0;
let delta;

@@ -412,0 +412,0 @@ sum += vLabel.width / 2;

"use strict";
var util = require("../util");
var positionX = require("./bk").positionX;
let util = require("../util");
let positionX = require("./bk").positionX;

@@ -16,6 +16,6 @@ module.exports = position;

function positionY(g) {
var layering = util.buildLayerMatrix(g);
var rankSep = g.graph().ranksep;
var prevY = 0;
layering.forEach(function(layer) {
let layering = util.buildLayerMatrix(g);
let rankSep = g.graph().ranksep;
let prevY = 0;
layering.forEach(layer => {
const maxHeight = layer.reduce((acc, v) => {

@@ -22,0 +22,0 @@ const height = g.node(v).height;

@@ -57,3 +57,3 @@ "use strict";

function dfs(v) {
g.nodeEdges(v).forEach(function(e) {
g.nodeEdges(v).forEach(e => {
var edgeV = e.v,

@@ -60,0 +60,0 @@ w = (v === edgeV) ? e.w : edgeV;

@@ -103,3 +103,3 @@ "use strict";

g.nodeEdges(child).forEach(function(e) {
g.nodeEdges(child).forEach(e => {
var isOutEdge = e.v === child,

@@ -135,3 +135,3 @@ other = isOutEdge ? e.w : e.v;

visited[v] = true;
tree.neighbors(v).forEach(function(w) {
tree.neighbors(v).forEach(w => {
if (!visited.hasOwnProperty(w)) {

@@ -182,3 +182,3 @@ nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v);

var candidates = g.edges().filter(function(edge) {
var candidates = g.edges().filter(edge => {
return flip === isDescendant(t, t.node(edge.v), tailLabel) &&

@@ -211,3 +211,3 @@ flip !== isDescendant(t, t.node(edge.w), tailLabel);

vs = vs.slice(1);
vs.forEach(function(v) {
vs.forEach(v => {
var parent = t.node(v).parent,

@@ -214,0 +214,0 @@ edge = g.edge(v, parent),

@@ -5,3 +5,3 @@ /* eslint "no-console": off */

var Graph = require("@dagrejs/graphlib").Graph;
let Graph = require("@dagrejs/graphlib").Graph;

@@ -34,3 +34,3 @@ module.exports = {

function addDummyNode(g, type, attrs, name) {
var v;
let v;
do {

@@ -50,7 +50,7 @@ v = uniqueId(name);

function simplify(g) {
var simplified = new Graph().setGraph(g.graph());
let simplified = new Graph().setGraph(g.graph());
g.nodes().forEach(v => simplified.setNode(v, g.node(v)));
g.edges().forEach(e => {
var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 };
var label = g.edge(e);
let simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 };
let label = g.edge(e);
simplified.setEdge(e.v, e.w, {

@@ -65,3 +65,3 @@ weight: simpleLabel.weight + label.weight,

function asNonCompoundGraph(g) {
var simplified = new Graph({ multigraph: g.isMultigraph() }).setGraph(g.graph());
let simplified = new Graph({ multigraph: g.isMultigraph() }).setGraph(g.graph());
g.nodes().forEach(v => {

@@ -79,4 +79,4 @@ if (!g.children(v).length) {

function successorWeights(g) {
var weightMap = g.nodes().map(v => {
var sucs = {};
let weightMap = g.nodes().map(v => {
let sucs = {};
g.outEdges(v).forEach(e => {

@@ -91,4 +91,4 @@ sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight;

function predecessorWeights(g) {
var weightMap = g.nodes().map(v => {
var preds = {};
let weightMap = g.nodes().map(v => {
let preds = {};
g.inEdges(v).forEach(e => {

@@ -107,11 +107,11 @@ preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight;

function intersectRect(rect, point) {
var x = rect.x;
var y = rect.y;
let x = rect.x;
let y = rect.y;
// Rectangle intersection algorithm from:
// http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes
var dx = point.x - x;
var dy = point.y - y;
var w = rect.width / 2;
var h = rect.height / 2;
let dx = point.x - x;
let dy = point.y - y;
let w = rect.width / 2;
let h = rect.height / 2;

@@ -122,3 +122,3 @@ if (!dx && !dy) {

var sx, sy;
let sx, sy;
if (Math.abs(dy) * w > Math.abs(dx) * h) {

@@ -148,6 +148,6 @@ // Intersection is top or bottom of rect.

function buildLayerMatrix(g) {
var layering = range(maxRank(g) + 1).map(() => []);
let layering = range(maxRank(g) + 1).map(() => []);
g.nodes().forEach(v => {
var node = g.node(v);
var rank = node.rank;
let node = g.node(v);
let rank = node.rank;
if (rank !== undefined) {

@@ -165,4 +165,4 @@ layering[rank][node.order] = v;

function normalizeRanks(g) {
var min = Math.min(...g.nodes().map(v => {
var rank = g.node(v).rank;
let min = Math.min(...g.nodes().map(v => {
let rank = g.node(v).rank;
if (rank === undefined) {

@@ -175,3 +175,3 @@ return Number.MAX_VALUE;

g.nodes().forEach(v => {
var node = g.node(v);
let node = g.node(v);
if (node.hasOwnProperty("rank")) {

@@ -185,7 +185,7 @@ node.rank -= min;

// Ranks may not start at 0, so we need to offset them
var offset = Math.min(...g.nodes().map(v => g.node(v).rank));
let offset = Math.min(...g.nodes().map(v => g.node(v).rank));
var layers = [];
let layers = [];
g.nodes().forEach(v => {
var rank = g.node(v).rank - offset;
let rank = g.node(v).rank - offset;
if (!layers[rank]) {

@@ -197,4 +197,4 @@ layers[rank] = [];

var delta = 0;
var nodeRankFactor = g.graph().nodeRankFactor;
let delta = 0;
let nodeRankFactor = g.graph().nodeRankFactor;
Array.from(layers).forEach((vs, i) => {

@@ -210,3 +210,3 @@ if (vs === undefined && i % nodeRankFactor !== 0) {

function addBorderNode(g, prefix, rank, order) {
var node = {
let node = {
width: 0,

@@ -224,3 +224,3 @@ height: 0

return Math.max(...g.nodes().map(v => {
var rank = g.node(v).rank;
let rank = g.node(v).rank;
if (rank === undefined) {

@@ -240,3 +240,3 @@ return Number.MIN_VALUE;

function partition(collection, fn) {
var result = { lhs: [], rhs: [] };
let result = { lhs: [], rhs: [] };
collection.forEach(value => {

@@ -257,3 +257,3 @@ if (fn(value)) {

function time(name, fn) {
var start = Date.now();
let start = Date.now();
try {

@@ -260,0 +260,0 @@ return fn();

@@ -1,1 +0,1 @@

module.exports = "1.0.2";
module.exports = "1.0.4";
{
"name": "@dagrejs/dagre",
"version": "1.0.2",
"version": "1.0.4",
"description": "Graph layout for JavaScript",

@@ -5,0 +5,0 @@ "author": "Chris Pettitt <cpettitt@gmail.com>",

@@ -1,8 +0,1 @@

# Important!
**This project does not have a maintainer or active project members. There won’t be any support or attention to pull requests. Please do not contact previous maintainers unless you are qualified and have the resources to make a serious commitment to fully take over ownership of the project.**
# dagre - Graph layout for JavaScript

@@ -9,0 +2,0 @@

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc