diff options
author | David Sherret <dsherret@users.noreply.github.com> | 2024-01-31 22:15:22 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-01 03:15:22 +0000 |
commit | 4b7c6049ef9d40394eb823859c82cbf8d293430d (patch) | |
tree | 61e6de7c69c9d00faeef0ff7e6c223224a53de9e /cli/lsp | |
parent | 830d096b66696ad9f4e67b3ed8460fb1ff7a9170 (diff) |
refactor: load bytes in deno_graph (#22212)
Upgrades deno_graph to 0.64 where deno_graph is now responsible for
turning bytes into a string. This is in preparation for Wasm modules.
Diffstat (limited to 'cli/lsp')
-rw-r--r-- | cli/lsp/documents.rs | 42 | ||||
-rw-r--r-- | cli/lsp/npm.rs | 6 | ||||
-rw-r--r-- | cli/lsp/registries.rs | 10 | ||||
-rw-r--r-- | cli/lsp/urls.rs | 10 |
4 files changed, 39 insertions, 29 deletions
diff --git a/cli/lsp/documents.rs b/cli/lsp/documents.rs index 611d1d07f..c758d341b 100644 --- a/cli/lsp/documents.rs +++ b/cli/lsp/documents.rs @@ -13,9 +13,6 @@ use crate::args::ConfigFile; use crate::args::JsxImportSourceConfig; use crate::cache::FastInsecureHasher; use crate::cache::HttpCache; -use crate::file_fetcher::get_source_from_bytes; -use crate::file_fetcher::get_source_from_data_url; -use crate::file_fetcher::map_content_type; use crate::lsp::logging::lsp_warn; use crate::npm::CliNpmResolver; use crate::resolver::CliGraphResolver; @@ -24,7 +21,6 @@ use crate::resolver::SloppyImportsFsEntry; use crate::resolver::SloppyImportsResolution; use crate::resolver::SloppyImportsResolver; use crate::util::path::specifier_to_file_path; -use crate::util::text_encoding; use deno_ast::MediaType; use deno_ast::ParsedSource; @@ -278,7 +274,7 @@ impl DocumentDependencies { } } - pub fn from_module(module: &deno_graph::EsmModule) -> Self { + pub fn from_module(module: &deno_graph::JsModule) -> Self { Self { deps: module.dependencies.clone(), maybe_types_dependency: module.maybe_types_dependency.clone(), @@ -286,7 +282,7 @@ impl DocumentDependencies { } } -type ModuleResult = Result<deno_graph::EsmModule, deno_graph::ModuleGraphError>; +type ModuleResult = Result<deno_graph::JsModule, deno_graph::ModuleGraphError>; type ParsedSourceResult = Result<ParsedSource, deno_ast::Diagnostic>; #[derive(Debug)] @@ -593,7 +589,7 @@ impl Document { self.0.maybe_lsp_version } - fn maybe_esm_module(&self) -> Option<&ModuleResult> { + fn maybe_js_module(&self) -> Option<&ModuleResult> { self.0.maybe_module.as_ref() } @@ -632,7 +628,7 @@ impl Document { &self, position: &lsp::Position, ) -> Option<(String, deno_graph::Dependency, deno_graph::Range)> { - let module = self.maybe_esm_module()?.as_ref().ok()?; + let module = self.maybe_js_module()?.as_ref().ok()?; let position = deno_graph::Position { line: position.line as usize, character: position.character as usize, @@ -798,9 +794,8 @@ impl FileSystemDocuments { let path = specifier_to_file_path(specifier).ok()?; let fs_version = calculate_fs_version_at_path(&path)?; let bytes = fs::read(path).ok()?; - let maybe_charset = - Some(text_encoding::detect_charset(&bytes).to_string()); - let content = get_source_from_bytes(bytes, maybe_charset).ok()?; + let content = + deno_graph::source::decode_owned_source(specifier, bytes, None).ok()?; Document::new( specifier.clone(), fs_version, @@ -810,7 +805,10 @@ impl FileSystemDocuments { npm_resolver, ) } else if specifier.scheme() == "data" { - let (source, _) = get_source_from_data_url(specifier).ok()?; + let source = deno_graph::source::RawDataUrl::parse(specifier) + .ok()? + .decode() + .ok()?; Document::new( specifier.clone(), "1".to_string(), @@ -824,10 +822,18 @@ impl FileSystemDocuments { let cache_key = cache.cache_item_key(specifier).ok()?; let bytes = cache.read_file_bytes(&cache_key).ok()??; let specifier_metadata = cache.read_metadata(&cache_key).ok()??; - let maybe_content_type = specifier_metadata.headers.get("content-type"); - let (_, maybe_charset) = map_content_type(specifier, maybe_content_type); + let (_, maybe_charset) = + deno_graph::source::resolve_media_type_and_charset_from_headers( + specifier, + Some(&specifier_metadata.headers), + ); + let content = deno_graph::source::decode_owned_source( + specifier, + bytes, + maybe_charset, + ) + .ok()?; let maybe_headers = Some(specifier_metadata.headers); - let content = get_source_from_bytes(bytes, maybe_charset).ok()?; Document::new( specifier.clone(), fs_version, @@ -1681,7 +1687,7 @@ impl Documents { return node_resolve_npm_req_ref(npm_ref, maybe_npm, referrer); } let doc = self.get(specifier)?; - let maybe_module = doc.maybe_esm_module().and_then(|r| r.as_ref().ok()); + let maybe_module = doc.maybe_js_module().and_then(|r| r.as_ref().ok()); let maybe_types_dependency = maybe_module .and_then(|m| m.maybe_types_dependency.as_ref().map(|d| &d.dependency)); if let Some(specifier) = @@ -1752,7 +1758,7 @@ impl<'a> OpenDocumentsGraphLoader<'a> { if let Some(doc) = self.open_docs.get(specifier) { return Some( future::ready(Ok(Some(deno_graph::source::LoadResponse::Module { - content: doc.content(), + content: Arc::from(doc.content()), specifier: doc.specifier().clone(), maybe_headers: None, }))) @@ -1816,7 +1822,7 @@ impl<'a> deno_graph::source::Loader for OpenDocumentsGraphLoader<'a> { fn cache_module_info( &mut self, specifier: &deno_ast::ModuleSpecifier, - source: &str, + source: &Arc<[u8]>, module_info: &deno_graph::ModuleInfo, ) { self diff --git a/cli/lsp/npm.rs b/cli/lsp/npm.rs index c730c7990..613b7897e 100644 --- a/cli/lsp/npm.rs +++ b/cli/lsp/npm.rs @@ -62,7 +62,8 @@ impl NpmSearchApi for CliNpmSearchApi { let file = self .file_fetcher .fetch(&search_url, PermissionsContainer::allow_all()) - .await?; + .await? + .into_text_decoded()?; let names = Arc::new(parse_npm_search_response(&file.source)?); self .search_cache @@ -88,7 +89,8 @@ impl NpmSearchApi for CliNpmSearchApi { .file_fetcher .fetch(&info_url, PermissionsContainer::allow_all()) .await?; - let info = Arc::new(serde_json::from_str::<NpmPackageInfo>(&file.source)?); + let info = + Arc::new(serde_json::from_slice::<NpmPackageInfo>(&file.source)?); self .info_cache .lock() diff --git a/cli/lsp/registries.rs b/cli/lsp/registries.rs index 328b325ff..f4a64c7ee 100644 --- a/cli/lsp/registries.rs +++ b/cli/lsp/registries.rs @@ -528,7 +528,7 @@ impl ModuleRegistry { ); self.http_cache.set(specifier, headers_map, &[])?; } - let file = fetch_result?; + let file = fetch_result?.into_text_decoded()?; let config: RegistryConfigurationJson = serde_json::from_str(&file.source)?; validate_config(&config)?; Ok(config.registries) @@ -610,6 +610,8 @@ impl ModuleRegistry { .file_fetcher .fetch(&endpoint, PermissionsContainer::allow_all()) .await + .ok()? + .into_text_decoded() .ok()?; let documentation: lsp::Documentation = serde_json::from_str(&file.source).ok()?; @@ -974,6 +976,8 @@ impl ModuleRegistry { .file_fetcher .fetch(&specifier, PermissionsContainer::allow_all()) .await + .ok()? + .into_text_decoded() .ok()?; serde_json::from_str(&file.source).ok() } @@ -1037,6 +1041,8 @@ impl ModuleRegistry { specifier, err ); }) + .ok()? + .into_text_decoded() .ok()?; let items: VariableItems = serde_json::from_str(&file.source) .map_err(|err| { @@ -1073,6 +1079,8 @@ impl ModuleRegistry { specifier, err ); }) + .ok()? + .into_text_decoded() .ok()?; let items: VariableItems = serde_json::from_str(&file.source) .map_err(|err| { diff --git a/cli/lsp/urls.rs b/cli/lsp/urls.rs index b8f3037ba..f1e75c9dd 100644 --- a/cli/lsp/urls.rs +++ b/cli/lsp/urls.rs @@ -1,11 +1,8 @@ // Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. use crate::cache::LocalLspHttpCache; -use crate::file_fetcher::map_content_type; -use data_url::DataUrl; use deno_ast::MediaType; -use deno_core::error::uri_error; use deno_core::error::AnyError; use deno_core::parking_lot::Mutex; use deno_core::url::Position; @@ -191,11 +188,8 @@ impl LspUrlMap { let specifier_str = if specifier.scheme() == "asset" { format!("deno:/asset{}", specifier.path()) } else if specifier.scheme() == "data" { - let data_url = DataUrl::process(specifier.as_str()) - .map_err(|e| uri_error(format!("{e:?}")))?; - let mime = data_url.mime_type(); - let (media_type, _) = - map_content_type(specifier, Some(&format!("{mime}"))); + let data_url = deno_graph::source::RawDataUrl::parse(specifier)?; + let media_type = data_url.media_type(); let extension = if media_type == MediaType::Unknown { "" } else { |