# `Ash.Info.Manifest.Generator.TypeResolver`
[🔗](https://github.com/ash-project/ash/blob/v3.27.8/lib/ash/info/manifest/generator/type_resolver.ex#L5)

Resolves Ash types into `%Ash.Info.Manifest.Type{}` structs.

Handles all Ash type variants: primitives, NewTypes, arrays, enums, unions,
embedded resources, structs, maps, keywords, tuples, and custom types.

# `named_type_module?`

```elixir
@spec named_type_module?(term()) :: boolean()
```

Returns true if the given type is a named type module (Ash.Type.Enum or Ash.Type.NewType).

# `resolve`

```elixir
@spec resolve(term(), term()) :: Ash.Info.Manifest.Type.t()
```

Resolve an Ash type and its constraints into an `%Ash.Info.Manifest.Type{}`.

Named type modules (Ash.Type.Enum implementations and Ash.Type.NewType subtypes)
are resolved as `kind: :type_ref` references. Use `resolve_definition/1` to get
the full type definition for `spec.types`.

# `resolve_definition`

```elixir
@spec resolve_definition(atom()) :: Ash.Info.Manifest.Type.t()
```

Resolve a named type module into its full definition for `spec.types`.

Unlike `resolve/2`, which emits `kind: :type_ref` for named type modules,
this function expands the top-level type. Nested named type references
within the definition still become `:type_ref`.

---

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