| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 | 'use strict'const u = require('universalify').fromCallbackconst path = require('path')const fs = require('graceful-fs')const mkdir = require('../mkdirs')function createFile (file, callback) {  function makeFile () {    fs.writeFile(file, '', err => {      if (err) return callback(err)      callback()    })  }  fs.stat(file, (err, stats) => { // eslint-disable-line handle-callback-err    if (!err && stats.isFile()) return callback()    const dir = path.dirname(file)    fs.stat(dir, (err, stats) => {      if (err) {        // if the directory doesn't exist, make it        if (err.code === 'ENOENT') {          return mkdir.mkdirs(dir, err => {            if (err) return callback(err)            makeFile()          })        }        return callback(err)      }      if (stats.isDirectory()) makeFile()      else {        // parent is not a directory        // This is just to cause an internal ENOTDIR error to be thrown        fs.readdir(dir, err => {          if (err) return callback(err)        })      }    })  })}function createFileSync (file) {  let stats  try {    stats = fs.statSync(file)  } catch {}  if (stats && stats.isFile()) return  const dir = path.dirname(file)  try {    if (!fs.statSync(dir).isDirectory()) {      // parent is not a directory      // This is just to cause an internal ENOTDIR error to be thrown      fs.readdirSync(dir)    }  } catch (err) {    // If the stat call above failed because the directory doesn't exist, create it    if (err && err.code === 'ENOENT') mkdir.mkdirsSync(dir)    else throw err  }  fs.writeFileSync(file, '')}module.exports = {  createFile: u(createFile),  createFileSync}
 |