Home / Function/ migrateTheme() — tailwindcss Function Reference

migrateTheme() — tailwindcss Function Reference

Architecture documentation for the migrateTheme() function in migrate-js-config.ts from the tailwindcss codebase.

Entity Profile

Dependency Diagram

graph TD
  e26bfad3_530e_6523_7463_161205321110["migrateTheme()"]
  b2ba3368_7330_fe20_4543_9cafa8cfedc0["migrate-js-config.ts"]
  e26bfad3_530e_6523_7463_161205321110 -->|defined in| b2ba3368_7330_fe20_4543_9cafa8cfedc0
  1ef01211_e07d_fbec_dcb1_d3c7a3bfe061["migrateJsConfig()"]
  1ef01211_e07d_fbec_dcb1_d3c7a3bfe061 -->|calls| e26bfad3_530e_6523_7463_161205321110
  0ed24ba5_7c39_3f5a_fdbb_f973a617a172["resolveConfig()"]
  e26bfad3_530e_6523_7463_161205321110 -->|calls| 0ed24ba5_7c39_3f5a_fdbb_f973a617a172
  b28200b3_b5d3_7858_38e3_b07a399f3495["removeUnnecessarySpacingKeys()"]
  e26bfad3_530e_6523_7463_161205321110 -->|calls| b28200b3_b5d3_7858_38e3_b07a399f3495
  a3c47427_743d_aeb5_9ea9_81bd29d83bb4["keyframesToCss()"]
  e26bfad3_530e_6523_7463_161205321110 -->|calls| a3c47427_743d_aeb5_9ea9_81bd29d83bb4
  bd84428d_2ac4_b86f_d49f_6939ec1e5898["buildCustomContainerUtilityRules()"]
  e26bfad3_530e_6523_7463_161205321110 -->|calls| bd84428d_2ac4_b86f_d49f_6939ec1e5898
  f9b19679_c1f0_28d6_4d1a_31a10c52e42d["atRule()"]
  e26bfad3_530e_6523_7463_161205321110 -->|calls| f9b19679_c1f0_28d6_4d1a_31a10c52e42d
  2d6c8361_96d8_df0d_ca51_c62f179fdc73["parse()"]
  e26bfad3_530e_6523_7463_161205321110 -->|calls| 2d6c8361_96d8_df0d_ca51_c62f179fdc73
  f0444c59_74bb_21c0_b8e1_c65ad667fa51["themeableValues()"]
  e26bfad3_530e_6523_7463_161205321110 -->|calls| f0444c59_74bb_21c0_b8e1_c65ad667fa51
  221550f3_8829_561e_60fb_5a3a4abac7b8["isValidOpacityValue()"]
  e26bfad3_530e_6523_7463_161205321110 -->|calls| 221550f3_8829_561e_60fb_5a3a4abac7b8
  3f896f94_ed93_09c7_7ca5_c686b3dda89f["createSectionKey()"]
  e26bfad3_530e_6523_7463_161205321110 -->|calls| 3f896f94_ed93_09c7_7ca5_c686b3dda89f
  ae20c4fb_29d7_ca79_3c49_ca02c45d5369["keyPathToCssProperty()"]
  e26bfad3_530e_6523_7463_161205321110 -->|calls| ae20c4fb_29d7_ca79_3c49_ca02c45d5369
  433dc479_0296_0a89_fd12_79fc4ea2b8bd["escape()"]
  e26bfad3_530e_6523_7463_161205321110 -->|calls| 433dc479_0296_0a89_fd12_79fc4ea2b8bd
  2da63033_d079_7b37_5cfb_3877674a70b9["toCss()"]
  e26bfad3_530e_6523_7463_161205321110 -->|calls| 2da63033_d079_7b37_5cfb_3877674a70b9
  style e26bfad3_530e_6523_7463_161205321110 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

packages/@tailwindcss-upgrade/src/codemods/config/migrate-js-config.ts lines 97–290

async function migrateTheme(
  designSystem: DesignSystem,
  unresolvedConfig: Config,
  base: string,
): Promise<string> {
  // Resolve the config file without applying plugins and presets, as these are
  // migrated to CSS separately.
  let configToResolve: ConfigFile = {
    base,
    config: { ...unresolvedConfig, plugins: [], presets: undefined },
    reference: false,
    src: undefined,
  }
  let { resolvedConfig, replacedThemeKeys } = resolveConfig(designSystem, [configToResolve])

  let resetNamespaces = new Map<string, boolean>(
    Array.from(replacedThemeKeys.entries()).map(([key]) => [key, false]),
  )

  removeUnnecessarySpacingKeys(designSystem, resolvedConfig, replacedThemeKeys)

  let css = ''
  let prevSectionKey = ''
  let themeSection: string[] = []
  let keyframesCss = ''
  let variants = new Map<string, string>()

  // Special handling of specific theme keys:
  {
    if ('keyframes' in resolvedConfig.theme) {
      keyframesCss += keyframesToCss(resolvedConfig.theme.keyframes)
      delete resolvedConfig.theme.keyframes
    }

    if ('container' in resolvedConfig.theme) {
      let rules = buildCustomContainerUtilityRules(resolvedConfig.theme.container, designSystem)
      if (rules.length > 0) {
        // Using `theme` instead of `utility` so it sits before the `@layer
        // base` with compatibility CSS. While this is technically a utility, it
        // makes a bit more sense to emit this closer to the `@theme` values
        // since it is needed for backwards compatibility.
        css += `\n@tw-bucket theme {\n`
        css += toCss([atRule('@utility', 'container', rules)])
        css += '}\n' // @tw-bucket
      }
      delete resolvedConfig.theme.container
    }

    if ('aria' in resolvedConfig.theme) {
      for (let [key, value] of Object.entries(resolvedConfig.theme.aria ?? {})) {
        // Will be handled by bare values if the names match.
        // E.g.: `aria-foo:flex` should produce `[aria-foo="true"]`
        if (new RegExp(`^${key}=(['"]?)true\\1$`).test(`${value}`)) continue

        // Create custom variant
        variants.set(`aria-${key}`, `&[aria-${value}]`)
      }
      delete resolvedConfig.theme.aria
    }

    if ('data' in resolvedConfig.theme) {
      for (let [key, value] of Object.entries(resolvedConfig.theme.data ?? {})) {
        // Will be handled by bare values if the names match.
        // E.g.: `data-foo:flex` should produce `[data-foo]`
        if (key === value) continue

        // Create custom variant
        variants.set(`data-${key}`, `&[data-${value}]`)
      }
      delete resolvedConfig.theme.data
    }

    if ('supports' in resolvedConfig.theme) {
      for (let [key, value] of Object.entries(resolvedConfig.theme.supports ?? {})) {
        // Will be handled by bare values if the value of the declaration is a
        // CSS variable.
        let parsed = ValueParser.parse(`${value}`)

        // Unwrap the parens, e.g.: `(foo: var(--bar))` → `foo: var(--bar)`
        if (parsed.length === 1 && parsed[0].kind === 'function' && parsed[0].value === '') {
          parsed = parsed[0].nodes

Subdomains

Called By

Frequently Asked Questions

What does migrateTheme() do?
migrateTheme() is a function in the tailwindcss codebase, defined in packages/@tailwindcss-upgrade/src/codemods/config/migrate-js-config.ts.
Where is migrateTheme() defined?
migrateTheme() is defined in packages/@tailwindcss-upgrade/src/codemods/config/migrate-js-config.ts at line 97.
What does migrateTheme() call?
migrateTheme() calls 12 function(s): atRule, buildCustomContainerUtilityRules, createSectionKey, escape, isValidOpacityValue, keyPathToCssProperty, keyframesToCss, parse, and 4 more.
What calls migrateTheme()?
migrateTheme() is called by 1 function(s): migrateJsConfig.

Analyze Your Own Codebase

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

Try Supermodel Free