/** * 创建一个路径检查工具,用于精确匹配和前缀匹配路径。 * @param {string} url - 要检查的基础 URL。 * @param {string} [prefix] - 可选的路径前缀。 * @returns {object} 包含路径检查方法的对象。 */ export const makeCheckPathTool = (url: string, prefix?: string) => { const { pathname } = new URL(url) const makePath = (path: string) => `${prefix || ""}${path}` return { /** * 检查路径是否与基础 URL 的路径精确匹配。 * @param {string} path - 要检查的路径。 * @returns {boolean} 如果路径精确匹配则返回 true,否则返回 false。 */ exactCheck: (path: string) => { return pathname === makePath(path) }, /** * 检查路径是否以基础 URL 的路径为前缀。 * @param {string} path - 要检查的路径。 * @returns {boolean} 如果路径以基础 URL 的路径为前缀则返回 true,否则返回 false。 */ startsWithCheck: (path: string) => pathname.startsWith(makePath(path)), /** * 检查完整路径是否与基础 URL 的路径精确匹配。 * @param {string} path - 要检查的路径。 * @returns {boolean} 如果完整路径与基础 URL 的路径精确匹配则返回 true,否则返回 false。 */ fullCheck: (path: string) => pathname === path, } } /** * 裁剪路径字符串,如果路径长度超过20个字符,则只保留最后两级目录。 * * @param {string} path - 要处理的路径字符串。 * @returns {string} - 裁剪后的路径字符串,如果长度不超过20个字符则返回原路径。 */ export const shortenPath = (path: string): string => { if (path.length <= 20) { return path } const parts = path.split("/") if (parts.length <= 2) { return path } return `.../${parts[parts.length - 2]}/${parts[parts.length - 1]}` } /** * 安全地将对象转换为 JSON 字符串。 * 如果转换失败,则返回对象的字符串表示。 * @param {any} obj - 要转换的对象。 * @returns {string} - JSON 字符串或对象的字符串表示。 */ export const safeJsonStringify = (obj: any) => { try { return JSON.stringify(obj) } catch (e) { return String(obj) } }