nest-prettier
Version:
A schematic to run prettier as an eslint rule
70 lines • 3.79 kB
JavaScript
;
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.addEslintPrettier = void 0;
const schematics_1 = require("@angular-devkit/schematics");
const core_1 = require("@angular-devkit/core");
const lodash_1 = require("lodash");
const enum_1 = require("./enum");
function addEslintPrettier(options) {
return (tree, context) => {
const { eslintFileFormat } = options, prettierOptions = __rest(options, ["eslintFileFormat"]);
const configFileMap = {
[enum_1.ESLINT_FILE_FORMAT.PACKAGE_JSON]: 'package.json',
[enum_1.ESLINT_FILE_FORMAT.JSON]: '.eslintrc.json',
[enum_1.ESLINT_FILE_FORMAT.JAVASCRIPT]: '.eslintrc.js',
};
const configFileName = configFileMap[eslintFileFormat];
const buffer = tree.read(configFileName);
if (!buffer) {
return tree;
}
const prettierRule = ['error', prettierOptions];
if (options.eslintFileFormat === enum_1.ESLINT_FILE_FORMAT.PACKAGE_JSON) {
updateEslintConfig(tree, buffer, configFileName, prettierRule);
}
else if (options.eslintFileFormat === enum_1.ESLINT_FILE_FORMAT.JSON) {
updateEslintJson(tree, buffer, configFileName, prettierRule);
}
else if (options.eslintFileFormat === enum_1.ESLINT_FILE_FORMAT.JAVASCRIPT) {
context.logger.info('Does not support .eslintrc.js');
const eslintTemplate = './eslintrc-prettier.template';
if (tree.exists(eslintTemplate)) {
tree.delete(eslintTemplate);
}
const sourceTemplate = (0, schematics_1.url)('./files');
const sourceParameterizedTemplate = (0, schematics_1.apply)(sourceTemplate, [
(0, schematics_1.template)(Object.assign(Object.assign({}, options), core_1.strings)),
]);
context.logger.info(`Append plugin and rule from ${eslintTemplate} to ${configFileName}. Then, delete the template file.`);
return (0, schematics_1.mergeWith)(sourceParameterizedTemplate)(tree, context);
}
context.logger.info(`Added eslint-plugin-prettier`);
return tree;
};
}
exports.addEslintPrettier = addEslintPrettier;
function updateEslintConfig(tree, buffer, configFileName, prettierRule) {
const packageJson = JSON.parse(buffer.toString());
const eslintConfig = packageJson.eslintConfig || {};
const { extends: eslintExtends = [], rules = {} } = eslintConfig;
packageJson.eslintConfig = Object.assign(Object.assign({}, eslintConfig), { extends: (0, lodash_1.uniq)([...eslintExtends, 'plugin:prettier/recommended']), rules: Object.assign(Object.assign({}, rules), { 'prettier/prettier': prettierRule }) });
tree.overwrite(configFileName, JSON.stringify(packageJson, null, 2));
}
function updateEslintJson(tree, buffer, configFileName, prettierRule) {
const eslintJson = JSON.parse(buffer.toString());
eslintJson.extends = (0, lodash_1.uniq)([...eslintJson.extends, 'plugin:prettier/recommended']);
eslintJson.rules = Object.assign(Object.assign({}, eslintJson.rules), { 'prettier/prettier': prettierRule });
tree.overwrite(configFileName, JSON.stringify(eslintJson, null, 2));
}
//# sourceMappingURL=eslint-prettier.helper.js.map