Skip to content

Commit ccf64b6

Browse files
committed
fix #5, #9
1 parent e417b51 commit ccf64b6

File tree

2 files changed

+62
-35
lines changed

2 files changed

+62
-35
lines changed

src/TailwindConverter.ts

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -91,12 +91,14 @@ export class TailwindConverter {
9191

9292
const nodes = nodesManager.getNodes();
9393
nodes.forEach(node => {
94-
node.rule.prepend(
95-
new AtRule({
96-
name: 'apply',
97-
params: node.tailwindClasses.join(' '),
98-
})
99-
);
94+
if (node.tailwindClasses.length) {
95+
node.rule.prepend(
96+
new AtRule({
97+
name: 'apply',
98+
params: node.tailwindClasses.join(' '),
99+
})
100+
);
101+
}
100102
});
101103

102104
this.cleanRaws(parsed.root);
@@ -185,17 +187,17 @@ export class TailwindConverter {
185187
if (containerClassPrefix) {
186188
return {
187189
key: baseSelector,
188-
fallbackRule: rule,
189-
classesPrefixWhenFound: containerClassPrefix + classPrefix,
190+
originalRule: rule,
191+
classesPrefix: containerClassPrefix + classPrefix,
190192
tailwindClasses,
191193
};
192194
}
193195

194196
if (classPrefix) {
195197
return {
196198
key: TailwindNodesManager.convertRuleToKey(rule, baseSelector),
197-
fallbackRule: rule,
198-
classesPrefixWhenFound: classPrefix,
199+
originalRule: rule,
200+
classesPrefix: classPrefix,
199201
tailwindClasses,
200202
};
201203
}

src/TailwindNodesManager.ts

Lines changed: 50 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { AtRule, Rule } from 'postcss';
1+
import { type AtRule, type Node, Rule, ChildNode } from 'postcss';
22
import { isAtRuleNode } from './utils/isAtRuleNode';
33
import { isChildNode } from './utils/isChildNode';
44

@@ -9,8 +9,8 @@ export interface ResolvedTailwindNode {
99

1010
export interface UnresolvedTailwindNode {
1111
key: string;
12-
fallbackRule: Rule;
13-
classesPrefixWhenFound: string;
12+
originalRule: Rule;
13+
classesPrefix: string;
1414
tailwindClasses: string[];
1515
}
1616

@@ -40,33 +40,43 @@ export class TailwindNodesManager {
4040

4141
mergeNode(node: TailwindNode) {
4242
const nodeIsResolved = isResolvedTailwindNode(node);
43-
const key = nodeIsResolved
43+
const nodeKey = nodeIsResolved
4444
? TailwindNodesManager.convertRuleToKey(node.rule)
4545
: node.key;
46-
const foundNode = this.nodesMap.get(key);
47-
48-
if (!foundNode) {
49-
if (nodeIsResolved) {
50-
this.nodesMap.set(key, node);
51-
} else {
52-
this.nodesMap.set(
53-
TailwindNodesManager.convertRuleToKey(node.fallbackRule),
54-
{
55-
rule: node.fallbackRule,
56-
tailwindClasses: node.tailwindClasses,
57-
}
58-
);
59-
}
46+
const foundNode = this.nodesMap.get(nodeKey);
47+
48+
if (foundNode) {
49+
foundNode.tailwindClasses = foundNode.tailwindClasses.concat(
50+
nodeIsResolved
51+
? node.tailwindClasses
52+
: node.tailwindClasses.map(
53+
className => `${node.classesPrefix}${className}`
54+
)
55+
);
56+
6057
return;
6158
}
6259

63-
foundNode.tailwindClasses = foundNode.tailwindClasses.concat(
64-
nodeIsResolved
65-
? node.tailwindClasses
66-
: node.tailwindClasses.map(
67-
className => `${node.classesPrefixWhenFound}${className}`
68-
)
69-
);
60+
if (nodeIsResolved) {
61+
this.nodesMap.set(nodeKey, node);
62+
} else {
63+
const newRule = new Rule({
64+
// TODO: CONVERT NODE KEY TO RULE!!
65+
selector: nodeKey,
66+
});
67+
68+
const rootChild = this.upToRootChild(node.originalRule);
69+
if (rootChild) {
70+
node.originalRule.root().insertBefore(rootChild, newRule);
71+
}
72+
73+
this.nodesMap.set(nodeKey, {
74+
rule: newRule,
75+
tailwindClasses: node.tailwindClasses.map(
76+
className => `${node.classesPrefix}${className}`
77+
),
78+
});
79+
}
7080
}
7181

7282
mergeNodes(nodes: TailwindNode[]) {
@@ -87,6 +97,21 @@ export class TailwindNodesManager {
8797
return Array.from(this.nodesMap.values());
8898
}
8999

100+
protected upToRootChild(node: Node) {
101+
let childNode: ChildNode | null = null;
102+
103+
while (
104+
node.parent &&
105+
node.parent.type !== 'root' &&
106+
isChildNode(node.parent)
107+
) {
108+
childNode = node = node.parent;
109+
continue;
110+
}
111+
112+
return childNode;
113+
}
114+
90115
static convertRuleToKey(
91116
rule: Rule,
92117
overriddenSelector: string | null = null

0 commit comments

Comments
 (0)