diff options
Diffstat (limited to 'node_modules/tailwindcss/src/lib/normalizeTailwindDirectives.js')
| -rw-r--r-- | node_modules/tailwindcss/src/lib/normalizeTailwindDirectives.js | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/node_modules/tailwindcss/src/lib/normalizeTailwindDirectives.js b/node_modules/tailwindcss/src/lib/normalizeTailwindDirectives.js new file mode 100644 index 0000000..3349a7e --- /dev/null +++ b/node_modules/tailwindcss/src/lib/normalizeTailwindDirectives.js @@ -0,0 +1,84 @@ +import log from '../util/log' + +export default function normalizeTailwindDirectives(root) { + let tailwindDirectives = new Set() + let layerDirectives = new Set() + let applyDirectives = new Set() + + root.walkAtRules((atRule) => { + if (atRule.name === 'apply') { + applyDirectives.add(atRule) + } + + if (atRule.name === 'import') { + if (atRule.params === '"tailwindcss/base"' || atRule.params === "'tailwindcss/base'") { + atRule.name = 'tailwind' + atRule.params = 'base' + } else if ( + atRule.params === '"tailwindcss/components"' || + atRule.params === "'tailwindcss/components'" + ) { + atRule.name = 'tailwind' + atRule.params = 'components' + } else if ( + atRule.params === '"tailwindcss/utilities"' || + atRule.params === "'tailwindcss/utilities'" + ) { + atRule.name = 'tailwind' + atRule.params = 'utilities' + } else if ( + atRule.params === '"tailwindcss/screens"' || + atRule.params === "'tailwindcss/screens'" || + atRule.params === '"tailwindcss/variants"' || + atRule.params === "'tailwindcss/variants'" + ) { + atRule.name = 'tailwind' + atRule.params = 'variants' + } + } + + if (atRule.name === 'tailwind') { + if (atRule.params === 'screens') { + atRule.params = 'variants' + } + tailwindDirectives.add(atRule.params) + } + + if (['layer', 'responsive', 'variants'].includes(atRule.name)) { + if (['responsive', 'variants'].includes(atRule.name)) { + log.warn(`${atRule.name}-at-rule-deprecated`, [ + `The \`@${atRule.name}\` directive has been deprecated in Tailwind CSS v3.0.`, + `Use \`@layer utilities\` or \`@layer components\` instead.`, + 'https://tailwindcss.com/docs/upgrade-guide#replace-variants-with-layer', + ]) + } + layerDirectives.add(atRule) + } + }) + + if ( + !tailwindDirectives.has('base') || + !tailwindDirectives.has('components') || + !tailwindDirectives.has('utilities') + ) { + for (let rule of layerDirectives) { + if (rule.name === 'layer' && ['base', 'components', 'utilities'].includes(rule.params)) { + if (!tailwindDirectives.has(rule.params)) { + throw rule.error( + `\`@layer ${rule.params}\` is used but no matching \`@tailwind ${rule.params}\` directive is present.` + ) + } + } else if (rule.name === 'responsive') { + if (!tailwindDirectives.has('utilities')) { + throw rule.error('`@responsive` is used but `@tailwind utilities` is missing.') + } + } else if (rule.name === 'variants') { + if (!tailwindDirectives.has('utilities')) { + throw rule.error('`@variants` is used but `@tailwind utilities` is missing.') + } + } + } + } + + return { tailwindDirectives, applyDirectives } +} |