@putout/engine-loader 11.4.0 → 11.6.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/{load.js → load/load.js} +14 -1
- package/lib/plugins/filter-enabled-plugins.js +24 -0
- package/lib/{load-plugins-async.js → plugins/load-plugins-async.js} +15 -49
- 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 +2 -1
- package/lib/build-paths.js +0 -20
- /package/lib/{async-loader.js → load/async-loader.js} +0 -0
- /package/lib/{simple-import.js → load/simple-import.js} +0 -0
- /package/lib/{parse-plugin-names.js → plugins/parse-plugin-names.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
|
-
}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
const process = require('process');
|
|
3
4
|
const {createRequire} = require('module');
|
|
4
5
|
|
|
5
6
|
const tryCatch = require('try-catch');
|
|
6
7
|
const once = require('once');
|
|
8
|
+
const {assign} = Object;
|
|
7
9
|
|
|
8
10
|
const bigFirst = (a) => `${a[0].toUpperCase()}${a.slice(1)}`;
|
|
9
11
|
|
|
@@ -13,7 +15,18 @@ const load = (type) => ({name, namespace}) => {
|
|
|
13
15
|
if (!pluginPath)
|
|
14
16
|
throw Error(`${bigFirst(type)} "${namespace}-${type}-${name}" could not be found!`);
|
|
15
17
|
|
|
16
|
-
|
|
18
|
+
const [error, result] = tryCatch(customRequire, pluginPath);
|
|
19
|
+
|
|
20
|
+
if (error?.code === 'ERR_REQUIRE_ESM')
|
|
21
|
+
assign(error, {
|
|
22
|
+
message: `☝️ Looks like '${name}' is ESM, use 'await putoutAsync()' instead`,
|
|
23
|
+
name,
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
if (error)
|
|
27
|
+
throw error;
|
|
28
|
+
|
|
29
|
+
return result;
|
|
17
30
|
};
|
|
18
31
|
|
|
19
32
|
module.exports.loadPlugin = load('plugin');
|
|
@@ -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
|
+
};
|
|
@@ -2,16 +2,21 @@
|
|
|
2
2
|
|
|
3
3
|
const {basename} = require('path');
|
|
4
4
|
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
const {
|
|
6
|
+
parseRules,
|
|
7
|
+
validateRules,
|
|
8
|
+
isEnabled,
|
|
9
|
+
getLoadedRules,
|
|
10
|
+
} = require('../rules');
|
|
11
|
+
|
|
12
|
+
const {createAsyncLoader} = require('../load/async-loader');
|
|
8
13
|
const {parsePluginNames} = require('./parse-plugin-names');
|
|
9
|
-
const validateRules = require('./validate-rules');
|
|
10
14
|
const validatePlugin = require('./validate-plugin');
|
|
11
|
-
const {
|
|
15
|
+
const {filterEnabledPlugins} = require('./filter-enabled-plugins');
|
|
16
|
+
|
|
17
|
+
const {check, checkRule} = require('../check');
|
|
12
18
|
|
|
13
19
|
const loadPluginAsync = createAsyncLoader('plugin');
|
|
14
|
-
const isString = (a) => typeof a === 'string';
|
|
15
20
|
|
|
16
21
|
module.exports.loadPluginsAsync = async (options) => {
|
|
17
22
|
check(options);
|
|
@@ -33,24 +38,10 @@ module.exports.loadPluginsAsync = async (options) => {
|
|
|
33
38
|
items,
|
|
34
39
|
});
|
|
35
40
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
// but we can't because of a way multi-rule plugins
|
|
41
|
-
// works. We can't determine count and names of all
|
|
42
|
-
// rules of a plugin before load.
|
|
43
|
-
for (const [name, plugin] of plugins) {
|
|
44
|
-
if (!isEnabled(name, cookedRules))
|
|
45
|
-
continue;
|
|
46
|
-
|
|
47
|
-
result.push(mergeRules(
|
|
48
|
-
[name, plugin],
|
|
49
|
-
cookedRules,
|
|
50
|
-
));
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
return result;
|
|
41
|
+
return filterEnabledPlugins({
|
|
42
|
+
plugins,
|
|
43
|
+
cookedRules,
|
|
44
|
+
});
|
|
54
45
|
};
|
|
55
46
|
|
|
56
47
|
function splitRule(rule) {
|
|
@@ -98,21 +89,6 @@ async function loadPlugins({items, loadedRules}) {
|
|
|
98
89
|
return plugins;
|
|
99
90
|
}
|
|
100
91
|
|
|
101
|
-
function getLoadedRules(rules) {
|
|
102
|
-
const loadedRules = [];
|
|
103
|
-
|
|
104
|
-
for (const item of rules) {
|
|
105
|
-
const {rule} = item;
|
|
106
|
-
|
|
107
|
-
if (rule.includes('/'))
|
|
108
|
-
continue;
|
|
109
|
-
|
|
110
|
-
loadedRules.push(item);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
return loadedRules;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
92
|
function extendRules(rule, plugin) {
|
|
117
93
|
const result = [];
|
|
118
94
|
const entries = Object.entries(plugin);
|
|
@@ -124,16 +100,6 @@ function extendRules(rule, plugin) {
|
|
|
124
100
|
return result;
|
|
125
101
|
}
|
|
126
102
|
|
|
127
|
-
function check(options) {
|
|
128
|
-
if (!options || typeof options !== 'object')
|
|
129
|
-
throw Error('options should be an object!');
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
function checkRule(rule) {
|
|
133
|
-
if (!isString(rule))
|
|
134
|
-
throw Error(`☝️ Looks like plugin name type is not 'string', but: '${typeof rule}'`);
|
|
135
|
-
}
|
|
136
|
-
|
|
137
103
|
function parseRuleName(rule) {
|
|
138
104
|
if (rule.startsWith('import:')) {
|
|
139
105
|
const shortName = basename(rule.replace('import:', ''));
|
|
@@ -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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@putout/engine-loader",
|
|
3
|
-
"version": "11.
|
|
3
|
+
"version": "11.6.0",
|
|
4
4
|
"type": "commonjs",
|
|
5
5
|
"author": "coderaiser <mnemonic.enemy@gmail.com> (https://github.com/coderaiser)",
|
|
6
6
|
"description": "load plugins and prepare them to run",
|
|
@@ -41,6 +41,7 @@
|
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"@putout/formatter-progress": "*",
|
|
44
|
+
"@putout/plugin-apply-nullish-coalescing": "*",
|
|
44
45
|
"@putout/plugin-convert-commonjs-to-esm": "*",
|
|
45
46
|
"@putout/plugin-remove-unused-variables": "*",
|
|
46
47
|
"@putout/processor-javascript": "*",
|
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
|