UNPKG

infra-cli

Version:
68 lines (58 loc) 1.83 kB
const fs = require('fs-extra') const chalk = require('chalk') const execSync = require('child_process').execSync const validateProjectName = require('validate-npm-package-name') const isSafeToCreateProjectIn = function (root, name) { const conflicts = fs.readdirSync(root) if (conflicts.length > 0) { console.error(`The directory ${chalk.green(name)} contains files.`) console.error('Either try using a new directory name, or remove the files listed above.') return false } return true } const checkAppName = function (appName) { const validationResult = validateProjectName(appName) if (!validationResult.validForNewPackages) { console.error( chalk.red(`Cannot create a project named ${chalk.green(`"${appName}"`)} because of npm naming restrictions:\n`) ) ;[...(validationResult.errors || []), ...(validationResult.warnings || [])].forEach((error) => { console.error(chalk.red(` * ${error}`)) }) console.error(chalk.red('\nPlease choose a different project name.')) process.exit(1) } } const shouldUseYarn = function () { try { execSync('yarn --version', { stdio: 'ignore' }) return true } catch (e) { return false } } async function editPackageJson (targetDir, replaceInfo) { const packageDir = `${targetDir}/package.json` try { const packageObj = await fs.readJson(packageDir) await fs.writeJson(packageDir, { ...packageObj, ...replaceInfo }, { spaces: 2 }) } catch (err) { // Ignore editing errors console.error(chalk.redBright('Failed to edit package.json')) } } function getUserName () { try { return execSync('git config user.name').toString() || '' } catch (error) { return '' } } module.exports = { shouldUseYarn, checkAppName, isSafeToCreateProjectIn, editPackageJson, getUserName }