Package: effect
Module: Graph
Creates an iterator over external nodes (nodes without edges in the specified direction).
Details
External nodes have no outgoing edges (direction: "outgoing") or no
incoming edges (direction: "incoming"). These are useful for finding
sources, sinks, or isolated nodes.
Example (Iterating external nodes)
import { Graph } from "effect"
const graph = Graph.directed<string, number>((mutable) => {
const source = Graph.addNode(mutable, "source") // 0 - no incoming
const middle = Graph.addNode(mutable, "middle") // 1 - has both
const sink = Graph.addNode(mutable, "sink") // 2 - no outgoing
const isolated = Graph.addNode(mutable, "isolated") // 3 - no edges
Graph.addEdge(mutable, source, middle, 1)
Graph.addEdge(mutable, middle, sink, 2)
})
// Nodes with no outgoing edges (sinks + isolated)
const sinks = Array.from(
Graph.indices(Graph.externals(graph, { direction: "outgoing" }))
)
console.log(sinks) // [2, 3]
// Nodes with no incoming edges (sources + isolated)
const sources = Array.from(
Graph.indices(Graph.externals(graph, { direction: "incoming" }))
)
console.log(sources) // [0, 3]
Signature
declare const externals: { (config?: ExternalsConfig): <N, E, T extends Kind = "directed">(graph: Graph<N, E, T> | MutableGraph<N, E, T>) => NodeWalker<N>; <N, E, T extends Kind = "directed">(graph: Graph<N, E, T> | MutableGraph<N, E, T>, config?: ExternalsConfig): NodeWalker<N>; }
Since v3.18.0