parseUserInput method
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);
}