runSqliteLoomProjectCli function

Future<int> runSqliteLoomProjectCli(
  1. List<String> arguments, {
  2. Directory? currentDirectory,
  3. LoomCliWriter out = print,
  4. LoomCliWriter error = _stderr,
  5. LoomClock clock = _utcNow,
  6. LoomProcessRunner processRunner = _inheritProcess,
})

Runs SQLite Loom's project-aware developer CLI.

Implementation

Future<int> runSqliteLoomProjectCli(
  List<String> arguments, {
  Directory? currentDirectory,
  LoomCliWriter out = print,
  LoomCliWriter error = _stderr,
  LoomClock clock = _utcNow,
  LoomProcessRunner processRunner = _inheritProcess,
}) async {
  final directory = currentDirectory ?? Directory.current;
  try {
    if (arguments.isEmpty || _isHelp(arguments.first)) {
      _printProjectHelp(out);
      return LoomExitCode.success;
    }
    if (arguments.first == '--version' || arguments.first == 'version') {
      out('sqlite_loom 0.4.0');
      return LoomExitCode.success;
    }
    final command = arguments.first;
    final tail = arguments.sublist(1);
    switch (command) {
      case 'init':
        return _init(directory, tail, out: out);
      case 'make:migration':
      case 'migration:create':
        return _makeMigration(directory, tail, clock: clock, out: out);
      case 'make:flavor':
      case 'flavor:create':
        return _makeFlavor(directory, tail, out: out);
      case 'migrate:sync':
      case 'migration:sync':
        return _syncCommand(directory, tail, out: out);
      case 'migrate:validate':
      case 'migration:validate':
        return _validateCommand(directory, tail, out: out);
      case 'migrate:list':
      case 'migration:list':
        return _listCommand(directory, tail, out: out);
      case 'migrate:finalize':
        return _finalizeCommand(directory, tail, out: out);
      case 'migrate:retire':
        return _retireCommand(directory, tail, out: out);
      case 'migrate:unretire':
        return _unretireCommand(directory, tail, out: out);
      case 'doctor':
        return _doctor(directory, tail, out: out, error: error);
      default:
        final runtimeCommand = _runnerAliases[command] ?? command;
        if (_runnerCommands.contains(runtimeCommand)) {
          return await _delegate(directory, [
            runtimeCommand,
            ...tail,
          ], processRunner: processRunner);
        }
        throw LoomCliException(
          'Unknown sqlite_loom command: $command',
          LoomExitCode.usage,
        );
    }
  } on LoomCliException catch (exception) {
    error('Error: ${exception.message}');
    return exception.exitCode;
  } on FormatException catch (exception) {
    error('Error: ${exception.message}');
    return LoomExitCode.usage;
  }
}