src/glipt@internal@path.erl

-module(glipt@internal@path).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/glipt/internal/path.gleam").
-export([basename/1, drop_extension/1, dirname/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/path.gleam", 4).
?DOC(false).
-spec basename(binary()) -> binary().
basename(Path) ->
    case gleam@string:split(Path, <<"/"/utf8>>) of
        [] ->
            Path;

        Parts ->
            case gleam@list:last(Parts) of
                {ok, Last} ->
                    Last;

                {error, nil} ->
                    Path
            end
    end.

-file("src/glipt/internal/path.gleam", 30).
?DOC(false).
-spec drop_extension(binary()) -> binary().
drop_extension(Filename) ->
    case gleam_stdlib:string_ends_with(Filename, <<".gleam"/utf8>>) of
        true ->
            gleam@string:drop_end(Filename, 6);

        false ->
            Filename
    end.

-file("src/glipt/internal/path.gleam", 37).
?DOC(false).
-spec init(list(binary())) -> list(binary()).
init(Items) ->
    case Items of
        [] ->
            [];

        [_] ->
            [];

        [X | Rest] ->
            [X | init(Rest)]
    end.

-file("src/glipt/internal/path.gleam", 15).
?DOC(false).
-spec dirname(binary()) -> binary().
dirname(Path) ->
    case gleam@string:split(Path, <<"/"/utf8>>) of
        [] ->
            <<"."/utf8>>;

        [_] ->
            <<"."/utf8>>;

        Parts ->
            Parent = init(Parts),
            case Parent of
                [] ->
                    <<"."/utf8>>;

                [<<""/utf8>>] ->
                    <<"/"/utf8>>;

                _ ->
                    gleam@string:join(Parent, <<"/"/utf8>>)
            end
    end.