Raxol.Core.Runtime.Plugins.DependencyManager.Graph (Raxol v0.4.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