You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.2 KiB
51 lines
1.2 KiB
"use strict";
|
|
|
|
function encodeCharacter(character) {
|
|
return character.charCodeAt(0).toString(32);
|
|
}
|
|
|
|
function encodeFilename(name) {
|
|
let suffix = '';
|
|
return name.replace(/[^A-Z0-9]/ig, character => {
|
|
suffix += `-${encodeCharacter(character)}`;
|
|
return '/';
|
|
}) + suffix;
|
|
}
|
|
/**
|
|
* Takes a file object and turns it into fileID, by converting file.name to lowercase,
|
|
* removing extra characters and adding type, size and lastModified
|
|
*
|
|
* @param {object} file
|
|
* @returns {string} the fileID
|
|
*/
|
|
|
|
|
|
function generateFileID(file) {
|
|
// It's tempting to do `[items].filter(Boolean).join('-')` here, but that
|
|
// is slower! simple string concatenation is fast
|
|
let id = 'uppy';
|
|
|
|
if (typeof file.name === 'string') {
|
|
id += `-${encodeFilename(file.name.toLowerCase())}`;
|
|
}
|
|
|
|
if (file.type !== undefined) {
|
|
id += `-${file.type}`;
|
|
}
|
|
|
|
if (file.meta && typeof file.meta.relativePath === 'string') {
|
|
id += `-${encodeFilename(file.meta.relativePath.toLowerCase())}`;
|
|
}
|
|
|
|
if (file.data.size !== undefined) {
|
|
id += `-${file.data.size}`;
|
|
}
|
|
|
|
if (file.data.lastModified !== undefined) {
|
|
id += `-${file.data.lastModified}`;
|
|
}
|
|
|
|
return id;
|
|
}
|
|
|
|
module.exports = generateFileID;
|