infra-cli
Version:
72 lines (56 loc) • 1.82 kB
JavaScript
const inquirer = require('inquirer')
const fs = require('fs-extra')
const os = require('os')
const path = require('path')
const chalk = require('chalk')
const emoji = require('node-emoji')
const { editPackageJson } = require('../util/utils')
const cacheDir = path.join(os.homedir(), '.infra')
const promptConfigs = [
{
type: 'confirm',
message: chalk.blueBright(`${emoji.get(':heart:')} Save this as a cache for future projects? (y/N)`),
name: 'isCached',
prefix: ''
},
{
name: 'saveName',
when: (answers) => answers.isCached,
type: 'input',
message: 'Save cache as:',
prefix: ''
}
]
async function cacheCurrentChoose (name, targetDir, packageDependencies, packageDevDependencies) {
const { isCached, saveName } = await inquirer.prompt(promptConfigs)
if (isCached) {
try {
fs.ensureDirSync(cacheDir)
const saveDir = path.join(cacheDir, saveName || name)
await fs.emptyDir(saveDir)
fs.copySync(targetDir, saveDir)
await editPackageJson(saveDir, { packageDependencies, packageDevDependencies })
} catch (error) {
console.error(chalk.redBright(error))
}
}
}
async function copyCacheToProject (cacheName, targetDir) {
const dir = path.join(cacheDir, cacheName)
if (fs.existsSync(dir)) {
fs.copySync(dir, targetDir)
const packageDir = `${targetDir}/package.json`
const packageObj = await fs.readJson(packageDir)
const { packageDependencies, packageDevDependencies, ...other } = packageObj
await fs.writeJson(packageDir, other, { spaces: 2 })
return { packageDependencies, packageDevDependencies }
} else {
console.error(`\n${chalk.redBright('the cache does not exist!')}`)
process.exit(1)
}
}
module.exports = {
cacheCurrentChoose,
copyCacheToProject,
cacheDir
}