generate static method

String generate(
  1. FeatureSchema schema
)

Generates the complete source code for the feature's DI file.

Implementation

static String generate(FeatureSchema schema) {
  final camelName = FileWriter.toCamelCase(
    FileWriter.toSnakeCase(schema.name),
  );
  final snakeName = FileWriter.toSnakeCase(schema.name);
  final functionName = '${FileWriter.toLowerCamelCase(schema.name)}DI';

  final locatorName = schema.globalConfig.config['locator_name'] ?? 'locator';
  final locatorImport = schema.globalConfig.imports['locator'] ?? '';
  final locatorImportLine = locatorImport.isNotEmpty
      ? "import '$locatorImport';"
      : "";

  final apiServiceRegistration = _generateApiServiceRegistration(
    camelName,
    locatorName,
  );
  final repositoryRegistration = _generateRepositoryRegistration(
    camelName,
    locatorName,
  );
  final useCaseRegistrations = _generateUseCaseRegistrations(
    schema.functions,
    camelName,
    locatorName,
  );
  final cubitsRegistration = _generateCubitsRegistration(
    schema.functions,
    camelName,
    locatorName,
  );

  final useCaseImports = schema.functions
      .map(
        (f) =>
            "import 'domain/use_cases/${FileWriter.toSnakeCase(f.name)}_use_case.dart';",
      )
      .join('\n');

  return '''$locatorImportLine
import 'data/data_sources/${snakeName}_api_service.dart';
import 'data/repositories/${snakeName}_repository_impl.dart';
import 'domain/repositories/${snakeName}_repository.dart';
$useCaseImports
import 'presentation/cubit/${snakeName}_cubit.dart';

Future<void> $functionName() async {
// DataSources
$apiServiceRegistration

// Repositories
$repositoryRegistration

// UseCases
$useCaseRegistrations

// Cubits
$cubitsRegistration
}
''';
}