updateMainDiFile static method

Future<void> updateMainDiFile({
  1. required String featureName,
  2. required String packageName,
  3. String? ownFeaturesName,
  4. bool? isSub = false,
})

  1. Update Main DI File

Implementation

static Future<void> updateMainDiFile({
  required String featureName,
  required String packageName,
  String? ownFeaturesName,
  bool? isSub = false,
}) async {
  final nameCab = featureName.toCapitalized().toCapitalizeSecondWord();
  final targetFile = File('lib/core/di/configure_dependencies.dart');

  if (!targetFile.existsSync()) {
    print('❌ Error: configure_dependencies.dart file not found');
    return;
  }

  String content = targetFile.readAsStringSync();

  final importPath = isSub == true && ownFeaturesName == null
      ? '/sub'
      : (ownFeaturesName != null ? '/$ownFeaturesName/sub' : '');
  final importStatement =
      "import 'package:$packageName/features$importPath/$featureName/di/${featureName}_di.dart';";

  final initMethodName = isSub == true ? 'Sub' : '';
  final initMethodOwner = ownFeaturesName != null
      ? 'For${ownFeaturesName.toCapitalized().toCapitalizeSecondWord()}'
      : '';
  final initStatement =
      "  configure$nameCab$initMethodName$initMethodOwner(getIt);";

  // Prevent duplication
  if (content.contains(initStatement)) {
    print('✅ DI for $nameCab is already added.');
    return;
  }

  // Inject Import
  if (!content.contains(importStatement)) {
    final lastImportIndex = content.lastIndexOf('import ');
    if (lastImportIndex != -1) {
      final endOfLastImportLine = content.indexOf('\n', lastImportIndex);
      content = content.replaceRange(
        endOfLastImportLine,
        endOfLastImportLine,
        '\n$importStatement',
      );
    } else {
      content = '$importStatement\n$content';
    }
  }

  // Inject the initialization function before the last closing bracket of the method
  final functionSignature = 'Future<void> configureDependencies() async {';
  final startIndex = content.indexOf(functionSignature);

  if (startIndex != -1) {
    final endIndex = content.indexOf('}', startIndex);
    if (endIndex != -1) {
      final before = content.substring(0, endIndex);
      final after = content.substring(endIndex);
      content = '$before  $initStatement\n$after';
    } else {
      print('❌ Error: Closing bracket } not found!');
      return;
    }
  } else {
    print('❌ Error: configureDependencies() method not found in the file!');
    return;
  }

  targetFile.writeAsStringSync(content);
  print(
    '🚀 configure$nameCab injected successfully into configure_dependencies.dart',
  );
}