swagger_generator_flutter/lib/swagger_cli_new.dart

207 lines
5.6 KiB
Dart

import 'dart:io';
import 'package:logging/logging.dart';
import 'package:swagger_generator_flutter/commands/base_command.dart';
import 'package:swagger_generator_flutter/commands/generate_command.dart';
import 'package:swagger_generator_flutter/core/config.dart';
import 'package:swagger_generator_flutter/utils/string_helper.dart';
/// Swagger CLI 应用程序
/// 使用命令模式架构的新版本CLI工具
class SwaggerCLI {
SwaggerCLI() {
_registerCommands();
}
static final Logger _logger = Logger('SwaggerCLI');
final Map<String, BaseCommand> _commands = {};
/// 注册所有命令
void _registerCommands() {
_registerCommand(GenerateCommand());
// 未来可以添加更多命令:
// _registerCommand(ParseCommand());
// _registerCommand(ValidateCommand());
// _registerCommand(InfoCommand());
// _registerCommand(TestCommand());
// _registerCommand(CleanCommand());
}
/// 注册单个命令
void _registerCommand(BaseCommand command) {
_commands[command.name] = command;
}
/// 运行CLI应用程序
Future<int> run(List<String> arguments) async {
try {
_showBanner();
if (arguments.isEmpty ||
arguments.first == 'help' ||
arguments.first == '--help') {
_showHelp();
return 0;
}
final commandName = arguments.first;
final commandArgs =
arguments.length > 1 ? arguments.sublist(1) : <String>[];
// 检查特殊命令
if (commandName == 'version' || commandName == '--version') {
_showVersion();
return 0;
}
// 查找并执行命令
final command = _commands[commandName];
if (command == null) {
_logger
..severe('❌ 未知命令: $commandName')
..info('');
_showAvailableCommands();
return 1;
}
// 检查命令帮助
if (commandArgs.contains('--help') || commandArgs.contains('-h')) {
command.showHelp();
return 0;
}
// 执行命令
final stopwatch = Stopwatch()..start();
final exitCode = await command.execute(commandArgs);
stopwatch.stop();
// 显示执行时间
if (exitCode == 0) {
_logger
..info('')
..info(
'⏱️ 执行时间: ${StringHelper.formatDuration(stopwatch.elapsed)}',
);
}
return exitCode;
} on Exception catch (error, stackTrace) {
_logger
..severe('❌ 应用程序错误: $error')
..severe('堆栈跟踪: $stackTrace');
return 1;
}
}
/// 显示应用程序横幅
void _showBanner() {
_logger
..info('')
..info('🚀 Swagger API 代码生成器 v2.0')
..info('=====================================')
..info('强大的 Swagger API 代码生成工具')
..info('');
}
/// 显示帮助信息
void _showHelp() {
_logger
..info('用法: dart swagger_cli_new.dart <命令> [选项]')
..info('')
..info('全新的命令式架构,提供更好的可扩展性和用户体验。')
..info('');
_showAvailableCommands();
_showGlobalOptions();
_showExamples();
_showContact();
}
/// 显示可用命令
void _showAvailableCommands() {
_logger
..info('📋 可用命令:')
..info('');
for (final command in _commands.values) {
_logger.info(' ${command.name.padRight(12)} ${command.description}');
}
_logger
..info(' help 显示帮助信息')
..info(' version 显示版本信息')
..info('');
}
/// 显示全局选项
void _showGlobalOptions() {
_logger
..info('🔧 全局选项:')
..info(' -h, --help 显示帮助信息')
..info(' --version 显示版本信息')
..info('');
}
/// 显示使用示例
void _showExamples() {
_logger
..info('💡 使用示例:')
..info('')
..info(' # 生成所有文件')
..info(' dart swagger_cli_new.dart generate --all')
..info('')
..info(' # 只生成模型文件(简洁版本)')
..info(' dart swagger_cli_new.dart generate --models --simple')
..info('')
..info(' # 生成到指定目录并启用性能监控')
..info(
' dart swagger_cli_new.dart generate --all --output-dir lib/generated --performance',
)
..info('')
..info(' # 查看具体命令的帮助')
..info(' dart swagger_cli_new.dart generate --help')
..info('');
}
/// 显示联系信息
void _showContact() {
_logger
..info('🌐 更多信息:')
..info(' API文档: ${SwaggerConfig.swaggerJsonUrls.first}')
..info(' 基础URL: ${SwaggerConfig.baseUrl}')
..info('');
}
/// 显示版本信息
void _showVersion() {
_logger
..info('Swagger CLI v2.0.0')
..info('构建于: ${DateTime.now().toIso8601String()}')
..info('Dart SDK: ${Platform.version}')
..info('')
..info('功能特性:')
..info('- 🏗️ 模块化命令架构')
..info('- 🚀 性能监控和优化')
..info('- 🔍 智能类型验证')
..info('- 📋 详细的错误报告')
..info('- 💾 智能缓存机制')
..info('- 📚 丰富的文档生成')
..info('');
}
}
/// CLI应用程序入口点
Future<void> main(List<String> arguments) async {
// 配置日志
Logger.root.level = Level.ALL;
Logger.root.onRecord.listen((record) {
if (record.level >= Level.SEVERE) {
stderr.writeln(record.message);
} else {
stdout.writeln(record.message);
}
});
final cli = SwaggerCLI();
final exitCode = await cli.run(arguments);
exit(exitCode);
}