@mui/codemod 6.3.0 → 6.3.1
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 +48 -0
- package/node/deprecations/all/deprecations-all.js +2 -0
- package/node/deprecations/all/postcss.config.js +4 -1
- package/node/deprecations/select-classes/index.js +13 -0
- package/node/deprecations/select-classes/postcss-plugin.js +36 -0
- package/node/deprecations/select-classes/postcss.config.js +8 -0
- package/node/deprecations/select-classes/select-classes.js +77 -0
- package/node/deprecations/select-classes/test-cases/actual.js +9 -0
- package/node/deprecations/select-classes/test-cases/expected.js +9 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1406,6 +1406,54 @@ npx @mui/codemod@latest deprecations/popper-props <path>
|
|
|
1406
1406
|
npx @mui/codemod@latest deprecations/outlined-input-props <path>
|
|
1407
1407
|
```
|
|
1408
1408
|
|
|
1409
|
+
#### `select-classes`
|
|
1410
|
+
|
|
1411
|
+
JS transforms:
|
|
1412
|
+
|
|
1413
|
+
```diff
|
|
1414
|
+
import { selectClasses } from '@mui/material/Select';
|
|
1415
|
+
|
|
1416
|
+
MuiSelect: {
|
|
1417
|
+
styleOverrides: {
|
|
1418
|
+
root: {
|
|
1419
|
+
- [`& .${selectClasses.iconFilled}`]: {
|
|
1420
|
+
+ [`& .${selectClasses.filled} ~ .${selectClasses.icon}`]: {
|
|
1421
|
+
color: 'red',
|
|
1422
|
+
},
|
|
1423
|
+
- [`& .${selectClasses.iconOutlined}`]: {
|
|
1424
|
+
+ [`& .${selectClasses.outlined} ~ .${selectClasses.icon}`]: {
|
|
1425
|
+
color: 'red',
|
|
1426
|
+
},
|
|
1427
|
+
- [`& .${selectClasses.iconStandard}`]: {
|
|
1428
|
+
+ [`& .${selectClasses.standard} ~ .${selectClasses.icon}`]: {
|
|
1429
|
+
color: 'red',
|
|
1430
|
+
},
|
|
1431
|
+
},
|
|
1432
|
+
},
|
|
1433
|
+
},
|
|
1434
|
+
```
|
|
1435
|
+
|
|
1436
|
+
CSS transforms:
|
|
1437
|
+
|
|
1438
|
+
```diff
|
|
1439
|
+
- .MuiSelect-iconFilled
|
|
1440
|
+
+ .MuiSelect-filled ~ .MuiSelect-icon
|
|
1441
|
+
```
|
|
1442
|
+
|
|
1443
|
+
```diff
|
|
1444
|
+
- .MuiSelect-iconOutlined
|
|
1445
|
+
+ .MuiSelect-outlined ~ .MuiSelect-icon
|
|
1446
|
+
```
|
|
1447
|
+
|
|
1448
|
+
```diff
|
|
1449
|
+
- .MuiSelect-iconStandard
|
|
1450
|
+
+ .MuiSelect-standard ~ .MuiSelect-icon
|
|
1451
|
+
```
|
|
1452
|
+
|
|
1453
|
+
```bash
|
|
1454
|
+
npx @mui/codemod@latest deprecations/select-classes <path>
|
|
1455
|
+
```
|
|
1456
|
+
|
|
1409
1457
|
#### `slider-props`
|
|
1410
1458
|
|
|
1411
1459
|
```diff
|
|
@@ -28,6 +28,7 @@ var _outlinedInputProps = _interopRequireDefault(require("../outlined-input-prop
|
|
|
28
28
|
var _paginationItemClasses = _interopRequireDefault(require("../pagination-item-classes"));
|
|
29
29
|
var _speedDialProps = _interopRequireDefault(require("../speed-dial-props"));
|
|
30
30
|
var _tableSortLabelClasses = _interopRequireDefault(require("../table-sort-label-classes"));
|
|
31
|
+
var _selectClasses = _interopRequireDefault(require("../select-classes"));
|
|
31
32
|
var _stepConnectorClasses = _interopRequireDefault(require("../step-connector-classes"));
|
|
32
33
|
var _stepContentProps = _interopRequireDefault(require("../step-content-props"));
|
|
33
34
|
var _stepLabelProps = _interopRequireDefault(require("../step-label-props"));
|
|
@@ -68,6 +69,7 @@ function deprecationsAll(file, api, options) {
|
|
|
68
69
|
file.source = (0, _stepLabelProps.default)(file, api, options);
|
|
69
70
|
file.source = (0, _tableSortLabelClasses.default)(file, api, options);
|
|
70
71
|
file.source = (0, _textFieldProps.default)(file, api, options);
|
|
72
|
+
file.source = (0, _selectClasses.default)(file, api, options);
|
|
71
73
|
file.source = (0, _tabClasses.default)(file, api, options);
|
|
72
74
|
file.source = (0, _toggleButtonGroupClasses.default)(file, api, options);
|
|
73
75
|
file.source = (0, _tooltipProps.default)(file, api, options);
|
|
@@ -33,6 +33,9 @@ const {
|
|
|
33
33
|
const {
|
|
34
34
|
plugin: tableSortLabelClassesPlugin
|
|
35
35
|
} = require('../table-sort-label-classes/postcss-plugin');
|
|
36
|
+
const {
|
|
37
|
+
plugin: selectClassesPlugin
|
|
38
|
+
} = require('../select-classes/postcss-plugin');
|
|
36
39
|
module.exports = {
|
|
37
|
-
plugins: [accordionSummaryClassesPlugin, alertClassesPlugin, buttonClassesPlugin, buttonGroupClassesPlugin, chipClassesPlugin, circularProgressClassesPlugin, paginationItemClassesPlugin, stepConnectorClassesPlugin, toggleButtonGroupClassesPlugin, tabClassesPlugin, tableSortLabelClassesPlugin]
|
|
40
|
+
plugins: [accordionSummaryClassesPlugin, alertClassesPlugin, buttonClassesPlugin, buttonGroupClassesPlugin, chipClassesPlugin, circularProgressClassesPlugin, paginationItemClassesPlugin, stepConnectorClassesPlugin, toggleButtonGroupClassesPlugin, tabClassesPlugin, tableSortLabelClassesPlugin, selectClassesPlugin]
|
|
38
41
|
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
Object.defineProperty(exports, "default", {
|
|
8
|
+
enumerable: true,
|
|
9
|
+
get: function () {
|
|
10
|
+
return _selectClasses.default;
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
var _selectClasses = _interopRequireDefault(require("./select-classes"));
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
const classes = [{
|
|
4
|
+
deprecatedClass: ' .MuiSelect-iconFilled',
|
|
5
|
+
replacementSelector: ' .MuiSelect-filled ~ .MuiSelect-icon'
|
|
6
|
+
}, {
|
|
7
|
+
deprecatedClass: ' .MuiSelect-iconOutlined',
|
|
8
|
+
replacementSelector: ' .MuiSelect-outlined ~ .MuiSelect-icon'
|
|
9
|
+
}, {
|
|
10
|
+
deprecatedClass: ' .MuiSelect-iconStandard',
|
|
11
|
+
replacementSelector: ' .MuiSelect-standard ~ .MuiSelect-icon'
|
|
12
|
+
}];
|
|
13
|
+
const plugin = () => {
|
|
14
|
+
return {
|
|
15
|
+
postcssPlugin: `Replace deprecated Select classes with new classes`,
|
|
16
|
+
Rule(rule) {
|
|
17
|
+
const {
|
|
18
|
+
selector
|
|
19
|
+
} = rule;
|
|
20
|
+
classes.forEach(({
|
|
21
|
+
deprecatedClass,
|
|
22
|
+
replacementSelector
|
|
23
|
+
}) => {
|
|
24
|
+
const selectorRegex = new RegExp(`${deprecatedClass.trim()}$`);
|
|
25
|
+
if (selector.match(selectorRegex)) {
|
|
26
|
+
rule.selector = selector.replace(selectorRegex, replacementSelector);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
plugin.postcss = true;
|
|
33
|
+
module.exports = {
|
|
34
|
+
plugin,
|
|
35
|
+
classes
|
|
36
|
+
};
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = transformer;
|
|
7
|
+
var _postcssPlugin = require("./postcss-plugin");
|
|
8
|
+
/**
|
|
9
|
+
* @param {import('jscodeshift').FileInfo} file
|
|
10
|
+
* @param {import('jscodeshift').API} api
|
|
11
|
+
*/
|
|
12
|
+
function transformer(file, api, options) {
|
|
13
|
+
const j = api.jscodeshift;
|
|
14
|
+
const root = j(file.source);
|
|
15
|
+
const printOptions = options.printOptions;
|
|
16
|
+
_postcssPlugin.classes.forEach(({
|
|
17
|
+
deprecatedClass,
|
|
18
|
+
replacementSelector
|
|
19
|
+
}) => {
|
|
20
|
+
const replacementSelectorPrefix = '&';
|
|
21
|
+
root.find(j.ImportDeclaration).filter(path => path.node.source.value.match(/^@mui\/material\/Select$/)).forEach(path => {
|
|
22
|
+
path.node.specifiers.forEach(specifier => {
|
|
23
|
+
if (specifier.type === 'ImportSpecifier' && specifier.imported.name === 'selectClasses') {
|
|
24
|
+
const deprecatedAtomicClass = deprecatedClass.replace(`${deprecatedClass.split('-')[0]}-`, '');
|
|
25
|
+
root.find(j.MemberExpression, {
|
|
26
|
+
object: {
|
|
27
|
+
name: specifier.local.name
|
|
28
|
+
},
|
|
29
|
+
property: {
|
|
30
|
+
name: deprecatedAtomicClass
|
|
31
|
+
}
|
|
32
|
+
}).forEach(memberExpression => {
|
|
33
|
+
const parent = memberExpression.parentPath.parentPath.value;
|
|
34
|
+
if (parent.type === j.TemplateLiteral.name) {
|
|
35
|
+
const memberExpressionIndex = parent.expressions.findIndex(expression => expression === memberExpression.value);
|
|
36
|
+
const precedingTemplateElement = parent.quasis[memberExpressionIndex];
|
|
37
|
+
const atomicClasses = replacementSelector.replaceAll('MuiSelect-', '').replaceAll(replacementSelectorPrefix, '').replaceAll(' ~ ', '').split('.').map(className => className.trim()).filter(Boolean);
|
|
38
|
+
if (precedingTemplateElement.value.raw.endsWith(deprecatedClass.startsWith(' ') ? `${replacementSelectorPrefix} .` : `${replacementSelectorPrefix}.`)) {
|
|
39
|
+
const atomicClassesArgs = [memberExpressionIndex, 1, ...atomicClasses.map(atomicClass => j.memberExpression(memberExpression.value.object, j.identifier(atomicClass)))];
|
|
40
|
+
parent.expressions.splice(...atomicClassesArgs);
|
|
41
|
+
if (replacementSelector.includes(' ~ ')) {
|
|
42
|
+
const quasisArgs = [memberExpressionIndex, 1, j.templateElement({
|
|
43
|
+
raw: precedingTemplateElement.value.raw,
|
|
44
|
+
cooked: precedingTemplateElement.value.cooked.replace(' ', '')
|
|
45
|
+
}, false), j.templateElement({
|
|
46
|
+
raw: ' ~ .',
|
|
47
|
+
cooked: ' ~ .'
|
|
48
|
+
}, false)];
|
|
49
|
+
if (atomicClasses.length === 3) {
|
|
50
|
+
quasisArgs.splice(3, 0, j.templateElement({
|
|
51
|
+
raw: '.',
|
|
52
|
+
cooked: '.'
|
|
53
|
+
}, false));
|
|
54
|
+
}
|
|
55
|
+
parent.quasis.splice(...quasisArgs);
|
|
56
|
+
} else {
|
|
57
|
+
parent.quasis.splice(memberExpressionIndex, 1, j.templateElement({
|
|
58
|
+
raw: precedingTemplateElement.value.raw,
|
|
59
|
+
cooked: precedingTemplateElement.value.cooked
|
|
60
|
+
}, false), j.templateElement({
|
|
61
|
+
raw: '.',
|
|
62
|
+
cooked: '.'
|
|
63
|
+
}, false));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
const selectorRegex = new RegExp(`${replacementSelectorPrefix}${deprecatedClass}$`);
|
|
72
|
+
root.find(j.Literal, literal => typeof literal.value === 'string' && literal.value.match(selectorRegex)).forEach(path => {
|
|
73
|
+
path.replace(j.literal(path.value.value.replace(selectorRegex, `${replacementSelectorPrefix}${replacementSelector}`)));
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
return root.toSource(printOptions);
|
|
77
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Select = require("@mui/material/Select");
|
|
4
|
+
'& .MuiSelect-iconFilled';
|
|
5
|
+
'& .MuiSelect-iconOutlined';
|
|
6
|
+
'& .MuiSelect-iconStandard';
|
|
7
|
+
`& .${_Select.selectClasses.iconFilled}`;
|
|
8
|
+
`& .${_Select.selectClasses.iconOutlined}`;
|
|
9
|
+
`& .${_Select.selectClasses.iconStandard}`;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _Select = require("@mui/material/Select");
|
|
4
|
+
"& .MuiSelect-filled ~ .MuiSelect-icon";
|
|
5
|
+
"& .MuiSelect-outlined ~ .MuiSelect-icon";
|
|
6
|
+
"& .MuiSelect-standard ~ .MuiSelect-icon";
|
|
7
|
+
`& .${_Select.selectClasses.filled} ~ .${_Select.selectClasses.icon}`;
|
|
8
|
+
`& .${_Select.selectClasses.outlined} ~ .${_Select.selectClasses.icon}`;
|
|
9
|
+
`& .${_Select.selectClasses.standard} ~ .${_Select.selectClasses.icon}`;
|