From 0f6b618c0b8aac9f18906c4560308e5fbfa31cf3 Mon Sep 17 00:00:00 2001 From: Andras Schmelczer Date: Sun, 20 Sep 2026 22:04:47 +0100 Subject: [PATCH] Update file type logic --- .../src/utils/is-file-type-mergable.test.ts | 14 ++++++++++++++ .../sync-client/src/utils/is-file-type-mergable.ts | 6 ++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/frontend/sync-client/src/utils/is-file-type-mergable.test.ts b/frontend/sync-client/src/utils/is-file-type-mergable.test.ts index fd316588..08972b22 100644 --- a/frontend/sync-client/src/utils/is-file-type-mergable.test.ts +++ b/frontend/sync-client/src/utils/is-file-type-mergable.test.ts @@ -71,3 +71,17 @@ describe("isFileTypeMergable", () => { ); }); }); + +for (const path of [ + "md", + "txt", + "nested/md", + "nested/txt", + "a.md/txt", + "a.txt/md", + "note." +]) { + it(`does not merge an extensionless file: ${path}`, () => { + assert.equal(isFileTypeMergable(path, ["md", "txt"]), false); + }); +} diff --git a/frontend/sync-client/src/utils/is-file-type-mergable.ts b/frontend/sync-client/src/utils/is-file-type-mergable.ts index a895b3e2..c09deaf6 100644 --- a/frontend/sync-client/src/utils/is-file-type-mergable.ts +++ b/frontend/sync-client/src/utils/is-file-type-mergable.ts @@ -2,8 +2,10 @@ export function isFileTypeMergable( pathOrFileName: string, mergeableExtensions: string[] ): boolean { - const parts = pathOrFileName.split("."); - const fileExtension = parts.at(-1) ?? ""; + const name = pathOrFileName.split("/").at(-1) ?? ""; + const separator = name.lastIndexOf("."); + if (separator < 0) return false; + const fileExtension = name.slice(separator + 1); return mergeableExtensions.includes(fileExtension.toLowerCase()); }