Skip to content

Commit 8ae2a32

Browse files
RobinMalfaitadamwathan
authored andcommitted
hoist selectorParser setup code
No need to re-create the selectorParser in every call.
1 parent fab4d7b commit 8ae2a32

File tree

1 file changed

+39
-40
lines changed

1 file changed

+39
-40
lines changed

src/lib/substituteVariantsAtRules.js

Lines changed: 39 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@ import prefixSelector from '../util/prefixSelector'
66

77
function generatePseudoClassVariant(pseudoClass, selectorPrefix = pseudoClass) {
88
return generateVariantFunction(({ modifySelectors, separator }) => {
9-
return modifySelectors(({ selector }) => {
10-
return selectorParser(selectors => {
11-
selectors.walkClasses(sel => {
12-
sel.value = `${selectorPrefix}${separator}${sel.value}`
13-
sel.parent.insertAfter(sel, selectorParser.pseudo({ value: `:${pseudoClass}` }))
14-
})
15-
}).processSync(selector)
9+
const parser = selectorParser(selectors => {
10+
selectors.walkClasses(sel => {
11+
sel.value = `${selectorPrefix}${separator}${sel.value}`
12+
sel.parent.insertAfter(sel, selectorParser.pseudo({ value: `:${pseudoClass}` }))
13+
})
1614
})
15+
16+
return modifySelectors(({ selector }) => parser.processSync(selector))
1717
})
1818
}
1919

@@ -24,13 +24,12 @@ function ensureIncludesDefault(variants) {
2424
const defaultVariantGenerators = config => ({
2525
default: generateVariantFunction(() => {}),
2626
'motion-safe': generateVariantFunction(({ container, separator, modifySelectors }) => {
27-
const modified = modifySelectors(({ selector }) => {
28-
return selectorParser(selectors => {
29-
selectors.walkClasses(sel => {
30-
sel.value = `motion-safe${separator}${sel.value}`
31-
})
32-
}).processSync(selector)
27+
const parser = selectorParser(selectors => {
28+
selectors.walkClasses(sel => {
29+
sel.value = `motion-safe${separator}${sel.value}`
30+
})
3331
})
32+
const modified = modifySelectors(({ selector }) => parser.processSync(selector))
3433
const mediaQuery = postcss.atRule({
3534
name: 'media',
3635
params: '(prefers-reduced-motion: no-preference)',
@@ -39,42 +38,42 @@ const defaultVariantGenerators = config => ({
3938
container.append(mediaQuery)
4039
}),
4140
'motion-reduce': generateVariantFunction(({ container, separator, modifySelectors }) => {
42-
const modified = modifySelectors(({ selector }) => {
43-
return selectorParser(selectors => {
44-
selectors.walkClasses(sel => {
45-
sel.value = `motion-reduce${separator}${sel.value}`
46-
})
47-
}).processSync(selector)
41+
const parser = selectorParser(selectors => {
42+
selectors.walkClasses(sel => {
43+
sel.value = `motion-reduce${separator}${sel.value}`
44+
})
45+
})
46+
const modified = modifySelectors(({ selector }) => parser.processSync(selector))
47+
const mediaQuery = postcss.atRule({
48+
name: 'media',
49+
params: '(prefers-reduced-motion: reduce)',
4850
})
49-
const mediaQuery = postcss.atRule({ name: 'media', params: '(prefers-reduced-motion: reduce)' })
5051
mediaQuery.append(modified)
5152
container.append(mediaQuery)
5253
}),
5354
'group-hover': generateVariantFunction(({ modifySelectors, separator }) => {
54-
return modifySelectors(({ selector }) => {
55-
return selectorParser(selectors => {
56-
selectors.walkClasses(sel => {
57-
sel.value = `group-hover${separator}${sel.value}`
58-
sel.parent.insertBefore(
59-
sel,
60-
selectorParser().astSync(prefixSelector(config.prefix, '.group:hover '))
61-
)
62-
})
63-
}).processSync(selector)
55+
const parser = selectorParser(selectors => {
56+
selectors.walkClasses(sel => {
57+
sel.value = `group-hover${separator}${sel.value}`
58+
sel.parent.insertBefore(
59+
sel,
60+
selectorParser().astSync(prefixSelector(config.prefix, '.group:hover '))
61+
)
62+
})
6463
})
64+
return modifySelectors(({ selector }) => parser.processSync(selector))
6565
}),
6666
'group-focus': generateVariantFunction(({ modifySelectors, separator }) => {
67-
return modifySelectors(({ selector }) => {
68-
return selectorParser(selectors => {
69-
selectors.walkClasses(sel => {
70-
sel.value = `group-focus${separator}${sel.value}`
71-
sel.parent.insertBefore(
72-
sel,
73-
selectorParser().astSync(prefixSelector(config.prefix, '.group:focus '))
74-
)
75-
})
76-
}).processSync(selector)
67+
const parser = selectorParser(selectors => {
68+
selectors.walkClasses(sel => {
69+
sel.value = `group-focus${separator}${sel.value}`
70+
sel.parent.insertBefore(
71+
sel,
72+
selectorParser().astSync(prefixSelector(config.prefix, '.group:focus '))
73+
)
74+
})
7775
})
76+
return modifySelectors(({ selector }) => parser.processSync(selector))
7877
}),
7978
hover: generatePseudoClassVariant('hover'),
8079
'focus-within': generatePseudoClassVariant('focus-within'),

0 commit comments

Comments
 (0)