ghost-storage-base
Version:
Base storage adapter.
64 lines • 2.22 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
const moment_1 = __importDefault(require("moment"));
const path_1 = __importDefault(require("path"));
class StorageBase {
requiredFns;
constructor() {
Object.defineProperty(this, 'requiredFns', {
value: ['exists', 'save', 'serve', 'delete', 'read'],
writable: false
});
}
getTargetDir(baseDir) {
const date = (0, moment_1.default)(), month = date.format('MM'), year = date.format('YYYY');
if (baseDir) {
return path_1.default.join(baseDir, year, month);
}
return path_1.default.join(year, month);
}
generateUnique(dir, name, ext, i) {
let filename, append = '';
if (i) {
append = '-' + i;
}
if (ext) {
filename = name + append + ext;
}
else {
filename = name + append;
}
return this.exists(filename, dir).then((exists) => {
if (exists) {
i = i + 1;
return this.generateUnique(dir, name, ext, i);
}
else {
return path_1.default.join(dir, filename);
}
});
}
getUniqueFileName(file, targetDir) {
const ext = path_1.default.extname(file.name);
let name;
// poor extension validation
// .1 or .342 is not a valid extension, .mp4 is though!
if (!ext.match(/\.\d+$/)) {
name = this.getSanitizedFileName(path_1.default.basename(file.name, ext));
return this.generateUnique(targetDir, name, ext, 0);
}
else {
name = this.getSanitizedFileName(path_1.default.basename(file.name));
return this.generateUnique(targetDir, name, null, 0);
}
}
getSanitizedFileName(fileName) {
// below only matches ascii characters, @, and .
// unicode filenames like город.zip would therefore resolve to ----.zip
return fileName.replace(/[^\w@.]/gi, '-');
}
}
module.exports = StorageBase;
//# sourceMappingURL=BaseStorage.js.map