runCommand static method

Future<int> runCommand({
  1. required CliInvocation invocation,
  2. required Logger logger,
  3. required WorkspaceConfig workspaceConfig,
  4. required PackageScanner packageScanner,
  5. required GroupStore groupStore,
})

Implementation

static Future<int> runCommand({
  required CliInvocation invocation,
  required Logger logger,
  required WorkspaceConfig workspaceConfig,
  required PackageScanner packageScanner,
  required GroupStore groupStore,
}) async {
  final inv = invocation;
  final what =
      inv.positionals.isNotEmpty ? inv.positionals.first : 'packages';
  final loaded = await workspaceConfig.loadRootConfig();
  if (what == 'packages') {
    final projects =
        await workspaceConfig.readMonocfgProjects(loaded.monocfgPath);
    if (projects.isEmpty) {
      // Fallback to a quick scan if no cache yet
      final pkgs = await packageScanner.scan(
        rootPath: Directory.current.path,
        includeGlobs: loaded.config.include,
        excludeGlobs: loaded.config.exclude,
      );
      for (final p in pkgs) {
        final kind = p.kind.name;
        logger.log('- ${p.name.value} → ${p.path} ($kind)');
      }
    } else {
      for (final p in projects) {
        logger.log('- ${p.name} → ${p.path} (${p.kind})');
      }
    }
    return 0;
  }
  if (what == 'groups') {
    final store = groupStore;
    final names = await store.listGroups();
    for (final name in names) {
      final members = await store.readGroup(name);
      logger.log('- $name → ${members.join(', ')}');
    }
    return 0;
  }
  if (what == 'tasks') {
    final merged = <String, Map<String, Object?>>{};
    for (final e in loaded.config.tasks.entries) {
      merged[e.key] = {
        if (e.value.plugin != null) 'plugin': e.value.plugin,
        if (e.value.dependsOn.isNotEmpty) 'dependsOn': e.value.dependsOn,
        if (e.value.env.isNotEmpty) 'env': e.value.env,
        if (e.value.run.isNotEmpty) 'run': e.value.run,
      };
    }
    final extra = await workspaceConfig.readMonocfgTasks(loaded.monocfgPath);
    merged.addAll(extra);
    for (final e in merged.entries) {
      final plugin = (e.value['plugin'] ?? 'exec').toString();
      logger.log('- ${e.key} (plugin: $plugin)');
    }
    return 0;
  }
  logger.log('Unknown list target: $what', level: 'error');
  return 1;
}