/
index.js
57 lines (50 loc) · 1.78 KB
/
index.js
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
'use strict';
const plugin = require('../..');
const selfPlugin = Object.assign({}, plugin);
const pkgName = require('../../package.json').name;
let pluginName;
if (pkgName[0] === "@") {
const matches = pkgName.match(/^(@[^/]+)\/eslint-plugin(?:-(.*))?$/);
pluginName = matches.slice(1, 3).filter(Boolean).join('/');
} else {
pluginName = pkgName.replace(/^eslint-plugin-/, '');
}
function createRuleset(rules) {
return Object.keys(rules).reduce((newRules, oldRuleName) => {
const newRuleName = oldRuleName.startsWith(`${pluginName}/`)
? `self${oldRuleName.slice(oldRuleName.indexOf('/'))}`
: oldRuleName;
newRules[newRuleName] = rules[oldRuleName];
return newRules;
}, {});
}
if (plugin.configs) {
selfPlugin.configs = Object.assign({}, plugin.configs);
Object.keys(plugin.configs).forEach(configName => {
const config = plugin.configs[configName];
selfPlugin.configs[configName] = Object.assign({}, config);
if (config.extends) {
selfPlugin.configs[configName].extends = [].concat(config.extends)
.map(extendsName => extendsName.replace(`plugin:${pluginName}/`, 'plugin:self/'));
}
if (config.plugins) {
selfPlugin.configs[configName].plugins = [].concat(config.plugins)
.map(enabledPluginName => enabledPluginName.replace(pluginName, 'self'));
}
if (config.rules) {
selfPlugin.configs[configName].rules = createRuleset(config.rules);
}
if (config.overrides) {
selfPlugin.configs[configName].overrides = [].concat(config.overrides)
.map((override) => {
if (!override.rules) return override;
return Object.assign(
{},
override,
{rules: createRuleset(override.rules)}
);
})
}
});
}
module.exports = selfPlugin;