@@ -6,7 +6,7 @@ use std::{env, fs, path::PathBuf, time::Instant};
6
6
7
7
use anyhow:: Result ;
8
8
use rayon:: prelude:: * ;
9
- use swc_common:: { errors :: HANDLER , sync:: Lrc , Mark , SourceMap , GLOBALS } ;
9
+ use swc_common:: { sync:: Lrc , Mark , SourceMap , GLOBALS } ;
10
10
use swc_ecma_ast:: Program ;
11
11
use swc_ecma_codegen:: text_writer:: JsWriter ;
12
12
use swc_ecma_minifier:: {
@@ -18,6 +18,7 @@ use swc_ecma_transforms_base::{
18
18
fixer:: { fixer, paren_remover} ,
19
19
resolver,
20
20
} ;
21
+ use swc_ecma_utils:: parallel:: { Parallel , ParallelExt } ;
21
22
use walkdir:: WalkDir ;
22
23
23
24
fn main ( ) {
@@ -53,74 +54,72 @@ fn expand_dirs(dirs: Vec<String>) -> Vec<PathBuf> {
53
54
. collect ( )
54
55
}
55
56
57
+ struct Worker ;
58
+
59
+ impl Parallel for Worker {
60
+ fn create ( & self ) -> Self {
61
+ Worker
62
+ }
63
+
64
+ fn merge ( & mut self , _: Self ) { }
65
+ }
66
+
56
67
#[ inline( never) ] // For profiling
57
68
fn minify_all ( files : Vec < PathBuf > ) {
58
- testing:: run_test2 ( false , |cm, handler| {
59
- GLOBALS . with ( |globals| {
60
- HANDLER . set ( & handler, || {
61
- let _ = files
62
- . into_iter ( )
63
- . map ( |path| -> Result < _ > {
64
- GLOBALS . set ( globals, || {
65
- let fm = cm. load_file ( & path) . expect ( "failed to load file" ) ;
66
-
67
- let unresolved_mark = Mark :: new ( ) ;
68
- let top_level_mark = Mark :: new ( ) ;
69
-
70
- let program = parse_file_as_module (
71
- & fm,
72
- Default :: default ( ) ,
73
- Default :: default ( ) ,
74
- None ,
75
- & mut Vec :: new ( ) ,
76
- )
77
- . map_err ( |err| {
78
- err. into_diagnostic ( & handler) . emit ( ) ;
79
- } )
80
- . map ( Program :: Module )
81
- . map ( |module| {
82
- module. apply ( & mut resolver ( unresolved_mark, top_level_mark, false ) )
83
- } )
84
- . map ( |module| module. apply ( & mut paren_remover ( None ) ) )
85
- . unwrap ( ) ;
86
-
87
- let output = optimize (
88
- program,
89
- cm. clone ( ) ,
90
- None ,
91
- None ,
92
- & MinifyOptions {
93
- compress : Some ( Default :: default ( ) ) ,
94
- mangle : Some ( MangleOptions {
95
- top_level : Some ( true ) ,
96
- ..Default :: default ( )
97
- } ) ,
98
- ..Default :: default ( )
99
- } ,
100
- & ExtraOptions {
101
- unresolved_mark,
102
- top_level_mark,
103
- mangle_name_cache : None ,
104
- } ,
105
- ) ;
106
-
107
- let output = output. apply ( & mut fixer ( None ) ) ;
108
-
109
- let code = print ( cm. clone ( ) , & [ output] , true ) ;
110
-
111
- fs:: write ( "output.js" , code. as_bytes ( ) )
112
- . expect ( "failed to write output" ) ;
113
-
114
- Ok ( ( ) )
115
- } )
116
- } )
117
- . collect :: < Vec < _ > > ( ) ;
69
+ GLOBALS . set ( & Default :: default ( ) , || {
70
+ Worker . maybe_par ( 2 , files, |_, path| {
71
+ testing:: run_test ( false , |cm, handler| {
72
+ let fm = cm. load_file ( & path) . expect ( "failed to load file" ) ;
73
+
74
+ let unresolved_mark = Mark :: new ( ) ;
75
+ let top_level_mark = Mark :: new ( ) ;
76
+
77
+ let program = parse_file_as_module (
78
+ & fm,
79
+ Default :: default ( ) ,
80
+ Default :: default ( ) ,
81
+ None ,
82
+ & mut Vec :: new ( ) ,
83
+ )
84
+ . map_err ( |err| {
85
+ err. into_diagnostic ( handler) . emit ( ) ;
86
+ } )
87
+ . map ( Program :: Module )
88
+ . map ( |module| module. apply ( & mut resolver ( unresolved_mark, top_level_mark, false ) ) )
89
+ . map ( |module| module. apply ( & mut paren_remover ( None ) ) )
90
+ . unwrap ( ) ;
91
+
92
+ let output = optimize (
93
+ program,
94
+ cm. clone ( ) ,
95
+ None ,
96
+ None ,
97
+ & MinifyOptions {
98
+ compress : Some ( Default :: default ( ) ) ,
99
+ mangle : Some ( MangleOptions {
100
+ top_level : Some ( true ) ,
101
+ ..Default :: default ( )
102
+ } ) ,
103
+ ..Default :: default ( )
104
+ } ,
105
+ & ExtraOptions {
106
+ unresolved_mark,
107
+ top_level_mark,
108
+ mangle_name_cache : None ,
109
+ } ,
110
+ ) ;
111
+
112
+ let output = output. apply ( & mut fixer ( None ) ) ;
113
+
114
+ let code = print ( cm. clone ( ) , & [ output] , true ) ;
115
+
116
+ fs:: write ( "output.js" , code. as_bytes ( ) ) . expect ( "failed to write output" ) ;
118
117
119
118
Ok ( ( ) )
120
119
} )
121
- } )
122
- } )
123
- . unwrap ( )
120
+ . unwrap ( )
121
+ } ) ;
122
+ } ) ;
124
123
}
125
124
126
125
fn print < N : swc_ecma_codegen:: Node > ( cm : Lrc < SourceMap > , nodes : & [ N ] , minify : bool ) -> String {
0 commit comments