Raxol.Core.Runtime.Plugins.DependencyManager.Graph (Raxol v0.5.0)
View SourceHandles dependency graph building and cycle detection for plugin dependencies. Provides functionality for building dependency graphs and analyzing dependency chains.
Summary
Functions
Builds a dependency chain for error reporting.
Builds a dependency graph from plugin metadata.
Gets all dependencies for a plugin, including transitive dependencies.
Functions
Builds a dependency chain for error reporting.
Parameters
cycle
- List of plugin IDs forming a cyclegraph
- The dependency graph
Returns
- A list of plugin IDs representing the dependency chain
Example
iex> Graph.build_dependency_chain(["plugin_a", "plugin_b"], %{
"plugin_a" => [{"plugin_b", ">= 1.0.0", %{optional: false}}],
"plugin_b" => [{"plugin_a", ">= 1.0.0", %{optional: false}}]
})
["plugin_a", "plugin_b", "plugin_a"]
Builds a dependency graph from plugin metadata.
Parameters
plugins
- Map of plugin metadata, keyed by plugin ID
Returns
- A map representing the dependency graph, where each key is a plugin ID and the value
is a list of tuples containing dependency information:
{dep_id, version_req, opts}
Example
iex> Graph.build_dependency_graph(%{
"plugin_a" => %{dependencies: [{"plugin_b", ">= 1.0.0"}]},
"plugin_b" => %{dependencies: []}
})
%{
"plugin_a" => [{"plugin_b", ">= 1.0.0", %{optional: false}}],
"plugin_b" => []
}
Gets all dependencies for a plugin, including transitive dependencies.
Parameters
plugin_id
- The ID of the plugingraph
- The dependency graphvisited
- Set of already visited plugin IDs (for cycle detection)
Returns
{:ok, deps}
- List of all dependencies{:error, :circular_dependency, cycle}
- If a circular dependency is detected