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, inline]).
-define(FILEPATH, "src/go_over/warning.gleam").
-export([severity_as_string/1, string_to_severity/1, adv_to_warning/2, retired_to_warning/2, outdated_to_warning/2, rejected_license_to_warning/2, format_as_json/1, format_as_string/1, format_as_string_minimal/1]).
-export_type([warning_reason_code/0, severity/0, dep/0, warning/0]).
-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).
-type warning_reason_code() :: warning_reason_retired |
warning_reason_vulnerable |
warning_reason_outdated |
{warning_reason_rejected_license, binary()}.
-type severity() :: severity_package_retired_invalid |
severity_package_retired_security |
severity_package_retired_deprecated |
severity_package_retired_renamed |
{severity_package_retired_other_reason, binary()} |
severity_package_outdated |
severity_rejected_license |
severity_critical |
severity_high |
severity_low |
severity_moderate |
{severity_unknown, binary()}.
-type dep() :: direct_dep | indirect_dep.
-type warning() :: {warning,
gleam@option:option(binary()),
binary(),
gleam@option:option(binary()),
binary(),
warning_reason_code(),
severity(),
dep()}.
-file("src/go_over/warning.gleam", 18).
?DOC(false).
-spec warning_reason_code_as_string(warning_reason_code()) -> binary().
warning_reason_code_as_string(W) ->
case W of
warning_reason_retired ->
<<"Retired"/utf8>>;
warning_reason_vulnerable ->
<<"Vulnerable"/utf8>>;
warning_reason_outdated ->
<<"Outdated"/utf8>>;
{warning_reason_rejected_license, Name} ->
<<<<"Rejected License ("/utf8, Name/binary>>/binary, ")"/utf8>>
end.
-file("src/go_over/warning.gleam", 42).
?DOC(false).
-spec severity_as_string(severity()) -> binary().
severity_as_string(S) ->
case S of
severity_package_retired_invalid ->
<<"package-retired:invalid"/utf8>>;
severity_package_retired_security ->
<<"package-retired:security"/utf8>>;
severity_package_retired_deprecated ->
<<"package-retired:deprecated"/utf8>>;
severity_package_retired_renamed ->
<<"package-retired:renamed"/utf8>>;
{severity_package_retired_other_reason, Reason} ->
<<"package-retired:"/utf8, (string:lowercase(Reason))/binary>>;
severity_package_outdated ->
<<"package-outdated"/utf8>>;
severity_rejected_license ->
<<"rejected-license"/utf8>>;
severity_critical ->
<<"critical"/utf8>>;
severity_high ->
<<"high"/utf8>>;
severity_low ->
<<"low"/utf8>>;
severity_moderate ->
<<"moderate"/utf8>>;
{severity_unknown, Value} ->
gleam@string:join(
[<<"unknown"/utf8>>, string:lowercase(Value)],
<<"-"/utf8>>
)
end.
-file("src/go_over/warning.gleam", 61).
?DOC(false).
-spec string_to_severity(binary()) -> severity().
string_to_severity(S) ->
case string:lowercase(S) of
<<"package-retired:invalid"/utf8>> ->
severity_package_retired_invalid;
<<"package-retired:security"/utf8>> ->
severity_package_retired_security;
<<"package-retired:deprecated"/utf8>> ->
severity_package_retired_deprecated;
<<"package-retired:renamed"/utf8>> ->
severity_package_retired_renamed;
<<"package-retired:"/utf8, V/binary>> ->
{severity_package_retired_other_reason, V};
<<"package-outdated"/utf8>> ->
severity_package_outdated;
<<"rejected-license"/utf8>> ->
severity_rejected_license;
<<"critical"/utf8>> ->
severity_critical;
<<"high"/utf8>> ->
severity_high;
<<"low"/utf8>> ->
severity_low;
<<"moderate"/utf8>> ->
severity_moderate;
<<"unknown-"/utf8, V@1/binary>> ->
{severity_unknown, V@1};
V@2 ->
{severity_unknown, V@2}
end.
-file("src/go_over/warning.gleam", 84).
?DOC(false).
-spec dep_code_as_string(dep()) -> binary().
dep_code_as_string(D) ->
case D of
direct_dep ->
<<"Direct"/utf8>>;
indirect_dep ->
<<"Indirect"/utf8>>
end.
-file("src/go_over/warning.gleam", 91).
?DOC(false).
-spec dep_code_from_bool(boolean()) -> dep().
dep_code_from_bool(D) ->
case D of
true ->
direct_dep;
false ->
indirect_dep
end.
-file("src/go_over/warning.gleam", 110).
?DOC(false).
-spec adv_to_warning(
go_over@packages:package(),
list(go_over@advisories@advisories:advisory())
) -> list(warning()).
adv_to_warning(Pkg, Advisories) ->
gleam@list:map(
Advisories,
fun(Adv) ->
{warning,
{some, erlang:element(2, Adv)},
erlang:element(2, Pkg),
{some, erlang:element(4, Pkg)},
erlang:element(6, Adv),
warning_reason_vulnerable,
string_to_severity(erlang:element(4, Adv)),
dep_code_from_bool(erlang:element(5, Pkg))}
end
).
-file("src/go_over/warning.gleam", 124).
?DOC(false).
-spec retired_to_warning(
go_over@packages:package(),
gleam@hexpm:release_retirement()
) -> warning().
retired_to_warning(Pkg, Ret) ->
Sev = case erlang:element(2, Ret) of
deprecated ->
severity_package_retired_deprecated;
invalid ->
severity_package_retired_invalid;
renamed ->
severity_package_retired_renamed;
security ->
severity_package_retired_security;
other_reason ->
{severity_package_retired_other_reason,
gleam@option:unwrap(erlang:element(3, Ret), <<"Unknown"/utf8>>)}
end,
{warning,
none,
erlang:element(2, Pkg),
{some, erlang:element(4, Pkg)},
go_over@hex@core:print_ret(Ret),
warning_reason_retired,
Sev,
dep_code_from_bool(erlang:element(5, Pkg))}.
-file("src/go_over/warning.gleam", 145).
?DOC(false).
-spec outdated_to_warning(go_over@packages:package(), binary()) -> warning().
outdated_to_warning(Pkg, New_version) ->
{warning,
none,
erlang:element(2, Pkg),
{some, erlang:element(4, Pkg)},
<<<<"New Version: '"/utf8, New_version/binary>>/binary,
"' exists"/utf8>>,
warning_reason_outdated,
severity_package_outdated,
dep_code_from_bool(erlang:element(5, Pkg))}.
-file("src/go_over/warning.gleam", 157).
?DOC(false).
-spec rejected_license_to_warning(go_over@packages:package(), binary()) -> warning().
rejected_license_to_warning(Pkg, License) ->
{warning,
none,
erlang:element(2, Pkg),
none,
<<"Rejected License found: "/utf8, License/binary>>,
{warning_reason_rejected_license, License},
severity_rejected_license,
dep_code_from_bool(erlang:element(5, Pkg))}.
-file("src/go_over/warning.gleam", 195).
?DOC(false).
-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:nullable(
erlang:element(4, W),
fun gleam@json:string/1
)},
{<<"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(severity_as_string(erlang:element(7, W)))},
{<<"reason"/utf8>>, gleam@json:string(erlang:element(5, W))}]
).
-file("src/go_over/warning.gleam", 210).
?DOC(false).
-spec color(warning(), binary()) -> binary().
color(W, Str) ->
case erlang:element(7, W) of
severity_critical ->
go_over@util@print:format_critical(Str);
severity_package_retired_security ->
go_over@util@print:format_critical(Str);
severity_high ->
go_over@util@print:format_high(Str);
severity_rejected_license ->
go_over@util@print:format_high(Str);
severity_moderate ->
go_over@util@print:format_moderate(Str);
severity_package_retired_renamed ->
go_over@util@print:format_moderate(Str);
severity_package_retired_deprecated ->
go_over@util@print:format_moderate(Str);
severity_package_outdated ->
go_over@util@print:format_moderate(Str);
severity_low ->
go_over@util@print:format_low(Str);
severity_package_retired_invalid ->
go_over@util@print:format_low(Str);
{severity_unknown, _} ->
go_over@util@print:format_warning(Str);
{severity_package_retired_other_reason, _} ->
go_over@util@print:format_warning(Str)
end.
-file("src/go_over/warning.gleam", 169).
?DOC(false).
-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,
(gleam@option:unwrap(erlang:element(4, W), <<"null"/utf8>>))/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, (severity_as_string(erlang:element(7, W)))/binary>>,
<<"Reason: "/utf8, (erlang:element(5, W))/binary>>],
_pipe@1 = gleam@string:join(_pipe, <<"\n"/utf8>>),
color(W, _pipe@1).
-file("src/go_over/warning.gleam", 183).
?DOC(false).
-spec format_as_string_minimal(warning()) -> binary().
format_as_string_minimal(W) ->
case erlang:element(4, W) of
{some, Version} ->
color(
W,
<<<<<<<<(erlang:element(3, W))/binary, "-"/utf8>>/binary,
Version/binary>>/binary,
": "/utf8>>/binary,
(severity_as_string(erlang:element(7, W)))/binary>>
);
none ->
color(
W,
<<<<(erlang:element(3, W))/binary, ": "/utf8>>/binary,
(severity_as_string(erlang:element(7, W)))/binary>>
)
end.