parse method

Future<Map<String, dynamic>> parse(
  1. List<String> args
)

Implementation

Future<Map<String, dynamic>> parse(List<String> args) async {
  ArgResults result = _parser.parse(args);
  Map<String, dynamic> params = {};

  params.addEntries(
    options.keys.map((arg) => MapEntry(arg, result.option(arg))).toList(),
  );
  params.addEntries(
    multiOptions.keys.map((arg) => MapEntry(arg, result.multiOption(arg))).toList(),
  );
  params.addEntries(
    flags.keys.map((arg) => MapEntry(arg, result.flag(arg))).toList(),
  );

  for (var key in options.keys) {
    while ((options[key].mustRequired! as bool) && params[key] == null) {
      dynamic value = options[key].question is Future Function()
          ? await options[key].question!()
          : options[key].question!();
      if (value != null) {
        params[key] = value;
      }
    }
  }

  for (var key in multiOptions.keys) {
    while ((multiOptions[key].mustRequired! as bool) && params[key].length == 0) {
      dynamic value = multiOptions[key].question is Future Function()
          ? await multiOptions[key].question!()
          : multiOptions[key].question!();
      if (value != null) {
        params[key] = value;
      }
    }
  }

  for (var key in flags.keys) {
    while ((flags[key].mustRequired! as bool) && params[key] == null) {
      dynamic value = flags[key].question is Future Function()
          ? await flags[key].question!()
          : flags[key].question!();
      if (value != null) {
        params[key] = value;
      }
    }
  }

  if (_force) {
    params['force'] = result['force'];
  }

  return params;
}