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
Domain
Subdomains
Calls
Called By
Source
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