Home / File/ migrate-automatic-var-injection.ts — tailwindcss Source File

migrate-automatic-var-injection.ts — tailwindcss Source File

Architecture documentation for migrate-automatic-var-injection.ts, a typescript file in the tailwindcss codebase. 12 imports, 2 dependents.

File typescript CommandLineInterface Codemods 12 imports 2 dependents 5 functions

Entity Profile

Dependency Diagram

graph LR
  0064e910_a1e5_1dd9_95f1_ac33aef2f9b1["migrate-automatic-var-injection.ts"]
  ba6fca27_7720_5839_0f92_bc2abb8db636["candidate.ts"]
  0064e910_a1e5_1dd9_95f1_ac33aef2f9b1 --> ba6fca27_7720_5839_0f92_bc2abb8db636
  23c6e5a0_eac4_e9dd_7fcf_1e5c71d28310["cloneCandidate"]
  0064e910_a1e5_1dd9_95f1_ac33aef2f9b1 --> 23c6e5a0_eac4_e9dd_7fcf_1e5c71d28310
  da5d1116_ab2a_437a_6b13_c1429fd546fa["plugin-api.ts"]
  0064e910_a1e5_1dd9_95f1_ac33aef2f9b1 --> da5d1116_ab2a_437a_6b13_c1429fd546fa
  0255ffc0_a3d5_e883_5143_99660766448f["Config"]
  0064e910_a1e5_1dd9_95f1_ac33aef2f9b1 --> 0255ffc0_a3d5_e883_5143_99660766448f
  bdedd2f6_da4b_69dc_e990_0814b59fbe6e["design-system.ts"]
  0064e910_a1e5_1dd9_95f1_ac33aef2f9b1 --> bdedd2f6_da4b_69dc_e990_0814b59fbe6e
  665aa4ed_d86e_30e5_80d5_cd56b8ca8b62["DesignSystem"]
  0064e910_a1e5_1dd9_95f1_ac33aef2f9b1 --> 665aa4ed_d86e_30e5_80d5_cd56b8ca8b62
  0e933f20_08fb_5942_ec42_6626eaae653a["types.ts"]
  0064e910_a1e5_1dd9_95f1_ac33aef2f9b1 --> 0e933f20_08fb_5942_ec42_6626eaae653a
  d273a025_e48e_2770_95aa_3a966ac7fbec["Writable"]
  0064e910_a1e5_1dd9_95f1_ac33aef2f9b1 --> d273a025_e48e_2770_95aa_3a966ac7fbec
  d9175aea_5971_a6c1_773d_004ce3789372["value-parser.ts"]
  0064e910_a1e5_1dd9_95f1_ac33aef2f9b1 --> d9175aea_5971_a6c1_773d_004ce3789372
  1b8f1c54_b1e9_e18d_0719_b7ad92808185["walk.ts"]
  0064e910_a1e5_1dd9_95f1_ac33aef2f9b1 --> 1b8f1c54_b1e9_e18d_0719_b7ad92808185
  4982d9ce_98d4_85d9_44af_7cc47b93c482["walk"]
  0064e910_a1e5_1dd9_95f1_ac33aef2f9b1 --> 4982d9ce_98d4_85d9_44af_7cc47b93c482
  47187d1b_a6f7_f734_0752_446b87b5cd9e["WalkAction"]
  0064e910_a1e5_1dd9_95f1_ac33aef2f9b1 --> 47187d1b_a6f7_f734_0752_446b87b5cd9e
  15f752f8_b4fc_90e8_7c1a_7d2d7d8395e6["migrate-automatic-var-injection.test.ts"]
  15f752f8_b4fc_90e8_7c1a_7d2d7d8395e6 --> 0064e910_a1e5_1dd9_95f1_ac33aef2f9b1
  e39bed3f_bfbf_a8c6_90a0_aa2ce3be1ef4["migrate.ts"]
  e39bed3f_bfbf_a8c6_90a0_aa2ce3be1ef4 --> 0064e910_a1e5_1dd9_95f1_ac33aef2f9b1
  style 0064e910_a1e5_1dd9_95f1_ac33aef2f9b1 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

import { cloneCandidate, type Candidate, type Variant } from '../../../../tailwindcss/src/candidate'
import type { Config } from '../../../../tailwindcss/src/compat/plugin-api'
import type { DesignSystem } from '../../../../tailwindcss/src/design-system'
import type { Writable } from '../../../../tailwindcss/src/types'
import * as ValueParser from '../../../../tailwindcss/src/value-parser'
import { walk, WalkAction } from '../../../../tailwindcss/src/walk'

export function migrateAutomaticVarInjection(
  designSystem: DesignSystem,
  _userConfig: Config | null,
  rawCandidate: string,
): string {
  for (let readonlyCandidate of designSystem.parseCandidate(rawCandidate)) {
    // The below logic makes extended use of mutation. Since candidates in the
    // DesignSystem are cached, we can't mutate them directly.
    let candidate = cloneCandidate(readonlyCandidate) as Writable<Candidate>

    let didChange = false

    // Add `var(…)` in modifier position, e.g.:
    //
    // `bg-red-500/[--my-opacity]` => `bg-red-500/[var(--my-opacity)]`
    if (
      'modifier' in candidate &&
      candidate.modifier?.kind === 'arbitrary' &&
      !isAutomaticVarInjectionException(designSystem, candidate, candidate.modifier.value)
    ) {
      let { value, didChange: modifierDidChange } = injectVar(candidate.modifier.value)
      candidate.modifier.value = value
      didChange ||= modifierDidChange
    }

    // Add `var(…)` to all variants, e.g.:
    //
    // `supports-[--test]:flex'` => `supports-[var(--test)]:flex`
    for (let variant of candidate.variants) {
      let didChangeVariant = injectVarIntoVariant(designSystem, variant)
      if (didChangeVariant) {
        didChange = true
      }
    }

    // Add `var(…)` to arbitrary candidates, e.g.:
    //
    // `[color:--my-color]` => `[color:var(--my-color)]`
    if (
      candidate.kind === 'arbitrary' &&
      !isAutomaticVarInjectionException(designSystem, candidate, candidate.value)
    ) {
      let { value, didChange: valueDidChange } = injectVar(candidate.value)
      candidate.value = value
      didChange ||= valueDidChange
    }

    // Add `var(…)` to arbitrary values for functional candidates, e.g.:
    //
    // `bg-[--my-color]` => `bg-[var(--my-color)]`
    if (
      candidate.kind === 'functional' &&
      candidate.value &&
// ... (121 more lines)

Subdomains

Frequently Asked Questions

What does migrate-automatic-var-injection.ts do?
migrate-automatic-var-injection.ts is a source file in the tailwindcss codebase, written in typescript. It belongs to the CommandLineInterface domain, Codemods subdomain.
What functions are defined in migrate-automatic-var-injection.ts?
migrate-automatic-var-injection.ts defines 5 function(s): createEmptyCandidate, injectVar, injectVarIntoVariant, isAutomaticVarInjectionException, migrateAutomaticVarInjection.
What does migrate-automatic-var-injection.ts depend on?
migrate-automatic-var-injection.ts imports 12 module(s): Config, DesignSystem, WalkAction, Writable, candidate.ts, cloneCandidate, design-system.ts, plugin-api.ts, and 4 more.
What files import migrate-automatic-var-injection.ts?
migrate-automatic-var-injection.ts is imported by 2 file(s): migrate-automatic-var-injection.test.ts, migrate.ts.
Where is migrate-automatic-var-injection.ts in the architecture?
migrate-automatic-var-injection.ts is located at packages/@tailwindcss-upgrade/src/codemods/template/migrate-automatic-var-injection.ts (domain: CommandLineInterface, subdomain: Codemods, directory: packages/@tailwindcss-upgrade/src/codemods/template).

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free