#4252·dub

固定 : getFileExtension 返回原始 URL 路径,而不是对没有文件扩展名的 URL 无效

作者: cax6505创建于 2026年7月31日更新于 2026年8月19日

描述

@dub/utils 中,getFileExtension(url) 帮助函数在给定不包含文件扩展名的 URL 时,错误地返回完整的 URL 路径名(例如 /AVATAR/API/V1/USERS)。

重现

typescript
import { getFileExtension } from "@dub/utils";

console.log(getFileExtension("https://dub.co/avatar")); 
// 输出: "/AVATAR" (预期: null) 
console.log(getFileExtension("https://dub.co/api/v1/users")); 
// 输出: "/API/V1/USERS" (预期: null) 

原因

packages/utils/src/functions/urls.ts 中:

typescript
export const getFileExtension = (url: string): string | null => {
  try {
    const pathname = new URL(url).pathname;
    const extension = pathname.split(".").pop(); // 当 pathname 不包含"."时,返回整个 pathname
    return extension ? extension.toUpperCase() : null;
  } catch { ... }
};

pathname 不包含点(.)时,pathname.split(".") 返回 ["/avatar"]。调用 .pop() 返回 /avatar,这是真值,因此返回 /AVATAR