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

85.71% Statements 24/28
88.89% Branches 16/18
100% Functions 0/0
85.19% Lines 23/27
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×                    
const exists = require('./exists');
 
// creates a directory or a directory tree
const createDir = (fsMkdir, fsStat) => {
  const existsFn = exists(fsStat);
 
  return (path) => {
    const dirs = path.split('/');
    let depth = 0;
    const slicePath = () => {
      depth += 1;
      return dirs.slice(0, depth).join('/');
    };
    const createDirFn = p => new Promise((resolve, reject) =>
      existsFn(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) {
            createDirFn(slicePath()).then(resolve);
          } else {
            fsMkdir(p, (error) => {
              if (error && error.code === 'ENOENT') {
                createDirFn(slicePath()).then(resolve);
              } else Iif (error) {
                reject(error);
              } else if (depth > 0 && depth < dirs.length) {
                createDirFn(slicePath()).then(resolve);
              } else {
                resolve(p);
              }
            });
          }
        }));
    return createDirFn(path);
  };
};
 
module.exports = createDir;