@@ -8,7 +8,7 @@ use std::{
88} ;
99
1010use criterion:: { criterion_group, criterion_main, BenchmarkId , Criterion } ;
11- use rspack_resolver:: { ResolveOptions , Resolver } ;
11+ use rspack_resolver:: { FileSystemOptions , FileSystemOs , ResolveOptions , Resolver } ;
1212use serde_json:: Value ;
1313use tokio:: {
1414 runtime:: { self , Builder } ,
@@ -53,43 +53,54 @@ fn create_symlinks() -> io::Result<PathBuf> {
5353 Ok ( temp_path)
5454}
5555
56- fn rspack_resolver ( ) -> rspack_resolver:: Resolver {
56+ fn rspack_resolver ( enable_pnp : bool ) -> rspack_resolver:: Resolver {
5757 use rspack_resolver:: { AliasValue , ResolveOptions , Resolver } ;
5858 let alias_value = AliasValue :: from ( "./" ) ;
59- Resolver :: new ( ResolveOptions {
60- extensions : vec ! [ ".ts" . into( ) , ".js" . into( ) , ".mjs" . into( ) ] ,
61- condition_names : vec ! [ "import" . into( ) , "webpack" . into( ) , "require" . into( ) ] ,
62- alias_fields : vec ! [ vec![ "browser" . into( ) ] ] ,
63- extension_alias : vec ! [ ( ".js" . into( ) , vec![ ".ts" . into( ) , ".js" . into( ) ] ) ] ,
64- // Real projects LOVE setting these many aliases.
65- // I saw them with my own eyes.
66- alias : vec ! [
67- ( "/absolute/path" . into( ) , vec![ alias_value. clone( ) ] ) ,
68- ( "aaa" . into( ) , vec![ alias_value. clone( ) ] ) ,
69- ( "bbb" . into( ) , vec![ alias_value. clone( ) ] ) ,
70- ( "ccc" . into( ) , vec![ alias_value. clone( ) ] ) ,
71- ( "ddd" . into( ) , vec![ alias_value. clone( ) ] ) ,
72- ( "eee" . into( ) , vec![ alias_value. clone( ) ] ) ,
73- ( "fff" . into( ) , vec![ alias_value. clone( ) ] ) ,
74- ( "ggg" . into( ) , vec![ alias_value. clone( ) ] ) ,
75- ( "hhh" . into( ) , vec![ alias_value. clone( ) ] ) ,
76- ( "iii" . into( ) , vec![ alias_value. clone( ) ] ) ,
77- ( "jjj" . into( ) , vec![ alias_value. clone( ) ] ) ,
78- ( "kkk" . into( ) , vec![ alias_value. clone( ) ] ) ,
79- ( "lll" . into( ) , vec![ alias_value. clone( ) ] ) ,
80- ( "mmm" . into( ) , vec![ alias_value. clone( ) ] ) ,
81- ( "nnn" . into( ) , vec![ alias_value. clone( ) ] ) ,
82- ( "ooo" . into( ) , vec![ alias_value. clone( ) ] ) ,
83- ( "ppp" . into( ) , vec![ alias_value. clone( ) ] ) ,
84- ( "qqq" . into( ) , vec![ alias_value. clone( ) ] ) ,
85- ( "rrr" . into( ) , vec![ alias_value. clone( ) ] ) ,
86- ( "sss" . into( ) , vec![ alias_value. clone( ) ] ) ,
87- ( "@" . into( ) , vec![ alias_value. clone( ) ] ) ,
88- ( "@@" . into( ) , vec![ alias_value. clone( ) ] ) ,
89- ( "@@@" . into( ) , vec![ alias_value] ) ,
90- ] ,
91- ..ResolveOptions :: default ( )
92- } )
59+
60+ let fs = FileSystemOs :: new ( FileSystemOptions {
61+ #[ cfg( feature = "yarn_pnp" ) ]
62+ enable_pnp,
63+ } ) ;
64+
65+ Resolver :: new_with_file_system (
66+ fs,
67+ ResolveOptions {
68+ #[ cfg( feature = "yarn_pnp" ) ]
69+ enable_pnp,
70+ extensions : vec ! [ ".ts" . into( ) , ".js" . into( ) , ".mjs" . into( ) ] ,
71+ condition_names : vec ! [ "import" . into( ) , "webpack" . into( ) , "require" . into( ) ] ,
72+ alias_fields : vec ! [ vec![ "browser" . into( ) ] ] ,
73+ extension_alias : vec ! [ ( ".js" . into( ) , vec![ ".ts" . into( ) , ".js" . into( ) ] ) ] ,
74+ // Real projects LOVE setting these many aliases.
75+ // I saw them with my own eyes.
76+ alias : vec ! [
77+ ( "/absolute/path" . into( ) , vec![ alias_value. clone( ) ] ) ,
78+ ( "aaa" . into( ) , vec![ alias_value. clone( ) ] ) ,
79+ ( "bbb" . into( ) , vec![ alias_value. clone( ) ] ) ,
80+ ( "ccc" . into( ) , vec![ alias_value. clone( ) ] ) ,
81+ ( "ddd" . into( ) , vec![ alias_value. clone( ) ] ) ,
82+ ( "eee" . into( ) , vec![ alias_value. clone( ) ] ) ,
83+ ( "fff" . into( ) , vec![ alias_value. clone( ) ] ) ,
84+ ( "ggg" . into( ) , vec![ alias_value. clone( ) ] ) ,
85+ ( "hhh" . into( ) , vec![ alias_value. clone( ) ] ) ,
86+ ( "iii" . into( ) , vec![ alias_value. clone( ) ] ) ,
87+ ( "jjj" . into( ) , vec![ alias_value. clone( ) ] ) ,
88+ ( "kkk" . into( ) , vec![ alias_value. clone( ) ] ) ,
89+ ( "lll" . into( ) , vec![ alias_value. clone( ) ] ) ,
90+ ( "mmm" . into( ) , vec![ alias_value. clone( ) ] ) ,
91+ ( "nnn" . into( ) , vec![ alias_value. clone( ) ] ) ,
92+ ( "ooo" . into( ) , vec![ alias_value. clone( ) ] ) ,
93+ ( "ppp" . into( ) , vec![ alias_value. clone( ) ] ) ,
94+ ( "qqq" . into( ) , vec![ alias_value. clone( ) ] ) ,
95+ ( "rrr" . into( ) , vec![ alias_value. clone( ) ] ) ,
96+ ( "sss" . into( ) , vec![ alias_value. clone( ) ] ) ,
97+ ( "@" . into( ) , vec![ alias_value. clone( ) ] ) ,
98+ ( "@@" . into( ) , vec![ alias_value. clone( ) ] ) ,
99+ ( "@@@" . into( ) , vec![ alias_value] ) ,
100+ ] ,
101+ ..ResolveOptions :: default ( )
102+ } ,
103+ )
93104}
94105
95106fn resolver_with_many_extensions ( ) -> rspack_resolver:: Resolver {
@@ -115,6 +126,7 @@ fn resolver_with_many_extensions() -> rspack_resolver::Resolver {
115126 ] ,
116127 imports_fields : vec ! [ ] ,
117128 exports_fields : vec ! [ ] ,
129+ enable_pnp : false ,
118130 ..Default :: default ( )
119131 } )
120132}
@@ -145,7 +157,7 @@ fn bench_resolver(c: &mut Criterion) {
145157 // check validity
146158 runtime:: Builder :: new_current_thread ( ) . enable_all ( ) . build ( ) . unwrap ( ) . block_on ( async {
147159 for ( path, request) in & data {
148- let r = rspack_resolver ( ) . resolve ( path, request) . await ;
160+ let r = rspack_resolver ( false ) . resolve ( path, request) . await ;
149161 if !r. is_ok ( ) {
150162 panic ! ( "resolve failed {path:?} {request},\n \n please run `pnpm install --ignore-workspace` in `/benches` before running the benchmarks" ) ;
151163 }
@@ -164,7 +176,7 @@ fn bench_resolver(c: &mut Criterion) {
164176 . block_on ( async {
165177 for i in symlinks_range. clone ( ) {
166178 assert ! (
167- rspack_resolver( )
179+ rspack_resolver( false )
168180 . resolve( & symlink_test_dir, & format!( "./file{i}" ) )
169181 . await
170182 . is_ok( ) ,
@@ -196,7 +208,7 @@ fn bench_resolver(c: &mut Criterion) {
196208 let runner = runtime:: Builder :: new_current_thread ( )
197209 . build ( )
198210 . expect ( "failed to create tokio runtime" ) ;
199- let rspack_resolver = rspack_resolver ( ) ;
211+ let rspack_resolver = rspack_resolver ( false ) ;
200212
201213 b. to_async ( runner) . iter_with_setup (
202214 || {
@@ -240,7 +252,7 @@ fn bench_resolver(c: &mut Criterion) {
240252 & data,
241253 |b, data| {
242254 let runner = multi_rt ( ) ;
243- let rspack_resolver = Arc :: new ( rspack_resolver ( ) ) ;
255+ let rspack_resolver = Arc :: new ( rspack_resolver ( false ) ) ;
244256
245257 b. iter_with_setup (
246258 || {
@@ -268,7 +280,7 @@ fn bench_resolver(c: &mut Criterion) {
268280 & symlinks_range,
269281 |b, data| {
270282 let runner = runtime:: Runtime :: new ( ) . expect ( "failed to create tokio runtime" ) ;
271- let rspack_resolver = rspack_resolver ( ) ;
283+ let rspack_resolver = rspack_resolver ( false ) ;
272284
273285 b. to_async ( runner) . iter_with_setup (
274286 || {
@@ -294,7 +306,7 @@ fn bench_resolver(c: &mut Criterion) {
294306 & symlinks_range,
295307 |b, data| {
296308 let runner = multi_rt ( ) ;
297- let rspack_resolver = Arc :: new ( rspack_resolver ( ) ) ;
309+ let rspack_resolver = Arc :: new ( rspack_resolver ( false ) ) ;
298310
299311 let symlink_test_dir = symlink_test_dir. clone ( ) ;
300312
@@ -321,7 +333,7 @@ fn bench_resolver(c: &mut Criterion) {
321333 & root_range,
322334 |b, data| {
323335 let runner = runtime:: Runtime :: new ( ) . expect ( "failed to create tokio runtime" ) ;
324- let rspack_resolver = Arc :: new ( rspack_resolver ( ) ) ;
336+ let rspack_resolver = Arc :: new ( rspack_resolver ( true ) ) ;
325337
326338 b. to_async ( runner) . iter_with_setup (
327339 || {
0 commit comments