summaryrefslogtreecommitdiff
path: root/cli/npm/mod.rs
diff options
context:
space:
mode:
authorDavid Sherret <dsherret@users.noreply.github.com>2024-06-03 17:17:08 -0400
committerGitHub <noreply@github.com>2024-06-03 21:17:08 +0000
commit3341c50b6ae676cdc8f7b1c44221aa633f2bde68 (patch)
treee051e384d722403ea0a04402679a358ef61002dc /cli/npm/mod.rs
parent72088f2f52d65b2948155a11e7b56722bf6c10f9 (diff)
refactor: don't share `reqwest::HttpClient` across tokio runtimes (#24092)
This also fixes several issues where we weren't properly creating http clients with the user's settings.
Diffstat (limited to 'cli/npm/mod.rs')
-rw-r--r--cli/npm/mod.rs19
1 files changed, 12 insertions, 7 deletions
diff --git a/cli/npm/mod.rs b/cli/npm/mod.rs
index 8de803ce4..ef230372f 100644
--- a/cli/npm/mod.rs
+++ b/cli/npm/mod.rs
@@ -100,11 +100,11 @@ pub trait CliNpmResolver: NpmResolver {
pub struct NpmFetchResolver {
nv_by_req: DashMap<PackageReq, Option<PackageNv>>,
info_by_name: DashMap<String, Option<Arc<NpmPackageInfo>>>,
- file_fetcher: FileFetcher,
+ file_fetcher: Arc<FileFetcher>,
}
impl NpmFetchResolver {
- pub fn new(file_fetcher: FileFetcher) -> Self {
+ pub fn new(file_fetcher: Arc<FileFetcher>) -> Self {
Self {
nv_by_req: Default::default(),
info_by_name: Default::default(),
@@ -140,11 +140,16 @@ impl NpmFetchResolver {
}
let fetch_package_info = || async {
let info_url = npm_registry_url().join(name).ok()?;
- let file = self
- .file_fetcher
- .fetch(&info_url, &PermissionsContainer::allow_all())
- .await
- .ok()?;
+ let file_fetcher = self.file_fetcher.clone();
+ // spawn due to the lsp's `Send` requirement
+ let file = deno_core::unsync::spawn(async move {
+ file_fetcher
+ .fetch(&info_url, &PermissionsContainer::allow_all())
+ .await
+ .ok()
+ })
+ .await
+ .ok()??;
serde_json::from_slice::<NpmPackageInfo>(&file.source).ok()
};
let info = fetch_package_info().await.map(Arc::new);