@@ -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,31 @@ 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+ . stdout ( Stdio :: piped ( ) )
301+ . stderr ( Stdio :: piped ( ) )
302+ . spawn ( ) ?;
303+ let child_stdout = child. stdout . take ( ) . unwrap ( ) ;
304+ let child_stderr = child. stderr . take ( ) . unwrap ( ) ;
305+
306+ let outputs = Mutex :: new ( Vec :: < StdOutput > :: new ( ) ) ;
307+ let ( ( ) , ( ) , exit_status) = try_join3 (
308+ collect_std_outputs ( & outputs, child_stdout, OutputKind :: StdOut ) ,
309+ collect_std_outputs ( & outputs, child_stderr, OutputKind :: StdErr ) ,
310+ async move { Ok ( child. wait ( ) . await ?) } ,
311+ )
312+ . await ?;
313+ return Ok ( ExecutedTask {
314+ std_outputs : outputs. into_inner ( ) . unwrap ( ) . into ( ) ,
315+ exit_status,
316+ path_reads : HashMap :: new ( ) ,
317+ path_writes : HashMap :: new ( ) ,
318+ } ) ;
319+ }
295320 let mut cmd = spy. new_command ( & task_parsed_command. program ) ;
296321 cmd. args ( & task_parsed_command. args ) ;
297322 cmd. envs ( & resolved_command. all_envs ) ;
0 commit comments