@@ -46,99 +46,102 @@ function getClassNamesFromSelector(selector) {
4646 return classNames
4747}
4848
49- async function process ( ast ) {
49+ async function process ( groups ) {
5050 const tree = { }
5151 const commonContext = { }
5252
53- ast . root . walkRules ( ( rule ) => {
54- const classNames = getClassNamesFromSelector ( rule . selector )
55-
56- const decls = { }
57- rule . walkDecls ( ( decl ) => {
58- if ( decls [ decl . prop ] ) {
59- decls [ decl . prop ] = [
60- ...( Array . isArray ( decls [ decl . prop ] )
61- ? decls [ decl . prop ]
62- : [ decls [ decl . prop ] ] ) ,
63- decl . value ,
64- ]
65- } else {
66- decls [ decl . prop ] = decl . value
53+ groups . forEach ( ( group ) => {
54+ group . root . walkRules ( ( rule ) => {
55+ const classNames = getClassNamesFromSelector ( rule . selector )
56+
57+ const decls = { }
58+ rule . walkDecls ( ( decl ) => {
59+ if ( decls [ decl . prop ] ) {
60+ decls [ decl . prop ] = [
61+ ...( Array . isArray ( decls [ decl . prop ] )
62+ ? decls [ decl . prop ]
63+ : [ decls [ decl . prop ] ] ) ,
64+ decl . value ,
65+ ]
66+ } else {
67+ decls [ decl . prop ] = decl . value
68+ }
69+ } )
70+
71+ let p = rule
72+ const keys = [ ]
73+ while ( p . parent . type !== 'root' ) {
74+ p = p . parent
75+ if ( p . type === 'atrule' ) {
76+ keys . push ( `@${ p . name } ${ p . params } ` )
77+ }
6778 }
68- } )
6979
70- let p = rule
71- const keys = [ ]
72- while ( p . parent . type !== 'root' ) {
73- p = p . parent
74- if ( p . type === 'atrule' ) {
75- keys . push ( `@${ p . name } ${ p . params } ` )
76- }
77- }
78-
79- for ( let i = 0 ; i < classNames . length ; i ++ ) {
80- const context = keys . concat ( [ ] )
81- const baseKeys = classNames [ i ] . className . split ( '__TAILWIND_SEPARATOR__' )
82- const contextKeys = baseKeys . slice ( 0 , baseKeys . length - 1 )
83- const index = [ ]
84-
85- const existing = dlv ( tree , baseKeys )
86- if ( typeof existing !== 'undefined' ) {
87- if ( Array . isArray ( existing ) ) {
88- const scopeIndex = existing . findIndex (
89- ( x ) =>
90- x . __scope === classNames [ i ] . scope &&
91- arraysEqual ( existing . __context , context )
92- )
93- if ( scopeIndex > - 1 ) {
94- keys . unshift ( scopeIndex )
95- index . push ( scopeIndex )
80+ for ( let i = 0 ; i < classNames . length ; i ++ ) {
81+ const context = keys . concat ( [ ] )
82+ const baseKeys = classNames [ i ] . className . split ( '__TAILWIND_SEPARATOR__' )
83+ const contextKeys = baseKeys . slice ( 0 , baseKeys . length - 1 )
84+ const index = [ ]
85+
86+ const existing = dlv ( tree , baseKeys )
87+ if ( typeof existing !== 'undefined' ) {
88+ if ( Array . isArray ( existing ) ) {
89+ const scopeIndex = existing . findIndex (
90+ ( x ) =>
91+ x . __scope === classNames [ i ] . scope &&
92+ arraysEqual ( existing . __context , context )
93+ )
94+ if ( scopeIndex > - 1 ) {
95+ keys . unshift ( scopeIndex )
96+ index . push ( scopeIndex )
97+ } else {
98+ keys . unshift ( existing . length )
99+ index . push ( existing . length )
100+ }
96101 } else {
97- keys . unshift ( existing . length )
98- index . push ( existing . length )
99- }
100- } else {
101- if (
102- existing . __scope !== classNames [ i ] . scope ||
103- ! arraysEqual ( existing . __context , context )
104- ) {
105- dset ( tree , baseKeys , [ existing ] )
106- keys . unshift ( 1 )
107- index . push ( 1 )
102+ if (
103+ existing . __scope !== classNames [ i ] . scope ||
104+ ! arraysEqual ( existing . __context , context )
105+ ) {
106+ dset ( tree , baseKeys , [ existing ] )
107+ keys . unshift ( 1 )
108+ index . push ( 1 )
109+ }
108110 }
109111 }
110- }
111- if ( classNames [ i ] . __rule ) {
112- dset ( tree , [ ...baseKeys , ...index , '__rule ' ] , true )
112+ if ( classNames [ i ] . __rule ) {
113+ dset ( tree , [ ... baseKeys , ... index , ' __rule' ] , true )
114+ dset ( tree , [ ...baseKeys , ...index , '__source ' ] , group . source )
113115
114- dsetEach ( tree , [ ...baseKeys , ...index ] , decls )
115- }
116- if ( classNames [ i ] . __pseudo ) {
117- dset ( tree , [ ...baseKeys , '__pseudo' ] , classNames [ i ] . __pseudo )
118- }
119- dset ( tree , [ ...baseKeys , ...index , '__scope' ] , classNames [ i ] . scope )
120- dset (
121- tree ,
122- [ ...baseKeys , ...index , '__context' ] ,
123- context . concat ( [ ] ) . reverse ( )
124- )
125-
126- // common context
127- if ( classNames [ i ] . __pseudo ) {
128- context . push ( ...classNames [ i ] . __pseudo )
129- }
116+ dsetEach ( tree , [ ...baseKeys , ...index ] , decls )
117+ }
118+ if ( classNames [ i ] . __pseudo ) {
119+ dset ( tree , [ ...baseKeys , '__pseudo' ] , classNames [ i ] . __pseudo )
120+ }
121+ dset ( tree , [ ...baseKeys , ...index , '__scope' ] , classNames [ i ] . scope )
122+ dset (
123+ tree ,
124+ [ ...baseKeys , ...index , '__context' ] ,
125+ context . concat ( [ ] ) . reverse ( )
126+ )
127+
128+ // common context
129+ if ( classNames [ i ] . __pseudo ) {
130+ context . push ( ...classNames [ i ] . __pseudo )
131+ }
130132
131- for ( let i = 0 ; i < contextKeys . length ; i ++ ) {
132- if ( typeof commonContext [ contextKeys [ i ] ] === 'undefined' ) {
133- commonContext [ contextKeys [ i ] ] = context
134- } else {
135- commonContext [ contextKeys [ i ] ] = intersection (
136- commonContext [ contextKeys [ i ] ] ,
137- context
138- )
133+ for ( let i = 0 ; i < contextKeys . length ; i ++ ) {
134+ if ( typeof commonContext [ contextKeys [ i ] ] === 'undefined' ) {
135+ commonContext [ contextKeys [ i ] ] = context
136+ } else {
137+ commonContext [ contextKeys [ i ] ] = intersection (
138+ commonContext [ contextKeys [ i ] ] ,
139+ context
140+ )
141+ }
139142 }
140143 }
141- }
144+ } )
142145 } )
143146
144147 return { classNames : tree , context : commonContext }
0 commit comments