forked from G-Rath/eslint-plugin-eslint-config
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.ts
68 lines (62 loc) · 1.62 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import { Linter, Rule } from 'eslint';
import { readdirSync } from 'fs';
import { join, parse } from 'path';
const rulesDir = join(__dirname, 'rules');
const excludedFiles = ['utils', 'prefer-valid-rules', 'no-unneeded-rules'];
const rules = readdirSync(rulesDir)
.map(rule => parse(rule).name)
.filter(rule => !excludedFiles.includes(rule))
.reduce(
(acc, curr) =>
// eslint-disable-next-line @typescript-eslint/no-require-imports,@typescript-eslint/no-var-requires,node/global-require
Object.assign(acc, { [curr]: require(join(rulesDir, curr)) as unknown }),
{}
);
const allRules = Object.keys(rules).reduce<
Record<string, Linter.RuleLevel>
>(
(theRules, key) => ({
...theRules,
[`eslint-config/${key}`]: 'error'
}),
{}
);
interface PluginConfig extends Linter.Config {
plugins: ['eslint-config'];
}
const plugin: {
configs: Record<
'all' | 'recommended-rules',
PluginConfig & Required<Pick<PluginConfig, 'rules'>>
> &
Record<string, PluginConfig>;
rules: Record<string, Rule.RuleModule>;
} = {
configs: {
'all': {
plugins: ['eslint-config'],
rules: allRules
},
'recommended-rules': {
plugins: ['eslint-config'],
rules: {
'eslint-config/no-deprecated-rules': 'warn',
'eslint-config/no-invalid-config': 'error',
'eslint-config/no-unknown-rules': 'error'
}
},
'rc': {
plugins: ['eslint-config'],
overrides: [
{
files: ['.eslintrc.js'],
rules: {
'eslint-config/no-deprecated-rules': 'warn'
}
}
]
}
},
rules
};
export = plugin;