Skip to content

Commit cfd4939

Browse files
committed
Refactor
1 parent 776d5bf commit cfd4939

File tree

1 file changed

+20
-7
lines changed

1 file changed

+20
-7
lines changed

src/util/prefixSelector.js

+20-7
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,29 @@ export default function (prefix, selector, prependNegative = false) {
1717
return selector
1818
}
1919

20+
/** @type {import('postcss-selector-parser').Root} */
2021
let ast = typeof selector === 'string' ? parser().astSync(selector) : selector
2122

22-
ast.walkClasses((classSelector) => {
23-
let baseClass = classSelector.value
24-
let shouldPlaceNegativeBeforePrefix = prependNegative && baseClass.startsWith('-')
23+
// ast.walk bails too early when returning so it's not usable here
24+
function prefixClasses(node) {
25+
// Prefix any classes we find
26+
if (node.type === 'class') {
27+
let baseClass = node.value
28+
let shouldPlaceNegativeBeforePrefix = prependNegative && baseClass.startsWith('-')
2529

26-
classSelector.value = shouldPlaceNegativeBeforePrefix
27-
? `-${prefix}${baseClass.slice(1)}`
28-
: `${prefix}${baseClass}`
29-
})
30+
node.value = shouldPlaceNegativeBeforePrefix
31+
? `-${prefix}${baseClass.slice(1)}`
32+
: `${prefix}${baseClass}`
33+
return
34+
}
35+
36+
// Keep looking for classes
37+
if (node.length) {
38+
node.each(prefixClasses)
39+
}
40+
}
41+
42+
ast.each(prefixClasses)
3043

3144
return typeof selector === 'string' ? ast.toString() : ast
3245
}

0 commit comments

Comments
 (0)