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

84% Statements 21/25
75% Branches 6/8
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                                      
const exists = require('./exists');
const createDir = require('./createDir');
 
// creates a file and its directory tree if not exists
const createFile = (fsOpen, fsMkdir, fsStat) => {
  const existsFn = exists(fsStat);
  const createDirFn = createDir(fsMkdir, fsStat);
 
  return (path) => {
    const createFileFn = p => new Promise((resolve, reject) => {
      existsFn(p)
        .then((exs) => {
          Iif (exs) {
            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('/');
                createDirFn(dirs)
                  .then(() => createFileFn(p))
                  .then(() => resolve(p));
              } else Iif (error) {
                reject(error);
              } else {
                resolve(p);
              }
            });
          }
        });
    });
    return createFileFn(path);
  };
};
 
module.exports = createFile;