UNPKG

@fjedi/nodejs-file-downloader

Version:
81 lines (66 loc) 1.93 kB
const path = require("path"); const fs = require("fs"); class FileProcessor { constructor(config) { this.originalFileName = config.fileName; this.fileExtension = path.extname(this.originalFileName); this.fileNameWithoutExtension = config.fileName .split(".") .slice(0, -1) .join("."); this.basePath = config.path[config.path.length - 1] === "/" ? config.path : config.path + "/"; this.useSynchronousMode = config.useSynchronousMode || false; } getAvailableFileName() { if (this.useSynchronousMode) { return this.createNewFileNameSync(this.originalFileName); } return new Promise(async (resolve) => { try { const name = await this.createNewFileName(this.originalFileName); resolve(name); } catch (error) { reject(error); } }); } pathExistsSync(path) { return fs.existsSync(path); } pathExists(path) { if (this.useSynchronousMode) { return this.pathExistsSync(path); } return new Promise((resolve, reject) => { fs.access(path, (err) => { if (err) { resolve(false); } else { resolve(true); } }); }); } createNewFileNameSync(fileName, counter = 1) { if (!this.pathExistsSync(this.basePath + fileName)) { return fileName; } counter = counter + 1; let newFileName = this.fileNameWithoutExtension + "_" + counter + this.fileExtension; return this.createNewFileNameSync(newFileName, counter); } async createNewFileName(fileName, counter = 1) { if (!(await this.pathExists(this.basePath + fileName))) { return fileName; } counter = counter + 1; let newFileName = this.fileNameWithoutExtension + "_" + counter + this.fileExtension; return await this.createNewFileName(newFileName, counter); } } module.exports = FileProcessor;