Initial release.
Added
Mutare.Phoenix.LiveView.Navigation(:lv_nav) — swapspush_navigate↔
push_patchat the arity-2 form both share.Mutare.Phoenix.LiveView.Reply(:lv_reply) — drops a callback's optional
trailing tuple element ({:reply, payload, socket}→{:noreply, socket},
{:ok, socket, opts}→{:ok, socket}), gated on the enclosing module's
Phoenix.LiveView/Phoenix.LiveComponentbehaviour.Mutare.Phoenix.LiveView.Stream(:lv_stream) — swapsstream_insert↔
stream_deleteat the arity-3 form both share (swap); swaps
at: 0 ↔ at: -1onstream_insert/4(at— prepend vs append; the
covering rewrite supersedes core's integer leaves there via overlap
pruning); drops thelimit:entry ofstream/4/stream_insert/4
(limit). Areset: truedrop is deliberately absent — it is core's
boolean flip in disguise.Mutare.Phoenix.LiveView.Event(:lv_event) — removespush_event/3,4,
collapsing to the socket (orFunction.identity()when piped).Mutare.Phoenix.LiveView.SendUpdate(:lv_send_update) — removes
send_update/2,3/send_update_after/3,4, collapsing to a faithful
stand-in (:ok/ a freshmake_ref()for_after's timer ref)
(remove); and turnssend_update_after/3,4into an immediate
send_updatethat still yields a ref (immediate— deletes the delay).
The delay argument is a marked:timeoutposition, so core's literal
families skip it.Mutare.Phoenix.LiveView.Hook(:lv_hook) — removesattach_hook/4
(attach— the hook never runs) anddetach_hook/3(detach— the hook
keeps running), collapsing to the socket. Hook name and stage atoms are
routed:raw, so no core family mutates them.- Registers the LiveView compile-time DSL (
live/live_session,on_mount,
attr/slot/embed_templates) as:skipthroughMutare.CallRouting,
so declarations that run once as mutant 0 are left unmutated. Mutare.Phoenix.LiveView.all/0for splicing the six families into a
:mutatorslist, composing withMutare.Phoenix.all/0.