parseUserInput method

  1. @override
ParsedCommands parseUserInput(
  1. UserInput userInput
)
override

Transform UserInput into ParsedCommands

Implementation

@override
ParsedCommands parseUserInput(UserInput userInput) {
  ArgResults parsedInput = _argParser.parse(userInput.originalUserInput);

  Map<CliCommandOptionsEnum, dynamic> options = {};
  options[CliCommandOptionsEnum.verbose] = parsedInput.flag(
    CliCommandOptionsEnum.verbose.option,
  );

  ArgResults? command = parsedInput.command;

  //All command help
  if (command == null) {
    //Default to help
    return ParsedCommands(CliCommandsEnum.help, options);
  }

  String? commandName = command.name;
  if (commandName == null) {
    throw UsageException("No command provided", _argParser.usage);
  }

  CliCommandsEnum? commandsEnum = CliCommandsEnum.cliCommandsMap[commandName];
  if (commandsEnum == null) {
    throw UsageException("Unknown command $commandName", _argParser.usage);
  }

  //Single command help
  if (commandsEnum == CliCommandsEnum.help || command[CliCommandOptionsEnum.help.option] == true) {
    options.putIfAbsent(CliCommandOptionsEnum.help, () => true);
    return ParsedCommands(commandsEnum, options);
  }

  for (String optionName in command.options) {

    if (!command.wasParsed(optionName)) continue;

    String? optionValue = command[optionName];

    CliCommandOptionsEnum? optionsEnum = CliCommandOptionsEnum.cliCommandOptionsMap[optionName];
    if (optionsEnum == null) {
      throw UsageException(
        "Unknown option $optionName for command $commandName",
        _argParser.usage,
      );
    }

    options.putIfAbsent(optionsEnum, () => optionValue);
  }

  return ParsedCommands(commandsEnum, options);
}