@@ -13,8 +13,7 @@ use once_cell::sync::OnceCell as OnceLock;
1313use super :: cache_impl:: Cache ;
1414use super :: thread_local:: SCRATCH_PATH ;
1515use crate :: {
16- FileMetadata , FileSystem , PackageJson , ResolveError , ResolveOptions , TsConfig ,
17- context:: ResolveContext as Ctx ,
16+ FileSystem , PackageJson , ResolveError , ResolveOptions , TsConfig , context:: ResolveContext as Ctx ,
1817} ;
1918
2019#[ derive( Clone ) ]
@@ -26,7 +25,7 @@ pub struct CachedPathImpl {
2625 pub parent : Option < Weak < CachedPathImpl > > ,
2726 pub is_node_modules : bool ,
2827 pub inside_node_modules : bool ,
29- pub meta : OnceLock < Option < FileMetadata > > ,
28+ pub meta : OnceLock < Option < ( /* is_file */ bool , /* is_dir */ bool ) > > , // None means not found.
3029 pub canonicalized : OnceLock < Weak < CachedPathImpl > > ,
3130 pub node_modules : OnceLock < Option < Weak < CachedPathImpl > > > ,
3231 pub package_json : OnceLock < Option < Arc < PackageJson > > > ,
@@ -226,8 +225,16 @@ impl CachedPath {
226225}
227226
228227impl CachedPath {
229- pub ( crate ) fn meta < Fs : FileSystem > ( & self , fs : & Fs ) -> Option < FileMetadata > {
230- * self . meta . get_or_init ( || fs. metadata ( & self . path ) . ok ( ) )
228+ fn metadata < Fs : FileSystem > ( & self , fs : & Fs ) -> Option < ( bool , bool ) > {
229+ * self . meta . get_or_init ( || fs. metadata ( & self . path ) . ok ( ) . map ( |r| ( r. is_file , r. is_dir ) ) )
230+ }
231+
232+ pub ( crate ) fn is_file < Fs : FileSystem > ( & self , fs : & Fs ) -> Option < bool > {
233+ self . metadata ( fs) . map ( |r| r. 0 )
234+ }
235+
236+ pub ( crate ) fn is_dir < Fs : FileSystem > ( & self , fs : & Fs ) -> Option < bool > {
237+ self . metadata ( fs) . map ( |r| r. 1 )
231238 }
232239}
233240
0 commit comments