Skip to content

Commit 80baf4a

Browse files
committed
Pass generated utilities around as array instead of root
When you do something like container.before(someRoot), PostCSS actually *mutates* someRoot, leaving it empty and moving its contents before the container. container.before(arrayOfNodes) on the other hand does no weird mutation. This PR makes sure generatedUtilities is an array of nodes instead of a PostCSS container to avoid this unexpected mutation. It makes it a bit more work to walk those nodes if they need to be transformed, but I think it's worth the trade-off. Can always write a helper function around that if the boilerplate starts to feel repetitive.
1 parent 89a18e2 commit 80baf4a

File tree

4 files changed

+13
-13
lines changed

4 files changed

+13
-13
lines changed

src/lib/substituteClassApplyAtRules.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ function buildClassTable(css) {
1818
function buildShadowTable(generatedUtilities) {
1919
const utilities = postcss.root()
2020

21-
generatedUtilities.walkAtRules('variants', atRule => {
21+
postcss.root({ nodes: generatedUtilities }).walkAtRules('variants', atRule => {
2222
utilities.append(atRule.clone().nodes)
2323
})
2424

src/lib/substituteTailwindAtRules.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,13 @@ export default function(config, { components: pluginComponents }, generatedUtili
2727
}
2828

2929
if (atRule.params === 'utilities') {
30-
// This needs to be cloned here or utilities end up being empty
31-
// in real projects. No idea why, struggling to reproduce in a
32-
// test. Hot fixing to publish a patch.
33-
const clonedUtilities = generatedUtilities.clone()
30+
const utilityTree = postcss.root({
31+
nodes: generatedUtilities,
32+
})
33+
34+
utilityTree.walk(node => (node.source = atRule.source))
3435

35-
clonedUtilities.walk(node => (node.source = atRule.source))
36-
atRule.before(clonedUtilities)
36+
atRule.before(utilityTree)
3737
atRule.remove()
3838
}
3939
})

src/processTailwindFeatures.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ export default function(lazyConfig) {
1616
const utilities = generateUtilities(config, processedPlugins.utilities)
1717

1818
return postcss([
19-
substituteTailwindAtRules(config, processedPlugins, utilities.clone()),
19+
substituteTailwindAtRules(config, processedPlugins, utilities),
2020
evaluateTailwindFunctions(config),
2121
substituteVariantsAtRules(config, processedPlugins),
2222
substituteResponsiveAtRules(config),
2323
substituteScreenAtRules(config),
24-
substituteClassApplyAtRules(config, utilities.clone()),
24+
substituteClassApplyAtRules(config, utilities),
2525
])
2626
}

src/util/generateUtilities.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ export default function(config, pluginUtilities) {
1717

1818
prefixTree(tailwindUtilityTree, config.options.prefix)
1919

20-
return _.tap(postcss.root(), root => {
21-
root.append(tailwindUtilityTree.nodes)
22-
root.append(pluginUtilities)
23-
})
20+
return [
21+
...tailwindUtilityTree.nodes,
22+
...pluginUtilities,
23+
]
2424
}

0 commit comments

Comments
 (0)