@putout/plugin-conditions 7.3.0 → 8.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 +2 -0
- package/lib/add-return/index.js +2 -4
- package/lib/apply-comparison-order/index.js +6 -6
- package/lib/apply-consistent-blocks/index.js +5 -6
- package/lib/apply-if/index.js +5 -6
- package/lib/avoid-in-assertions.js +2 -3
- package/lib/convert-arrow-to-condition/index.js +2 -4
- package/lib/convert-comparison-to-boolean/index.js +4 -6
- package/lib/convert-equal-to-strict-equal/index.js +3 -5
- package/lib/evaluate/index.js +3 -5
- package/lib/index.js +19 -21
- package/lib/merge-if-statements/index.js +4 -6
- package/lib/merge-if-with-else/index.js +4 -6
- package/lib/remove-boolean/index.js +2 -4
- package/lib/remove-constant/index.js +5 -7
- package/lib/remove-same-values-condition/index.js +4 -5
- package/lib/remove-useless-else/index.js +5 -5
- package/lib/remove-useless-loop-condition/index.js +4 -5
- package/lib/remove-zero/index.js +2 -4
- package/lib/reverse-condition/index.js +2 -4
- package/lib/simplify/index.js +2 -4
- package/lib/wrap-with-block/index.js +3 -5
- package/package.json +8 -8
package/README.md
CHANGED
|
@@ -379,6 +379,8 @@ if (a > b && b < c)
|
|
|
379
379
|
>
|
|
380
380
|
> (c) [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/if...else)
|
|
381
381
|
|
|
382
|
+
Checkout in [**Putout Editor**](https://putout.cloudcmd.io/#/gist/9d7df8b29406ce24a798f92bce84f40d/10b33f57ba87271283ecb4d7edaae8e8d0300169).
|
|
383
|
+
|
|
382
384
|
### ❌ Example of incorrect code
|
|
383
385
|
|
|
384
386
|
```js
|
package/lib/add-return/index.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
export const report = () => `Add return statement`;
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
module.exports.replace = () => ({
|
|
3
|
+
export const replace = () => ({
|
|
6
4
|
'if (__a) false': 'if (__a) return false',
|
|
7
5
|
'if (__a) true': 'if (__a) return true',
|
|
8
6
|
});
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
import {operator} from 'putout';
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
const {replaceWith} = operator;
|
|
4
|
+
|
|
5
|
+
export const report = ({leftPath, rightPath}) => {
|
|
4
6
|
return `Swap '${leftPath.toString()}' with '${rightPath}'`;
|
|
5
7
|
};
|
|
6
8
|
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
module.exports.fix = ({path, leftPath, rightPath, operator}) => {
|
|
9
|
+
export const fix = ({path, leftPath, rightPath, operator}) => {
|
|
10
10
|
const leftNode = leftPath.node;
|
|
11
11
|
const rightNode = rightPath.node;
|
|
12
12
|
|
|
@@ -16,7 +16,7 @@ module.exports.fix = ({path, leftPath, rightPath, operator}) => {
|
|
|
16
16
|
path.node.operator = convertOperator(operator);
|
|
17
17
|
};
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
export const traverse = ({push}) => ({
|
|
20
20
|
BinaryExpression: (path) => {
|
|
21
21
|
const {operator} = path.node;
|
|
22
22
|
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
import {types, operator} from 'putout';
|
|
2
2
|
|
|
3
|
-
const {types, operator} = require('putout');
|
|
4
3
|
const {replaceWith} = operator;
|
|
5
4
|
const {
|
|
6
5
|
isBlockStatement,
|
|
@@ -8,9 +7,9 @@ const {
|
|
|
8
7
|
blockStatement,
|
|
9
8
|
} = types;
|
|
10
9
|
|
|
11
|
-
|
|
10
|
+
export const report = () => `Use consistent blocks`;
|
|
12
11
|
|
|
13
|
-
|
|
12
|
+
export const fix = (path) => {
|
|
14
13
|
const paths = getAllNodes(path);
|
|
15
14
|
|
|
16
15
|
if (isAllBlocks(paths))
|
|
@@ -51,11 +50,11 @@ function isAllBlocks(paths) {
|
|
|
51
50
|
return false;
|
|
52
51
|
}
|
|
53
52
|
|
|
54
|
-
|
|
53
|
+
export const include = () => [
|
|
55
54
|
'IfStatement',
|
|
56
55
|
];
|
|
57
56
|
|
|
58
|
-
|
|
57
|
+
export const filter = (path) => {
|
|
59
58
|
const {consequent, alternate} = path.node;
|
|
60
59
|
|
|
61
60
|
if (!alternate && !consequent.body?.length)
|
package/lib/apply-if/index.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
import {operator} from 'putout';
|
|
2
2
|
|
|
3
|
-
const {operator} = require('putout');
|
|
4
3
|
const {remove, replaceWith} = operator;
|
|
5
4
|
|
|
6
|
-
|
|
5
|
+
export const report = () => 'Avoid empty statement in if condition';
|
|
7
6
|
|
|
8
|
-
|
|
7
|
+
export const filter = (path) => {
|
|
9
8
|
const nextPath = path.getNextSibling();
|
|
10
9
|
|
|
11
10
|
if (!nextPath.node)
|
|
@@ -14,11 +13,11 @@ module.exports.filter = (path) => {
|
|
|
14
13
|
return path.get('consequent').isEmptyStatement();
|
|
15
14
|
};
|
|
16
15
|
|
|
17
|
-
|
|
16
|
+
export const include = () => [
|
|
18
17
|
'IfStatement',
|
|
19
18
|
];
|
|
20
19
|
|
|
21
|
-
|
|
20
|
+
export const fix = (path) => {
|
|
22
21
|
const nextPath = path.getNextSibling();
|
|
23
22
|
const consequentPath = path.get('consequent');
|
|
24
23
|
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
import {types} from 'putout';
|
|
2
2
|
|
|
3
|
-
const {types} = require('putout');
|
|
4
3
|
const {
|
|
5
4
|
isBinaryExpression,
|
|
6
5
|
isJSXExpressionContainer,
|
|
7
6
|
} = types;
|
|
8
7
|
|
|
9
|
-
|
|
8
|
+
export const createAvoidInAssertions = (value) => ({
|
|
10
9
|
report: createReport(value),
|
|
11
10
|
match: createMatch(value),
|
|
12
11
|
replace: createReplace(value),
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
'
|
|
1
|
+
export const report = () => `Use 'condition' instead of 'arrow function'`;
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
module.exports.replace = () => ({
|
|
3
|
+
export const replace = () => ({
|
|
6
4
|
'if (__a => __b) __c': 'if (__a >= __b) __c',
|
|
7
5
|
});
|
|
@@ -1,18 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const {types, operator} = require('putout');
|
|
1
|
+
import {types, operator} from 'putout';
|
|
4
2
|
|
|
5
3
|
const {replaceWith, compute} = operator;
|
|
6
4
|
|
|
7
5
|
const {isIdentifier, booleanLiteral} = types;
|
|
8
6
|
|
|
9
|
-
|
|
7
|
+
export const report = () => 'Avoid constant conditions';
|
|
10
8
|
|
|
11
|
-
|
|
9
|
+
export const fix = ({path, value}) => {
|
|
12
10
|
replaceWith(path, booleanLiteral(value));
|
|
13
11
|
};
|
|
14
12
|
|
|
15
|
-
|
|
13
|
+
export const traverse = ({push}) => ({
|
|
16
14
|
BinaryExpression(path) {
|
|
17
15
|
const {
|
|
18
16
|
left,
|
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
export const report = () => `Use strict equal ('===') instead of equal ('==')`;
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
module.exports.exclude = () => [
|
|
3
|
+
export const exclude = () => [
|
|
6
4
|
'__ == null',
|
|
7
5
|
'__ != null',
|
|
8
6
|
];
|
|
9
7
|
|
|
10
|
-
|
|
8
|
+
export const replace = () => ({
|
|
11
9
|
'__a == __b': '__a === __b',
|
|
12
10
|
'__a != __b': '__a !== __b',
|
|
13
11
|
});
|
package/lib/evaluate/index.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
'
|
|
1
|
+
export const report = () => 'Avoid useless conditions';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
module.exports.match = () => ({
|
|
3
|
+
export const match = () => ({
|
|
6
4
|
'if (__a) __b': (vars, path) => {
|
|
7
5
|
const testPath = path.get('test');
|
|
8
6
|
const {confident} = testPath.evaluate();
|
|
@@ -11,7 +9,7 @@ module.exports.match = () => ({
|
|
|
11
9
|
},
|
|
12
10
|
});
|
|
13
11
|
|
|
14
|
-
|
|
12
|
+
export const replace = () => ({
|
|
15
13
|
'if (__a) __b': (vars, path) => {
|
|
16
14
|
const testPath = path.get('test');
|
|
17
15
|
const {value} = testPath.evaluate();
|
package/lib/index.js
CHANGED
|
@@ -1,25 +1,23 @@
|
|
|
1
|
-
|
|
1
|
+
import * as applyConsistentBlocks from './apply-consistent-blocks/index.js';
|
|
2
|
+
import * as applyComparisonOrder from './apply-comparison-order/index.js';
|
|
3
|
+
import * as applyIf from './apply-if/index.js';
|
|
4
|
+
import * as evaluate from './evaluate/index.js';
|
|
5
|
+
import * as convertComparisonToBoolean from './convert-comparison-to-boolean/index.js';
|
|
6
|
+
import * as convertEqualToStrictEqual from './convert-equal-to-strict-equal/index.js';
|
|
7
|
+
import * as mergeIfStatements from './merge-if-statements/index.js';
|
|
8
|
+
import * as removeBoolean from './remove-boolean/index.js';
|
|
9
|
+
import removeZero from './remove-zero/index.js';
|
|
10
|
+
import * as removeUselessElse from './remove-useless-else/index.js';
|
|
11
|
+
import * as simplify from './simplify/index.js';
|
|
12
|
+
import * as removeSameValuesCondition from './remove-same-values-condition/index.js';
|
|
13
|
+
import * as addReturn from './add-return/index.js';
|
|
14
|
+
import * as convertArrowToCondition from './convert-arrow-to-condition/index.js';
|
|
15
|
+
import * as reverseCondition from './reverse-condition/index.js';
|
|
16
|
+
import * as wrapWithBlock from './wrap-with-block/index.js';
|
|
17
|
+
import * as removeUselessLoopCondition from './remove-useless-loop-condition/index.js';
|
|
18
|
+
import * as mergeIfWithElse from './merge-if-with-else/index.js';
|
|
2
19
|
|
|
3
|
-
const
|
|
4
|
-
const applyComparisonOrder = require('./apply-comparison-order');
|
|
5
|
-
const applyIf = require('./apply-if');
|
|
6
|
-
const evaluate = require('./evaluate');
|
|
7
|
-
const convertComparisonToBoolean = require('./convert-comparison-to-boolean');
|
|
8
|
-
const convertEqualToStrictEqual = require('./convert-equal-to-strict-equal');
|
|
9
|
-
const mergeIfStatements = require('./merge-if-statements');
|
|
10
|
-
const removeBoolean = require('./remove-boolean');
|
|
11
|
-
const removeZero = require('./remove-zero');
|
|
12
|
-
const removeUselessElse = require('./remove-useless-else');
|
|
13
|
-
const simplify = require('./simplify');
|
|
14
|
-
const removeSameValuesCondition = require('./remove-same-values-condition');
|
|
15
|
-
const addReturn = require('./add-return');
|
|
16
|
-
const convertArrowToCondition = require('./convert-arrow-to-condition');
|
|
17
|
-
const reverseCondition = require('./reverse-condition');
|
|
18
|
-
const wrapWithBlock = require('./wrap-with-block');
|
|
19
|
-
const removeUselessLoopCondition = require('./remove-useless-loop-condition');
|
|
20
|
-
const mergeIfWithElse = require('./merge-if-with-else');
|
|
21
|
-
|
|
22
|
-
module.exports.rules = {
|
|
20
|
+
export const rules = {
|
|
23
21
|
'apply-comparison-order': applyComparisonOrder,
|
|
24
22
|
'apply-consistent-blocks': applyConsistentBlocks,
|
|
25
23
|
'apply-if': applyIf,
|
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const {types, operator} = require('putout');
|
|
1
|
+
import {types, operator} from 'putout';
|
|
4
2
|
|
|
5
3
|
const {replaceWith} = operator;
|
|
6
4
|
const {logicalExpression} = types;
|
|
7
5
|
|
|
8
|
-
|
|
6
|
+
export const report = () => `Merge 'if' statements`;
|
|
9
7
|
|
|
10
|
-
|
|
8
|
+
export const fix = ({path, consequentPath}) => {
|
|
11
9
|
const testPath = path.get('test');
|
|
12
10
|
const left = testPath.node;
|
|
13
11
|
const right = consequentPath.node.test;
|
|
@@ -37,7 +35,7 @@ const getConsequent = (path) => {
|
|
|
37
35
|
return null;
|
|
38
36
|
};
|
|
39
37
|
|
|
40
|
-
|
|
38
|
+
export const traverse = ({push}) => ({
|
|
41
39
|
'if (__) __': onIfStatement({
|
|
42
40
|
push,
|
|
43
41
|
}),
|
|
@@ -1,20 +1,18 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const {types, operator} = require('putout');
|
|
1
|
+
import {types, operator} from 'putout';
|
|
4
2
|
|
|
5
3
|
const {compare} = operator;
|
|
6
4
|
const {logicalExpression} = types;
|
|
7
5
|
|
|
8
|
-
|
|
6
|
+
export const report = () => `Merge 'if' with 'else' when the body is the same`;
|
|
9
7
|
|
|
10
|
-
|
|
8
|
+
export const fix = (path) => {
|
|
11
9
|
const {test: testFirst, alternate} = path.node;
|
|
12
10
|
const {test: testSecond} = alternate;
|
|
13
11
|
|
|
14
12
|
path.node.test = logicalExpression('||', testFirst, testSecond);
|
|
15
13
|
delete path.node.alternate;
|
|
16
14
|
};
|
|
17
|
-
|
|
15
|
+
export const traverse = ({push}) => ({
|
|
18
16
|
IfStatement: (path) => {
|
|
19
17
|
if (!path.node.alternate)
|
|
20
18
|
return;
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
'
|
|
1
|
+
export const report = () => 'Avoid boolean in assertions';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
module.exports.replace = () => ({
|
|
3
|
+
export const replace = () => ({
|
|
6
4
|
'return __a === true': 'return Boolean(__a)',
|
|
7
5
|
'return __a == true': 'return Boolean(__a)',
|
|
8
6
|
'const __a = __b === true': 'const __a = __b',
|
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const {runInNewContext} = require('node:vm');
|
|
4
|
-
const {types, operator} = require('putout');
|
|
1
|
+
import {runInNewContext} from 'node:vm';
|
|
2
|
+
import {types, operator} from 'putout';
|
|
5
3
|
|
|
6
4
|
const {
|
|
7
5
|
replaceWith,
|
|
@@ -11,9 +9,9 @@ const {
|
|
|
11
9
|
|
|
12
10
|
const {isIdentifier} = types;
|
|
13
11
|
|
|
14
|
-
|
|
12
|
+
export const report = () => 'Avoid constant conditions';
|
|
15
13
|
|
|
16
|
-
|
|
14
|
+
export const fix = ({path, result}) => {
|
|
17
15
|
const {alternate, consequent} = path.node;
|
|
18
16
|
|
|
19
17
|
const {body = [consequent]} = consequent;
|
|
@@ -27,7 +25,7 @@ module.exports.fix = ({path, result}) => {
|
|
|
27
25
|
replaceWith(path, alternate);
|
|
28
26
|
};
|
|
29
27
|
|
|
30
|
-
|
|
28
|
+
export const traverse = ({push, generate}) => ({
|
|
31
29
|
IfStatement(path) {
|
|
32
30
|
const testPath = path.get('test');
|
|
33
31
|
|
|
@@ -1,20 +1,19 @@
|
|
|
1
|
-
|
|
1
|
+
import {operator} from 'putout';
|
|
2
2
|
|
|
3
|
-
const {operator} = require('putout');
|
|
4
3
|
const {
|
|
5
4
|
getTemplateValues,
|
|
6
5
|
compare,
|
|
7
6
|
traverse,
|
|
8
7
|
} = operator;
|
|
9
8
|
|
|
10
|
-
|
|
9
|
+
export const report = () => `Avoid condition with the same value`;
|
|
11
10
|
|
|
12
|
-
|
|
11
|
+
export const match = () => ({
|
|
13
12
|
'if (__a === __b) __c': check('if (__a !== __b) __c'),
|
|
14
13
|
'if (__a !== __b) __c': check('if (__a === __b) __c'),
|
|
15
14
|
});
|
|
16
15
|
|
|
17
|
-
|
|
16
|
+
export const replace = () => ({
|
|
18
17
|
'if (__a === __b) __c': '__c',
|
|
19
18
|
'if (__a !== __b) __c': '__c',
|
|
20
19
|
});
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
|
|
1
|
+
import {types} from 'putout';
|
|
2
2
|
|
|
3
3
|
const {
|
|
4
4
|
isReturnStatement,
|
|
5
5
|
isBlockStatement,
|
|
6
6
|
isContinueStatement,
|
|
7
7
|
isBreakStatement,
|
|
8
|
-
} =
|
|
8
|
+
} = types;
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
export const report = () => `Avoid useless 'else'`;
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
export const match = () => ({
|
|
13
13
|
'if (__a) __b; else __c': ({__b}) => {
|
|
14
14
|
if (!isBlockStatement(__b))
|
|
15
15
|
return isReturnLike(__b);
|
|
@@ -20,7 +20,7 @@ module.exports.match = () => ({
|
|
|
20
20
|
},
|
|
21
21
|
});
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
export const replace = () => ({
|
|
24
24
|
'if (__a) __b; else __c': `{
|
|
25
25
|
if (__a) __b;
|
|
26
26
|
__c;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
import {operator} from 'putout';
|
|
2
2
|
|
|
3
|
-
const {operator} = require('putout');
|
|
4
3
|
const {
|
|
5
4
|
getTemplateValues,
|
|
6
5
|
compare,
|
|
@@ -8,9 +7,9 @@ const {
|
|
|
8
7
|
|
|
9
8
|
const LOOP = 'while (__c = __d) __body';
|
|
10
9
|
|
|
11
|
-
|
|
10
|
+
export const report = () => `Avoid useless loop condition`;
|
|
12
11
|
|
|
13
|
-
|
|
12
|
+
export const match = () => ({
|
|
14
13
|
'if (!__a) __b': ({__a}, path) => {
|
|
15
14
|
const {parentPath} = path.parentPath;
|
|
16
15
|
|
|
@@ -23,6 +22,6 @@ module.exports.match = () => ({
|
|
|
23
22
|
},
|
|
24
23
|
});
|
|
25
24
|
|
|
26
|
-
|
|
25
|
+
export const replace = () => ({
|
|
27
26
|
'if (!__a) __b': '',
|
|
28
27
|
});
|
package/lib/remove-zero/index.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
export const report = () => `Avoid useless '!'`;
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
module.exports.replace = () => ({
|
|
3
|
+
export const replace = () => ({
|
|
6
4
|
'!(__a > __b)': '__a <= __b',
|
|
7
5
|
'!(__a !== __b && __c === __d)': '__a === __b || __c !== __d',
|
|
8
6
|
'!(__a !== __b || __c !== __d)': '__a === __b && __c === __d',
|
package/lib/simplify/index.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
'
|
|
1
|
+
export const report = () => 'Avoid useless conditions';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
module.exports.replace = () => ({
|
|
3
|
+
export const replace = () => ({
|
|
6
4
|
'if (__a?.__b) {__a.__b(__args)}': '__a?.__b(__args)',
|
|
7
5
|
'if (__a?.__b) __a.__b(__args)': '__a?.__b(__args)',
|
|
8
6
|
'if (__a) __b; else __b': '__b',
|
|
@@ -1,13 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
export const report = () => `Lexical declaration cannot appear in single-statement-context`;
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
module.exports.match = () => ({
|
|
3
|
+
export const match = () => ({
|
|
6
4
|
'const __a = __b': (vars, path) => {
|
|
7
5
|
return path.parentPath.isIfStatement();
|
|
8
6
|
},
|
|
9
7
|
});
|
|
10
8
|
|
|
11
|
-
|
|
9
|
+
export const replace = () => ({
|
|
12
10
|
'const __a = __b': '{const __a = __b}',
|
|
13
11
|
});
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@putout/plugin-conditions",
|
|
3
|
-
"version": "
|
|
4
|
-
"type": "
|
|
3
|
+
"version": "8.0.0",
|
|
4
|
+
"type": "module",
|
|
5
5
|
"author": "coderaiser <mnemonic.enemy@gmail.com> (https://github.com/coderaiser)",
|
|
6
6
|
"description": "🐊Putout plugin adds support of conditions transformations",
|
|
7
7
|
"homepage": "https://github.com/coderaiser/putout/tree/master/packages/plugin-conditions#readme",
|
|
@@ -32,23 +32,23 @@
|
|
|
32
32
|
"conditions"
|
|
33
33
|
],
|
|
34
34
|
"devDependencies": {
|
|
35
|
-
"@putout/eslint-flat": "^
|
|
35
|
+
"@putout/eslint-flat": "^3.0.0",
|
|
36
36
|
"@putout/plugin-for-of": "*",
|
|
37
|
-
"@putout/test": "^
|
|
37
|
+
"@putout/test": "^13.0.0",
|
|
38
38
|
"c8": "^10.0.0",
|
|
39
39
|
"eslint": "^9.0.0",
|
|
40
40
|
"eslint-plugin-n": "^17.0.0",
|
|
41
|
-
"eslint-plugin-putout": "^
|
|
42
|
-
"madrun": "^
|
|
41
|
+
"eslint-plugin-putout": "^27.0.0",
|
|
42
|
+
"madrun": "^11.0.0",
|
|
43
43
|
"montag": "^1.2.1",
|
|
44
44
|
"nodemon": "^3.0.1"
|
|
45
45
|
},
|
|
46
46
|
"peerDependencies": {
|
|
47
|
-
"putout": ">=
|
|
47
|
+
"putout": ">=40"
|
|
48
48
|
},
|
|
49
49
|
"license": "MIT",
|
|
50
50
|
"engines": {
|
|
51
|
-
"node": ">=
|
|
51
|
+
"node": ">=20"
|
|
52
52
|
},
|
|
53
53
|
"publishConfig": {
|
|
54
54
|
"access": "public"
|