-module(mist@reload). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/mist/reload.gleam"). -export([wrap/1]). -export_type([message/1, reload_message/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. -type message(OKT) :: {register, gleam@erlang@process:subject(OKT), gleam@erlang@process:subject(nil)} | {broadcast, OKT}. -type reload_message() :: reloaded. -file("src/mist/reload.gleam", 106). -spec loop(OLC, reload_message(), mist:s_s_e_connection()) -> gleam@otp@actor:next(OLC, any()). loop(State, Message, Conn) -> case Message of reloaded -> _ = mist:send_event( Conn, mist:event(gleam_stdlib:identity(<<"reload"/utf8>>)) ), gleam@otp@actor:continue(State) end. -file("src/mist/reload.gleam", 93). ?DOC(" See `mist.send_file` to use this response type.\n"). -spec reload( gleam@erlang@process:subject(message(reload_message())), gleam@http@request:request(mist@internal@http:connection()) ) -> gleam@http@response:response(mist:response_data()). reload(Registry, Request) -> Init = fun(Self) -> nil = gleam@otp@actor:call( Registry, 10, fun(_capture) -> {register, Self, _capture} end ), {ok, gleam@otp@actor:initialised(nil)} end, mist:server_sent_events( Request, gleam@http@response:new(200), Init, fun loop/3 ). -file("src/mist/reload.gleam", 56). -spec debug_handler( gleam@erlang@process:subject(message(reload_message())), fun((gleam@http@request:request(mist@internal@http:connection())) -> gleam@http@response:response(mist:response_data())) ) -> fun((gleam@http@request:request(mist@internal@http:connection())) -> gleam@http@response:response(mist:response_data())). debug_handler(Registry, Handler) -> fun(Request) -> Response = case gleam@http@request:path_segments(Request) of [<<"_reload"/utf8>>] -> reload(Registry, Request); _ -> Handler(Request) end, case erlang:element(4, Response) of websocket -> Response; {bytes, Tree} -> case gleam@http@response:get_header( Response, <<"content-type"/utf8>> ) of {ok, <<"text/html"/utf8, _/binary>>} -> Binary = erlang:list_to_bitstring(Tree), case gleam@bit_array:to_string(Binary) of {ok, Html} -> _pipe = Html, _pipe@1 = gleam@string:replace( _pipe, <<""/utf8>>, <<""/utf8, ""/utf8>> ), _pipe@2 = gleam_stdlib:wrap_list(_pipe@1), _pipe@3 = {bytes, _pipe@2}, gleam@http@response:set_body(Response, _pipe@3); {error, _} -> Response end; _ -> Response end; chunked -> Response; {file, _, _, _} -> Response; server_sent_events -> Response end end. -file("src/mist/reload.gleam", 18). -spec wrap( fun((gleam@http@request:request(mist@internal@http:connection())) -> gleam@http@response:response(mist:response_data())) ) -> fun((gleam@http@request:request(mist@internal@http:connection())) -> gleam@http@response:response(mist:response_data())). wrap(Handler) -> Registry@1 = case begin _pipe = gleam@otp@actor:new(gleam@set:new()), _pipe@2 = gleam@otp@actor:on_message( _pipe, fun(State, Message) -> case Message of {register, Subscriber, Reply} -> gleam@otp@actor:send(Reply, nil), _pipe@1 = gleam@set:insert(State, Subscriber), gleam@otp@actor:continue(_pipe@1); {broadcast, Payload} -> gleam@set:each( State, fun(Pid) -> gleam@otp@actor:send(Pid, Payload) end ), gleam@otp@actor:continue(State) end end ), gleam@otp@actor:start(_pipe@2) end of {ok, Registry} -> Registry; _assert_fail -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, file => <>, module => <<"mist/reload"/utf8>>, function => <<"wrap"/utf8>>, line => 19, value => _assert_fail, start => 374, 'end' => 816, pattern_start => 385, pattern_end => 397}) end, _ = begin _pipe@3 = radiate:new(), _pipe@4 = radiate:add_dir(_pipe@3, <<"src"/utf8>>), _pipe@5 = radiate:on_reload( _pipe@4, fun(_, _) -> gleam@otp@actor:send( erlang:element(3, Registry@1), {broadcast, reloaded} ) end ), radiate:start(_pipe@5) end, debug_handler(erlang:element(3, Registry@1), Handler).