@mui/codemod 5.14.1 → 5.14.5

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 CHANGED
@@ -62,6 +62,25 @@ npx @mui/codemod <transform> <path> --jscodeshift="--printOptions='{\"quote\":\"
62
62
 
63
63
  ### v5.0.0
64
64
 
65
+ ### `base-use-named-exports`
66
+
67
+ Base UI default exports were changed to named ones. Previously we had a mix of default and named ones.
68
+ This was changed to improve consistency and avoid problems some bundlers have with default exports.
69
+ See https://github.com/mui/material-ui/issues/21862 for more context.
70
+
71
+ This codemod updates the import and re-export statements.
72
+
73
+ ```diff
74
+ - import BaseButton from '@mui/base/Button';
75
+ + import { Button as BaseButton } from '@mui/base/Button';
76
+ - export { default as BaseSlider } from '@mui/base/Slider';
77
+ + export { Slider as BaseSlider } from '@mui/base/Slider';
78
+ ```
79
+
80
+ ```bash
81
+ npx @mui/codemod v5.0.0/base-use-named-exports <path>
82
+ ```
83
+
65
84
  ### `base-remove-unstyled-suffix`
66
85
 
67
86
  The `Unstyled` suffix has been removed from all Base UI component names, including names of types and other related identifiers.
@@ -247,12 +266,20 @@ The associated breaking change was done in [#34997](https://github.com/mui/mater
247
266
 
248
267
  #### `date-pickers-moved-to-x`
249
268
 
250
- Rename the imports of date and time pickers from `@mui/lab` to `@mui/x-date-pickers` and `@mui/x-date-pickers-pro`.
269
+ Rename the imports of Date and Time Pickers from `@mui/lab` to `@mui/x-date-pickers` and `@mui/x-date-pickers-pro`.
251
270
 
252
271
  ```bash
253
272
  npx @mui/codemod v5.0.0/date-pickers-moved-to-x <path>
254
273
  ```
255
274
 
275
+ #### `tree-view-moved-to-x`
276
+
277
+ Rename the imports of Tree View from `@mui/lab` to `@mui/x-tree-view`.
278
+
279
+ ```bash
280
+ npx @mui/codemod v5.0.0/tree-view-moved-to-x <path>
281
+ ```
282
+
256
283
  #### 🚀 `preset-safe`
257
284
 
258
285
  A combination of all important transformers for migrating v4 to v5. ⚠️ This codemod should be run only once.
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = transformer;
7
+ // certain exports don't match the directory they are in:
8
+ const nameMapping = {
9
+ className: 'Unstable_ClassNameGenerator',
10
+ composeClasses: 'unstable_composeClasses',
11
+ generateUtilityClass: 'unstable_generateUtilityClass',
12
+ generateUtilityClasses: 'unstable_generateUtilityClasses',
13
+ NumberInput: 'Unstable_NumberInput'
14
+ };
15
+
16
+ // renamed directories to match the export:
17
+ const pathMapping = {
18
+ '@mui/base/className': '@mui/base/ClassNameGenerator'
19
+ };
20
+ function getExportedIdentifier(importPath) {
21
+ var _nameMapping$importPa;
22
+ return (_nameMapping$importPa = nameMapping[importPath]) != null ? _nameMapping$importPa : importPath;
23
+ }
24
+ function getTransformedPath(originalPath) {
25
+ var _pathMapping$original;
26
+ return (_pathMapping$original = pathMapping[originalPath]) != null ? _pathMapping$original : originalPath;
27
+ }
28
+
29
+ /**
30
+ * Finds the last segment of the path starting with @mui/base.
31
+ *
32
+ * @example '@mui/base/Menu' ➔ 'Menu'
33
+ * @example '@mui/base' ➔ null
34
+ */
35
+ function getBaseImportIdentifier(path, filePath) {
36
+ var _path$node, _baseImportPathMatch$, _baseImportPathMatch$2;
37
+ const source = path == null || (_path$node = path.node) == null || (_path$node = _path$node.source) == null ? void 0 : _path$node.value;
38
+ if (!source) {
39
+ return null;
40
+ }
41
+ const baseImportPathMatch = source.match(/@mui\/base\/(.+)/);
42
+ if (baseImportPathMatch == null) {
43
+ return null;
44
+ }
45
+ if ((_baseImportPathMatch$ = baseImportPathMatch[1]) != null && _baseImportPathMatch$.includes('/')) {
46
+ console.warn(`WARNING: ${filePath}: "${source}" is more than one level deep. This is not supported.`);
47
+ return null;
48
+ }
49
+ return (_baseImportPathMatch$2 = baseImportPathMatch[1]) != null ? _baseImportPathMatch$2 : null;
50
+ }
51
+
52
+ /**
53
+ * @param {import('jscodeshift').FileInfo} file
54
+ * @param {import('jscodeshift').API} api
55
+ */
56
+ function transformer(file, api, options) {
57
+ const j = api.jscodeshift;
58
+ const printOptions = options.printOptions;
59
+ const withTransformedImports = j(file.source).find(j.ImportDeclaration).forEach(path => {
60
+ const baseImportPath = getBaseImportIdentifier(path, file.path);
61
+ if (baseImportPath === null) {
62
+ return;
63
+ }
64
+ path.node.specifiers = path.node.specifiers.map(specifier => {
65
+ if (specifier.type !== 'ImportDefaultSpecifier') {
66
+ return specifier;
67
+ }
68
+
69
+ // import Y from @mui/base/X ➔ import { X as Y } from @mui/base/X
70
+ return j.importSpecifier(j.identifier(getExportedIdentifier(baseImportPath)), specifier.local);
71
+ });
72
+ path.node.source = j.stringLiteral(getTransformedPath(path.node.source.value));
73
+ }).toSource(printOptions);
74
+ return j(withTransformedImports).find(j.ExportNamedDeclaration).forEach(path => {
75
+ const baseImportPath = getBaseImportIdentifier(path);
76
+ if (baseImportPath === null) {
77
+ return;
78
+ }
79
+ path.node.specifiers = path.node.specifiers.map(specifier => {
80
+ if (specifier.local.name !== 'default') {
81
+ return specifier;
82
+ }
83
+ if (specifier.exported.name === 'default') {
84
+ // export { default } from @mui/base/X ➔ export { X as default } from @mui/base/X
85
+ return j.exportSpecifier.from({
86
+ exported: j.identifier('default'),
87
+ local: j.identifier(baseImportPath)
88
+ });
89
+ }
90
+
91
+ // export { default as Y } from @mui/base/X ➔ export { X as Y } from @mui/base/X
92
+ return j.exportSpecifier.from({
93
+ exported: j.identifier(specifier.exported.name),
94
+ local: j.identifier(getExportedIdentifier(baseImportPath))
95
+ });
96
+ });
97
+ path.node.source = j.stringLiteral(getTransformedPath(path.node.source.value));
98
+ }).toSource(printOptions);
99
+ }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ Object.defineProperty(exports, "default", {
8
+ enumerable: true,
9
+ get: function () {
10
+ return _Slider.default;
11
+ }
12
+ });
13
+ Object.defineProperty(exports, "sliderClasses", {
14
+ enumerable: true,
15
+ get: function () {
16
+ return _Slider.sliderClasses;
17
+ }
18
+ });
19
+ var _Button = _interopRequireDefault(require("@mui/base/Button"));
20
+ var _ClassNameConfigurator = _interopRequireDefault(require("@mui/base/utils/ClassNameConfigurator"));
21
+ var _Slider = _interopRequireWildcard(require("@mui/base/Slider"));
22
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
23
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ Object.defineProperty(exports, "BaseOption", {
8
+ enumerable: true,
9
+ get: function () {
10
+ return _Option.default;
11
+ }
12
+ });
13
+ Object.defineProperty(exports, "BaseTabPanel", {
14
+ enumerable: true,
15
+ get: function () {
16
+ return _TabPanel.default;
17
+ }
18
+ });
19
+ Object.defineProperty(exports, "NumberInput", {
20
+ enumerable: true,
21
+ get: function () {
22
+ return _NumberInput.default;
23
+ }
24
+ });
25
+ Object.defineProperty(exports, "Unstable_ClassNameGenerator", {
26
+ enumerable: true,
27
+ get: function () {
28
+ return _className.Unstable_ClassNameGenerator;
29
+ }
30
+ });
31
+ Object.defineProperty(exports, "default", {
32
+ enumerable: true,
33
+ get: function () {
34
+ return _Slider.default;
35
+ }
36
+ });
37
+ Object.defineProperty(exports, "sliderClasses", {
38
+ enumerable: true,
39
+ get: function () {
40
+ return _Slider.sliderClasses;
41
+ }
42
+ });
43
+ Object.defineProperty(exports, "tabPanelClasses", {
44
+ enumerable: true,
45
+ get: function () {
46
+ return _TabPanel.tabPanelClasses;
47
+ }
48
+ });
49
+ var _Button = _interopRequireDefault(require("@mui/base/Button"));
50
+ var _Badge = _interopRequireWildcard(require("@mui/base/Badge"));
51
+ var _Switch = _interopRequireDefault(require("@mui/base/Switch"));
52
+ var _Select = _interopRequireWildcard(require("@mui/base/Select"));
53
+ var _base = require("@mui/base");
54
+ var _composeClasses = _interopRequireDefault(require("@mui/base/composeClasses"));
55
+ var _NumberInput = _interopRequireDefault(require("@mui/base/NumberInput"));
56
+ var _className = require("@mui/base/className");
57
+ var _Slider = _interopRequireWildcard(require("@mui/base/Slider"));
58
+ var _Option = _interopRequireDefault(require("@mui/base/Option"));
59
+ var _TabPanel = _interopRequireWildcard(require("@mui/base/TabPanel"));
60
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
61
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ Object.defineProperty(exports, "default", {
8
+ enumerable: true,
9
+ get: function () {
10
+ return _Slider.Slider;
11
+ }
12
+ });
13
+ Object.defineProperty(exports, "sliderClasses", {
14
+ enumerable: true,
15
+ get: function () {
16
+ return _Slider.sliderClasses;
17
+ }
18
+ });
19
+ var _Button = require("@mui/base/Button");
20
+ var _ClassNameConfigurator = _interopRequireDefault(require("@mui/base/utils/ClassNameConfigurator"));
21
+ var _Slider = require("@mui/base/Slider");
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "BaseOption", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _Option.Option;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "BaseTabPanel", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _TabPanel.TabPanel;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "NumberInput", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _NumberInput.Unstable_NumberInput;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "Unstable_ClassNameGenerator", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _ClassNameGenerator.Unstable_ClassNameGenerator;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "default", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _Slider.Slider;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "sliderClasses", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _Slider.sliderClasses;
40
+ }
41
+ });
42
+ Object.defineProperty(exports, "tabPanelClasses", {
43
+ enumerable: true,
44
+ get: function () {
45
+ return _TabPanel.tabPanelClasses;
46
+ }
47
+ });
48
+ var _Button = require("@mui/base/Button");
49
+ var _Badge = require("@mui/base/Badge");
50
+ var _Switch = require("@mui/base/Switch");
51
+ var _Select = require("@mui/base/Select");
52
+ var _base = require("@mui/base");
53
+ var _composeClasses = require("@mui/base/composeClasses");
54
+ var _NumberInput = require("@mui/base/NumberInput");
55
+ var _ClassNameGenerator = require("@mui/base/ClassNameGenerator");
56
+ var _Slider = require("@mui/base/Slider");
57
+ var _Option = require("@mui/base/Option");
58
+ var _TabPanel = require("@mui/base/TabPanel");
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = transformer;
7
+ const _exports = {
8
+ TreeView: {
9
+ default: 'TreeView',
10
+ named: ['treeViewClasses', 'TreeViewClasses', 'TreeViewClassKey', 'getTreeViewUtilityClass', 'TreeViewPropsBase', 'TreeViewProps', 'SingleSelectTreeViewProps', 'MultiSelectTreeViewProps']
11
+ },
12
+ TreeItem: {
13
+ default: 'TreeItem',
14
+ named: ['useTreeItem', 'treeItemClasses', 'TreeItemClasses', 'TreeItemClassKey', 'getTreeItemUtilityClass', 'TreeItemProps', 'TreeItemContentProps']
15
+ }
16
+ };
17
+ const buildLookup = () => {
18
+ return Object.fromEntries(Object.entries(_exports).flatMap(([entryPoint, entryPointData]) => [entryPointData.default, ...entryPointData.named].map(exportName => [exportName, {
19
+ entryPoint
20
+ }])));
21
+ };
22
+
23
+ /**
24
+ * @param {import('jscodeshift').FileInfo} file
25
+ * @param {import('jscodeshift').API} api
26
+ */
27
+ function transformer(fileInfo, api, options) {
28
+ const j = api.jscodeshift;
29
+ const printOptions = options.printOptions || {
30
+ quote: 'single'
31
+ };
32
+ const lookup = buildLookup();
33
+ const root = j(fileInfo.source);
34
+ root.find(j.ImportDeclaration).forEach(path => {
35
+ const importSource = path.node.source.value;
36
+ const subPackageImportMatch = importSource.match(/@mui\/lab\/(.*)/);
37
+ if (subPackageImportMatch !== null) {
38
+ const subModule = subPackageImportMatch[1];
39
+ if (subModule.startsWith('internal')) {
40
+ console.warn('Imports from `@mui/lab/internal` are not supported');
41
+ return;
42
+ }
43
+ if (_exports[subModule]) {
44
+ /**
45
+ * @type {import('jscodeshift').ASTPath}
46
+ */
47
+ const sourcePath = path.get('source');
48
+ const targetPackage = '@mui/x-tree-view';
49
+ const targetImportPath = `${targetPackage}/${subModule}`;
50
+ sourcePath.replace(j.stringLiteral(targetImportPath));
51
+ const importDeclaration = path.value;
52
+ importDeclaration.specifiers = importDeclaration.specifiers.map(specifier => {
53
+ if (specifier.type === 'ImportDefaultSpecifier') {
54
+ const localName = specifier.local.name;
55
+ return j.importSpecifier(j.identifier(subModule), j.identifier(localName));
56
+ }
57
+ return specifier;
58
+ });
59
+ }
60
+ } else if (importSource === '@mui/lab') {
61
+ // Sieve import specifiers into /core and /lab
62
+ const xImportSpecifiers = [];
63
+ const labImportSpecifiers = [];
64
+ path.node.specifiers.forEach(specifier => {
65
+ if (specifier.type === 'ImportSpecifier') {
66
+ const lookupValue = lookup[specifier.imported.name];
67
+ if (lookupValue) {
68
+ xImportSpecifiers.push(specifier);
69
+ } else {
70
+ labImportSpecifiers.push(specifier);
71
+ }
72
+ } else {
73
+ // `import Lab from '@material-ui/lab'`
74
+ // `import * as Lab from '@material-ui/lab'`
75
+ // These imports would require scope analysis.
76
+ console.warn(`Can't handle ${specifier.type}`);
77
+ }
78
+ });
79
+ if (xImportSpecifiers.length > 0) {
80
+ const targetPackage = '@mui/x-tree-view';
81
+ path.replace(j.importDeclaration(xImportSpecifiers, j.stringLiteral(targetPackage)), j.importDeclaration(labImportSpecifiers, j.stringLiteral('@mui/lab')));
82
+ }
83
+ }
84
+ }).toSource(printOptions);
85
+ return root.toSource(printOptions);
86
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+
3
+ var _lab = require("@mui/lab");
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _TreeView = _interopRequireWildcard(require("@mui/lab/TreeView"));
5
+ var _TreeItem = _interopRequireWildcard(require("@mui/lab/TreeItem"));
6
+ var _Timeline = _interopRequireDefault(require("@mui/lab/Timeline"));
7
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
8
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+
3
+ var _xTreeView = require("@mui/x-tree-view");
4
+ var _lab = require("@mui/lab");
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _TreeView = require("@mui/x-tree-view/TreeView");
5
+ var _TreeItem = require("@mui/x-tree-view/TreeItem");
6
+ var _Timeline = _interopRequireDefault(require("@mui/lab/Timeline"));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/codemod",
3
- "version": "5.14.1",
3
+ "version": "5.14.5",
4
4
  "bin": "./codemod.js",
5
5
  "private": false,
6
6
  "author": "MUI Team",