Source code for mini_arcade.main

"""
Mini Arcade CLI entry point.
"""

from __future__ import annotations

import sys
from pathlib import Path
from typing import Optional

import mini_arcade.modules as commands_pkg
from mini_arcade.app import MiniArcadeCLI
from mini_arcade.cli.cli import CLIConfig, GlobalParserBuilder
from mini_arcade.constants import APP, CLI
from mini_arcade.utils.module_loader import load_command_packages


def _normalize_legacy_run_alias(argv: list[str]) -> list[str]:
    """
    Backward-compatible command rewrite.

    Allows:
      mini-arcade run tour [options...]

    by rewriting to:
      mini-arcade tour [options...]
    """
    if len(argv) >= 2 and argv[0] == "run" and argv[1] == "tour":
        return ["tour", *argv[2:]]
    return argv


[docs] def main(argv: Optional[list[str]] = None): """ Main entry point for the Mini Arcade CLI. :param argv: Optional list of command-line arguments. If None, uses sys.argv[1:]. :type argv: Optional[list[str]] :raises SystemExit: Exits with the appropriate exit code after running the command. """ if argv is None: argv = sys.argv[1:] global_parser = GlobalParserBuilder.build_global_parser( APP.version, ) remaining_argv: list[str] _, remaining_argv = global_parser.parse_known_args(argv) remaining_argv = _normalize_legacy_run_alias(remaining_argv) commands_dir = Path(commands_pkg.__file__).parent load_command_packages( base_namespace="mini_arcade.modules", base_dir=commands_dir, ) cli_app = MiniArcadeCLI( config=CLIConfig( app_name=CLI.executable_name, description=CLI.description, usage=CLI.usage, parents=[global_parser], ), ) args = cli_app.parse_args(remaining_argv) exit_code = cli_app.run_command(args) raise SystemExit(exit_code)
if __name__ == "__main__": main()