Packages
caffeine_lang
3.0.2
6.3.1
6.3.0
6.2.2
6.2.1
6.2.0
6.1.2
6.1.1
6.1.0
6.0.0
5.6.0
5.5.0
5.4.4
5.4.3
5.4.2
5.4.1
5.4.0
5.3.0
5.2.0
5.1.1
5.1.0
5.0.12
5.0.11
5.0.10
5.0.8
5.0.7
5.0.6
5.0.5
5.0.4
5.0.1
5.0.0
4.10.0
4.9.0
4.8.3
4.8.2
4.8.1
4.8.0
4.7.9
4.7.8
4.7.7
4.7.6
4.7.5
4.6.7
4.6.6
4.6.5
4.6.4
4.6.3
4.6.2
4.6.0
4.5.1
4.5.0
4.4.4
4.4.3
4.4.1
4.4.0
4.3.7
4.3.6
3.0.6
3.0.5
3.0.4
3.0.3
3.0.2
3.0.1
3.0.0
2.0.5
2.0.4
2.0.3
2.0.2
2.0.1
2.0.0
1.0.2
1.0.1
0.1.0
0.0.24
0.0.23
0.0.22
0.0.21
0.0.20
0.0.19
0.0.18
0.0.17
0.0.16
0.0.15
0.0.14
0.0.13
0.0.12
0.0.11
0.0.10
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.2
0.0.1
A compiler for generating reliability artifacts from service expectation definitions.
Current section
Files
Jump to
Current section
Files
src/caffeine_lang@core@compiler.erl
-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
).