-module(oaspec). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/oaspec.gleam"). -export([normalize_argv/1, main/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. -file("src/oaspec.gleam", 25). -spec run_glint(list(binary())) -> nil. run_glint(Arguments) -> case glint:execute(oaspec@internal@cli:app(), Arguments) of {error, Message} -> gleam_stdlib:println_error(Message), erlang:halt(1); {ok, {help, Text}} -> gleam_stdlib:println(Text); {ok, {out, _}} -> nil end. -file("src/oaspec.gleam", 67). -spec is_value_long_flag(binary()) -> boolean(). is_value_long_flag(Arg) -> gleam@bool:guard( not gleam_stdlib:string_starts_with(Arg, <<"--"/utf8>>), false, fun() -> Name = gleam@string:drop_start(Arg, 2), gleam@list:contains( [<<"config"/utf8>>, <<"mode"/utf8>>, <<"output"/utf8>>], Name ) end ). -file("src/oaspec.gleam", 73). -spec value_is_value(binary()) -> boolean(). value_is_value(Arg) -> not gleam_stdlib:string_starts_with(Arg, <<"-"/utf8>>). -file("src/oaspec.gleam", 53). -spec do_normalize(list(binary()), list(binary())) -> list(binary()). do_normalize(Arguments, Acc) -> case Arguments of [] -> lists:reverse(Acc); [Arg, Value | Rest] -> gleam@bool:lazy_guard( not (is_value_long_flag(Arg) andalso value_is_value(Value)), fun() -> do_normalize([Value | Rest], [Arg | Acc]) end, fun() -> do_normalize( Rest, [<<<'`. The normalisation happens before glint sees the\n" " argv so existing `--name=value` callers are unaffected, and so unknown\n" " flags still surface from glint with their original error.\n" "\n" " Other shapes are passed through untouched:\n" " - `--name=value`: already canonical (the name has `=` in it, so no match)\n" " - `--bool-flag`: not in the value-bearing list\n" " - `--name -other`: a `-`-prefixed value is treated as the next flag, so\n" " the original (broken) call is preserved and glint reports it as before\n" ). -spec normalize_argv(list(binary())) -> list(binary()). normalize_argv(Arguments) -> do_normalize(Arguments, []). -file("src/oaspec.gleam", 17). ?DOC( " CLI entry point for the oaspec code generator.\n" "\n" " Routes diagnostic output to stderr while keeping requested output (such as\n" " `--help` text) on stdout, following POSIX/CLIG conventions.\n" ). -spec main() -> nil. main() -> Arguments = erlang:element(4, argv:load()), case Arguments of [<<"--version"/utf8>> | _] -> gleam_stdlib:println( <<"oaspec v"/utf8, (<<"0.29.0"/utf8>>)/binary>> ); _ -> run_glint(normalize_argv(Arguments)) end.