UNPKG

ghost-storage-base

Version:
64 lines 2.22 kB
"use strict"; 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