@@ -8,6 +8,7 @@ mod gen_style;
88mod prop_modify_utils;
99mod util_type;
1010mod utils;
11+ mod vanilla_extract;
1112mod visit;
1213use crate :: extract_style:: extract_style_value:: ExtractStyleValue ;
1314use crate :: visit:: DevupVisitor ;
@@ -111,6 +112,40 @@ pub fn extract(
111112 } ) ;
112113 }
113114
115+ // Handle vanilla-extract style files (.css.ts, .css.js)
116+ let ( processed_code, is_vanilla_extract) = if vanilla_extract:: is_vanilla_extract_file ( filename)
117+ {
118+ match vanilla_extract:: execute_vanilla_extract ( code, & option. package ) {
119+ Ok ( collected) => {
120+ let generated =
121+ vanilla_extract:: collected_styles_to_code ( & collected, & option. package ) ;
122+ ( generated, true )
123+ }
124+ Err ( _) => {
125+ // Fall back to treating as regular file if execution fails
126+ ( code. to_string ( ) , false )
127+ }
128+ }
129+ } else {
130+ ( code. to_string ( ) , false )
131+ } ;
132+
133+ // For vanilla-extract files, if no styles were collected, return early
134+ if is_vanilla_extract && processed_code. is_empty ( ) {
135+ return Ok ( ExtractOutput {
136+ styles : HashSet :: new ( ) ,
137+ code : code. to_string ( ) ,
138+ map : None ,
139+ css_file : None ,
140+ } ) ;
141+ }
142+
143+ let code_to_parse = if is_vanilla_extract {
144+ & processed_code
145+ } else {
146+ code
147+ } ;
148+
114149 let source_type = SourceType :: from_path ( filename) ?;
115150 let css_file = if option. single_css {
116151 format ! ( "{}/devup-ui.css" , option. css_dir)
@@ -131,7 +166,7 @@ pub fn extract(
131166 mut program, // AST
132167 panicked, // Parser encountered an error it couldn't recover from
133168 ..
134- } = Parser :: new ( & allocator, code , source_type) . parse ( ) ;
169+ } = Parser :: new ( & allocator, code_to_parse , source_type) . parse ( ) ;
135170 if panicked {
136171 return Err ( "Parser panicked" . into ( ) ) ;
137172 }
0 commit comments