-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; _ -> <> 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.