From ff166425d1fa76e183ead2cc5c7f7fe48696f02b Mon Sep 17 00:00:00 2001 From: xiaobao-k8s <80738902+xiaobao-k8s@users.noreply.github.com> Date: Mon, 13 Jul 2026 08:35:43 +0800 Subject: [PATCH] fix(media): parse local file extensions across path styles (#105614) * fix(media): parse local file extensions across path styles * docs: note cross-platform media path fix * docs: keep release notes in PR context --------- Co-authored-by: Peter Steinberger --- packages/media-core/src/mime.test.ts | 2 ++ packages/media-core/src/mime.ts | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/media-core/src/mime.test.ts b/packages/media-core/src/mime.test.ts index adbb1e912c85..a37d9a3e4f1a 100644 --- a/packages/media-core/src/mime.test.ts +++ b/packages/media-core/src/mime.test.ts @@ -209,6 +209,8 @@ describe("getFileExtension", () => { { filePath: "https://cdn.example.com/bad%ZZ%2Emp4", expected: undefined }, { filePath: "https://cdn.example.com/render%2Emp4/", expected: undefined }, { filePath: String.raw`C:\media\clip.MP4`, expected: ".mp4" }, + { filePath: String.raw`C:\media.folder\clip`, expected: undefined }, + { filePath: String.raw`C:\media.folder\clip.MP4`, expected: ".mp4" }, ] as const)("extracts $expected from $filePath", ({ filePath, expected }) => { expect(getFileExtension(filePath)).toBe(expected); }); diff --git a/packages/media-core/src/mime.ts b/packages/media-core/src/mime.ts index f5e8268d9eb6..15e7f4f3d545 100644 --- a/packages/media-core/src/mime.ts +++ b/packages/media-core/src/mime.ts @@ -1,6 +1,7 @@ // Media Core module implements mime behavior. import path from "node:path"; import { type MediaKind, mediaKindFromMime } from "./constants.js"; +import { extnameFromAnyPath } from "./file-name.js"; import { createLazyImportLoader } from "./lazy-import.js"; /** Maximum byte prefix passed to dependency MIME sniffers for bounded memory/CPU work. */ @@ -157,7 +158,7 @@ export function getFileExtension(filePath?: string | null): string | undefined { } catch { // fall back to plain path parsing } - const ext = path.extname(filePath).toLowerCase(); + const ext = extnameFromAnyPath(filePath).toLowerCase(); return ext || undefined; }