You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.0 KiB
86 lines
2.0 KiB
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 = [] |
|
|
|
// 简单的路由解析,查找路由定义 |
|
const routeMatches = routeContent.match(/path:\s*['"]([^'"]+)['"][\s\S]*?component:\s*['"]([^'"]+)['"]/g) |
|
|
|
if (routeMatches) { |
|
routeMatches.forEach(match => { |
|
const pathMatch = match.match(/path:\s*['"]([^'"]+)['"]/) |
|
const componentMatch = match.match(/component:\s*['"]([^'"]+)['"]/) |
|
|
|
if (pathMatch && componentMatch) { |
|
routes.push({ |
|
path: pathMatch[1], |
|
component: componentMatch[1] |
|
}) |
|
} |
|
}) |
|
} |
|
|
|
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
|
|
|