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()); }