Current section
Files
Jump to
Current section
Files
src/go_over@warning.erl
-module(go_over@warning).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([adv_to_warning/2, retired_to_warning/2, outdated_to_warning/2, format_as_json/1, format_as_string/1, format_as_string_minimal/1]).
-export_type([warning_reason_code/0, dep/0, warning/0]).
-type warning_reason_code() :: retired | vulnerable | outdated.
-type dep() :: direct | indirect.
-type warning() :: {warning,
gleam@option:option(binary()),
binary(),
binary(),
binary(),
warning_reason_code(),
binary(),
dep()}.
-spec warning_reason_code_as_string(warning_reason_code()) -> binary().
warning_reason_code_as_string(W) ->
case W of
retired ->
<<"Retired"/utf8>>;
vulnerable ->
<<"Vulnerable"/utf8>>;
outdated ->
<<"Outdated"/utf8>>
end.
-spec dep_code_as_string(dep()) -> binary().
dep_code_as_string(D) ->
case D of
direct ->
<<"Direct"/utf8>>;
indirect ->
<<"Indirect"/utf8>>
end.
-spec dep_code_from_bool(boolean()) -> dep().
dep_code_from_bool(D) ->
case D of
true ->
direct;
false ->
indirect
end.
-spec adv_to_warning(
go_over@packages:package(),
list(go_over@advisories@advisories:advisory())
) -> list(warning()).
adv_to_warning(Pkg, Advs) ->
gleam@list:map(
Advs,
fun(Adv) ->
{warning,
{some, erlang:element(2, Adv)},
erlang:element(2, Pkg),
erlang:element(4, Pkg),
erlang:element(6, Adv),
vulnerable,
gleam@string:lowercase(erlang:element(4, Adv)),
dep_code_from_bool(erlang:element(5, Pkg))}
end
).
-spec retired_to_warning(
go_over@packages:package(),
gleam@hexpm:release_retirement()
) -> warning().
retired_to_warning(Pkg, Ret) ->
{warning,
none,
erlang:element(2, Pkg),
erlang:element(4, Pkg),
go_over@retired@core:print_ret(Ret),
retired,
<<<<"package-retired ("/utf8,
(gleam@hexpm:retirement_reason_to_string(erlang:element(2, Ret)))/binary>>/binary,
")"/utf8>>,
dep_code_from_bool(erlang:element(5, Pkg))}.
-spec outdated_to_warning(go_over@packages:package(), binary()) -> warning().
outdated_to_warning(Pkg, New_version) ->
{warning,
none,
erlang:element(2, Pkg),
erlang:element(4, Pkg),
<<New_version/binary, " exists"/utf8>>,
outdated,
<<"package-outdated"/utf8>>,
dep_code_from_bool(erlang:element(5, Pkg))}.
-spec format_as_json(warning()) -> gleam@json:json().
format_as_json(W) ->
gleam@json:object(
[{<<"id"/utf8>>,
gleam@json:nullable(
erlang:element(2, W),
fun gleam@json:string/1
)},
{<<"package"/utf8>>, gleam@json:string(erlang:element(3, W))},
{<<"version"/utf8>>, gleam@json:string(erlang:element(4, W))},
{<<"warning_reason"/utf8>>,
gleam@json:string(
warning_reason_code_as_string(erlang:element(6, W))
)},
{<<"dependency_type"/utf8>>,
gleam@json:string(dep_code_as_string(erlang:element(8, W)))},
{<<"severity"/utf8>>,
gleam@json:string(gleam@string:lowercase(erlang:element(7, W)))},
{<<"reason"/utf8>>, gleam@json:string(erlang:element(5, W))}]
).
-spec color(warning(), binary()) -> binary().
color(W, Str) ->
case gleam@string:lowercase(erlang:element(7, W)) of
<<"critical"/utf8>> ->
go_over@util@print:format_critical(Str);
<<"high"/utf8>> ->
go_over@util@print:format_high(Str);
<<"moderate"/utf8>> ->
go_over@util@print:format_moderate(Str);
<<"package-outdated"/utf8>> ->
go_over@util@print:format_moderate(Str);
<<"low"/utf8>> ->
go_over@util@print:format_low(Str);
_ ->
go_over@util@print:format_warning(Str)
end.
-spec format_as_string(warning()) -> binary().
format_as_string(W) ->
_pipe = [<<"ID: "/utf8,
(gleam@option:unwrap(erlang:element(2, W), <<"null"/utf8>>))/binary>>,
<<"Package: "/utf8, (erlang:element(3, W))/binary>>,
<<"Version: "/utf8, (erlang:element(4, W))/binary>>,
<<"WarningReason: "/utf8,
(warning_reason_code_as_string(erlang:element(6, W)))/binary>>,
<<"Dependency Type: "/utf8,
(dep_code_as_string(erlang:element(8, W)))/binary>>,
<<"Severity: "/utf8,
(gleam@string:lowercase(erlang:element(7, W)))/binary>>,
<<"Reason: "/utf8, (erlang:element(5, W))/binary>>],
_pipe@1 = gleam@string:join(_pipe, <<"\n"/utf8>>),
color(W, _pipe@1).
-spec format_as_string_minimal(warning()) -> binary().
format_as_string_minimal(W) ->
color(
W,
<<<<<<<<(erlang:element(3, W))/binary, "-"/utf8>>/binary,
(erlang:element(4, W))/binary>>/binary,
": "/utf8>>/binary,
(gleam@string:lowercase(erlang:element(7, W)))/binary>>
).