Packages

A code generation framework for Gleam

Current section

Files

Jump to
builder src builder@core.erl
Raw

src/builder@core.erl

-module(builder@core).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/builder/core.gleam").
-export([run_builders/3]).
-export_type([builder/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.
-type builder() :: {single_file_builder,
list(binary()),
fun((builder@context:build_context(), builder@asset:build_asset()) -> nil)} |
{multiple_files_builder,
list(binary()),
fun((builder@context:build_context(), list(builder@asset:build_asset())) -> nil)}.
-file("src/builder/core.gleam", 73).
-spec match_builder_patern(builder(), binary()) -> boolean().
match_builder_patern(Builder, File) ->
case gleam@list:find(
erlang:element(2, Builder),
fun(Extension) -> gleam_stdlib:string_ends_with(File, Extension) end
) of
{ok, _} ->
true;
{error, _} ->
false
end.
-file("src/builder/core.gleam", 22).
?DOC(false).
-spec run_builders(
list(builder()),
builder@context:build_context(),
list(binary())
) -> nil.
run_builders(Builders, Build_context, File_paths) ->
Single_builders = gleam@list:filter_map(
Builders,
fun(Builder) -> case Builder of
{single_file_builder, _, _} ->
{ok, Builder};
{multiple_files_builder, _, _} ->
{error, nil}
end end
),
Multiple_builders = gleam@list:filter_map(
Builders,
fun(Builder@1) -> case Builder@1 of
{single_file_builder, _, _} ->
{error, nil};
{multiple_files_builder, _, _} ->
{ok, Builder@1}
end end
),
gleam@list:map(Multiple_builders, fun(Builder@2) -> case Builder@2 of
{single_file_builder, _, _} ->
nil;
{multiple_files_builder, _, Build} ->
Build(
Build_context,
begin
_pipe = gleam@list:filter(
File_paths,
fun(_capture) ->
match_builder_patern(Builder@2, _capture)
end
),
gleam@list:map(
_pipe,
fun builder@asset:new_build_asset/1
)
end
)
end end),
gleam@list:map(
File_paths,
fun(File) ->
gleam@list:map(
Single_builders,
fun(Builder@3) -> case match_builder_patern(Builder@3, File) of
true ->
case Builder@3 of
{single_file_builder, _, Build@1} ->
Build@1(
Build_context,
builder@asset:new_build_asset(File)
);
{multiple_files_builder, _, _} ->
nil
end;
_ ->
nil
end end
)
end
),
nil.