diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2024-05-18 11:42:03 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-18 11:42:03 -0400 |
commit | a2dbcf9e0aa1f70056ccc6ecdd4c813d30af768c (patch) | |
tree | ae0c11a160b1203209b5a54d5dbb693d7dbc5135 /cli/resolver.rs | |
parent | fcb6a18b2b9fe23f3c19f6039d8f270a3a1999d6 (diff) |
perf: analyze cjs exports and emit typescript in parallel (#23856)
Diffstat (limited to 'cli/resolver.rs')
-rw-r--r-- | cli/resolver.rs | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/cli/resolver.rs b/cli/resolver.rs index 4b5c99292..7e68a62e9 100644 --- a/cli/resolver.rs +++ b/cli/resolver.rs @@ -1,6 +1,7 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. use dashmap::DashMap; +use dashmap::DashSet; use deno_ast::MediaType; use deno_core::anyhow::anyhow; use deno_core::anyhow::Context; @@ -8,7 +9,6 @@ use deno_core::error::AnyError; use deno_core::futures::future; use deno_core::futures::future::LocalBoxFuture; use deno_core::futures::FutureExt; -use deno_core::parking_lot::Mutex; use deno_core::ModuleCodeString; use deno_core::ModuleSpecifier; use deno_graph::source::NpmPackageReqResolution; @@ -34,7 +34,6 @@ use deno_semver::npm::NpmPackageReqReference; use deno_semver::package::PackageReq; use import_map::ImportMap; use std::borrow::Cow; -use std::collections::HashSet; use std::path::Path; use std::path::PathBuf; use std::rc::Rc; @@ -272,20 +271,20 @@ impl NpmModuleLoader { } } - pub fn load_sync_if_in_npm_package( + pub async fn load_if_in_npm_package( &self, specifier: &ModuleSpecifier, maybe_referrer: Option<&ModuleSpecifier>, permissions: &PermissionsContainer, ) -> Option<Result<ModuleCodeStringSource, AnyError>> { if self.node_resolver.in_npm_package(specifier) { - Some(self.load_sync(specifier, maybe_referrer, permissions)) + Some(self.load(specifier, maybe_referrer, permissions).await) } else { None } } - fn load_sync( + pub async fn load( &self, specifier: &ModuleSpecifier, maybe_referrer: Option<&ModuleSpecifier>, @@ -294,7 +293,8 @@ impl NpmModuleLoader { let file_path = specifier.to_file_path().unwrap(); let code = self .fs - .read_text_file_sync(&file_path, None) + .read_text_file_async(file_path.clone(), None) + .await .map_err(AnyError::from) .with_context(|| { if file_path.is_dir() { @@ -329,11 +329,10 @@ impl NpmModuleLoader { let code = if self.cjs_resolutions.contains(specifier) { // translate cjs to esm if it's cjs and inject node globals - self.node_code_translator.translate_cjs_to_esm( - specifier, - Some(code), - permissions, - )? + self + .node_code_translator + .translate_cjs_to_esm(specifier, Some(code), permissions) + .await? } else { // esm and json code is untouched code @@ -348,15 +347,15 @@ impl NpmModuleLoader { /// Keeps track of what module specifiers were resolved as CJS. #[derive(Debug, Default)] -pub struct CjsResolutionStore(Mutex<HashSet<ModuleSpecifier>>); +pub struct CjsResolutionStore(DashSet<ModuleSpecifier>); impl CjsResolutionStore { pub fn contains(&self, specifier: &ModuleSpecifier) -> bool { - self.0.lock().contains(specifier) + self.0.contains(specifier) } pub fn insert(&self, specifier: ModuleSpecifier) { - self.0.lock().insert(specifier); + self.0.insert(specifier); } } |