Packages

A convention-first web framework for Gleam

Current section

Files

Jump to
refrakt src refrakt@cli@build.erl
Raw

src/refrakt@cli@build.erl

-module(refrakt@cli@build).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/refrakt/cli/build.gleam").
-export([run/0]).
-file("src/refrakt/cli/build.gleam", 94).
-spec int_to_string(integer()) -> binary().
int_to_string(N) ->
case N of
0 ->
<<"0"/utf8>>;
1 ->
<<"1"/utf8>>;
2 ->
<<"2"/utf8>>;
3 ->
<<"3"/utf8>>;
4 ->
<<"4"/utf8>>;
5 ->
<<"5"/utf8>>;
_ ->
<<"several"/utf8>>
end.
-file("src/refrakt/cli/build.gleam", 15).
-spec run() -> nil.
run() ->
App = refrakt@cli@project:app_name(),
Islands_dir = <<<<"src/"/utf8, App/binary>>/binary, "/web/islands"/utf8>>,
Output_dir = <<"priv/static/js/islands"/utf8>>,
case simplifile_erl:read_directory(Islands_dir) of
{error, _} ->
gleam_stdlib:println(
<<"No islands found in "/utf8, Islands_dir/binary>>
),
gleam_stdlib:println(
<<"Generate one with: refrakt gen island <name>"/utf8>>
);
{ok, Files} ->
Islands = begin
_pipe = Files,
gleam@list:filter(
_pipe,
fun(F) ->
gleam_stdlib:string_ends_with(F, <<".gleam"/utf8>>)
andalso not gleam_stdlib:string_ends_with(
F,
<<"_embed.gleam"/utf8>>
)
end
)
end,
case Islands of
[] ->
gleam_stdlib:println(
<<"No island modules found in "/utf8,
Islands_dir/binary>>
);
_ ->
gleam_stdlib:println(
<<<<"Building "/utf8,
(int_to_string(erlang:length(Islands)))/binary>>/binary,
" island(s)..."/utf8>>
),
gleam_stdlib:println(<<""/utf8>>),
_ = simplifile:create_directory_all(Output_dir),
Build_output = refrakt_build_ffi:run_cmd(
<<"gleam build --target javascript"/utf8>>
),
case gleam_stdlib:contains_string(
Build_output,
<<"error"/utf8>>
) of
true ->
gleam_stdlib:println(<<"Build failed:"/utf8>>),
gleam_stdlib:println(Build_output);
false ->
gleam@list:each(
Islands,
fun(Island_file) ->
Name = gleam@string:replace(
Island_file,
<<".gleam"/utf8>>,
<<""/utf8>>
),
Source = <<<<<<<<<<<<"build/dev/javascript/"/utf8,
App/binary>>/binary,
"/"/utf8>>/binary,
App/binary>>/binary,
"/web/islands/"/utf8>>/binary,
Name/binary>>/binary,
".mjs"/utf8>>,
Dest = <<<<<<Output_dir/binary, "/"/utf8>>/binary,
Name/binary>>/binary,
".js"/utf8>>,
case simplifile:read(Source) of
{ok, Content} ->
case simplifile:write(Dest, Content) of
{ok, _} -> nil;
_assert_fail ->
erlang:error(
#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"refrakt/cli/build"/utf8>>,
function => <<"run"/utf8>>,
line => 71,
value => _assert_fail,
start => 2222,
'end' => 2272,
pattern_start => 2233,
pattern_end => 2238}
)
end,
gleam_stdlib:println(
<<<<" "/utf8, Dest/binary>>/binary,
" ✓"/utf8>>
);
{error, _} ->
gleam_stdlib:println(
<<<<<<" "/utf8, Name/binary>>/binary,
" — could not find compiled JS at "/utf8>>/binary,
Source/binary>>
)
end
end
),
gleam_stdlib:println(<<""/utf8>>),
gleam_stdlib:println(
<<"Done. Islands available at /static/js/islands/"/utf8>>
)
end
end
end.