migrateAtLayerUtilities() — tailwindcss Function Reference
Architecture documentation for the migrateAtLayerUtilities() function in migrate-at-layer-utilities.ts from the tailwindcss codebase.
Entity Profile
Dependency Diagram
graph TD 9456daf3_1cee_2ab1_7f06_8dc2cedc967a["migrateAtLayerUtilities()"] 7de2c7a6_0dcf_0fb9_b7dd_c51f75983852["migrate-at-layer-utilities.ts"] 9456daf3_1cee_2ab1_7f06_8dc2cedc967a -->|defined in| 7de2c7a6_0dcf_0fb9_b7dd_c51f75983852 084f6f8b_fe90_a5cf_9cf6_6fcc92cc6163["migrate()"] 084f6f8b_fe90_a5cf_9cf6_6fcc92cc6163 -->|calls| 9456daf3_1cee_2ab1_7f06_8dc2cedc967a 1be562b7_fe23_7e22_03ec_31b3d101e5e5["migrateContents()"] 1be562b7_fe23_7e22_03ec_31b3d101e5e5 -->|calls| 9456daf3_1cee_2ab1_7f06_8dc2cedc967a 6cf757d4_aaad_b18d_cf21_ade24c6e2a77["isMajor()"] 9456daf3_1cee_2ab1_7f06_8dc2cedc967a -->|calls| 6cf757d4_aaad_b18d_cf21_ade24c6e2a77 dd7577d7_bdb0_88c5_438f_51bb090ec42a["walk()"] 9456daf3_1cee_2ab1_7f06_8dc2cedc967a -->|calls| dd7577d7_bdb0_88c5_438f_51bb090ec42a c58cbb33_f3cc_0b4f_844a_15bf66a1dc61["segment()"] 9456daf3_1cee_2ab1_7f06_8dc2cedc967a -->|calls| c58cbb33_f3cc_0b4f_844a_15bf66a1dc61 283bbe03_c84a_2fd0_18b3_45f5bfcaa273["layers()"] 9456daf3_1cee_2ab1_7f06_8dc2cedc967a -->|calls| 283bbe03_c84a_2fd0_18b3_45f5bfcaa273 8715b857_e3fa_5cb9_0f08_5bd585e387dd["walkDepth()"] 9456daf3_1cee_2ab1_7f06_8dc2cedc967a -->|calls| 8715b857_e3fa_5cb9_0f08_5bd585e387dd style 9456daf3_1cee_2ab1_7f06_8dc2cedc967a fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
packages/@tailwindcss-upgrade/src/codemods/css/migrate-at-layer-utilities.ts lines 8–318
export function migrateAtLayerUtilities(stylesheet: Stylesheet): Plugin {
function migrate(atRule: AtRule) {
// Migrating `@layer utilities` to `@utility` is only supported in Tailwind
// CSS v3 projects. Tailwind CSS v4 projects could also have `@layer
// utilities` but those aren't actual utilities.
if (!version.isMajor(3)) return
// Only migrate `@layer utilities` and `@layer components`.
if (atRule.params !== 'utilities' && atRule.params !== 'components') return
// Keep rules that should not be turned into utilities as is. This will
// include rules with element or ID selectors.
let defaultsAtRule = atRule.clone()
// Clone each rule with multiple selectors into their own rule with a single
// selector.
walk(atRule, (node) => {
if (node.type !== 'rule') return
// Clone the node for each selector
let selectors = segment(node.selector, ',')
if (selectors.length > 1) {
let clonedNodes: Rule[] = []
for (let selector of selectors) {
let clone = node.clone({ selector })
clonedNodes.push(clone)
}
node.replaceWith(clonedNodes)
}
return WalkAction.Skip
})
// Track all the classes that we want to create an `@utility` for.
let classes = new Set<string>()
walk(atRule, (node) => {
if (node.type !== 'rule') return
// Find all the classes in the selector
SelectorParser((selectors) => {
selectors.each((selector) => {
walk(selector, (selectorNode) => {
// Ignore everything in `:not(…)`
if (selectorNode.type === 'pseudo' && selectorNode.value === ':not') {
return WalkAction.Skip
}
if (selectorNode.type === 'class') {
classes.add(selectorNode.value)
}
})
})
}).processSync(node.selector, { updateSelector: false })
return WalkAction.Skip
})
// Remove all the nodes from the default `@layer utilities` that we know
// should be turned into `@utility` at-rules.
walk(defaultsAtRule, (node) => {
if (node.type !== 'rule') return
SelectorParser((selectors) => {
selectors.each((selector) => {
walk(selector, (selectorNode) => {
// Ignore everything in `:not(…)`
if (selectorNode.type === 'pseudo' && selectorNode.value === ':not') {
return WalkAction.Skip
}
// Remove the node if the class is in the list
if (selectorNode.type === 'class' && classes.has(selectorNode.value)) {
node.remove()
return WalkAction.Stop
}
})
})
}).processSync(node, { updateSelector: true })
})
Domain
Subdomains
Called By
Source
Frequently Asked Questions
What does migrateAtLayerUtilities() do?
migrateAtLayerUtilities() is a function in the tailwindcss codebase, defined in packages/@tailwindcss-upgrade/src/codemods/css/migrate-at-layer-utilities.ts.
Where is migrateAtLayerUtilities() defined?
migrateAtLayerUtilities() is defined in packages/@tailwindcss-upgrade/src/codemods/css/migrate-at-layer-utilities.ts at line 8.
What does migrateAtLayerUtilities() call?
migrateAtLayerUtilities() calls 5 function(s): isMajor, layers, segment, walk, walkDepth.
What calls migrateAtLayerUtilities()?
migrateAtLayerUtilities() is called by 2 function(s): migrate, migrateContents.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free