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

84.62% Statements 22/26
88.89% Branches 16/18
100% Functions 0/0
83.33% Lines 20/24
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 35 36 37 38 39 40 41 42              26× 26×   29× 29×   29×       29× 18×   11× 11×                  
/**
 * file-manager-js/createDir
 * @copyright 2018 Eyas Ranjous <eyas.ranjous@gmail.com>
 * @license MIT
 */
 
// creates a directory or a directory tree
const hof = (fsMkdir, exists) => (path) => {
  const dirs = path.split('/');
  let depth = 0;
  const slicePath = () => {
    depth += 1;
    return dirs.slice(0, depth).join('/');
  };
  const createDir = p => new Promise((resolve, reject) =>
    exists(p)
      .then((exs) => {
        Iif (exs && depth === 0) {
          const error = new Error(`directory "${p}" already exists`);
          error.code = 'EEXIST';
          reject(error);
        } else if (exs && depth > 0) {
          createDir(slicePath()).then(resolve);
        } else {
          fsMkdir(p, (error) => {
            if (error && error.code === 'ENOENT') {
              createDir(slicePath()).then(resolve);
            } else Iif (error) {
              reject(error);
            } else if (depth > 0 && depth < dirs.length) {
              createDir(slicePath()).then(resolve);
            } else {
              resolve(p);
            }
          });
        }
      }));
  return createDir(path);
};
 
module.exports = hof;