@mui/codemod 6.4.3 → 6.4.6

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.
Files changed (65) hide show
  1. package/README.md +160 -0
  2. package/node/deprecations/all/deprecations-all.js +18 -0
  3. package/node/deprecations/all/postcss.config.js +7 -1
  4. package/node/deprecations/drawer-props/drawer-props.js +67 -0
  5. package/node/deprecations/drawer-props/index.js +13 -0
  6. package/node/deprecations/drawer-props/test-cases/actual.js +73 -0
  7. package/node/deprecations/drawer-props/test-cases/expected.js +97 -0
  8. package/node/deprecations/drawer-props/test-cases/theme.actual.js +58 -0
  9. package/node/deprecations/drawer-props/test-cases/theme.expected.js +74 -0
  10. package/node/deprecations/input-base-classes/index.js +13 -0
  11. package/node/deprecations/input-base-classes/input-base-classes.js +69 -0
  12. package/node/deprecations/input-base-classes/postcss-plugin.js +42 -0
  13. package/node/deprecations/input-base-classes/postcss.config.js +8 -0
  14. package/node/deprecations/input-base-classes/test-cases/actual.js +13 -0
  15. package/node/deprecations/input-base-classes/test-cases/expected.js +13 -0
  16. package/node/deprecations/menu-props/index.js +13 -0
  17. package/node/deprecations/menu-props/menu-props.js +37 -0
  18. package/node/deprecations/menu-props/test-cases/actual.js +67 -0
  19. package/node/deprecations/menu-props/test-cases/expected.js +83 -0
  20. package/node/deprecations/menu-props/test-cases/theme.actual.js +33 -0
  21. package/node/deprecations/menu-props/test-cases/theme.expected.js +39 -0
  22. package/node/deprecations/mobile-stepper-props/index.js +13 -0
  23. package/node/deprecations/mobile-stepper-props/mobile-stepper-props.js +24 -0
  24. package/node/deprecations/mobile-stepper-props/test-cases/actual.js +30 -0
  25. package/node/deprecations/mobile-stepper-props/test-cases/expected.js +34 -0
  26. package/node/deprecations/mobile-stepper-props/test-cases/theme.actual.js +11 -0
  27. package/node/deprecations/mobile-stepper-props/test-cases/theme.expected.js +13 -0
  28. package/node/deprecations/popover-props/index.js +13 -0
  29. package/node/deprecations/popover-props/popover-props.js +49 -0
  30. package/node/deprecations/popover-props/test-cases/actual.js +73 -0
  31. package/node/deprecations/popover-props/test-cases/expected.js +89 -0
  32. package/node/deprecations/popover-props/test-cases/theme.actual.js +19 -0
  33. package/node/deprecations/popover-props/test-cases/theme.expected.js +23 -0
  34. package/node/deprecations/slider-classes/index.js +13 -0
  35. package/node/deprecations/slider-classes/postcss-plugin.js +51 -0
  36. package/node/deprecations/slider-classes/postcss.config.js +8 -0
  37. package/node/deprecations/slider-classes/slider-classes.js +69 -0
  38. package/node/deprecations/slider-classes/test-cases/actual.js +19 -0
  39. package/node/deprecations/slider-classes/test-cases/expected.js +19 -0
  40. package/node/deprecations/snackbar-props/index.js +13 -0
  41. package/node/deprecations/snackbar-props/snackbar-props.js +43 -0
  42. package/node/deprecations/snackbar-props/test-cases/actual.js +54 -0
  43. package/node/deprecations/snackbar-props/test-cases/expected.js +67 -0
  44. package/node/deprecations/snackbar-props/test-cases/theme.actual.js +39 -0
  45. package/node/deprecations/snackbar-props/test-cases/theme.expected.js +46 -0
  46. package/node/deprecations/speed-dial-action-props/index.js +13 -0
  47. package/node/deprecations/speed-dial-action-props/speed-dial-action-props.js +52 -0
  48. package/node/deprecations/speed-dial-action-props/test-cases/actual.js +56 -0
  49. package/node/deprecations/speed-dial-action-props/test-cases/expected.js +104 -0
  50. package/node/deprecations/speed-dial-action-props/test-cases/theme.actual.js +62 -0
  51. package/node/deprecations/speed-dial-action-props/test-cases/theme.expected.js +88 -0
  52. package/node/deprecations/tabs-classes/index.js +13 -0
  53. package/node/deprecations/tabs-classes/postcss-plugin.js +33 -0
  54. package/node/deprecations/tabs-classes/postcss.config.js +8 -0
  55. package/node/deprecations/tabs-classes/tabs-classes.js +77 -0
  56. package/node/deprecations/tabs-classes/test-cases/actual.js +7 -0
  57. package/node/deprecations/tabs-classes/test-cases/expected.js +7 -0
  58. package/node/deprecations/tabs-props/index.js +13 -0
  59. package/node/deprecations/tabs-props/tabs-props.js +37 -0
  60. package/node/deprecations/tabs-props/test-cases/actual.js +33 -0
  61. package/node/deprecations/tabs-props/test-cases/expected.js +41 -0
  62. package/node/deprecations/tabs-props/test-cases/theme.actual.js +15 -0
  63. package/node/deprecations/tabs-props/test-cases/theme.expected.js +19 -0
  64. package/node/deprecations/utils/movePropIntoSlotProps.js +44 -19
  65. package/package.json +1 -1
@@ -9,10 +9,11 @@ var _findComponentJSX = _interopRequireDefault(require("../../util/findComponent
9
9
  var _findComponentDefaultProps = _interopRequireDefault(require("../../util/findComponentDefaultProps"));
10
10
  var _assignObject = _interopRequireDefault(require("../../util/assignObject"));
11
11
  var _appendAttribute = _interopRequireDefault(require("../../util/appendAttribute"));
12
- function moveJsxPropIntoSlotProps(j, element, propName, slotName) {
12
+ function moveJsxPropIntoSlotProps(j, element, propName, slotName, slotPropName) {
13
13
  const propIndex = element.openingElement.attributes.findIndex(attr => attr.type === 'JSXAttribute' && attr.name.name === propName);
14
14
  if (propIndex !== -1) {
15
- const removedValue = element.openingElement.attributes.splice(propIndex, 1)[0].value.expression;
15
+ const removedAttr = element.openingElement.attributes.splice(propIndex, 1)[0];
16
+ const removedValue = removedAttr.value.type === 'StringLiteral' ? j.literal(removedAttr.value.value) : removedAttr.value.expression;
16
17
  let hasSlotProps = false;
17
18
  element.openingElement.attributes.forEach(attr => {
18
19
  if (attr.name?.name === 'slotProps') {
@@ -20,31 +21,40 @@ function moveJsxPropIntoSlotProps(j, element, propName, slotName) {
20
21
  const slots = attr.value.expression;
21
22
  const slotIndex = slots.properties.findIndex(prop => prop?.key?.name === slotName);
22
23
  if (slotIndex === -1) {
24
+ // Create new slot
25
+ const slotValue = slotPropName ? j.objectExpression([j.objectProperty(j.identifier(slotPropName), removedValue)]) : removedValue;
23
26
  (0, _assignObject.default)(j, {
24
27
  target: attr,
25
28
  key: slotName,
26
- expression: removedValue
29
+ expression: slotValue
27
30
  });
28
31
  } else {
29
- const slotPropsSlotValue = slots.properties.splice(slotIndex, 1)[0].value;
30
- (0, _assignObject.default)(j, {
31
- target: attr,
32
- key: slotName,
33
- expression: j.objectExpression([j.spreadElement(removedValue), j.spreadElement(slotPropsSlotValue)])
34
- });
32
+ // Add property to existing slot
33
+ const existingSlot = slots.properties[slotIndex].value;
34
+ if (slotPropName) {
35
+ if (existingSlot.type === 'ObjectExpression') {
36
+ existingSlot.properties.push(j.objectProperty(j.identifier(slotPropName), removedValue));
37
+ } else {
38
+ slots.properties[slotIndex].value = j.objectExpression([j.objectProperty(j.identifier(slotPropName), removedValue)]);
39
+ }
40
+ } else {
41
+ slots.properties[slotIndex].value = j.objectExpression([j.spreadElement(removedValue), j.spreadElement(existingSlot)]);
42
+ }
35
43
  }
36
44
  }
37
45
  });
38
46
  if (!hasSlotProps) {
47
+ // Create new slotProps
48
+ const slotValue = slotPropName ? j.objectExpression([j.objectProperty(j.identifier(slotPropName), removedValue)]) : removedValue;
39
49
  (0, _appendAttribute.default)(j, {
40
50
  target: element,
41
51
  attributeName: 'slotProps',
42
- expression: j.objectExpression([j.objectProperty(j.identifier(slotName), removedValue)])
52
+ expression: j.objectExpression([j.objectProperty(j.identifier(slotName), slotValue)])
43
53
  });
44
54
  }
45
55
  }
46
56
  }
47
- function moveDefaultPropsPropIntoslotProps(j, defaultPropsPathCollection, propName, slotName) {
57
+ function moveDefaultPropsPropIntoslotProps(j, defaultPropsPathCollection, propName, slotName, slotPropName) {
48
58
  defaultPropsPathCollection.find(j.ObjectProperty, {
49
59
  key: {
50
60
  name: propName
@@ -58,15 +68,28 @@ function moveDefaultPropsPropIntoslotProps(j, defaultPropsPathCollection, propNa
58
68
  hasSlotProps = true;
59
69
  const slotIndex = property.value.properties.findIndex(prop => prop?.key?.name === slotName);
60
70
  if (slotIndex === -1) {
61
- property.value.properties.push(j.objectProperty(j.identifier(slotName), removedValue));
71
+ // Create new slot
72
+ const slotValue = slotPropName ? j.objectExpression([j.objectProperty(j.identifier(slotPropName), removedValue)]) : removedValue;
73
+ property.value.properties.push(j.objectProperty(j.identifier(slotName), slotValue));
62
74
  } else {
63
- const slotPropsSlotValue = property.value.properties.splice(slotIndex, 1)[0].value;
64
- property.value.properties.push(j.objectProperty(j.identifier(slotName), j.objectExpression([j.spreadElement(removedValue), j.spreadElement(slotPropsSlotValue)])));
75
+ // Add property to existing slot
76
+ const existingSlot = property.value.properties[slotIndex].value;
77
+ if (slotPropName) {
78
+ if (existingSlot.type === 'ObjectExpression') {
79
+ existingSlot.properties.push(j.objectProperty(j.identifier(slotPropName), removedValue));
80
+ } else {
81
+ property.value.properties[slotIndex].value = j.objectExpression([j.objectProperty(j.identifier(slotPropName), removedValue)]);
82
+ }
83
+ } else {
84
+ property.value.properties[slotIndex].value = j.objectExpression([j.spreadElement(removedValue), j.spreadElement(existingSlot)]);
85
+ }
65
86
  }
66
87
  }
67
88
  });
68
89
  if (!hasSlotProps) {
69
- defaultProps.properties.push(j.objectProperty(j.identifier('slotProps'), j.objectExpression([j.objectProperty(j.identifier(slotName), removedValue)])));
90
+ // Create new slotProps
91
+ const slotValue = slotPropName ? j.objectExpression([j.objectProperty(j.identifier(slotPropName), removedValue)]) : removedValue;
92
+ defaultProps.properties.push(j.objectProperty(j.identifier('slotProps'), j.objectExpression([j.objectProperty(j.identifier(slotName), slotValue)])));
70
93
  }
71
94
  path.prune();
72
95
  });
@@ -78,26 +101,28 @@ function moveDefaultPropsPropIntoslotProps(j, defaultPropsPathCollection, propNa
78
101
  * If there are duplicated values, the values will be spread.
79
102
  *
80
103
  * @param {import('jscodeshift')} j
81
- * @param {{ root: import('jscodeshift').Collection; componentName: string, propName: string, slotName: string }} options
104
+ * @param {{ root: import('jscodeshift').Collection; componentName: string, propName: string, slotName: string, slotPropName?: string }} options
82
105
  *
83
106
  * @example <Component TransitionProps={value} /> => <Component slotProps={{ transition: value }} />
107
+ * @example <Component tooltipClasses={classes} /> => <Component slotProps={{ tooltip: { classes: classes } }} />
84
108
  */
85
109
  function movePropIntoSlotProps(j, options) {
86
110
  const {
87
111
  root,
88
112
  componentName,
89
113
  propName,
90
- slotName
114
+ slotName,
115
+ slotPropName
91
116
  } = options;
92
117
  (0, _findComponentJSX.default)(j, {
93
118
  root,
94
119
  componentName
95
120
  }, elementPath => {
96
- moveJsxPropIntoSlotProps(j, elementPath.node, propName, slotName);
121
+ moveJsxPropIntoSlotProps(j, elementPath.node, propName, slotName, slotPropName);
97
122
  });
98
123
  const defaultPropsPathCollection = (0, _findComponentDefaultProps.default)(j, {
99
124
  root,
100
125
  componentName
101
126
  });
102
- moveDefaultPropsPropIntoslotProps(j, defaultPropsPathCollection, propName, slotName);
127
+ moveDefaultPropsPropIntoslotProps(j, defaultPropsPathCollection, propName, slotName, slotPropName);
103
128
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mui/codemod",
3
- "version": "6.4.3",
3
+ "version": "6.4.6",
4
4
  "bin": "./codemod.js",
5
5
  "private": false,
6
6
  "author": "MUI Team",