addDependenciesEfficiently function

Future<void> addDependenciesEfficiently(
  1. List<Map<String, dynamic>> deps, {
  2. required bool isDev,
})

Implementation

Future<void> addDependenciesEfficiently(
  List<Map<String, dynamic>> deps, {
  required bool isDev,
}) async {
  final file = File('pubspec.yaml');

  if (!file.existsSync()) {
    throw Exception("❌ pubspec.yaml not found");
  }

  final content = file.readAsStringSync();
  final yaml = loadYaml(content) as Map;
  final editor = YamlEditor(content);

  final section = isDev ? 'dev_dependencies' : 'dependencies';

  if (!yaml.containsKey(section)) {
    editor.update([section], {});
  } else {
    final value = yaml[section];
    if (value == null || value is! Map) {
      editor.update([section], {});
    }
  }

  final updatedYaml = loadYaml(editor.toString()) as Map;
  final existingSection = updatedYaml[section] as Map;

  for (final dep in deps) {
    final name = dep['name'] as String;
    final version = dep['version'] as String;
    if (!existingSection.containsKey(name)) {
      editor.update([section, name], version);
    }
  }

  String updatedContent = editor.toString();

  updatedContent = updatedContent.replaceAllMapped(
    RegExp('$section:\\s*\\{([^}]*)\\}'),
    (match) {
      final entries = match[1]!
          .split(',')
          .map((e) => e.trim())
          .where((e) => e.isNotEmpty)
          .join('\n  ');
      return '$section:\n  $entries';
    },
  );

  file.writeAsStringSync(updatedContent);

  print("✅ Added ${deps.length} packages to $section");
}