Raxol. Plugins. Lifecycle. Dependencies
(Raxol v2.6.1)
View Source
Dependency validation, cycle detection, and load-order resolution for plugins.
A declared dependency is either a bare name (atom or string) or a
{name, requirement} tuple whose requirement is a Version requirement
string such as ">= 1.0.0" or "~> 2.1". Names normalize to strings.
Three guarantees:
resolve_plugin_order/1returns a topological order, so a plugin is never loaded before something it depends on.check_for_circular_dependency/2walks the transitive graph, so an indirect cycle (a -> b -> a) is rejected, not just self-reference.check_dependencies/2honours the requirement half of a dependency tuple, so a plugin cannot be satisfied by an incompatible version.
Summary
Functions
Verifies every declared dependency is loaded and version-compatible.
Rejects a plugin whose dependencies close a cycle, directly or transitively.
Orders plugins so each one follows every dependency it declares.
Types
Functions
Verifies every declared dependency is loaded and version-compatible.
Returns :ok, {:error, :missing_dependencies, missing, chain}, or
{:error, :version_mismatch, mismatches, chain}.
Rejects a plugin whose dependencies close a cycle, directly or transitively.
Orders plugins so each one follows every dependency it declares.
Dependencies outside the given batch are assumed already loaded and place no
constraint on this ordering. Returns {:ok, names} or
{:error, :circular_dependency, cycle, []}.