addDependenciesEfficiently function
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");
}