mirror of
				https://github.com/advplyr/audiobookshelf.git
				synced 2025-10-27 11:18:14 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			70 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
'use strict'
 | 
						|
 | 
						|
const u = require('../../universalify').fromCallback
 | 
						|
const 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
 | 
						|
}
 |