UNPKG

@mui/codemod

Version:
84 lines (82 loc) 2.82 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = transformer; var _movePropIntoSlots = _interopRequireDefault(require("../utils/movePropIntoSlots")); var _movePropIntoSlotProps = _interopRequireDefault(require("../utils/movePropIntoSlotProps")); var _findComponentJSX = _interopRequireDefault(require("../../util/findComponentJSX")); var _findComponentDefaultProps = _interopRequireDefault(require("../../util/findComponentDefaultProps")); const slotKeyRenames = { StartScrollButtonIcon: 'startScrollButtonIcon', EndScrollButtonIcon: 'endScrollButtonIcon' }; function renameSlotKey(property) { const name = property.key?.name || property.key?.value; if (name && slotKeyRenames[name]) { property.key.name = slotKeyRenames[name]; } } function renameJsxSlotKeys(j, element, attributeName) { element.openingElement.attributes.forEach(attr => { if (attr.type === 'JSXAttribute' && attr.name?.name === attributeName && attr.value?.expression?.type === 'ObjectExpression') { attr.value.expression.properties.forEach(renameSlotKey); } }); } function renameDefaultPropsSlotKeys(j, defaultPropsPathCollection, attributeName) { defaultPropsPathCollection.find(j.ObjectProperty, { key: { name: attributeName } }).forEach(path => { if (path.value.value.type === 'ObjectExpression') { path.value.value.properties.forEach(renameSlotKey); } }); } /** * @param {import('jscodeshift').FileInfo} file * @param {import('jscodeshift').API} api */ function transformer(file, api, options) { const j = api.jscodeshift; const root = j(file.source); const printOptions = options.printOptions; (0, _movePropIntoSlots.default)(j, { root, packageName: options.packageName, componentName: 'Tabs', propName: 'ScrollButtonComponent', slotName: 'scrollButtons' }); (0, _movePropIntoSlotProps.default)(j, { root, packageName: options.packageName, componentName: 'Tabs', propName: 'TabScrollButtonProps', slotName: 'scrollButtons' }); (0, _movePropIntoSlotProps.default)(j, { root, packageName: options.packageName, componentName: 'Tabs', propName: 'TabIndicatorProps', slotName: 'indicator' }); (0, _findComponentJSX.default)(j, { root, packageName: options.packageName, componentName: 'Tabs' }, elementPath => { renameJsxSlotKeys(j, elementPath.node, 'slots'); }); const defaultPropsPathCollection = (0, _findComponentDefaultProps.default)(j, { root, packageName: options.packageName, componentName: 'Tabs' }); renameDefaultPropsSlotKeys(j, defaultPropsPathCollection, 'slots'); return root.toSource(printOptions); }