all files / file-manager-js/lib/ removeDir.js

95.45% Statements 21/22
83.33% Branches 5/6
100% Functions 0/0
95% Lines 19/20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34     12× 12× 12×                          
const list = require('./list');
const removeFile = require('./removeFile');
 
// removes a directory with all its content recursively
const removeDir = (fsRmdir, fsUnlink, fsReaddir, fsStat, join) => {
  const listFn = list(fsReaddir, fsStat, join);
  const removeFileFn = removeFile(fsUnlink);
  return (path) => {
    const removeDirFn = p => new Promise((resolve, reject) => {
      fsRmdir(p, (error) => {
        if (error && error.code === 'ENOTEMPTY') {
          listFn(p)
            .then((entries) => {
              const filesRemoval = entries.files.map(removeFileFn);
              return Promise.all(filesRemoval).then(() => entries);
            })
            .then((entries) => {
              const dirsRemoval = entries.dirs.map(removeDirFn);
              return Promise.all(dirsRemoval);
            })
            .then(() => removeDirFn(p).then(resolve));
        } else Iif (error) {
          reject(error);
        } else {
          resolve(p);
        }
      });
    });
    return removeDirFn(path);
  };
};
 
module.exports = removeDir;