all files / file-manager-js/lib/dirSize/ fn.js

100% Statements 20/20
100% Branches 4/4
100% Functions 0/0
100% Lines 15/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                               
/**
 * file-manager-js/dirSize
 * @copyright 2018 Eyas Ranjous <eyas.ranjous@gmail.com>
 * @license MIT
 */
 
// calculates the size of all files in a dir tree
module.exports = (list, stat) => (path) => {
  let size = 0;
  const direSize = p => list(p)
    .then((entries) => {
      const { files } = entries;
      const { dirs } = entries;
      if (files.length > 0) {
        const sizes = files.map(f => stat(f).then((stats) => {
          size += stats.size;
        }));
        return Promise.all(sizes).then(() => dirs);
      }
      return dirs;
    })
    .then((dirs) => {
      if (dirs.length > 0) {
        const sizes = dirs.map(direSize);
        return Promise.all(sizes).then(() => size);
      }
      return size;
    });
  return direSize(path);
};