# `MishkaInstaller.Event.EventHandler`
[🔗](https://github.com/mishka-group/mishka_installer/blob/v0.1.14/lib/event/event_handler.ex#L1)

Serialises (re)compilation of the per-event plugin modules.

Compile requests are queued and run one at a time so the dynamically generated event modules are
never created and destroyed concurrently.

The compiled module is per node (in-memory, not in Mnesia). On boot each node builds its own copy
from the replicated table; at runtime a local (re)compile is broadcast cluster-wide so every node
rebuilds the affected event from the replicated table — keeping `Hook.call/3` consistent across
the cluster.

## Telemetry

- `[:mishka_installer, :event, :compile]` — emitted after an event module is (re)built.
  Metadata: `:event`, `:result` (`:ok` | `:error`).
- `[:mishka_installer, :event, :synchronized]` — emitted once all events have started after the
  Mnesia store is ready. Metadata: `:node`.
- `[:mishka_installer, :event, :unregistered_gone]` — emitted on boot for each plugin unregistered
  because its extension no longer has its module (`MishkaInstaller.Event.Event.unregister_gone/1`).
  Metadata: `:plugin`, `:event`, `:extension`.

# `child_spec`

Returns a specification to start this module under a supervisor.

See `Supervisor`.

# `do_clean`

```elixir
@spec do_clean() :: :ok
```

# `do_compile`

```elixir
@spec do_compile(String.t(), atom(), boolean()) :: :ok
```

# `get`

```elixir
@spec get() :: keyword()
```

# `start_link`

---

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