Current section
Files
Jump to
Current section
Files
src/butterbee@internal@runner@runner.erl
-module(butterbee@internal@runner@runner).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/butterbee/internal/runner/runner.gleam").
-export([new/2]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(false).
-file("src/butterbee/internal/runner/runner.gleam", 98).
?DOC(false).
-spec do_run(binary(), list(binary()), binary()) -> gleam@erlang@process:pid_().
do_run(Cmd, Flags, Profile_dir) ->
proc_lib:spawn_link(
fun() ->
_ = case shellout:command(Cmd, Flags, Profile_dir, []) of
{ok, _} ->
nil;
{error, Error} ->
_pipe = palabres:error(
<<"Error running browser command"/utf8>>
),
_pipe@1 = palabres:string(
_pipe,
<<"error"/utf8>>,
erlang:element(2, Error)
),
palabres:log(_pipe@1)
end,
_pipe@2 = palabres:debug(<<"Cleaning up profile directory"/utf8>>),
_pipe@3 = palabres:string(
_pipe@2,
<<"profile dir"/utf8>>,
Profile_dir
),
palabres:log(_pipe@3),
_ = case simplifile_erl:delete(Profile_dir) of
{ok, _} ->
{ok, nil};
{error, Error@1} ->
{error, {could_not_delete_profile_dir, Error@1}}
end,
{some, <<"Done"/utf8>>}
end
).
-file("src/butterbee/internal/runner/runner.gleam", 76).
?DOC(false).
-spec run(butterbee@internal@browser:browser()) -> {ok,
butterbee@internal@browser:browser()} |
{error, butterbee@internal@error:butterbee_error()}.
run(Browser) ->
gleam@result:'try'(
begin
_pipe = erlang:element(3, Browser),
gleam@option:to_result(_pipe, browser_does_not_have_cmd)
end,
fun(_use0) ->
{Cmd, Flags} = _use0,
gleam@result:'try'(
begin
_pipe@1 = erlang:element(6, Browser),
gleam@option:to_result(
_pipe@1,
browser_does_not_have_profile_dir
)
end,
fun(Profile_dir) ->
_pipe@2 = palabres:info(<<"Starting browser"/utf8>>),
_pipe@3 = palabres:string(_pipe@2, <<"cmd"/utf8>>, Cmd),
_pipe@4 = palabres:string(
_pipe@3,
<<"flags"/utf8>>,
gleam@string:inspect(Flags)
),
_pipe@5 = palabres:string(
_pipe@4,
<<"profile_dir"/utf8>>,
Profile_dir
),
palabres:log(_pipe@5),
do_run(Cmd, Flags, Profile_dir),
{ok, Browser}
end
)
end
).
-file("src/butterbee/internal/runner/runner.gleam", 17).
?DOC(false).
-spec new(butterbee@config:browser_type(), butterbee@config:butterbee_config()) -> {ok,
butterbee@internal@browser:browser()} |
{error, butterbee@internal@error:butterbee_error()}.
new(Browser_to_run, Config) ->
Driver_config = erlang:element(2, Config),
Config@1 = begin
_pipe = erlang:element(4, Config),
_pipe@1 = gleam@option:unwrap(
_pipe,
butterbee@config:default_browser_config()
),
_pipe@2 = gleam_stdlib:map_get(_pipe@1, Browser_to_run),
gleam@result:unwrap(
_pipe@2,
butterbee@config:default_individual_browser_config(firefox)
)
end,
gleam@result:'try'(
begin
_pipe@3 = browser_ffi:new_port(),
_pipe@4 = gleam@result:map(
_pipe@3,
fun(Port) ->
butterbee@internal@browser:get_request(
Port,
erlang:element(5, Config@1)
)
end
),
gleam@result:map_error(
_pipe@4,
fun(Field@0) -> {port_error, Field@0} end
)
end,
fun(Request) ->
gleam@result:'try'(
begin
_pipe@5 = butterbee@internal@browser:new_profile(
erlang:element(4, Driver_config)
),
gleam@result:map_error(
_pipe@5,
fun(Field@0) -> {create_profile_dir_error, Field@0} end
)
end,
fun(_use0) ->
{Profile, Profile_dir} = _use0,
Flags = case Browser_to_run of
firefox ->
butterbee@internal@runner@firefox:get_flags(
begin
_pipe@6 = [erlang:element(2, Config@1)],
lists:append(
_pipe@6,
erlang:element(4, Config@1)
)
end,
erlang:element(7, Request),
Profile_dir
);
chromium ->
butterbee@internal@runner@chromium:get_flags(
begin
_pipe@7 = [erlang:element(2, Config@1)],
lists:append(
_pipe@7,
erlang:element(4, Config@1)
)
end,
erlang:element(7, Request)
)
end,
gleam@result:'try'((case Browser_to_run of
firefox ->
butterbee@internal@runner@firefox:setup(
Profile_dir
);
chromium ->
butterbee@internal@runner@chromium:setup()
end), fun(_) ->
Browser = begin
_pipe@8 = butterbee@internal@browser:new(
Browser_to_run
),
_pipe@9 = butterbee@internal@browser:with_request(
_pipe@8,
Request
),
_pipe@10 = butterbee@internal@browser:with_profile_dir(
_pipe@9,
Profile_dir
),
_pipe@11 = butterbee@internal@browser:with_profile_name(
_pipe@10,
Profile
),
butterbee@internal@browser:with_cmd(
_pipe@11,
{erlang:element(3, Config@1), Flags}
)
end,
gleam@result:'try'(
begin
_pipe@12 = run(Browser),
gleam@result:map_error(
_pipe@12,
fun(_) -> runner_error end
)
end,
fun(Browser@1) -> {ok, Browser@1} end
)
end)
end
)
end
).