1
+ const isMemberExpression = require ( 'estree-is-member-expression' )
1
2
const cssResolve = require ( 'style-resolve' ) . sync
2
3
const transformAst = require ( 'transform-ast' )
3
4
const staticEval = require ( 'static-eval' )
@@ -18,6 +19,13 @@ function isBabelTemplateDefinition (node) {
18
19
node . callee . type === 'Identifier' && node . callee . name === '_taggedTemplateLiteral'
19
20
}
20
21
22
+ function isBubleTemplateDefinition ( node ) {
23
+ return node . type === 'CallExpression' &&
24
+ isMemberExpression ( node . callee , 'Object.freeze' ) &&
25
+ node . arguments [ 0 ] && node . arguments [ 0 ] . type === 'ArrayExpression' &&
26
+ node . arguments [ 0 ] . elements . every ( function ( el ) { return el . type === 'Literal' } )
27
+ }
28
+
21
29
// inline sheetify transform for browserify
22
30
// obj -> (str, opts) -> str
23
31
function transform ( filename , options ) {
@@ -61,6 +69,7 @@ function transform (filename, options) {
61
69
// judge us too harshly, we'll work on perf ✨soon✨ -yw
62
70
const nodes = [ ]
63
71
const babelTemplateObjects = { }
72
+ const bubleTemplateObjects = { }
64
73
const src = Buffer . concat ( bufs ) . toString ( 'utf8' )
65
74
var mname = null
66
75
var ast
@@ -117,11 +126,17 @@ function transform (filename, options) {
117
126
var css
118
127
var elements
119
128
120
- if ( node . type === 'VariableDeclarator' && node . init && isBabelTemplateDefinition ( node . init ) ) {
121
- // Babel generates helper calls like
122
- // _taggedTemplateLiteral([":host .class { color: hotpink; }"], [":host .class { color: hotpink; }"])
123
- // we only keep the "cooked" part
124
- babelTemplateObjects [ node . id . name ] = node . init . arguments [ 0 ]
129
+ if ( node . type === 'VariableDeclarator' && node . init ) {
130
+ if ( isBabelTemplateDefinition ( node . init ) ) {
131
+ // Babel generates helper calls like
132
+ // _taggedTemplateLiteral([":host .class { color: hotpink; }"], [":host .class { color: hotpink; }"])
133
+ // we only keep the "cooked" part
134
+ babelTemplateObjects [ node . id . name ] = node . init . arguments [ 0 ]
135
+ } else if ( isBubleTemplateDefinition ( node . init ) ) {
136
+ // Buble generates helper calls like
137
+ // Object.freeze([":host .class { color: hotpink; }"])
138
+ bubleTemplateObjects [ node . id . name ] = node . init . arguments [ 0 ]
139
+ }
125
140
}
126
141
127
142
if ( node . type === 'TemplateLiteral' && node . parent && node . parent . tag ) {
@@ -146,7 +161,12 @@ function transform (filename, options) {
146
161
} else if ( node . arguments [ 0 ] && node . arguments [ 0 ] . type === 'Identifier' ) {
147
162
// Babel generates code like
148
163
// sheetify(_templateObject)
149
- elements = babelTemplateObjects [ node . arguments [ 0 ] . name ] . elements
164
+ var arg = node . arguments [ 0 ] . name
165
+ if ( babelTemplateObjects [ arg ] ) {
166
+ elements = babelTemplateObjects [ arg ] . elements
167
+ } else if ( bubleTemplateObjects [ arg ] ) {
168
+ elements = bubleTemplateObjects [ arg ] . elements
169
+ }
150
170
}
151
171
152
172
if ( elements ) {
0 commit comments