/** * 工具函数集合 * 包含打字机效果、ID生成、回调安全调用等通用工具函数 */ /** * ID生成工具类 * 提供各种ID生成功能 */ export class IdUtils { /** * 生成消息ID * @returns {string} 消息ID */ static generateMessageId() { return "mid" + new Date().getTime(); } } /** * 回调函数安全调用工具类 * 提供安全的回调函数调用机制 */ export class CallbackUtils { /** * 安全调用回调函数 * @param {Object} callbacks - 回调函数对象 * @param {string} callbackName - 回调函数名称 * @param {...any} args - 传递给回调函数的参数 */ static safeCall(callbacks, callbackName, ...args) { if (callbacks && typeof callbacks[callbackName] === "function") { try { callbacks[callbackName](...args); } catch (error) { console.error(`回调函数 ${callbackName} 执行出错:`, error); } } else { console.warn(`回调函数 ${callbackName} 不可用`); } } /** * 批量安全调用回调函数 * @param {Object} callbacks - 回调函数对象 * @param {Array} callbackConfigs - 回调配置数组 [{name, args}, ...] */ static safeBatchCall(callbacks, callbackConfigs) { callbackConfigs.forEach((config) => { const { name, args = [] } = config; this.safeCall(callbacks, name, ...args); }); } } /** * 消息处理工具类 * 提供消息相关的工具函数 */ export class MessageUtils { /** * 验证消息格式 * @param {any} message - 消息对象 * @returns {boolean} 是否为有效消息格式 */ static validateMessage(message) { return message && typeof message === "object" && message.type; } /** * 格式化消息 * @param {string} type - 消息类型 * @param {any} content - 消息内容 * @param {Object} options - 额外选项 * @returns {Object} 格式化后的消息对象 */ static formatMessage(type, content, options = {}) { return { type, content, timestamp: Date.now(), ...options, }; } /** * 检查是否为完整消息 * @param {any} message - 消息对象 * @returns {boolean} 是否为完整消息 */ static isCompleteMessage(message) { return message && message.isComplete === true; } /** * 检查消息是否为心跳响应 * @param {any} messageData - 消息数据 * @returns {boolean} 是否为心跳响应 */ static isPongMessage(messageData) { if (typeof messageData === "string") { return ( messageData === "pong" || messageData.toLowerCase().includes("pong") ); } if (typeof messageData === "object" && messageData !== null) { return messageData.type === "pong"; } return false; } /** * 安全解析JSON消息 * @param {string} messageStr - 消息字符串 * @returns {Object|null} 解析后的对象或null */ static safeParseJSON(messageStr) { try { return JSON.parse(messageStr); } catch (error) { console.warn("JSON解析失败:", messageStr); return null; } } /** * 创建打字机消息对象 * @param {string} content - 消息内容 * @param {boolean} isComplete - 是否完成 * @param {string} type - 消息类型 * @returns {Object} 消息对象 */ static createTypewriterMessage( content, isComplete = false, type = "typewriter" ) { return { type, content, isComplete, timestamp: Date.now(), }; } /** * 创建加载消息对象 * @param {string} content - 加载内容 * @returns {Object} 加载消息对象 */ static createLoadingMessage(content = "加载中...") { return { type: "loading", content, timestamp: Date.now(), }; } /** * 创建错误消息对象 * @param {string} error - 错误信息 * @returns {Object} 错误消息对象 */ static createErrorMessage(error) { return { type: "error", content: error.message || error || "未知错误", timestamp: Date.now(), }; } } /** * 定时器管理工具类 * 提供定时器的统一管理 */ export class TimerUtils { /** * 安全清除定时器 * @param {number|null} timerId - 定时器ID * @param {string} type - 定时器类型 'timeout' | 'interval' * @returns {null} 返回null便于重置变量 */ static safeClear(timerId, type = "timeout") { if (timerId) { if (type === "interval") { clearInterval(timerId); } else { clearTimeout(timerId); } } return null; } /** * 清除定时器(别名方法) * @param {number|null} timerId - 定时器ID * @param {string} type - 定时器类型 'timeout' | 'interval' * @returns {null} 返回null便于重置变量 */ static clearTimer(timerId, type = "timeout") { return this.safeClear(timerId, type); } /** * 创建可取消的延时执行 * @param {Function} callback - 回调函数 * @param {number} delay - 延时时间 * @returns {Object} 包含cancel方法的对象 */ static createCancelableTimeout(callback, delay) { let timerId = setTimeout(callback, delay); return { cancel() { if (timerId) { clearTimeout(timerId); timerId = null; } }, isActive() { return timerId !== null; }, }; } /** * 创建可取消的定时执行 * @param {Function} callback - 回调函数 * @param {number} interval - 间隔时间 * @returns {Object} 包含cancel方法的对象 */ static createCancelableInterval(callback, interval) { let timerId = setInterval(callback, interval); return { cancel() { if (timerId) { clearInterval(timerId); timerId = null; } }, isActive() { return timerId !== null; }, }; } } // 默认导出所有工具类 export default { IdUtils, CallbackUtils, MessageUtils, TimerUtils, };