| #!/usr/bin/env node | |
|  | |
| const assign = require('object.assign'); | |
| const entries = require('object.entries'); | |
| const { ESLint } = require('eslint'); | |
| 
 | |
| const baseConfig = require('.'); | |
| const whitespaceRules = require('./whitespaceRules'); | |
| 
 | |
| 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(whitespaceRules, baseConfig).then((config) => console.log(JSON.stringify(config)));
 |