parseArguments method
Used to parse the command's arguments at a high-level.
named is a map from an argument to a default value for that argument. Do not
prefix the argument name with '--'.
Implementation
AFCommandArgumentsParsed parseArguments({
required AFCommand command,
int unnamedCount = -1,
required Map<String, String?> named,
}) {
final unnamed = <String>[];
final allNamed = Map<String, String?>.from(named);
allNamed[AFCommand.argPrivate] = "false";
allNamed[AFGenerateSubcommand.argExportTemplatesFlag] = "";
allNamed[AFGenerateSubcommand.argOverrideTemplatesFlag] = "";
allNamed[AFGenerateSubcommand.argForceOverwrite] = "";
//final foundNamed = Map<String, String?>.from(named);
final foundNamed = <String, String?>{};
foundNamed[AFCommand.argPrivate] = "false";
final source = rawArgs;
for(var i = 0; i < source.length; i++) {
final arg = source[i];
if(arg.startsWith(AFCommand.optionPrefix)) {
var argValue = AFCommandArgumentsParsed.argTrue;
if((i+1 < source.length)) {
final next = source[i+1];
if(!next.startsWith(AFCommand.optionPrefix)) {
argValue = next;
i++;
}
}
final argEntry = arg.substring(2);
foundNamed[argEntry] = argValue;
} else {
unnamed.add(arg);
}
}
for(final namedKey in pullDownArguments) {
for(final parent in parents) {
final found = foundNamed[namedKey];
if(found != null) {
continue;
}
final parentVal = parent.findArgument("--$namedKey");
if(parentVal != null) {
foundNamed[namedKey] = parentVal.toString();
continue;
}
}
}
for(final namedKey in named.keys) {
final found = foundNamed[namedKey];
if(found == null) {
foundNamed[namedKey] = named[namedKey];
}
}
final parsedArguments = AFCommandArgumentsParsed(
named: foundNamed,
unnamed: unnamed,
);
if(unnamedCount >= 0 && unnamed.length != unnamedCount) {
command.throwUsageError("Expected $unnamedCount unnamed arguments, but found ${unnamed.length}");
}
for(final foundKey in foundNamed.keys) {
if(!allNamed.containsKey(foundKey) && !AFCommandContext.pullDownArguments.contains(foundKey)) {
command.throwUsageError("Found unexpected option --$foundKey");
}
}
return parsedArguments;
}