1
1
use std:: { borrow:: Cow , io:: Write , path:: PathBuf , sync:: Arc , thread, time:: Duration } ;
2
2
3
3
use anyhow:: { Context , Result , anyhow, bail} ;
4
+ use flate2:: write:: GzEncoder ;
4
5
use futures_util:: TryFutureExt ;
5
6
use napi:: {
6
7
Env , JsFunction , JsObject , Status ,
@@ -363,21 +364,33 @@ pub fn project_new(
363
364
}
364
365
365
366
if let Some ( mut trace) = trace {
366
- // Trace presets
367
- match trace. as_str ( ) {
368
- "overview" | "1" => {
369
- trace = TRACING_NEXT_OVERVIEW_TARGETS . join ( "," ) ;
370
- }
371
- "next" => {
372
- trace = TRACING_NEXT_TARGETS . join ( "," ) ;
373
- }
374
- "turbopack" => {
375
- trace = TRACING_NEXT_TURBOPACK_TARGETS . join ( "," ) ;
376
- }
377
- "turbo-tasks" => {
378
- trace = TRACING_NEXT_TURBO_TASKS_TARGETS . join ( "," ) ;
379
- }
380
- _ => { }
367
+ trace = trace
368
+ . split ( "," )
369
+ . map ( |item| {
370
+ // Trace presets
371
+ match item {
372
+ "overview" | "1" => Cow :: Owned ( TRACING_NEXT_OVERVIEW_TARGETS . join ( "," ) ) ,
373
+ "next" => Cow :: Owned ( TRACING_NEXT_TARGETS . join ( "," ) ) ,
374
+ "turbopack" => Cow :: Owned ( TRACING_NEXT_TURBOPACK_TARGETS . join ( "," ) ) ,
375
+ "turbo-tasks" => Cow :: Owned ( TRACING_NEXT_TURBO_TASKS_TARGETS . join ( "," ) ) ,
376
+ _ => Cow :: Borrowed ( item) ,
377
+ }
378
+ } )
379
+ . intersperse_with ( || Cow :: Borrowed ( "," ) )
380
+ . collect :: < String > ( ) ;
381
+
382
+ enum Compression {
383
+ None ,
384
+ GzipFast ,
385
+ GzipBest ,
386
+ }
387
+ let mut compress = Compression :: None ;
388
+ if trace. ends_with ( ",gz" ) {
389
+ trace. drain ( trace. len ( ) - 3 ..) ;
390
+ compress = Compression :: GzipFast ;
391
+ } else if trace. ends_with ( ",gz-best" ) {
392
+ trace. drain ( trace. len ( ) - 8 ..) ;
393
+ compress = Compression :: GzipBest ;
381
394
}
382
395
383
396
let subscriber = Registry :: default ( ) ;
@@ -396,9 +409,25 @@ pub fn project_new(
396
409
std:: fs:: create_dir_all ( & internal_dir)
397
410
. context ( "Unable to create .next directory" )
398
411
. unwrap ( ) ;
399
- let trace_file = internal_dir. join ( "trace-turbopack" ) ;
400
- let trace_writer = std:: fs:: File :: create ( trace_file. clone ( ) ) . unwrap ( ) ;
401
- let ( trace_writer, trace_writer_guard) = TraceWriter :: new ( trace_writer) ;
412
+ let ( trace_writer, trace_writer_guard) = match compress {
413
+ Compression :: None => {
414
+ let trace_file = internal_dir. join ( "diagnostics/trace-turbopack" ) ;
415
+ let trace_writer = std:: fs:: File :: create ( trace_file. clone ( ) ) . unwrap ( ) ;
416
+ TraceWriter :: new ( trace_writer)
417
+ }
418
+ Compression :: GzipFast => {
419
+ let trace_file = internal_dir. join ( "diagnostics/trace-turbopack.gz" ) ;
420
+ let trace_writer = std:: fs:: File :: create ( trace_file. clone ( ) ) . unwrap ( ) ;
421
+ let trace_writer = GzEncoder :: new ( trace_writer, flate2:: Compression :: fast ( ) ) ;
422
+ TraceWriter :: new ( trace_writer)
423
+ }
424
+ Compression :: GzipBest => {
425
+ let trace_file = internal_dir. join ( "diagnostics/trace-turbopack.gz" ) ;
426
+ let trace_writer = std:: fs:: File :: create ( trace_file. clone ( ) ) . unwrap ( ) ;
427
+ let trace_writer = GzEncoder :: new ( trace_writer, flate2:: Compression :: best ( ) ) ;
428
+ TraceWriter :: new ( trace_writer)
429
+ }
430
+ } ;
402
431
let subscriber = subscriber. with ( RawTraceLayer :: new ( trace_writer) ) ;
403
432
404
433
exit. on_exit ( async move {
0 commit comments