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

94.44% Statements 17/18
83.33% Branches 5/6
100% Functions 0/0
93.33% Lines 14/15
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              12× 12× 12×                        
/**
 * file-manager-js/removeDir
 * @copyright 2018 Eyas Ranjous <eyas.ranjous@gmail.com>
 * @license MIT
 */
 
// removes a directory with all its content recursively
const hof = (fsRmdir, list, removeFile) => (path) => {
  const removeDir = p => new Promise((resolve, reject) => {
    fsRmdir(p, (error) => {
      if (error && error.code === 'ENOTEMPTY') {
        list(p)
          .then((entries) => {
            const filesRemoval = entries.files.map(removeFile);
            return Promise.all(filesRemoval).then(() => entries);
          })
          .then((entries) => {
            const dirsRemoval = entries.dirs.map(removeDir);
            return Promise.all(dirsRemoval);
          })
          .then(() => removeDir(p).then(resolve));
      } else Iif (error) {
        reject(error);
      } else {
        resolve(p);
      }
    });
  });
  return removeDir(path);
};
 
module.exports = hof;