Save current BZZZ config-ui state before CHORUS branding update
🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
51
install/config-ui/node_modules/@rtsao/scc/index.js
generated
vendored
Normal file
51
install/config-ui/node_modules/@rtsao/scc/index.js
generated
vendored
Normal file
@@ -0,0 +1,51 @@
|
||||
"use strict";
|
||||
|
||||
module.exports = tarjan;
|
||||
|
||||
// Adapted from https://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm#The_algorithm_in_pseudocode
|
||||
|
||||
function tarjan(graph) {
|
||||
const indices = new Map();
|
||||
const lowlinks = new Map();
|
||||
const onStack = new Set();
|
||||
const stack = [];
|
||||
const scc = [];
|
||||
let idx = 0;
|
||||
|
||||
function strongConnect(v) {
|
||||
indices.set(v, idx);
|
||||
lowlinks.set(v, idx);
|
||||
idx++;
|
||||
stack.push(v);
|
||||
onStack.add(v);
|
||||
|
||||
const deps = graph.get(v);
|
||||
for (const dep of deps) {
|
||||
if (!indices.has(dep)) {
|
||||
strongConnect(dep);
|
||||
lowlinks.set(v, Math.min(lowlinks.get(v), lowlinks.get(dep)));
|
||||
} else if (onStack.has(dep)) {
|
||||
lowlinks.set(v, Math.min(lowlinks.get(v), indices.get(dep)));
|
||||
}
|
||||
}
|
||||
|
||||
if (lowlinks.get(v) === indices.get(v)) {
|
||||
const vertices = new Set();
|
||||
let w = null;
|
||||
while (v !== w) {
|
||||
w = stack.pop();
|
||||
onStack.delete(w);
|
||||
vertices.add(w);
|
||||
}
|
||||
scc.push(vertices);
|
||||
}
|
||||
}
|
||||
|
||||
for (const v of graph.keys()) {
|
||||
if (!indices.has(v)) {
|
||||
strongConnect(v);
|
||||
}
|
||||
}
|
||||
|
||||
return scc;
|
||||
}
|
||||
Reference in New Issue
Block a user