Spaces:
Running
Running
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 | |
} | |