-module(lightspeed@component@nested_lifecycle). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/lightspeed/component/nested_lifecycle.gleam"). -export([start/2, scoped_event/3, child_target/2, child/2, mount_child/4, update_child/3, suspend_child/2, resume_child/2, fail_child/3, terminate_child/2, route_event/2, parent_id/1, route/1, parent_target/1, parent_mount_count/1, children/1, patches/1, lifecycle_events/1, routed_events/1, authority_violations/1, child_lifecycle_label/1, route_decision_label/1, child_signature/1, runtime_signature/1, stable_child_identity/1, authority_invariants/1, subtree_isolated/2]). -export_type([child_lifecycle/0, event_scope/0, scoped_event/0, route_decision/0, child_node/0, runtime/0]). -if(?OTP_RELEASE >= 27). -define(MODULEDOC(Str), -moduledoc(Str)). -define(DOC(Str), -doc(Str)). -else. -define(MODULEDOC(Str), -compile([])). -define(DOC(Str), -compile([])). -endif. ?MODULEDOC(" First-class nested LiveView lifecycle primitives for M55.\n"). -type child_lifecycle() :: mounted | suspended | {failed, binary()} | terminated. -type event_scope() :: parent_scope | {child_scope, binary()}. -type scoped_event() :: {scoped_event, event_scope(), binary(), binary()}. -type route_decision() :: routed_to_parent | {routed_to_child, binary()} | {rejected, binary()}. -type child_node() :: {child_node, binary(), binary(), child_lifecycle(), integer(), integer(), binary()}. -opaque runtime() :: {runtime, binary(), binary(), binary(), integer(), list(child_node()), list(lightspeed@diff:patch()), list(binary()), list(binary()), list(binary())}. -file("src/lightspeed/component/nested_lifecycle.gleam", 62). ?DOC(" Start one parent runtime.\n"). -spec start(binary(), binary()) -> {runtime(), list(lightspeed@diff:patch())}. start(Parent_id, Route) -> Target = <<"#parent-"/utf8, Parent_id/binary>>, Patch = {replace, Target, <<<<"
>/binary, "\">
"/utf8>>}, Runtime = {runtime, Parent_id, Route, Target, 1, [], [Patch], [<<"parent_mounted:"/utf8, Route/binary>>], [], []}, {Runtime, [Patch]}. -file("src/lightspeed/component/nested_lifecycle.gleam", 86). ?DOC(" Build one scoped event.\n"). -spec scoped_event(event_scope(), binary(), binary()) -> scoped_event(). scoped_event(Scope, Name, Payload) -> {scoped_event, Scope, Name, Payload}. -file("src/lightspeed/component/nested_lifecycle.gleam", 708). -spec append_ordered_to_rev(list(HNB), list(HNB)) -> list(HNB). append_ordered_to_rev(Rev, Ordered) -> case Ordered of [] -> Rev; [Value | Rest] -> append_ordered_to_rev([Value | Rev], Rest) end. -file("src/lightspeed/component/nested_lifecycle.gleam", 502). ?DOC(" Child patch target.\n"). -spec child_target(runtime(), binary()) -> binary(). child_target(Runtime, Child_id) -> <<<<(erlang:element(4, Runtime))/binary, "/child-"/utf8>>/binary, Child_id/binary>>. -file("src/lightspeed/component/nested_lifecycle.gleam", 635). -spec child_identity(binary(), binary()) -> binary(). child_identity(Parent_id, Child_id) -> <<<>/binary, Child_id/binary>>. -file("src/lightspeed/component/nested_lifecycle.gleam", 653). -spec replace_child(list(child_node()), binary(), child_node()) -> list(child_node()). replace_child(Children_rev, Child_id, Replacement) -> case Children_rev of [] -> []; [Child | Rest] -> case erlang:element(2, Child) =:= Child_id of true -> [Replacement | Rest]; false -> [Child | replace_child(Rest, Child_id, Replacement)] end end. -file("src/lightspeed/component/nested_lifecycle.gleam", 639). -spec find_child(list(child_node()), binary()) -> gleam@option:option(child_node()). find_child(Children_rev, Child_id) -> case Children_rev of [] -> none; [Child | Rest] -> case erlang:element(2, Child) =:= Child_id of true -> {some, Child}; false -> find_child(Rest, Child_id) end end. -file("src/lightspeed/component/nested_lifecycle.gleam", 517). ?DOC(" One child by id.\n"). -spec child(runtime(), binary()) -> gleam@option:option(child_node()). child(Runtime, Child_id) -> find_child(erlang:element(6, Runtime), Child_id). -file("src/lightspeed/component/nested_lifecycle.gleam", 95). ?DOC(" Mount a child boundary with stable identity.\n"). -spec mount_child(runtime(), binary(), binary(), binary()) -> {runtime(), list(lightspeed@diff:patch())}. mount_child(Runtime, Child_id, Fingerprint, Html) -> case child(Runtime, Child_id) of {some, Existing} -> case erlang:element(4, Existing) of terminated -> Remounted = {child_node, erlang:element(2, Existing), erlang:element(3, Existing), mounted, erlang:element(5, Existing) + 1, erlang:element(6, Existing), Fingerprint}, Patch = {replace, child_target(Runtime, Child_id), Html}, {{runtime, erlang:element(2, Runtime), erlang:element(3, Runtime), erlang:element(4, Runtime), erlang:element(5, Runtime), replace_child( erlang:element(6, Runtime), Child_id, Remounted ), append_ordered_to_rev( erlang:element(7, Runtime), [Patch] ), append_ordered_to_rev( erlang:element(8, Runtime), [<<"child_remounted:"/utf8, Child_id/binary>>] ), erlang:element(9, Runtime), erlang:element(10, Runtime)}, [Patch]}; mounted -> Resumed = {child_node, erlang:element(2, Existing), erlang:element(3, Existing), mounted, erlang:element(5, Existing), erlang:element(6, Existing), Fingerprint}, Patch@1 = {update_segments, child_target(Runtime, Child_id), Fingerprint, [lightspeed@diff:slot(<<"html"/utf8>>, Html)]}, {{runtime, erlang:element(2, Runtime), erlang:element(3, Runtime), erlang:element(4, Runtime), erlang:element(5, Runtime), replace_child( erlang:element(6, Runtime), Child_id, Resumed ), append_ordered_to_rev( erlang:element(7, Runtime), [Patch@1] ), append_ordered_to_rev( erlang:element(8, Runtime), [<<"child_mounted_existing:"/utf8, Child_id/binary>>] ), erlang:element(9, Runtime), erlang:element(10, Runtime)}, [Patch@1]}; suspended -> Resumed = {child_node, erlang:element(2, Existing), erlang:element(3, Existing), mounted, erlang:element(5, Existing), erlang:element(6, Existing), Fingerprint}, Patch@1 = {update_segments, child_target(Runtime, Child_id), Fingerprint, [lightspeed@diff:slot(<<"html"/utf8>>, Html)]}, {{runtime, erlang:element(2, Runtime), erlang:element(3, Runtime), erlang:element(4, Runtime), erlang:element(5, Runtime), replace_child( erlang:element(6, Runtime), Child_id, Resumed ), append_ordered_to_rev( erlang:element(7, Runtime), [Patch@1] ), append_ordered_to_rev( erlang:element(8, Runtime), [<<"child_mounted_existing:"/utf8, Child_id/binary>>] ), erlang:element(9, Runtime), erlang:element(10, Runtime)}, [Patch@1]}; {failed, _} -> Resumed = {child_node, erlang:element(2, Existing), erlang:element(3, Existing), mounted, erlang:element(5, Existing), erlang:element(6, Existing), Fingerprint}, Patch@1 = {update_segments, child_target(Runtime, Child_id), Fingerprint, [lightspeed@diff:slot(<<"html"/utf8>>, Html)]}, {{runtime, erlang:element(2, Runtime), erlang:element(3, Runtime), erlang:element(4, Runtime), erlang:element(5, Runtime), replace_child( erlang:element(6, Runtime), Child_id, Resumed ), append_ordered_to_rev( erlang:element(7, Runtime), [Patch@1] ), append_ordered_to_rev( erlang:element(8, Runtime), [<<"child_mounted_existing:"/utf8, Child_id/binary>>] ), erlang:element(9, Runtime), erlang:element(10, Runtime)}, [Patch@1]} end; none -> Created = {child_node, Child_id, child_identity(erlang:element(2, Runtime), Child_id), mounted, 1, 0, Fingerprint}, Patch@2 = {replace, child_target(Runtime, Child_id), Html}, {{runtime, erlang:element(2, Runtime), erlang:element(3, Runtime), erlang:element(4, Runtime), erlang:element(5, Runtime), [Created | erlang:element(6, Runtime)], append_ordered_to_rev(erlang:element(7, Runtime), [Patch@2]), append_ordered_to_rev( erlang:element(8, Runtime), [<<"child_mounted:"/utf8, Child_id/binary>>] ), erlang:element(9, Runtime), erlang:element(10, Runtime)}, [Patch@2]} end. -file("src/lightspeed/component/nested_lifecycle.gleam", 198). ?DOC(" Update one mounted child without remounting the parent.\n"). -spec update_child(runtime(), binary(), binary()) -> {runtime(), list(lightspeed@diff:patch())}. update_child(Runtime, Child_id, Html) -> case child(Runtime, Child_id) of {some, Existing} -> case erlang:element(4, Existing) of mounted -> Updated = {child_node, erlang:element(2, Existing), erlang:element(3, Existing), erlang:element(4, Existing), erlang:element(5, Existing), erlang:element(6, Existing) + 1, erlang:element(7, Existing)}, Patch = {update_segments, child_target(Runtime, Child_id), erlang:element(7, Updated), [lightspeed@diff:slot(<<"html"/utf8>>, Html)]}, {{runtime, erlang:element(2, Runtime), erlang:element(3, Runtime), erlang:element(4, Runtime), erlang:element(5, Runtime), replace_child( erlang:element(6, Runtime), Child_id, Updated ), append_ordered_to_rev( erlang:element(7, Runtime), [Patch] ), append_ordered_to_rev( erlang:element(8, Runtime), [<<"child_updated:"/utf8, Child_id/binary>>] ), erlang:element(9, Runtime), erlang:element(10, Runtime)}, [Patch]}; suspended -> {{runtime, erlang:element(2, Runtime), erlang:element(3, Runtime), erlang:element(4, Runtime), erlang:element(5, Runtime), erlang:element(6, Runtime), erlang:element(7, Runtime), erlang:element(8, Runtime), erlang:element(9, Runtime), append_ordered_to_rev( erlang:element(10, Runtime), [<<"update_blocked:suspended:"/utf8, Child_id/binary>>] )}, []}; {failed, Reason} -> {{runtime, erlang:element(2, Runtime), erlang:element(3, Runtime), erlang:element(4, Runtime), erlang:element(5, Runtime), erlang:element(6, Runtime), erlang:element(7, Runtime), erlang:element(8, Runtime), erlang:element(9, Runtime), append_ordered_to_rev( erlang:element(10, Runtime), [<<<<<<"update_blocked:failed:"/utf8, Child_id/binary>>/binary, ":"/utf8>>/binary, Reason/binary>>] )}, []}; terminated -> {{runtime, erlang:element(2, Runtime), erlang:element(3, Runtime), erlang:element(4, Runtime), erlang:element(5, Runtime), erlang:element(6, Runtime), erlang:element(7, Runtime), erlang:element(8, Runtime), erlang:element(9, Runtime), append_ordered_to_rev( erlang:element(10, Runtime), [<<"update_blocked:terminated:"/utf8, Child_id/binary>>] )}, []} end; none -> {{runtime, erlang:element(2, Runtime), erlang:element(3, Runtime), erlang:element(4, Runtime), erlang:element(5, Runtime), erlang:element(6, Runtime), erlang:element(7, Runtime), erlang:element(8, Runtime), erlang:element(9, Runtime), append_ordered_to_rev( erlang:element(10, Runtime), [<<"update_blocked:unknown_child:"/utf8, Child_id/binary>>] )}, []} end. -file("src/lightspeed/component/nested_lifecycle.gleam", 284). ?DOC(" Suspend one child subtree.\n"). -spec suspend_child(runtime(), binary()) -> runtime(). suspend_child(Runtime, Child_id) -> case child(Runtime, Child_id) of {some, Existing} -> {runtime, erlang:element(2, Runtime), erlang:element(3, Runtime), erlang:element(4, Runtime), erlang:element(5, Runtime), replace_child( erlang:element(6, Runtime), Child_id, {child_node, erlang:element(2, Existing), erlang:element(3, Existing), suspended, erlang:element(5, Existing), erlang:element(6, Existing), erlang:element(7, Existing)} ), erlang:element(7, Runtime), append_ordered_to_rev( erlang:element(8, Runtime), [<<"child_suspended:"/utf8, Child_id/binary>>] ), erlang:element(9, Runtime), erlang:element(10, Runtime)}; none -> Runtime end. -file("src/lightspeed/component/nested_lifecycle.gleam", 306). ?DOC(" Resume one suspended child subtree.\n"). -spec resume_child(runtime(), binary()) -> runtime(). resume_child(Runtime, Child_id) -> case child(Runtime, Child_id) of {some, Existing} -> case erlang:element(4, Existing) of suspended -> {runtime, erlang:element(2, Runtime), erlang:element(3, Runtime), erlang:element(4, Runtime), erlang:element(5, Runtime), replace_child( erlang:element(6, Runtime), Child_id, {child_node, erlang:element(2, Existing), erlang:element(3, Existing), mounted, erlang:element(5, Existing), erlang:element(6, Existing), erlang:element(7, Existing)} ), erlang:element(7, Runtime), append_ordered_to_rev( erlang:element(8, Runtime), [<<"child_resumed:"/utf8, Child_id/binary>>] ), erlang:element(9, Runtime), erlang:element(10, Runtime)}; _ -> Runtime end; none -> Runtime end. -file("src/lightspeed/component/nested_lifecycle.gleam", 333). ?DOC(" Fail one child subtree while keeping siblings alive.\n"). -spec fail_child(runtime(), binary(), binary()) -> {runtime(), list(lightspeed@diff:patch())}. fail_child(Runtime, Child_id, Reason) -> case child(Runtime, Child_id) of {some, Existing} -> Failed = {child_node, erlang:element(2, Existing), erlang:element(3, Existing), {failed, Reason}, erlang:element(5, Existing), erlang:element(6, Existing), erlang:element(7, Existing)}, Patch = {replace, child_target(Runtime, Child_id), <<<<<<<<"
>/binary, "\" data-state=\"failed\">"/utf8>>/binary, Reason/binary>>/binary, "
"/utf8>>}, {{runtime, erlang:element(2, Runtime), erlang:element(3, Runtime), erlang:element(4, Runtime), erlang:element(5, Runtime), replace_child(erlang:element(6, Runtime), Child_id, Failed), append_ordered_to_rev(erlang:element(7, Runtime), [Patch]), append_ordered_to_rev( erlang:element(8, Runtime), [<<<<<<"child_failed:"/utf8, Child_id/binary>>/binary, ":"/utf8>>/binary, Reason/binary>>] ), erlang:element(9, Runtime), erlang:element(10, Runtime)}, [Patch]}; none -> {{runtime, erlang:element(2, Runtime), erlang:element(3, Runtime), erlang:element(4, Runtime), erlang:element(5, Runtime), erlang:element(6, Runtime), erlang:element(7, Runtime), erlang:element(8, Runtime), erlang:element(9, Runtime), append_ordered_to_rev( erlang:element(10, Runtime), [<<"fail_blocked:unknown_child:"/utf8, Child_id/binary>>] )}, []} end. -file("src/lightspeed/component/nested_lifecycle.gleam", 381). ?DOC(" Terminate one child subtree.\n"). -spec terminate_child(runtime(), binary()) -> {runtime(), list(lightspeed@diff:patch())}. terminate_child(Runtime, Child_id) -> case child(Runtime, Child_id) of {some, Existing} -> case erlang:element(4, Existing) of terminated -> {Runtime, []}; _ -> Terminated = {child_node, erlang:element(2, Existing), erlang:element(3, Existing), terminated, erlang:element(5, Existing), erlang:element(6, Existing), erlang:element(7, Existing)}, Patch = {remove, child_target(Runtime, Child_id)}, {{runtime, erlang:element(2, Runtime), erlang:element(3, Runtime), erlang:element(4, Runtime), erlang:element(5, Runtime), replace_child( erlang:element(6, Runtime), Child_id, Terminated ), append_ordered_to_rev( erlang:element(7, Runtime), [Patch] ), append_ordered_to_rev( erlang:element(8, Runtime), [<<"child_terminated:"/utf8, Child_id/binary>>] ), erlang:element(9, Runtime), erlang:element(10, Runtime)}, [Patch]} end; none -> {{runtime, erlang:element(2, Runtime), erlang:element(3, Runtime), erlang:element(4, Runtime), erlang:element(5, Runtime), erlang:element(6, Runtime), erlang:element(7, Runtime), erlang:element(8, Runtime), erlang:element(9, Runtime), append_ordered_to_rev( erlang:element(10, Runtime), [<<"terminate_blocked:unknown_child:"/utf8, Child_id/binary>>] )}, []} end. -file("src/lightspeed/component/nested_lifecycle.gleam", 619). -spec route_rejected(runtime(), binary(), binary()) -> {runtime(), route_decision()}. route_rejected(Runtime, Reason, Name) -> {{runtime, erlang:element(2, Runtime), erlang:element(3, Runtime), erlang:element(4, Runtime), erlang:element(5, Runtime), erlang:element(6, Runtime), erlang:element(7, Runtime), erlang:element(8, Runtime), append_ordered_to_rev( erlang:element(9, Runtime), [<<<<<<"rejected:"/utf8, Reason/binary>>/binary, ":"/utf8>>/binary, Name/binary>>] ), erlang:element(10, Runtime)}, {rejected, Reason}}. -file("src/lightspeed/component/nested_lifecycle.gleam", 429). ?DOC(" Route one scoped event.\n"). -spec route_event(runtime(), scoped_event()) -> {runtime(), route_decision()}. route_event(Runtime, Scoped) -> case erlang:element(2, Scoped) of parent_scope -> {{runtime, erlang:element(2, Runtime), erlang:element(3, Runtime), erlang:element(4, Runtime), erlang:element(5, Runtime), erlang:element(6, Runtime), erlang:element(7, Runtime), erlang:element(8, Runtime), append_ordered_to_rev( erlang:element(9, Runtime), [<<"routed:parent:"/utf8, (erlang:element(3, Scoped))/binary>>] ), erlang:element(10, Runtime)}, routed_to_parent}; {child_scope, Child_id} -> case child(Runtime, Child_id) of none -> route_rejected( Runtime, <<"unknown_child:"/utf8, Child_id/binary>>, erlang:element(3, Scoped) ); {some, Existing} -> case erlang:element(4, Existing) of mounted -> {{runtime, erlang:element(2, Runtime), erlang:element(3, Runtime), erlang:element(4, Runtime), erlang:element(5, Runtime), erlang:element(6, Runtime), erlang:element(7, Runtime), erlang:element(8, Runtime), append_ordered_to_rev( erlang:element(9, Runtime), [<<<<<<"routed:child:"/utf8, Child_id/binary>>/binary, ":"/utf8>>/binary, (erlang:element(3, Scoped))/binary>>] ), erlang:element(10, Runtime)}, {routed_to_child, Child_id}}; suspended -> route_rejected( Runtime, <<"child_suspended:"/utf8, Child_id/binary>>, erlang:element(3, Scoped) ); {failed, Reason} -> route_rejected( Runtime, <<<<<<"child_failed:"/utf8, Child_id/binary>>/binary, ":"/utf8>>/binary, Reason/binary>>, erlang:element(3, Scoped) ); terminated -> route_rejected( Runtime, <<"child_terminated:"/utf8, Child_id/binary>>, erlang:element(3, Scoped) ) end end end. -file("src/lightspeed/component/nested_lifecycle.gleam", 487). ?DOC(" Parent id.\n"). -spec parent_id(runtime()) -> binary(). parent_id(Runtime) -> erlang:element(2, Runtime). -file("src/lightspeed/component/nested_lifecycle.gleam", 492). ?DOC(" Parent route.\n"). -spec route(runtime()) -> binary(). route(Runtime) -> erlang:element(3, Runtime). -file("src/lightspeed/component/nested_lifecycle.gleam", 497). ?DOC(" Parent patch target.\n"). -spec parent_target(runtime()) -> binary(). parent_target(Runtime) -> erlang:element(4, Runtime). -file("src/lightspeed/component/nested_lifecycle.gleam", 507). ?DOC(" Parent mount count.\n"). -spec parent_mount_count(runtime()) -> integer(). parent_mount_count(Runtime) -> erlang:element(5, Runtime). -file("src/lightspeed/component/nested_lifecycle.gleam", 512). ?DOC(" Children in insertion order.\n"). -spec children(runtime()) -> list(child_node()). children(Runtime) -> lists:reverse(erlang:element(6, Runtime)). -file("src/lightspeed/component/nested_lifecycle.gleam", 522). ?DOC(" All emitted patches in execution order.\n"). -spec patches(runtime()) -> list(lightspeed@diff:patch()). patches(Runtime) -> lists:reverse(erlang:element(7, Runtime)). -file("src/lightspeed/component/nested_lifecycle.gleam", 527). ?DOC(" Lifecycle events in execution order.\n"). -spec lifecycle_events(runtime()) -> list(binary()). lifecycle_events(Runtime) -> lists:reverse(erlang:element(8, Runtime)). -file("src/lightspeed/component/nested_lifecycle.gleam", 532). ?DOC(" Routed event labels in execution order.\n"). -spec routed_events(runtime()) -> list(binary()). routed_events(Runtime) -> lists:reverse(erlang:element(9, Runtime)). -file("src/lightspeed/component/nested_lifecycle.gleam", 537). ?DOC(" Authority violation labels in execution order.\n"). -spec authority_violations(runtime()) -> list(binary()). authority_violations(Runtime) -> lists:reverse(erlang:element(10, Runtime)). -file("src/lightspeed/component/nested_lifecycle.gleam", 542). ?DOC(" Child lifecycle label.\n"). -spec child_lifecycle_label(child_lifecycle()) -> binary(). child_lifecycle_label(Lifecycle) -> case Lifecycle of mounted -> <<"mounted"/utf8>>; suspended -> <<"suspended"/utf8>>; {failed, Reason} -> <<"failed:"/utf8, Reason/binary>>; terminated -> <<"terminated"/utf8>> end. -file("src/lightspeed/component/nested_lifecycle.gleam", 552). ?DOC(" Routing decision label.\n"). -spec route_decision_label(route_decision()) -> binary(). route_decision_label(Decision) -> case Decision of routed_to_parent -> <<"routed_to_parent"/utf8>>; {routed_to_child, Child_id} -> <<"routed_to_child:"/utf8, Child_id/binary>>; {rejected, Reason} -> <<"rejected:"/utf8, Reason/binary>> end. -file("src/lightspeed/component/nested_lifecycle.gleam", 736). -spec int_to_string(integer()) -> binary(). int_to_string(Value) -> erlang:integer_to_binary(Value). -file("src/lightspeed/component/nested_lifecycle.gleam", 561). ?DOC(" Child signature.\n"). -spec child_signature(child_node()) -> binary(). child_signature(Child) -> <<<<<<<<<<<<<<<<<<<<(erlang:element(2, Child))/binary, ":"/utf8>>/binary, (erlang:element(3, Child))/binary>>/binary, ":"/utf8>>/binary, (child_lifecycle_label(erlang:element(4, Child)))/binary>>/binary, ":mount="/utf8>>/binary, (int_to_string(erlang:element(5, Child)))/binary>>/binary, ":update="/utf8>>/binary, (int_to_string(erlang:element(6, Child)))/binary>>/binary, ":fp="/utf8>>/binary, (erlang:element(7, Child))/binary>>. -file("src/lightspeed/component/nested_lifecycle.gleam", 726). -spec join_with(binary(), list(binary())) -> binary(). join_with(Separator, Values) -> case Values of [] -> <<""/utf8>>; [First | Rest] -> gleam@list:fold( Rest, First, fun(Accumulator, Value) -> <<<>/binary, Value/binary>> end ) end. -file("src/lightspeed/component/nested_lifecycle.gleam", 576). ?DOC(" Runtime signature.\n"). -spec runtime_signature(runtime()) -> binary(). runtime_signature(Runtime) -> <<<<<<<<<<<<<<<<<<<<<<<<<<"parent="/utf8, (erlang:element( 2, Runtime ))/binary>>/binary, ":route="/utf8>>/binary, (erlang:element(3, Runtime))/binary>>/binary, ":mounts="/utf8>>/binary, (int_to_string( erlang:element(5, Runtime) ))/binary>>/binary, "|children="/utf8>>/binary, (join_with( <<","/utf8>>, gleam@list:map( children(Runtime), fun child_signature/1 ) ))/binary>>/binary, "|lifecycle="/utf8>>/binary, (join_with(<<","/utf8>>, lifecycle_events(Runtime)))/binary>>/binary, "|routed="/utf8>>/binary, (join_with(<<","/utf8>>, routed_events(Runtime)))/binary>>/binary, "|violations="/utf8>>/binary, (join_with(<<","/utf8>>, authority_violations(Runtime)))/binary>>. -file("src/lightspeed/component/nested_lifecycle.gleam", 715). -spec contains(list(binary()), binary()) -> boolean(). contains(Items, Value) -> case Items of [] -> false; [Item | Rest] -> case Item =:= Value of true -> true; false -> contains(Rest, Value) end end. -file("src/lightspeed/component/nested_lifecycle.gleam", 697). -spec identities_unique(list(child_node()), list(binary())) -> boolean(). identities_unique(Nodes, Seen) -> case Nodes of [] -> true; [Node | Rest] -> case contains(Seen, erlang:element(3, Node)) of true -> false; false -> identities_unique(Rest, [erlang:element(3, Node) | Seen]) end end. -file("src/lightspeed/component/nested_lifecycle.gleam", 686). -spec identities_stable(list(child_node()), binary()) -> boolean(). identities_stable(Nodes, Parent_id) -> case Nodes of [] -> true; [Node | Rest] -> (((erlang:element(3, Node) =:= child_identity( Parent_id, erlang:element(2, Node) )) andalso (erlang:element(5, Node) >= 1)) andalso (erlang:element(6, Node) >= 0)) andalso identities_stable(Rest, Parent_id) end. -file("src/lightspeed/component/nested_lifecycle.gleam", 594). ?DOC(" True when child identity contracts are stable and unique.\n"). -spec stable_child_identity(runtime()) -> boolean(). stable_child_identity(Runtime) -> Nodes = children(Runtime), identities_stable(Nodes, erlang:element(2, Runtime)) andalso identities_unique( Nodes, [] ). -file("src/lightspeed/component/nested_lifecycle.gleam", 600). ?DOC(" True when no authority invariants were violated.\n"). -spec authority_invariants(runtime()) -> boolean(). authority_invariants(Runtime) -> erlang:element(10, Runtime) =:= []. -file("src/lightspeed/component/nested_lifecycle.gleam", 668). -spec siblings_not_failed(list(child_node()), binary()) -> boolean(). siblings_not_failed(Nodes, Failed_child_id) -> case Nodes of [] -> true; [Node | Rest] -> case erlang:element(2, Node) =:= Failed_child_id of true -> siblings_not_failed(Rest, Failed_child_id); false -> case erlang:element(4, Node) of {failed, _} -> false; _ -> siblings_not_failed(Rest, Failed_child_id) end end end. -file("src/lightspeed/component/nested_lifecycle.gleam", 605). ?DOC(" True when one failed subtree does not corrupt siblings or parent mounts.\n"). -spec subtree_isolated(runtime(), binary()) -> boolean(). subtree_isolated(Runtime, Failed_child_id) -> case child(Runtime, Failed_child_id) of {some, Failed_child} -> case erlang:element(4, Failed_child) of {failed, _} -> (erlang:element(5, Runtime) =:= 1) andalso siblings_not_failed( children(Runtime), Failed_child_id ); _ -> false end; none -> false end.