Real OTP :digraph/:digraph_utils-backed topology projection over an
Ex4pm.Domain.ProcessModel record's :model map. Zero new hex deps.
Consumable two ways: directly via topology/1 (a plain map -> map
function), or wired as an Ash module calculation on a resource (see
Ex4pm.Domain.ProcessModel's calculate :topology declaration).
Summary
Functions
Callback implementation for Ash.Resource.Calculation.describe/1.
Callback implementation for Ash.Resource.Calculation.has_expression?/0.
Callback implementation for Ash.Resource.Calculation.load/3.
Callback implementation for Ash.Resource.Calculation.strict_loads?/0.
Projects %{"nodes" => [...], "edges" => [[from, to], ...]} (or the atom-
keyed equivalent) into %{topsort: [...] | nil, components: [[...], ...]}
using a real, temporary :digraph.graph().
Functions
Callback implementation for Ash.Resource.Calculation.describe/1.
Callback implementation for Ash.Resource.Calculation.has_expression?/0.
Callback implementation for Ash.Resource.Calculation.load/3.
Callback implementation for Ash.Resource.Calculation.strict_loads?/0.
Projects %{"nodes" => [...], "edges" => [[from, to], ...]} (or the atom-
keyed equivalent) into %{topsort: [...] | nil, components: [[...], ...]}
using a real, temporary :digraph.graph().
topsort is nil when the graph has a real cycle (honest -- :digraph
itself returns false for :topsort/1 on a cyclic graph, not a crash).