1
-
2
1
import {
3
2
IndexedClassRewrite ,
4
3
DynamicClasses ,
@@ -30,7 +29,8 @@ import {
30
29
isNotExpression ,
31
30
} from '@opticss/template-api' ;
32
31
import {
33
- assertNever
32
+ assertNever ,
33
+ unwrap ,
34
34
} from '@opticss/util' ;
35
35
import {
36
36
arrayExpression ,
@@ -43,6 +43,11 @@ import {
43
43
Expression ,
44
44
} from 'babel-types' ;
45
45
46
+ export const HELPER_FN_NAME = {
47
+ moduleName : 'c' ,
48
+ localName : 'c$$' ,
49
+ } ;
50
+
46
51
const enum SourceExpression {
47
52
ternary ,
48
53
dependency ,
@@ -71,27 +76,26 @@ const enum BooleanExpr {
71
76
and = - 3 ,
72
77
}
73
78
74
- export function classnamesHelper ( rewrite : IndexedClassRewrite < BlockObject > , element : JSXElementAnalysis , includeStaticClasses = false ) : CallExpression {
75
- return callExpression ( identifier ( 'cla$$' ) , [ arrayExpression ( constructArgs ( rewrite , element , includeStaticClasses ) ) ] ) ;
79
+ export function classnamesHelper ( rewrite : IndexedClassRewrite < BlockObject > , element : JSXElementAnalysis , helpFnName = HELPER_FN_NAME . localName , includeStaticClasses = false ) : CallExpression {
80
+ let args : Expression [ ] = [ arrayExpression ( constructArgs ( rewrite , element ) ) ] ;
81
+ let staticClassnames = rewrite . staticClasses ;
82
+ if ( includeStaticClasses && staticClassnames . length > 0 ) {
83
+ args . unshift ( stringLiteral ( staticClassnames . join ( ' ' ) ) ) ;
84
+ }
85
+ return callExpression ( identifier ( helpFnName ) , args ) ;
76
86
}
77
87
78
- function constructArgs ( rewrite : IndexedClassRewrite < BlockObject > , element : JSXElementAnalysis , includeStaticClasses : boolean ) : Array < Expression > {
88
+ function constructArgs ( rewrite : IndexedClassRewrite < BlockObject > , element : JSXElementAnalysis ) : Array < Expression > {
79
89
let expr = new Array < Expression > ( ) ;
80
- expr . push ( builders . number ( element . dynamicClasses . length + element . dynamicStates . length + ( includeStaticClasses ? element . static . size : 0 ) ) ) ;
90
+ expr . push ( builders . number ( element . dynamicClasses . length + element . dynamicStates . length ) ) ;
81
91
expr . push ( builders . number ( rewrite . dynamicClasses . length ) ) ;
82
- expr . push ( ...constructSourceArgs ( rewrite , element , includeStaticClasses ) ) ;
83
- expr . push ( ...constructOutputArgs ( rewrite , includeStaticClasses ) ) ;
92
+ expr . push ( ...constructSourceArgs ( rewrite , element ) ) ;
93
+ expr . push ( ...constructOutputArgs ( rewrite ) ) ;
84
94
return expr ;
85
95
}
86
96
87
- function constructSourceArgs ( rewrite : IndexedClassRewrite < BlockObject > , element : JSXElementAnalysis , includeStaticClasses : boolean ) : Array < Expression > {
97
+ function constructSourceArgs ( rewrite : IndexedClassRewrite < BlockObject > , element : JSXElementAnalysis ) : Array < Expression > {
88
98
let expr = new Array < Expression > ( ) ;
89
- if ( includeStaticClasses ) {
90
- for ( let style of element . static ) {
91
- expr . push ( builders . number ( SourceExpression . static ) ) ;
92
- expr . push ( builders . number ( rewrite . indexOf ( style ) ) ) ;
93
- }
94
- }
95
99
for ( let classes of element . dynamicClasses ) {
96
100
// type of expression
97
101
expr . push ( builders . number ( SourceExpression . ternary ) ) ;
@@ -143,15 +147,15 @@ function constructTernary(classes: DynamicClasses<TernaryAST>, rewrite: IndexedC
143
147
if ( isTrueCondition ( classes ) ) {
144
148
expr . push ( builders . number ( classes . whenTrue . length ) ) ;
145
149
// TODO: inheritance
146
- expr . push ( ...classes . whenTrue . map ( style => builders . number ( rewrite . indexOf ( style ) ) ) ) ;
150
+ expr . push ( ...classes . whenTrue . map ( style => builders . number ( unwrap ( rewrite . indexOf ( style ) ) ) ) ) ;
147
151
} else {
148
152
expr . push ( builders . number ( 0 ) ) ;
149
153
}
150
154
// The false styles
151
155
if ( isFalseCondition ( classes ) ) {
152
156
expr . push ( builders . number ( classes . whenFalse . length ) ) ;
153
157
// TODO: inheritance
154
- expr . push ( ...classes . whenFalse . map ( style => builders . number ( rewrite . indexOf ( style ) ) ) ) ;
158
+ expr . push ( ...classes . whenFalse . map ( style => builders . number ( unwrap ( rewrite . indexOf ( style ) ) ) ) ) ;
155
159
} else {
156
160
expr . push ( builders . number ( 0 ) ) ;
157
161
}
@@ -166,7 +170,7 @@ function constructTernary(classes: DynamicClasses<TernaryAST>, rewrite: IndexedC
166
170
function constructDependency ( stateExpr : Dependency , rewrite : IndexedClassRewrite < BlockObject > ) : Array < Expression > {
167
171
let expr = new Array < Expression > ( ) ;
168
172
expr . push ( builders . number ( 1 ) ) ;
169
- expr . push ( builders . number ( rewrite . indexOf ( stateExpr . container ) ) ) ;
173
+ expr . push ( builders . number ( unwrap ( rewrite . indexOf ( stateExpr . container ) ) ) ) ;
170
174
return expr ;
171
175
}
172
176
@@ -180,7 +184,7 @@ function constructStateReferences(stateExpr: HasState, rewrite: IndexedClassRewr
180
184
let expr = new Array < Expression > ( ) ;
181
185
// TODO: inheritance
182
186
expr . push ( builders . number ( 1 ) ) ;
183
- expr . push ( builders . number ( rewrite . indexOf ( stateExpr . state ) ) ) ;
187
+ expr . push ( builders . number ( unwrap ( rewrite . indexOf ( stateExpr . state ) ) ) ) ;
184
188
return expr ;
185
189
}
186
190
/*
@@ -213,12 +217,12 @@ function constructSwitch(stateExpr: Switch<StringAST> & HasGroup, rewrite: Index
213
217
let obj = stateExpr . group [ value ] ;
214
218
expr . push ( builders . string ( value ) ) ;
215
219
expr . push ( builders . number ( 1 ) ) ;
216
- expr . push ( builders . number ( rewrite . indexOf ( obj ) ) ) ;
220
+ expr . push ( builders . number ( unwrap ( rewrite . indexOf ( obj ) ) ) ) ;
217
221
}
218
222
return expr ;
219
223
}
220
224
221
- function constructOutputArgs ( rewrite : IndexedClassRewrite < any > , includeStaticClasses : boolean ) : Array < Expression > {
225
+ function constructOutputArgs ( rewrite : IndexedClassRewrite < any > ) : Array < Expression > {
222
226
let expr = new Array < Expression > ( ) ;
223
227
for ( let out of rewrite . dynamicClasses ) {
224
228
expr . push ( builders . string ( out ) ) ;
0 commit comments