From 8cd8124725984c24a5dee71cda4979b86e7412b5 Mon Sep 17 00:00:00 2001 From: aakriti-kedia Date: Sat, 16 Oct 2021 16:14:18 +0530 Subject: [PATCH 1/2] filename extension preserved for long filenames --- filenamify.js | 6 +++++- test.js | 4 +++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/filenamify.js b/filenamify.js index 9653be6..53a83bf 100644 --- a/filenamify.js +++ b/filenamify.js @@ -31,7 +31,11 @@ export default function filenamify(string, options = {}) { } string = filenameReservedRegex.windowsNames().test(string) ? string + replacement : string; - string = string.slice(0, typeof options.maxLength === 'number' ? options.maxLength : MAX_FILENAME_LENGTH); + const allowedLength = typeof options.maxLength === 'number' ? options.maxLength : MAX_FILENAME_LENGTH; + if (allowedLength < string.length) { + const extensionIndex = string.lastIndexOf('.'); + string = string.slice(0, Math.min(allowedLength, extensionIndex)) + string.slice(extensionIndex); + } return string; } diff --git a/test.js b/test.js index f21e6ca..6a11906 100644 --- a/test.js +++ b/test.js @@ -29,11 +29,13 @@ test('filnamify()', t => { test('filenamifyPath()', t => { t.is(path.basename(filenamifyPath(path.join(directoryName, 'foo:bar'))), 'foo!bar'); + t.is(path.basename(filenamifyPath(path.join(directoryName, 'This? This is very long filename that will lose its extension when passed into filenamify, which could cause issues.csv'))), + 'This! This is very long filename that will lose its extension when passed into filenamify, which cou.csv'); }); test('filenamify length', t => { // Basename length: 152 const filename = 'this/is/a/very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_long_filename.txt'; - t.is(filenamify(path.basename(filename)), 'very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_'); + t.is(filenamify(path.basename(filename)), 'very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_.txt'); t.is(filenamify(path.basename(filename), {maxLength: 180}), 'very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_very_long_filename.txt'); }); From ab984de2bacfba46309338e1f3958025ebde63f1 Mon Sep 17 00:00:00 2001 From: aakriti-kedia Date: Sat, 16 Oct 2021 19:13:45 +0530 Subject: [PATCH 2/2] review comment - improve readability --- filenamify.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/filenamify.js b/filenamify.js index 53a83bf..4407d7b 100644 --- a/filenamify.js +++ b/filenamify.js @@ -32,7 +32,7 @@ export default function filenamify(string, options = {}) { string = filenameReservedRegex.windowsNames().test(string) ? string + replacement : string; const allowedLength = typeof options.maxLength === 'number' ? options.maxLength : MAX_FILENAME_LENGTH; - if (allowedLength < string.length) { + if (string.length > allowedLength) { const extensionIndex = string.lastIndexOf('.'); string = string.slice(0, Math.min(allowedLength, extensionIndex)) + string.slice(extensionIndex); }