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

80.95% Statements 17/21
75% Branches 6/8
100% Functions 0/0
78.95% Lines 15/19
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                                           
/**
 * file-manager-js/createFile
 * @copyright 2018 Eyas Ranjous <eyas.ranjous@gmail.com>
 * @license MIT
 */
 
// creates a file and its directory tree if not exists
const hof = (fsOpen, createDir, exists) => (path) => {
  const createFile = p => new Promise((resolve, reject) => {
    exists(p)
      .then((fileExists) => {
        Iif (fileExists) {
          const error = new Error(`file "${p}" already exists`);
          error.code = 'EEXIST';
          reject(error);
        } else {
          fsOpen(p, 'w', (error) => {
            if (error && error.code === 'ENOENT') {
              const parts = p.split('/');
              const dirs = parts.slice(0, parts.length - 1).join('/');
              createDir(dirs)
                .then(() => createFile(p))
                .then(() => resolve(p));
            } else Iif (error) {
              reject(error);
            } else {
              resolve(p);
            }
          });
        }
      });
  });
  return createFile(path);
};
 
module.exports = hof;