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 _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 run(List 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) : []; // 检查特殊命令 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 main(List 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); }