Home / File/ transform-tw-prefix.ts — ui Source File

transform-tw-prefix.ts — ui Source File

Architecture documentation for transform-tw-prefix.ts, a typescript file in the ui codebase. 7 imports, 3 dependents.

File typescript FrameworkTooling CLICore 7 imports 3 dependents 3 functions

Entity Profile

Dependency Diagram

graph LR
  7edb575e_bbe2_1d90_7009_48ce3cf289ac["transform-tw-prefix.ts"]
  6a5c3afa_2e3e_bbfc_2351_1976d5a184fe["get-project-info.ts"]
  7edb575e_bbe2_1d90_7009_48ce3cf289ac --> 6a5c3afa_2e3e_bbfc_2351_1976d5a184fe
  b5fac7e7_b77e_14e9_6617_4fc7c4c5e783["TailwindVersion"]
  7edb575e_bbe2_1d90_7009_48ce3cf289ac --> b5fac7e7_b77e_14e9_6617_4fc7c4c5e783
  b37690ec_c82c_c272_b63f_a755b319db6c["getProjectTailwindVersionFromConfig"]
  7edb575e_bbe2_1d90_7009_48ce3cf289ac --> b37690ec_c82c_c272_b63f_a755b319db6c
  68902008_e67e_dfe4_353e_be9dad09e8d9["transform-css-vars.ts"]
  7edb575e_bbe2_1d90_7009_48ce3cf289ac --> 68902008_e67e_dfe4_353e_be9dad09e8d9
  35f5833f_e233_d06c_e1a4_06b1e4fca37c["splitClassName"]
  7edb575e_bbe2_1d90_7009_48ce3cf289ac --> 35f5833f_e233_d06c_e1a4_06b1e4fca37c
  e69863ed_3e2f_ef94_648a_ef0155c386ef["transformers"]
  7edb575e_bbe2_1d90_7009_48ce3cf289ac --> e69863ed_3e2f_ef94_648a_ef0155c386ef
  4f6f7e78_23ff_4f5f_c723_474454f64c85["ts-morph"]
  7edb575e_bbe2_1d90_7009_48ce3cf289ac --> 4f6f7e78_23ff_4f5f_c723_474454f64c85
  646bd874_990a_e30f_0d03_073229dd52ad["index.ts"]
  646bd874_990a_e30f_0d03_073229dd52ad --> 7edb575e_bbe2_1d90_7009_48ce3cf289ac
  b9afeea8_fc18_99f0_da5c_152be6e8a9ba["apply-prefix.test.ts"]
  b9afeea8_fc18_99f0_da5c_152be6e8a9ba --> 7edb575e_bbe2_1d90_7009_48ce3cf289ac
  e3ff65c3_9289_f51d_f9f2_0e1b35feacce["transform-tw-prefix.test.ts"]
  e3ff65c3_9289_f51d_f9f2_0e1b35feacce --> 7edb575e_bbe2_1d90_7009_48ce3cf289ac
  style 7edb575e_bbe2_1d90_7009_48ce3cf289ac fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import { Transformer } from "@/src/utils/transformers"
import { SyntaxKind } from "ts-morph"

import {
  TailwindVersion,
  getProjectTailwindVersionFromConfig,
} from "../get-project-info"
import { splitClassName } from "./transform-css-vars"

export const transformTwPrefixes: Transformer = async ({
  sourceFile,
  config,
}) => {
  if (!config.tailwind?.prefix) {
    return sourceFile
  }
  const tailwindVersion = await getProjectTailwindVersionFromConfig(config)

  // Find the cva function calls.
  sourceFile
    .getDescendantsOfKind(SyntaxKind.CallExpression)
    .filter((node) => node.getExpression().getText() === "cva")
    .forEach((node) => {
      // cva(base, ...)
      if (node.getArguments()[0]?.isKind(SyntaxKind.StringLiteral)) {
        const defaultClassNames = node.getArguments()[0]
        if (defaultClassNames) {
          defaultClassNames.replaceWithText(
            `"${applyPrefix(
              defaultClassNames.getText()?.replace(/"|'/g, ""),
              config.tailwind.prefix,
              tailwindVersion
            )}"`
          )
        }
      }

      // cva(..., { variants: { ... } })
      if (node.getArguments()[1]?.isKind(SyntaxKind.ObjectLiteralExpression)) {
        node
          .getArguments()[1]
          ?.getDescendantsOfKind(SyntaxKind.PropertyAssignment)
          .find((node) => node.getName() === "variants")
          ?.getDescendantsOfKind(SyntaxKind.PropertyAssignment)
          .forEach((node) => {
            node
              .getDescendantsOfKind(SyntaxKind.PropertyAssignment)
              .forEach((node) => {
                const classNames = node.getInitializerIfKind(
                  SyntaxKind.StringLiteral
                )
                if (classNames) {
                  classNames?.replaceWithText(
                    `"${applyPrefix(
                      classNames.getText()?.replace(/"|'/g, ""),
                      config.tailwind.prefix,
                      tailwindVersion
                    )}"`
                  )
                }
// ... (174 more lines)

Subdomains

Frequently Asked Questions

What does transform-tw-prefix.ts do?
transform-tw-prefix.ts is a source file in the ui codebase, written in typescript. It belongs to the FrameworkTooling domain, CLICore subdomain.
What functions are defined in transform-tw-prefix.ts?
transform-tw-prefix.ts defines 3 function(s): applyPrefix, applyPrefixesCss, transformTwPrefixes.
What does transform-tw-prefix.ts depend on?
transform-tw-prefix.ts imports 7 module(s): TailwindVersion, get-project-info.ts, getProjectTailwindVersionFromConfig, splitClassName, transform-css-vars.ts, transformers, ts-morph.
What files import transform-tw-prefix.ts?
transform-tw-prefix.ts is imported by 3 file(s): apply-prefix.test.ts, index.ts, transform-tw-prefix.test.ts.
Where is transform-tw-prefix.ts in the architecture?
transform-tw-prefix.ts is located at packages/shadcn/src/utils/transformers/transform-tw-prefix.ts (domain: FrameworkTooling, subdomain: CLICore, 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