From 69b36cf003212e98800d5f27af74bb59f3bbca5d Mon Sep 17 00:00:00 2001 From: Hayleigh Thompson Date: Sun, 18 Feb 2024 10:45:00 +0000 Subject: :recycle: Big refactor of CLI-related things. --- src/cli_ffi.erl | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 src/cli_ffi.erl (limited to 'src/cli_ffi.erl') diff --git a/src/cli_ffi.erl b/src/cli_ffi.erl new file mode 100644 index 0000000..1c1b6f0 --- /dev/null +++ b/src/cli_ffi.erl @@ -0,0 +1,49 @@ +-module(cli_ffi). +-export([ + get_cpu/0, + get_esbuild/1, + get_os/0, + unzip_esbuild/1 +]). + +get_os() -> + case os:type() of + {win32, _} -> <<"win32">>; + {unix, darwin} -> <<"darwin">>; + {unix, linux} -> <<"linux">>; + {_, Unknown} -> atom_to_binary(Unknown, utf8) + end. + +get_cpu() -> + case erlang:system_info(os_type) of + {unix, _} -> + [Arch, _] = string:split(erlang:system_info(system_architecture), "-"), + list_to_binary(Arch); + {win32, _} -> + case erlang:system_info(wordsize) of + 4 -> {ok, <<"ia32">>}; + 8 -> {ok, <<"x64">>} + end + end. + +get_esbuild(Url) -> + inets:start(), + ssl:start(), + + case httpc:request(get, {Url, []}, [], [{body_format, binary}]) of + {ok, {{_, 200, _}, _, Zip}} -> {ok, Zip}; + {ok, Res} -> {error, Res}; + {error, Err} -> {error, Err} + end. + +unzip_esbuild(Zip) -> + Result = + erl_tar:extract({binary, Zip}, [ + memory, compressed, {files, ["package/bin/esbuild"]} + ]), + + case Result of + {ok, [{_, Esbuild}]} -> {ok, Esbuild}; + {ok, Res} -> {error, Res}; + {error, Err} -> {error, Err} + end. -- cgit v1.2.3