-module(caffeine_lang@parser@file_discovery). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/caffeine_lang/parser/file_discovery.gleam"). -export([get_json_files/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. -file("src/caffeine_lang/parser/file_discovery.gleam", 28). -spec read_directory_or_error(binary()) -> {ok, list(binary())} | {error, caffeine_lang@common@errors:compilation_error()}. read_directory_or_error(Directory_path) -> case simplifile_erl:read_directory(Directory_path) of {ok, Items} -> {ok, Items}; {error, Err} -> {error, {linker_parse_error, <<<<<<(simplifile:describe_error(Err))/binary, " ("/utf8>>/binary, Directory_path/binary>>/binary, ")"/utf8>>}} end. -file("src/caffeine_lang/parser/file_discovery.gleam", 79). -spec extract_json_files_with_full_paths(list(binary()), binary()) -> list(binary()). extract_json_files_with_full_paths(Files, Directory_path) -> _pipe = Files, _pipe@1 = gleam@list:filter( _pipe, fun(File) -> gleam_stdlib:string_ends_with(File, <<".json"/utf8>>) end ), gleam@list:map( _pipe@1, fun(File@1) -> <<<>/binary, File@1/binary>> end ). -file("src/caffeine_lang/parser/file_discovery.gleam", 55). -spec collect_json_files_from_subdirectory(binary(), list(binary())) -> {ok, list(binary())} | {error, caffeine_lang@common@errors:compilation_error()}. collect_json_files_from_subdirectory(Subdirectory_path, Accumulated_files) -> gleam@result:'try'( read_directory_or_error(Subdirectory_path), fun(Items_in_subdirectory) -> _pipe = Items_in_subdirectory, gleam@list:try_fold( _pipe, Accumulated_files, fun(Acc, Item_name) -> Nested_path = <<<>/binary, Item_name/binary>>, case simplifile_erl:is_directory(Nested_path) of {ok, true} -> gleam@result:'try'( read_directory_or_error(Nested_path), fun(Files_in_nested) -> Json_files = extract_json_files_with_full_paths( Files_in_nested, Nested_path ), {ok, lists:append(Acc, Json_files)} end ); _ -> {ok, Acc} end end ) end ). -file("src/caffeine_lang/parser/file_discovery.gleam", 40). -spec process_top_level_item(binary(), binary(), list(binary())) -> {ok, list(binary())} | {error, caffeine_lang@common@errors:compilation_error()}. process_top_level_item(Base_directory, Item_name, Accumulated_files) -> Item_path = <<<>/binary, Item_name/binary>>, case simplifile_erl:is_directory(Item_path) of {ok, true} -> collect_json_files_from_subdirectory(Item_path, Accumulated_files); _ -> {ok, Accumulated_files} end. -file("src/caffeine_lang/parser/file_discovery.gleam", 9). ?DOC(false). -spec get_json_files(binary()) -> {ok, list(binary())} | {error, caffeine_lang@common@errors:compilation_error()}. get_json_files(Base_directory) -> gleam@result:'try'( read_directory_or_error(Base_directory), fun(Top_level_items) -> Json_file_paths = begin _pipe = Top_level_items, gleam@list:try_fold( _pipe, [], fun(Accumulated_files, Item_name) -> process_top_level_item( Base_directory, Item_name, Accumulated_files ) end ) end, case Json_file_paths of {error, Err} -> {error, Err}; {ok, []} -> {error, {linker_parse_error, <<"No files found in: "/utf8, Base_directory/binary>>}}; {ok, Files} -> {ok, Files} end end ).