@@ -10,7 +10,7 @@ use bincode::{Decode, Encode};
1010use fspy:: { AccessMode , Spy , TrackedChild } ;
1111use supports_color:: { Stream , on} ;
1212
13- use futures_util:: future:: try_join4;
13+ use futures_util:: future:: { try_join3 , try_join4} ;
1414use serde:: { Deserialize , Serialize } ;
1515use tokio:: io:: { AsyncRead , AsyncReadExt as _, AsyncWrite , AsyncWriteExt as _} ;
1616use vite_path:: { AbsolutePath , RelativePathBuf } ;
@@ -292,6 +292,32 @@ pub async fn execute_task(
292292 cmd
293293 }
294294 TaskCommand :: Parsed ( task_parsed_command) => {
295+ if resolved_command. fingerprint . command . is_vite ( ) {
296+ let mut child = tokio:: process:: Command :: new ( "vite" )
297+ . args ( & task_parsed_command. args )
298+ . envs ( & resolved_command. all_envs )
299+ . envs ( & task_parsed_command. envs )
300+ . current_dir ( base_dir. join ( & resolved_command. fingerprint . cwd ) )
301+ . stdout ( Stdio :: piped ( ) )
302+ . stderr ( Stdio :: piped ( ) )
303+ . spawn ( ) ?;
304+ let child_stdout = child. stdout . take ( ) . unwrap ( ) ;
305+ let child_stderr = child. stderr . take ( ) . unwrap ( ) ;
306+
307+ let outputs = Mutex :: new ( Vec :: < StdOutput > :: new ( ) ) ;
308+ let ( ( ) , ( ) , exit_status) = try_join3 (
309+ collect_std_outputs ( & outputs, child_stdout, OutputKind :: StdOut ) ,
310+ collect_std_outputs ( & outputs, child_stderr, OutputKind :: StdErr ) ,
311+ async move { Ok ( child. wait ( ) . await ?) } ,
312+ )
313+ . await ?;
314+ return Ok ( ExecutedTask {
315+ std_outputs : outputs. into_inner ( ) . unwrap ( ) . into ( ) ,
316+ exit_status,
317+ path_reads : HashMap :: new ( ) ,
318+ path_writes : HashMap :: new ( ) ,
319+ } ) ;
320+ }
295321 let mut cmd = spy. new_command ( & task_parsed_command. program ) ;
296322 cmd. args ( & task_parsed_command. args ) ;
297323 cmd. envs ( & resolved_command. all_envs ) ;
0 commit comments