Skip to content

Commit

Permalink
Throw an error when applying the .group utility (#4666)
Browse files Browse the repository at this point in the history
  • Loading branch information
RobinMalfait authored Sep 1, 2021
1 parent 36a02ed commit 7852d4f
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 11 deletions.
10 changes: 10 additions & 0 deletions src/lib/expandApplyAtRules.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@ import { resolveMatches } from './generateRules'
import bigSign from '../util/bigSign'
import escapeClassName from '../util/escapeClassName'

function prefix(context, selector) {
let prefix = context.tailwindConfig.prefix
return typeof prefix === 'function' ? prefix(selector) : prefix + selector
}

function buildApplyCache(applyCandidates, context) {
for (let candidate of applyCandidates) {
if (context.notClassCache.has(candidate) || context.applyClassCache.has(candidate)) {
Expand Down Expand Up @@ -170,6 +175,11 @@ function processApply(root, context) {

for (let applyCandidate of applyCandidates) {
if (!applyClassCache.has(applyCandidate)) {
if (applyCandidate === prefix(context, 'group')) {
// TODO: Link to specific documentation page with error code.
throw apply.error(`@apply should not be used with the '${applyCandidate}' utility`)
}

throw apply.error(
`The \`${applyCandidate}\` class does not exist. If \`${applyCandidate}\` is a custom class, make sure it is defined within a \`@layer\` directive.`
)
Expand Down
5 changes: 2 additions & 3 deletions src/util/resolveConfig.js
Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,6 @@ export default function resolveConfig(configs) {
let allConfigs = [
...extractPluginConfigs(configs),
{
content: [],
prefix: '',
important: false,
separator: ':',
Expand Down Expand Up @@ -302,10 +301,10 @@ function normalizeConfig(config) {
content: (() => {
let { content, purge } = config

if (Array.isArray(content)) return content
if (Array.isArray(content?.content)) return content.content
if (Array.isArray(purge)) return purge
if (Array.isArray(purge?.content)) return purge.content
if (Array.isArray(content)) return content
if (Array.isArray(content?.content)) return content.content

return []
})(),
Expand Down
69 changes: 61 additions & 8 deletions tests/jit/apply.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,10 @@ function run(input, config = {}) {
})
}

function css(templates) {
return templates.join('')
}

test('@apply', () => {
let config = {
darkMode: 'class',
Expand Down Expand Up @@ -207,19 +211,68 @@ test('@apply error with nested @anyatrulehere', async () => {
}

let css = `
@tailwind components;
@tailwind utilities;
@tailwind components;
@tailwind utilities;
@layer components {
.foo {
@genie {
@apply text-black;
@layer components {
.foo {
@genie {
@apply text-black;
}
}
}
}
`
`

await expect(run(css, config)).rejects.toThrowError(
'@apply is not supported within nested at-rules like @genie'
)
})

test('@apply error when using .group utility', async () => {
let config = {
darkMode: 'class',
content: [{ raw: '<div class="foo"></div>' }],
corePlugins: { preflight: false },
plugins: [],
}

let input = css`
@tailwind components;
@tailwind utilities;
@layer components {
.foo {
@apply group;
}
}
`

await expect(run(input, config)).rejects.toThrowError(
`@apply should not be used with the 'group' utility`
)
})

test('@apply error when using a prefixed .group utility', async () => {
let config = {
prefix: 'tw-',
darkMode: 'class',
content: [{ raw: '<div class="foo"></div>' }],
corePlugins: { preflight: false },
plugins: [],
}

let css = `
@tailwind components;
@tailwind utilities;
@layer components {
.foo {
@apply tw-group;
}
}
`

await expect(run(css, config)).rejects.toThrowError(
`@apply should not be used with the 'tw-group' utility`
)
})

0 comments on commit 7852d4f

Please sign in to comment.