parseArguments method

Map<String, dynamic> parseArguments(
  1. YamlMap config
)

Provides arguments from command based on YAML fields config

Implementation

Map<String, dynamic> parseArguments(YamlMap config) {
  final ArgParser parser = ArgParser();

  if (!config.containsKey(ConfigFieldType.FIELDS)) {
    throw MalformedConfigError('"fields" key is missing');
  }

  if (config[ConfigFieldType.FIELDS] == null) {
    throw ValidationError(
        ConfigFieldType.FIELDS, 'At least one field should be specified');
  }

  final params = config[ConfigFieldType.FIELDS];

  if (config.containsKey(ConfigFieldType.DEV_EXTENSION)) {
    parser.addFlag(config[ConfigFieldType.DEV_EXTENSION]);
  }

  parser
    ..addOption(ConfigFieldType.CONFIG)
    ..addOption(ConfigFieldType.CONFIG_EXTENSION);

  params.keys.forEach((key) {
    if (params[key] != null && params[key] is! Map) {
      throw MalformedConfigError('Malformed config');
    }

    final Map<dynamic, dynamic> value = params[key] ?? {};

    parser.addOption(
      key,
      abbr: value[ConfigFieldType.SHORT_NAME],
    );
  });

  final ArgResults parsedArguments = parser.parse(arguments);

  return {
    for (String key in parsedArguments.options) key: parsedArguments[key],
  };
}