@mui/x-codemod 8.0.0-alpha.11 → 8.0.0-alpha.12

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
@@ -256,6 +256,59 @@ Remove the `<ChartsOnAxisClickHandler />` and move the associated `onAxisClick`
256
256
  </ChartContainer>
257
257
  ```
258
258
 
259
+ #### `rename-unstable-use-series`
260
+
261
+ Remove `unstable_` prefix from `useSeries` and `use*Series` hooks, as they have now become stable.
262
+
263
+ ```diff
264
+ import {
265
+ - unstable_useSeries,
266
+ + useSeries,
267
+ - unstable_usePieSeries,
268
+ + usePieSeries,
269
+ - unstable_useLineSeries,
270
+ + useLineSeries,
271
+ - unstable_useBarSeries,
272
+ + useBarSeries,
273
+ - unstable_useScatterSeries,
274
+ + useScatterSeries,
275
+ } from '@mui/x-charts/hooks';
276
+ import {
277
+ - unstable_useHeatmapSeries,
278
+ + useHeatmapSeries,
279
+ } from '@mui/x-charts-pro/hooks';
280
+ ```
281
+
282
+ #### `rename-sparkline-colors-to-color`
283
+
284
+ Renames the `colors` prop of a `SparkLineChart` to `color` and accesses its first element.
285
+
286
+ ```diff
287
+ <SparkLineChart
288
+ - colors={['red']}
289
+ + color={'red'}
290
+ />
291
+ ```
292
+
293
+ If `colors` is a function, it will be wrapped in another function that returns its first element.
294
+
295
+ ```diff
296
+ <SparkLineChart
297
+ - colors={fn}
298
+ + color={typeof fn === 'function' ? mode => fn(mode)[0] : fn[0]}
299
+ />
300
+ ```
301
+
302
+ If there are cases that the codemod cannot handle, you should see a comment with a `mui-x-codemod` prefix in the code.
303
+
304
+ ```diff
305
+ <SparkLineChart
306
+ - colors={(mode) => (mode === 'light' ? ['black'] : ['white'])}
307
+ + /* mui-x-codemod: We renamed the `colors` prop to `color`, but didn't change the value. Please ensure sure this prop receives a string or a function that returns a string. */
308
+ + color={(mode) => (mode === 'light' ? ['black'] : ['white'])}
309
+ />
310
+ ```
311
+
259
312
  ### Data Grid codemods
260
313
 
261
314
  #### `preset-safe` for Data Grid v8.0.0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/x-codemod",
3
- "version": "8.0.0-alpha.11",
3
+ "version": "8.0.0-alpha.12",
4
4
  "bin": "./codemod.js",
5
5
  "private": false,
6
6
  "author": "MUI Team",
@@ -25,17 +25,17 @@
25
25
  "url": "https://opencollective.com/mui-org"
26
26
  },
27
27
  "dependencies": {
28
- "@babel/core": "^7.26.7",
29
- "@babel/runtime": "^7.26.7",
30
- "@babel/traverse": "^7.26.7",
28
+ "@babel/core": "^7.26.9",
29
+ "@babel/runtime": "^7.26.9",
30
+ "@babel/traverse": "^7.26.9",
31
31
  "jscodeshift": "17.1.2",
32
32
  "yargs": "^17.7.2",
33
- "@mui/x-internals": "8.0.0-alpha.11"
33
+ "@mui/x-internals": "8.0.0-alpha.12"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@types/jscodeshift": "^0.12.0",
37
37
  "dayjs": "^1.11.13",
38
- "moment-timezone": "^0.5.46",
38
+ "moment-timezone": "^0.5.47",
39
39
  "rimraf": "^6.0.1"
40
40
  },
41
41
  "sideEffects": false,
@@ -13,6 +13,7 @@ var _replaceLegendPositionValues = _interopRequireDefault(require("../replace-le
13
13
  var _removeExperimentalMarkRendering = _interopRequireDefault(require("../remove-experimental-mark-rendering"));
14
14
  var _renameLegendPositionType = _interopRequireDefault(require("../rename-legend-position-type"));
15
15
  var _removeOnAxisClickHandler = _interopRequireDefault(require("../remove-on-axis-click-handler"));
16
+ var _renameUnstableUseSeries = _interopRequireDefault(require("../rename-unstable-use-series"));
16
17
  function transformer(file, api, options) {
17
18
  file.source = (0, _renameLegendToSlotsLegend.default)(file, api, options);
18
19
  file.source = (0, _renameResponsiveChartContainer.default)(file, api, options);
@@ -22,5 +23,6 @@ function transformer(file, api, options) {
22
23
  file.source = (0, _removeExperimentalMarkRendering.default)(file, api, options);
23
24
  file.source = (0, _renameLegendPositionType.default)(file, api, options);
24
25
  file.source = (0, _removeOnAxisClickHandler.default)(file, api, options);
26
+ file.source = (0, _renameUnstableUseSeries.default)(file, api, options);
25
27
  return file.source;
26
28
  }
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = transformer;
7
+ /**
8
+ * @param {import('jscodeshift').FileInfo} file
9
+ * @param {import('jscodeshift').API} api
10
+ */
11
+ function transformer(file, api, options) {
12
+ const j = api.jscodeshift;
13
+ const printOptions = options.printOptions;
14
+ const root = j(file.source);
15
+ const componentNames = ['SparkLineChart'];
16
+ const props = {
17
+ colors: 'color'
18
+ };
19
+ const colorAttributes = root.find(j.JSXElement).filter(path => {
20
+ return componentNames.includes(path.value.openingElement.name.name);
21
+ }).find(j.JSXAttribute).filter(attribute => Object.keys(props).includes(attribute.node.name.name));
22
+ return colorAttributes.forEach(attribute => {
23
+ const colorsAttributeExpression = attribute.node.value?.type === 'JSXExpressionContainer' ? attribute.node.value.expression : null;
24
+ let colorAttributeExpression;
25
+ if (colorsAttributeExpression?.type === 'ArrayExpression') {
26
+ colorAttributeExpression = colorsAttributeExpression.elements[0];
27
+ } else if (colorsAttributeExpression?.type === 'Identifier') {
28
+ colorAttributeExpression = j.conditionalExpression(j.binaryExpression('===', j.unaryExpression('typeof', colorsAttributeExpression), j.literal('function')), j.arrowFunctionExpression([j.identifier('mode')], j.chainExpression(j.optionalMemberExpression(j.callExpression(colorsAttributeExpression, [j.identifier('mode')]), j.literal(0)))), colorsAttributeExpression);
29
+ } else {
30
+ // Don't know how to handle this case
31
+ }
32
+
33
+ // Only transform the value if we know how to handle it, otherwise rename the prop and add a comment
34
+ if (colorAttributeExpression) {
35
+ j(attribute).replaceWith(j.jsxAttribute(j.jsxIdentifier(props[attribute.node.name.name]), j.jsxExpressionContainer(colorAttributeExpression)));
36
+ } else {
37
+ j(attribute).replaceWith(j.jsxAttribute(j.jsxIdentifier(props[attribute.node.name.name]), attribute.node.value)).insertBefore(j.commentBlock(" mui-x-codemod: We renamed the `colors` prop to `color`, but didn't change the value. Please ensure sure this prop receives a string or a function that returns a string. "));
38
+ }
39
+ }).toSource(printOptions);
40
+ }
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = transformer;
7
+ var _renameImports = require("../../../util/renameImports");
8
+ function transformer(file, api, options) {
9
+ const j = api.jscodeshift;
10
+ const root = j(file.source);
11
+ const printOptions = options.printOptions || {
12
+ quote: 'single',
13
+ trailingComma: true,
14
+ wrapColumn: 40
15
+ };
16
+ (0, _renameImports.renameImports)({
17
+ j,
18
+ root,
19
+ packageNames: ['@mui/x-charts', '@mui/x-charts-pro'],
20
+ imports: [{
21
+ oldEndpoint: 'hooks',
22
+ importsMapping: {
23
+ unstable_useSeries: 'useSeries',
24
+ unstable_usePieSeries: 'usePieSeries',
25
+ unstable_useLineSeries: 'useLineSeries',
26
+ unstable_useBarSeries: 'useBarSeries',
27
+ unstable_useScatterSeries: 'useScatterSeries',
28
+ unstable_useHeatmapSeries: 'useHeatmapSeries'
29
+ }
30
+ }]
31
+ });
32
+ return root.toSource(printOptions);
33
+ }