View Source HexSolver (HexSolver v0.2.3)
A version solver.
Link to this section Summary
Functions
Parses or converts a SemVer version or Elixir version requirement to an internal solver constraint
that can be returned by the HexSolver.Registry
or passed to HexSolver.run/4
.
Parses or converts a SemVer version or Elixir version requirement to an internal solver constraint
that can be returned by the HexSolver.Registry
or passed to HexSolver.run/4
.
Runs the version solver.
Link to this section Types
@opaque constraint()
@type dependency() :: %{ repo: repo(), name: package(), constraint: constraint(), optional: optional(), label: label(), dependencies: [dependency()] }
@type label() :: String.t()
@type optional() :: boolean()
@type package() :: String.t()
@type repo() :: String.t() | nil
Link to this section Functions
@spec parse_constraint!(String.t() | Version.t() | Version.Requirement.t()) :: constraint()
Parses or converts a SemVer version or Elixir version requirement to an internal solver constraint
that can be returned by the HexSolver.Registry
or passed to HexSolver.run/4
.
@spec parse_constraint(String.t() | Version.t() | Version.Requirement.t()) :: {:ok, constraint()} | :error
Parses or converts a SemVer version or Elixir version requirement to an internal solver constraint
that can be returned by the HexSolver.Registry
or passed to HexSolver.run/4
.
@spec run(module(), [dependency()], [locked()], [label()], [{:ansi, boolean()}]) :: {:ok, result()} | {:error, String.t()}
Runs the version solver.
Takes a HexSolver.Registry
implementation, a list of root dependencies, a list of locked
package versions, and a list of packages that are overridden by the root dependencies.
Depdendencies with sub-dependencies in the :dependencies
map field are not expected to be
packages in the registry. These dependencies are used to give better error messages for
when there are multiple declarations of the dependency with conflicting version requirements.
For example:
* Top dependency 1
* package ~> 1.0
* Top dependency 2
* package ~> 2.0
Locked dependencies are treated as optional dependencies with a single version as their constraint.
The overrides are a set of labels. If a dependency with a matching label is declared the solver will ignore that dependency unless it's a root dependency.
Returns a map of packages and their selected versions or a human readable explanation of why a solution could not be found.
options
Options
:ansi
- Iftrue
adds ANSI formatting to the failure message (Default:false
)