Current section
Files
Jump to
Current section
Files
src/gleescript.erl
-module(gleescript).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/gleescript.gleam").
-export([run/0, main/0]).
-export_type([config/0, erlang_option/0, never/0]).
-type config() :: {config, binary(), binary()}.
-type erlang_option() :: shebang |
{comment, gleam@erlang@charlist:charlist()} |
{emu_args, gleam@erlang@charlist:charlist()} |
{archive,
list({gleam@erlang@charlist:charlist(), bitstring()}),
list(never())}.
-type never() :: any().
-file("src/gleescript.gleam", 144).
-spec snag_inspect_error({ok, HCJ} | {error, any()}) -> {ok, HCJ} |
{error, snag:snag()}.
snag_inspect_error(Result) ->
case Result of
{ok, Value} ->
{ok, Value};
{error, Error} ->
snag:error(gleam@string:inspect(Error))
end.
-file("src/gleescript.gleam", 169).
-spec get_out_dir(list(binary())) -> binary().
get_out_dir(Args) ->
Out = case Args of
[<<"--out"/utf8>>, Folder] ->
Folder;
[<<"--out="/utf8, Folder/binary>>] ->
Folder;
_ ->
<<"./"/utf8>>
end,
case gleam@string:last(Out) of
{ok, <<"/"/utf8>>} ->
Out;
_ ->
<<Out/binary, "/"/utf8>>
end.
-file("src/gleescript.gleam", 120).
-spec load_config() -> {ok, config()} | {error, snag:snag()}.
load_config() ->
Out_dir = get_out_dir(erlang:element(4, argv:load())),
begin
Result = begin
_pipe = simplifile:read(<<"gleam.toml"/utf8>>),
_pipe@1 = snag_inspect_error(_pipe),
snag:context(_pipe@1, <<"Failed to read gleam.toml"/utf8>>)
end,
case Result of
{ok, X} ->
begin
Result@1 = begin
_pipe@2 = tom:parse(X),
_pipe@3 = snag_inspect_error(_pipe@2),
snag:context(
_pipe@3,
<<"Failed to parse gleam.toml"/utf8>>
)
end,
case Result@1 of
{ok, X@1} ->
case begin
_pipe@4 = tom:get_string(X@1, [<<"name"/utf8>>]),
_pipe@5 = snag_inspect_error(_pipe@4),
snag:context(
_pipe@5,
<<"Failed to get package name from gleam.toml"/utf8>>
)
end of
{ok, X@2} ->
{ok, {config, X@2, Out_dir}};
{error, E} ->
{error, E}
end;
{error, E@1} ->
{error, E@1}
end
end;
{error, E@2} ->
{error, E@2}
end
end.
-file("src/gleescript.gleam", 104).
-spec locate_beam_files() -> {ok, list(binary())} | {error, snag:snag()}.
locate_beam_files() ->
begin
Result = begin
_pipe = simplifile:get_files(<<"build/dev/erlang"/utf8>>),
_pipe@1 = snag_inspect_error(_pipe),
snag:context(_pipe@1, <<"Failed to read build directory"/utf8>>)
end,
case Result of
{ok, X} ->
_pipe@2 = X,
_pipe@3 = gleam@list:filter(
_pipe@2,
fun(F) ->
not gleam_stdlib:contains_string(F, <<"@@"/utf8>>)
andalso (gleam_stdlib:string_ends_with(
F,
<<".beam"/utf8>>
)
orelse gleam_stdlib:string_ends_with(F, <<".app"/utf8>>))
end
),
{ok, _pipe@3};
{error, E} ->
{error, E}
end
end.
-file("src/gleescript.gleam", 33).
-spec run() -> {ok, nil} | {error, snag:snag()}.
run() ->
begin
Result = begin
_pipe = load_config(),
snag:context(_pipe, <<"Failed to load configuration"/utf8>>)
end,
case Result of
{ok, X} ->
Config = X,
begin
Result@1 = begin
_pipe@1 = locate_beam_files(),
snag:context(
_pipe@1,
<<"Failed to scan packages in build directory"/utf8>>
)
end,
case Result@1 of
{ok, X@1} ->
Emu_args = <<"-escript main gleescript_main_shim -env GLEESCRIPT_MAIN "/utf8,
(erlang:element(2, Config))/binary>>,
begin
Result@2 = gleam@list:try_map(
X@1,
fun(F) ->
Name = unicode:characters_to_list(
filepath:base_name(F)
),
gleam@result:map(
begin
_pipe@2 = simplifile_erl:read_bits(
F
),
_pipe@3 = snag_inspect_error(
_pipe@2
),
snag:context(
_pipe@3,
<<"Failed to read "/utf8,
F/binary>>
)
end,
fun(Content) -> {Name, Content} end
)
end
),
case Result@2 of
{ok, X@2} ->
Files = X@2,
begin
Result@3 = begin
_pipe@4 = simplifile:create_directory_all(
erlang:element(3, Config)
),
_pipe@5 = snag_inspect_error(
_pipe@4
),
snag:context(
_pipe@5,
<<<<"Failed to create "/utf8,
(erlang:element(
3,
Config
))/binary>>/binary,
" directory"/utf8>>
)
end,
case Result@3 of
{ok, X@3} ->
_@1 = X@3,
Result@4 = escript:create(
unicode:characters_to_list(
<<(erlang:element(
3,
Config
))/binary,
(erlang:element(
2,
Config
))/binary>>
),
[shebang,
{comment,
unicode:characters_to_list(
<<""/utf8>>
)},
{emu_args,
unicode:characters_to_list(
Emu_args
)},
{archive, Files, []}]
),
case case Result@4 =:= gleam@function:identity(
erlang:binary_to_atom(
<<"ok"/utf8>>
)
) of
true ->
{ok, nil};
false ->
_pipe@6 = Result@4,
_pipe@7 = gleam@string:inspect(
_pipe@6
),
_pipe@8 = snag:new(
_pipe@7
),
_pipe@9 = {error,
_pipe@8},
snag:context(
_pipe@9,
<<"Failed to build escript"/utf8>>
)
end of
{ok, X@4} ->
_@2 = X@4,
Name@1 = <<(erlang:element(
3,
Config
))/binary,
(erlang:element(
2,
Config
))/binary>>,
begin
Result@5 = begin
_pipe@10 = simplifile_erl:set_permissions_octal(
Name@1,
8#777
),
_pipe@11 = snag_inspect_error(
_pipe@10
),
snag:context(
_pipe@11,
<<<<"Failed to make "/utf8,
Name@1/binary>>/binary,
" executable"/utf8>>
)
end,
case Result@5 of
{ok, X@5} ->
_@3 = X@5,
gleam_stdlib:println(
<<<<" \x{001b}[95mGenerated\x{001b}[0m "/utf8,
(erlang:element(
3,
Config
))/binary>>/binary,
(erlang:element(
2,
Config
))/binary>>
),
{ok,
nil};
{error, E} ->
{error,
E}
end
end;
{error, E@1} ->
{error, E@1}
end;
{error, E@2} ->
{error, E@2}
end
end;
{error, E@3} ->
{error, E@3}
end
end;
{error, E@4} ->
{error, E@4}
end
end;
{error, E@5} ->
{error, E@5}
end
end.
-file("src/gleescript.gleam", 18).
-spec main() -> nil.
main() ->
case run() of
{ok, _} ->
nil;
{error, Error} ->
gleam_stdlib:println_error(snag:pretty_print(Error)),
init:stop(1)
end.