UNPKG

infra-cli

Version:
72 lines (56 loc) 1.82 kB
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 }