Weld.Graph (weld v0.7.2)

Copy Markdown View Source

Immutable workspace graph wrapper built on top of Multigraph.

Summary

Types

external_dep()

@type external_dep() :: %{
  app: atom(),
  requirement: String.t() | nil,
  opts: keyword(),
  original: tuple(),
  kind: Weld.Graph.Edge.kind()
}

project_id()

@type project_id() :: String.t()

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

add_edge(graph, edge)

@spec add_edge(t(), Weld.Graph.Edge.t()) :: t()

add_external_dep(graph, project_id, dep)

@spec add_external_dep(t(), project_id(), external_dep()) :: t()

add_project(graph, project)

@spec add_project(t(), Weld.Workspace.Project.t()) :: t()

add_violation(graph, violation)

@spec add_violation(t(), Weld.Violation.t()) :: t()

edges(graph)

@spec edges(t()) :: [Weld.Graph.Edge.t()]

external_deps(graph, project_id)

@spec external_deps(t(), project_id()) :: [external_dep()]

new()

@spec new() :: t()

path(graph, from, to, view \\ :all)

@spec path(t(), project_id(), project_id(), Weld.Graph.View.t()) ::
  {:ok, [project_id()]} | :no_path

project(graph, project_id)

@spec project(t(), project_id()) :: {:ok, Weld.Workspace.Project.t()} | :error

projects(graph)

@spec projects(t()) :: [Weld.Workspace.Project.t()]

reachable_from(graph, project_ids, view)

@spec reachable_from(t(), project_id() | [project_id()], Weld.Graph.View.t()) :: [
  project_id()
]

reaching(graph, project_ids, view \\ :all)

@spec reaching(t(), project_id() | [project_id()], Weld.Graph.View.t()) :: [
  project_id()
]

subgraph(graph, view)

@spec subgraph(t(), Weld.Graph.View.t()) :: Multigraph.t()

topo_sort(graph, view \\ :all)

@spec topo_sort(t(), Weld.Graph.View.t()) :: [project_id()]

violations(graph, policy \\ %{})

@spec violations(t(), map()) :: [Weld.Violation.t()]