@interaktiv/dia-scripts
Version:
CLI toolbox with common scripts for most sort of projects at DIA
134 lines (105 loc) • 4.46 kB
JavaScript
;
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);
})();