@eleven-am/nestjs-storage
Version:
A NestJS module for uploading files to cloud storage providers
148 lines • 4.85 kB
JavaScript
;
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