UNPKG

@eleven-am/nestjs-storage

Version:

A NestJS module for uploading files to cloud storage providers

148 lines 4.85 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LocalStorage = void 0; const baseStorage_1 = require("./baseStorage"); const path = require("path"); const fs = require("fs"); const getMimetype_1 = require("../lib/getMimetype"); class LocalStorage extends baseStorage_1.BaseStorage { constructor(options) { super(options.provider); this.root = options.options.root; } createFolder(filePath) { return new Promise((resolve, reject) => { fs.mkdir(filePath, (err) => { if (err) { reject(err); } else { this.getFileOrFolder(filePath).then(resolve).catch(reject); } }); }); } deleteFileOrFolder(fileId) { return new Promise((resolve, reject) => { fs.unlink(fileId, (err) => { if (err) { reject(err); } else { resolve(true); } }); }); } getFileOrFolder(filePath) { return new Promise((resolve, reject) => { fs.stat(filePath, (err, stats) => { if (err) { reject(err); } else { resolve({ size: stats.size, modifiedAt: stats.mtime, isFolder: stats.isDirectory(), name: path.basename(filePath), path: filePath, mimeType: stats.isFile() ? (0, getMimetype_1.getMimeType)(filePath) : null, }); } }); }); } moveFileOrFolder(fileId, newPath) { return this.renameFileOrFolder(fileId, newPath); } putFile(path, data) { return new Promise((resolve, reject) => { fs.writeFile(path, data, (err) => { if (err) { reject(err); } else { this.getFileOrFolder(path).then(resolve).catch(reject); } }); }); } readFile(fileId) { return new Promise((resolve, reject) => { this.getFileOrFolder(fileId) .then((file) => { if (file.isFolder) { reject(new Error('Cannot read a folder')); } else { const stream = fs.createReadStream(fileId); resolve(stream); } }) .catch(reject); }); } readFolder(folderId) { return new Promise((resolve, reject) => { this.getFileOrFolder(folderId) .then((file) => { if (!file.isFolder) { reject(new Error('Cannot read a file')); } else { fs.readdir(folderId, (err, files) => { if (err) { reject(err); } else { Promise.all(files.map((file) => this.getFileOrFolder(path.join(folderId, file)))) .then(resolve) .catch(reject); } }); } }) .catch(reject); }); } readRootFolder() { return this.readFolder('/'); } renameFileOrFolder(fileId, newName) { return new Promise((resolve, reject) => { fs.rename(fileId, newName, (err) => { if (err) { reject(err); } else { this.getFileOrFolder(newName).then(resolve).catch(reject); } }); }); } streamFile(fileId, range) { return new Promise((resolve, reject) => { this.getFileOrFolder(fileId) .then((file) => { if (file.isFolder) { reject(new Error('Cannot stream a folder')); } else { const { start, end, headers } = this.buildRange(range, file); const stream = fs.createReadStream(fileId, { start: start, end: end, }); resolve({ stream, headers: headers }); } }) .catch(reject); }); } async getSignedUrl(fileId) { throw new Error(`Cannot get signed url for ${fileId} in local storage`); } } exports.LocalStorage = LocalStorage; //# sourceMappingURL=localStorage.js.map