-module(drip@internal@render). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/drip/internal/render.gleam"). -export([init_summary/2, list_summary/1, add_summary/4, remove_summary/4]). -export_type([entry/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 entry() :: {entry, binary(), boolean()}. -file("src/drip/internal/render.gleam", 235). ?DOC(false). -spec is_unchanged(drip@internal@project:file_change()) -> boolean(). is_unchanged(Change) -> case Change of {unmodified, _} -> true; {created, _} -> false; {modified, _} -> false; {deleted, _} -> false end. -file("src/drip/internal/render.gleam", 242). ?DOC(false). -spec align_rows(list({binary(), binary(), binary()})) -> list(binary()). align_rows(Rows) -> Width = gleam@list:fold( Rows, 0, fun(Max, Row) -> {_, Label, _} = Row, gleam@int:max(Max, string:length(Label)) end ), gleam@list:map( Rows, fun(Row@1) -> {Glyph, Label@1, Value} = Row@1, <<<<<<<<<<" "/utf8, Glyph/binary>>/binary, " "/utf8>>/binary, (gleam@string:pad_end(Label@1, Width, <<" "/utf8>>))/binary>>/binary, " "/utf8>>/binary, Value/binary>> end ). -file("src/drip/internal/render.gleam", 226). ?DOC(false). -spec change_label(drip@internal@project:file_change()) -> binary(). change_label(Change) -> case Change of {created, _} -> <<"created"/utf8>>; {modified, _} -> <<"modified"/utf8>>; {unmodified, _} -> <<"skipped"/utf8>>; {deleted, _} -> <<"deleted"/utf8>> end. -file("src/drip/internal/render.gleam", 217). ?DOC(false). -spec change_glyph(drip@internal@project:file_change()) -> binary(). change_glyph(Change) -> case Change of {created, _} -> <<"+"/utf8>>; {modified, _} -> <<"~"/utf8>>; {unmodified, _} -> <<"="/utf8>>; {deleted, _} -> <<"-"/utf8>> end. -file("src/drip/internal/render.gleam", 205). ?DOC(false). -spec change_row( drip@internal@project:project(), drip@internal@project:file_change() ) -> {binary(), binary(), binary()}. change_row(Project, Change) -> Path = drip@internal@project:relative_path( Project, erlang:element(2, Change) ), Value = case Change of {unmodified, _} -> <>; {created, _} -> Path; {modified, _} -> Path; {deleted, _} -> Path end, {change_glyph(Change), change_label(Change), Value}. -file("src/drip/internal/render.gleam", 201). ?DOC(false). -spec change_rows( drip@internal@project:project(), list(drip@internal@project:file_change()) ) -> list(binary()). change_rows(Project, Changes) -> _pipe = Changes, _pipe@1 = gleam@list:map( _pipe, fun(_capture) -> change_row(Project, _capture) end ), align_rows(_pipe@1). -file("src/drip/internal/render.gleam", 9). ?DOC(false). -spec init_summary( drip@internal@project:project(), list(drip@internal@project:file_change()) ) -> binary(). init_summary(Project, Changes) -> Rows = change_rows(Project, Changes), Directory = drip@internal@project:relative_path( Project, drip@internal@project:vendor_directory(Project) ), Header = case gleam@list:all(Changes, fun is_unchanged/1) of true -> <<<<"✓ drip is already initialized in "/utf8, Directory/binary>>/binary, "."/utf8>>; false -> <<<<"✓ Initialized drip in "/utf8, Directory/binary>>/binary, "."/utf8>> end, Footer = <<<<"Next steps:\n"/utf8, " gleam run -m drip -- add vendor an element\n"/utf8>>/binary, " gleam run -m drip -- list see what is available"/utf8>>, _pipe = lists:append([[Header, <<""/utf8>>], Rows, [<<""/utf8>>, Footer]]), gleam@string:join(_pipe, <<"\n"/utf8>>). -file("src/drip/internal/render.gleam", 259). ?DOC(false). -spec pluralize(integer(), binary()) -> binary(). pluralize(Count, Singular) -> case Count of 1 -> Singular; _ -> <> end. -file("src/drip/internal/render.gleam", 75). ?DOC(false). -spec vendored_label(boolean()) -> binary(). vendored_label(Vendored) -> case Vendored of true -> <<"vendored"/utf8>>; false -> <<"available"/utf8>> end. -file("src/drip/internal/render.gleam", 68). ?DOC(false). -spec vendored_glyph(boolean()) -> binary(). vendored_glyph(Vendored) -> case Vendored of true -> <<"✓"/utf8>>; false -> <<" "/utf8>> end. -file("src/drip/internal/render.gleam", 35). ?DOC(false). -spec list_summary(list(entry())) -> binary(). list_summary(Entries) -> case Entries of [] -> <<"There are no elements in the source registry."/utf8>>; _ -> Rows = begin _pipe = Entries, _pipe@1 = gleam@list:map( _pipe, fun(Entry) -> {vendored_glyph(erlang:element(3, Entry)), vendored_label(erlang:element(3, Entry)), erlang:element(2, Entry)} end ), align_rows(_pipe@1) end, Count = erlang:length(Entries), Header = <<<<<<(erlang:integer_to_binary(Count))/binary, " "/utf8>>/binary, (pluralize(Count, <<"element"/utf8>>))/binary>>/binary, " available in the source registry."/utf8>>, Footer = <<"Next steps:\n"/utf8, " gleam run -m drip -- add vendor an element"/utf8>>, _pipe@2 = lists:append( [[Header, <<""/utf8>>], Rows, [<<""/utf8>>, Footer]] ), gleam@string:join(_pipe@2, <<"\n"/utf8>>) end. -file("src/drip/internal/render.gleam", 129). ?DOC(false). -spec required_packages(list(drip@internal@registry:element())) -> list(binary()). required_packages(Vendored) -> _pipe = Vendored, _pipe@1 = gleam@list:flat_map( _pipe, fun(Element) -> erlang:element(4, Element) end ), _pipe@2 = gleam@list:unique(_pipe@1), gleam@list:sort(_pipe@2, fun gleam@string:compare/2). -file("src/drip/internal/render.gleam", 136). ?DOC(false). -spec names(list(drip@internal@registry:element())) -> list(binary()). names(Elements) -> gleam@list:map(Elements, fun(Element) -> erlang:element(2, Element) end). -file("src/drip/internal/render.gleam", 140). ?DOC(false). -spec has_ffi(drip@internal@registry:element()) -> boolean(). has_ffi(Element) -> gleam@list:any( erlang:element(5, Element), fun(_capture) -> gleam_stdlib:string_ends_with(_capture, <<".ffi.mjs"/utf8>>) end ). -file("src/drip/internal/render.gleam", 113). ?DOC(false). -spec next_steps_block(list(drip@internal@registry:element())) -> binary(). next_steps_block(Vendored) -> Ffi = begin _pipe = Vendored, _pipe@1 = gleam@list:filter(_pipe, fun has_ffi/1), _pipe@2 = names(_pipe@1), gleam@list:map( _pipe@2, fun(Name) -> <<<<" call "/utf8, Name/binary>>/binary, ".init() from your app start"/utf8>> end ) end, Packages@1 = case required_packages(Vendored) of [] -> []; Packages -> [<<" gleam add "/utf8, (gleam@string:join(Packages, <<" "/utf8>>))/binary>>] end, case lists:append([Ffi, Packages@1]) of [] -> <<""/utf8>>; Steps -> gleam@string:join([<<"Next steps:"/utf8>> | Steps], <<"\n"/utf8>>) end. -file("src/drip/internal/render.gleam", 189). ?DOC(false). -spec skipped_block(list(binary()), binary()) -> binary(). skipped_block(Names, Reason) -> case Names of [] -> <<""/utf8>>; _ -> _pipe = gleam@list:map( Names, fun(Name) -> {<<"="/utf8>>, <<"skipped"/utf8>>, <<<<<>/binary, Reason/binary>>/binary, ")"/utf8>>} end ), _pipe@1 = align_rows(_pipe), gleam@string:join(_pipe@1, <<"\n"/utf8>>) end. -file("src/drip/internal/render.gleam", 178). ?DOC(false). -spec changes_block( drip@internal@project:project(), binary(), list(drip@internal@project:file_change()) ) -> binary(). changes_block(Project, Header, Changes) -> case change_rows(Project, Changes) of [] -> Header; Rows -> gleam@string:join([Header, <<""/utf8>> | Rows], <<"\n"/utf8>>) end. -file("src/drip/internal/render.gleam", 174). ?DOC(false). -spec join_blocks(list(binary())) -> binary(). join_blocks(Blocks) -> _pipe = Blocks, _pipe@1 = gleam@list:filter(_pipe, fun(Block) -> Block /= <<""/utf8>> end), gleam@string:join(_pipe@1, <<"\n\n"/utf8>>). -file("src/drip/internal/render.gleam", 84). ?DOC(false). -spec add_summary( drip@internal@project:project(), list(drip@internal@registry:element()), list(drip@internal@registry:element()), list(drip@internal@project:file_change()) ) -> binary(). add_summary(Project, Vendored, Skipped, Changes) -> Directory = drip@internal@project:relative_path( Project, drip@internal@project:vendor_directory(Project) ), Count = erlang:length(Vendored), Header = case Vendored of [] -> <<<<"Requested elements are already vendored in "/utf8, Directory/binary>>/binary, "."/utf8>>; _ -> <<<<<<<<<<<<"Vendored "/utf8, (erlang:integer_to_binary(Count))/binary>>/binary, " "/utf8>>/binary, (pluralize(Count, <<"element"/utf8>>))/binary>>/binary, " into "/utf8>>/binary, Directory/binary>>/binary, "."/utf8>> end, join_blocks( [changes_block(Project, Header, Changes), skipped_block(names(Skipped), <<"already vendored"/utf8>>), next_steps_block(Vendored)] ). -file("src/drip/internal/render.gleam", 146). ?DOC(false). -spec remove_summary( drip@internal@project:project(), list(binary()), list(binary()), list(drip@internal@project:file_change()) ) -> binary(). remove_summary(Project, Removed, Skipped, Changes) -> Directory = drip@internal@project:relative_path( Project, drip@internal@project:vendor_directory(Project) ), Count = erlang:length(Removed), Header = case Removed of [] -> <<<<"No elements to remove from "/utf8, Directory/binary>>/binary, "."/utf8>>; _ -> <<<<<<<<<<<<"Removed "/utf8, (erlang:integer_to_binary(Count))/binary>>/binary, " "/utf8>>/binary, (pluralize(Count, <<"element"/utf8>>))/binary>>/binary, " from "/utf8>>/binary, Directory/binary>>/binary, "."/utf8>> end, join_blocks( [changes_block(Project, Header, Changes), skipped_block(Skipped, <<"not vendored"/utf8>>)] ).