From 4f88e2f8e724a20d5435d4dbfa9f361331ffc3c2 Mon Sep 17 00:00:00 2001 From: Jon Yergatian Date: Thu, 24 Jul 2025 17:02:24 -0700 Subject: [PATCH 1/2] prevent modification for filenames This change ensures file references in posts continue pointing to valid filenames. --- packages/mg-fs-utils/lib/FileCache.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/mg-fs-utils/lib/FileCache.js b/packages/mg-fs-utils/lib/FileCache.js index 7e8eef360..a5b742c9a 100644 --- a/packages/mg-fs-utils/lib/FileCache.js +++ b/packages/mg-fs-utils/lib/FileCache.js @@ -158,7 +158,8 @@ export default class FileCache { let fileNameExt = extname(src); let safeFileNameNoExt = transliterate.slugify(fileNameNoExt, { - separator: '_' + separator: '_', + lowercase: false }); let result = src.replace(`${fileNameNoExt}${fileNameExt}`, `${safeFileNameNoExt}${fileNameExt}`); From d2d6dc37d0397331b15f81d9e08566233b486ecb Mon Sep 17 00:00:00 2001 From: Jon Yergatian Date: Thu, 24 Jul 2025 17:15:23 -0700 Subject: [PATCH 2/2] updated tests to expect same names as server Seeing as we no longer convert filenames to lowercase when downloading from the server, our tests should expect the original filenames in their original case. --- .../src/test/AssetScraper.test.ts | 2 +- packages/mg-fs-utils/test/file-cache.test.js | 20 +++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/mg-assetscraper-db/src/test/AssetScraper.test.ts b/packages/mg-assetscraper-db/src/test/AssetScraper.test.ts index 53394f9f3..809f8e106 100644 --- a/packages/mg-assetscraper-db/src/test/AssetScraper.test.ts +++ b/packages/mg-assetscraper-db/src/test/AssetScraper.test.ts @@ -582,7 +582,7 @@ describe('Asset Scraper', () => { const result = await assetScraper.resolveFileName('https://example.com/path/to/你好.jpg', 'images'); - assert.equal(result.filename, 'example-com/path/to/ni_hao.jpg'); + assert.equal(result.filename, 'example-com/path/to/Ni_Hao.jpg'); }); it.todo('test replaceSrc else'); diff --git a/packages/mg-fs-utils/test/file-cache.test.js b/packages/mg-fs-utils/test/file-cache.test.js index d98272194..5e84c92e4 100644 --- a/packages/mg-fs-utils/test/file-cache.test.js +++ b/packages/mg-fs-utils/test/file-cache.test.js @@ -182,7 +182,7 @@ describe('resolveFileName character handling', function () { let fileName = await fileCache.resolveFileName('/image/fetch/w_600%2Ch_400,c_fill,f_auto,q_auto:good,fl_progressive:steep,g_center/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad8015f6-a9.0c-46f8-89f2-b6d7db866c6e_3866x2298.jpeg'); - expect(fileName.filename).toEqual('/image/fetch/w_600-h_400-c_fill-f_auto-q_auto:good-fl_progressive:steep-g_center/https_3a_2f_2fsubstack-post-media-s3-amazonaws-com_2fpublic_2fimages_2fad8015f6-a9-0c-46f8-89f2-b6d7db866c6e_3866x2298.jpg'); + expect(fileName.filename).toEqual('/image/fetch/w_600-h_400-c_fill-f_auto-q_auto:good-fl_progressive:steep-g_center/https_3A_2F_2Fsubstack-post-media-s3-amazonaws-com_2Fpublic_2Fimages_2Fad8015f6-a9-0c-46f8-89f2-b6d7db866c6e_3866x2298.jpg'); await fileCache.emptyCurrentCacheDir(); }); @@ -288,9 +288,9 @@ describe('resolveFileName character handling', function () { let fileCache = new FileCache('test'); let fileName = await fileCache.resolveFileName('/my-images/快乐的小树.jpeg'); - expect(fileName.filename).toEqual('/my-images/kuai_le_de_xiao_shu.jpg'); - expect(fileName.storagePath).toInclude('/content/images/my-images/kuai_le_de_xiao_shu.jpg'); - expect(fileName.outputPath).toEqual('/content/images/my-images/kuai_le_de_xiao_shu.jpg'); + expect(fileName.filename).toEqual('/my-images/Kuai_Le_De_Xiao_Shu.jpg'); + expect(fileName.storagePath).toInclude('/content/images/my-images/Kuai_Le_De_Xiao_Shu.jpg'); + expect(fileName.outputPath).toEqual('/content/images/my-images/Kuai_Le_De_Xiao_Shu.jpg'); await fileCache.emptyCurrentCacheDir(); }); @@ -299,9 +299,9 @@ describe('resolveFileName character handling', function () { let fileCache = new FileCache('test'); let fileName = await fileCache.resolveFileName('/my-images/幸せな小さな木.jpeg'); - expect(fileName.filename).toEqual('/my-images/xing_senaxiao_sanamu.jpg'); - expect(fileName.storagePath).toInclude('/content/images/my-images/xing_senaxiao_sanamu.jpg'); - expect(fileName.outputPath).toEqual('/content/images/my-images/xing_senaxiao_sanamu.jpg'); + expect(fileName.filename).toEqual('/my-images/Xing_senaXiao_sanaMu.jpg'); + expect(fileName.storagePath).toInclude('/content/images/my-images/Xing_senaXiao_sanaMu.jpg'); + expect(fileName.outputPath).toEqual('/content/images/my-images/Xing_senaXiao_sanaMu.jpg'); await fileCache.emptyCurrentCacheDir(); }); @@ -310,9 +310,9 @@ describe('resolveFileName character handling', function () { let fileCache = new FileCache('test'); let fileName = await fileCache.resolveFileName('/my-images/أشجار صغيرة سعيدة.jpeg'); - expect(fileName.filename).toEqual('/my-images/shjr-sgyr_-saayd.jpg'); - expect(fileName.storagePath).toInclude('/content/images/my-images/shjr-sgyr_-saayd.jpg'); - expect(fileName.outputPath).toEqual('/content/images/my-images/shjr-sgyr_-saayd.jpg'); + expect(fileName.filename).toEqual('/my-images/shjr-SGyr_-saayd.jpg'); + expect(fileName.storagePath).toInclude('/content/images/my-images/shjr-SGyr_-saayd.jpg'); + expect(fileName.outputPath).toEqual('/content/images/my-images/shjr-SGyr_-saayd.jpg'); await fileCache.emptyCurrentCacheDir(); });