67 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			67 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								'use strict'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const u = require('universalify').fromPromise
							 | 
						||
| 
								 | 
							
								const path = require('path')
							 | 
						||
| 
								 | 
							
								const fs = require('../fs')
							 | 
						||
| 
								 | 
							
								const mkdir = require('../mkdirs')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								async function createFile (file) {
							 | 
						||
| 
								 | 
							
								  let stats
							 | 
						||
| 
								 | 
							
								  try {
							 | 
						||
| 
								 | 
							
								    stats = await fs.stat(file)
							 | 
						||
| 
								 | 
							
								  } catch { }
							 | 
						||
| 
								 | 
							
								  if (stats && stats.isFile()) return
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const dir = path.dirname(file)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  let dirStats = null
							 | 
						||
| 
								 | 
							
								  try {
							 | 
						||
| 
								 | 
							
								    dirStats = await fs.stat(dir)
							 | 
						||
| 
								 | 
							
								  } catch (err) {
							 | 
						||
| 
								 | 
							
								    // if the directory doesn't exist, make it
							 | 
						||
| 
								 | 
							
								    if (err.code === 'ENOENT') {
							 | 
						||
| 
								 | 
							
								      await mkdir.mkdirs(dir)
							 | 
						||
| 
								 | 
							
								      await fs.writeFile(file, '')
							 | 
						||
| 
								 | 
							
								      return
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								      throw err
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (dirStats.isDirectory()) {
							 | 
						||
| 
								 | 
							
								    await fs.writeFile(file, '')
							 | 
						||
| 
								 | 
							
								  } else {
							 | 
						||
| 
								 | 
							
								    // parent is not a directory
							 | 
						||
| 
								 | 
							
								    // This is just to cause an internal ENOTDIR error to be thrown
							 | 
						||
| 
								 | 
							
								    await fs.readdir(dir)
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								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
							 | 
						||
| 
								 | 
							
								}
							 |