@putout/engine-loader 15.4.1 → 16.0.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/index.js CHANGED
@@ -1,141 +1,14 @@
1
1
  'use strict';
2
2
 
3
3
  const {createAsyncLoader} = require('./load/async-loader');
4
- const {parsePluginNames} = require('./plugins/parse-plugin-names');
5
- const parseProcessorNames = require('./processors/parse-processor-names');
6
- const validatePlugin = require('./plugins/validate-plugin');
7
- const {loadPluginsAsync} = require('./plugins/load-plugins-async');
8
-
9
- const {
10
- parseRules,
11
- validateRules,
12
- isEnabled,
13
- getLoadedRules,
14
- } = require('./rules');
15
4
 
16
- const {filterEnabledPlugins} = require('./plugins/filter-enabled-plugins');
17
- const {check, checkRule} = require('./check');
18
- const {enableNestedRules} = require('./rules/parse-rules');
19
- const {isArray} = Array;
5
+ const {validateRulesRelations} = require('./validators/validate-rules-relations');
6
+ const {loadPluginsAsync} = require('./plugins/load-plugins-async');
7
+ const {loadPlugins} = require('./plugins/load-plugins');
8
+ const {loadProcessorsAsync} = require('./processors/load-processors-async');
20
9
 
10
+ module.exports.loadPlugins = loadPlugins;
21
11
  module.exports.loadPluginsAsync = loadPluginsAsync;
22
- module.exports.loadProcessorsAsync = async (options, load) => {
23
- check(options);
24
-
25
- const {processors = []} = options;
26
- const parsedProcessors = parseProcessorNames(processors);
27
- const loadProcessor = createAsyncLoader('processor');
28
-
29
- const list = [];
30
-
31
- for (const [name, fn] of parsedProcessors) {
32
- if (fn) {
33
- list.push(fn);
34
- continue;
35
- }
36
-
37
- list.push(loadProcessor(name, load));
38
- }
39
-
40
- return await Promise.all(list);
41
- };
42
-
12
+ module.exports.loadProcessorsAsync = loadProcessorsAsync;
43
13
  module.exports.createAsyncLoader = createAsyncLoader;
44
-
45
- module.exports.validateRules = (options) => {
46
- check(options);
47
-
48
- const {pluginNames = [], rules = {}} = options;
49
- const items = parsePluginNames(pluginNames);
50
-
51
- validateRules({
52
- rules,
53
- items,
54
- });
55
- };
56
-
57
- module.exports.loadPlugins = (options) => {
58
- check(options);
59
-
60
- const {pluginNames = [], rules = {}} = options;
61
-
62
- const enabledRules = enableNestedRules(rules);
63
- const cookedEnabledRules = parseRules(enabledRules);
64
- const loadedRules = getLoadedRules(cookedEnabledRules);
65
-
66
- const items = parsePluginNames(pluginNames);
67
- const plugins = loadPlugins({
68
- items,
69
- loadedRules,
70
- });
71
-
72
- const cookedRules = parseRules(rules);
73
- return filterEnabledPlugins({
74
- plugins,
75
- cookedRules,
76
- });
77
- };
78
-
79
- const splitRule = (rule) => [rule, 'putout'];
80
-
81
- const parseRule = (rule) => rule
82
- .replace('import:@putout/plugin-', '')
83
- .replace('@putout/plugin-', '');
84
-
85
- const maybeFromTuple = (a) => isArray(a) ? a[1] : a;
86
-
87
- function loadPlugins({items, loadedRules}) {
88
- const plugins = [];
89
-
90
- for (const [rule, itemPlugin] of items) {
91
- if (!isEnabled(rule, loadedRules))
92
- continue;
93
-
94
- checkRule(rule);
95
- const parsedRule = parseRule(rule);
96
-
97
- const [name, namespace] = splitRule(rule);
98
- const plugin = maybeFromTuple(itemPlugin) || loadPlugin({
99
- name,
100
- namespace,
101
- });
102
-
103
- validatePlugin({
104
- plugin,
105
- rule,
106
- });
107
-
108
- const {rules} = plugin;
109
-
110
- if (rules) {
111
- plugins.push(...extendRules(parsedRule, rules));
112
- continue;
113
- }
114
-
115
- plugins.push([parsedRule, plugin]);
116
- }
117
-
118
- return plugins;
119
- }
120
-
121
- function extendRules(rule, plugin) {
122
- const result = [];
123
- const entries = Object.entries(plugin);
124
-
125
- for (const [name, plugin] of entries) {
126
- result.push([`${rule}/${name}`, plugin]);
127
- }
128
-
129
- return result;
130
- }
131
-
132
- // add support of esm.sh
133
- // https://github.com/esm-dev/esm.sh/issues/1045
134
- function loadPlugin({name, namespace}) {
135
- const {loadPlugin} = require('./load/load');
136
-
137
- return loadPlugin({
138
- name,
139
- namespace,
140
- });
141
- }
14
+ module.exports.validateRulesRelations = validateRulesRelations;
package/lib/load/load.js CHANGED
@@ -49,7 +49,9 @@ function getPath(namespace, type, name) {
49
49
  return [path, customRequire];
50
50
  }
51
51
 
52
- const {PUTOUT_YARN_PNP = 'putout'} = process.env;
52
+ const {
53
+ PUTOUT_YARN_PNP = 'putout',
54
+ } = process.env;
53
55
 
54
56
  const createCustomRequire = once(() => createRequire(require.resolve(PUTOUT_YARN_PNP)));
55
57
  const createPutoutRequire = once(() => createRequire(require.resolve('putout')));
@@ -2,13 +2,10 @@
2
2
 
3
3
  const {basename} = require('node:path');
4
4
 
5
- const {
6
- parseRules,
7
- isEnabled,
8
- getLoadedRules,
9
- } = require('../rules');
5
+ const {isEnabled} = require('../rules');
6
+
7
+ const {prepareRules} = require('./prepare-rules');
10
8
 
11
- const {parsePluginNames} = require('./parse-plugin-names');
12
9
  const validatePlugin = require('./validate-plugin');
13
10
  const {filterEnabledPlugins} = require('./filter-enabled-plugins');
14
11
 
@@ -21,10 +18,14 @@ module.exports.loadPluginsAsync = async (options) => {
21
18
  check(options);
22
19
 
23
20
  const {pluginNames = [], rules = {}} = options;
24
-
25
- const cookedRules = parseRules(rules);
26
- const loadedRules = getLoadedRules(cookedRules);
27
- const items = parsePluginNames(pluginNames);
21
+ const {
22
+ items,
23
+ loadedRules,
24
+ cookedRules,
25
+ } = prepareRules({
26
+ rules,
27
+ pluginNames,
28
+ });
28
29
 
29
30
  const plugins = await loadPlugins({
30
31
  items,
@@ -0,0 +1,99 @@
1
+ 'use strict';
2
+
3
+ const validatePlugin = require('./validate-plugin');
4
+ const {prepareRules} = require('./prepare-rules');
5
+
6
+ const {isEnabled} = require('../rules');
7
+
8
+ const {filterEnabledPlugins} = require('./filter-enabled-plugins');
9
+ const {check, checkRule} = require('../check');
10
+
11
+ const {isArray} = Array;
12
+
13
+ module.exports.loadPlugins = (options) => {
14
+ check(options);
15
+
16
+ const {pluginNames = [], rules = {}} = options;
17
+ const {
18
+ items,
19
+ loadedRules,
20
+ cookedRules,
21
+ } = prepareRules({
22
+ rules,
23
+ pluginNames,
24
+ });
25
+
26
+ const plugins = loadPlugins({
27
+ items,
28
+ loadedRules,
29
+ });
30
+
31
+ return filterEnabledPlugins({
32
+ plugins,
33
+ cookedRules,
34
+ });
35
+ };
36
+
37
+ const splitRule = (rule) => [rule, 'putout'];
38
+
39
+ const parseRule = (rule) => rule
40
+ .replace('import:@putout/plugin-', '')
41
+ .replace('@putout/plugin-', '');
42
+
43
+ const maybeFromTuple = (a) => isArray(a) ? a[1] : a;
44
+
45
+ function loadPlugins({items, loadedRules}) {
46
+ const plugins = [];
47
+
48
+ for (const [rule, itemPlugin] of items) {
49
+ if (!isEnabled(rule, loadedRules))
50
+ continue;
51
+
52
+ checkRule(rule);
53
+ const parsedRule = parseRule(rule);
54
+
55
+ const [name, namespace] = splitRule(rule);
56
+ const plugin = maybeFromTuple(itemPlugin) || loadPlugin({
57
+ name,
58
+ namespace,
59
+ });
60
+
61
+ validatePlugin({
62
+ plugin,
63
+ rule,
64
+ });
65
+
66
+ const {rules} = plugin;
67
+
68
+ if (rules) {
69
+ plugins.push(...extendRules(parsedRule, rules));
70
+ continue;
71
+ }
72
+
73
+ plugins.push([parsedRule, plugin]);
74
+ }
75
+
76
+ return plugins;
77
+ }
78
+
79
+ function extendRules(rule, plugin) {
80
+ const result = [];
81
+ const entries = Object.entries(plugin);
82
+
83
+ for (const [name, plugin] of entries) {
84
+ result.push([`${rule}/${name}`, plugin]);
85
+ }
86
+
87
+ return result;
88
+ }
89
+
90
+ // add support of esm.sh
91
+ // https://github.com/esm-dev/esm.sh/issues/1045
92
+ function loadPlugin({name, namespace}) {
93
+ const {loadPlugin} = require('../load/load');
94
+
95
+ return loadPlugin({
96
+ name,
97
+ namespace,
98
+ });
99
+ }
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ const {parsePluginNames} = require('./parse-plugin-names');
4
+ const {enableNestedRules} = require('../rules/parse-rules');
5
+
6
+ const {parseRules, getLoadedRules} = require('../rules');
7
+
8
+ module.exports.prepareRules = ({rules, pluginNames}) => {
9
+ const enabledRules = enableNestedRules(rules);
10
+ const cookedEnabledRules = parseRules(enabledRules);
11
+ const loadedRules = getLoadedRules(cookedEnabledRules);
12
+ const items = parsePluginNames(pluginNames);
13
+ const cookedRules = parseRules(rules);
14
+
15
+ return {
16
+ items,
17
+ loadedRules,
18
+ cookedRules,
19
+ };
20
+ };
@@ -0,0 +1,28 @@
1
+ 'use strict';
2
+
3
+ const {createAsyncLoader} = require('../load/async-loader');
4
+
5
+ const parseProcessorNames = require('../processors/parse-processor-names');
6
+
7
+ const {check} = require('../check');
8
+
9
+ module.exports.loadProcessorsAsync = async (options, load) => {
10
+ check(options);
11
+
12
+ const {processors = []} = options;
13
+ const parsedProcessors = parseProcessorNames(processors);
14
+ const loadProcessor = createAsyncLoader('processor');
15
+
16
+ const list = [];
17
+
18
+ for (const [name, fn] of parsedProcessors) {
19
+ if (fn) {
20
+ list.push(fn);
21
+ continue;
22
+ }
23
+
24
+ list.push(loadProcessor(name, load));
25
+ }
26
+
27
+ return await Promise.all(list);
28
+ };
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ const {parsePluginNames} = require('../plugins/parse-plugin-names');
4
+ const {validateRules} = require('../rules');
5
+ const {check} = require('../check');
6
+
7
+ module.exports.validateRulesRelations = (options) => {
8
+ check(options);
9
+
10
+ const {pluginNames = [], rules = {}} = options;
11
+ const items = parsePluginNames(pluginNames);
12
+
13
+ validateRules({
14
+ rules,
15
+ items,
16
+ });
17
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@putout/engine-loader",
3
- "version": "15.4.1",
3
+ "version": "16.0.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",
@@ -39,30 +39,30 @@
39
39
  "putout": "*"
40
40
  },
41
41
  "devDependencies": {
42
- "@putout/eslint-flat": "^2.0.0",
42
+ "@putout/eslint-flat": "^3.0.0",
43
43
  "@putout/formatter-progress": "*",
44
44
  "@putout/plugin-apply-nullish-coalescing": "*",
45
45
  "@putout/plugin-convert-commonjs-to-esm": "*",
46
46
  "@putout/plugin-nodejs": "*",
47
- "@putout/plugin-remove-unused-variables": "*",
47
+ "@putout/plugin-remove-debugger": "*",
48
48
  "@putout/processor-javascript": "*",
49
49
  "@putout/processor-markdown": "*",
50
50
  "c8": "^10.0.0",
51
51
  "eslint": "^9.0.0",
52
52
  "eslint-plugin-n": "^17.0.0",
53
- "eslint-plugin-putout": "^25.0.1",
53
+ "eslint-plugin-putout": "^27.0.0",
54
54
  "estrace": "*",
55
55
  "just-camel-case": "^6.2.0",
56
- "madrun": "^10.0.0",
56
+ "madrun": "^11.0.0",
57
57
  "mock-require": "^3.0.3",
58
58
  "montag": "^1.0.0",
59
59
  "nodemon": "^3.0.1",
60
60
  "putout": "*",
61
- "supertape": "^10.0.0"
61
+ "supertape": "^11.0.3"
62
62
  },
63
63
  "license": "MIT",
64
64
  "engines": {
65
- "node": ">=18"
65
+ "node": ">=20"
66
66
  },
67
67
  "publishConfig": {
68
68
  "access": "public"