-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 "/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 = <<<<<>/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 => <>, 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.