@dagrejs/dagre 3.1.0 → 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/dagre.js CHANGED
@@ -23,25 +23,25 @@ var dagre = (() => {
23
23
  // index.ts
24
24
  var index_exports = {};
25
25
  __export(index_exports, {
26
- Graph: () => p,
26
+ Graph: () => Graph,
27
27
  debug: () => debugOrdering,
28
28
  default: () => index_default,
29
- graphlib: () => graphlib_esm_exports,
29
+ graphlib: () => graph_lib_exports,
30
30
  layout: () => layout,
31
31
  util: () => util,
32
32
  version: () => version
33
33
  });
34
34
 
35
- // node_modules/@dagrejs/graphlib/dist/graphlib.esm.js
36
- var graphlib_esm_exports = {};
37
- __export(graphlib_esm_exports, {
38
- Graph: () => p,
39
- alg: () => v,
40
- json: () => G,
41
- version: () => H
35
+ // lib/graph-lib.ts
36
+ var graph_lib_exports = {};
37
+ __export(graph_lib_exports, {
38
+ Graph: () => Graph,
39
+ alg: () => F
42
40
  });
41
+
42
+ // node_modules/@dagrejs/graphlib/dist/graphlib.esm.js
43
43
  var V = Object.defineProperty;
44
- var F = (s, e) => {
44
+ var x = (s, e) => {
45
45
  for (var t in e) V(s, t, { get: e[t], enumerable: true });
46
46
  };
47
47
  var p = class {
@@ -95,8 +95,8 @@ var dagre = (() => {
95
95
  return this.nodes().filter((e) => Object.keys(this._out[e]).length === 0);
96
96
  }
97
97
  setNodes(e, t) {
98
- return e.forEach((n) => {
99
- t !== void 0 ? this.setNode(n, t) : this.setNode(n);
98
+ return e.forEach((r) => {
99
+ t !== void 0 ? this.setNode(r, t) : this.setNode(r);
100
100
  }), this;
101
101
  }
102
102
  setNode(e, t) {
@@ -110,9 +110,9 @@ var dagre = (() => {
110
110
  }
111
111
  removeNode(e) {
112
112
  if (e in this._nodes) {
113
- let t = (n) => this.removeEdge(this._edgeObjs[n]);
114
- delete this._nodes[e], this._isCompound && (this._removeFromParentsChildList(e), delete this._parent[e], this.children(e).forEach((n) => {
115
- this.setParent(n);
113
+ let t = (r) => this.removeEdge(this._edgeObjs[r]);
114
+ delete this._nodes[e], this._isCompound && (this._removeFromParentsChildList(e), delete this._parent[e], this.children(e).forEach((r) => {
115
+ this.setParent(r);
116
116
  }), delete this._children[e]), Object.keys(this._in[e]).forEach(t), delete this._in[e], delete this._preds[e], Object.keys(this._out[e]).forEach(t), delete this._out[e], delete this._sucs[e], --this._nodeCount;
117
117
  }
118
118
  return this;
@@ -122,7 +122,7 @@ var dagre = (() => {
122
122
  if (t === void 0) t = "\0";
123
123
  else {
124
124
  t += "";
125
- for (let n = t; n !== void 0; n = this.parent(n)) if (n === e) throw new Error("Setting " + t + " as parent of " + e + " would create a cycle");
125
+ for (let r = t; r !== void 0; r = this.parent(r)) if (r === e) throw new Error("Setting " + t + " as parent of " + e + " would create a cycle");
126
126
  this.setNode(t);
127
127
  }
128
128
  return this.setNode(e), this._removeFromParentsChildList(e), this._parent[e] = t, this._children[t][e] = true, this;
@@ -154,27 +154,28 @@ var dagre = (() => {
154
154
  neighbors(e) {
155
155
  let t = this.predecessors(e);
156
156
  if (t) {
157
- let n = new Set(t);
158
- for (let i of this.successors(e)) n.add(i);
159
- return Array.from(n.values());
157
+ let r = new Set(t), i = this.successors(e);
158
+ if (i) for (let n of i) r.add(n);
159
+ return Array.from(r.values());
160
160
  }
161
161
  }
162
162
  isLeaf(e) {
163
+ var r;
163
164
  let t;
164
- return this.isDirected() ? t = this.successors(e) : t = this.neighbors(e), t.length === 0;
165
+ return this.isDirected() ? t = this.successors(e) : t = this.neighbors(e), ((r = t == null ? void 0 : t.length) != null ? r : 0) === 0;
165
166
  }
166
167
  filterNodes(e) {
167
168
  let t = new this.constructor({ directed: this._isDirected, multigraph: this._isMultigraph, compound: this._isCompound });
168
- t.setGraph(this.graph()), Object.entries(this._nodes).forEach(([r, o]) => {
169
- e(r) && t.setNode(r, o);
170
- }), Object.values(this._edgeObjs).forEach((r) => {
171
- t.hasNode(r.v) && t.hasNode(r.w) && t.setEdge(r, this.edge(r));
169
+ t.setGraph(this.graph()), Object.entries(this._nodes).forEach(([n, o]) => {
170
+ e(n) && t.setNode(n, o);
171
+ }), Object.values(this._edgeObjs).forEach((n) => {
172
+ t.hasNode(n.v) && t.hasNode(n.w) && t.setEdge(n, this.edge(n));
172
173
  });
173
- let n = {}, i = (r) => {
174
- let o = this.parent(r);
175
- return !o || t.hasNode(o) ? (n[r] = o != null ? o : void 0, o != null ? o : void 0) : o in n ? n[o] : i(o);
174
+ let r = {}, i = (n) => {
175
+ let o = this.parent(n);
176
+ return !o || t.hasNode(o) ? (r[n] = o, o) : o in r ? r[o] : i(o);
176
177
  };
177
- return this._isCompound && t.nodes().forEach((r) => t.setParent(r, i(r))), t;
178
+ return this._isCompound && t.nodes().forEach((n) => t.setParent(n, i(n))), t;
178
179
  }
179
180
  setDefaultEdgeLabel(e) {
180
181
  return typeof e != "function" ? this._defaultEdgeLabelFn = () => e : this._defaultEdgeLabelFn = e, this;
@@ -186,34 +187,34 @@ var dagre = (() => {
186
187
  return Object.values(this._edgeObjs);
187
188
  }
188
189
  setPath(e, t) {
189
- return e.reduce((n, i) => (t !== void 0 ? this.setEdge(n, i, t) : this.setEdge(n, i), i)), this;
190
+ return e.reduce((r, i) => (t !== void 0 ? this.setEdge(r, i, t) : this.setEdge(r, i), i)), this;
190
191
  }
191
- setEdge(e, t, n, i) {
192
- let r, o, d, a, c = false;
193
- typeof e == "object" && e !== null && "v" in e ? (r = e.v, o = e.w, d = e.name, arguments.length === 2 && (a = t, c = true)) : (r = e, o = t, d = i, arguments.length > 2 && (a = n, c = true)), r = "" + r, o = "" + o, d !== void 0 && (d = "" + d);
194
- let h = b(this._isDirected, r, o, d);
195
- if (h in this._edgeLabels) return c && (this._edgeLabels[h] = a), this;
192
+ setEdge(e, t, r, i) {
193
+ let n, o, d, h, c = false;
194
+ typeof e == "object" && e !== null && "v" in e ? (n = e.v, o = e.w, d = e.name, arguments.length === 2 && (h = t, c = true)) : (n = e, o = t, d = i, arguments.length > 2 && (h = r, c = true)), n = "" + n, o = "" + o, d !== void 0 && (d = "" + d);
195
+ let a = _(this._isDirected, n, o, d);
196
+ if (a in this._edgeLabels) return c && (this._edgeLabels[a] = h), this;
196
197
  if (d !== void 0 && !this._isMultigraph) throw new Error("Cannot set a named edge when isMultigraph = false");
197
- this.setNode(r), this.setNode(o), this._edgeLabels[h] = c ? a : this._defaultEdgeLabelFn(r, o, d);
198
- let u = J(this._isDirected, r, o, d);
199
- return r = u.v, o = u.w, Object.freeze(u), this._edgeObjs[h] = u, k(this._preds[o], r), k(this._sucs[r], o), this._in[o][h] = u, this._out[r][h] = u, this._edgeCount++, this;
198
+ this.setNode(n), this.setNode(o), this._edgeLabels[a] = c ? h : this._defaultEdgeLabelFn(n, o, d);
199
+ let u = J(this._isDirected, n, o, d);
200
+ return n = u.v, o = u.w, Object.freeze(u), this._edgeObjs[a] = u, R(this._preds[o], n), R(this._sucs[n], o), this._in[o][a] = u, this._out[n][a] = u, this._edgeCount++, this;
200
201
  }
201
- edge(e, t, n) {
202
- let i = arguments.length === 1 ? N(this._isDirected, e) : b(this._isDirected, e, t, n);
202
+ edge(e, t, r) {
203
+ let i = arguments.length === 1 ? G(this._isDirected, e) : _(this._isDirected, e, t, r);
203
204
  return this._edgeLabels[i];
204
205
  }
205
- edgeAsObj(e, t, n) {
206
- let i = arguments.length === 1 ? this.edge(e) : this.edge(e, t, n);
207
- return typeof i != "object" ? { label: i } : i;
206
+ edgeAsObj(e, t, r) {
207
+ let i = arguments.length === 1 ? this.edge(e) : this.edge(e, t, r);
208
+ return typeof i != "object" || i === null ? { label: i } : i;
208
209
  }
209
- hasEdge(e, t, n) {
210
- return (arguments.length === 1 ? N(this._isDirected, e) : b(this._isDirected, e, t, n)) in this._edgeLabels;
210
+ hasEdge(e, t, r) {
211
+ return (arguments.length === 1 ? G(this._isDirected, e) : _(this._isDirected, e, t, r)) in this._edgeLabels;
211
212
  }
212
- removeEdge(e, t, n) {
213
- let i = arguments.length === 1 ? N(this._isDirected, e) : b(this._isDirected, e, t, n), r = this._edgeObjs[i];
214
- if (r) {
215
- let o = r.v, d = r.w;
216
- delete this._edgeLabels[i], delete this._edgeObjs[i], x(this._preds[d], o), x(this._sucs[o], d), delete this._in[d][i], delete this._out[o][i], this._edgeCount--;
213
+ removeEdge(e, t, r) {
214
+ let i = arguments.length === 1 ? G(this._isDirected, e) : _(this._isDirected, e, t, r), n = this._edgeObjs[i];
215
+ if (n) {
216
+ let o = n.v, d = n.w;
217
+ delete this._edgeLabels[i], delete this._edgeObjs[i], k(this._preds[d], o), k(this._sucs[o], d), delete this._in[d][i], delete this._out[o][i], this._edgeCount--;
217
218
  }
218
219
  return this;
219
220
  }
@@ -229,58 +230,57 @@ var dagre = (() => {
229
230
  _removeFromParentsChildList(e) {
230
231
  delete this._children[this._parent[e]][e];
231
232
  }
232
- filterEdges(e, t, n) {
233
+ filterEdges(e, t, r) {
233
234
  if (!e) return;
234
235
  let i = Object.values(e);
235
- return n ? i.filter((r) => r.v === t && r.w === n || r.v === n && r.w === t) : i;
236
+ return r ? i.filter((n) => n.v === t && n.w === r || n.v === r && n.w === t) : i;
236
237
  }
237
238
  };
238
- function k(s, e) {
239
+ function R(s, e) {
239
240
  s[e] ? s[e]++ : s[e] = 1;
240
241
  }
241
- function x(s, e) {
242
+ function k(s, e) {
242
243
  s[e] !== void 0 && !--s[e] && delete s[e];
243
244
  }
244
- function b(s, e, t, n) {
245
- let i = "" + e, r = "" + t;
246
- if (!s && i > r) {
245
+ function _(s, e, t, r) {
246
+ let i = "" + e, n = "" + t;
247
+ if (!s && i > n) {
247
248
  let o = i;
248
- i = r, r = o;
249
+ i = n, n = o;
249
250
  }
250
- return i + "" + r + "" + (n === void 0 ? "\0" : n);
251
+ return i + "" + n + "" + (r === void 0 ? "\0" : r);
251
252
  }
252
- function J(s, e, t, n) {
253
- let i = "" + e, r = "" + t;
254
- if (!s && i > r) {
253
+ function J(s, e, t, r) {
254
+ let i = "" + e, n = "" + t;
255
+ if (!s && i > n) {
255
256
  let d = i;
256
- i = r, r = d;
257
+ i = n, n = d;
257
258
  }
258
- let o = { v: i, w: r };
259
- return n && (o.name = n), o;
259
+ let o = { v: i, w: n };
260
+ return r && (o.name = r), o;
260
261
  }
261
- function N(s, e) {
262
- return b(s, e.v, e.w, e.name);
262
+ function G(s, e) {
263
+ return _(s, e.v, e.w, e.name);
263
264
  }
264
- var H = "4.0.1";
265
- var G = {};
266
- F(G, { read: () => z, write: () => U });
265
+ var v = {};
266
+ x(v, { read: () => K, write: () => U });
267
267
  function U(s) {
268
- let e = { options: { directed: s.isDirected(), multigraph: s.isMultigraph(), compound: s.isCompound() }, nodes: Y(s), edges: K(s) }, t = s.graph();
268
+ let e = { options: { directed: s.isDirected(), multigraph: s.isMultigraph(), compound: s.isCompound() }, nodes: Y(s), edges: z(s) }, t = s.graph();
269
269
  return t !== void 0 && (e.value = structuredClone(t)), e;
270
270
  }
271
271
  function Y(s) {
272
272
  return s.nodes().map((e) => {
273
- let t = s.node(e), n = s.parent(e), i = { v: e };
274
- return t !== void 0 && (i.value = t), n !== void 0 && (i.parent = n), i;
273
+ let t = s.node(e), r = s.parent(e), i = { v: e };
274
+ return t !== void 0 && (i.value = t), r !== void 0 && (i.parent = r), i;
275
275
  });
276
276
  }
277
- function K(s) {
277
+ function z(s) {
278
278
  return s.edges().map((e) => {
279
- let t = s.edge(e), n = { v: e.v, w: e.w };
280
- return e.name !== void 0 && (n.name = e.name), t !== void 0 && (n.value = t), n;
279
+ let t = s.edge(e), r = { v: e.v, w: e.w };
280
+ return e.name !== void 0 && (r.name = e.name), t !== void 0 && (r.value = t), r;
281
281
  });
282
282
  }
283
- function z(s) {
283
+ function K(s) {
284
284
  let e = new p(s.options);
285
285
  return s.value !== void 0 && e.setGraph(s.value), s.nodes.forEach((t) => {
286
286
  e.setNode(t.v, t.value), t.parent && e.setParent(t.v, t.parent);
@@ -288,23 +288,26 @@ var dagre = (() => {
288
288
  e.setEdge({ v: t.v, w: t.w, name: t.name }, t.value);
289
289
  }), e;
290
290
  }
291
- var v = {};
292
- F(v, { CycleException: () => l, bellmanFord: () => m, components: () => R, dijkstra: () => E, dijkstraAll: () => P, findCycles: () => I, floydWarshall: () => D, isAcyclic: () => O, postorder: () => T, preorder: () => A, prim: () => W, shortestPaths: () => S, tarjan: () => y, topsort: () => L });
291
+ var F = {};
292
+ x(F, { CycleException: () => l, bellmanFord: () => y, components: () => P, dijkstra: () => E, dijkstraAll: () => I, findCycles: () => D, floydWarshall: () => O, isAcyclic: () => j, postorder: () => A, preorder: () => W, prim: () => S, shortestPaths: () => M, tarjan: () => L, topsort: () => w });
293
293
  var Q = () => 1;
294
- function m(s, e, t, n) {
295
- return $(s, String(e), t || Q, n || function(i) {
296
- return s.outEdges(i);
297
- });
298
- }
299
- function $(s, e, t, n) {
300
- let i = {}, r, o = 0, d = s.nodes(), a = function(u) {
301
- let g = t(u);
302
- i[u.v].distance + g < i[u.w].distance && (i[u.w] = { distance: i[u.v].distance + g, predecessor: u.v }, r = true);
294
+ function y(s, e, t, r) {
295
+ return $(s, String(e), t || Q, r || function(i) {
296
+ var n;
297
+ return (n = s.outEdges(i)) != null ? n : [];
298
+ });
299
+ }
300
+ function $(s, e, t, r) {
301
+ let i = {}, n, o = 0, d = s.nodes(), h = function(u) {
302
+ let g = i[u.v], f = i[u.w];
303
+ if (!g || !f) return;
304
+ let m = t(u);
305
+ g.distance + m < f.distance && (i[u.w] = { distance: g.distance + m, predecessor: u.v }, n = true);
303
306
  }, c = function() {
304
307
  d.forEach(function(u) {
305
- n(u).forEach(function(g) {
306
- let f = g.v === u ? g.v : g.w, M = f === g.v ? g.w : g.v;
307
- a({ v: f, w: M });
308
+ r(u).forEach(function(g) {
309
+ let f = g.v === u ? g.v : g.w, m = f === g.v ? g.w : g.v;
310
+ h({ v: f, w: m });
308
311
  });
309
312
  });
310
313
  };
@@ -312,21 +315,22 @@ var dagre = (() => {
312
315
  let g = u === e ? 0 : Number.POSITIVE_INFINITY;
313
316
  i[u] = { distance: g, predecessor: "" };
314
317
  });
315
- let h = d.length;
316
- for (let u = 1; u < h && (r = false, o++, c(), !!r); u++) ;
317
- if (o === h - 1 && (r = false, c(), r)) throw new Error("The graph contains a negative weight cycle");
318
+ let a = d.length;
319
+ for (let u = 1; u < a && (n = false, o++, c(), !!n); u++) ;
320
+ if (o === a - 1 && (n = false, c(), n)) throw new Error("The graph contains a negative weight cycle");
318
321
  return i;
319
322
  }
320
- function R(s) {
321
- let e = {}, t = [], n;
322
- function i(r) {
323
- r in e || (e[r] = true, n.push(r), s.successors(r).forEach(i), s.predecessors(r).forEach(i));
323
+ function P(s) {
324
+ let e = {}, t = [], r;
325
+ function i(n) {
326
+ var o, d;
327
+ n in e || (e[n] = true, r.push(n), (o = s.successors(n)) == null || o.forEach(i), (d = s.predecessors(n)) == null || d.forEach(i));
324
328
  }
325
- return s.nodes().forEach(function(r) {
326
- n = [], i(r), n.length && t.push(n);
329
+ return s.nodes().forEach(function(n) {
330
+ r = [], i(n), r.length && t.push(r);
327
331
  }), t;
328
332
  }
329
- var _ = class {
333
+ var b = class {
330
334
  constructor() {
331
335
  this._arr = [];
332
336
  this._keyIndices = {};
@@ -349,205 +353,242 @@ var dagre = (() => {
349
353
  return this._arr[0].key;
350
354
  }
351
355
  add(e, t) {
352
- let n = this._keyIndices, i = String(e);
353
- if (!(i in n)) {
354
- let r = this._arr, o = r.length;
355
- return n[i] = o, r.push({ key: i, priority: t }), this._decrease(o), true;
356
+ let r = this._keyIndices, i = String(e);
357
+ if (!(i in r)) {
358
+ let n = this._arr, o = n.length;
359
+ return r[i] = o, n.push({ key: i, priority: t }), this._decrease(o), true;
356
360
  }
357
361
  return false;
358
362
  }
359
363
  removeMin() {
364
+ if (this.size() === 0) throw new Error("Queue underflow");
360
365
  this._swap(0, this._arr.length - 1);
361
366
  let e = this._arr.pop();
362
367
  return delete this._keyIndices[e.key], this._heapify(0), e.key;
363
368
  }
364
369
  decrease(e, t) {
365
- let n = this._keyIndices[e];
366
- if (n === void 0) throw new Error(`Key not found: ${e}`);
367
- let i = this._arr[n].priority;
370
+ let r = this._keyIndices[e];
371
+ if (r === void 0) throw new Error(`Key not found: ${e}`);
372
+ let i = this._arr[r].priority;
368
373
  if (t > i) throw new Error(`New priority is greater than current priority. Key: ${e} Old: ${i} New: ${t}`);
369
- this._arr[n].priority = t, this._decrease(n);
374
+ this._arr[r].priority = t, this._decrease(r);
370
375
  }
371
376
  _heapify(e) {
372
- let t = this._arr, n = 2 * e, i = n + 1, r = e;
373
- n < t.length && (r = t[n].priority < t[r].priority ? n : r, i < t.length && (r = t[i].priority < t[r].priority ? i : r), r !== e && (this._swap(e, r), this._heapify(r)));
377
+ let t = this._arr, r = 2 * e, i = r + 1, n = e;
378
+ r < t.length && (n = t[r].priority < t[n].priority ? r : n, i < t.length && (n = t[i].priority < t[n].priority ? i : n), n !== e && (this._swap(e, n), this._heapify(n)));
374
379
  }
375
380
  _decrease(e) {
376
- let t = this._arr, n = t[e].priority, i;
377
- for (; e !== 0 && (i = e >> 1, !(t[i].priority < n)); ) this._swap(e, i), e = i;
381
+ let t = this._arr, r = t[e].priority, i;
382
+ for (; e !== 0 && (i = e >> 1, !(t[i].priority < r)); ) this._swap(e, i), e = i;
378
383
  }
379
384
  _swap(e, t) {
380
- let n = this._arr, i = this._keyIndices, r = n[e], o = n[t];
381
- n[e] = o, n[t] = r, i[o.key] = e, i[r.key] = t;
385
+ let r = this._arr, i = this._keyIndices, n = r[e], o = r[t];
386
+ r[e] = o, r[t] = n, i[o.key] = e, i[n.key] = t;
382
387
  }
383
388
  };
384
389
  var q = () => 1;
385
- function E(s, e, t, n) {
386
- let i = function(r) {
387
- return s.outEdges(r);
390
+ function E(s, e, t, r) {
391
+ let i = function(n) {
392
+ var o;
393
+ return (o = s.outEdges(n)) != null ? o : [];
388
394
  };
389
- return B(s, String(e), t || q, n || i);
395
+ return B(s, String(e), t || q, r || i);
390
396
  }
391
- function B(s, e, t, n) {
392
- let i = {}, r = new _(), o, d, a = function(c) {
393
- let h = c.v !== o ? c.v : c.w, u = i[h], g = t(c), f = d.distance + g;
397
+ function B(s, e, t, r) {
398
+ let i = {}, n = new b(), o, d, h = function(c) {
399
+ let a = c.v !== o ? c.v : c.w, u = i[a];
400
+ if (!u) return;
401
+ let g = t(c), f = d.distance + g;
394
402
  if (g < 0) throw new Error("dijkstra does not allow negative edge weights. Bad edge: " + c + " Weight: " + g);
395
- f < u.distance && (u.distance = f, u.predecessor = o, r.decrease(h, f));
403
+ f < u.distance && (u.distance = f, u.predecessor = o, n.decrease(a, f));
396
404
  };
397
405
  for (s.nodes().forEach(function(c) {
398
- let h = c === e ? 0 : Number.POSITIVE_INFINITY;
399
- i[c] = { distance: h, predecessor: "" }, r.add(c, h);
400
- }); r.size() > 0 && (o = r.removeMin(), d = i[o], d.distance !== Number.POSITIVE_INFINITY); ) n(o).forEach(a);
406
+ let a = c === e ? 0 : Number.POSITIVE_INFINITY;
407
+ i[c] = { distance: a, predecessor: "" }, n.add(c, a);
408
+ }); n.size() > 0; ) {
409
+ o = n.removeMin();
410
+ let c = i[o];
411
+ if (!c || c.distance === Number.POSITIVE_INFINITY) break;
412
+ d = c, r(o).forEach(h);
413
+ }
401
414
  return i;
402
415
  }
403
- function P(s, e, t) {
404
- return s.nodes().reduce(function(n, i) {
405
- return n[i] = E(s, i, e, t), n;
416
+ function I(s, e, t) {
417
+ return s.nodes().reduce(function(r, i) {
418
+ return r[i] = E(s, i, e, t), r;
406
419
  }, {});
407
420
  }
408
- function y(s) {
409
- let e = 0, t = [], n = {}, i = [];
410
- function r(o) {
411
- let d = n[o] = { onStack: true, lowlink: e, index: e++ };
412
- if (t.push(o), s.successors(o).forEach(function(a) {
413
- a in n ? n[a].onStack && (d.lowlink = Math.min(d.lowlink, n[a].index)) : (r(a), d.lowlink = Math.min(d.lowlink, n[a].lowlink));
421
+ function L(s) {
422
+ let e = 0, t = [], r = {}, i = [];
423
+ function n(o) {
424
+ var h;
425
+ let d = r[o] = { onStack: true, lowlink: e, index: e++ };
426
+ if (t.push(o), (h = s.successors(o)) == null || h.forEach(function(c) {
427
+ if (c in r) {
428
+ let a = r[c];
429
+ a != null && a.onStack && (d.lowlink = Math.min(d.lowlink, a.index));
430
+ } else {
431
+ n(c);
432
+ let a = r[c];
433
+ a && (d.lowlink = Math.min(d.lowlink, a.lowlink));
434
+ }
414
435
  }), d.lowlink === d.index) {
415
- let a = [], c;
416
- do
417
- c = t.pop(), n[c].onStack = false, a.push(c);
418
- while (o !== c);
419
- i.push(a);
436
+ let c = [], a;
437
+ do {
438
+ a = t.pop();
439
+ let u = r[a];
440
+ u && (u.onStack = false), c.push(a);
441
+ } while (o !== a);
442
+ i.push(c);
420
443
  }
421
444
  }
422
445
  return s.nodes().forEach(function(o) {
423
- o in n || r(o);
446
+ o in r || n(o);
424
447
  }), i;
425
448
  }
426
- function I(s) {
427
- return y(s).filter(function(e) {
428
- return e.length > 1 || e.length === 1 && s.hasEdge(e[0], e[0]);
449
+ function D(s) {
450
+ return L(s).filter(function(e) {
451
+ var r;
452
+ let t = e[0];
453
+ return t ? e.length > 1 || e.length === 1 && ((r = s.outEdges(t, t)) != null ? r : []).length > 0 : false;
429
454
  });
430
455
  }
431
456
  var X = () => 1;
432
- function D(s, e, t) {
433
- return Z(s, e || X, t || function(n) {
434
- return s.outEdges(n);
457
+ function O(s, e, t) {
458
+ return Z(s, e || X, t || function(r) {
459
+ var i;
460
+ return (i = s.outEdges(r)) != null ? i : [];
435
461
  });
436
462
  }
437
463
  function Z(s, e, t) {
438
- let n = {}, i = s.nodes();
439
- return i.forEach(function(r) {
440
- n[r] = {}, n[r][r] = { distance: 0, predecessor: "" }, i.forEach(function(o) {
441
- r !== o && (n[r][o] = { distance: Number.POSITIVE_INFINITY, predecessor: "" });
442
- }), t(r).forEach(function(o) {
443
- let d = o.v === r ? o.w : o.v, a = e(o);
444
- n[r][d] = { distance: a, predecessor: r };
464
+ let r = {}, i = s.nodes();
465
+ return i.forEach(function(n) {
466
+ let o = {};
467
+ r[n] = o, o[n] = { distance: 0, predecessor: "" }, i.forEach(function(d) {
468
+ n !== d && (o[d] = { distance: Number.POSITIVE_INFINITY, predecessor: "" });
469
+ }), t(n).forEach(function(d) {
470
+ let h = d.v === n ? d.w : d.v, c = e(d);
471
+ o[h] = { distance: c, predecessor: n };
445
472
  });
446
- }), i.forEach(function(r) {
447
- let o = n[r];
448
- i.forEach(function(d) {
449
- let a = n[d];
450
- i.forEach(function(c) {
451
- let h = a[r], u = o[c], g = a[c], f = h.distance + u.distance;
452
- f < g.distance && (g.distance = f, g.predecessor = u.predecessor);
473
+ }), i.forEach(function(n) {
474
+ let o = r[n];
475
+ o && i.forEach(function(d) {
476
+ let h = r[d];
477
+ h && i.forEach(function(c) {
478
+ let a = h[n], u = o[c], g = h[c];
479
+ if (a && u && g) {
480
+ let f = a.distance + u.distance;
481
+ f < g.distance && (g.distance = f, g.predecessor = u.predecessor);
482
+ }
453
483
  });
454
484
  });
455
- }), n;
485
+ }), r;
456
486
  }
457
487
  var l = class extends Error {
458
- constructor(...e) {
459
- super(...e);
488
+ constructor(e) {
489
+ super(e), this.name = "CycleException";
460
490
  }
461
491
  };
462
- function L(s) {
463
- let e = {}, t = {}, n = [];
464
- function i(r) {
465
- if (r in t) throw new l();
466
- r in e || (t[r] = true, e[r] = true, s.predecessors(r).forEach(i), delete t[r], n.push(r));
492
+ function w(s) {
493
+ let e = {}, t = {}, r = [];
494
+ function i(n) {
495
+ var o;
496
+ if (n in t) throw new l();
497
+ n in e || (t[n] = true, e[n] = true, (o = s.predecessors(n)) == null || o.forEach(i), delete t[n], r.push(n));
467
498
  }
468
499
  if (s.sinks().forEach(i), Object.keys(e).length !== s.nodeCount()) throw new l();
469
- return n;
500
+ return r;
470
501
  }
471
- function O(s) {
502
+ function j(s) {
472
503
  try {
473
- L(s);
504
+ w(s);
474
505
  } catch (e) {
475
506
  if (e instanceof l) return false;
476
507
  throw e;
477
508
  }
478
509
  return true;
479
510
  }
480
- function j(s, e, t, n, i) {
511
+ function C(s, e, t, r, i) {
481
512
  Array.isArray(e) || (e = [e]);
482
- let r = ((d) => {
483
- var a;
484
- return (a = s.isDirected() ? s.successors(d) : s.neighbors(d)) != null ? a : [];
513
+ let n = ((d) => {
514
+ var h;
515
+ return (h = s.isDirected() ? s.successors(d) : s.neighbors(d)) != null ? h : [];
485
516
  }), o = {};
486
517
  return e.forEach(function(d) {
487
518
  if (!s.hasNode(d)) throw new Error("Graph does not have node: " + d);
488
- i = C(s, d, t === "post", o, r, n, i);
519
+ i = T(s, d, t === "post", o, n, r, i);
489
520
  }), i;
490
521
  }
491
- function C(s, e, t, n, i, r, o) {
492
- return e in n || (n[e] = true, t || (o = r(o, e)), i(e).forEach(function(d) {
493
- o = C(s, d, t, n, i, r, o);
494
- }), t && (o = r(o, e))), o;
522
+ function T(s, e, t, r, i, n, o) {
523
+ return e in r || (r[e] = true, t || (o = n(o, e)), i(e).forEach(function(d) {
524
+ o = T(s, d, t, r, i, n, o);
525
+ }), t && (o = n(o, e))), o;
495
526
  }
496
- function w(s, e, t) {
497
- return j(s, e, t, function(n, i) {
498
- return n.push(i), n;
527
+ function N(s, e, t) {
528
+ return C(s, e, t, function(r, i) {
529
+ return r.push(i), r;
499
530
  }, []);
500
531
  }
501
- function T(s, e) {
502
- return w(s, e, "post");
503
- }
504
532
  function A(s, e) {
505
- return w(s, e, "pre");
533
+ return N(s, e, "post");
506
534
  }
507
535
  function W(s, e) {
508
- let t = new p(), n = {}, i = new _(), r;
536
+ return N(s, e, "pre");
537
+ }
538
+ function S(s, e) {
539
+ var c;
540
+ let t = new p(), r = {}, i = new b(), n;
509
541
  function o(a) {
510
- let c = a.v === r ? a.w : a.v, h = i.priority(c);
511
- if (h !== void 0) {
512
- let u = e(a);
513
- u < h && (n[c] = r, i.decrease(c, u));
542
+ let u = a.v === n ? a.w : a.v, g = i.priority(u);
543
+ if (g !== void 0) {
544
+ let f = e(a);
545
+ f < g && (r[u] = n, i.decrease(u, f));
514
546
  }
515
547
  }
516
548
  if (s.nodeCount() === 0) return t;
517
549
  s.nodes().forEach(function(a) {
518
550
  i.add(a, Number.POSITIVE_INFINITY), t.setNode(a);
519
- }), i.decrease(s.nodes()[0], 0);
520
- let d = false;
551
+ });
552
+ let d = s.nodes()[0];
553
+ d !== void 0 && i.decrease(d, 0);
554
+ let h = false;
521
555
  for (; i.size() > 0; ) {
522
- if (r = i.removeMin(), r in n) t.setEdge(r, n[r]);
556
+ if (n = i.removeMin(), n in r) t.setEdge(n, r[n]);
523
557
  else {
524
- if (d) throw new Error("Input graph is not connected: " + s);
525
- d = true;
558
+ if (h) throw new Error("Input graph is not connected: " + s);
559
+ h = true;
526
560
  }
527
- s.nodeEdges(r).forEach(o);
561
+ (c = s.nodeEdges(n)) == null || c.forEach(o);
528
562
  }
529
563
  return t;
530
564
  }
531
- function S(s, e, t, n) {
532
- return ee(s, e, t, n != null ? n : ((i) => {
533
- let r = s.outEdges(i);
534
- return r != null ? r : [];
565
+ function M(s, e, t, r) {
566
+ return ee(s, e, t, r != null ? r : ((i) => {
567
+ var n;
568
+ return (n = s.outEdges(i)) != null ? n : [];
535
569
  }));
536
570
  }
537
- function ee(s, e, t, n) {
538
- if (t === void 0) return E(s, e, t, n);
539
- let i = false, r = s.nodes();
540
- for (let o = 0; o < r.length; o++) {
541
- let d = n(r[o]);
542
- for (let a = 0; a < d.length; a++) {
543
- let c = d[a], h = c.v === r[o] ? c.v : c.w, u = h === c.v ? c.w : c.v;
544
- t({ v: h, w: u }) < 0 && (i = true);
571
+ function ee(s, e, t, r) {
572
+ if (t === void 0) return E(s, e, t, r);
573
+ let i = false, n = s.nodes();
574
+ for (let o = 0; o < n.length; o++) {
575
+ let d = n[o];
576
+ if (d === void 0) continue;
577
+ let h = r(d);
578
+ for (let c = 0; c < h.length; c++) {
579
+ let a = h[c];
580
+ if (!a) continue;
581
+ let u = a.v === d ? a.v : a.w, g = u === a.v ? a.w : a.v;
582
+ t({ v: u, w: g }) < 0 && (i = true);
545
583
  }
546
- if (i) return m(s, e, t, n);
584
+ if (i) return y(s, e, t, r);
547
585
  }
548
- return E(s, e, t, n);
586
+ return E(s, e, t, r);
549
587
  }
550
588
 
589
+ // lib/graph-lib.ts
590
+ var Graph = p;
591
+
551
592
  // lib/util.ts
552
593
  function addDummyNode(graph, type, attrs, name) {
553
594
  let v2 = name;
@@ -559,7 +600,7 @@ var dagre = (() => {
559
600
  return v2;
560
601
  }
561
602
  function simplify(graph) {
562
- const simplified = new p().setGraph(graph.graph());
603
+ const simplified = new Graph().setGraph(graph.graph());
563
604
  graph.nodes().forEach((v2) => simplified.setNode(v2, graph.node(v2)));
564
605
  graph.edges().forEach((e) => {
565
606
  const simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 };
@@ -572,7 +613,7 @@ var dagre = (() => {
572
613
  return simplified;
573
614
  }
574
615
  function asNonCompoundGraph(graph) {
575
- const simplified = new p({ multigraph: graph.isMultigraph() }).setGraph(graph.graph());
616
+ const simplified = new Graph({ multigraph: graph.isMultigraph() }).setGraph(graph.graph());
576
617
  graph.nodes().forEach((v2) => {
577
618
  if (!graph.children(v2).length) {
578
619
  simplified.setNode(v2, graph.node(v2));
@@ -796,7 +837,7 @@ var dagre = (() => {
796
837
  }
797
838
 
798
839
  // lib/version.ts
799
- var version = "3.1.0";
840
+ var version = "3.1.1";
800
841
 
801
842
  // lib/data/list.ts
802
843
  var List = class {
@@ -908,7 +949,7 @@ var dagre = (() => {
908
949
  return results;
909
950
  }
910
951
  function buildState(graph, weightFn) {
911
- const fasGraph = new p();
952
+ const fasGraph = new Graph();
912
953
  let maxIn = 0;
913
954
  let maxOut = 0;
914
955
  graph.nodes().forEach((v2) => {
@@ -1136,7 +1177,7 @@ var dagre = (() => {
1136
1177
  // lib/rank/feasible-tree.ts
1137
1178
  var feasible_tree_default = feasibleTree;
1138
1179
  function feasibleTree(graph) {
1139
- const tree = new p({ directed: false });
1180
+ const tree = new Graph({ directed: false });
1140
1181
  const nodes = graph.nodes();
1141
1182
  if (nodes.length === 0) {
1142
1183
  throw new Error("Graph must have at least one node");
@@ -1190,7 +1231,7 @@ var dagre = (() => {
1190
1231
  }
1191
1232
 
1192
1233
  // lib/rank/network-simplex.ts
1193
- var { preorder, postorder } = v;
1234
+ var { preorder, postorder } = F;
1194
1235
  var network_simplex_default = networkSimplex;
1195
1236
  networkSimplex.initLowLimValues = initLowLimValues;
1196
1237
  networkSimplex.initCutValues = initCutValues;
@@ -1962,7 +2003,7 @@ var dagre = (() => {
1962
2003
  nodesWithRank = graph.nodes();
1963
2004
  }
1964
2005
  const root = createRootNode(graph);
1965
- const result = new p({ compound: true }).setGraph({ root }).setDefaultNodeLabel((v2) => graph.node(v2));
2006
+ const result = new Graph({ compound: true }).setGraph({ root }).setDefaultNodeLabel((v2) => graph.node(v2));
1966
2007
  nodesWithRank.forEach((v2) => {
1967
2008
  const node = graph.node(v2);
1968
2009
  const parent = graph.parent(v2);
@@ -2078,7 +2119,7 @@ var dagre = (() => {
2078
2119
  }
2079
2120
  function sweepLayerGraphs(layerGraphs, switchBias, constraints, oldNodes) {
2080
2121
  let biasRight = true;
2081
- const cg = new p();
2122
+ const cg = new Graph();
2082
2123
  layerGraphs.forEach(function(lg) {
2083
2124
  constraints.forEach((con) => cg.setEdge(con.left, con.right));
2084
2125
  const root = lg.graph().root;
@@ -2330,7 +2371,7 @@ var dagre = (() => {
2330
2371
  return xs;
2331
2372
  }
2332
2373
  function buildBlockGraph(graph, layering, root, reverseSep) {
2333
- const blockGraph = new p();
2374
+ const blockGraph = new Graph();
2334
2375
  const graphLabel = graph.graph();
2335
2376
  const sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep);
2336
2377
  layering.forEach((layer) => {
@@ -2537,8 +2578,7 @@ var dagre = (() => {
2537
2578
  }
2538
2579
 
2539
2580
  // lib/layout.ts
2540
- var _oldGraph = null;
2541
- var _rawOldNodes = null;
2581
+ var previousLayouts = /* @__PURE__ */ new WeakMap();
2542
2582
  function layout(g, opts = {}) {
2543
2583
  recursiveClusterLayout(g, notime, opts);
2544
2584
  return g;
@@ -2553,12 +2593,13 @@ var dagre = (() => {
2553
2593
  return void 0;
2554
2594
  }
2555
2595
  function recursiveClusterLayout(g, time2, opts) {
2596
+ var _a;
2556
2597
  const clusterNodes = g.nodes().filter((v2) => g.children(v2).length);
2557
2598
  const clusterBounds = {};
2558
2599
  clusterNodes.forEach((v2) => {
2559
2600
  const node = g.node(v2);
2560
2601
  if (node && node.rankdir) {
2561
- const subgraph = new p({ multigraph: true, compound: true });
2602
+ const subgraph = new Graph({ multigraph: true, compound: true });
2562
2603
  subgraph.setGraph({ rankdir: node.rankdir });
2563
2604
  const children = g.children(v2);
2564
2605
  children.forEach((childId) => {
@@ -2583,7 +2624,7 @@ var dagre = (() => {
2583
2624
  });
2584
2625
  recursiveClusterLayout(subgraph, time2, opts);
2585
2626
  const subLayoutG = buildLayoutGraph(subgraph);
2586
- runLayout(subLayoutG, time2, opts);
2627
+ runLayout(subLayoutG, time2, opts, null);
2587
2628
  updateInputGraph(subgraph, subLayoutG);
2588
2629
  let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
2589
2630
  subgraph.nodes().forEach((u) => {
@@ -2617,14 +2658,14 @@ var dagre = (() => {
2617
2658
  });
2618
2659
  const isolatedClusters = [];
2619
2660
  const getAllDescendants = (nodeId) => {
2620
- const result = [];
2661
+ const result2 = [];
2621
2662
  const queue = (g.children(nodeId) || []).filter((c) => c !== nodeId);
2622
2663
  while (queue.length > 0) {
2623
2664
  const curr = queue.shift();
2624
- result.push(curr);
2665
+ result2.push(curr);
2625
2666
  (g.children(curr) || []).filter((c) => c !== curr).forEach((c) => queue.push(c));
2626
2667
  }
2627
- return result;
2668
+ return result2;
2628
2669
  };
2629
2670
  const rawClusterMap = /* @__PURE__ */ new Map();
2630
2671
  clusterNodes.forEach((v2) => {
@@ -2698,7 +2739,8 @@ var dagre = (() => {
2698
2739
  }
2699
2740
  });
2700
2741
  const layoutG = buildLayoutGraph(g);
2701
- runLayout(layoutG, time2, opts);
2742
+ const result = runLayout(layoutG, time2, opts, (_a = previousLayouts.get(g)) != null ? _a : null);
2743
+ previousLayouts.set(g, result);
2702
2744
  updateInputGraph(g, layoutG);
2703
2745
  proxyEdgeKeys.forEach((key) => {
2704
2746
  const sep2 = key.indexOf("\0");
@@ -2707,9 +2749,9 @@ var dagre = (() => {
2707
2749
  if (g.hasEdge(effV, effW)) g.removeEdge(effV, effW);
2708
2750
  });
2709
2751
  isolatedClusters.forEach(({ clusterId, subgraph, bounds, removedNodes, removedEdges }) => {
2710
- var _a, _b;
2752
+ var _a2, _b;
2711
2753
  const clusterNode = g.node(clusterId);
2712
- const clusterX = (_a = clusterNode == null ? void 0 : clusterNode.x) != null ? _a : 0;
2754
+ const clusterX = (_a2 = clusterNode == null ? void 0 : clusterNode.x) != null ? _a2 : 0;
2713
2755
  const clusterY = (_b = clusterNode == null ? void 0 : clusterNode.y) != null ? _b : 0;
2714
2756
  const subgraphCenterX = (bounds.minX + bounds.maxX) / 2;
2715
2757
  const subgraphCenterY = (bounds.minY + bounds.maxY) / 2;
@@ -2732,12 +2774,12 @@ var dagre = (() => {
2732
2774
  delete clusterNode._dagreClusterSubgraph;
2733
2775
  });
2734
2776
  clusterNodes.forEach((v2) => {
2735
- var _a, _b;
2777
+ var _a2, _b;
2736
2778
  const node = g.node(v2);
2737
2779
  const bounds = clusterBounds[v2];
2738
2780
  if (node && node.rankdir && node._dagreClusterSubgraph && bounds) {
2739
2781
  const subgraph = node._dagreClusterSubgraph;
2740
- const parentX = (_a = node.x) != null ? _a : 0;
2782
+ const parentX = (_a2 = node.x) != null ? _a2 : 0;
2741
2783
  const parentY = (_b = node.y) != null ? _b : 0;
2742
2784
  const subgraphCenterX = (bounds.minX + bounds.maxX) / 2;
2743
2785
  const subgraphCenterY = (bounds.minY + bounds.maxY) / 2;
@@ -2756,14 +2798,14 @@ var dagre = (() => {
2756
2798
  }
2757
2799
  });
2758
2800
  }
2759
- function runLayout(g, time2, opts) {
2760
- if ((opts == null ? void 0 : opts.useDynamic) === false) {
2761
- _oldGraph = null;
2762
- _rawOldNodes = null;
2763
- }
2801
+ function runLayout(g, time2, opts, previous = null) {
2802
+ var _a, _b;
2803
+ const dynamic = (opts == null ? void 0 : opts.useDynamic) !== false;
2804
+ const oldGraph = dynamic ? (_a = previous == null ? void 0 : previous.graph) != null ? _a : null : null;
2805
+ const rawOldNodes = dynamic ? (_b = previous == null ? void 0 : previous.rawNodes) != null ? _b : null : null;
2764
2806
  time2(" makeSpaceForEdgeLabels", () => makeSpaceForEdgeLabels(g));
2765
2807
  time2(" removeSelfEdges", () => removeSelfEdges(g));
2766
- time2(" acyclic", () => run(g, _oldGraph));
2808
+ time2(" acyclic", () => run(g, oldGraph));
2767
2809
  time2(" nestingGraph.run", () => run3(g));
2768
2810
  time2(" rank", () => rank_default(asNonCompoundGraph(g)));
2769
2811
  time2(" injectEdgeLabelProxies", () => injectEdgeLabelProxies(g));
@@ -2775,12 +2817,12 @@ var dagre = (() => {
2775
2817
  time2(" normalize.run", () => run2(g));
2776
2818
  time2(" parentDummyChains", () => parent_dummy_chains_default(g));
2777
2819
  time2(" addBorderSegments", () => add_border_segments_default(g));
2778
- time2(" order", () => order(g, opts, _rawOldNodes));
2820
+ time2(" order", () => order(g, opts, rawOldNodes));
2779
2821
  time2(" insertSelfEdges", () => insertSelfEdges(g));
2780
2822
  time2(" adjustCoordinateSystem", () => adjust(g));
2781
2823
  time2(" position", () => position(g, opts.corePath));
2782
2824
  time2(" positionSelfEdges", () => positionSelfEdges(g));
2783
- _rawOldNodes = JSON.parse(JSON.stringify(g._nodes));
2825
+ const rawNodes = JSON.parse(JSON.stringify(g._nodes));
2784
2826
  time2(" removeBorderNodes", () => removeBorderNodes(g));
2785
2827
  time2(" normalize.undo", () => undo2(g));
2786
2828
  time2(" fixupEdgeLabelCoords", () => fixupEdgeLabelCoords(g));
@@ -2789,7 +2831,7 @@ var dagre = (() => {
2789
2831
  time2(" assignNodeIntersects", () => assignNodeIntersects(g));
2790
2832
  time2(" reversePoints", () => reversePointsForReversedEdges(g));
2791
2833
  time2(" acyclic.undo", () => undo(g));
2792
- _oldGraph = g;
2834
+ return { graph: g, rawNodes };
2793
2835
  }
2794
2836
  function updateInputGraph(inputGraph, layoutGraph) {
2795
2837
  inputGraph.nodes().forEach((v2) => {
@@ -2834,7 +2876,7 @@ var dagre = (() => {
2834
2876
  };
2835
2877
  var edgeAttrs = ["labelpos"];
2836
2878
  function buildLayoutGraph(inputGraph) {
2837
- const g = new p({ multigraph: true, compound: true });
2879
+ const g = new Graph({ multigraph: true, compound: true });
2838
2880
  const graph = canonicalize(inputGraph.graph());
2839
2881
  g.setGraph(Object.assign(
2840
2882
  {},
@@ -3144,7 +3186,7 @@ var dagre = (() => {
3144
3186
  // lib/debug.ts
3145
3187
  function debugOrdering(graph) {
3146
3188
  const layerMatrix = buildLayerMatrix(graph);
3147
- const h = new p({ compound: true, multigraph: true }).setGraph({});
3189
+ const h = new Graph({ compound: true, multigraph: true }).setGraph({});
3148
3190
  graph.nodes().forEach((node) => {
3149
3191
  h.setNode(node, { label: node });
3150
3192
  h.setParent(node, "layer" + graph.node(node).rank);
@@ -3164,7 +3206,7 @@ var dagre = (() => {
3164
3206
  // index.ts
3165
3207
  var util = { time, notime };
3166
3208
  var dagre = {
3167
- graphlib: graphlib_esm_exports,
3209
+ graphlib: graph_lib_exports,
3168
3210
  version,
3169
3211
  layout,
3170
3212
  debug: debugOrdering,