fslockjs
Version:
Easy to use file system queue with locking and events. Provide Asynchronous utilities for Directories and File
60 lines (55 loc) • 1.6 kB
JavaScript
import fs from 'fs';
import path from 'path';
async function remove(p) {
const files = await this.list(p);
return new Promise((resolve, reject) => {
// If there is file, we remove them first
Promise.all(files.map(async (file) => {
try {
const filep = path.join(p, file);
fs.lstat(filep, (err, stat) => {
if (stat && stat.isDirectory()) {
fs.rmdir(filep, async (err) => {
if (err) {
if (err.message.slice(0, 30) === 'ENOTEMPTY: directory not empty') {
resolve(await this.remove(filep))
}
if (err.message.slice(0, 33) === 'ENOENT: no such file or directory') {
resolve(true);
} else {
reject(err);
}
}
resolve(true);
});
} else {
fs.unlink(filep, (err) => {
if (err) reject(err);
resolve(true);
});
}
})
} catch (err) {
reject(err);
throw err;
}
})).then(() => {
fs.rmdir(p, async (err) => {
if (err) {
if (err.message.slice(0, 30) === 'ENOTEMPTY: directory not empty') {
resolve(await this.remove(p))
} else {
if (err.message.slice(0, 33) === 'ENOENT: no such file or directory') {
resolve(true);
}
reject(err);
}
}
resolve(true);
});
}).catch((err) => {
reject(err);
})
});
}
export default remove;