@mui/codemod 6.0.0-dev.240424162023-9968b4889d → 6.0.0

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 (278) hide show
  1. package/README.md +1037 -294
  2. package/codemod.js +0 -2
  3. package/node/deprecations/accordion-props/test-cases/actual.js +6 -3
  4. package/node/deprecations/accordion-props/test-cases/expected.js +14 -10
  5. package/node/deprecations/accordion-props/test-cases/theme.expected.js +8 -7
  6. package/node/deprecations/alert-props/test-cases/expected.js +12 -4
  7. package/node/deprecations/alert-props/test-cases/theme.expected.js +12 -5
  8. package/node/deprecations/all/deprecations-all.js +38 -14
  9. package/node/deprecations/all/postcss.config.js +10 -1
  10. package/node/deprecations/autocomplete-props/autocomplete-props.js +22 -0
  11. package/node/deprecations/autocomplete-props/index.js +13 -0
  12. package/node/deprecations/autocomplete-props/test-cases/actual.js +75 -0
  13. package/node/deprecations/autocomplete-props/test-cases/expected.js +75 -0
  14. package/node/deprecations/autocomplete-props/test-cases/theme.actual.js +47 -0
  15. package/node/deprecations/autocomplete-props/test-cases/theme.expected.js +47 -0
  16. package/node/deprecations/avatar-group-props/avatar-group-props.js +81 -0
  17. package/node/deprecations/avatar-group-props/index.js +13 -0
  18. package/node/deprecations/avatar-group-props/test-cases/actual.js +56 -0
  19. package/node/deprecations/avatar-group-props/test-cases/expected.js +58 -0
  20. package/node/deprecations/avatar-group-props/test-cases/theme.actual.js +48 -0
  21. package/node/deprecations/avatar-group-props/test-cases/theme.expected.js +50 -0
  22. package/node/deprecations/avatar-props/test-cases/expected.js +8 -6
  23. package/node/deprecations/avatar-props/test-cases/theme.expected.js +8 -7
  24. package/node/deprecations/backdrop-props/backdrop-props.js +3 -5
  25. package/node/deprecations/backdrop-props/test-cases/actual.js +30 -13
  26. package/node/deprecations/backdrop-props/test-cases/expected.js +23 -13
  27. package/node/deprecations/backdrop-props/test-cases/theme.actual.js +32 -6
  28. package/node/deprecations/backdrop-props/test-cases/theme.expected.js +27 -5
  29. package/node/deprecations/badge-props/test-cases/expected.js +12 -5
  30. package/node/deprecations/badge-props/test-cases/theme.expected.js +12 -5
  31. package/node/deprecations/circular-progress-classes/circular-progress-classes.js +77 -0
  32. package/node/deprecations/circular-progress-classes/index.js +13 -0
  33. package/node/deprecations/circular-progress-classes/postcss-plugin.js +33 -0
  34. package/node/deprecations/circular-progress-classes/postcss.config.js +8 -0
  35. package/node/deprecations/circular-progress-classes/test-cases/actual.js +7 -0
  36. package/node/deprecations/circular-progress-classes/test-cases/expected.js +7 -0
  37. package/node/deprecations/divider-props/divider-props.js +28 -15
  38. package/node/deprecations/divider-props/test-cases/actual.js +3 -0
  39. package/node/deprecations/divider-props/test-cases/expected.js +5 -8
  40. package/node/deprecations/divider-props/test-cases/theme.actual.js +28 -0
  41. package/node/deprecations/divider-props/test-cases/theme.expected.js +25 -0
  42. package/node/deprecations/filled-input-props/filled-input-props.js +22 -0
  43. package/node/deprecations/filled-input-props/index.js +13 -0
  44. package/node/deprecations/filled-input-props/test-cases/actual.js +60 -0
  45. package/node/deprecations/filled-input-props/test-cases/expected.js +52 -0
  46. package/node/deprecations/filled-input-props/test-cases/theme.actual.js +73 -0
  47. package/node/deprecations/filled-input-props/test-cases/theme.expected.js +65 -0
  48. package/node/deprecations/form-control-label-props/form-control-label-props.js +22 -0
  49. package/node/deprecations/form-control-label-props/index.js +13 -0
  50. package/node/deprecations/form-control-label-props/test-cases/actual.js +21 -0
  51. package/node/deprecations/form-control-label-props/test-cases/expected.js +21 -0
  52. package/node/deprecations/form-control-label-props/test-cases/theme.actual.js +23 -0
  53. package/node/deprecations/form-control-label-props/test-cases/theme.expected.js +23 -0
  54. package/node/deprecations/grid-props/grid-props.js +51 -0
  55. package/node/deprecations/grid-props/index.js +13 -0
  56. package/node/deprecations/grid-props/test-cases/actual.js +25 -0
  57. package/node/deprecations/grid-props/test-cases/expected.js +23 -0
  58. package/node/deprecations/grid-props/test-cases/theme.actual.js +24 -0
  59. package/node/deprecations/grid-props/test-cases/theme.expected.js +23 -0
  60. package/node/deprecations/image-list-item-bar-classes/image-list-item-bar-classes.js +77 -0
  61. package/node/deprecations/image-list-item-bar-classes/index.js +13 -0
  62. package/node/deprecations/image-list-item-bar-classes/postcss-plugin.js +39 -0
  63. package/node/deprecations/image-list-item-bar-classes/postcss.config.js +8 -0
  64. package/node/deprecations/image-list-item-bar-classes/test-cases/actual.js +11 -0
  65. package/node/deprecations/image-list-item-bar-classes/test-cases/expected.js +11 -0
  66. package/node/deprecations/input-base-props/index.js +13 -0
  67. package/node/deprecations/input-base-props/input-base-props.js +22 -0
  68. package/node/deprecations/input-base-props/test-cases/actual.js +60 -0
  69. package/node/deprecations/input-base-props/test-cases/expected.js +52 -0
  70. package/node/deprecations/input-base-props/test-cases/theme.actual.js +73 -0
  71. package/node/deprecations/input-base-props/test-cases/theme.expected.js +65 -0
  72. package/node/deprecations/input-props/index.js +13 -0
  73. package/node/deprecations/input-props/input-props.js +22 -0
  74. package/node/deprecations/input-props/test-cases/actual.js +60 -0
  75. package/node/deprecations/input-props/test-cases/expected.js +52 -0
  76. package/node/deprecations/input-props/test-cases/theme.actual.js +73 -0
  77. package/node/deprecations/input-props/test-cases/theme.expected.js +65 -0
  78. package/node/deprecations/list-item-props/index.js +13 -0
  79. package/node/deprecations/list-item-props/list-item-props.js +22 -0
  80. package/node/deprecations/list-item-props/test-cases/actual.js +43 -0
  81. package/node/deprecations/list-item-props/test-cases/expected.js +40 -0
  82. package/node/deprecations/list-item-props/test-cases/theme.actual.js +56 -0
  83. package/node/deprecations/list-item-props/test-cases/theme.expected.js +53 -0
  84. package/node/deprecations/modal-props/index.js +13 -0
  85. package/node/deprecations/modal-props/modal-props.js +22 -0
  86. package/node/deprecations/modal-props/test-cases/actual.js +43 -0
  87. package/node/deprecations/modal-props/test-cases/expected.js +40 -0
  88. package/node/deprecations/modal-props/test-cases/theme.actual.js +56 -0
  89. package/node/deprecations/modal-props/test-cases/theme.expected.js +53 -0
  90. package/node/deprecations/outlined-input-props/index.js +13 -0
  91. package/node/deprecations/outlined-input-props/outlined-input-props.js +22 -0
  92. package/node/deprecations/outlined-input-props/test-cases/actual.js +60 -0
  93. package/node/deprecations/outlined-input-props/test-cases/expected.js +52 -0
  94. package/node/deprecations/outlined-input-props/test-cases/theme.actual.js +73 -0
  95. package/node/deprecations/outlined-input-props/test-cases/theme.expected.js +65 -0
  96. package/node/deprecations/pagination-item-props/index.js +13 -0
  97. package/node/deprecations/pagination-item-props/pagination-item-props.js +22 -0
  98. package/node/deprecations/pagination-item-props/test-cases/actual.js +27 -0
  99. package/node/deprecations/pagination-item-props/test-cases/expected.js +21 -0
  100. package/node/deprecations/pagination-item-props/test-cases/theme.actual.js +28 -0
  101. package/node/deprecations/pagination-item-props/test-cases/theme.expected.js +26 -0
  102. package/node/deprecations/popper-props/index.js +13 -0
  103. package/node/deprecations/popper-props/popper-props.js +22 -0
  104. package/node/deprecations/popper-props/test-cases/actual.js +27 -0
  105. package/node/deprecations/popper-props/test-cases/expected.js +24 -0
  106. package/node/deprecations/popper-props/test-cases/theme.actual.js +32 -0
  107. package/node/deprecations/popper-props/test-cases/theme.expected.js +29 -0
  108. package/node/deprecations/slider-props/test-cases/expected.js +12 -4
  109. package/node/deprecations/slider-props/test-cases/theme.expected.js +12 -5
  110. package/node/deprecations/speed-dial-props/index.js +13 -0
  111. package/node/deprecations/speed-dial-props/speed-dial-props.js +31 -0
  112. package/node/deprecations/speed-dial-props/test-cases/actual.js +41 -0
  113. package/node/deprecations/speed-dial-props/test-cases/expected.js +54 -0
  114. package/node/deprecations/speed-dial-props/test-cases/theme.actual.js +33 -0
  115. package/node/deprecations/speed-dial-props/test-cases/theme.expected.js +40 -0
  116. package/node/deprecations/step-label-props/step-label-props.js +0 -14
  117. package/node/deprecations/step-label-props/test-cases/actual.js +0 -23
  118. package/node/deprecations/step-label-props/test-cases/expected.js +4 -26
  119. package/node/deprecations/step-label-props/test-cases/theme.actual.js +0 -22
  120. package/node/deprecations/step-label-props/test-cases/theme.expected.js +4 -28
  121. package/node/deprecations/tab-classes/index.js +13 -0
  122. package/node/deprecations/tab-classes/postcss-plugin.js +30 -0
  123. package/node/deprecations/tab-classes/postcss.config.js +8 -0
  124. package/node/deprecations/tab-classes/tab-classes.js +53 -0
  125. package/node/deprecations/tab-classes/test-cases/actual.js +5 -0
  126. package/node/deprecations/tab-classes/test-cases/expected.js +5 -0
  127. package/node/deprecations/table-sort-label-classes/index.js +13 -0
  128. package/node/deprecations/table-sort-label-classes/postcss-plugin.js +33 -0
  129. package/node/deprecations/table-sort-label-classes/postcss.config.js +8 -0
  130. package/node/deprecations/table-sort-label-classes/table-sort-label-classes.js +77 -0
  131. package/node/deprecations/table-sort-label-classes/test-cases/actual.js +7 -0
  132. package/node/deprecations/table-sort-label-classes/test-cases/expected.js +7 -0
  133. package/node/deprecations/text-field-props/index.js +13 -0
  134. package/node/deprecations/text-field-props/test-cases/actual.js +27 -0
  135. package/node/deprecations/text-field-props/test-cases/expected.js +31 -0
  136. package/node/deprecations/text-field-props/test-cases/theme.actual.js +13 -0
  137. package/node/deprecations/text-field-props/test-cases/theme.expected.js +15 -0
  138. package/node/deprecations/text-field-props/text-field-props.js +48 -0
  139. package/node/deprecations/tooltip-props/index.js +13 -0
  140. package/node/deprecations/tooltip-props/test-cases/actual.js +92 -0
  141. package/node/deprecations/tooltip-props/test-cases/expected.js +84 -0
  142. package/node/deprecations/tooltip-props/test-cases/theme.actual.js +73 -0
  143. package/node/deprecations/tooltip-props/test-cases/theme.expected.js +65 -0
  144. package/node/deprecations/tooltip-props/tooltip-props.js +22 -0
  145. package/node/deprecations/typography-props/index.js +13 -0
  146. package/node/deprecations/typography-props/test-cases/actual.js +80 -0
  147. package/node/deprecations/typography-props/test-cases/expected.js +86 -0
  148. package/node/deprecations/typography-props/test-cases/theme.actual.js +85 -0
  149. package/node/deprecations/typography-props/test-cases/theme.expected.js +86 -0
  150. package/node/deprecations/typography-props/typography-props.js +81 -0
  151. package/node/deprecations/utils/movePropIntoSlotProps.js +4 -12
  152. package/node/deprecations/utils/movePropIntoSlots.js +4 -12
  153. package/node/deprecations/utils/replaceComponentsWithSlots.js +32 -25
  154. package/node/util/getReturnExpression.js +19 -0
  155. package/node/util/migrateToVariants.js +586 -0
  156. package/node/util/propsToObject.js +2 -6
  157. package/node/util/renameClassKey.js +1 -2
  158. package/node/v0.15.0/import-path.js +2 -2
  159. package/node/v5.0.0/avatar-circle-circular.js +2 -4
  160. package/node/v5.0.0/badge-overlap-value.js +4 -7
  161. package/node/v5.0.0/badge-overlap-value.test/actual.js +3 -4
  162. package/node/v5.0.0/badge-overlap-value.test/expected.js +3 -4
  163. package/node/v5.0.0/base-hook-imports.js +1 -2
  164. package/node/v5.0.0/base-remove-component-prop.test/actual.js +4 -4
  165. package/node/v5.0.0/base-remove-component-prop.test/expected.js +4 -4
  166. package/node/v5.0.0/base-remove-unstyled-suffix.js +1 -2
  167. package/node/v5.0.0/base-remove-unstyled-suffix.test/actual.js +5 -5
  168. package/node/v5.0.0/base-remove-unstyled-suffix.test/expected.js +4 -4
  169. package/node/v5.0.0/base-rename-components-to-slots.js +1 -1
  170. package/node/v5.0.0/base-use-named-exports.js +5 -8
  171. package/node/v5.0.0/box-sx-prop.js +1 -2
  172. package/node/v5.0.0/box-sx-prop.test/actual.js +4 -4
  173. package/node/v5.0.0/box-sx-prop.test/expected.js +3 -3
  174. package/node/v5.0.0/button-color-prop.js +1 -2
  175. package/node/v5.0.0/chip-variant-prop.js +1 -2
  176. package/node/v5.0.0/circularprogress-variant.js +2 -4
  177. package/node/v5.0.0/create-theme.test/custom-fn.actual.js +3 -4
  178. package/node/v5.0.0/create-theme.test/custom-fn.expected.js +3 -4
  179. package/node/v5.0.0/fab-variant.js +2 -4
  180. package/node/v5.0.0/grid-list-component.test/actual.js +1 -1
  181. package/node/v5.0.0/grid-list-component.test/expected.js +1 -1
  182. package/node/v5.0.0/joy-avatar-remove-imgProps.js +3 -7
  183. package/node/v5.0.0/joy-rename-components-to-slots.js +1 -1
  184. package/node/v5.0.0/joy-rename-row-prop.js +1 -2
  185. package/node/v5.0.0/joy-text-field-to-input.js +4 -7
  186. package/node/v5.0.0/jss-to-styled.test/first.actual.js +11 -14
  187. package/node/v5.0.0/jss-to-styled.test/first.expected.js +11 -14
  188. package/node/v5.0.0/jss-to-styled.test/seventh.actual.js +4 -4
  189. package/node/v5.0.0/jss-to-styled.test/seventh.expected.js +4 -4
  190. package/node/v5.0.0/jss-to-styled.test/sixth.actual.js +3 -3
  191. package/node/v5.0.0/jss-to-styled.test/sixth.expected.js +3 -3
  192. package/node/v5.0.0/jss-to-styled.test/withCreateStyles.actual.js +3 -3
  193. package/node/v5.0.0/jss-to-styled.test/withCreateStyles.expected.js +3 -4
  194. package/node/v5.0.0/jss-to-styled.test/withCreateStyles1.actual.js +3 -3
  195. package/node/v5.0.0/jss-to-styled.test/withCreateStyles1.expected.js +3 -4
  196. package/node/v5.0.0/jss-to-styled.test/withCreateStyles2.actual.js +3 -3
  197. package/node/v5.0.0/jss-to-styled.test/withCreateStyles2.expected.js +3 -4
  198. package/node/v5.0.0/jss-to-styled.test/withCreateStyles3.actual.js +3 -3
  199. package/node/v5.0.0/jss-to-styled.test/withCreateStyles3.expected.js +3 -4
  200. package/node/v5.0.0/jss-to-tss-react.js +4 -6
  201. package/node/v5.0.0/jss-to-tss-react.test/actual-mixins-pattern.js +6 -5
  202. package/node/v5.0.0/jss-to-tss-react.test/actual-withStyles.js +4 -4
  203. package/node/v5.0.0/jss-to-tss-react.test/expected-mixins-pattern.js +6 -5
  204. package/node/v5.0.0/jss-to-tss-react.test/expected-withStyles.js +4 -4
  205. package/node/v5.0.0/link-underline-hover.js +1 -4
  206. package/node/v5.0.0/pagination-round-circular.js +3 -8
  207. package/node/v5.0.0/preset-safe.test/actual.js +6 -4
  208. package/node/v5.0.0/preset-safe.test/expected.js +9 -6
  209. package/node/v5.0.0/root-ref.test/expected.js +4 -4
  210. package/node/v5.0.0/skeleton-variant.js +3 -5
  211. package/node/v5.0.0/table-props.js +4 -9
  212. package/node/v5.0.0/table-props.test/actual.js +4 -5
  213. package/node/v5.0.0/table-props.test/expected.js +4 -5
  214. package/node/v5.0.0/tabs-scroll-buttons.js +4 -5
  215. package/node/v5.0.0/theme-spacing.test/large-actual.js +11 -11
  216. package/node/v5.0.0/theme-spacing.test/large-expected.js +11 -11
  217. package/node/v5.0.0/variant-prop.test/actual.js +12 -6
  218. package/node/v5.0.0/variant-prop.test/expected.js +15 -12
  219. package/node/v5.0.0/with-mobile-dialog.test/expected.js +6 -5
  220. package/node/v5.0.0/with-width.test/expected.js +6 -5
  221. package/node/v6.0.0/all/v6-all.js +4 -5
  222. package/node/v6.0.0/grid-v2-props/grid-v2-props.js +142 -0
  223. package/node/v6.0.0/grid-v2-props/index.js +13 -0
  224. package/node/v6.0.0/grid-v2-props/test-cases/actual.js +89 -0
  225. package/node/v6.0.0/grid-v2-props/test-cases/custom-breakpoints.actual.js +18 -0
  226. package/node/v6.0.0/grid-v2-props/test-cases/custom-breakpoints.expected.js +22 -0
  227. package/node/v6.0.0/grid-v2-props/test-cases/expected.js +101 -0
  228. package/node/v6.0.0/list-item-button-prop/index.js +13 -0
  229. package/node/v6.0.0/list-item-button-prop/list-item-button-prop.js +93 -0
  230. package/node/v6.0.0/list-item-button-prop/test-cases/actual.js +31 -0
  231. package/node/v6.0.0/list-item-button-prop/test-cases/expected.js +20 -0
  232. package/node/v6.0.0/list-item-button-prop/test-cases/theme.actual.js +20 -0
  233. package/node/v6.0.0/list-item-button-prop/test-cases/theme.expected.js +24 -0
  234. package/node/v6.0.0/styled/styled-v6.js +2 -415
  235. package/node/v6.0.0/styled/test-cases/BasicStyled.actual.js +55 -44
  236. package/node/v6.0.0/styled/test-cases/BasicStyled.expected.js +5 -6
  237. package/node/v6.0.0/styled/test-cases/ConditionalStyled.actual.js +98 -61
  238. package/node/v6.0.0/styled/test-cases/ConditionalStyled.expected.js +54 -29
  239. package/node/v6.0.0/styled/test-cases/DynamicPropsStyled.actual.js +39 -0
  240. package/node/v6.0.0/styled/test-cases/DynamicPropsStyled.expected.js +65 -0
  241. package/node/v6.0.0/styled/test-cases/LogicalStyled.actual.js +31 -1
  242. package/node/v6.0.0/styled/test-cases/LogicalStyled.expected.js +39 -1
  243. package/node/v6.0.0/styled/test-cases/NestedSpread.actual.js +33 -28
  244. package/node/v6.0.0/styled/test-cases/NestedSpread.expected.js +20 -22
  245. package/node/v6.0.0/styled/test-cases/ThemePaletteMode.expected.js +28 -26
  246. package/node/v6.0.0/styled/test-cases/VariantAndModeStyled.actual.js +6 -5
  247. package/node/v6.0.0/styled/test-cases/VariantAndModeStyled.expected.js +8 -8
  248. package/node/v6.0.0/sx-prop/index.js +13 -0
  249. package/node/v6.0.0/sx-prop/sx-v6.js +411 -0
  250. package/node/v6.0.0/sx-prop/test-cases/basic-sx.actual.js +36 -0
  251. package/node/v6.0.0/sx-prop/test-cases/basic-sx.expected.js +46 -0
  252. package/node/v6.0.0/sx-prop/test-cases/sx-applyStyles.actual.js +89 -0
  253. package/node/v6.0.0/sx-prop/test-cases/sx-applyStyles.expected.js +82 -0
  254. package/node/v6.0.0/sx-prop/test-cases/sx-condition.actual.js +92 -0
  255. package/node/v6.0.0/sx-prop/test-cases/sx-condition.expected.js +89 -0
  256. package/node/v6.0.0/sx-prop/test-cases/sx-css-vars.actual.js +55 -0
  257. package/node/v6.0.0/sx-prop/test-cases/sx-css-vars.expected.js +88 -0
  258. package/node/v6.0.0/sx-prop/test-cases/sx-dynamic.actual.js +107 -0
  259. package/node/v6.0.0/sx-prop/test-cases/sx-dynamic.expected.js +120 -0
  260. package/node/v6.0.0/sx-prop/test-cases/sx-dynamic2.actual.js +49 -0
  261. package/node/v6.0.0/sx-prop/test-cases/sx-dynamic2.expected.js +64 -0
  262. package/node/v6.0.0/sx-prop/test-cases/sx-inheritance.actual.js +17 -0
  263. package/node/v6.0.0/sx-prop/test-cases/sx-inheritance.expected.js +17 -0
  264. package/node/v6.0.0/sx-prop/test-cases/sx-line-break.actual.js +69 -0
  265. package/node/v6.0.0/sx-prop/test-cases/sx-line-break.expected.js +69 -0
  266. package/node/v6.0.0/sx-prop/test-cases/sx-value-callback.actual.js +102 -0
  267. package/node/v6.0.0/sx-prop/test-cases/sx-value-callback.expected.js +111 -0
  268. package/node/v6.0.0/system-props/index.js +13 -0
  269. package/node/v6.0.0/system-props/removeSystemProps.js +233 -0
  270. package/node/v6.0.0/system-props/test-cases/system-props.actual.js +83 -0
  271. package/node/v6.0.0/system-props/test-cases/system-props.expected.js +98 -0
  272. package/node/v6.0.0/theme-v6/index.js +13 -0
  273. package/node/v6.0.0/theme-v6/test-cases/basicTheme.actual.js +559 -0
  274. package/node/v6.0.0/theme-v6/test-cases/basicTheme.expected.js +644 -0
  275. package/node/v6.0.0/theme-v6/test-cases/themeVariants.actual.js +65 -0
  276. package/node/v6.0.0/theme-v6/test-cases/themeVariants.expected.js +74 -0
  277. package/node/v6.0.0/theme-v6/theme-v6.js +86 -0
  278. package/package.json +11 -11
@@ -0,0 +1,586 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = migrateToVariants;
7
+ exports.getCreateBuildStyle = exports.getBuildArrowFunctionAST = exports.getAppendPaletteModeStyles = void 0;
8
+ exports.getIdentifierKey = getIdentifierKey;
9
+ exports.getObjectKey = getObjectKey;
10
+ exports.getObjectToArrowFunction = void 0;
11
+ exports.isThemePaletteMode = isThemePaletteMode;
12
+ exports.removeProperty = removeProperty;
13
+ const MAX_DEPTH = 20;
14
+
15
+ /**
16
+ * @param {import('jscodeshift').API['j']} j
17
+ * @returns
18
+ */
19
+ const getCreateBuildStyle = j => function createBuildStyle(key, upperBuildStyle, applyStylesMode) {
20
+ if (applyStylesMode) {
21
+ upperBuildStyle = styleExpression => j.objectExpression([j.spreadElement(j.callExpression(j.memberExpression(j.identifier('theme'), j.identifier('applyStyles')), [j.stringLiteral(applyStylesMode), styleExpression]))]);
22
+ }
23
+ return function buildStyle(styleExpression) {
24
+ if (key) {
25
+ if (key.type === 'Identifier' || key.type === 'StringLiteral') {
26
+ return upperBuildStyle(j.objectExpression([j.objectProperty(key, styleExpression)]));
27
+ }
28
+ if (key.type === 'TemplateLiteral' || key.type === 'CallExpression') {
29
+ return upperBuildStyle(j.objectExpression([{
30
+ ...j.objectProperty(key, styleExpression),
31
+ computed: true
32
+ }]));
33
+ }
34
+ }
35
+ return upperBuildStyle ? upperBuildStyle(styleExpression) : styleExpression;
36
+ };
37
+ };
38
+
39
+ /**
40
+ * @param {import('jscodeshift').API['j']} j
41
+ */
42
+ exports.getCreateBuildStyle = getCreateBuildStyle;
43
+ const getAppendPaletteModeStyles = j =>
44
+ /**
45
+ *
46
+ * @param {{ properties: any[] }} node
47
+ * @param {Record<string, any[] | import('jscodeshift').ObjectExpression>} modeStyles
48
+ */
49
+ function appendPaletteModeStyles(node, modeStyles) {
50
+ Object.entries(modeStyles).forEach(([mode, objectStyles]) => {
51
+ node.properties.push(j.spreadElement(j.callExpression(j.memberExpression(j.identifier('theme'), j.identifier('applyStyles')), [j.stringLiteral(mode), Array.isArray(objectStyles) ? j.objectExpression(objectStyles) : objectStyles])));
52
+ });
53
+ };
54
+
55
+ /**
56
+ *
57
+ * @param {import('jscodeshift').MemberExpression | import('jscodeshift').Identifier} node
58
+ */
59
+ exports.getAppendPaletteModeStyles = getAppendPaletteModeStyles;
60
+ function getIdentifierKey(node) {
61
+ if (node.type === 'MemberExpression') {
62
+ return node.property;
63
+ }
64
+ return node;
65
+ }
66
+
67
+ /**
68
+ *
69
+ * @param {import('jscodeshift').UnaryExpression | import('jscodeshift').MemberExpression | import('jscodeshift').Identifier} node
70
+ */
71
+ function getObjectKey(node) {
72
+ let tempNode = {
73
+ ...node
74
+ };
75
+ while (tempNode.type === 'UnaryExpression') {
76
+ tempNode = tempNode.argument;
77
+ }
78
+ while (tempNode.type === 'MemberExpression' || tempNode.type === 'OptionMemberExpression') {
79
+ tempNode = tempNode.object;
80
+ }
81
+ return tempNode;
82
+ }
83
+
84
+ /**
85
+ *
86
+ * @param {import('jscodeshift').ObjectExpression} node
87
+ */
88
+ function removeProperty(parentNode, child) {
89
+ if (parentNode) {
90
+ if (parentNode.type === 'ObjectExpression') {
91
+ parentNode.properties = parentNode.properties.filter(prop => prop !== child && prop.value !== child);
92
+ }
93
+ }
94
+ }
95
+
96
+ /**
97
+ * @param {import('jscodeshift').API['j']} j
98
+ */
99
+ const getBuildArrowFunctionAST = j =>
100
+ /**
101
+ *
102
+ * @param {Set<string> | import('jscodeshift').Expression[]} params
103
+ * @param {import('jscodeshift').BlockStatement} body
104
+ * @returns
105
+ */
106
+ function buildArrowFunctionAST(params, body) {
107
+ const destructured = [...params].every(param => typeof param === 'string');
108
+ return j.arrowFunctionExpression(destructured ? [j.objectPattern([...params].map(k => ({
109
+ ...j.objectProperty(j.identifier(k), j.identifier(k)),
110
+ shorthand: true
111
+ })))] : params, body);
112
+ };
113
+
114
+ /**
115
+ * @param {import('jscodeshift').API['j']} j
116
+ */
117
+ exports.getBuildArrowFunctionAST = getBuildArrowFunctionAST;
118
+ const getObjectToArrowFunction = j => {
119
+ const buildArrowFunctionAST = getBuildArrowFunctionAST(j);
120
+ return (
121
+ /**
122
+ *
123
+ * @param {import('jscodeshift').ObjectExpression} objectExpression
124
+ * @param {import('jscodeshift').BinaryExpression} addtional
125
+ */
126
+ function objectToArrowFunction(objectExpression, addtional) {
127
+ const paramKeys = new Set();
128
+ let left;
129
+ objectExpression.properties.forEach((prop, index) => {
130
+ paramKeys.add(prop.key.name);
131
+ const result = j.binaryExpression('===', prop.key, prop.value);
132
+ if (index === 0) {
133
+ left = result;
134
+ } else {
135
+ left = j.logicalExpression('&&', left, result);
136
+ }
137
+ });
138
+ if (addtional) {
139
+ paramKeys.add(getObjectKey(addtional.left).name);
140
+ }
141
+ return buildArrowFunctionAST(paramKeys, addtional ? j.logicalExpression('&&', left, addtional) : left);
142
+ }
143
+ );
144
+ };
145
+
146
+ /**
147
+ *
148
+ * @param {undefined | null | import('jscodeshift').Expression} node
149
+ */
150
+ exports.getObjectToArrowFunction = getObjectToArrowFunction;
151
+ function isThemePaletteMode(node) {
152
+ return node?.type === 'MemberExpression' && node.object.type === 'MemberExpression' && node.object.object.name === 'theme' && node.object.property.name === 'palette' && node.property.name === 'mode';
153
+ }
154
+
155
+ /**
156
+ *
157
+ * @param {import('jscodeshift').API['j']} j
158
+ * @param {any[]} styles
159
+ */
160
+ function migrateToVariants(j, styles) {
161
+ const createBuildStyle = getCreateBuildStyle(j);
162
+ const appendPaletteModeStyles = getAppendPaletteModeStyles(j);
163
+ const buildArrowFunctionAST = getBuildArrowFunctionAST(j);
164
+ const objectToArrowFunction = getObjectToArrowFunction(j);
165
+
166
+ /**
167
+ * A map of used variable with its original name
168
+ */
169
+ const parameterMap = {};
170
+
171
+ /**
172
+ *
173
+ * @param {import('jscodeshift').Identifier | import('jscodeshift').BinaryExpression | import('jscodeshift').UnaryExpression | import('jscodeshift').MemberExpression} node
174
+ */
175
+ function inverseBinaryExpression(node) {
176
+ if (node.type === 'Identifier' || node.type === 'MemberExpression') {
177
+ return j.unaryExpression('!', node);
178
+ }
179
+ if (node.operator === '===') {
180
+ return {
181
+ ...node,
182
+ operator: '!=='
183
+ };
184
+ }
185
+ if (node.operator === '!==') {
186
+ return {
187
+ ...node,
188
+ operator: '==='
189
+ };
190
+ }
191
+ if (node.operator === '!') {
192
+ if (node.argument?.operator === '!') {
193
+ return node.argument;
194
+ }
195
+ return j.unaryExpression('!', node);
196
+ }
197
+ return node;
198
+ }
199
+ function buildObjectAST(jsObject) {
200
+ const result = j.objectExpression([]);
201
+ Object.entries(jsObject).forEach(([key, value]) => {
202
+ result.properties.push(j.objectProperty(j.identifier(key), value));
203
+ });
204
+ return result;
205
+ }
206
+ function resolveParamName(name) {
207
+ if (typeof name !== 'string') {
208
+ if (name.type === 'Identifier' && parameterMap[name.name]) {
209
+ if (parameterMap[name.name].includes('-')) {
210
+ return j.stringLiteral(parameterMap[name.name]);
211
+ }
212
+ return {
213
+ ...name,
214
+ name: parameterMap[name.name]
215
+ };
216
+ }
217
+ return name;
218
+ }
219
+ return parameterMap[name] || name;
220
+ }
221
+
222
+ /**
223
+ *
224
+ * @param {import('jscodeshift').LogicalExpression | import('jscodeshift').BinaryExpression | import('jscodeshift').UnaryExpression | import('jscodeshift').MemberExpression} node
225
+ */
226
+ function buildProps(node) {
227
+ const properties = [];
228
+ const variables = new Set();
229
+ let isAllEqual = true;
230
+ let tempNode = {
231
+ ...node
232
+ };
233
+ function assignProperties(_node) {
234
+ if (_node.type === 'BinaryExpression') {
235
+ variables.add(resolveParamName(getObjectKey(_node.left).name));
236
+ if (_node.operator === '===') {
237
+ properties.push(j.objectProperty(resolveParamName(getIdentifierKey(_node.left)), _node.right));
238
+ } else {
239
+ isAllEqual = false;
240
+ }
241
+ }
242
+ if (_node.type === 'MemberExpression' || _node.type === 'Identifier') {
243
+ isAllEqual = false;
244
+ variables.add(resolveParamName(getObjectKey(_node).name));
245
+ }
246
+ if (_node.type === 'UnaryExpression') {
247
+ isAllEqual = false;
248
+ if (_node.argument.type === 'UnaryExpression') {
249
+ // handle `!!variable`
250
+ variables.add(resolveParamName(getObjectKey(_node.argument.argument).name));
251
+ } else {
252
+ // handle `!variable`
253
+ variables.add(resolveParamName(getObjectKey(_node.argument).name));
254
+ }
255
+ }
256
+ }
257
+ let counter = 0;
258
+ if (tempNode.type !== 'LogicalExpression') {
259
+ assignProperties(tempNode);
260
+ } else {
261
+ while (tempNode.type === 'LogicalExpression' && counter < MAX_DEPTH) {
262
+ counter += 1;
263
+ if (tempNode.operator !== '&&') {
264
+ isAllEqual = false;
265
+ }
266
+ assignProperties(tempNode.right);
267
+ if (tempNode.left.type !== 'LogicalExpression') {
268
+ assignProperties(tempNode.left);
269
+ break;
270
+ }
271
+ tempNode = {
272
+ ...tempNode.left
273
+ };
274
+ }
275
+ }
276
+ if (!isAllEqual) {
277
+ return buildArrowFunctionAST(variables, node);
278
+ }
279
+ return j.objectExpression(properties);
280
+ }
281
+ function mergeProps(parentProps, currentProps) {
282
+ if (parentProps.type === 'ObjectExpression' && currentProps.type === 'ObjectExpression') {
283
+ return j.objectExpression([...parentProps.properties, ...currentProps.properties]);
284
+ }
285
+ const parentArrow = parentProps.type === 'ObjectExpression' ? objectToArrowFunction(parentProps) : parentProps;
286
+ const currentArrow = currentProps.type === 'ObjectExpression' ? objectToArrowFunction(currentProps) : currentProps;
287
+ const variables = new Set();
288
+ [...parentArrow.params[0].properties, ...currentArrow.params[0].properties].forEach(param => {
289
+ variables.add(resolveParamName(param.key.name));
290
+ });
291
+ return buildArrowFunctionAST(variables, j.logicalExpression('&&', parentArrow.body, currentArrow.body));
292
+ }
293
+
294
+ // 2. Find logical spread expressions to convert to variants
295
+ styles.forEach(style => {
296
+ const parameters = new Set();
297
+ style.params.forEach(param => {
298
+ if (param.type === 'ObjectPattern') {
299
+ param.properties.forEach(prop => {
300
+ if (prop.type === 'ObjectProperty') {
301
+ let paramName;
302
+ if (prop.value.type === 'Identifier') {
303
+ paramName = prop.value.name;
304
+ }
305
+ if (prop.value.type === 'AssignmentPattern') {
306
+ paramName = prop.value.left.name;
307
+ }
308
+ if (paramName) {
309
+ parameters.add(paramName);
310
+ if (prop.key.type === 'Identifier') {
311
+ parameterMap[paramName] = prop.key.name;
312
+ }
313
+ if (prop.key.type === 'StringLiteral') {
314
+ parameterMap[paramName] = prop.key.value;
315
+ }
316
+ }
317
+ }
318
+ });
319
+ }
320
+ if (param.type === 'Identifier') {
321
+ parameters.add(param.name);
322
+ }
323
+ });
324
+ const variants = [];
325
+ if (style.body.type === 'LogicalExpression') {
326
+ if (style.params[0] && (style.params[0].type === 'Identifier' || style.params[0].type === 'ObjectPattern' && style.params[0].properties.some(prop => prop.key.name !== 'theme'))) {
327
+ // case: ({ theme, ownerState }) => ownerState.variant === 'regular' && theme.mixins.toolbar
328
+ style.body = j.objectExpression([j.objectProperty(j.identifier('variants'), j.arrayExpression([j.objectExpression([j.objectProperty(j.identifier('props'), buildProps(style.body.left)), j.objectProperty(j.identifier('style'), style.body.right)])]))]);
329
+ }
330
+ } else if (style.body.type === 'ConditionalExpression') {
331
+ // skip ConditionalExpression
332
+ } else {
333
+ const expressions = [];
334
+ if (style.body.type === 'ArrayExpression') {
335
+ expressions.push(...style.body.elements);
336
+ } else {
337
+ expressions.push(style.body);
338
+ }
339
+ expressions.forEach(objectExpression => {
340
+ let counter = 0;
341
+ while (objectExpression.type !== 'ObjectExpression' && counter < MAX_DEPTH) {
342
+ counter += 1;
343
+ if (objectExpression.type === 'BlockStatement') {
344
+ objectExpression = objectExpression.body.find(item => item.type === 'ReturnStatement').argument;
345
+ }
346
+ }
347
+ recurseObjectExpression({
348
+ node: objectExpression,
349
+ buildStyle: createBuildStyle()
350
+ });
351
+ if (variants.length && objectExpression.type === 'ObjectExpression') {
352
+ objectExpression.properties.push(j.objectProperty(j.identifier('variants'), j.arrayExpression(variants.filter(variant => {
353
+ const props = variant.properties.find(prop => prop.key.name === 'props');
354
+ const styleVal = variant.properties.find(prop => prop.key.name === 'style');
355
+ return props && styleVal && (!styleVal.value.properties || styleVal.value.properties.length > 0) && (props.value.type === 'ArrowFunctionExpression' || props.value.properties.length > 0);
356
+ }))));
357
+ }
358
+ });
359
+ }
360
+ function recurseObjectExpression(data) {
361
+ if (data.node.type === 'ObjectExpression') {
362
+ const modeStyles = {}; // to collect styles from `theme.palette.mode === '...'`
363
+ data.node.properties.forEach(prop => {
364
+ if (prop.type === 'ObjectProperty') {
365
+ recurseObjectExpression({
366
+ ...data,
367
+ node: prop.value,
368
+ parentNode: data.node,
369
+ key: prop.key,
370
+ buildStyle: createBuildStyle(prop.key, data.buildStyle),
371
+ replaceValue: newValue => {
372
+ prop.value = newValue;
373
+ },
374
+ modeStyles
375
+ });
376
+ } else {
377
+ recurseObjectExpression({
378
+ ...data,
379
+ node: prop,
380
+ parentNode: data.node,
381
+ buildStyle: createBuildStyle(prop.key, data.buildStyle)
382
+ });
383
+ }
384
+ });
385
+ appendPaletteModeStyles(data.node, modeStyles);
386
+ }
387
+ if (data.node.type === 'SpreadElement') {
388
+ if (data.node.argument.type === 'LogicalExpression') {
389
+ const paramName = data.node.argument.left.type === 'BinaryExpression' ? getObjectKey(data.node.argument.left.left)?.name : getObjectKey(data.node.argument.left)?.name;
390
+ if (paramName === 'theme' && data.node.argument.left.right.type === 'StringLiteral') {
391
+ if (data.node.argument.right.type === 'ObjectExpression') {
392
+ const mode = data.node.argument.left.right.value;
393
+ data.node.argument.right.properties.forEach(prop => {
394
+ if (prop.type === 'ObjectProperty') {
395
+ recurseObjectExpression({
396
+ ...data,
397
+ node: prop.value,
398
+ parentNode: data.node.argument.right,
399
+ key: prop.key,
400
+ buildStyle: createBuildStyle(prop.key, data.buildStyle, mode),
401
+ replaceValue: newValue => {
402
+ prop.value = newValue;
403
+ }
404
+ });
405
+ } else {
406
+ recurseObjectExpression({
407
+ ...data,
408
+ node: prop,
409
+ parentNode: data.node.argument.right,
410
+ buildStyle: createBuildStyle(prop.key, data.buildStyle, mode)
411
+ });
412
+ }
413
+ });
414
+ appendPaletteModeStyles(data.parentNode, {
415
+ [mode]: data.node.argument.right
416
+ });
417
+ }
418
+ removeProperty(data.parentNode, data.node);
419
+ return;
420
+ }
421
+ if (paramName && !parameters.has(paramName)) {
422
+ return;
423
+ }
424
+ const scopeProps = buildProps(data.node.argument.left);
425
+ const variant = {
426
+ props: data.props ? mergeProps(data.props, scopeProps) : scopeProps,
427
+ style: data.node.argument.right
428
+ };
429
+ const lastLength = variants.push({}); // preserve the order of the recursive calls
430
+
431
+ const modeStyles = {}; // to collect styles from `theme.palette.mode === '...'`
432
+ if (variant.style.type === 'ObjectExpression') {
433
+ variant.style.properties.forEach(prop => {
434
+ if (prop.type === 'ObjectProperty') {
435
+ recurseObjectExpression({
436
+ ...data,
437
+ node: prop.value,
438
+ parentNode: variant.style,
439
+ props: variant.props,
440
+ key: prop.key,
441
+ buildStyle: createBuildStyle(prop.key, data.buildStyle),
442
+ replaceValue: newValue => {
443
+ prop.value = newValue;
444
+ },
445
+ modeStyles
446
+ });
447
+ } else {
448
+ recurseObjectExpression({
449
+ ...data,
450
+ node: prop,
451
+ parentNode: variant.style,
452
+ props: variant.props,
453
+ buildStyle: createBuildStyle(prop.key, data.buildStyle)
454
+ });
455
+ }
456
+ });
457
+ }
458
+ appendPaletteModeStyles(variant.style, modeStyles);
459
+ variant.style = data.buildStyle(variant.style);
460
+ variants[lastLength - 1] = buildObjectAST(variant);
461
+ removeProperty(data.parentNode, data.node);
462
+ }
463
+ if (data.node.argument.type === 'ConditionalExpression') {
464
+ recurseObjectExpression({
465
+ ...data,
466
+ node: data.node.argument,
467
+ parentNode: data.node
468
+ });
469
+ removeProperty(data.parentNode, data.node);
470
+ }
471
+ }
472
+ if (data.node.type === 'ConditionalExpression') {
473
+ if (data.node.test.type === 'BinaryExpression' || data.node.test.type === 'UnaryExpression' || data.node.test.type === 'Identifier' || data.node.test.type === 'MemberExpression') {
474
+ let leftName = getObjectKey(data.node.test)?.name;
475
+ if (data.node.test.left) {
476
+ leftName = getObjectKey(data.node.test.left)?.name;
477
+ }
478
+ if (data.node.test.argument) {
479
+ leftName = getObjectKey(data.node.test.argument)?.name;
480
+ }
481
+ if (parameters.has(leftName) && leftName !== 'theme') {
482
+ let props = buildProps(data.node.test);
483
+ if (data.props) {
484
+ props = mergeProps(data.props, props);
485
+ }
486
+ const styleVal = data.buildStyle(data.node.consequent);
487
+ const variant = {
488
+ props,
489
+ style: styleVal
490
+ };
491
+ variants.push(buildObjectAST(variant));
492
+ if (data.node.consequent.type === 'ObjectExpression' && data.node.alternate.type === 'ObjectExpression') {
493
+ // create another variant with inverted condition
494
+ let props2 = buildProps(inverseBinaryExpression(data.node.test));
495
+ if (data.props) {
496
+ props2 = mergeProps(data.props, props2);
497
+ }
498
+ const styleVal2 = data.buildStyle(data.node.alternate);
499
+ const variant2 = {
500
+ props: props2,
501
+ style: styleVal2
502
+ };
503
+ variants.push(buildObjectAST(variant2));
504
+ if (data.parentNode?.type === 'ObjectExpression') {
505
+ removeProperty(data.parentNode, data.node);
506
+ }
507
+ } else {
508
+ data.replaceValue?.(data.node.alternate);
509
+ }
510
+ }
511
+ if (leftName === 'theme' && data.parentNode?.type === 'ObjectExpression' && data.node.test?.type === 'BinaryExpression' && isThemePaletteMode(data.node.test.left)) {
512
+ if (data.node.consequent.type !== 'ObjectExpression' && data.node.alternate.type !== 'ObjectExpression') {
513
+ if (data.modeStyles) {
514
+ if (!data.modeStyles[data.node.test.right.value]) {
515
+ data.modeStyles[data.node.test.right.value] = [];
516
+ }
517
+ data.modeStyles[data.node.test.right.value].push(j.objectProperty(data.key, data.node.consequent));
518
+ }
519
+ data.replaceValue?.(data.node.alternate);
520
+ }
521
+ }
522
+ }
523
+ }
524
+ if (data.node.type === 'TemplateLiteral') {
525
+ if (data.parentNode?.type === 'ObjectExpression') {
526
+ const modeStyles = {};
527
+ data.node.expressions.forEach((expression, index) => {
528
+ recurseObjectExpression({
529
+ ...data,
530
+ node: expression,
531
+ parentNode: data.parentNode,
532
+ buildStyle: createBuildStyle(data.key, data.buildStyle),
533
+ replaceValue: newValue => {
534
+ data.node.expressions[index] = newValue;
535
+ },
536
+ modeStyles
537
+ });
538
+ });
539
+ if (data.modeStyles) {
540
+ Object.entries(modeStyles).forEach(([mode, objectStyles]) => {
541
+ const clonedNode = {
542
+ ...data.node,
543
+ expressions: data.node.expressions.map(expression => ({
544
+ ...expression
545
+ }))
546
+ };
547
+ clonedNode.expressions = objectStyles.map(item => item.value);
548
+ if (!data.modeStyles[mode]) {
549
+ data.modeStyles[mode] = [];
550
+ }
551
+ data.modeStyles[mode].push(j.objectProperty(data.key, clonedNode));
552
+ });
553
+ if (data.key) {
554
+ // to remove the arrow function
555
+ // { ...: theme => `1px solid...` } to { ...: `1px solid...` }
556
+ data.replaceValue?.(data.node);
557
+ }
558
+ }
559
+ }
560
+ }
561
+ if (data.key && data.key.type === 'Identifier' && data.node.type === 'MemberExpression' && data.node.object.type === 'ObjectExpression' && parameters.has(getObjectKey(data.node.property).name)) {
562
+ data.node.object.properties.forEach(prop => {
563
+ variants.push(buildObjectAST({
564
+ props: j.objectExpression([j.objectProperty(getIdentifierKey(data.node.property), j.stringLiteral(prop.key.name))]),
565
+ style: data.buildStyle(prop.value)
566
+ }));
567
+ });
568
+ removeProperty(data.parentNode, data.node);
569
+ }
570
+ }
571
+ style.params.forEach(param => {
572
+ if (param.type === 'ObjectPattern') {
573
+ param.properties = param.properties.filter(prop => prop.key.name === 'theme');
574
+ }
575
+ });
576
+ if (style.body.type === 'ObjectExpression') {
577
+ // Remove empty `...theme.applyStyles('...', {})`
578
+ style.body.properties = style.body.properties.filter(prop => {
579
+ if (prop.argument?.callee?.object?.name === 'theme' && typeof prop.argument?.arguments[0]?.value === 'string' && !prop.argument?.arguments?.[1]?.properties?.length) {
580
+ return false;
581
+ }
582
+ return true;
583
+ });
584
+ }
585
+ });
586
+ }
@@ -40,13 +40,9 @@ function propsToObject({
40
40
  }
41
41
  });
42
42
  if (propValue.length > 0) {
43
- const propNameAttr = attributes.find(attr => {
44
- var _attr$name;
45
- return (attr == null || (_attr$name = attr.name) == null ? void 0 : _attr$name.name) === propName;
46
- });
43
+ const propNameAttr = attributes.find(attr => attr?.name?.name === propName);
47
44
  if (propNameAttr) {
48
- var _propNameAttr$value$e;
49
- (((_propNameAttr$value$e = propNameAttr.value.expression) == null ? void 0 : _propNameAttr$value$e.properties) || []).push(...j.objectExpression(propValue).properties);
45
+ (propNameAttr.value.expression?.properties || []).push(...j.objectExpression(propValue).properties);
50
46
  } else {
51
47
  attributes.push(j.jsxAttribute(j.jsxIdentifier(propName), j.jsxExpressionContainer(j.objectExpression(propValue))));
52
48
  }
@@ -13,8 +13,7 @@ function renameClassKey({
13
13
  const source = root.findJSXElements(componentName).forEach(path => {
14
14
  path.node.openingElement.attributes.forEach(node => {
15
15
  if (node.type === 'JSXAttribute' && node.name.name === 'classes') {
16
- var _node$value;
17
- (_node$value = node.value) == null || (_node$value = _node$value.expression) == null || (_node$value = _node$value.properties) == null || _node$value.forEach(subNode => {
16
+ node.value?.expression?.properties?.forEach(subNode => {
18
17
  if (Object.keys(classes).includes(subNode.key.name)) {
19
18
  subNode.key.name = classes[subNode.key.name];
20
19
  }
@@ -64,10 +64,10 @@ const pathConversion = {
64
64
  const pathBaseSource = ['material-ui/src/', 'material-ui/src/'];
65
65
  const pathBasePackage = ['material-ui/lib/', 'material-ui/'];
66
66
  function getPathsBase(path) {
67
- if (path.indexOf(pathBaseSource[0]) === 0) {
67
+ if (path.startsWith(pathBaseSource[0])) {
68
68
  return pathBaseSource;
69
69
  }
70
- if (path.indexOf(pathBasePackage[0]) === 0) {
70
+ if (path.startsWith(pathBasePackage[0])) {
71
71
  return pathBasePackage;
72
72
  }
73
73
  return new Error('Wrong path');
@@ -13,13 +13,11 @@ function transformer(file, api, options) {
13
13
  const printOptions = options.printOptions;
14
14
  const source = j(file.source).findJSXElements('Avatar').forEach(path => {
15
15
  path.node.openingElement.attributes.forEach(node => {
16
- var _node$value$expressio;
17
- if (node.type === 'JSXAttribute' && node.name.name === 'variant' && (node.value.value === 'circle' || ((_node$value$expressio = node.value.expression) == null ? void 0 : _node$value$expressio.value) === 'circle')) {
16
+ if (node.type === 'JSXAttribute' && node.name.name === 'variant' && (node.value.value === 'circle' || node.value.expression?.value === 'circle')) {
18
17
  node.value = j.literal('circular');
19
18
  }
20
19
  if (node.type === 'JSXAttribute' && node.name.name === 'classes') {
21
- var _node$value;
22
- (_node$value = node.value) == null || (_node$value = _node$value.expression) == null || (_node$value = _node$value.properties) == null || _node$value.forEach(subNode => {
20
+ node.value?.expression?.properties?.forEach(subNode => {
23
21
  if (subNode.key.name === 'circle') {
24
22
  subNode.key.name = 'circular';
25
23
  }
@@ -13,18 +13,15 @@ function transformer(file, api, options) {
13
13
  const printOptions = options.printOptions;
14
14
  const source = j(file.source).findJSXElements('Badge').forEach(path => {
15
15
  path.node.openingElement.attributes.forEach(node => {
16
- var _node$value;
17
16
  if (node.type === 'JSXAttribute' && node.name.name === 'overlap') {
18
- var _node$value$expressio, _node$value$expressio2;
19
- if (node.value.value === 'circle' || ((_node$value$expressio = node.value.expression) == null ? void 0 : _node$value$expressio.value) === 'circle') {
17
+ if (node.value.value === 'circle' || node.value.expression?.value === 'circle') {
20
18
  node.value = j.literal('circular');
21
- } else if (node.value.value === 'rectangle' || ((_node$value$expressio2 = node.value.expression) == null ? void 0 : _node$value$expressio2.value) === 'rectangle') {
19
+ } else if (node.value.value === 'rectangle' || node.value.expression?.value === 'rectangle') {
22
20
  node.value = j.literal('rectangular');
23
21
  }
24
22
  }
25
- if (node.type === 'JSXAttribute' && node.name.name === 'classes' && Array.isArray((_node$value = node.value) == null || (_node$value = _node$value.expression) == null ? void 0 : _node$value.properties)) {
26
- var _node$value2;
27
- (_node$value2 = node.value) == null || (_node$value2 = _node$value2.expression) == null || (_node$value2 = _node$value2.properties) == null || _node$value2.forEach(subNode => {
23
+ if (node.type === 'JSXAttribute' && node.name.name === 'classes' && Array.isArray(node.value?.expression?.properties)) {
24
+ node.value?.expression?.properties?.forEach(subNode => {
28
25
  if (subNode.key) {
29
26
  if (subNode.key.name.endsWith('Circle')) {
30
27
  subNode.key.name = subNode.key.name.replace('Circle', 'Circular');