@mui/x-codemod 7.0.0-alpha.5 → 7.0.0-alpha.7

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
@@ -13,7 +13,7 @@ This repository contains a collection of codemod scripts based for use with
13
13
  <!-- #default-branch-switch -->
14
14
 
15
15
  ```bash
16
- npx @mui/x-codemod <codemod> <paths...>
16
+ npx @mui/x-codemod@next <codemod> <paths...>
17
17
 
18
18
  Applies a `@mui/x-codemod` to the specified paths
19
19
 
@@ -73,6 +73,7 @@ The corresponding sub-sections are listed below
73
73
 
74
74
  - [`preset-safe-for-pickers`](#preset-safe-for-pickers-v700)
75
75
  - [`preset-safe-for-data-grid`](#preset-safe-for-data-grid-v700)
76
+ - [`preset-safe-for-tree-view`](#preset-safe-for-tree-view-v700)
76
77
 
77
78
  ### Pickers codemods
78
79
 
@@ -151,7 +152,7 @@ Replace types suffix `SlotsComponent` by `Slots` and `SlotsComponentsProps` by `
151
152
  npx @mui/x-codemod v7.0.0/pickers/rename-slots-types <path>
152
153
  ```
153
154
 
154
- ### Data grid codemods
155
+ ### Data Grid codemods
155
156
 
156
157
  #### `preset-safe` for data grid v7.0.0
157
158
 
@@ -204,6 +205,76 @@ Rename props related to `cellSelection` feature.
204
205
  npx @mui/x-codemod v7.0.0/data-grid/rename-cell-selection-props <path>
205
206
  ```
206
207
 
208
+ ### Tree View codemods
209
+
210
+ #### `preset-safe` for tree view v7.0.0
211
+
212
+ The `preset-safe` codemods for tree view.
213
+
214
+ ```bash
215
+ npx @mui/x-codemod v7.0.0/tree-view/preset-safe <path|folder>
216
+ ```
217
+
218
+ The list includes these transformers
219
+
220
+ - [`rename-tree-view-simple-tree-view`](#rename-tree-view-simple-tree-view)
221
+ - [`rename-expansion-props`](#rename-expansion-props)
222
+ - [`rename-selection-props`](#rename-selection-props)
223
+
224
+ #### `rename-tree-view-simple-tree-view`
225
+
226
+ Renames the `TreeView` component to `SimpleTreeView`
227
+
228
+ ```diff
229
+ - import { TreeView } from '@mui/x-tree-view';
230
+ + import { SimpleTreeView } from '@mui/x-tree-view';
231
+
232
+ - import { TreeView } from '@mui/x-tree-view/TreeView';
233
+ + import { SimpleTreeView } from '@mui/x-tree-view/SimpleTreeView';
234
+
235
+ return (
236
+ - <TreeView>
237
+ + <SimpleTreeView>
238
+ <TreeItem nodeId="1" label="First item" />
239
+ - </TreeView>
240
+ + </SimpleTreeView>
241
+ )
242
+ ```
243
+
244
+ #### `rename-expansion-props`
245
+
246
+ Rename the expansion props
247
+
248
+ ```diff
249
+ <TreeView
250
+ - onNodeToggle={handleExpansionChange}
251
+ + onExpandedNodesChange={handleExpansionChange}
252
+
253
+ - expanded={expandedNodes}
254
+ + expandedNodes={expandedNodes}
255
+
256
+ - defaultExpanded={defaultExpandedNodes}
257
+ + defaultExpandedNodes={defaultExpandedNodes}
258
+ />
259
+ ```
260
+
261
+ #### `rename-selection-props`
262
+
263
+ Rename the selection props
264
+
265
+ ```diff
266
+ <TreeView
267
+ - onNodeSelect={handleSelectionChange}
268
+ + onSelectedNodesChange={handleSelectionChange}
269
+
270
+ - selected={selectedNodes}
271
+ + selectedNodes={selectedNodes}
272
+
273
+ - defaultSelected={defaultSelectedNodes}
274
+ + defaultSelectedNodes={defaultSelectedNodes}
275
+ />
276
+ ```
277
+
207
278
  ## v6.0.0
208
279
 
209
280
  ### 🚀 `preset-safe` for v6.0.0
@@ -549,7 +620,7 @@ This change only affects Date and Time Pickers components.
549
620
  npx @mui/x-codemod v6.0.0/pickers/rename-components-to-slots <path>
550
621
  ```
551
622
 
552
- ### Data grid codemods
623
+ ### Data Grid codemods
553
624
 
554
625
  #### `preset-safe` for data grid v6.0.0
555
626
 
@@ -598,7 +669,7 @@ If you are using `GridRowGroupingColumnMenuItems` and `GridRowGroupableColumnMen
598
669
 
599
670
  #### `row-selection-props-rename`
600
671
 
601
- Data grid props that have been renamed.
672
+ Data Grid props that have been renamed.
602
673
 
603
674
  ```diff
604
675
  <DataGrid
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-codemod",
3
- "version": "7.0.0-alpha.5",
3
+ "version": "7.0.0-alpha.7",
4
4
  "bin": "./codemod.js",
5
5
  "private": false,
6
6
  "author": "MUI Team",
@@ -32,9 +32,9 @@
32
32
  "url": "https://opencollective.com/mui-org"
33
33
  },
34
34
  "dependencies": {
35
- "@babel/core": "^7.23.5",
36
- "@babel/runtime": "^7.23.5",
37
- "@babel/traverse": "^7.23.5",
35
+ "@babel/core": "^7.23.7",
36
+ "@babel/runtime": "^7.23.7",
37
+ "@babel/traverse": "^7.23.7",
38
38
  "jscodeshift": "0.13.1",
39
39
  "jscodeshift-add-imports": "^1.0.10",
40
40
  "yargs": "^17.7.2"
@@ -7,8 +7,10 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.default = transformer;
8
8
  var _presetSafe = _interopRequireDefault(require("../pickers/preset-safe"));
9
9
  var _presetSafe2 = _interopRequireDefault(require("../data-grid/preset-safe"));
10
+ var _presetSafe3 = _interopRequireDefault(require("../tree-view/preset-safe"));
10
11
  function transformer(file, api, options) {
11
12
  file.source = (0, _presetSafe.default)(file, api, options);
12
13
  file.source = (0, _presetSafe2.default)(file, api, options);
14
+ file.source = (0, _presetSafe3.default)(file, api, options);
13
15
  return file.source;
14
16
  }
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = transformer;
8
+ var _renameExpansionProps = _interopRequireDefault(require("../rename-expansion-props"));
9
+ var _renameSelectionProps = _interopRequireDefault(require("../rename-selection-props"));
10
+ var _renameTreeViewSimpleTreeView = _interopRequireDefault(require("../rename-tree-view-simple-tree-view"));
11
+ function transformer(file, api, options) {
12
+ file.source = (0, _renameExpansionProps.default)(file, api, options);
13
+ file.source = (0, _renameSelectionProps.default)(file, api, options);
14
+ file.source = (0, _renameTreeViewSimpleTreeView.default)(file, api, options);
15
+ return file.source;
16
+ }
@@ -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
+ exports.default = transformer;
8
+ var _renameProps = _interopRequireDefault(require("../../../util/renameProps"));
9
+ function transformer(file, api, options) {
10
+ const j = api.jscodeshift;
11
+ const root = j(file.source);
12
+ const printOptions = options.printOptions;
13
+ return (0, _renameProps.default)({
14
+ root,
15
+ componentNames: ['TreeView', 'SimpleTreeView'],
16
+ props: {
17
+ expanded: 'expandedNodes',
18
+ defaultExpanded: 'defaultExpandedNodes',
19
+ onNodeToggle: 'onExpandedNodesChange'
20
+ },
21
+ j
22
+ }).toSource(printOptions);
23
+ }
@@ -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
+ exports.default = transformer;
8
+ var _renameProps = _interopRequireDefault(require("../../../util/renameProps"));
9
+ function transformer(file, api, options) {
10
+ const j = api.jscodeshift;
11
+ const root = j(file.source);
12
+ const printOptions = options.printOptions;
13
+ return (0, _renameProps.default)({
14
+ root,
15
+ componentNames: ['TreeView', 'SimpleTreeView'],
16
+ props: {
17
+ selected: 'selectedNodes',
18
+ defaultSelected: 'defaultSelectedNodes',
19
+ onNodeSelect: 'onSelectedNodesChange'
20
+ },
21
+ j
22
+ }).toSource(printOptions);
23
+ }
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = transformer;
7
+ const VARIABLES = {
8
+ TreeView: 'SimpleTreeView',
9
+ TreeViewProps: 'SimpleTreeViewProps',
10
+ TreeViewClasses: 'SimpleTreeViewClasses',
11
+ TreeViewClassKey: 'SimpleTreeViewClassKey',
12
+ treeViewClasses: 'simpleTreeViewClasses',
13
+ getTreeViewUtilityClass: 'getSimpleTreeViewUtilityClass'
14
+ };
15
+ const PACKAGE_REGEXP = /@mui\/x-tree-view(\/(.*)|)/;
16
+ const matchImport = path => (path.node.source.value?.toString() ?? '').match(PACKAGE_REGEXP);
17
+ function transformer(file, api, options) {
18
+ const j = api.jscodeshift;
19
+ const root = j(file.source);
20
+ const printOptions = options.printOptions || {
21
+ quote: 'single',
22
+ trailingComma: true
23
+ };
24
+ const matchingImports = root.find(j.ImportDeclaration).filter(path => !!matchImport(path));
25
+
26
+ // Rename the import specifiers
27
+ // - import { TreeView } from '@mui/x-tree-view/TreeView'
28
+ // + import { SimpleTreeView } from '@mui/x-tree-view/SimpleTreeView'
29
+ matchingImports.find(j.ImportSpecifier).filter(path => VARIABLES.hasOwnProperty(path.node.imported.name)).replaceWith(path => j.importSpecifier(j.identifier(VARIABLES[path.node.imported.name])));
30
+
31
+ // Rename the nested import declarations
32
+ // - import {} from '@mui/x-tree-view/TreeView'
33
+ // + import {} from '@mui/x-tree-view/SimpleTreeView'
34
+ matchingImports.filter(path => matchImport(path)?.[2] === 'TreeView').replaceWith(path => {
35
+ const importPath = path.node.source.value?.toString() ?? '';
36
+ return j.importDeclaration(path.node.specifiers,
37
+ // copy over the existing import specifiers
38
+ j.stringLiteral(importPath.replace('TreeView', 'SimpleTreeView')) // Replace the source with our new source
39
+ );
40
+ });
41
+
42
+ // Rename the import usage
43
+ // - <TreeView />
44
+ // + <SimpleTreeView />
45
+ root.find(j.Identifier).filter(path => VARIABLES.hasOwnProperty(path.node.name)).replaceWith(path => j.identifier(VARIABLES[path.node.name]));
46
+ return root.toSource(printOptions);
47
+ }
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _path = _interopRequireDefault(require("path"));
5
+ var _chai = require("chai");
6
+ var _jscodeshift = _interopRequireDefault(require("jscodeshift"));
7
+ var _ = _interopRequireDefault(require("."));
8
+ var _readFile = _interopRequireDefault(require("../../../util/readFile"));
9
+ function read(fileName) {
10
+ return (0, _readFile.default)(_path.default.join(__dirname, fileName));
11
+ }
12
+ const TEST_FILES = ['nested-imports', 'root-imports'];
13
+ describe('v7.0.0/tree-view', () => {
14
+ describe('rename-tree-view-simple-tree-view', () => {
15
+ TEST_FILES.forEach(testFile => {
16
+ const actualPath = `./actual-${testFile}.spec.tsx`;
17
+ const expectedPath = `./expected-${testFile}.spec.tsx`;
18
+ describe(`${testFile.replace(/-/g, ' ')}`, () => {
19
+ it('transforms imports as needed', () => {
20
+ const actual = (0, _.default)({
21
+ source: read(actualPath)
22
+ }, {
23
+ jscodeshift: _jscodeshift.default.withParser('tsx')
24
+ }, {});
25
+ const expected = read(expectedPath);
26
+ (0, _chai.expect)(actual).to.equal(expected, 'The transformed version should be correct');
27
+ });
28
+ it('should be idempotent', () => {
29
+ const actual = (0, _.default)({
30
+ source: read(expectedPath)
31
+ }, {
32
+ jscodeshift: _jscodeshift.default.withParser('tsx')
33
+ }, {});
34
+ const expected = read(expectedPath);
35
+ (0, _chai.expect)(actual).to.equal(expected, 'The transformed version should be correct');
36
+ });
37
+ });
38
+ });
39
+ });
40
+ });