@@ -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 ;
@@ -188,9 +190,29 @@ pub struct DenoWorkspace {
188190 workspace_factory : Arc < WorkspaceFactory < RealSys > > ,
189191}
190192
191- impl Drop for DenoWorkspace {
192- fn drop ( & mut self ) {
193- PackageJsonThreadLocalCache :: clear ( ) ;
193+ #[ derive( Debug ) ]
194+ pub struct PackageJsonOwnedCache {
195+ map : Mutex < std:: collections:: HashMap < PathBuf , Option < PackageJsonRc > > > ,
196+ }
197+
198+ impl PackageJsonOwnedCache {
199+ pub fn new ( ) -> Self {
200+ Self {
201+ map : Mutex :: new ( std:: collections:: HashMap :: new ( ) ) ,
202+ }
203+ }
204+ }
205+
206+ impl deno_package_json:: PackageJsonCache for PackageJsonOwnedCache {
207+ fn get ( & self , path : & Path ) -> PackageJsonCacheResult {
208+ self . map . lock ( ) . unwrap ( ) . get ( path) . cloned ( ) . map_or_else (
209+ || PackageJsonCacheResult :: NotCached ,
210+ |value| PackageJsonCacheResult :: Hit ( value) ,
211+ )
212+ }
213+
214+ fn set ( & self , path : PathBuf , package_json : Option < PackageJsonRc > ) {
215+ self . map . lock ( ) . unwrap ( ) . insert ( path, package_json) ;
194216 }
195217}
196218
@@ -301,7 +323,7 @@ impl DenoWorkspace {
301323 node_analysis_cache : None ,
302324 node_code_translator_mode : NodeCodeTranslatorMode :: Disabled ,
303325 node_resolution_cache : Some ( Arc :: new ( NodeResolutionThreadLocalCache ) ) ,
304- package_json_cache : Some ( Arc :: new ( PackageJsonThreadLocalCache ) ) ,
326+ package_json_cache : Some ( Arc :: new ( PackageJsonOwnedCache :: new ( ) ) ) ,
305327 package_json_dep_resolution : None ,
306328 specified_import_map : None ,
307329 bare_node_builtins : true ,
0 commit comments