@@ -46,99 +46,102 @@ function getClassNamesFromSelector(selector) {
46
46
return classNames
47
47
}
48
48
49
- async function process ( ast ) {
49
+ async function process ( groups ) {
50
50
const tree = { }
51
51
const commonContext = { }
52
52
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
+ }
67
78
}
68
- } )
69
79
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
+ }
96
101
} 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
+ }
108
110
}
109
111
}
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 )
113
115
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
+ }
130
132
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
+ }
139
142
}
140
143
}
141
- }
144
+ } )
142
145
} )
143
146
144
147
return { classNames : tree , context : commonContext }
0 commit comments