@putout/engine-runner 11.6.0 → 12.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/README.md +56 -1
- package/lib/merge-visitors.js +11 -2
- package/lib/store.js +34 -26
- package/lib/template/index.js +1 -1
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -193,7 +193,7 @@ module.exports.traverse = ({push, listStore}) => ({
|
|
|
193
193
|
});
|
|
194
194
|
```
|
|
195
195
|
|
|
196
|
-
`store` is preferred way of keeping
|
|
196
|
+
`store` is preferred way of keeping data, because of caching 🐊`putout`, `traverse` init function called only once, and any other way
|
|
197
197
|
of handling variables will most likely will lead to bugs.
|
|
198
198
|
|
|
199
199
|
#### Store
|
|
@@ -225,6 +225,61 @@ module.exports.traverse = ({push, store}) => ({
|
|
|
225
225
|
});
|
|
226
226
|
```
|
|
227
227
|
|
|
228
|
+
#### Upstore
|
|
229
|
+
|
|
230
|
+
When you need to update already saved values, use `upstore`
|
|
231
|
+
|
|
232
|
+
```js
|
|
233
|
+
module.exports.traverse = ({push, store}) => ({
|
|
234
|
+
TSTypeAliasDeclaration(path) {
|
|
235
|
+
if (path.parentPath.isExportNamedDeclaration())
|
|
236
|
+
return;
|
|
237
|
+
|
|
238
|
+
store(path.node.id.name, {
|
|
239
|
+
path,
|
|
240
|
+
});
|
|
241
|
+
},
|
|
242
|
+
|
|
243
|
+
ObjectProperty(path) {
|
|
244
|
+
const {value} = path.node;
|
|
245
|
+
const {name} = value;
|
|
246
|
+
|
|
247
|
+
store(name, {
|
|
248
|
+
used: true,
|
|
249
|
+
});
|
|
250
|
+
},
|
|
251
|
+
|
|
252
|
+
Program: {
|
|
253
|
+
exit() {
|
|
254
|
+
for (const {path, used} of store()) {
|
|
255
|
+
if (used)
|
|
256
|
+
continue;
|
|
257
|
+
|
|
258
|
+
push(path);
|
|
259
|
+
}
|
|
260
|
+
},
|
|
261
|
+
},
|
|
262
|
+
});
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
#### ListStore
|
|
266
|
+
|
|
267
|
+
When you need to track list of elements, use `listStore`:
|
|
268
|
+
|
|
269
|
+
```
|
|
270
|
+
module.exports.traverse = ({push, listStore}) => ({
|
|
271
|
+
ImportDeclaration(path) {
|
|
272
|
+
listStore(path);
|
|
273
|
+
},
|
|
274
|
+
|
|
275
|
+
Program: {
|
|
276
|
+
exit: () => {
|
|
277
|
+
processImports(push, listStore());
|
|
278
|
+
},
|
|
279
|
+
},
|
|
280
|
+
});
|
|
281
|
+
```
|
|
282
|
+
|
|
228
283
|
### Finder
|
|
229
284
|
|
|
230
285
|
`Find plugins` gives you all the control over traversing, but it's the slowest format.
|
package/lib/merge-visitors.js
CHANGED
|
@@ -6,7 +6,11 @@ const {generate} = require('@putout/engine-parser');
|
|
|
6
6
|
const runFix = require('./run-fix');
|
|
7
7
|
const {getPosition} = require('./get-position');
|
|
8
8
|
const maybeArray = require('./maybe-array');
|
|
9
|
-
const {
|
|
9
|
+
const {
|
|
10
|
+
listStore,
|
|
11
|
+
mapStore,
|
|
12
|
+
upStore,
|
|
13
|
+
} = require('./store');
|
|
10
14
|
|
|
11
15
|
const shouldSkip = (a) => !a.parent;
|
|
12
16
|
const {merge} = traverse.visitors;
|
|
@@ -16,7 +20,7 @@ const parse = (name, plugin, options) => {
|
|
|
16
20
|
const list = [];
|
|
17
21
|
|
|
18
22
|
if (plugin[name])
|
|
19
|
-
list.push(...plugin[name]());
|
|
23
|
+
list.push(...maybeArray(plugin[name]()));
|
|
20
24
|
|
|
21
25
|
if (options[name])
|
|
22
26
|
list.push(...maybeArray(options[name]));
|
|
@@ -33,6 +37,7 @@ module.exports = (pluginsToMerge, {fix, shebang, template}) => {
|
|
|
33
37
|
push,
|
|
34
38
|
pull,
|
|
35
39
|
store,
|
|
40
|
+
upstore,
|
|
36
41
|
listStore,
|
|
37
42
|
} = getStore(plugin, {
|
|
38
43
|
fix,
|
|
@@ -48,6 +53,7 @@ module.exports = (pluginsToMerge, {fix, shebang, template}) => {
|
|
|
48
53
|
push,
|
|
49
54
|
store,
|
|
50
55
|
listStore,
|
|
56
|
+
upstore,
|
|
51
57
|
generate,
|
|
52
58
|
options,
|
|
53
59
|
});
|
|
@@ -82,6 +88,7 @@ module.exports = (pluginsToMerge, {fix, shebang, template}) => {
|
|
|
82
88
|
function getStore(plugin, {fix, rule, shebang, msg, options}) {
|
|
83
89
|
const store = mapStore();
|
|
84
90
|
const list = listStore();
|
|
91
|
+
const upstore = upStore();
|
|
85
92
|
const placesStore = listStore();
|
|
86
93
|
|
|
87
94
|
const push = (path) => {
|
|
@@ -104,6 +111,7 @@ function getStore(plugin, {fix, rule, shebang, msg, options}) {
|
|
|
104
111
|
const pull = () => {
|
|
105
112
|
store.clear();
|
|
106
113
|
list.clear();
|
|
114
|
+
upstore.clear();
|
|
107
115
|
return placesStore.clear();
|
|
108
116
|
};
|
|
109
117
|
|
|
@@ -112,6 +120,7 @@ function getStore(plugin, {fix, rule, shebang, msg, options}) {
|
|
|
112
120
|
pull,
|
|
113
121
|
store,
|
|
114
122
|
listStore: list,
|
|
123
|
+
upstore,
|
|
115
124
|
};
|
|
116
125
|
}
|
|
117
126
|
|
package/lib/store.js
CHANGED
|
@@ -5,7 +5,6 @@ const {
|
|
|
5
5
|
entries,
|
|
6
6
|
assign,
|
|
7
7
|
} = Object;
|
|
8
|
-
const isObject = (a) => typeof a === 'object';
|
|
9
8
|
|
|
10
9
|
module.exports.listStore = (list = []) => {
|
|
11
10
|
const fn = (...args) => {
|
|
@@ -27,33 +26,42 @@ module.exports.listStore = (list = []) => {
|
|
|
27
26
|
return fn;
|
|
28
27
|
};
|
|
29
28
|
|
|
30
|
-
module.exports.mapStore = (
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
29
|
+
module.exports.mapStore = createStore({
|
|
30
|
+
set(map, name, data) {
|
|
31
|
+
map[name] = data;
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
module.exports.upStore = createStore({
|
|
36
|
+
set(map, name, data) {
|
|
37
|
+
map[name] = map[name] || {};
|
|
38
|
+
assign(map[name], data);
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
function createStore({set}) {
|
|
43
|
+
return (map = {}) => {
|
|
44
|
+
const fn = (...args) => {
|
|
45
|
+
if (!args.length)
|
|
46
|
+
return values(map);
|
|
47
|
+
|
|
48
|
+
const [name, data] = args;
|
|
49
|
+
|
|
50
|
+
if (args.length === 1)
|
|
51
|
+
return map[name];
|
|
52
|
+
|
|
53
|
+
set(map, name, data);
|
|
54
|
+
};
|
|
36
55
|
|
|
37
|
-
|
|
38
|
-
|
|
56
|
+
fn.clear = () => {
|
|
57
|
+
map = {};
|
|
58
|
+
};
|
|
39
59
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
60
|
+
fn.entries = () => {
|
|
61
|
+
return entries(map);
|
|
62
|
+
};
|
|
45
63
|
|
|
46
|
-
|
|
64
|
+
return fn;
|
|
47
65
|
};
|
|
48
|
-
|
|
49
|
-
fn.clear = () => {
|
|
50
|
-
map = {};
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
fn.entries = () => {
|
|
54
|
-
return entries(map);
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
return fn;
|
|
58
|
-
};
|
|
66
|
+
}
|
|
59
67
|
|
package/lib/template/index.js
CHANGED
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@putout/engine-runner",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "12.0.0",
|
|
4
4
|
"author": "coderaiser <mnemonic.enemy@gmail.com> (https://github.com/coderaiser)",
|
|
5
5
|
"description": "run putout plugins",
|
|
6
|
-
"homepage": "https://github.com/coderaiser/putout/tree/master/packages/engine-runner",
|
|
6
|
+
"homepage": "https://github.com/coderaiser/putout/tree/master/packages/engine-runner#readme",
|
|
7
7
|
"main": "lib/index.js",
|
|
8
8
|
"release": false,
|
|
9
9
|
"tag": false,
|
|
@@ -49,6 +49,7 @@
|
|
|
49
49
|
"just-camel-case": "^4.0.2",
|
|
50
50
|
"lerna": "^4.0.0",
|
|
51
51
|
"madrun": "^8.0.1",
|
|
52
|
+
"mock-require": "^3.0.3",
|
|
52
53
|
"montag": "^1.0.0",
|
|
53
54
|
"nodemon": "^2.0.1",
|
|
54
55
|
"putout": "*",
|