summaryrefslogtreecommitdiff
path: root/cli/lsp/registries.rs
diff options
context:
space:
mode:
Diffstat (limited to 'cli/lsp/registries.rs')
-rw-r--r--cli/lsp/registries.rs45
1 files changed, 43 insertions, 2 deletions
diff --git a/cli/lsp/registries.rs b/cli/lsp/registries.rs
index 504ff2738..b63850c32 100644
--- a/cli/lsp/registries.rs
+++ b/cli/lsp/registries.rs
@@ -382,10 +382,20 @@ impl ModuleRegistry {
&self,
specifier: &ModuleSpecifier,
) -> Result<Vec<RegistryConfiguration>, AnyError> {
- let file = self
+ let fetch_result = self
.file_fetcher
.fetch(specifier, &mut Permissions::allow_all())
- .await?;
+ .await;
+ // if there is an error fetching, we will cache an empty file, so that
+ // subsequent requests they are just an empty doc which will error without
+ // needing to connect to the remote URL
+ if fetch_result.is_err() {
+ self
+ .file_fetcher
+ .http_cache
+ .set(specifier, HashMap::default(), &[])?;
+ }
+ let file = fetch_result?;
let config: RegistryConfigurationJson = serde_json::from_str(&file.source)?;
validate_config(&config)?;
Ok(config.registries)
@@ -1203,4 +1213,35 @@ mod tests {
assert!(actual.contains(&"module".to_owned()));
assert!(actual.contains(&"version".to_owned()));
}
+
+ #[tokio::test]
+ async fn test_check_origin_supported() {
+ let _g = test_util::http_server();
+ let temp_dir = TempDir::new().expect("could not create tmp");
+ let location = temp_dir.path().join("registries");
+ let module_registry = ModuleRegistry::new(&location);
+ let result = module_registry.check_origin("http://localhost:4545").await;
+ assert!(result.is_ok());
+ }
+
+ #[tokio::test]
+ async fn test_check_origin_not_supported() {
+ let _g = test_util::http_server();
+ let temp_dir = TempDir::new().expect("could not create tmp");
+ let location = temp_dir.path().join("registries");
+ let module_registry = ModuleRegistry::new(&location);
+ let result = module_registry.check_origin("https://deno.com").await;
+ assert!(result.is_err());
+ let err = result.unwrap_err().to_string();
+ assert!(err
+ .contains("https://deno.com/.well-known/deno-import-intellisense.json"));
+
+ // because we are caching an empty file when we hit an error with import
+ // detection when fetching the config file, we should have an error now that
+ // indicates trying to parse an empty file.
+ let result = module_registry.check_origin("https://deno.com").await;
+ assert!(result.is_err());
+ let err = result.unwrap_err().to_string();
+ assert!(err.contains("EOF while parsing a value at line 1 column 0"));
+ }
}