UNPKG

flowbite-react

Version:

Official React components built for Flowbite and Tailwind CSS

1 lines 11.1 kB
{"version":3,"file":"compound-components.cjs","sources":["../../../src/cli/transformers/compound-components.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\n\nimport { parse } from \"@typescript-eslint/typescript-estree\";\nimport { visit } from \"ast-types\";\nimport * as recast from \"recast\";\nimport type { Transformer } from \"../commands/migrate\";\n\nconst COMPOUND_TO_SIMPLE_MAP: Record<string, string> = {\n // Accordion\n \"Accordion.Panel\": \"AccordionPanel\",\n \"Accordion.Title\": \"AccordionTitle\",\n \"Accordion.Content\": \"AccordionContent\",\n\n // Avatar\n \"Avatar.Group\": \"AvatarGroup\",\n \"Avatar.Counter\": \"AvatarGroupCounter\",\n\n // Banner\n \"Banner.CollapseButton\": \"BannerCollapseButton\",\n\n // Breadcrumb\n \"Breadcrumb.Item\": \"BreadcrumbItem\",\n\n // Button\n \"Button.Group\": \"ButtonGroup\",\n\n // Clipboard\n \"Clipboard.WithIcon\": \"ClipboardWithIcon\",\n \"Clipboard.WithIconText\": \"ClipboardWithIconText\",\n\n // Drawer\n \"Drawer.Header\": \"DrawerHeader\",\n \"Drawer.Items\": \"DrawerItems\",\n\n // Dropdown\n \"Dropdown.Item\": \"DropdownItem\",\n \"Dropdown.Header\": \"DropdownHeader\",\n \"Dropdown.Divider\": \"DropdownDivider\",\n\n // Footer\n \"Footer.Brand\": \"FooterBrand\",\n \"Footer.Copyright\": \"FooterCopyright\",\n \"Footer.Divider\": \"FooterDivider\",\n \"Footer.Icon\": \"FooterIcon\",\n \"Footer.Link\": \"FooterLink\",\n \"Footer.LinkGroup\": \"FooterLinkGroup\",\n \"Footer.Title\": \"FooterTitle\",\n\n // HR\n \"HR.Icon\": \"HRIcon\",\n \"HR.Square\": \"HRSquare\",\n \"HR.Text\": \"HRText\",\n \"HR.Trimmed\": \"HRTrimmed\",\n\n // List\n \"List.Item\": \"ListItem\",\n \"ListGroup.Item\": \"ListGroupItem\",\n\n // MegaMenu\n \"MegaMenu.Dropdown\": \"MegaMenuDropdown\",\n \"MegaMenu.DropdownToggle\": \"MegaMenuDropdownToggle\",\n\n // Modal\n \"Modal.Header\": \"ModalHeader\",\n \"Modal.Body\": \"ModalBody\",\n \"Modal.Footer\": \"ModalFooter\",\n\n // Navbar\n \"Navbar.Brand\": \"NavbarBrand\",\n \"Navbar.Collapse\": \"NavbarCollapse\",\n \"Navbar.Link\": \"NavbarLink\",\n \"Navbar.Toggle\": \"NavbarToggle\",\n\n // Pagination\n \"Pagination.Button\": \"PaginationButton\",\n\n // Rating\n \"Rating.Star\": \"RatingStar\",\n \"Rating.Advanced\": \"RatingAdvanced\",\n\n // Sidebar\n \"Sidebar.CTA\": \"SidebarCTA\",\n \"Sidebar.Collapse\": \"SidebarCollapse\",\n \"Sidebar.Item\": \"SidebarItem\",\n \"Sidebar.Items\": \"SidebarItems\",\n \"Sidebar.ItemGroup\": \"SidebarItemGroup\",\n \"Sidebar.Logo\": \"SidebarLogo\",\n\n // Table\n \"Table.Head\": \"TableHead\",\n \"Table.Body\": \"TableBody\",\n \"Table.Row\": \"TableRow\",\n \"Table.Cell\": \"TableCell\",\n \"Table.HeadCell\": \"TableHeadCell\",\n\n // Tabs\n \"Tabs.Item\": \"TabItem\",\n\n // Timeline\n \"Timeline.Item\": \"TimelineItem\",\n \"Timeline.Point\": \"TimelinePoint\",\n \"Timeline.Content\": \"TimelineContent\",\n \"Timeline.Time\": \"TimelineTime\",\n \"Timeline.Title\": \"TimelineTitle\",\n \"Timeline.Body\": \"TimelineBody\",\n\n // Toast\n \"Toast.Toggle\": \"ToastToggle\",\n};\n\nfunction transform(content: string): { content: string; changed: boolean } {\n try {\n const ast = recast.parse(content, {\n parser: {\n parse: (source: string) =>\n parse(source, {\n jsx: true,\n loc: true,\n range: true,\n tokens: true,\n errorOnUnknownASTType: false,\n tolerant: true,\n useJSXTextNode: true,\n }),\n },\n });\n\n let flowbiteImportPath = null;\n const flowbiteImportSpecifiers = [];\n let hasChanges = false;\n\n visit(ast, {\n visitImportDeclaration(path) {\n const { node } = path;\n if (\n node.type === \"ImportDeclaration\" &&\n (node.source.value === \"flowbite-react\" || node.source.value.startsWith(\"flowbite-react/components/\")) &&\n Array.isArray(node.specifiers) &&\n node.specifiers.every((s) => s.type === \"ImportSpecifier\")\n ) {\n flowbiteImportPath = node;\n node.specifiers.forEach((specifier) => {\n if (specifier.imported.type === \"Identifier\") {\n flowbiteImportSpecifiers.push(specifier.imported.name);\n }\n });\n }\n return false;\n },\n });\n\n visit(ast, {\n visitJSXMemberExpression(path) {\n const { node } = path;\n if (\n node.object.type === \"JSXIdentifier\" &&\n node.property.type === \"JSXIdentifier\" &&\n flowbiteImportSpecifiers.includes(node.object.name)\n ) {\n const compoundName = `${node.object.name}.${node.property.name}`;\n const simpleName = COMPOUND_TO_SIMPLE_MAP[compoundName];\n\n if (simpleName && flowbiteImportPath) {\n // Replace the compound component with the simple one\n path.replace(recast.types.builders.jsxIdentifier(simpleName));\n hasChanges = true;\n\n // Add the simple component to imports if not already present\n if (!flowbiteImportSpecifiers.includes(simpleName)) {\n flowbiteImportSpecifiers.push(simpleName);\n flowbiteImportPath.specifiers.push(\n recast.types.builders.importSpecifier(\n recast.types.builders.identifier(simpleName),\n recast.types.builders.identifier(simpleName),\n ),\n );\n }\n }\n }\n return false;\n },\n });\n\n // Sort import specifiers alphabetically\n if (flowbiteImportPath) {\n flowbiteImportPath.specifiers.sort((a, b) => {\n if (a.imported.type === \"Identifier\" && b.imported.type === \"Identifier\") {\n return a.imported.name.localeCompare(b.imported.name);\n }\n return 0;\n });\n }\n\n const transformedContent = recast.print(ast).code;\n return {\n content: transformedContent,\n changed: hasChanges,\n };\n } catch (_error) {\n // If parsing fails, return the original content unchanged\n console.warn(\"Warning: Could not parse file, skipping transformation\");\n return {\n content,\n changed: false,\n };\n }\n}\n\nexport const compoundComponentsTransformer: Transformer = {\n name: \"Compound Components\",\n transform,\n};\n"],"names":["recast","parse","visit"],"mappings":"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"}