Current section
Files
Jump to
Current section
Files
src/radiate.erl
-module(radiate).
-compile([no_auto_import, nowarn_unused_vars]).
-export([new/0, add_dir/2, on_reload/2, start/1]).
-export_type([no_directories/0, has_directories/0, builder/1, module_/0, what/0]).
-type no_directories() :: any().
-type has_directories() :: any().
-opaque builder(HNN) :: {builder, list(binary()), list(fun((binary()) -> nil))} |
{gleam_phantom, HNN}.
-type module_() :: any().
-type what() :: any().
-spec new() -> builder(no_directories()).
new() ->
{builder, [], []}.
-spec add_dir(builder(any()), binary()) -> builder(has_directories()).
add_dir(Builder, Dir) ->
{builder, [Dir | erlang:element(2, Builder)], erlang:element(3, Builder)}.
-spec on_reload(builder(HNS), fun((binary()) -> nil)) -> builder(HNS).
on_reload(Builder, Callback) ->
{builder,
erlang:element(2, Builder),
[Callback | erlang:element(3, Builder)]}.
-spec start(builder(has_directories())) -> {ok,
gleam@erlang@process:subject(filespy:change())} |
{error, gleam@otp@actor:start_error()}.
start(Builder) ->
_pipe = filespy:new(),
_pipe@1 = filespy:add_dirs(_pipe, erlang:element(2, Builder)),
_pipe@3 = filespy:set_handler(_pipe@1, fun(Path, Event) -> case Event of
closed ->
case gleam@string:ends_with(Path, <<".gleam"/utf8>>) of
true ->
Build_result = shellout:command(
<<"gleam"/utf8>>,
[<<"build"/utf8>>],
<<"."/utf8>>,
[]
),
case Build_result of
{ok, _} ->
Mods = code:modified_modules(),
gleam@list:each(Mods, fun code:purge/1),
_ = code:atomic_load(Mods),
gleam@list:each(
erlang:element(3, Builder),
fun(Callback) -> Callback(Path) end
),
nil;
{error, {_, Message}} ->
_pipe@2 = Message,
gleam@io:print_error(_pipe@2)
end;
_ ->
nil
end;
_ ->
nil
end end),
filespy:start(_pipe@3).