Files
cherry-studio/src/renderer/src/utils/json.ts
T
Phantom 7303c785aa feat(MCPSettings): add special error boundary & data validation for mcp server (#9633)
* feat(MCPSettings): 为McpServerCard添加错误边界处理

在McpServerCard组件外层添加ErrorBoundary,防止组件内部错误导致整个页面崩溃

* feat(types): 添加 MCP 服务器配置的类型定义和验证函数

添加 MCP 服务器配置的 Zod schema 类型定义,包括服务器类型、配置和验证函数
将 MCPServer 的 type 字段更新为复用 McpServerType

* feat(MCPSettings): 添加ErrorBoundary包装路由组件以捕获错误

* feat(types): 为McpServerConfigSchema添加url、headers和tags字段

添加服务器配置的URL地址、请求头配置和标签字段,以支持更灵活的服务器配置选项

* refactor(MCPSettings): 重构JSON解析逻辑为独立函数并使用zod验证

将原有的parseAndExtractServer函数重构为getServerFromJson,使用zod进行配置验证
移除重复的解析逻辑,简化代码结构

* feat(设置): 添加MCP服务器错误处理和详情展示功能

在MCP服务器卡片中添加错误边界处理,当服务器无效时显示错误提示和详情按钮
新增GeneralPopup组件用于展示错误详情
更新i18n翻译文件添加相关文本

* fix(MCPSettings): 修复导入服务器配置时的类型检查和错误处理

修正 getServerFromJson 返回类型定义,明确区分成功和错误状态
修复错误判断逻辑,使用 null 明确检查而非隐式转换
修复服务器名称存在时的错误提示,移除不必要的非空断言

* feat(MCPSettings): 添加临时测试用的无效服务器功能

添加一个临时测试按钮用于模拟添加无效服务器配置,方便测试错误处理流程

* feat(i18n): 添加错误处理页面的多语言翻译

添加"details"和"mcp.invalid"字段的翻译,用于错误处理页面

* fix(MCPSettings): 修复导入MCP服务器配置时的JSON解析和验证逻辑

将JSON解析和验证拆分为两个步骤,分别捕获解析和验证错误并记录日志
修复服务器配置名称赋值逻辑,使用正确的键名

* refactor(MCPSettings): 替换删除图标为DeleteIcon组件

* feat(MCPSettings): 在McpServerCard中添加错误详情点击展示功能

- 提取错误信息格式化逻辑到变量errorDetails
- 添加点击卡片展示完整错误详情的功能
- 统一按钮点击事件处理,阻止事件冒泡
- 优化错误展示样式,增加内边距和文字省略效果

* refactor(utils): 移除错误处理模块中的日志记录

* docs(MCPSettings): 移除AddMcpServerModal中多余的t参数注释

* test(utils): 移除对console.error的冗余断言

* fix(types): 将args字段从必需改为可选并设置默认值

修改McpServerConfigSchema中的args字段,使其从必需字段变为可选字段并设置默认空数组

* fix(types): 将服务器配置的command和args字段改为可选

command字段现在默认为空字符串,args字段默认为空数组,以提供更灵活的配置方式

* feat(types): 扩展 MCP 服务器配置类型,新增 baseUrl 等字段

添加 baseUrl、description、registryUrl 和 provider 字段以增强服务器配置能力

* fix(MCPSettings): 修复导入MCP服务器时未设置名称的问题

当导入MCP服务器配置时,仅在名称未设置时使用key作为默认名称

* refactor(types): 重构 MCP 相关类型定义并添加更多配置字段

将 MCPConfigSample 从接口改为 zod 推断类型
为 McpServerConfigSchema 添加更多可选配置字段
重新组织 MCPServer 接口字段并添加内部使用注释

* refactor(types): 将 MCP 相关类型定义提取到独立文件

将 MCP 服务器配置相关的 Zod schema 和类型定义从 index.ts 移动到新的 mcp.ts 文件
保持原有功能不变,提高代码组织性和可维护性

* docs(types): 更新MCP服务器内部字段的注释说明

添加关于JSON数据格式暴露的额外警告信息

* feat(types): 添加 strip 工具函数用于移除对象属性

添加一个通用的 strip 工具函数,用于从对象中移除指定的属性并返回新对象

* refactor(types): 调整MCPServer接口和strip函数参数格式

将MCPServer接口中的disabledTools和disabledAutoApproveTools字段移动到文档注释下方
修改strip函数参数从可变参数改为数组形式
更新McpServerConfigSchema字段的默认值和描述

* feat(mcp): 改进 MCP 配置验证并添加 Zod 错误格式化功能

添加 formatZodError 工具函数用于格式化 Zod 验证错误
修改 MCP 配置验证逻辑,使用 safeValidateMcpConfig 替代直接验证
允许 inMemory 类型服务器并添加额外校验规则
更新相关组件使用新的验证方式和错误处理

* refactor(MCPSettings): 移除临时测试代码和无效server添加按钮

* fix(MCPSettings): 修复EditMcpJsonPopup中json错误显示样式问题
2025-09-01 10:20:02 +08:00

31 lines
668 B
TypeScript

/**
* 判断字符串是否是 json 字符串
* @param {any} str 字符串
* @returns {boolean} 是否为 json 字符串
*/
export function isJSON(str: any): boolean {
if (typeof str !== 'string') {
return false
}
try {
return typeof JSON.parse(str) === 'object'
} catch (e) {
return false
}
}
// TODO: unknown 代替 any
/**
* 尝试解析 JSON 字符串,如果解析失败则返回 null。
* @param {string} str 要解析的字符串
* @returns {any | null} 解析后的对象,解析失败返回 null
*/
export function parseJSON(str: string): any | null {
try {
return JSON.parse(str)
} catch (e) {
return null
}
}