DependenciesOptions.fromArgs constructor

DependenciesOptions.fromArgs(
  1. List<String> args
)

Creates a DependenciesOptions object from the command-line arguments.

Parses the args list and sets the corresponding options. If --help is passed or no path is provided, a special status is returned.

Implementation

factory DependenciesOptions.fromArgs(List<String> args) {
  final parser =
      ArgParser()
        ..addFlag(
          'reverse',
          negatable: false,
          help: 'Reverse dependencies order',
        )
        ..addFlag('console', negatable: false, help: 'Output to console')
        ..addOption('text', help: 'Output to a text file')
        ..addOption('json', help: 'Output to a JSON file')
        ..addOption('yaml', help: 'Output to a YAML file')
        ..addOption(
          'sort',
          allowed: ['path', 'dependencies', 'none'],
          defaultsTo: 'dependencies',
          help: 'Sort mode (path, dependencies, none)',
        )
        ..addFlag(
          'help',
          abbr: 'h',
          negatable: false,
          help: 'Show usage information',
        );

  ArgResults results;
  try {
    results = parser.parse(args);
  } catch (ex) {
    print(ex);
    return DependenciesOptions(path: '', status: 'arguments error');
  }

  if (results['help'] == true) {
    print('Usage: dependencies <path> [options]');
    print(parser.usage);
    return DependenciesOptions(path: '', status: 'help');
  }

  if (results.rest.isEmpty) {
    return DependenciesOptions(path: '', status: 'No path provided.');
  }

  final path = results.rest.first;
  final reverse = results['reverse'] ?? false;
  bool outputConsole = results['console'] ?? false;
  final outputTextFile = results['text'];
  final outputJsonFile = results['json'];
  final outputYamlFile = results['yaml'];
  final sortMode = results['sort'] ?? 'dependencies';

  final noOutputSpecified =
      !outputConsole &&
      outputTextFile == null &&
      outputJsonFile == null &&
      outputYamlFile == null;
  if (noOutputSpecified) {
    outputConsole = true;
  }

  return DependenciesOptions(
    path: path,
    reverse: reverse,
    outputConsole: outputConsole,
    outputTextFile: outputTextFile,
    outputJsonFile: outputJsonFile,
    outputYamlFile: outputYamlFile,
    sortMode: sortMode,
  );
}