@@ -6,7 +6,7 @@ use rspack_core::{
6
6
ApplyContext , ChunkGroup , ChunkGroupUkey , Compilation , CompilationAsset , CompilerAfterEmit ,
7
7
CompilerOptions , Plugin , PluginContext ,
8
8
} ;
9
- use rspack_error:: { Diagnostic , Result } ;
9
+ use rspack_error:: { Diagnostic , Result , ToStringResultToRspackResultExt } ;
10
10
use rspack_hook:: { plugin, plugin_hook} ;
11
11
use rspack_util:: size:: format_size;
12
12
@@ -81,14 +81,14 @@ impl SizeLimitsPlugin {
81
81
}
82
82
83
83
fn add_assets_over_size_limit_warning (
84
- detail : & [ ( & String , f64 ) ] ,
84
+ detail : & [ ( String , f64 ) ] ,
85
85
limit : f64 ,
86
86
hints : & str ,
87
87
diagnostics : & mut Vec < Diagnostic > ,
88
88
) {
89
89
let asset_list: String = detail
90
90
. iter ( )
91
- . map ( |& ( name, size) | format ! ( "\n {} ({})" , name, format_size( size) ) )
91
+ . map ( |( name, size) | format ! ( "\n {} ({})" , name, format_size( * size) ) )
92
92
. collect :: < Vec < String > > ( )
93
93
. join ( "" ) ;
94
94
let title = String :: from ( "assets over size limit warning" ) ;
@@ -140,21 +140,33 @@ async fn after_emit(&self, compilation: &mut Compilation) -> Result<()> {
140
140
141
141
let mut assets_over_size_limit = vec ! [ ] ;
142
142
143
- for ( name, asset) in compilation. assets ( ) {
144
- let source = asset. get_source ( ) ;
143
+ let asset_sizes = rspack_futures:: scope :: < _ , _ > ( |token| {
144
+ compilation. assets ( ) . iter ( ) . for_each ( |( name, asset) | {
145
+ // SAFETY: await immediately and trust caller to poll future entirely
146
+ let s = unsafe { token. used ( ( & self , asset, name, max_asset_size) ) } ;
145
147
146
- if !self . asset_filter ( name, asset) . await {
147
- continue ;
148
- }
148
+ s. spawn ( |( plugin, asset, name, max_asset_size) | async move {
149
+ if !plugin. asset_filter ( name, asset) . await {
150
+ return None ;
151
+ }
149
152
150
- if let Some ( source) = source {
151
- let size = source. size ( ) as f64 ;
152
- let is_over_size_limit = size > max_asset_size;
153
+ let source = asset. get_source ( ) ?;
153
154
154
- checked_assets. insert ( name. to_owned ( ) , is_over_size_limit) ;
155
- if is_over_size_limit {
156
- assets_over_size_limit. push ( ( name, size) ) ;
157
- }
155
+ let size = source. size ( ) as f64 ;
156
+ let is_over_size_limit = size > max_asset_size;
157
+ Some ( ( name. clone ( ) , size, is_over_size_limit) )
158
+ } )
159
+ } )
160
+ } )
161
+ . await
162
+ . into_iter ( )
163
+ . map ( |res| res. to_rspack_result ( ) )
164
+ . collect :: < Result < Vec < _ > > > ( ) ?;
165
+
166
+ for ( name, size, is_over_size_limit) in asset_sizes. into_iter ( ) . flatten ( ) {
167
+ checked_assets. insert ( name. clone ( ) , is_over_size_limit) ;
168
+ if is_over_size_limit {
169
+ assets_over_size_limit. push ( ( name, size) ) ;
158
170
}
159
171
}
160
172
0 commit comments