run method
Implementation
void run(List<String> arguments, {String? workingDirectory}) async {
final parser = ArgParser()
..addOption('package',
abbr: 'p', help: 'Package name', defaultsTo: 'twafok')
..addFlag('help', abbr: 'h', help: 'Show help', negatable: false);
try {
final results = parser.parse(arguments);
if (results['help'] == true) {
_printHelp();
return;
}
final args = results.rest;
final workDir = workingDirectory ?? Directory.current.path;
final packageName = results['package'] as String;
// Get feature path
String featurePath;
if (args.isNotEmpty) {
featurePath = args[0];
} else {
// Auto-detect current feature
final autoPath = await _findFeaturePath(workDir);
if (autoPath != null) {
featurePath = autoPath;
print(' 📍 Auto-detected feature path: $featurePath');
} else {
print(' ❌ Feature path is required');
print(' 👉 Example: twafok generate_di lib/features/Profile');
exit(1);
}
}
final absoluteFeaturePath = path.isAbsolute(featurePath)
? featurePath
: path.join(workDir, featurePath);
// Check if path exists
if (!await Directory(absoluteFeaturePath).exists()) {
print(' ❌ Path does not exist: $absoluteFeaturePath');
exit(1);
}
final rawName = path.basename(absoluteFeaturePath);
final featureName = _toSnakeCase(rawName);
final diFile = path.join(absoluteFeaturePath, '${featureName}_di.dart');
print('');
print(' 🔧 Generating DI file: ${path.basename(diFile)}');
print(' ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
// Collect all classes
final useCaseClasses = <String>[];
final cubitClasses = <String>[];
final dataSourceClasses = <String>[];
final repoClasses = <String>[];
await _collectClasses(absoluteFeaturePath, useCaseClasses, cubitClasses,
dataSourceClasses, repoClasses);
// Generate DI file
await _generateDiFile(diFile, absoluteFeaturePath, featureName, packageName,
useCaseClasses, cubitClasses, dataSourceClasses,
repoClasses, rawName);
print('');
print(' ✅ DI generation completed!');
} catch (e) {
print(' ❌ Error: $e');
exit(1);
}
}