run method

Future<int> run(
  1. List<String> arguments
)

Implementation

Future<int> run(List<String> arguments) async {
  if (arguments.isEmpty) {
    _printOverview();
    return ExitCode.success;
  }

  final first = arguments.first;
  if (_isVersion(first)) {
    Console.line(
      '${Console.bold('Vania CLI')} ${Console.green(Constants.cliVersion)}',
    );
    return ExitCode.success;
  }
  if (first == 'help' || _isHelp(first)) {
    return _printHelp(arguments.length > 1 ? arguments[1] : null);
  }

  final name = first.toLowerCase();
  final command = _commands[name];
  if (command == null) {
    Console.error('Unknown command: $name');
    final suggestion = _closestMatch(name);
    if (suggestion != null) {
      Console.line('Did you mean ${Console.cyan(suggestion)}?');
    }
    return ExitCode.usage;
  }

  final commandArguments = arguments.sublist(1);
  if (commandArguments.any(_isHelp)) {
    command.printUsage();
    return ExitCode.success;
  }

  command.workingDirectory = _root;
  if (command.requiresProject &&
      !Directory('${_root.path}/lib').existsSync()) {
    Console.error('Run this command from a Vania project root.');
    return ExitCode.noInput;
  }

  try {
    return await command.execute(commandArguments);
  } catch (error, stackTrace) {
    Console.error('$name failed: $error');
    if (Platform.environment['VANIA_CLI_DEBUG'] == '1') {
      Console.line(Console.dim(stackTrace.toString()));
    }
    return ExitCode.failure;
  }
}