@putout/engine-loader 11.3.0 → 11.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/check/index.js +13 -0
- package/lib/index.js +20 -54
- package/lib/plugins/filter-enabled-plugins.js +24 -0
- package/lib/{load-plugins-async.js → plugins/load-plugins-async.js} +27 -49
- package/lib/{parse-plugin-names.js → plugins/parse-plugin-names.js} +1 -1
- package/lib/rules/get-loaded-rules.js +16 -0
- package/lib/rules/index.js +15 -0
- package/lib/{is-enabled.js → rules/is-enabled.js} +1 -1
- package/lib/{parse-rules.js → rules/parse-rules.js} +1 -1
- package/lib/{validate-rules.js → rules/validate-rules.js} +1 -1
- package/package.json +1 -1
- package/lib/build-paths.js +0 -20
- /package/lib/{async-loader.js → load/async-loader.js} +0 -0
- /package/lib/{load.js → load/load.js} +0 -0
- /package/lib/{simple-import.js → load/simple-import.js} +0 -0
- /package/lib/{validate-plugin.js → plugins/validate-plugin.js} +0 -0
- /package/lib/{parse-processor-names.js → processors/parse-processor-names.js} +0 -0
- /package/lib/{merge-rules.js → rules/merge-rules.js} +0 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const isString = (a) => typeof a === 'string';
|
|
4
|
+
|
|
5
|
+
module.exports.check = (options) => {
|
|
6
|
+
if (!options || typeof options !== 'object')
|
|
7
|
+
throw Error('options should be an object!');
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
module.exports.checkRule = (rule) => {
|
|
11
|
+
if (!isString(rule))
|
|
12
|
+
throw Error(`☝️ Looks like plugin name type is not 'string', but: '${typeof rule}'`);
|
|
13
|
+
};
|
package/lib/index.js
CHANGED
|
@@ -2,18 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
const {nanomemoize} = require('nano-memoize');
|
|
4
4
|
|
|
5
|
-
const
|
|
6
|
-
const {
|
|
7
|
-
const {
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const validateRules = require('./validate-rules');
|
|
12
|
-
const validatePlugin = require('./validate-plugin');
|
|
13
|
-
const {mergeRules} = require('./merge-rules');
|
|
14
|
-
const {loadPluginsAsync} = require('./load-plugins-async');
|
|
5
|
+
const {loadPlugin} = require('./load/load');
|
|
6
|
+
const {createAsyncLoader} = require('./load/async-loader');
|
|
7
|
+
const {parsePluginNames} = require('./plugins/parse-plugin-names');
|
|
8
|
+
const parseProcessorNames = require('./processors/parse-processor-names');
|
|
9
|
+
const validatePlugin = require('./plugins/validate-plugin');
|
|
10
|
+
const {loadPluginsAsync} = require('./plugins/load-plugins-async');
|
|
15
11
|
|
|
16
|
-
const
|
|
12
|
+
const {
|
|
13
|
+
parseRules,
|
|
14
|
+
validateRules,
|
|
15
|
+
isEnabled,
|
|
16
|
+
getLoadedRules,
|
|
17
|
+
} = require('./rules');
|
|
18
|
+
|
|
19
|
+
const {filterEnabledPlugins} = require('./plugins/filter-enabled-plugins');
|
|
20
|
+
|
|
21
|
+
const {check, checkRule} = require('./check');
|
|
17
22
|
|
|
18
23
|
module.exports.loadPluginsAsync = loadPluginsAsync;
|
|
19
24
|
module.exports.loadProcessorsAsync = nanomemoize(async (options, load) => {
|
|
@@ -59,41 +64,12 @@ module.exports.loadPlugins = (options) => {
|
|
|
59
64
|
items,
|
|
60
65
|
});
|
|
61
66
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
// but we can't because of a way multi-rule plugins
|
|
67
|
-
// works. We can't determine count and names of all
|
|
68
|
-
// rules of a plugin before load.
|
|
69
|
-
for (const [name, plugin] of plugins) {
|
|
70
|
-
if (!isEnabled(name, cookedRules))
|
|
71
|
-
continue;
|
|
72
|
-
|
|
73
|
-
result.push(mergeRules(
|
|
74
|
-
[name, plugin],
|
|
75
|
-
cookedRules,
|
|
76
|
-
));
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
return result;
|
|
67
|
+
return filterEnabledPlugins({
|
|
68
|
+
plugins,
|
|
69
|
+
cookedRules,
|
|
70
|
+
});
|
|
80
71
|
};
|
|
81
72
|
|
|
82
|
-
function getLoadedRules(rules) {
|
|
83
|
-
const loadedRules = [];
|
|
84
|
-
|
|
85
|
-
for (const item of rules) {
|
|
86
|
-
const {rule} = item;
|
|
87
|
-
|
|
88
|
-
if (rule.includes('/'))
|
|
89
|
-
continue;
|
|
90
|
-
|
|
91
|
-
loadedRules.push(item);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
return loadedRules;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
73
|
function splitRule(rule) {
|
|
98
74
|
return [rule, 'putout'];
|
|
99
75
|
}
|
|
@@ -141,13 +117,3 @@ function extendRules(rule, plugin) {
|
|
|
141
117
|
|
|
142
118
|
return result;
|
|
143
119
|
}
|
|
144
|
-
|
|
145
|
-
function check(options) {
|
|
146
|
-
if (!options || typeof options !== 'object')
|
|
147
|
-
throw Error('options should be an object!');
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
function checkRule(rule) {
|
|
151
|
-
if (!isString(rule))
|
|
152
|
-
throw Error(`☝️ Looks like plugin name type is not 'string', but: '${typeof rule}'`);
|
|
153
|
-
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const {isEnabled, mergeRules} = require('../rules');
|
|
4
|
+
|
|
5
|
+
// Would be great to have ability to filter
|
|
6
|
+
// disabled plugins and prevent them from loading
|
|
7
|
+
// but we can't because of a way multi-rule plugins
|
|
8
|
+
// works. We can't determine count and names of all
|
|
9
|
+
// rules of a plugin before load.
|
|
10
|
+
module.exports.filterEnabledPlugins = ({plugins, cookedRules}) => {
|
|
11
|
+
const result = [];
|
|
12
|
+
|
|
13
|
+
for (const [name, plugin] of plugins) {
|
|
14
|
+
if (!isEnabled(name, cookedRules))
|
|
15
|
+
continue;
|
|
16
|
+
|
|
17
|
+
result.push(mergeRules(
|
|
18
|
+
[name, plugin],
|
|
19
|
+
cookedRules,
|
|
20
|
+
));
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
@@ -1,15 +1,22 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
const {
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
const {basename} = require('path');
|
|
4
|
+
|
|
5
|
+
const {
|
|
6
|
+
parseRules,
|
|
7
|
+
validateRules,
|
|
8
|
+
isEnabled,
|
|
9
|
+
getLoadedRules,
|
|
10
|
+
} = require('../rules');
|
|
11
|
+
|
|
12
|
+
const {createAsyncLoader} = require('../load/async-loader');
|
|
13
|
+
const {parsePluginNames} = require('./parse-plugin-names');
|
|
8
14
|
const validatePlugin = require('./validate-plugin');
|
|
9
|
-
const {
|
|
15
|
+
const {filterEnabledPlugins} = require('./filter-enabled-plugins');
|
|
16
|
+
|
|
17
|
+
const {check, checkRule} = require('../check');
|
|
10
18
|
|
|
11
19
|
const loadPluginAsync = createAsyncLoader('plugin');
|
|
12
|
-
const isString = (a) => typeof a === 'string';
|
|
13
20
|
|
|
14
21
|
module.exports.loadPluginsAsync = async (options) => {
|
|
15
22
|
check(options);
|
|
@@ -31,24 +38,10 @@ module.exports.loadPluginsAsync = async (options) => {
|
|
|
31
38
|
items,
|
|
32
39
|
});
|
|
33
40
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
// but we can't because of a way multi-rule plugins
|
|
39
|
-
// works. We can't determine count and names of all
|
|
40
|
-
// rules of a plugin before load.
|
|
41
|
-
for (const [name, plugin] of plugins) {
|
|
42
|
-
if (!isEnabled(name, cookedRules))
|
|
43
|
-
continue;
|
|
44
|
-
|
|
45
|
-
result.push(mergeRules(
|
|
46
|
-
[name, plugin],
|
|
47
|
-
cookedRules,
|
|
48
|
-
));
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
return result;
|
|
41
|
+
return filterEnabledPlugins({
|
|
42
|
+
plugins,
|
|
43
|
+
cookedRules,
|
|
44
|
+
});
|
|
52
45
|
};
|
|
53
46
|
|
|
54
47
|
function splitRule(rule) {
|
|
@@ -68,7 +61,7 @@ async function loadPlugins({items, loadedRules}) {
|
|
|
68
61
|
const [name] = splitRule(rule);
|
|
69
62
|
const plugin = itemPlugin || loadPluginAsync(name);
|
|
70
63
|
|
|
71
|
-
enabledRules.push(rule);
|
|
64
|
+
enabledRules.push(parseRuleName(rule));
|
|
72
65
|
promises.push(plugin);
|
|
73
66
|
}
|
|
74
67
|
|
|
@@ -96,21 +89,6 @@ async function loadPlugins({items, loadedRules}) {
|
|
|
96
89
|
return plugins;
|
|
97
90
|
}
|
|
98
91
|
|
|
99
|
-
function getLoadedRules(rules) {
|
|
100
|
-
const loadedRules = [];
|
|
101
|
-
|
|
102
|
-
for (const item of rules) {
|
|
103
|
-
const {rule} = item;
|
|
104
|
-
|
|
105
|
-
if (rule.includes('/'))
|
|
106
|
-
continue;
|
|
107
|
-
|
|
108
|
-
loadedRules.push(item);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
return loadedRules;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
92
|
function extendRules(rule, plugin) {
|
|
115
93
|
const result = [];
|
|
116
94
|
const entries = Object.entries(plugin);
|
|
@@ -122,12 +100,12 @@ function extendRules(rule, plugin) {
|
|
|
122
100
|
return result;
|
|
123
101
|
}
|
|
124
102
|
|
|
125
|
-
function
|
|
126
|
-
if (
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
103
|
+
function parseRuleName(rule) {
|
|
104
|
+
if (rule.startsWith('import:')) {
|
|
105
|
+
const shortName = basename(rule.replace('import:', ''));
|
|
106
|
+
|
|
107
|
+
return shortName.replace('plugin-', '');
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return rule;
|
|
133
111
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
module.exports.getLoadedRules = (rules) => {
|
|
4
|
+
const loadedRules = [];
|
|
5
|
+
|
|
6
|
+
for (const item of rules) {
|
|
7
|
+
const {rule} = item;
|
|
8
|
+
|
|
9
|
+
if (rule.includes('/'))
|
|
10
|
+
continue;
|
|
11
|
+
|
|
12
|
+
loadedRules.push(item);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
return loadedRules;
|
|
16
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const {parseRules} = require('./parse-rules');
|
|
4
|
+
const {mergeRules} = require('./merge-rules');
|
|
5
|
+
const {validateRules} = require('./validate-rules');
|
|
6
|
+
const {isEnabled} = require('./is-enabled');
|
|
7
|
+
const {getLoadedRules} = require('./get-loaded-rules');
|
|
8
|
+
|
|
9
|
+
module.exports = {
|
|
10
|
+
parseRules,
|
|
11
|
+
mergeRules,
|
|
12
|
+
validateRules,
|
|
13
|
+
isEnabled,
|
|
14
|
+
getLoadedRules,
|
|
15
|
+
};
|
|
@@ -13,7 +13,7 @@ const stateOptionError = ({rule, value}) => Error(`☝️ ${rule}: state option
|
|
|
13
13
|
const defaultOptions = () => Object.create(null);
|
|
14
14
|
const parseState = (rule, value) => validateState(rule, value) && value === 'on' || value !== 'off';
|
|
15
15
|
|
|
16
|
-
module.exports = (rules) => {
|
|
16
|
+
module.exports.parseRules = (rules) => {
|
|
17
17
|
rules = parseSubrules(rules);
|
|
18
18
|
|
|
19
19
|
const result = [];
|
package/package.json
CHANGED
package/lib/build-paths.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const addNodeModules = (a) => `${a}/node_modules`;
|
|
4
|
-
|
|
5
|
-
module.exports = (path) => {
|
|
6
|
-
const names = path
|
|
7
|
-
.split('/')
|
|
8
|
-
.slice(1);
|
|
9
|
-
|
|
10
|
-
const result = [''];
|
|
11
|
-
|
|
12
|
-
let current = '';
|
|
13
|
-
|
|
14
|
-
for (const name of names) {
|
|
15
|
-
current += `/${name}`;
|
|
16
|
-
result.push(current);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
return result.map(addNodeModules);
|
|
20
|
-
};
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|