-module(glipt@internal@toml).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/glipt/internal/toml.gleam").
-export([generate_runtime_toml/3, generate_project_toml/2, parse_deps/1, parse_gleam_version/1]).
-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).
-file("src/glipt/internal/toml.gleam", 40).
?DOC(false).
-spec gleam_section(glipt@parser:script_meta()) -> binary().
gleam_section(Meta) ->
case erlang:element(2, Meta) of
{ok, Constraint} ->
<<<<"\n[gleam]\nversion = \""/utf8, Constraint/binary>>/binary,
"\"\n"/utf8>>;
{error, nil} ->
<<""/utf8>>
end.
-file("src/glipt/internal/toml.gleam", 57).
?DOC(false).
-spec format_dep_lines(list(glipt@parser:dependency())) -> binary().
format_dep_lines(Deps) ->
Lines = gleam@list:map(Deps, fun(Dep) -> case erlang:element(3, Dep) of
<<""/utf8>> ->
<<(erlang:element(2, Dep))/binary, " = \">= 0.0.0\""/utf8>>;
C ->
case gleam_stdlib:string_starts_with(C, <<"{"/utf8>>) of
true ->
<<<<(erlang:element(2, Dep))/binary, " = "/utf8>>/binary,
C/binary>>;
false ->
Clean = gleam@string:replace(
C,
<<"\""/utf8>>,
<<""/utf8>>
),
<<<<<<(erlang:element(2, Dep))/binary,
" = \""/utf8>>/binary,
Clean/binary>>/binary,
"\""/utf8>>
end
end end),
case Lines of
[] ->
<<""/utf8>>;
_ ->
<<(gleam@string:join(Lines, <<"\n"/utf8>>))/binary, "\n"/utf8>>
end.
-file("src/glipt/internal/toml.gleam", 78).
?DOC(false).
-spec resolve_path_deps(list(binary()), binary()) -> binary().
resolve_path_deps(Project_paths, Script_dir) ->
Lines = gleam@list:filter_map(
Project_paths,
fun(Rel_path) ->
case glipt@internal@project:resolve_project_path(
Script_dir,
Rel_path
) of
{ok, Root} ->
case glipt@internal@project:read_project_name(Root) of
{ok, Name} ->
{ok,
<<<<<<Name/binary, " = { path = \""/utf8>>/binary,
Root/binary>>/binary,
"\" }"/utf8>>};
{error, nil} ->
{error, nil}
end;
{error, nil} ->
{error, nil}
end
end
),
case Lines of
[] ->
<<""/utf8>>;
_ ->
<<(gleam@string:join(Lines, <<"\n"/utf8>>))/binary, "\n"/utf8>>
end.
-file("src/glipt/internal/toml.gleam", 47).
?DOC(false).
-spec deps_section(list(glipt@parser:dependency()), list(binary()), binary()) -> binary().
deps_section(Deps, Project_paths, Script_dir) ->
Hex_lines = format_dep_lines(Deps),
Path_lines = resolve_path_deps(Project_paths, Script_dir),
<<<<"\n[dependencies]\n"/utf8, Hex_lines/binary>>/binary,
Path_lines/binary>>.
-file("src/glipt/internal/toml.gleam", 96).
?DOC(false).
-spec ensure_stdlib(list(glipt@parser:dependency())) -> list(glipt@parser:dependency()).
ensure_stdlib(Deps) ->
Has_stdlib = gleam@list:any(
Deps,
fun(Dep) -> erlang:element(2, Dep) =:= <<"gleam_stdlib"/utf8>> end
),
case Has_stdlib of
true ->
Deps;
false ->
[{dependency,
<<"gleam_stdlib"/utf8>>,
<<">= 0.44.0 and < 2.0.0"/utf8>>} |
Deps]
end.
-file("src/glipt/internal/toml.gleam", 7).
?DOC(false).
-spec generate_runtime_toml(
glipt@parser:script_meta(),
glipt@target:target(),
binary()
) -> binary().
generate_runtime_toml(Meta, Target, Script_dir) ->
Header = <<<<"name = \"glipt_script\"\nversion = \"0.0.0\"\ntarget = \""/utf8,
(glipt@target:to_string(Target))/binary>>/binary,
"\"\n"/utf8>>,
<<<<Header/binary, (gleam_section(Meta))/binary>>/binary,
(deps_section(
ensure_stdlib(erlang:element(4, Meta)),
erlang:element(3, Meta),
Script_dir
))/binary>>.
-file("src/glipt/internal/toml.gleam", 21).
?DOC(false).
-spec generate_project_toml(binary(), glipt@parser:script_meta()) -> binary().
generate_project_toml(Name, Meta) ->
Header = <<<<"name = \""/utf8, Name/binary>>/binary,
"\"\nversion = \"0.1.0\"\n"/utf8>>,
<<<<<<<<Header/binary, (gleam_section(Meta))/binary>>/binary,
"\n[dependencies]\n"/utf8>>/binary,
(format_dep_lines(ensure_stdlib(erlang:element(4, Meta))))/binary>>/binary,
"\n[dev_dependencies]\ngleeunit = \">= 1.0.0 and < 2.0.0\"\n"/utf8>>.
-file("src/glipt/internal/toml.gleam", 123).
?DOC(false).
-spec collect_key_values(list(binary())) -> list(glipt@parser:dependency()).
collect_key_values(Lines) ->
case Lines of
[] ->
[];
[Line | Rest] ->
Trimmed = gleam@string:trim(Line),
case gleam_stdlib:string_starts_with(Trimmed, <<"["/utf8>>) of
true ->
[];
false ->
case gleam@string:split_once(Trimmed, <<"="/utf8>>) of
{ok, {Key, Value}} ->
Name = gleam@string:trim(Key),
Val = gleam@string:trim(Value),
case Name of
<<""/utf8>> ->
collect_key_values(Rest);
_ ->
[{dependency, Name, Val} |
collect_key_values(Rest)]
end;
{error, nil} ->
collect_key_values(Rest)
end
end
end.
-file("src/glipt/internal/toml.gleam", 107).
?DOC(false).
-spec do_parse_section(list(binary()), binary()) -> list(glipt@parser:dependency()).
do_parse_section(Lines, Section_header) ->
case Lines of
[] ->
[];
[Line | Rest] ->
Trimmed = gleam@string:trim(Line),
case gleam_stdlib:string_starts_with(Trimmed, Section_header) of
true ->
collect_key_values(Rest);
false ->
do_parse_section(Rest, Section_header)
end
end.
-file("src/glipt/internal/toml.gleam", 30).
?DOC(false).
-spec parse_deps(binary()) -> list(glipt@parser:dependency()).
parse_deps(Content) ->
Lines = gleam@string:split(Content, <<"\n"/utf8>>),
do_parse_section(Lines, <<"[dependencies]"/utf8>>).
-file("src/glipt/internal/toml.gleam", 150).
?DOC(false).
-spec do_parse_gleam_version(list(binary()), boolean()) -> {ok, binary()} |
{error, nil}.
do_parse_gleam_version(Lines, In_gleam) ->
case Lines of
[] ->
{error, nil};
[Line | Rest] ->
Trimmed = gleam@string:trim(Line),
case gleam_stdlib:string_starts_with(Trimmed, <<"[gleam]"/utf8>>) of
true ->
do_parse_gleam_version(Rest, true);
false ->
case In_gleam of
false ->
do_parse_gleam_version(Rest, false);
true ->
case gleam_stdlib:string_starts_with(
Trimmed,
<<"["/utf8>>
) of
true ->
{error, nil};
false ->
case gleam_stdlib:string_starts_with(
Trimmed,
<<"version"/utf8>>
) of
true ->
case gleam@string:split_once(
Trimmed,
<<"="/utf8>>
) of
{ok, {_, Value}} ->
{ok,
begin
_pipe = Value,
_pipe@1 = gleam@string:trim(
_pipe
),
gleam@string:replace(
_pipe@1,
<<"\""/utf8>>,
<<""/utf8>>
)
end};
{error, nil} ->
do_parse_gleam_version(
Rest,
true
)
end;
false ->
do_parse_gleam_version(Rest, true)
end
end
end
end
end.
-file("src/glipt/internal/toml.gleam", 35).
?DOC(false).
-spec parse_gleam_version(binary()) -> {ok, binary()} | {error, nil}.
parse_gleam_version(Content) ->
Lines = gleam@string:split(Content, <<"\n"/utf8>>),
do_parse_gleam_version(Lines, false).