-module(caffeine_lang@core@compiler). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/caffeine_lang/core/compiler.gleam"). -export([compile/3, compile_from_strings/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. -file("src/caffeine_lang/core/compiler.gleam", 95). -spec print_header( caffeine_lang@core@compilation_configuration:compilation_config() ) -> nil. print_header(Config) -> caffeine_lang@core@logger:log(erlang:element(2, Config), <<""/utf8>>), caffeine_lang@core@logger:log( erlang:element(2, Config), gleam_community@ansi:bold( gleam_community@ansi:cyan(<<"=== CAFFEINE COMPILER ==="/utf8>>) ) ), caffeine_lang@core@logger:log(erlang:element(2, Config), <<""/utf8>>). -file("src/caffeine_lang/core/compiler.gleam", 104). -spec print_step1_start( caffeine_lang@core@compilation_configuration:compilation_config(), binary(), binary() ) -> nil. print_step1_start(Config, Blueprint_path, Expectations_dir) -> caffeine_lang@core@logger:log( erlang:element(2, Config), gleam_community@ansi:bold( gleam_community@ansi:underline(<<"[1/3] Parsing and linking"/utf8>>) ) ), caffeine_lang@core@logger:log( erlang:element(2, Config), <<" Blueprint file: "/utf8, (gleam_community@ansi:dim(Blueprint_path))/binary>> ), caffeine_lang@core@logger:log( erlang:element(2, Config), <<" Expectations directory: "/utf8, (gleam_community@ansi:dim(Expectations_dir))/binary>> ). -file("src/caffeine_lang/core/compiler.gleam", 120). -spec print_step1_success( caffeine_lang@core@compilation_configuration:compilation_config(), integer() ) -> nil. print_step1_success(Config, Count) -> caffeine_lang@core@logger:log( erlang:element(2, Config), <<" "/utf8, (gleam_community@ansi:green( <<<<"✓ Parsed "/utf8, (erlang:integer_to_binary(Count))/binary>>/binary, " expectations"/utf8>> ))/binary>> ). -file("src/caffeine_lang/core/compiler.gleam", 127). -spec print_step1_error( caffeine_lang@core@compilation_configuration:compilation_config() ) -> nil. print_step1_error(Config) -> caffeine_lang@core@logger:log( erlang:element(2, Config), <<" "/utf8, (gleam_community@ansi:red(<<"✗ Failed to parse and link"/utf8>>))/binary>> ). -file("src/caffeine_lang/core/compiler.gleam", 131). -spec print_step2_start( caffeine_lang@core@compilation_configuration:compilation_config(), list(caffeine_lang@middle_end@semantic_analyzer:intermediate_representation()) ) -> nil. print_step2_start(Config, Irs) -> caffeine_lang@core@logger:log(erlang:element(2, Config), <<""/utf8>>), caffeine_lang@core@logger:log( erlang:element(2, Config), gleam_community@ansi:bold( gleam_community@ansi:underline( <<"[2/3] Performing semantic analysis"/utf8>> ) ) ), caffeine_lang@core@logger:log( erlang:element(2, Config), <<<<" Resolving "/utf8, (gleam_community@ansi:yellow( erlang:integer_to_binary(erlang:length(Irs)) ))/binary>>/binary, " intermediate representations:"/utf8>> ), _pipe = Irs, gleam@list:each( _pipe, fun(Ir) -> caffeine_lang@core@logger:log( erlang:element(2, Config), <<<<<<<<<<" "/utf8, (gleam_community@ansi:dim(<<"•"/utf8>>))/binary>>/binary, " "/utf8>>/binary, (erlang:element(3, Ir))/binary>>/binary, " "/utf8>>/binary, (gleam_community@ansi:dim( <<<<"(artifacts: "/utf8, (gleam@string:join( erlang:element(4, Ir), <<", "/utf8>> ))/binary>>/binary, ")"/utf8>> ))/binary>> ) end ). -file("src/caffeine_lang/core/compiler.gleam", 162). -spec print_step2_success( caffeine_lang@core@compilation_configuration:compilation_config(), integer() ) -> nil. print_step2_success(Config, Count) -> caffeine_lang@core@logger:log( erlang:element(2, Config), <<" "/utf8, (gleam_community@ansi:green( <<<<"✓ Resolved vendors and queries for "/utf8, (erlang:integer_to_binary(Count))/binary>>/binary, " expectations"/utf8>> ))/binary>> ). -file("src/caffeine_lang/core/compiler.gleam", 174). -spec print_step2_error( caffeine_lang@core@compilation_configuration:compilation_config() ) -> nil. print_step2_error(Config) -> caffeine_lang@core@logger:log( erlang:element(2, Config), <<" "/utf8, (gleam_community@ansi:red(<<"✗ Semantic analysis failed"/utf8>>))/binary>> ). -file("src/caffeine_lang/core/compiler.gleam", 178). -spec print_step3_start( caffeine_lang@core@compilation_configuration:compilation_config(), list(caffeine_lang@middle_end@semantic_analyzer:intermediate_representation()) ) -> nil. print_step3_start(Config, Irs) -> caffeine_lang@core@logger:log(erlang:element(2, Config), <<""/utf8>>), caffeine_lang@core@logger:log( erlang:element(2, Config), gleam_community@ansi:bold( gleam_community@ansi:underline( <<"[3/3] Generating Terraform artifacts"/utf8>> ) ) ), caffeine_lang@core@logger:log( erlang:element(2, Config), <<<<" Generating resources for "/utf8, (gleam_community@ansi:yellow( erlang:integer_to_binary(erlang:length(Irs)) ))/binary>>/binary, " expectations:"/utf8>> ), _pipe = Irs, gleam@list:each( _pipe, fun(Ir) -> caffeine_lang@core@logger:log( erlang:element(2, Config), <<<<<<<<<<" "/utf8, (gleam_community@ansi:dim(<<"•"/utf8>>))/binary>>/binary, " "/utf8>>/binary, (erlang:element(2, erlang:element(2, Ir)))/binary>>/binary, " "/utf8>>/binary, (gleam_community@ansi:dim( <<<<<<<<<<<<"(org: "/utf8, (erlang:element( 3, erlang:element(2, Ir) ))/binary>>/binary, ", team: "/utf8>>/binary, (erlang:element( 6, erlang:element(2, Ir) ))/binary>>/binary, ", service: "/utf8>>/binary, (erlang:element(4, erlang:element(2, Ir)))/binary>>/binary, ")"/utf8>> ))/binary>> ) end ). -file("src/caffeine_lang/core/compiler.gleam", 215). -spec print_step3_success( caffeine_lang@core@compilation_configuration:compilation_config() ) -> nil. print_step3_success(Config) -> caffeine_lang@core@logger:log( erlang:element(2, Config), <<" "/utf8, (gleam_community@ansi:green( <<"✓ Generated Terraform configuration"/utf8>> ))/binary>> ). -file("src/caffeine_lang/core/compiler.gleam", 222). -spec print_step3_error( caffeine_lang@core@compilation_configuration:compilation_config() ) -> nil. print_step3_error(Config) -> caffeine_lang@core@logger:log( erlang:element(2, Config), <<" "/utf8, (gleam_community@ansi:red(<<"✗ Code generation failed"/utf8>>))/binary>> ). -file("src/caffeine_lang/core/compiler.gleam", 226). -spec print_footer( caffeine_lang@core@compilation_configuration:compilation_config() ) -> nil. print_footer(Config) -> caffeine_lang@core@logger:log(erlang:element(2, Config), <<""/utf8>>), caffeine_lang@core@logger:log( erlang:element(2, Config), gleam_community@ansi:bold( gleam_community@ansi:green(<<"=== COMPILATION COMPLETE ==="/utf8>>) ) ), caffeine_lang@core@logger:log(erlang:element(2, Config), <<""/utf8>>). -file("src/caffeine_lang/core/compiler.gleam", 237). -spec run_parse_and_link(binary(), binary()) -> {ok, list(caffeine_lang@middle_end@semantic_analyzer:intermediate_representation())} | {error, caffeine_lang@common@errors:compilation_error()}. run_parse_and_link(Blueprint_file_path, Expectations_directory) -> caffeine_lang@parser@linker:link( Blueprint_file_path, Expectations_directory ). -file("src/caffeine_lang/core/compiler.gleam", 244). -spec run_semantic_analysis( list(caffeine_lang@middle_end@semantic_analyzer:intermediate_representation()) ) -> {ok, list(caffeine_lang@middle_end@semantic_analyzer:intermediate_representation())} | {error, caffeine_lang@common@errors:compilation_error()}. run_semantic_analysis(Irs) -> caffeine_lang@middle_end@semantic_analyzer:resolve_intermediate_representations( Irs ). -file("src/caffeine_lang/core/compiler.gleam", 250). -spec run_code_generation( list(caffeine_lang@middle_end@semantic_analyzer:intermediate_representation()) ) -> {ok, binary()} | {error, caffeine_lang@common@errors:compilation_error()}. run_code_generation(Resolved_irs) -> caffeine_lang@generator@datadog:generate_terraform(Resolved_irs). -file("src/caffeine_lang/core/compiler.gleam", 20). ?DOC(" Compiles a blueprint and expectations directory into Terraform configuration.\n"). -spec compile( binary(), binary(), caffeine_lang@core@compilation_configuration:compilation_config() ) -> {ok, binary()} | {error, caffeine_lang@common@errors:compilation_error()}. compile(Blueprint_file_path, Expectations_directory, Config) -> print_header(Config), print_step1_start(Config, Blueprint_file_path, Expectations_directory), gleam@result:'try'( case run_parse_and_link(Blueprint_file_path, Expectations_directory) of {error, Err} -> print_step1_error(Config), {error, Err}; {ok, Irs} -> print_step1_success(Config, erlang:length(Irs)), {ok, Irs} end, fun(Irs@1) -> print_step2_start(Config, Irs@1), gleam@result:'try'(case run_semantic_analysis(Irs@1) of {error, Err@1} -> print_step2_error(Config), {error, Err@1}; {ok, Resolved_irs} -> print_step2_success(Config, erlang:length(Resolved_irs)), {ok, Resolved_irs} end, fun(Resolved_irs@1) -> print_step3_start(Config, Resolved_irs@1), gleam@result:'try'( case run_code_generation(Resolved_irs@1) of {error, Err@2} -> print_step3_error(Config), {error, Err@2}; {ok, Output} -> print_step3_success(Config), {ok, Output} end, fun(Terraform_output) -> print_footer(Config), {ok, Terraform_output} end ) end) end ). -file("src/caffeine_lang/core/compiler.gleam", 256). -spec parse_from_strings(binary(), binary(), binary()) -> {ok, list(caffeine_lang@middle_end@semantic_analyzer:intermediate_representation())} | {error, caffeine_lang@common@errors:compilation_error()}. parse_from_strings(Blueprints_json, Expectations_json, Expectations_path) -> gleam@result:'try'( caffeine_lang@parser@artifacts:parse_standard_library(), fun(Artifacts) -> gleam@result:'try'( caffeine_lang@parser@blueprints:parse_from_json_string( Blueprints_json, Artifacts ), fun(Validated_blueprints) -> gleam@result:'try'( caffeine_lang@parser@expectations:parse_from_json_string( Expectations_json, Validated_blueprints ), fun(Expectations_blueprint_collection) -> {ok, caffeine_lang@parser@ir_builder:build_all( [{Expectations_blueprint_collection, Expectations_path}] )} end ) end ) end ). -file("src/caffeine_lang/core/compiler.gleam", 74). ?DOC( " Compiles from JSON strings directly (no file I/O).\n" " Used for browser-based compilation.\n" ). -spec compile_from_strings(binary(), binary(), binary()) -> {ok, binary()} | {error, caffeine_lang@common@errors:compilation_error()}. compile_from_strings(Blueprints_json, Expectations_json, Expectations_path) -> gleam@result:'try'( parse_from_strings( Blueprints_json, Expectations_json, Expectations_path ), fun(Irs) -> gleam@result:'try'( run_semantic_analysis(Irs), fun(Resolved_irs) -> run_code_generation(Resolved_irs) end ) end ).