Immutable workspace graph wrapper built on top of Multigraph.
Summary
Types
@type external_dep() :: %{ app: atom(), requirement: String.t() | nil, opts: keyword(), original: tuple(), kind: Weld.Graph.Edge.kind() }
@type project_id() :: String.t()
@type t() :: %Weld.Graph{ classifications: %{ optional(project_id()) => Weld.Workspace.Project.classification() }, dag: Multigraph.t(), edges: %{optional({project_id(), project_id()}) => [Weld.Graph.Edge.t()]}, external_deps: %{optional(project_id()) => [external_dep()]}, projects: %{optional(project_id()) => Weld.Workspace.Project.t()}, publication_roles: %{ optional(project_id()) => Weld.Workspace.Project.publication_role() }, violations: [Weld.Violation.t()] }
Functions
@spec add_edge(t(), Weld.Graph.Edge.t()) :: t()
@spec add_external_dep(t(), project_id(), external_dep()) :: t()
@spec add_project(t(), Weld.Workspace.Project.t()) :: t()
@spec add_violation(t(), Weld.Violation.t()) :: t()
@spec edges(t()) :: [Weld.Graph.Edge.t()]
@spec external_deps(t(), project_id()) :: [external_dep()]
@spec new() :: t()
@spec path(t(), project_id(), project_id(), Weld.Graph.View.t()) :: {:ok, [project_id()]} | :no_path
@spec project(t(), project_id()) :: {:ok, Weld.Workspace.Project.t()} | :error
@spec projects(t()) :: [Weld.Workspace.Project.t()]
@spec reachable_from(t(), project_id() | [project_id()], Weld.Graph.View.t()) :: [ project_id() ]
@spec reaching(t(), project_id() | [project_id()], Weld.Graph.View.t()) :: [ project_id() ]
@spec subgraph(t(), Weld.Graph.View.t()) :: Multigraph.t()
@spec topo_sort(t(), Weld.Graph.View.t()) :: [project_id()]
@spec violations(t(), map()) :: [Weld.Violation.t()]