diff --git a/packages/util/src/path.test.ts b/packages/util/src/path.test.ts index 87dd4deb4f3..aa06f33d6b1 100644 --- a/packages/util/src/path.test.ts +++ b/packages/util/src/path.test.ts @@ -18,6 +18,21 @@ describe("client paths", () => { expect(getDirectory("")).toBe("") }) + test.each([ + ["/repo/src/index.ts///", "index.ts"], + ["C:\\repo\\src\\index.ts", "index.ts"], + ["C:\\repo/src\\file", "file"], + ["C:/repo\\src/file/\\", "file"], + ["/", ""], + ["\\", ""], + ["/\\/\\", ""], + ["C:\\", "C:"], + ["file", "file"], + ["", ""], + ])("reads the filename from %j", (path, filename) => { + expect(getFilename(path)).toBe(filename) + }) + test("keeps filename truncation stable", () => { expect(getFilenameTruncated("/repo/long-component-name.tsx", 16)).toBe("long-compon….tsx") expect(truncateMiddle("abcdefghijklmnop", 9)).toBe("abcd…mnop") diff --git a/packages/util/src/path.ts b/packages/util/src/path.ts index 59c9d6517f7..6d4f2ae1a9d 100644 --- a/packages/util/src/path.ts +++ b/packages/util/src/path.ts @@ -1,8 +1,8 @@ export function getFilename(path: string | undefined) { if (!path) return "" const trimmed = path.replace(/[/\\]+$/, "") - const parts = trimmed.split(/[/\\]/) - return parts[parts.length - 1] ?? "" + const index = Math.max(trimmed.lastIndexOf("/"), trimmed.lastIndexOf("\\")) + return trimmed.slice(index + 1) } export function getDirectory(path: string | undefined) {