UNPKG

nest-prettier

Version:

A schematic to run prettier as an eslint rule

70 lines 3.79 kB
"use strict"; 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