migrateTailwindDirectives() — tailwindcss Function Reference
Architecture documentation for the migrateTailwindDirectives() function in migrate-tailwind-directives.ts from the tailwindcss codebase.
Entity Profile
Dependency Diagram
graph TD a0c1df04_dc25_e0d4_bd78_56b53b042278["migrateTailwindDirectives()"] 66040ab2_cdeb_5acc_9ce9_433509fb3703["migrate-tailwind-directives.ts"] a0c1df04_dc25_e0d4_bd78_56b53b042278 -->|defined in| 66040ab2_cdeb_5acc_9ce9_433509fb3703 afdd8826_c4ba_f675_924c_bce1adab8603["migrate()"] afdd8826_c4ba_f675_924c_bce1adab8603 -->|calls| a0c1df04_dc25_e0d4_bd78_56b53b042278 9ebd84f7_07bc_9b19_28a7_8bd93119c37e["migrateContents()"] 9ebd84f7_07bc_9b19_28a7_8bd93119c37e -->|calls| a0c1df04_dc25_e0d4_bd78_56b53b042278 2163a495_0f06_9629_df9e_883880a0a836["findTargetNode()"] a0c1df04_dc25_e0d4_bd78_56b53b042278 -->|calls| 2163a495_0f06_9629_df9e_883880a0a836 style a0c1df04_dc25_e0d4_bd78_56b53b042278 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
packages/@tailwindcss-upgrade/src/codemods/css/migrate-tailwind-directives.ts lines 5–128
export function migrateTailwindDirectives(options: { newPrefix: string | null }): Plugin {
let prefixParams = options.newPrefix ? ` prefix(${options.newPrefix})` : ''
function migrate(root: Root) {
let baseNode = null as AtRule | null
let utilitiesNode = null as AtRule | null
let orderedNodes: AtRule[] = []
let defaultImportNode = null as AtRule | null
let utilitiesImportNode = null as AtRule | null
let preflightImportNode = null as AtRule | null
let themeImportNode = null as AtRule | null
let layerOrder: string[] = []
root.walkAtRules((node) => {
// Migrate legacy `@import "tailwindcss/tailwind.css"`
if (node.name === 'import' && node.params.match(/^["']tailwindcss\/tailwind\.css["']$/)) {
node.params = node.params.replace('tailwindcss/tailwind.css', 'tailwindcss')
}
// Append any new prefix() param to existing `@import 'tailwindcss'` directives
if (node.name === 'import' && node.params.match(/^["']tailwindcss["']/)) {
node.params += prefixParams
}
// Track old imports and directives
else if (
(node.name === 'tailwind' && node.params === 'base') ||
(node.name === 'import' && node.params.match(/^["']tailwindcss\/base["']$/))
) {
layerOrder.push('base')
orderedNodes.push(node)
baseNode = node
} else if (
(node.name === 'tailwind' && node.params === 'utilities') ||
(node.name === 'import' && node.params.match(/^["']tailwindcss\/utilities["']$/))
) {
layerOrder.push('utilities')
orderedNodes.push(node)
utilitiesNode = node
}
// Remove directives that are not needed anymore
else if (
(node.name === 'tailwind' && node.params === 'components') ||
(node.name === 'tailwind' && node.params === 'screens') ||
(node.name === 'tailwind' && node.params === 'variants') ||
(node.name === 'import' && node.params.match(/^["']tailwindcss\/components["']$/))
) {
node.remove()
}
// Replace Tailwind CSS v2 directives that still worked in v3.
else if (node.name === 'responsive') {
if (node.nodes) {
for (let child of node.nodes) {
child.raws.tailwind_pretty = true
}
node.replaceWith(node.nodes)
} else {
node.remove()
}
}
})
// Insert default import if all directives are present
if (baseNode !== null && utilitiesNode !== null) {
if (!defaultImportNode) {
findTargetNode(orderedNodes).before(
new AtRule({ name: 'import', params: `'tailwindcss'${prefixParams}` }),
)
}
baseNode?.remove()
utilitiesNode?.remove()
}
// Insert individual imports if not all directives are present
else if (utilitiesNode !== null) {
if (!utilitiesImportNode) {
findTargetNode(orderedNodes).before(
Domain
Subdomains
Calls
Called By
Source
Frequently Asked Questions
What does migrateTailwindDirectives() do?
migrateTailwindDirectives() is a function in the tailwindcss codebase, defined in packages/@tailwindcss-upgrade/src/codemods/css/migrate-tailwind-directives.ts.
Where is migrateTailwindDirectives() defined?
migrateTailwindDirectives() is defined in packages/@tailwindcss-upgrade/src/codemods/css/migrate-tailwind-directives.ts at line 5.
What does migrateTailwindDirectives() call?
migrateTailwindDirectives() calls 1 function(s): findTargetNode.
What calls migrateTailwindDirectives()?
migrateTailwindDirectives() 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