runCli function

Future<void> runCli(
  1. List<String> arguments
)

Implementation

Future<void> runCli(List<String> arguments) async {
  final parser = withCommonFlags(ArgParser());

  // Subcommand create
  final createParser = withCommonFlags(ArgParser()
    ..addFlag(
      'force',
      abbr: 'f',
      help: 'Force overwrite existing project',
      negatable: false,
    ));

  parser.addCommand('create', createParser);

  // Parse
  final results = parser.parse(arguments);

  // Cek global flags dulu
  if (results['help'] == true) {
    _printGlobalUsage(parser);
    exit(0);
  }
  if (results['version'] == true) {
    _printVersion();
    exit(0);
  }

  // Handle subcommand
  switch (results.command?.name) {
    case 'create':
      final createArgs = results.command!;
      if (createArgs['help'] == true) {
        _printCreateUsage(createParser);
        exit(0);
      }
      if (createArgs['version'] == true) {
        _printVersion();
        exit(0);
      }

      final force = createArgs['force'] as bool;
      await createProject(force: force);
      break;

    default:
      _printGlobalUsage(parser);
      exit(64); // 64: usage error
  }
}