execute method

  1. @override
Future<List<DartPackageInfo>> execute(
  1. CliLogger logger,
  2. ArgResults? argResults
)
override

Implementation

@override
Future<List<DartPackageInfo>> execute(
    CliLogger logger, ArgResults? argResults) async {
  if (argResults!['local'] == true) {
    var cacheDir = argResults.get<String>('cache', '~/.zsh');
    var resolvedPath = resolvePath(cacheDir);
    if (argResults.arguments.isEmpty) {
      return const [];
    }
    final query = argResults.arguments.first;
    var rootDir = Directory(resolvedPath);
    var indexDir = rootDir.subdir('.dart-pub-indexes');
    if (!rootDir.existsSync()) {
      throw ArgParserException(
          'Cache directory $resolvedPath does not exist');
    } else if (!indexDir.existsSync()) {
      throw ArgParserException(
          'No caches downloaded.  Run getcompletions first');
    } else {
      final firstLetter = query[0].toLowerCase();
      final lines = indexDir.child(firstLetter).readAsLinesSync();
      int found = 0;
      var results = <DartPackageInfo>[];
      for (var line in lines) {
        if (found >= 10) {
          break;
        }
        if (line.startsWith(query) && found++ < 10) {
          results.add(DartPackageInfo(name: line));
        }
      }
      return results;
    }
  } else {
    final query = argResults.arguments.firstWhere(
      (element) => true,
      orElse: () => 'a',
    );
    final packages = await getPackages(query);
    return packages;
  }
}