Skip to content

Commit

Permalink
Fix filenames truncated by maxLength not keeping their extension (#27)
Browse files Browse the repository at this point in the history
  • Loading branch information
aakriti-kedia committed Oct 17, 2021
1 parent 43f3f32 commit 8c52cb1
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 2 deletions.
6 changes: 5 additions & 1 deletion filenamify.js
Expand Up @@ -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 (string.length > allowedLength) {
const extensionIndex = string.lastIndexOf('.');
string = string.slice(0, Math.min(allowedLength, extensionIndex)) + string.slice(extensionIndex);
}

return string;
}
4 changes: 3 additions & 1 deletion test.js
Expand Up @@ -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');
});

0 comments on commit 8c52cb1

Please sign in to comment.