@arc-fusion/cli
Version:
CLI for running Arc Fusion on your local machine
74 lines (64 loc) • 1.39 kB
JavaScript
const childProcess = require('child_process')
const fs = require('fs')
const path = require('path')
const { promisify } = require('util')
const exec = promisify(childProcess.exec)
const access = promisify(fs.access)
const copyFile = promisify(fs.copyFile)
const mkdir = promisify(fs.mkdir)
const readdir = promisify(fs.readdir)
const readFile = promisify(fs.readFile)
const stat = promisify(fs.stat)
const writeFile = promisify(fs.writeFile)
async function mkdirp (dir) {
try {
const parent = path.dirname(dir)
await (
(parent && parent !== dir)
? mkdirp(parent)
: Promise.resolve()
)
await mkdir(dir)
} catch (e) {}
}
async function dirExists (dirPath) {
try {
await access(dirPath.replace(/\/*$/, '/'))
return true
} catch (_) {
return false
}
}
async function fileExists (filePath) {
try {
await access(filePath)
return true
} catch (_) {
return false
}
}
async function gentleCopy (src, dest) {
await mkdirp(path.dirname(dest))
if (!(await fileExists(dest))) {
return copyFile(src, dest)
}
}
async function touch (filePath) {
await mkdirp(path.dirname(filePath))
if (!(await fileExists(filePath))) {
return writeFile(filePath, '')
}
}
module.exports = {
exec,
dirExists,
fileExists,
gentleCopy,
mkdirp,
readdir,
readFile,
stat,
touch,
writeFile
}