const { readFileSync, existsSync } = require('fs') const { resolve } = require('path') /** * 路由分析模块 * 负责分析路由配置 */ class RouteAnalyzer { constructor() { this.routes = [] } /** * 分析路由配置 * @returns {Array} 路由数组 */ analyzeRoutes() { this.routes = [] try { const routeConfigPath = resolve(__dirname, '../../src/renderer/router/index.js') if (existsSync(routeConfigPath)) { const routeContent = readFileSync(routeConfigPath, 'utf-8') this.routes = this.parseRouteConfig(routeContent) } } catch (error) { // 静默处理错误 } return this.routes } /** * 解析路由配置 - 优化版本:直接从路由配置中收集信息 * @param {string} routeContent - 路由配置内容 * @returns {Array} 路由数组 */ parseRouteConfig(routeContent) { const routes = [] // 解析Vue Router格式的路由配置 // 查找所有路由定义,包括嵌套路由 const routeMatches = routeContent.match(/\{[^}]*path:\s*['"]([^'"]+)['"][^}]*\}/g) if (routeMatches) { routeMatches.forEach(match => { const pathMatch = match.match(/path:\s*['"]([^'"]+)['"]/) const componentMatch = match.match(/component:\s*([A-Za-z][A-Za-z0-9]*)/) const nameMatch = match.match(/name:\s*['"]([^'"]+)['"]/) const descriptionMatch = match.match(/description:\s*['"]([^'"]+)['"]/) if (pathMatch && componentMatch) { const route = { path: pathMatch[1], component: componentMatch[1] } // 只有当name与component不同时才保留name字段 if (nameMatch && nameMatch[1] !== componentMatch[1]) { route.name = nameMatch[1] } // 优先使用路由配置中的description,如果没有则生成 if (descriptionMatch) { route.description = descriptionMatch[1] } routes.push(route) } }) } return routes } /** * 获取模块列表 * @returns {Array} 模块目录列表 */ getModuleDirs() { const moduleDirs = [] try { const modulesPath = resolve(__dirname, '../../src/renderer/modules') if (existsSync(modulesPath)) { const dirs = require('fs').readdirSync(modulesPath, { withFileTypes: true }) dirs.forEach(dirent => { if (dirent.isDirectory()) { moduleDirs.push(dirent.name) } }) } } catch (error) { // 静默处理错误 } return moduleDirs } } module.exports = RouteAnalyzer