UNPKG

@interaktiv/dia-scripts

Version:

CLI toolbox with common scripts for most sort of projects at DIA

134 lines (105 loc) 4.46 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); const os = require('os'); const path = require('path'); const fs = require('fs-extra'); const chalk = require('chalk'); const exit = require('exit'); const isCI = require('is-ci'); const { ifSfdxProject, isCommerceProject, isSfdxProject, isTitaniumProject, parseEnv, SCRIPTS_PACKAGE_NAME } = require('../utils'); const EXIT_CODE_SUCCESS = 0; function copyOrAppend(src, dest) { try { fs.copySync(src, dest); console.log(''); console.log(`Added ${chalk.blue(path.basename(dest))} file`); } catch (err) { // Append if there's already a `src` file there if (err.code === 'EEXIST') { const data = fs.readFileSync(src); fs.appendFileSync(dest, data); console.log(''); console.log(`Updated ${chalk.blue(path.basename(dest))}`); } else { throw err; } } } // eslint-disable-next-line max-statements (function () { if (isCI) { console.log(''); console.log('CI detected, skipping init.'); exit(0); return; } const cwd = parseEnv('INIT_CWD', process.cwd()); const appPkgPath = path.join(cwd, 'package.json'); let appPkg; try { appPkg = require(appPkgPath); } catch (err) {// Ignore error } if (appPkg == null) { console.log(''); console.log(chalk.yellow('Could not detect working directory, aborting initialization. Please run `dia-scripts init` after install.')); exit(404); return; } if (appPkg.name === SCRIPTS_PACKAGE_NAME) { console.log(''); console.log(chalk.yellow('Running self, no need to init, skipping')); exit(EXIT_CODE_SUCCESS); return; } const appDirectory = path.dirname(appPkgPath); // Add npm scripts const runScripts = Object.entries({ build: isSfdxProject() || isTitaniumProject() || isCommerceProject() ? null : 'dia-scripts build', cm: 'dia-scripts commit', format: 'dia-scripts format', lint: 'dia-scripts lint', test: 'dia-scripts test', validate: 'dia-scripts validate' }) // Kick falsey values .filter(([, value]) => Boolean(value)).reduce((scripts, [key, value]) => (0, _extends2.default)({}, scripts, { [key]: value }), {}); appPkg.scripts = (0, _extends2.default)({}, appPkg.scripts || {}, runScripts); // TODO: Should be interactive and asked if needed or passed in via flag // Write out eslint config file const eslintrcPath = path.join(appDirectory, '.eslintrc.js'); if (fs.existsSync(eslintrcPath)) { fs.renameSync(eslintrcPath, `${eslintrcPath}.old`); console.log(''); console.log(chalk.yellow('You had a `.eslintrc.js` file, we renamed it to `.eslintrc.js.old`')); } fs.writeFileSync(eslintrcPath, `module.exports = require('@interaktiv/dia-scripts/eslint');` + os.EOL); // Add husky config to package.json appPkg.husky = require('../../husky'); // TODO: Should be interactive and asked if needed or passed in via flag // Write out prettier config file const prettierrcPath = path.join(appDirectory, '.prettierrc.js'); if (fs.existsSync(prettierrcPath)) { fs.renameSync(prettierrcPath, `${prettierrcPath}.old`); console.log(''); console.log(chalk.yellow('You had a `.prettierrc.js` file, we renamed it to `.prettierrc.js.old`')); } fs.writeFileSync(prettierrcPath, `module.exports = require('@interaktiv/dia-scripts/prettier');` + os.EOL); // Add ignore files const ignoreFiles = Object.entries({ '.prettierignore': require.resolve('@interaktiv/prettier-config-dia/.prettierignore'), '.eslintignore': require.resolve('../config/eslintignore'), '.forceignore': ifSfdxProject(require.resolve('../config/forceignore'), null), '.gitignore': require.resolve('../config/gitignore'), '.npmignore': require.resolve('../config/npmignore') }).filter(([, src]) => Boolean(src)).reduce((files, [dest, src]) => (0, _extends2.default)({}, files, { [dest]: src }), {}); // If an ignore file exists just append our content to the existent Object.entries(ignoreFiles).map(([dest, src]) => [path.join(appDirectory, dest), src]).forEach(fileArgs => copyOrAppend(...fileArgs.reverse())); // Write out package.json changes fs.writeFileSync(path.join(appDirectory, 'package.json'), JSON.stringify(appPkg, null, 2) + os.EOL); console.log(''); exit(EXIT_CODE_SUCCESS); })();