Home / Function/ migrateArbitraryVariants() — tailwindcss Function Reference

migrateArbitraryVariants() — tailwindcss Function Reference

Architecture documentation for the migrateArbitraryVariants() function in migrate-arbitrary-variants.ts from the tailwindcss codebase.

Entity Profile

Dependency Diagram

graph TD
  bc19ae8d_4f83_e280_be05_e35eee14b3e7["migrateArbitraryVariants()"]
  dfcf938d_abe9_684f_720a_29a0a1797759["migrate-arbitrary-variants.ts"]
  bc19ae8d_4f83_e280_be05_e35eee14b3e7 -->|defined in| dfcf938d_abe9_684f_720a_29a0a1797759
  81ec8f98_1fb2_d7c3_dd65_3a9e51b3be39["prepareDesignSystemStorage()"]
  bc19ae8d_4f83_e280_be05_e35eee14b3e7 -->|calls| 81ec8f98_1fb2_d7c3_dd65_3a9e51b3be39
  f29ee016_da0a_a564_1658_fedaaac680b6["cloneCandidate()"]
  bc19ae8d_4f83_e280_be05_e35eee14b3e7 -->|calls| f29ee016_da0a_a564_1658_fedaaac680b6
  02a5a469_a54f_7532_8b33_d407c3c7f34a["printVariant()"]
  bc19ae8d_4f83_e280_be05_e35eee14b3e7 -->|calls| 02a5a469_a54f_7532_8b33_d407c3c7f34a
  7ba77268_84c7_7083_8f22_251a4a791d25["parseVariant()"]
  bc19ae8d_4f83_e280_be05_e35eee14b3e7 -->|calls| 7ba77268_84c7_7083_8f22_251a4a791d25
  171d2039_b637_0b5d_5082_71ca42e05d86["replaceObject()"]
  bc19ae8d_4f83_e280_be05_e35eee14b3e7 -->|calls| 171d2039_b637_0b5d_5082_71ca42e05d86
  87ba7eab_3a52_d53e_dfd4_e507e9763b55["printCandidate()"]
  bc19ae8d_4f83_e280_be05_e35eee14b3e7 -->|calls| 87ba7eab_3a52_d53e_dfd4_e507e9763b55
  ef9ad758_33f4_0d23_fff8_8eeaf71d00d8["parseCandidate()"]
  bc19ae8d_4f83_e280_be05_e35eee14b3e7 -->|calls| ef9ad758_33f4_0d23_fff8_8eeaf71d00d8
  ca4a0b1a_7c06_9648_ae90_2860010811a5["walkVariants()"]
  bc19ae8d_4f83_e280_be05_e35eee14b3e7 -->|calls| ca4a0b1a_7c06_9648_ae90_2860010811a5
  style bc19ae8d_4f83_e280_be05_e35eee14b3e7 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/@tailwindcss-upgrade/src/codemods/template/migrate-arbitrary-variants.ts lines 13–51

export function migrateArbitraryVariants(
  baseDesignSystem: DesignSystem,
  _userConfig: Config | null,
  rawCandidate: string,
): string {
  let designSystem = prepareDesignSystemStorage(baseDesignSystem)
  let signatures = designSystem.storage[VARIANT_SIGNATURE_KEY]
  let variants = designSystem.storage[PRE_COMPUTED_VARIANTS_KEY]

  for (let readonlyCandidate of designSystem.parseCandidate(rawCandidate)) {
    // We are only interested in the variants
    if (readonlyCandidate.variants.length <= 0) return rawCandidate

    // The below logic makes use of mutation. Since candidates in the
    // DesignSystem are cached, we can't mutate them directly.
    let candidate = cloneCandidate(readonlyCandidate) as Writable<typeof readonlyCandidate>

    for (let [variant] of walkVariants(candidate)) {
      if (variant.kind === 'compound') continue

      let targetString = designSystem.printVariant(variant)
      let targetSignature = signatures.get(targetString)
      if (typeof targetSignature !== 'string') continue

      let foundVariants = variants.get(targetSignature)
      if (foundVariants.length !== 1) continue

      let foundVariant = foundVariants[0]
      let parsedVariant = designSystem.parseVariant(foundVariant)
      if (parsedVariant === null) continue

      replaceObject(variant, parsedVariant)
    }

    return designSystem.printCandidate(candidate)
  }

  return rawCandidate
}

Subdomains

Frequently Asked Questions

What does migrateArbitraryVariants() do?
migrateArbitraryVariants() is a function in the tailwindcss codebase, defined in packages/@tailwindcss-upgrade/src/codemods/template/migrate-arbitrary-variants.ts.
Where is migrateArbitraryVariants() defined?
migrateArbitraryVariants() is defined in packages/@tailwindcss-upgrade/src/codemods/template/migrate-arbitrary-variants.ts at line 13.
What does migrateArbitraryVariants() call?
migrateArbitraryVariants() calls 8 function(s): cloneCandidate, parseCandidate, parseVariant, prepareDesignSystemStorage, printCandidate, printVariant, replaceObject, walkVariants.

Analyze Your Own Codebase

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

Try Supermodel Free