@arc-fusion/cli
Version:
CLI for running Arc Fusion on your local machine
85 lines (70 loc) • 2.15 kB
JavaScript
const path = require('path')
const {
BOOTSTRAP_ROOT,
PROJECT_ROOT
} = require('../environment')
const {
fileExists,
gentleCopy,
readdir,
stat,
writeFile
} = require('../utils/promises')
const spawn = require('../utils/spawn')
async function addScripts (packageFile) {
const packageJson = require(packageFile)
packageJson.scripts = packageJson.scripts || {}
packageJson.scripts.fusion = 'fusion'
packageJson.scripts.start = 'fusion start'
packageJson.scripts = Object.assign(
{},
...Object.keys(packageJson.scripts)
.sort()
.map((cmd) => ({
[cmd]: packageJson.scripts[cmd]
}))
)
await writeFile(packageFile, JSON.stringify(packageJson, null, 2))
}
async function walk (dir) {
const entries = await readdir(dir)
return [].concat(
...await Promise.all(
entries
.map(async (entry) => {
const fullPath = path.join(dir, entry)
return stat(fullPath)
.then(async (s) =>
(s.isDirectory())
? walk(fullPath)
: fullPath
)
})
)
)
}
async function init () {
const cwd = PROJECT_ROOT
// await here to make sure we know before we start copying
const hasDotGitIgnore = await fileExists(path.join(PROJECT_ROOT, '.gitignore'))
// await exec('git init', { cwd })
await spawn('npm', ['init', '-y'], { cwd })
console.log('installing CLI package...')
await spawn('npm', ['install', '--save-dev', '@arc-fusion/cli'], { cwd, stdio: 'inherit' })
console.log('installing CLI package complete')
console.log('bootstrapping project...')
await addScripts(path.join(cwd, 'package.json'))
await Promise.all(
(await walk(BOOTSTRAP_ROOT))
.filter((src) => path.relative(BOOTSTRAP_ROOT, src) !== 'gitignore')
.map(async (src) => {
return gentleCopy(src, path.join(PROJECT_ROOT, path.relative(BOOTSTRAP_ROOT, src)))
})
)
if (!hasDotGitIgnore) {
await gentleCopy(path.join(BOOTSTRAP_ROOT, 'gitignore'), path.join(PROJECT_ROOT, '.gitignore'))
}
console.log('bootstrapping project complete')
}
module.exports = init