Current section
Files
Jump to
Current section
Files
src/nori@codegen@typescript@types.erl
-module(nori@codegen@typescript@types).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/nori/codegen/typescript/types.gleam").
-export([default_config/0, generate_with_config/2, generate/1]).
-export_type([config/0]).
-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(
" TypeScript type definition generator.\n"
"\n"
" Generates `types.generated.ts` from CodegenIR.\n"
).
-type config() :: {config, boolean(), boolean(), boolean()}.
-file("src/nori/codegen/typescript/types.gleam", 21).
?DOC(" Default configuration.\n").
-spec default_config() -> config().
default_config() ->
{config, true, true, false}.
-file("src/nori/codegen/typescript/types.gleam", 31).
?DOC(" Generate TypeScript types with custom config.\n").
-spec generate_with_config(nori@codegen@ir:codegen_i_r(), config()) -> binary().
generate_with_config(Ir, Config) ->
Header = <<"// Generated by nori - Do not edit manually"/utf8>>,
case erlang:element(5, Ir) of
[] ->
<<Header/binary, "\n"/utf8>>;
_ ->
Ts_config = {ts_config,
erlang:element(2, Config),
erlang:element(3, Config),
erlang:element(4, Config)},
Context = nori@codegen@templates:ir_to_ts_types_context(
Ir,
Ts_config
),
Tmpl = nori@codegen@templates:load_template(
<<"templates"/utf8>>,
<<"typescript_types"/utf8>>
),
Body = nori@codegen@templates:render(Tmpl, Context),
<<<<<<Header/binary, "\n\n"/utf8>>/binary, Body/binary>>/binary,
"\n"/utf8>>
end.
-file("src/nori/codegen/typescript/types.gleam", 26).
?DOC(" Generate TypeScript types with default config.\n").
-spec generate(nori@codegen@ir:codegen_i_r()) -> binary().
generate(Ir) ->
generate_with_config(Ir, default_config()).