# `Scrypath.Phoenix`
[🔗](https://github.com/szTheory/scrypath/blob/v0.3.7/lib/scrypath/phoenix.ex#L1)

Optional request-edge helpers for Phoenix controllers and LiveView.

This module stays pure and data-only. It delegates browser-param normalization to
`Scrypath.QueryParams`, projects attempted values plus issues for rendering, and
round-trips normalized state back into Plug-friendly query params.

It does not execute searches, call application contexts, or own socket lifecycle.

# `form_data`

```elixir
@type form_data() :: %{
  values: map(),
  params: map(),
  form_errors: [form_error()],
  field_errors: %{optional(String.t()) =&gt; [form_error()]},
  errors: [form_error()]
}
```

# `form_error`

```elixir
@type form_error() :: %{
  optional(:field) =&gt; String.t(),
  code: atom(),
  message: String.t(),
  path: [String.t()],
  meta: map()
}
```

# `from_params`

```elixir
@spec from_params(map()) ::
  {:ok, Scrypath.QueryParams.t()}
  | {:error, Scrypath.QueryParams.normalize_error_map()}
```

Delegates request-edge normalization to `Scrypath.QueryParams.normalize/1`.

# `to_form_data`

```elixir
@spec to_form_data(Scrypath.QueryParams.t()) :: form_data()
```

Projects normalized query params into attempted values plus renderable issues.

# `to_form_data`

```elixir
@spec to_form_data(map(), Scrypath.QueryParams.normalize_error_map()) :: form_data()
```

Projects attempted request params plus structured request-edge issues.

# `to_query_params`

```elixir
@spec to_query_params(Scrypath.QueryParams.t()) :: map()
```

Converts normalized query params back into canonical Plug-friendly params.

This helper supports only the browser grammar accepted by
`Scrypath.QueryParams.normalize/1`.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
