-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), <>, 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>> ).