@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.
@@ -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 isEnabled = require('./is-enabled');
6
- const {loadPlugin} = require('./load');
7
- const {createAsyncLoader} = require('./async-loader');
8
- const parsePluginNames = require('./parse-plugin-names');
9
- const parseProcessorNames = require('./parse-processor-names');
10
- const parseRules = require('./parse-rules');
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 isString = (a) => typeof a === 'string';
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
- const result = [];
63
-
64
- // Would be great to have ability to filter
65
- // disabled plugins and prevent them from loading
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 isEnabled = require('./is-enabled');
4
- const parseRules = require('./parse-rules');
5
- const {createAsyncLoader} = require('./async-loader');
6
- const parsePluginNames = require('./parse-plugin-names');
7
- const validateRules = require('./validate-rules');
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 {mergeRules} = require('./merge-rules');
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
- const result = [];
35
-
36
- // Would be great to have ability to filter
37
- // disabled plugins and prevent them from loading
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 check(options) {
126
- if (!options || typeof options !== 'object')
127
- throw Error('options should be an object!');
128
- }
129
-
130
- function checkRule(rule) {
131
- if (!isString(rule))
132
- throw Error(`☝️ Looks like plugin name type is not 'string', but: '${typeof rule}'`);
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
  }
@@ -4,7 +4,7 @@ const isStr = (a) => typeof a === 'string';
4
4
  const {isArray} = Array;
5
5
  const {entries} = Object;
6
6
 
7
- module.exports = (plugins) => {
7
+ module.exports.parsePluginNames = (plugins) => {
8
8
  const result = [];
9
9
 
10
10
  for (const plugin of plugins) {
@@ -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
+ };
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- module.exports = (name, rules) => {
3
+ module.exports.isEnabled = (name, rules) => {
4
4
  for (const {rule, state} of rules) {
5
5
  if (rule === name)
6
6
  return state;
@@ -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 = [];
@@ -9,7 +9,7 @@ const parse = (rule) => {
9
9
  return rule;
10
10
  };
11
11
 
12
- module.exports = ({items, rules}) => {
12
+ module.exports.validateRules = ({items, rules}) => {
13
13
  const ruleItems = Object.keys(rules);
14
14
 
15
15
  for (const rule of ruleItems) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@putout/engine-loader",
3
- "version": "11.3.0",
3
+ "version": "11.5.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",
@@ -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