-module(libero@cli). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/libero/cli.gleam"). -export([parse_args/1, parse_command/0]). -export_type([database/0, command/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( " CLI command router for the Libero framework.\n" "\n" " Usage: gleam run -m libero -- [args]\n" " Commands: new, add, gen, build\n" ). -type database() :: postgres | sqlite. -type command() :: {new, binary(), gleam@option:option(database())} | {add, binary(), binary()} | gen | build | unknown. -file("src/libero/cli.gleam", 94). -spec parse_database(binary()) -> {ok, database()} | {error, nil}. parse_database(Value) -> case Value of <<"pg"/utf8>> -> {ok, postgres}; <<"sqlite"/utf8>> -> {ok, sqlite}; _ -> {error, nil} end. -file("src/libero/cli.gleam", 30). ?DOC( " Parse a list of argument strings into a Command.\n" " Separated from parse_command so tests can call it without argv.\n" ). -spec parse_args(list(binary())) -> command(). parse_args(Args) -> case Args of [<<"new"/utf8>>, Name, <<"--database"/utf8>>, Db | _] -> case parse_database(Db) of {ok, Database} -> {new, Name, {some, Database}}; {error, nil} -> gleam_stdlib:println_error( <<<<"error: Invalid database: `"/utf8, Db/binary>>/binary, "` \x{2502} \x{2502} --database must be \"pg\" or \"sqlite\" \x{2502} hint: gleam run -m libero -- new my_app --database pg"/utf8>> ), unknown end; [<<"new"/utf8>>, _, <<"--database"/utf8>>] -> gleam_stdlib:println_error( <<"error: Missing database value \x{2502} \x{2502} --database requires a value \x{2502} hint: gleam run -m libero -- new my_app --database pg gleam run -m libero -- new my_app --database sqlite"/utf8>> ), unknown; [<<"new"/utf8>>, Name@1 | _] -> {new, Name@1, none}; [<<"add"/utf8>>, Name@2, <<"--target"/utf8>>, Target | _] -> case Target of <<"javascript"/utf8>> -> {add, Name@2, Target}; <<"erlang"/utf8>> -> {add, Name@2, Target}; _ -> gleam_stdlib:println_error( <<<<<<<<"error: Invalid target: `"/utf8, Target/binary>>/binary, "` \x{2502} \x{2502} --target must be \"javascript\" or \"erlang\" \x{2502} hint: gleam run -m libero -- add "/utf8>>/binary, Name@2/binary>>/binary, " --target javascript"/utf8>> ), unknown end; [<<"add"/utf8>>, _ | _] -> gleam_stdlib:println_error( <<"error: Missing --target flag \x{2502} \x{2502} The add command requires a target \x{2502} hint: gleam run -m libero -- add --target javascript"/utf8>> ), unknown; [<<"gen"/utf8>> | _] -> gen; [<<"build"/utf8>> | _] -> build; [<<"new"/utf8>>] -> gleam_stdlib:println_error( <<"error: Missing project name \x{2502} \x{2502} The new command requires a project name \x{2502} hint: gleam run -m libero -- new my_app"/utf8>> ), unknown; _ -> unknown end. -file("src/libero/cli.gleam", 24). ?DOC(" Parse CLI arguments into a Command.\n"). -spec parse_command() -> command(). parse_command() -> parse_args(erlang:element(4, argv:load())).