Current section
Files
Jump to
Current section
Files
src/drip@internal@render.erl
-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, _} ->
<<Path/binary, " (unchanged)"/utf8>>;
{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 <element> 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;
_ ->
<<Singular/binary, "s"/utf8>>
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 <element> 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>>,
<<<<<<Name/binary, " ("/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>>)]
).