-module(oaspec@internal@openapi@external_loader). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/oaspec/internal/openapi/external_loader.gleam"). -export([resolve_external_component_refs/3]). -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/oaspec/internal/openapi/external_loader.gleam", 159). ?DOC(false). -spec process_components( oaspec@internal@openapi@spec:components(oaspec@internal@openapi@spec:unresolved()), binary(), fun((binary()) -> {ok, oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:unresolved())} | {error, oaspec@openapi@diagnostic:diagnostic()}), list(binary()) ) -> {ok, {oaspec@internal@openapi@spec:components(oaspec@internal@openapi@spec:unresolved()), gleam@dict:dict(binary(), binary())}} | {error, oaspec@openapi@diagnostic:diagnostic()}. process_components(Components, Base_dir, Parse_file, Original_local_names) -> Entries = maps:to_list(erlang:element(2, Components)), gleam@result:'try'( gleam@list:try_fold( Entries, {[], maps:new()}, fun(Acc, Entry) -> {Pending, Imported} = Acc, {Name, Schema_ref} = Entry, case oaspec@internal@openapi@external_loader_planner:extract_external_ref( Schema_ref ) of {some, {Rel_path, Fragment_name}} -> Resolved_path = filepath:join(Base_dir, Rel_path), gleam@result:'try'( oaspec@internal@openapi@external_loader_planner:check_local_collision( Name, Fragment_name, Resolved_path, Original_local_names ), fun(_) -> gleam@result:'try'( oaspec@internal@openapi@external_loader_planner:check_cross_file_collision( Fragment_name, Resolved_path, Imported ), fun(_) -> gleam@result:'try'( Parse_file(Resolved_path), fun(Loaded) -> gleam@result:'try'( oaspec@internal@openapi@external_loader_planner:find_external_schema( Loaded, Fragment_name, Resolved_path ), fun(Target) -> Local_ref = {reference, <<"#/components/schemas/"/utf8, Fragment_name/binary>>, Fragment_name}, Pending@1 = [{Name, Local_ref}, {Fragment_name, Target} | Pending], Imported@1 = gleam@dict:insert( Imported, Fragment_name, Resolved_path ), {ok, {Pending@1, Imported@1}} end ) end ) end ) end ); none -> {ok, {[{Name, Schema_ref} | Pending], Imported}} end end ), fun(_use0) -> {New_entries, Imported@2} = _use0, Merged = gleam@list:fold( New_entries, maps:new(), fun(D, Pair) -> gleam@dict:insert( D, erlang:element(1, Pair), erlang:element(2, Pair) ) end ), {ok, {{components, Merged, erlang:element(3, Components), erlang:element(4, Components), erlang:element(5, Components), erlang:element(6, Components), erlang:element(7, Components), erlang:element(8, Components), erlang:element(9, Components), erlang:element(10, Components), erlang:element(11, Components)}, Imported@2}} end ). -file("src/oaspec/internal/openapi/external_loader.gleam", 273). ?DOC(false). -spec resolve_ref_or_dict( gleam@dict:dict(binary(), oaspec@internal@openapi@spec:ref_or(ULA)), binary(), fun((binary()) -> {ok, oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:unresolved())} | {error, oaspec@openapi@diagnostic:diagnostic()}), binary(), fun((oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:unresolved()), binary(), binary()) -> {ok, ULA} | {error, oaspec@openapi@diagnostic:diagnostic()}) ) -> {ok, gleam@dict:dict(binary(), oaspec@internal@openapi@spec:ref_or(ULA))} | {error, oaspec@openapi@diagnostic:diagnostic()}. resolve_ref_or_dict(Entries, Base_dir, Parse_file, Target_prefix, Finder) -> Pairs = maps:to_list(Entries), gleam@result:'try'( gleam@list:try_fold( Pairs, [], fun(Acc, Entry) -> {Name, Ref_or_val} = Entry, case Ref_or_val of {ref, Ref_str} -> case oaspec@internal@openapi@external_loader_planner:extract_external_component_ref( Ref_str ) of {some, {File_path, Prefix, Obj_name}} when Prefix =:= Target_prefix -> Resolved_path = filepath:join( Base_dir, File_path ), gleam@result:'try'( Parse_file(Resolved_path), fun(Loaded) -> gleam@result:'try'( Finder( Loaded, Obj_name, Resolved_path ), fun(Target) -> {ok, [{Name, {value, Target}} | Acc]} end ) end ); _ -> {ok, [{Name, Ref_or_val} | Acc]} end; {value, _} -> {ok, [{Name, Ref_or_val} | Acc]} end end ), fun(New_pairs) -> {ok, gleam@list:fold( New_pairs, maps:new(), fun(D, Pair) -> gleam@dict:insert( D, erlang:element(1, Pair), erlang:element(2, Pair) ) end )} end ). -file("src/oaspec/internal/openapi/external_loader.gleam", 222). ?DOC(false). -spec process_whole_object_refs( oaspec@internal@openapi@spec:components(oaspec@internal@openapi@spec:unresolved()), binary(), fun((binary()) -> {ok, oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:unresolved())} | {error, oaspec@openapi@diagnostic:diagnostic()}) ) -> {ok, oaspec@internal@openapi@spec:components(oaspec@internal@openapi@spec:unresolved())} | {error, oaspec@openapi@diagnostic:diagnostic()}. process_whole_object_refs(Components, Base_dir, Parse_file) -> gleam@result:'try'( resolve_ref_or_dict( erlang:element(3, Components), Base_dir, Parse_file, <<"/components/parameters/"/utf8>>, fun oaspec@internal@openapi@external_loader_planner:find_external_parameter/3 ), fun(New_parameters) -> gleam@result:'try'( resolve_ref_or_dict( erlang:element(4, Components), Base_dir, Parse_file, <<"/components/requestBodies/"/utf8>>, fun oaspec@internal@openapi@external_loader_planner:find_external_request_body/3 ), fun(New_request_bodies) -> gleam@result:'try'( resolve_ref_or_dict( erlang:element(5, Components), Base_dir, Parse_file, <<"/components/responses/"/utf8>>, fun oaspec@internal@openapi@external_loader_planner:find_external_response/3 ), fun(New_responses) -> gleam@result:'try'( resolve_ref_or_dict( erlang:element(7, Components), Base_dir, Parse_file, <<"/components/pathItems/"/utf8>>, fun oaspec@internal@openapi@external_loader_planner:find_external_path_item/3 ), fun(New_path_items) -> {ok, {components, erlang:element(2, Components), New_parameters, New_request_bodies, New_responses, erlang:element(6, Components), New_path_items, erlang:element(8, Components), erlang:element(9, Components), erlang:element(10, Components), erlang:element(11, Components)}} end ) end ) end ) end ). -file("src/oaspec/internal/openapi/external_loader.gleam", 465). ?DOC(false). -spec no_target() -> oaspec@internal@openapi@schema:schema_ref(). no_target() -> {reference, <<""/utf8>>, <<""/utf8>>}. -file("src/oaspec/internal/openapi/external_loader.gleam", 1420). ?DOC(false). -spec maybe_hoist_ref( oaspec@internal@openapi@schema:schema_ref(), binary(), fun((binary()) -> {ok, oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:unresolved())} | {error, oaspec@openapi@diagnostic:diagnostic()}), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()}), list(binary()) ) -> {ok, {oaspec@internal@openapi@schema:schema_ref(), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()})}} | {error, oaspec@openapi@diagnostic:diagnostic()}. maybe_hoist_ref(Schema_ref, Base_dir, Parse_file, Imports, Original_local_names) -> case oaspec@internal@openapi@external_loader_planner:extract_external_ref( Schema_ref ) of {some, {Rel_path, Fragment_name}} -> Resolved_path = filepath:join(Base_dir, Rel_path), gleam@result:'try'( oaspec@internal@openapi@external_loader_planner:check_nested_local_collision( Fragment_name, Resolved_path, Original_local_names ), fun(_) -> gleam@result:'try'( oaspec@internal@openapi@external_loader_planner:check_nested_cross_file_collision( Fragment_name, Resolved_path, Imports ), fun(_) -> gleam@result:'try'( Parse_file(Resolved_path), fun(Loaded) -> gleam@result:'try'( oaspec@internal@openapi@external_loader_planner:find_external_schema( Loaded, Fragment_name, Resolved_path ), fun(Target) -> Local_ref = {reference, <<"#/components/schemas/"/utf8, Fragment_name/binary>>, Fragment_name}, New_imports = gleam@dict:insert( Imports, Fragment_name, {Resolved_path, Target} ), {ok, {Local_ref, New_imports}} end ) end ) end ) end ); none -> {ok, {Schema_ref, Imports}} end. -file("src/oaspec/internal/openapi/external_loader.gleam", 1151). ?DOC(false). -spec rewrite_header_map( gleam@dict:dict(binary(), oaspec@internal@openapi@spec:header()), binary(), fun((binary()) -> {ok, oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:unresolved())} | {error, oaspec@openapi@diagnostic:diagnostic()}), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()}), list(binary()) ) -> {ok, {gleam@dict:dict(binary(), oaspec@internal@openapi@spec:header()), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()})}} | {error, oaspec@openapi@diagnostic:diagnostic()}. rewrite_header_map(Headers, Base_dir, Parse_file, Imports, Original_local_names) -> Entries = maps:to_list(Headers), gleam@result:'try'( gleam@list:try_fold( Entries, {[], Imports}, fun(Acc, Entry) -> {Collected, Imports@1} = Acc, {Name, Header} = Entry, case erlang:element(4, Header) of {some, Ref} -> gleam@result:'try'( maybe_hoist_ref( Ref, Base_dir, Parse_file, Imports@1, Original_local_names ), fun(_use0) -> {New_ref, New_imports} = _use0, New_header = {header, erlang:element(2, Header), erlang:element(3, Header), {some, New_ref}}, {ok, {[{Name, New_header} | Collected], New_imports}} end ); none -> {ok, {[{Name, Header} | Collected], Imports@1}} end end ), fun(_use0@1) -> {Rewritten, New_imports@1} = _use0@1, New_map = gleam@list:fold( Rewritten, maps:new(), fun(D, Pair) -> gleam@dict:insert( D, erlang:element(1, Pair), erlang:element(2, Pair) ) end ), {ok, {New_map, New_imports@1}} end ). -file("src/oaspec/internal/openapi/external_loader.gleam", 1193). ?DOC(false). -spec process_component_headers( oaspec@internal@openapi@spec:components(oaspec@internal@openapi@spec:unresolved()), binary(), fun((binary()) -> {ok, oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:unresolved())} | {error, oaspec@openapi@diagnostic:diagnostic()}), list(binary()), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()}) ) -> {ok, {oaspec@internal@openapi@spec:components(oaspec@internal@openapi@spec:unresolved()), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()})}} | {error, oaspec@openapi@diagnostic:diagnostic()}. process_component_headers( Components, Base_dir, Parse_file, Original_local_names, Seeded_imports ) -> gleam@result:'try'( rewrite_header_map( erlang:element(8, Components), Base_dir, Parse_file, Seeded_imports, Original_local_names ), fun(_use0) -> {New_headers, Final_imports} = _use0, New_schemas = gleam@dict:fold( Final_imports, erlang:element(2, Components), fun(D, Frag_name, Pair) -> {_, Target_schema} = Pair, case {gleam@dict:has_key(D, Frag_name), Target_schema} of {true, _} -> D; {false, {inline, _}} -> gleam@dict:insert(D, Frag_name, Target_schema); {false, _} -> D end end ), {ok, {{components, New_schemas, erlang:element(3, Components), erlang:element(4, Components), erlang:element(5, Components), erlang:element(6, Components), erlang:element(7, Components), New_headers, erlang:element(9, Components), erlang:element(10, Components), erlang:element(11, Components)}, Final_imports}} end ). -file("src/oaspec/internal/openapi/external_loader.gleam", 1282). ?DOC(false). -spec rewrite_media_type_map( gleam@dict:dict(binary(), oaspec@internal@openapi@spec:media_type()), binary(), fun((binary()) -> {ok, oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:unresolved())} | {error, oaspec@openapi@diagnostic:diagnostic()}), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()}), list(binary()) ) -> {ok, {gleam@dict:dict(binary(), oaspec@internal@openapi@spec:media_type()), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()})}} | {error, oaspec@openapi@diagnostic:diagnostic()}. rewrite_media_type_map( Content, Base_dir, Parse_file, Imports, Original_local_names ) -> Entries = maps:to_list(Content), gleam@result:'try'( gleam@list:try_fold( Entries, {[], Imports}, fun(Acc, Entry) -> {Collected, Imports@1} = Acc, {Media_key, Media} = Entry, case erlang:element(2, Media) of {some, Ref} -> gleam@result:'try'( maybe_hoist_ref( Ref, Base_dir, Parse_file, Imports@1, Original_local_names ), fun(_use0) -> {New_ref, New_imports} = _use0, New_media = {media_type, {some, New_ref}, erlang:element(3, Media), erlang:element(4, Media), erlang:element(5, Media)}, {ok, {[{Media_key, New_media} | Collected], New_imports}} end ); none -> {ok, {[{Media_key, Media} | Collected], Imports@1}} end end ), fun(_use0@1) -> {Rewritten, New_imports@1} = _use0@1, New_content = gleam@list:fold( Rewritten, maps:new(), fun(D, Pair) -> gleam@dict:insert( D, erlang:element(1, Pair), erlang:element(2, Pair) ) end ), {ok, {New_content, New_imports@1}} end ). -file("src/oaspec/internal/openapi/external_loader.gleam", 852). ?DOC(false). -spec rewrite_optional_request_body( gleam@option:option(oaspec@internal@openapi@spec:ref_or(oaspec@internal@openapi@spec:request_body(oaspec@internal@openapi@spec:unresolved()))), binary(), fun((binary()) -> {ok, oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:unresolved())} | {error, oaspec@openapi@diagnostic:diagnostic()}), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()}), list(binary()) ) -> {ok, {gleam@option:option(oaspec@internal@openapi@spec:ref_or(oaspec@internal@openapi@spec:request_body(oaspec@internal@openapi@spec:unresolved()))), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()})}} | {error, oaspec@openapi@diagnostic:diagnostic()}. rewrite_optional_request_body( Body, Base_dir, Parse_file, Imports, Original_local_names ) -> case Body of {some, {value, Rb}} -> gleam@result:'try'( rewrite_media_type_map( erlang:element(3, Rb), Base_dir, Parse_file, Imports, Original_local_names ), fun(_use0) -> {New_content, New_imports} = _use0, New_rb = {request_body, erlang:element(2, Rb), New_content, erlang:element(4, Rb)}, {ok, {{some, {value, New_rb}}, New_imports}} end ); {some, {ref, _}} -> {ok, {Body, Imports}}; none -> {ok, {none, Imports}} end. -file("src/oaspec/internal/openapi/external_loader.gleam", 1066). ?DOC(false). -spec rewrite_ref_or_parameter( oaspec@internal@openapi@spec:ref_or(oaspec@internal@openapi@spec:parameter(oaspec@internal@openapi@spec:unresolved())), binary(), fun((binary()) -> {ok, oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:unresolved())} | {error, oaspec@openapi@diagnostic:diagnostic()}), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()}), list(binary()) ) -> {ok, {oaspec@internal@openapi@spec:ref_or(oaspec@internal@openapi@spec:parameter(oaspec@internal@openapi@spec:unresolved())), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()})}} | {error, oaspec@openapi@diagnostic:diagnostic()}. rewrite_ref_or_parameter( Ref_or_param, Base_dir, Parse_file, Imports, Original_local_names ) -> case Ref_or_param of {value, P} -> case erlang:element(6, P) of {parameter_schema, Schema_ref} -> gleam@result:'try'( maybe_hoist_ref( Schema_ref, Base_dir, Parse_file, Imports, Original_local_names ), fun(_use0) -> {New_ref, New_imports} = _use0, New_param = {parameter, erlang:element(2, P), erlang:element(3, P), erlang:element(4, P), erlang:element(5, P), {parameter_schema, New_ref}, erlang:element(7, P), erlang:element(8, P), erlang:element(9, P), erlang:element(10, P), erlang:element(11, P)}, {ok, {{value, New_param}, New_imports}} end ); {parameter_content, Content} -> gleam@result:'try'( rewrite_media_type_map( Content, Base_dir, Parse_file, Imports, Original_local_names ), fun(_use0@1) -> {New_content, New_imports@1} = _use0@1, New_param@1 = {parameter, erlang:element(2, P), erlang:element(3, P), erlang:element(4, P), erlang:element(5, P), {parameter_content, New_content}, erlang:element(7, P), erlang:element(8, P), erlang:element(9, P), erlang:element(10, P), erlang:element(11, P)}, {ok, {{value, New_param@1}, New_imports@1}} end ) end; {ref, _} -> {ok, {Ref_or_param, Imports}} end. -file("src/oaspec/internal/openapi/external_loader.gleam", 530). ?DOC(false). -spec rewrite_parameter_list( list(oaspec@internal@openapi@spec:ref_or(oaspec@internal@openapi@spec:parameter(oaspec@internal@openapi@spec:unresolved()))), binary(), fun((binary()) -> {ok, oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:unresolved())} | {error, oaspec@openapi@diagnostic:diagnostic()}), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()}), list(binary()) ) -> {ok, {list(oaspec@internal@openapi@spec:ref_or(oaspec@internal@openapi@spec:parameter(oaspec@internal@openapi@spec:unresolved()))), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()})}} | {error, oaspec@openapi@diagnostic:diagnostic()}. rewrite_parameter_list( Parameters, Base_dir, Parse_file, Imports, Original_local_names ) -> gleam@result:'try'( gleam@list:try_fold( Parameters, {[], Imports}, fun(Acc, Item) -> {Done, Imports@1} = Acc, gleam@result:'try'( rewrite_ref_or_parameter( Item, Base_dir, Parse_file, Imports@1, Original_local_names ), fun(_use0) -> {New_item, New_imports} = _use0, {ok, {[New_item | Done], New_imports}} end ) end ), fun(_use0@1) -> {Collected, New_imports@1} = _use0@1, {ok, {lists:reverse(Collected), New_imports@1}} end ). -file("src/oaspec/internal/openapi/external_loader.gleam", 930). ?DOC(false). -spec process_parameter_schemas( oaspec@internal@openapi@spec:components(oaspec@internal@openapi@spec:unresolved()), binary(), fun((binary()) -> {ok, oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:unresolved())} | {error, oaspec@openapi@diagnostic:diagnostic()}), list(binary()), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()}) ) -> {ok, {oaspec@internal@openapi@spec:components(oaspec@internal@openapi@spec:unresolved()), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()})}} | {error, oaspec@openapi@diagnostic:diagnostic()}. process_parameter_schemas( Components, Base_dir, Parse_file, Original_local_names, Seeded_imports ) -> Entries = maps:to_list(erlang:element(3, Components)), gleam@result:'try'( gleam@list:try_fold( Entries, {[], Seeded_imports}, fun(Acc, Entry) -> {Collected, Imports} = Acc, {Name, Ref_or_param} = Entry, gleam@result:'try'( rewrite_ref_or_parameter( Ref_or_param, Base_dir, Parse_file, Imports, Original_local_names ), fun(_use0) -> {New_param, New_imports} = _use0, {ok, {[{Name, New_param} | Collected], New_imports}} end ) end ), fun(_use0@1) -> {Rewritten, Imports@1} = _use0@1, New_parameters = gleam@list:fold( Rewritten, maps:new(), fun(D, Pair) -> gleam@dict:insert( D, erlang:element(1, Pair), erlang:element(2, Pair) ) end ), New_schemas = gleam@dict:fold( Imports@1, erlang:element(2, Components), fun(D@1, Frag_name, Pair@1) -> {_, Target_schema} = Pair@1, case {gleam@dict:has_key(D@1, Frag_name), Target_schema} of {true, _} -> D@1; {false, {inline, _}} -> gleam@dict:insert(D@1, Frag_name, Target_schema); {false, _} -> D@1 end end ), {ok, {{components, New_schemas, New_parameters, erlang:element(4, Components), erlang:element(5, Components), erlang:element(6, Components), erlang:element(7, Components), erlang:element(8, Components), erlang:element(9, Components), erlang:element(10, Components), erlang:element(11, Components)}, Imports@1}} end ). -file("src/oaspec/internal/openapi/external_loader.gleam", 1115). ?DOC(false). -spec rewrite_response_value( oaspec@internal@openapi@spec:response(oaspec@internal@openapi@spec:unresolved()), binary(), fun((binary()) -> {ok, oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:unresolved())} | {error, oaspec@openapi@diagnostic:diagnostic()}), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()}), list(binary()) ) -> {ok, {oaspec@internal@openapi@spec:response(oaspec@internal@openapi@spec:unresolved()), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()})}} | {error, oaspec@openapi@diagnostic:diagnostic()}. rewrite_response_value( Response, Base_dir, Parse_file, Imports, Original_local_names ) -> gleam@result:'try'( rewrite_media_type_map( erlang:element(3, Response), Base_dir, Parse_file, Imports, Original_local_names ), fun(_use0) -> {New_content, Imports_after_content} = _use0, gleam@result:'try'( rewrite_header_map( erlang:element(4, Response), Base_dir, Parse_file, Imports_after_content, Original_local_names ), fun(_use0@1) -> {New_headers, New_imports} = _use0@1, {ok, {{response, erlang:element(2, Response), New_content, New_headers, erlang:element(5, Response)}, New_imports}} end ) end ). -file("src/oaspec/internal/openapi/external_loader.gleam", 882). ?DOC(false). -spec rewrite_response_map( gleam@dict:dict(oaspec@internal@util@http:http_status_code(), oaspec@internal@openapi@spec:ref_or(oaspec@internal@openapi@spec:response(oaspec@internal@openapi@spec:unresolved()))), binary(), fun((binary()) -> {ok, oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:unresolved())} | {error, oaspec@openapi@diagnostic:diagnostic()}), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()}), list(binary()) ) -> {ok, {gleam@dict:dict(oaspec@internal@util@http:http_status_code(), oaspec@internal@openapi@spec:ref_or(oaspec@internal@openapi@spec:response(oaspec@internal@openapi@spec:unresolved()))), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()})}} | {error, oaspec@openapi@diagnostic:diagnostic()}. rewrite_response_map( Responses, Base_dir, Parse_file, Imports, Original_local_names ) -> Entries = maps:to_list(Responses), gleam@result:'try'( gleam@list:try_fold( Entries, {[], Imports}, fun(Acc, Entry) -> {Collected, Imports@1} = Acc, {Status, Ref_or_resp} = Entry, case Ref_or_resp of {value, Resp} -> gleam@result:'try'( rewrite_response_value( Resp, Base_dir, Parse_file, Imports@1, Original_local_names ), fun(_use0) -> {New_resp, New_imports} = _use0, {ok, {[{Status, {value, New_resp}} | Collected], New_imports}} end ); {ref, _} -> {ok, {[{Status, Ref_or_resp} | Collected], Imports@1}} end end ), fun(_use0@1) -> {Rewritten, New_imports@1} = _use0@1, New_map = gleam@list:fold( Rewritten, maps:new(), fun(D, Pair) -> gleam@dict:insert( D, erlang:element(1, Pair), erlang:element(2, Pair) ) end ), {ok, {New_map, New_imports@1}} end ). -file("src/oaspec/internal/openapi/external_loader.gleam", 984). ?DOC(false). -spec process_body_response_schemas( oaspec@internal@openapi@spec:components(oaspec@internal@openapi@spec:unresolved()), binary(), fun((binary()) -> {ok, oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:unresolved())} | {error, oaspec@openapi@diagnostic:diagnostic()}), list(binary()), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()}) ) -> {ok, {oaspec@internal@openapi@spec:components(oaspec@internal@openapi@spec:unresolved()), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()})}} | {error, oaspec@openapi@diagnostic:diagnostic()}. process_body_response_schemas( Components, Base_dir, Parse_file, Original_local_names, Seeded_imports ) -> Body_entries = maps:to_list(erlang:element(4, Components)), gleam@result:'try'( gleam@list:try_fold( Body_entries, {[], Seeded_imports}, fun(Acc, Entry) -> {Collected, Imports} = Acc, {Name, Ref_or_body} = Entry, case Ref_or_body of {value, Body} -> gleam@result:'try'( rewrite_media_type_map( erlang:element(3, Body), Base_dir, Parse_file, Imports, Original_local_names ), fun(_use0) -> {New_content, New_imports} = _use0, New_body = {request_body, erlang:element(2, Body), New_content, erlang:element(4, Body)}, {ok, {[{Name, {value, New_body}} | Collected], New_imports}} end ); {ref, _} -> {ok, {[{Name, Ref_or_body} | Collected], Imports}} end end ), fun(_use0@1) -> {New_bodies, Imports_after_bodies} = _use0@1, Response_entries = maps:to_list(erlang:element(5, Components)), gleam@result:'try'( gleam@list:try_fold( Response_entries, {[], Imports_after_bodies}, fun(Acc@1, Entry@1) -> {Collected@1, Imports@1} = Acc@1, {Name@1, Ref_or_resp} = Entry@1, case Ref_or_resp of {value, Resp} -> gleam@result:'try'( rewrite_response_value( Resp, Base_dir, Parse_file, Imports@1, Original_local_names ), fun(_use0@2) -> {New_resp, New_imports@1} = _use0@2, {ok, {[{Name@1, {value, New_resp}} | Collected@1], New_imports@1}} end ); {ref, _} -> {ok, {[{Name@1, Ref_or_resp} | Collected@1], Imports@1}} end end ), fun(_use0@3) -> {New_responses, Final_imports} = _use0@3, New_request_bodies = gleam@list:fold( New_bodies, maps:new(), fun(D, Pair) -> gleam@dict:insert( D, erlang:element(1, Pair), erlang:element(2, Pair) ) end ), New_responses_dict = gleam@list:fold( New_responses, maps:new(), fun(D@1, Pair@1) -> gleam@dict:insert( D@1, erlang:element(1, Pair@1), erlang:element(2, Pair@1) ) end ), New_schemas = gleam@dict:fold( Final_imports, erlang:element(2, Components), fun(D@2, Frag_name, Pair@2) -> {_, Target_schema} = Pair@2, case {gleam@dict:has_key(D@2, Frag_name), Target_schema} of {true, _} -> D@2; {false, {inline, _}} -> gleam@dict:insert( D@2, Frag_name, Target_schema ); {false, _} -> D@2 end end ), {ok, {{components, New_schemas, erlang:element(3, Components), New_request_bodies, New_responses_dict, erlang:element(6, Components), erlang:element(7, Components), erlang:element(8, Components), erlang:element(9, Components), erlang:element(10, Components), erlang:element(11, Components)}, Final_imports}} end ) end ). -file("src/oaspec/internal/openapi/external_loader.gleam", 1324). ?DOC(false). -spec rewrite_object_properties( gleam@dict:dict(binary(), oaspec@internal@openapi@schema:schema_ref()), binary(), fun((binary()) -> {ok, oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:unresolved())} | {error, oaspec@openapi@diagnostic:diagnostic()}), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()}), list(binary()) ) -> {ok, {gleam@dict:dict(binary(), oaspec@internal@openapi@schema:schema_ref()), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()})}} | {error, oaspec@openapi@diagnostic:diagnostic()}. rewrite_object_properties( Properties, Base_dir, Parse_file, Imports, Original_local_names ) -> Entries = maps:to_list(Properties), gleam@result:'try'( gleam@list:try_fold( Entries, {[], Imports}, fun(Acc, Entry) -> {Prop_acc, Imports@1} = Acc, {Prop_name, Prop_ref} = Entry, gleam@result:'try'( maybe_hoist_ref( Prop_ref, Base_dir, Parse_file, Imports@1, Original_local_names ), fun(_use0) -> {New_ref, New_imports} = _use0, {ok, {[{Prop_name, New_ref} | Prop_acc], New_imports}} end ) end ), fun(_use0@1) -> {New_entries, New_imports@1} = _use0@1, New_properties = gleam@list:fold( New_entries, maps:new(), fun(D, Pair) -> gleam@dict:insert( D, erlang:element(1, Pair), erlang:element(2, Pair) ) end ), {ok, {New_properties, New_imports@1}} end ). -file("src/oaspec/internal/openapi/external_loader.gleam", 1360). ?DOC(false). -spec rewrite_additional_properties( oaspec@internal@openapi@schema:additional_properties(), binary(), fun((binary()) -> {ok, oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:unresolved())} | {error, oaspec@openapi@diagnostic:diagnostic()}), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()}), list(binary()) ) -> {ok, {oaspec@internal@openapi@schema:additional_properties(), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()})}} | {error, oaspec@openapi@diagnostic:diagnostic()}. rewrite_additional_properties( Additional, Base_dir, Parse_file, Imports, Original_local_names ) -> case Additional of {typed, Ref} -> gleam@result:'try'( maybe_hoist_ref( Ref, Base_dir, Parse_file, Imports, Original_local_names ), fun(_use0) -> {New_ref, New_imports} = _use0, {ok, {{typed, New_ref}, New_imports}} end ); _ -> {ok, {Additional, Imports}} end. -file("src/oaspec/internal/openapi/external_loader.gleam", 1389). ?DOC(false). -spec rewrite_schema_list( list(oaspec@internal@openapi@schema:schema_ref()), binary(), fun((binary()) -> {ok, oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:unresolved())} | {error, oaspec@openapi@diagnostic:diagnostic()}), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()}), list(binary()) ) -> {ok, {list(oaspec@internal@openapi@schema:schema_ref()), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()})}} | {error, oaspec@openapi@diagnostic:diagnostic()}. rewrite_schema_list( Branches, Base_dir, Parse_file, Imports, Original_local_names ) -> gleam@result:'try'( gleam@list:try_fold( Branches, {[], Imports}, fun(Acc, Branch) -> {Collected, Imports@1} = Acc, gleam@result:'try'( maybe_hoist_ref( Branch, Base_dir, Parse_file, Imports@1, Original_local_names ), fun(_use0) -> {New_branch, New_imports} = _use0, {ok, {[New_branch | Collected], New_imports}} end ) end ), fun(_use0@1) -> {Rewritten, New_imports@1} = _use0@1, {ok, {lists:reverse(Rewritten), New_imports@1}} end ). -file("src/oaspec/internal/openapi/external_loader.gleam", 318). ?DOC(false). -spec process_nested_property_refs( oaspec@internal@openapi@spec:components(oaspec@internal@openapi@spec:unresolved()), binary(), fun((binary()) -> {ok, oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:unresolved())} | {error, oaspec@openapi@diagnostic:diagnostic()}), list(binary()), gleam@dict:dict(binary(), binary()) ) -> {ok, {oaspec@internal@openapi@spec:components(oaspec@internal@openapi@spec:unresolved()), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()})}} | {error, oaspec@openapi@diagnostic:diagnostic()}. process_nested_property_refs( Components, Base_dir, Parse_file, Original_local_names, Top_imported ) -> Entries = maps:to_list(erlang:element(2, Components)), Seeded_imports = gleam@dict:fold( Top_imported, maps:new(), fun(D, Frag_name, Source_path) -> gleam@dict:insert(D, Frag_name, {Source_path, no_target()}) end ), gleam@result:'try'( gleam@list:try_fold( Entries, {[], Seeded_imports}, fun(Acc, Entry) -> {Rewritten_acc, Imports} = Acc, {Name, Schema_ref} = Entry, case Schema_ref of {inline, {object_schema, Metadata, Properties, Required, Additional_properties, Min_properties, Max_properties}} -> gleam@result:'try'( rewrite_object_properties( Properties, Base_dir, Parse_file, Imports, Original_local_names ), fun(_use0) -> {New_properties, Props_imports} = _use0, gleam@result:'try'( rewrite_additional_properties( Additional_properties, Base_dir, Parse_file, Props_imports, Original_local_names ), fun(_use0@1) -> {New_additional_properties, New_imports} = _use0@1, New_obj = {object_schema, Metadata, New_properties, Required, New_additional_properties, Min_properties, Max_properties}, {ok, {[{Name, {inline, New_obj}} | Rewritten_acc], New_imports}} end ) end ); {inline, {array_schema, Metadata@1, Items, Min_items, Max_items, Unique_items}} -> gleam@result:'try'( maybe_hoist_ref( Items, Base_dir, Parse_file, Imports, Original_local_names ), fun(_use0@2) -> {New_items, New_imports@1} = _use0@2, New_arr = {array_schema, Metadata@1, New_items, Min_items, Max_items, Unique_items}, {ok, {[{Name, {inline, New_arr}} | Rewritten_acc], New_imports@1}} end ); {inline, {all_of_schema, Metadata@2, Branches}} -> gleam@result:'try'( rewrite_schema_list( Branches, Base_dir, Parse_file, Imports, Original_local_names ), fun(_use0@3) -> {New_branches, New_imports@2} = _use0@3, New_all = {all_of_schema, Metadata@2, New_branches}, {ok, {[{Name, {inline, New_all}} | Rewritten_acc], New_imports@2}} end ); {inline, {one_of_schema, Metadata@3, Branches@1, Discriminator}} -> gleam@result:'try'( rewrite_schema_list( Branches@1, Base_dir, Parse_file, Imports, Original_local_names ), fun(_use0@4) -> {New_branches@1, New_imports@3} = _use0@4, New_one = {one_of_schema, Metadata@3, New_branches@1, Discriminator}, {ok, {[{Name, {inline, New_one}} | Rewritten_acc], New_imports@3}} end ); {inline, {any_of_schema, Metadata@4, Branches@2, Discriminator@1}} -> gleam@result:'try'( rewrite_schema_list( Branches@2, Base_dir, Parse_file, Imports, Original_local_names ), fun(_use0@5) -> {New_branches@2, New_imports@4} = _use0@5, New_any = {any_of_schema, Metadata@4, New_branches@2, Discriminator@1}, {ok, {[{Name, {inline, New_any}} | Rewritten_acc], New_imports@4}} end ); _ -> {ok, {[{Name, Schema_ref} | Rewritten_acc], Imports}} end end ), fun(_use0@6) -> {Rewritten, Imports@1} = _use0@6, Merged = gleam@list:fold( Rewritten, maps:new(), fun(D@1, Pair) -> gleam@dict:insert( D@1, erlang:element(1, Pair), erlang:element(2, Pair) ) end ), Merged@1 = gleam@dict:fold( Imports@1, Merged, fun(D@2, Frag_name@1, Pair@1) -> {_, Target_schema} = Pair@1, case {gleam@dict:has_key(D@2, Frag_name@1), Target_schema} of {true, _} -> D@2; {false, {inline, _}} -> gleam@dict:insert(D@2, Frag_name@1, Target_schema); {false, _} -> D@2 end end ), {ok, {{components, Merged@1, erlang:element(3, Components), erlang:element(4, Components), erlang:element(5, Components), erlang:element(6, Components), erlang:element(7, Components), erlang:element(8, Components), erlang:element(9, Components), erlang:element(10, Components), erlang:element(11, Components)}, Imports@1}} end ). -file("src/oaspec/internal/openapi/external_loader.gleam", 809). ?DOC(false). -spec rewrite_callback_entries( gleam@dict:dict(binary(), oaspec@internal@openapi@spec:ref_or(oaspec@internal@openapi@spec:path_item(oaspec@internal@openapi@spec:unresolved()))), binary(), fun((binary()) -> {ok, oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:unresolved())} | {error, oaspec@openapi@diagnostic:diagnostic()}), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()}), list(binary()) ) -> {ok, {gleam@dict:dict(binary(), oaspec@internal@openapi@spec:ref_or(oaspec@internal@openapi@spec:path_item(oaspec@internal@openapi@spec:unresolved()))), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()})}} | {error, oaspec@openapi@diagnostic:diagnostic()}. rewrite_callback_entries( Entries, Base_dir, Parse_file, Imports, Original_local_names ) -> Pairs = maps:to_list(Entries), gleam@result:'try'( gleam@list:try_fold( Pairs, {[], Imports}, fun(Acc, Entry) -> {Collected, Imports@1} = Acc, {Url_expr, Ref_or_item} = Entry, case Ref_or_item of {value, Path_item} -> gleam@result:'try'( rewrite_path_item( Path_item, Base_dir, Parse_file, Imports@1, Original_local_names ), fun(_use0) -> {New_path_item, New_imports} = _use0, {ok, {[{Url_expr, {value, New_path_item}} | Collected], New_imports}} end ); {ref, _} -> {ok, {[{Url_expr, Ref_or_item} | Collected], Imports@1}} end end ), fun(_use0@1) -> {Rewritten, New_imports@1} = _use0@1, New_map = gleam@list:fold( Rewritten, maps:new(), fun(D, Pair) -> gleam@dict:insert( D, erlang:element(1, Pair), erlang:element(2, Pair) ) end ), {ok, {New_map, New_imports@1}} end ). -file("src/oaspec/internal/openapi/external_loader.gleam", 562). ?DOC(false). -spec rewrite_path_item( oaspec@internal@openapi@spec:path_item(oaspec@internal@openapi@spec:unresolved()), binary(), fun((binary()) -> {ok, oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:unresolved())} | {error, oaspec@openapi@diagnostic:diagnostic()}), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()}), list(binary()) ) -> {ok, {oaspec@internal@openapi@spec:path_item(oaspec@internal@openapi@spec:unresolved()), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()})}} | {error, oaspec@openapi@diagnostic:diagnostic()}. rewrite_path_item( Path_item, Base_dir, Parse_file, Imports, Original_local_names ) -> gleam@result:'try'( rewrite_parameter_list( erlang:element(12, Path_item), Base_dir, Parse_file, Imports, Original_local_names ), fun(_use0) -> {New_parameters, Imports_after_params} = _use0, rewrite_path_item_methods( {path_item, erlang:element(2, Path_item), erlang:element(3, Path_item), erlang:element(4, Path_item), erlang:element(5, Path_item), erlang:element(6, Path_item), erlang:element(7, Path_item), erlang:element(8, Path_item), erlang:element(9, Path_item), erlang:element(10, Path_item), erlang:element(11, Path_item), New_parameters, erlang:element(13, Path_item)}, Base_dir, Parse_file, Imports_after_params, Original_local_names ) end ). -file("src/oaspec/internal/openapi/external_loader.gleam", 593). ?DOC(false). -spec rewrite_path_item_methods( oaspec@internal@openapi@spec:path_item(oaspec@internal@openapi@spec:unresolved()), binary(), fun((binary()) -> {ok, oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:unresolved())} | {error, oaspec@openapi@diagnostic:diagnostic()}), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()}), list(binary()) ) -> {ok, {oaspec@internal@openapi@spec:path_item(oaspec@internal@openapi@spec:unresolved()), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()})}} | {error, oaspec@openapi@diagnostic:diagnostic()}. rewrite_path_item_methods( Path_item, Base_dir, Parse_file, Imports, Original_local_names ) -> gleam@result:'try'( rewrite_optional_operation( erlang:element(4, Path_item), Base_dir, Parse_file, Imports, Original_local_names ), fun(_use0) -> {Get_op, Imports1} = _use0, gleam@result:'try'( rewrite_optional_operation( erlang:element(5, Path_item), Base_dir, Parse_file, Imports1, Original_local_names ), fun(_use0@1) -> {Post_op, Imports2} = _use0@1, gleam@result:'try'( rewrite_optional_operation( erlang:element(6, Path_item), Base_dir, Parse_file, Imports2, Original_local_names ), fun(_use0@2) -> {Put_op, Imports3} = _use0@2, gleam@result:'try'( rewrite_optional_operation( erlang:element(7, Path_item), Base_dir, Parse_file, Imports3, Original_local_names ), fun(_use0@3) -> {Delete_op, Imports4} = _use0@3, gleam@result:'try'( rewrite_optional_operation( erlang:element(8, Path_item), Base_dir, Parse_file, Imports4, Original_local_names ), fun(_use0@4) -> {Patch_op, Imports5} = _use0@4, gleam@result:'try'( rewrite_optional_operation( erlang:element(9, Path_item), Base_dir, Parse_file, Imports5, Original_local_names ), fun(_use0@5) -> {Head_op, Imports6} = _use0@5, gleam@result:'try'( rewrite_optional_operation( erlang:element( 10, Path_item ), Base_dir, Parse_file, Imports6, Original_local_names ), fun(_use0@6) -> {Options_op, Imports7} = _use0@6, gleam@result:'try'( rewrite_optional_operation( erlang:element( 11, Path_item ), Base_dir, Parse_file, Imports7, Original_local_names ), fun(_use0@7) -> {Trace_op, Final_imports} = _use0@7, {ok, {{path_item, erlang:element( 2, Path_item ), erlang:element( 3, Path_item ), Get_op, Post_op, Put_op, Delete_op, Patch_op, Head_op, Options_op, Trace_op, erlang:element( 12, Path_item ), erlang:element( 13, Path_item )}, Final_imports}} end ) end ) end ) end ) end ) end ) end ) end ). -file("src/oaspec/internal/openapi/external_loader.gleam", 675). ?DOC(false). -spec rewrite_optional_operation( gleam@option:option(oaspec@internal@openapi@spec:operation(oaspec@internal@openapi@spec:unresolved())), binary(), fun((binary()) -> {ok, oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:unresolved())} | {error, oaspec@openapi@diagnostic:diagnostic()}), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()}), list(binary()) ) -> {ok, {gleam@option:option(oaspec@internal@openapi@spec:operation(oaspec@internal@openapi@spec:unresolved())), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()})}} | {error, oaspec@openapi@diagnostic:diagnostic()}. rewrite_optional_operation( Op, Base_dir, Parse_file, Imports, Original_local_names ) -> case Op of {some, Operation} -> gleam@result:'try'( rewrite_operation( Operation, Base_dir, Parse_file, Imports, Original_local_names ), fun(_use0) -> {New_op, New_imports} = _use0, {ok, {{some, New_op}, New_imports}} end ); none -> {ok, {none, Imports}} end. -file("src/oaspec/internal/openapi/external_loader.gleam", 703). ?DOC(false). -spec rewrite_operation( oaspec@internal@openapi@spec:operation(oaspec@internal@openapi@spec:unresolved()), binary(), fun((binary()) -> {ok, oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:unresolved())} | {error, oaspec@openapi@diagnostic:diagnostic()}), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()}), list(binary()) ) -> {ok, {oaspec@internal@openapi@spec:operation(oaspec@internal@openapi@spec:unresolved()), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()})}} | {error, oaspec@openapi@diagnostic:diagnostic()}. rewrite_operation( Operation, Base_dir, Parse_file, Imports, Original_local_names ) -> gleam@result:'try'( rewrite_parameter_list( erlang:element(6, Operation), Base_dir, Parse_file, Imports, Original_local_names ), fun(_use0) -> {New_params, Imports_after_params} = _use0, gleam@result:'try'( rewrite_optional_request_body( erlang:element(7, Operation), Base_dir, Parse_file, Imports_after_params, Original_local_names ), fun(_use0@1) -> {New_body, Imports_after_body} = _use0@1, gleam@result:'try'( rewrite_response_map( erlang:element(8, Operation), Base_dir, Parse_file, Imports_after_body, Original_local_names ), fun(_use0@2) -> {New_responses, Imports_after_responses} = _use0@2, gleam@result:'try'( rewrite_callback_map( erlang:element(11, Operation), Base_dir, Parse_file, Imports_after_responses, Original_local_names ), fun(_use0@3) -> {New_callbacks, Final_imports} = _use0@3, {ok, {{operation, erlang:element(2, Operation), erlang:element(3, Operation), erlang:element(4, Operation), erlang:element(5, Operation), New_params, New_body, New_responses, erlang:element(9, Operation), erlang:element(10, Operation), New_callbacks, erlang:element(12, Operation), erlang:element(13, Operation)}, Final_imports}} end ) end ) end ) end ). -file("src/oaspec/internal/openapi/external_loader.gleam", 763). ?DOC(false). -spec rewrite_callback_map( gleam@dict:dict(binary(), oaspec@internal@openapi@spec:ref_or(oaspec@internal@openapi@spec:callback(oaspec@internal@openapi@spec:unresolved()))), binary(), fun((binary()) -> {ok, oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:unresolved())} | {error, oaspec@openapi@diagnostic:diagnostic()}), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()}), list(binary()) ) -> {ok, {gleam@dict:dict(binary(), oaspec@internal@openapi@spec:ref_or(oaspec@internal@openapi@spec:callback(oaspec@internal@openapi@spec:unresolved()))), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()})}} | {error, oaspec@openapi@diagnostic:diagnostic()}. rewrite_callback_map( Callbacks, Base_dir, Parse_file, Imports, Original_local_names ) -> Entries = maps:to_list(Callbacks), gleam@result:'try'( gleam@list:try_fold( Entries, {[], Imports}, fun(Acc, Entry) -> {Collected, Imports@1} = Acc, {Name, Ref_or_callback} = Entry, case Ref_or_callback of {ref, _} = R -> {ok, {[{Name, R} | Collected], Imports@1}}; {value, Callback} -> gleam@result:'try'( rewrite_callback_entries( erlang:element(2, Callback), Base_dir, Parse_file, Imports@1, Original_local_names ), fun(_use0) -> {New_entries, New_imports} = _use0, New_callback = {value, {callback, New_entries}}, {ok, {[{Name, New_callback} | Collected], New_imports}} end ) end end ), fun(_use0@1) -> {Rewritten, New_imports@1} = _use0@1, New_callbacks = gleam@list:fold( Rewritten, maps:new(), fun(D, Pair) -> gleam@dict:insert( D, erlang:element(1, Pair), erlang:element(2, Pair) ) end ), {ok, {New_callbacks, New_imports@1}} end ). -file("src/oaspec/internal/openapi/external_loader.gleam", 474). ?DOC(false). -spec process_operation_schemas( gleam@dict:dict(binary(), oaspec@internal@openapi@spec:ref_or(oaspec@internal@openapi@spec:path_item(oaspec@internal@openapi@spec:unresolved()))), oaspec@internal@openapi@spec:components(oaspec@internal@openapi@spec:unresolved()), binary(), fun((binary()) -> {ok, oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:unresolved())} | {error, oaspec@openapi@diagnostic:diagnostic()}), list(binary()), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()}) ) -> {ok, {gleam@dict:dict(binary(), oaspec@internal@openapi@spec:ref_or(oaspec@internal@openapi@spec:path_item(oaspec@internal@openapi@spec:unresolved()))), oaspec@internal@openapi@spec:components(oaspec@internal@openapi@spec:unresolved())}} | {error, oaspec@openapi@diagnostic:diagnostic()}. process_operation_schemas( Paths, Components, Base_dir, Parse_file, Original_local_names, Seeded_imports ) -> Entries = maps:to_list(Paths), gleam@result:'try'( gleam@list:try_fold( Entries, {[], Seeded_imports}, fun(Acc, Entry) -> {Collected, Imports} = Acc, {Path_key, Ref_or_item} = Entry, case Ref_or_item of {value, Path_item} -> gleam@result:'try'( rewrite_path_item( Path_item, Base_dir, Parse_file, Imports, Original_local_names ), fun(_use0) -> {New_path_item, New_imports} = _use0, {ok, {[{Path_key, {value, New_path_item}} | Collected], New_imports}} end ); {ref, _} -> {ok, {[{Path_key, Ref_or_item} | Collected], Imports}} end end ), fun(_use0@1) -> {Rewritten, Final_imports} = _use0@1, New_paths = gleam@list:fold( Rewritten, maps:new(), fun(D, Pair) -> gleam@dict:insert( D, erlang:element(1, Pair), erlang:element(2, Pair) ) end ), New_schemas = gleam@dict:fold( Final_imports, erlang:element(2, Components), fun(D@1, Frag_name, Pair@1) -> {_, Target_schema} = Pair@1, case {gleam@dict:has_key(D@1, Frag_name), Target_schema} of {true, _} -> D@1; {false, {inline, _}} -> gleam@dict:insert(D@1, Frag_name, Target_schema); {false, _} -> D@1 end end ), {ok, {New_paths, {components, New_schemas, erlang:element(3, Components), erlang:element(4, Components), erlang:element(5, Components), erlang:element(6, Components), erlang:element(7, Components), erlang:element(8, Components), erlang:element(9, Components), erlang:element(10, Components), erlang:element(11, Components)}}} end ). -file("src/oaspec/internal/openapi/external_loader.gleam", 1230). ?DOC(false). -spec process_component_path_items( oaspec@internal@openapi@spec:components(oaspec@internal@openapi@spec:unresolved()), binary(), fun((binary()) -> {ok, oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:unresolved())} | {error, oaspec@openapi@diagnostic:diagnostic()}), list(binary()), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()}) ) -> {ok, {oaspec@internal@openapi@spec:components(oaspec@internal@openapi@spec:unresolved()), gleam@dict:dict(binary(), {binary(), oaspec@internal@openapi@schema:schema_ref()})}} | {error, oaspec@openapi@diagnostic:diagnostic()}. process_component_path_items( Components, Base_dir, Parse_file, Original_local_names, Seeded_imports ) -> Entries = maps:to_list(erlang:element(7, Components)), gleam@result:'try'( gleam@list:try_fold( Entries, {[], Seeded_imports}, fun(Acc, Entry) -> {Collected, Imports} = Acc, {Name, Ref_or_item} = Entry, case Ref_or_item of {value, Path_item} -> gleam@result:'try'( rewrite_path_item( Path_item, Base_dir, Parse_file, Imports, Original_local_names ), fun(_use0) -> {New_path_item, New_imports} = _use0, {ok, {[{Name, {value, New_path_item}} | Collected], New_imports}} end ); {ref, _} -> {ok, {[{Name, Ref_or_item} | Collected], Imports}} end end ), fun(_use0@1) -> {Rewritten, Final_imports} = _use0@1, New_path_items = gleam@list:fold( Rewritten, maps:new(), fun(D, Pair) -> gleam@dict:insert( D, erlang:element(1, Pair), erlang:element(2, Pair) ) end ), New_schemas = gleam@dict:fold( Final_imports, erlang:element(2, Components), fun(D@1, Frag_name, Pair@1) -> {_, Target_schema} = Pair@1, case {gleam@dict:has_key(D@1, Frag_name), Target_schema} of {true, _} -> D@1; {false, {inline, _}} -> gleam@dict:insert(D@1, Frag_name, Target_schema); {false, _} -> D@1 end end ), {ok, {{components, New_schemas, erlang:element(3, Components), erlang:element(4, Components), erlang:element(5, Components), erlang:element(6, Components), New_path_items, erlang:element(8, Components), erlang:element(9, Components), erlang:element(10, Components), erlang:element(11, Components)}, Final_imports}} end ). -file("src/oaspec/internal/openapi/external_loader.gleam", 72). ?DOC(false). -spec resolve_external_component_refs( oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:unresolved()), gleam@option:option(binary()), fun((binary()) -> {ok, oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:unresolved())} | {error, oaspec@openapi@diagnostic:diagnostic()}) ) -> {ok, oaspec@internal@openapi@spec:open_api_spec(oaspec@internal@openapi@spec:unresolved())} | {error, oaspec@openapi@diagnostic:diagnostic()}. resolve_external_component_refs(Spec, Base_dir, Parse_file) -> case {erlang:element(5, Spec), Base_dir} of {{some, Components}, {some, Dir}} -> Original_local_names = oaspec@internal@openapi@external_loader_planner:local_schema_names( maps:to_list(erlang:element(2, Components)) ), gleam@result:'try'( process_components( Components, Dir, Parse_file, Original_local_names ), fun(_use0) -> {Top_resolved, Top_imported} = _use0, gleam@result:'try'( process_whole_object_refs(Top_resolved, Dir, Parse_file), fun(Whole_resolved) -> gleam@result:'try'( process_nested_property_refs( Whole_resolved, Dir, Parse_file, Original_local_names, Top_imported ), fun(_use0@1) -> {Nested_resolved, Nested_imports} = _use0@1, gleam@result:'try'( process_parameter_schemas( Nested_resolved, Dir, Parse_file, Original_local_names, Nested_imports ), fun(_use0@2) -> {Param_resolved, Param_imports} = _use0@2, gleam@result:'try'( process_body_response_schemas( Param_resolved, Dir, Parse_file, Original_local_names, Param_imports ), fun(_use0@3) -> {Body_resolved, Body_imports} = _use0@3, gleam@result:'try'( process_component_headers( Body_resolved, Dir, Parse_file, Original_local_names, Body_imports ), fun(_use0@4) -> {Header_resolved, Header_imports} = _use0@4, gleam@result:'try'( process_component_path_items( Header_resolved, Dir, Parse_file, Original_local_names, Header_imports ), fun(_use0@5) -> {Path_items_resolved, Path_items_imports} = _use0@5, gleam@result:'try'( process_operation_schemas( erlang:element( 4, Spec ), Path_items_resolved, Dir, Parse_file, Original_local_names, Path_items_imports ), fun( _use0@6 ) -> {New_paths, Op_final_components} = _use0@6, {ok, {open_api_spec, erlang:element( 2, Spec ), erlang:element( 3, Spec ), New_paths, {some, Op_final_components}, erlang:element( 6, Spec ), erlang:element( 7, Spec ), erlang:element( 8, Spec ), erlang:element( 9, Spec ), erlang:element( 10, Spec ), erlang:element( 11, Spec )}} end ) end ) end ) end ) end ) end ) end ) end ); {_, _} -> {ok, Spec} end.