@@ -7,6 +7,7 @@ use std::path::Path;
77use std:: path:: PathBuf ;
88use std:: rc:: Rc ;
99use std:: sync:: Arc ;
10+ use std:: sync:: Mutex ;
1011use std:: sync:: OnceLock ;
1112
1213use anyhow:: Context ;
@@ -31,6 +32,8 @@ use deno_npm_installer::NpmInstallerFactory;
3132use deno_npm_installer:: NpmInstallerFactoryOptions ;
3233use deno_npm_installer:: Reporter ;
3334use deno_npm_installer:: lifecycle_scripts:: NullLifecycleScriptsExecutor ;
35+ use deno_package_json:: PackageJsonCacheResult ;
36+ use deno_package_json:: PackageJsonRc ;
3437use deno_resolver:: DenoResolveError ;
3538use deno_resolver:: DenoResolveErrorKind ;
3639use deno_resolver:: cache:: ParsedSourceCache ;
@@ -71,7 +74,6 @@ use log::Metadata;
7174use log:: Record ;
7275use node_resolver:: NodeConditionOptions ;
7376use node_resolver:: NodeResolverOptions ;
74- use node_resolver:: PackageJsonThreadLocalCache ;
7577use node_resolver:: analyze:: NodeCodeTranslatorMode ;
7678use node_resolver:: cache:: NodeResolutionThreadLocalCache ;
7779use node_resolver:: errors:: NodeJsErrorCode ;
@@ -186,9 +188,29 @@ pub struct DenoWorkspace {
186188 workspace_factory : Arc < WorkspaceFactory < RealSys > > ,
187189}
188190
189- impl Drop for DenoWorkspace {
190- fn drop ( & mut self ) {
191- PackageJsonThreadLocalCache :: clear ( ) ;
191+ #[ derive( Debug ) ]
192+ pub struct PackageJsonOwnedCache {
193+ map : Mutex < std:: collections:: HashMap < PathBuf , Option < PackageJsonRc > > > ,
194+ }
195+
196+ impl PackageJsonOwnedCache {
197+ pub fn new ( ) -> Self {
198+ Self {
199+ map : Mutex :: new ( std:: collections:: HashMap :: new ( ) ) ,
200+ }
201+ }
202+ }
203+
204+ impl deno_package_json:: PackageJsonCache for PackageJsonOwnedCache {
205+ fn get ( & self , path : & Path ) -> PackageJsonCacheResult {
206+ self . map . lock ( ) . unwrap ( ) . get ( path) . cloned ( ) . map_or_else (
207+ || PackageJsonCacheResult :: NotCached ,
208+ |value| PackageJsonCacheResult :: Hit ( value) ,
209+ )
210+ }
211+
212+ fn set ( & self , path : PathBuf , package_json : Option < PackageJsonRc > ) {
213+ self . map . lock ( ) . unwrap ( ) . insert ( path, package_json) ;
192214 }
193215}
194216
@@ -299,7 +321,7 @@ impl DenoWorkspace {
299321 node_analysis_cache : None ,
300322 node_code_translator_mode : NodeCodeTranslatorMode :: Disabled ,
301323 node_resolution_cache : Some ( Arc :: new ( NodeResolutionThreadLocalCache ) ) ,
302- package_json_cache : Some ( Arc :: new ( PackageJsonThreadLocalCache ) ) ,
324+ package_json_cache : Some ( Arc :: new ( PackageJsonOwnedCache :: new ( ) ) ) ,
303325 package_json_dep_resolution : None ,
304326 specified_import_map : None ,
305327 bare_node_builtins : true ,
0 commit comments