diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2024-06-03 17:17:08 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-03 21:17:08 +0000 |
commit | 3341c50b6ae676cdc8f7b1c44221aa633f2bde68 (patch) | |
tree | e051e384d722403ea0a04402679a358ef61002dc /cli/jsr.rs | |
parent | 72088f2f52d65b2948155a11e7b56722bf6c10f9 (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/jsr.rs')
-rw-r--r-- | cli/jsr.rs | 34 |
1 files changed, 22 insertions, 12 deletions
diff --git a/cli/jsr.rs b/cli/jsr.rs index bdfba7f10..af0ace404 100644 --- a/cli/jsr.rs +++ b/cli/jsr.rs @@ -213,11 +213,11 @@ pub struct JsrFetchResolver { /// It can be large and we don't want to store it. info_by_nv: DashMap<PackageNv, Option<Arc<JsrPackageVersionInfo>>>, info_by_name: DashMap<String, Option<Arc<JsrPackageInfo>>>, - file_fetcher: FileFetcher, + file_fetcher: Arc<FileFetcher>, } impl JsrFetchResolver { - pub fn new(file_fetcher: FileFetcher) -> Self { + pub fn new(file_fetcher: Arc<FileFetcher>) -> Self { Self { nv_by_req: Default::default(), info_by_nv: Default::default(), @@ -258,11 +258,16 @@ impl JsrFetchResolver { } let fetch_package_info = || async { let meta_url = jsr_url().join(&format!("{}/meta.json", name)).ok()?; - let file = self - .file_fetcher - .fetch(&meta_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(&meta_url, &PermissionsContainer::allow_all()) + .await + .ok() + }) + .await + .ok()??; serde_json::from_slice::<JsrPackageInfo>(&file.source).ok() }; let info = fetch_package_info().await.map(Arc::new); @@ -281,11 +286,16 @@ impl JsrFetchResolver { let meta_url = jsr_url() .join(&format!("{}/{}_meta.json", &nv.name, &nv.version)) .ok()?; - let file = self - .file_fetcher - .fetch(&meta_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(&meta_url, &PermissionsContainer::allow_all()) + .await + .ok() + }) + .await + .ok()??; partial_jsr_package_version_info_from_slice(&file.source).ok() }; let info = fetch_package_version_info().await.map(Arc::new); |