import type { AtRule, Plugin } from 'postcss'
import { segment } from '../../../tailwindcss/src/utils/segment'
export function migrateAtApply(): Plugin {
function migrate(atRule: AtRule) {
let utilities = atRule.params.split(/(\s+)/)
let important =
utilities[utilities.length - 1] === '!important' ||
utilities[utilities.length - 1] === '#{!important}'
if (important) utilities.pop()
let params = utilities.map((part) => {
if (part.trim() === '') return part
let variants = segment(part, ':')
let utility = variants.pop()!
if (important && utility[0] !== '!' && utility[utility.length - 1] !== '!') {
utility += '!'
}
if (utility[0] === '!') {
utility = `${utility.slice(1)}!`
}
return [...variants, utility].join(':')
})
atRule.params = params.join('').trim()
}
return {
postcssPlugin: '@tailwindcss/upgrade/migrate-at-apply',
OnceExit(root) {
root.walkAtRules('apply', migrate)
},
}
}