transform-icons.ts — ui Source File
Architecture documentation for transform-icons.ts, a typescript file in the ui codebase. 3 imports, 0 dependents.
Entity Profile
Dependency Diagram
graph LR 66a6f0fd_f18b_9c39_b420_a7cbf1c73452["transform-icons.ts"] 21434c25_e4b6_a999_aa4a_fa7cb632e703["libraries"] 66a6f0fd_f18b_9c39_b420_a7cbf1c73452 --> 21434c25_e4b6_a999_aa4a_fa7cb632e703 e69863ed_3e2f_ef94_648a_ef0155c386ef["transformers"] 66a6f0fd_f18b_9c39_b420_a7cbf1c73452 --> e69863ed_3e2f_ef94_648a_ef0155c386ef 4f6f7e78_23ff_4f5f_c723_474454f64c85["ts-morph"] 66a6f0fd_f18b_9c39_b420_a7cbf1c73452 --> 4f6f7e78_23ff_4f5f_c723_474454f64c85 style 66a6f0fd_f18b_9c39_b420_a7cbf1c73452 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
import { iconLibraries, type IconLibraryName } from "@/src/icons/libraries"
import { Transformer } from "@/src/utils/transformers"
import { SourceFile, SyntaxKind } from "ts-morph"
export const transformIcons: Transformer = async ({ sourceFile, config }) => {
const iconLibrary = config.iconLibrary
// Fail silently if the icon library is not supported.
// This is for legacy icon libraries.
if (!iconLibrary || !(iconLibrary in iconLibraries)) {
return sourceFile
}
const targetLibrary = iconLibrary as IconLibraryName
const libraryConfig = iconLibraries[targetLibrary]
let transformedIcons: string[] = []
for (const element of sourceFile.getDescendantsOfKind(
SyntaxKind.JsxSelfClosingElement
)) {
if (element.getTagNameNode()?.getText() !== "IconPlaceholder") {
continue
}
// Find the library-specific prop (e.g., "lucide", "tabler", "hugeicons")
const libraryPropAttr = element.getAttributes().find((attr) => {
if (attr.getKind() !== SyntaxKind.JsxAttribute) {
return false
}
const jsxAttr = attr.asKindOrThrow(SyntaxKind.JsxAttribute)
return jsxAttr.getNameNode().getText() === targetLibrary
})
if (!libraryPropAttr) {
continue // No icon specified for this library
}
const jsxIconAttr = libraryPropAttr.asKindOrThrow(SyntaxKind.JsxAttribute)
const targetIconName = jsxIconAttr
.getInitializer()
?.getText()
.replace(/^["']|["']$/g, "")
if (!targetIconName) {
continue
}
if (!transformedIcons.includes(targetIconName)) {
transformedIcons.push(targetIconName)
}
const usage = libraryConfig.usage
const usageMatch = usage.match(/<(\w+)([^>]*)\s*\/>/)
// Remove the library-specific prop
jsxIconAttr.remove()
// Remove all other library-specific props
for (const attr of element.getAttributes()) {
if (attr.getKind() !== SyntaxKind.JsxAttribute) {
// ... (151 more lines)
Domain
Subdomains
Functions
Dependencies
- libraries
- transformers
- ts-morph
Source
Frequently Asked Questions
What does transform-icons.ts do?
transform-icons.ts is a source file in the ui codebase, written in typescript. It belongs to the FrameworkTooling domain, TemplateSync subdomain.
What functions are defined in transform-icons.ts?
transform-icons.ts defines 2 function(s): _useSemicolon, transformIcons.
What does transform-icons.ts depend on?
transform-icons.ts imports 3 module(s): libraries, transformers, ts-morph.
Where is transform-icons.ts in the architecture?
transform-icons.ts is located at packages/shadcn/src/utils/transformers/transform-icons.ts (domain: FrameworkTooling, subdomain: TemplateSync, directory: packages/shadcn/src/utils/transformers).
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free