@putout/engine-loader 15.4.0 → 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,142 +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 {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');
19
9
 
10
+ module.exports.loadPlugins = loadPlugins;
20
11
  module.exports.loadPluginsAsync = loadPluginsAsync;
21
- module.exports.loadProcessorsAsync = async (options, load) => {
22
- check(options);
23
-
24
- const {processors = []} = options;
25
- const parsedProcessors = parseProcessorNames(processors);
26
- const loadProcessor = createAsyncLoader('processor');
27
-
28
- const list = [];
29
-
30
- for (const [name, fn] of parsedProcessors) {
31
- if (fn) {
32
- list.push(fn);
33
- continue;
34
- }
35
-
36
- list.push(loadProcessor(name, load));
37
- }
38
-
39
- return await Promise.all(list);
40
- };
41
-
12
+ module.exports.loadProcessorsAsync = loadProcessorsAsync;
42
13
  module.exports.createAsyncLoader = createAsyncLoader;
43
-
44
- module.exports.validateRules = (options) => {
45
- check(options);
46
-
47
- const {pluginNames = [], rules = {}} = options;
48
- const items = parsePluginNames(pluginNames);
49
-
50
- validateRules({
51
- rules,
52
- items,
53
- });
54
- };
55
-
56
- module.exports.loadPlugins = (options) => {
57
- check(options);
58
-
59
- const {pluginNames = [], rules = {}} = options;
60
-
61
- const cookedRules = parseRules(rules);
62
- const loadedRules = getLoadedRules(cookedRules);
63
-
64
- const items = parsePluginNames(pluginNames);
65
- const plugins = loadPlugins({
66
- items,
67
- loadedRules,
68
- });
69
-
70
- const cookedNotEnabled = parseRules(rules, {
71
- enable: false,
72
- });
73
-
74
- return filterEnabledPlugins({
75
- plugins,
76
- cookedRules: cookedNotEnabled,
77
- });
78
- };
79
-
80
- const splitRule = (rule) => [rule, 'putout'];
81
-
82
- const parseRule = (rule) => rule
83
- .replace('import:@putout/plugin-', '')
84
- .replace('@putout/plugin-', '');
85
-
86
- const maybeFromTuple = (a) => isArray(a) ? a[1] : a;
87
-
88
- function loadPlugins({items, loadedRules}) {
89
- const plugins = [];
90
-
91
- for (const [rule, itemPlugin] of items) {
92
- if (!isEnabled(rule, loadedRules))
93
- continue;
94
-
95
- checkRule(rule);
96
- const parsedRule = parseRule(rule);
97
-
98
- const [name, namespace] = splitRule(rule);
99
- const plugin = maybeFromTuple(itemPlugin) || loadPlugin({
100
- name,
101
- namespace,
102
- });
103
-
104
- validatePlugin({
105
- plugin,
106
- rule,
107
- });
108
-
109
- const {rules} = plugin;
110
-
111
- if (rules) {
112
- plugins.push(...extendRules(parsedRule, rules));
113
- continue;
114
- }
115
-
116
- plugins.push([parsedRule, plugin]);
117
- }
118
-
119
- return plugins;
120
- }
121
-
122
- function extendRules(rule, plugin) {
123
- const result = [];
124
- const entries = Object.entries(plugin);
125
-
126
- for (const [name, plugin] of entries) {
127
- result.push([`${rule}/${name}`, plugin]);
128
- }
129
-
130
- return result;
131
- }
132
-
133
- // add support of esm.sh
134
- // https://github.com/esm-dev/esm.sh/issues/1045
135
- function loadPlugin({name, namespace}) {
136
- const {loadPlugin} = require('./load/load');
137
-
138
- return loadPlugin({
139
- name,
140
- namespace,
141
- });
142
- }
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
+ };
@@ -24,10 +24,7 @@ const parseState = (rule, value) => {
24
24
  return value;
25
25
  };
26
26
 
27
- module.exports.parseRules = (rules, {enable = true} = {}) => {
28
- if (enable)
29
- rules = parseSubrules(rules);
30
-
27
+ module.exports.parseRules = (rules) => {
31
28
  const result = [];
32
29
  const plugin = null;
33
30
  const msg = '';
@@ -119,7 +116,7 @@ function validateState(rule, value) {
119
116
 
120
117
  const cut = (a) => a.split('/')[0];
121
118
 
122
- function parseSubrules(rules) {
119
+ module.exports.enableNestedRules = (rules) => {
123
120
  const newRules = {};
124
121
 
125
122
  for (const [rule, value] of entries(rules)) {
@@ -130,4 +127,4 @@ function parseSubrules(rules) {
130
127
  }
131
128
 
132
129
  return newRules;
133
- }
130
+ };
@@ -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.0",
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"