UNPKG

@johnmusans/arcadia-ui-style-engine

Version:

Shared style system logic and types for Arcadia UI components

53 lines (42 loc) 1.59 kB
// import type { SourceFile } from "ts-morph"; import { iconLibraries, icons, } from "@arcadia-ui/registry-definition/registry-icons"; import type { IconLibrary } from "../../types"; import type { Transformer } from "./index"; export const transformIcons: Transformer = ({ sourceFile, style }) => { const targetIconLibrary = style.icons.library === "remix" ? "remix" : "lucide"; const targetLibraryConfig = iconLibraries.find( (lib) => lib.name === targetIconLibrary, ); if (!targetLibraryConfig) { throw new Error(`Icon library ${targetIconLibrary} not found`); } const importDeclarations = sourceFile.getImportDeclarations(); for (const importDeclaration of importDeclarations) { const moduleSpecifier = importDeclaration.getModuleSpecifier(); const moduleSpecifierValue = moduleSpecifier.getText().slice(1, -1); const isIconImport = Object.values(iconLibraries).some( (lib) => lib.package === moduleSpecifierValue, ); if (isIconImport) { moduleSpecifier.replaceWithText(`"${targetLibraryConfig.package}"`); const namedImports = importDeclaration.getNamedImports(); for (const namedImport of namedImports) { const importName = namedImport.getName(); const targetIconName = icons[importName as IconLibrary]; if (targetIconName) { const targetIcon = targetIconName[targetIconLibrary]; if (targetIcon) { namedImport.setName(targetIcon); } } } } } return new Promise((resolve) => { resolve(sourceFile); }); };