tailwindcss/src/lib/substituteClassApplyAtRules.js
2017-08-27 18:02:41 -04:00

32 lines
831 B
JavaScript

import postcss from 'postcss'
import _ from 'lodash'
import findMixin from '../util/findMixin'
export default postcss.plugin('tailwind-apply', function(css) {
return function(css) {
css.walkRules(function(rule) {
rule.walkAtRules('apply', atRule => {
const mixins = postcss.list.space(atRule.params)
const [customProperties, classes] = _.partition(mixins, mixin => {
return _.startsWith(mixin, '--')
})
const decls = _.flatMap(classes, mixin => {
return findMixin(css, mixin, () => {
throw atRule.error(`No ${mixin} class found.`)
})
})
rule.insertBefore(atRule, decls)
atRule.params = customProperties.join(' ')
if (_.isEmpty(customProperties)) {
atRule.remove()
}
})
})
}
})