#!/usr/bin/env node const assign = require('object.assign'); const entries = require('object.entries'); const { ESLint } = require('eslint'); const baseConfig = require('.'); const severities = ['off', 'warn', 'error']; function getSeverity(ruleConfig) { if (Array.isArray(ruleConfig)) { return getSeverity(ruleConfig[0]); } if (typeof ruleConfig === 'number') { return severities[ruleConfig]; } return ruleConfig; } async function onlyErrorOnRules(rulesToError, config) { const errorsOnly = assign({}, config); const cli = new ESLint({ useEslintrc: false, baseConfig: config }); const baseRules = (await cli.calculateConfigForFile(require.resolve('./'))).rules; entries(baseRules).forEach((rule) => { const ruleName = rule[0]; const ruleConfig = rule[1]; const severity = getSeverity(ruleConfig); if (rulesToError.indexOf(ruleName) === -1 && severity === 'error') { if (Array.isArray(ruleConfig)) { errorsOnly.rules[ruleName] = ['warn'].concat(ruleConfig.slice(1)); } else if (typeof ruleConfig === 'number') { errorsOnly.rules[ruleName] = 1; } else { errorsOnly.rules[ruleName] = 'warn'; } } }); return errorsOnly; } onlyErrorOnRules([ 'array-bracket-newline', 'array-bracket-spacing', 'array-element-newline', 'arrow-spacing', 'block-spacing', 'comma-spacing', 'computed-property-spacing', 'dot-location', 'eol-last', 'func-call-spacing', 'function-paren-newline', 'generator-star-spacing', 'implicit-arrow-linebreak', 'indent', 'key-spacing', 'keyword-spacing', 'line-comment-position', 'linebreak-style', 'multiline-ternary', 'newline-per-chained-call', 'no-irregular-whitespace', 'no-mixed-spaces-and-tabs', 'no-multi-spaces', 'no-regex-spaces', 'no-spaced-func', 'no-trailing-spaces', 'no-whitespace-before-property', 'nonblock-statement-body-position', 'object-curly-newline', 'object-curly-spacing', 'object-property-newline', 'one-var-declaration-per-line', 'operator-linebreak', 'padded-blocks', 'padding-line-between-statements', 'rest-spread-spacing', 'semi-spacing', 'semi-style', 'space-before-blocks', 'space-before-function-paren', 'space-in-parens', 'space-infix-ops', 'space-unary-ops', 'spaced-comment', 'switch-colon-spacing', 'template-tag-spacing', 'import/newline-after-import', ], baseConfig).then((config) => console.log(JSON.stringify(config)));