transform-import.ts — ui Source File
Architecture documentation for transform-import.ts, a typescript file in the ui codebase. 3 imports, 0 dependents.
Entity Profile
Dependency Diagram
graph LR 6c4a93e4_8d33_9fe5_4fc1_f8231ddf41b5["transform-import.ts"] b2895591_2a74_d518_deda_2f26be766dcb["get-config"] 6c4a93e4_8d33_9fe5_4fc1_f8231ddf41b5 --> b2895591_2a74_d518_deda_2f26be766dcb e69863ed_3e2f_ef94_648a_ef0155c386ef["transformers"] 6c4a93e4_8d33_9fe5_4fc1_f8231ddf41b5 --> e69863ed_3e2f_ef94_648a_ef0155c386ef 4f6f7e78_23ff_4f5f_c723_474454f64c85["ts-morph"] 6c4a93e4_8d33_9fe5_4fc1_f8231ddf41b5 --> 4f6f7e78_23ff_4f5f_c723_474454f64c85 style 6c4a93e4_8d33_9fe5_4fc1_f8231ddf41b5 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
import { Config } from "@/src/utils/get-config"
import { Transformer } from "@/src/utils/transformers"
import { SyntaxKind } from "ts-morph"
export const transformImport: Transformer = async ({
sourceFile,
config,
isRemote,
}) => {
const utilsAlias = config.aliases?.utils
const workspaceAlias =
typeof utilsAlias === "string" && utilsAlias.includes("/")
? utilsAlias.split("/")[0]
: "@"
const utilsImport = `${workspaceAlias}/lib/utils`
if (![".tsx", ".ts", ".jsx", ".js"].includes(sourceFile.getExtension())) {
return sourceFile
}
for (const specifier of sourceFile.getImportStringLiterals()) {
const updated = updateImportAliases(
specifier.getLiteralValue(),
config,
isRemote
)
specifier.setLiteralValue(updated)
// Replace `import { cn } from "@/lib/utils"`
if (utilsImport === updated || updated === "@/lib/utils") {
const importDeclaration = specifier.getFirstAncestorByKind(
SyntaxKind.ImportDeclaration
)
const isCnImport = importDeclaration
?.getNamedImports()
.some((namedImport) => namedImport.getName() === "cn")
if (!isCnImport || !config.aliases.utils) {
continue
}
specifier.setLiteralValue(
utilsImport === updated
? updated.replace(utilsImport, config.aliases.utils)
: config.aliases.utils
)
}
}
return sourceFile
}
function updateImportAliases(
moduleSpecifier: string,
config: Config,
isRemote: boolean = false
) {
// Not a local import.
if (!moduleSpecifier.startsWith("@/") && !isRemote) {
return moduleSpecifier
}
// This treats the remote as coming from a faux registry.
if (isRemote && moduleSpecifier.startsWith("@/")) {
moduleSpecifier = moduleSpecifier.replace(/^@\//, `@/registry/new-york/`)
}
// Not a registry import.
if (!moduleSpecifier.startsWith("@/registry/")) {
// We fix the alias and return.
const alias = config.aliases.components.split("/")[0]
return moduleSpecifier.replace(/^@\//, `${alias}/`)
}
if (moduleSpecifier.match(/^@\/registry\/(.+)\/ui/)) {
return moduleSpecifier.replace(
/^@\/registry\/(.+)\/ui/,
config.aliases.ui ?? `${config.aliases.components}/ui`
)
}
if (
config.aliases.components &&
moduleSpecifier.match(/^@\/registry\/(.+)\/components/)
) {
return moduleSpecifier.replace(
/^@\/registry\/(.+)\/components/,
config.aliases.components
)
}
if (config.aliases.lib && moduleSpecifier.match(/^@\/registry\/(.+)\/lib/)) {
return moduleSpecifier.replace(
/^@\/registry\/(.+)\/lib/,
config.aliases.lib
)
}
if (
config.aliases.hooks &&
moduleSpecifier.match(/^@\/registry\/(.+)\/hooks/)
) {
return moduleSpecifier.replace(
/^@\/registry\/(.+)\/hooks/,
config.aliases.hooks
)
}
return moduleSpecifier.replace(
/^@\/registry\/[^/]+/,
config.aliases.components
)
}
Domain
Subdomains
Functions
Dependencies
- get-config
- transformers
- ts-morph
Source
Frequently Asked Questions
What does transform-import.ts do?
transform-import.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-import.ts?
transform-import.ts defines 2 function(s): transformImport, updateImportAliases.
What does transform-import.ts depend on?
transform-import.ts imports 3 module(s): get-config, transformers, ts-morph.
Where is transform-import.ts in the architecture?
transform-import.ts is located at packages/shadcn/src/utils/transformers/transform-import.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