From 6dc85b39c96f7e98d479728cd8ecbe0fcd20ce6c Mon Sep 17 00:00:00 2001 From: QTom Date: Sat, 24 Jan 2026 17:44:10 +0800 Subject: [PATCH] =?UTF-8?q?refactor(validators):=20=E6=B6=88=E9=99=A4?= =?UTF-8?q?=E9=87=8D=E5=A4=8D=E4=BB=A3=E7=A0=81=EF=BC=8C=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E6=98=A0=E5=B0=84=E8=A1=A8=E5=92=8C=E5=A4=8D=E7=94=A8=E5=87=BD?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 代码审查后的重构: - isPathAllowedForClient 复用 getClientDefinitionById 避免重复查找 - validateRequest 中使用 getClientDefinitionById 替代内联查找 - 使用 VALIDATOR_MAP 映射表替代 switch 语句 - getSupportedClients 改为从映射表动态获取,避免硬编码 - 导入 CLIENT_IDS 枚举,提高类型安全性 这些改动提高了代码的可维护性,添加新客户端时只需修改映射表。 --- src/validators/clientDefinitions.js | 2 +- src/validators/clientValidator.js | 32 +++++++++++++++-------------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/src/validators/clientDefinitions.js b/src/validators/clientDefinitions.js index 0ca9619d..fe2be5f5 100644 --- a/src/validators/clientDefinitions.js +++ b/src/validators/clientDefinitions.js @@ -97,7 +97,7 @@ function isValidClientId(clientId) { * @returns {boolean} 是否允许 */ function isPathAllowedForClient(clientId, path) { - const definition = Object.values(CLIENT_DEFINITIONS).find((d) => d.id === clientId) + const definition = getClientDefinitionById(clientId) if (!definition) { return false } diff --git a/src/validators/clientValidator.js b/src/validators/clientValidator.js index 1f655c06..29a5e8f3 100644 --- a/src/validators/clientValidator.js +++ b/src/validators/clientValidator.js @@ -5,8 +5,9 @@ const logger = require('../utils/logger') const { - CLIENT_DEFINITIONS, + CLIENT_IDS, getAllClientDefinitions, + getClientDefinitionById, isPathAllowedForClient } = require('./clientDefinitions') const ClaudeCodeValidator = require('./clients/claudeCodeValidator') @@ -14,6 +15,14 @@ const GeminiCliValidator = require('./clients/geminiCliValidator') const CodexCliValidator = require('./clients/codexCliValidator') const DroidCliValidator = require('./clients/droidCliValidator') +// 客户端ID到验证器的映射表 +const VALIDATOR_MAP = { + [CLIENT_IDS.CLAUDE_CODE]: ClaudeCodeValidator, + [CLIENT_IDS.GEMINI_CLI]: GeminiCliValidator, + [CLIENT_IDS.CODEX_CLI]: CodexCliValidator, + [CLIENT_IDS.DROID_CLI]: DroidCliValidator +} + /** * 客户端验证器类 */ @@ -24,19 +33,12 @@ class ClientValidator { * @returns {Object|null} 验证器实例 */ static getValidator(clientId) { - switch (clientId) { - case 'claude_code': - return ClaudeCodeValidator - case 'gemini_cli': - return GeminiCliValidator - case 'codex_cli': - return CodexCliValidator - case 'droid_cli': - return DroidCliValidator - default: - logger.warn(`Unknown client ID: ${clientId}`) - return null + const validator = VALIDATOR_MAP[clientId] + if (!validator) { + logger.warn(`Unknown client ID: ${clientId}`) + return null } + return validator } /** @@ -44,7 +46,7 @@ class ClientValidator { * @returns {Array} 客户端ID列表 */ static getSupportedClients() { - return ['claude_code', 'gemini_cli', 'codex_cli', 'droid_cli'] + return Object.keys(VALIDATOR_MAP) } /** @@ -115,7 +117,7 @@ class ClientValidator { allowed: true, matchedClient: clientId, clientName: validator.getName(), - clientInfo: Object.values(CLIENT_DEFINITIONS).find((def) => def.id === clientId) + clientInfo: getClientDefinitionById(clientId) } } } catch (error) {