@@ -8,6 +8,7 @@ import substituteResponsiveAtRules from '../lib/substituteResponsiveAtRules'
88import convertLayerAtRulesToControlComments from '../lib/convertLayerAtRulesToControlComments'
99import substituteScreenAtRules from '../lib/substituteScreenAtRules'
1010import prefixSelector from '../util/prefixSelector'
11+ import { useMemo } from '../util/useMemo'
1112
1213function hasAtRule ( css , atRule ) {
1314 let foundAtRule = false
@@ -39,7 +40,7 @@ const tailwindApplyPlaceholder = selectorParser.attribute({
3940} )
4041
4142function generateRulesFromApply ( { rule, utilityName : className , classPosition } , replaceWith ) {
42- const processor = selectorParser ( selectors => {
43+ const parser = selectorParser ( selectors => {
4344 let i = 0
4445 selectors . walkClasses ( c => {
4546 if ( classPosition === i ++ && c . value === className ) {
@@ -52,7 +53,7 @@ function generateRulesFromApply({ rule, utilityName: className, classPosition },
5253 // You could argue we should make this replacement at the AST level, but if we believe
5354 // the placeholder string is safe from collisions then it is safe to do this is a simple
5455 // string replacement, and much, much faster.
55- return processor . processSync ( selector ) . replace ( '[__TAILWIND-APPLY-PLACEHOLDER__]' , replaceWith )
56+ return parser . processSync ( selector ) . replace ( '[__TAILWIND-APPLY-PLACEHOLDER__]' , replaceWith )
5657 } )
5758
5859 const cloned = rule . clone ( )
@@ -72,19 +73,16 @@ function generateRulesFromApply({ rule, utilityName: className, classPosition },
7273 return current
7374}
7475
75- function extractUtilityNames ( selector ) {
76- const processor = selectorParser ( selectors => {
77- let classes = [ ]
78-
79- selectors . walkClasses ( c => {
80- classes . push ( c )
81- } )
82-
83- return classes . map ( c => c . value )
84- } )
76+ const extractUtilityNamesParser = selectorParser ( selectors => {
77+ let classes = [ ]
78+ selectors . walkClasses ( c => classes . push ( c . value ) )
79+ return classes
80+ } )
8581
86- return processor . transformSync ( selector )
87- }
82+ const extractUtilityNames = useMemo (
83+ selector => extractUtilityNamesParser . transformSync ( selector ) ,
84+ selector => selector
85+ )
8886
8987function buildUtilityMap ( css ) {
9088 let index = 0
0 commit comments