-module(proute@names). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/proute/names.gleam"). -export([snake_case/1, pascal_case/1, page_alias/1, helper_name/1, module_path_from_file/1, module_path_from_output_dir/1, is_valid_type_name/1, is_valid_label/1, is_valid_module_segment/1, is_valid_module_path/1, parse_type_reference/1]). -export_type([type_reference/0]). -type type_reference() :: {type_reference, binary(), binary()}. -file("src/proute/names.gleam", 10). -spec snake_case(binary()) -> binary(). snake_case(Value) -> justin:snake_case(Value). -file("src/proute/names.gleam", 14). -spec pascal_case(binary()) -> binary(). pascal_case(Value) -> _pipe = Value, _pipe@1 = gleam@string:replace(_pipe, <<"/"/utf8>>, <<"_"/utf8>>), justin:pascal_case(_pipe@1). -file("src/proute/names.gleam", 20). -spec page_alias(binary()) -> binary(). page_alias(Constructor) -> _pipe = Constructor, _pipe@1 = snake_case(_pipe), (fun(Name) -> <> end)(_pipe@1). -file("src/proute/names.gleam", 26). -spec helper_name(binary()) -> binary(). helper_name(Constructor) -> snake_case(Constructor). -file("src/proute/names.gleam", 101). -spec module_path_from_src_path(binary()) -> {ok, binary()} | {error, nil}. module_path_from_src_path(Path) -> case gleam_stdlib:string_starts_with(Path, <<"src/"/utf8>>) of true -> {ok, gleam@string:drop_start(Path, 4)}; false -> case begin _pipe = gleam@string:split(Path, <<"/src/"/utf8>>), gleam@list:last(_pipe) end of {ok, Module_path} when (Module_path =/= Path) andalso (Module_path =/= <<""/utf8>>) -> {ok, Module_path}; _ -> {error, nil} end end. -file("src/proute/names.gleam", 117). -spec drop_suffix(binary(), binary()) -> binary(). drop_suffix(Value, Suffix) -> case gleam_stdlib:string_ends_with(Value, Suffix) of true -> gleam@string:drop_end(Value, string:length(Suffix)); false -> Value end. -file("src/proute/names.gleam", 113). -spec normalize_path(binary()) -> binary(). normalize_path(Path) -> gleam@string:replace(Path, <<"\\"/utf8>>, <<"/"/utf8>>). -file("src/proute/names.gleam", 30). -spec module_path_from_file(binary()) -> {ok, binary()} | {error, nil}. module_path_from_file(Path) -> _pipe = Path, _pipe@1 = normalize_path(_pipe), _pipe@2 = drop_suffix(_pipe@1, <<".gleam"/utf8>>), module_path_from_src_path(_pipe@2). -file("src/proute/names.gleam", 37). -spec module_path_from_output_dir(binary()) -> {ok, binary()} | {error, nil}. module_path_from_output_dir(Path) -> _pipe = Path, _pipe@1 = normalize_path(_pipe), module_path_from_src_path(_pipe@1). -file("src/proute/names.gleam", 136). -spec is_reserved_word(binary()) -> boolean(). is_reserved_word(Name) -> _pipe = [<<"as"/utf8>>, <<"assert"/utf8>>, <<"case"/utf8>>, <<"const"/utf8>>, <<"external"/utf8>>, <<"fn"/utf8>>, <<"if"/utf8>>, <<"import"/utf8>>, <<"let"/utf8>>, <<"opaque"/utf8>>, <<"panic"/utf8>>, <<"pub"/utf8>>, <<"todo"/utf8>>, <<"type"/utf8>>, <<"use"/utf8>>], gleam@list:contains(_pipe, Name). -file("src/proute/names.gleam", 132). -spec is_digit(binary()) -> boolean(). is_digit(Char) -> gleam_stdlib:contains_string(<<"0123456789"/utf8>>, Char). -file("src/proute/names.gleam", 128). -spec is_uppercase_ascii(binary()) -> boolean(). is_uppercase_ascii(Char) -> gleam_stdlib:contains_string(<<"ABCDEFGHIJKLMNOPQRSTUVWXYZ"/utf8>>, Char). -file("src/proute/names.gleam", 124). -spec is_lowercase_ascii(binary()) -> boolean(). is_lowercase_ascii(Char) -> gleam_stdlib:contains_string(<<"abcdefghijklmnopqrstuvwxyz"/utf8>>, Char). -file("src/proute/names.gleam", 84). -spec is_valid_type_name(binary()) -> boolean(). is_valid_type_name(Name) -> Chars = gleam@string:to_graphemes(Name), case Chars of [] -> false; [First | Rest] -> (is_uppercase_ascii(First) andalso gleam@list:all( Rest, fun(Char) -> ((is_lowercase_ascii(Char) orelse is_uppercase_ascii(Char)) orelse is_digit(Char)) orelse (Char =:= <<"_"/utf8>>) end )) andalso not is_reserved_word(Name) end. -file("src/proute/names.gleam", 70). -spec is_valid_label(binary()) -> boolean(). is_valid_label(Name) -> Chars = gleam@string:to_graphemes(Name), case Chars of [] -> false; [First | Rest] -> (is_lowercase_ascii(First) andalso gleam@list:all( Rest, fun(Char) -> (is_lowercase_ascii(Char) orelse is_digit(Char)) orelse (Char =:= <<"_"/utf8>>) end )) andalso not is_reserved_word(Name) end. -file("src/proute/names.gleam", 66). -spec is_valid_module_segment(binary()) -> boolean(). is_valid_module_segment(Segment) -> is_valid_label(Segment). -file("src/proute/names.gleam", 57). -spec is_valid_module_path(binary()) -> boolean(). is_valid_module_path(Path) -> (Path /= <<""/utf8>>) andalso begin _pipe = Path, _pipe@1 = gleam@string:split(_pipe, <<"/"/utf8>>), gleam@list:all(_pipe@1, fun is_valid_module_segment/1) end. -file("src/proute/names.gleam", 43). -spec parse_type_reference(binary()) -> {ok, type_reference()} | {error, nil}. parse_type_reference(Value) -> gleam@result:'try'(case gleam@string:split(Value, <<"."/utf8>>) of [Module_path, Type_name] -> {ok, {Module_path, Type_name}}; _ -> {error, nil} end, fun(Parts) -> {Module_path@1, Type_name@1} = Parts, case is_valid_module_path(Module_path@1) andalso is_valid_type_name( Type_name@1 ) of true -> {ok, {type_reference, Module_path@1, Type_name@1}}; false -> {error, nil} end end).