From 563a7c284e5d6217f92f2773d21dbc3e052526ce Mon Sep 17 00:00:00 2001 From: David Sherret Date: Wed, 22 Jan 2025 15:35:16 -0500 Subject: [PATCH] refactor: use DataUrl from deno_media_type (#27783) This was moved from deno_graph to deno_media_type. --- Cargo.lock | 5 +++-- Cargo.toml | 2 +- cli/Cargo.toml | 1 + cli/args/import_map.rs | 2 +- cli/file_fetcher.rs | 9 ++++----- cli/lsp/documents.rs | 11 ++++++----- cli/lsp/urls.rs | 3 ++- cli/tools/fmt.rs | 11 +++++++---- 8 files changed, 25 insertions(+), 19 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0cb0b19992..311a7ac885 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1275,6 +1275,7 @@ dependencies = [ "deno_lib", "deno_lint", "deno_lockfile", + "deno_media_type", "deno_npm", "deno_npm_cache", "deno_package_json", @@ -1960,9 +1961,9 @@ dependencies = [ [[package]] name = "deno_media_type" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "577fe2bbe04f3e9b1b7c6fac6a75101a9fbd611c50a6b68789e69f4d63dcb2b4" +checksum = "600222d059ab31ff31182b3e12615df2134a9e01605836b78ad8df91ba39eab3" dependencies = [ "data-url", "encoding_rs", diff --git a/Cargo.toml b/Cargo.toml index 04798c5af2..c009bc3c5e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -56,7 +56,7 @@ deno_core = { version = "0.331.0" } deno_bench_util = { version = "0.181.0", path = "./bench_util" } deno_config = { version = "=0.45.0", features = ["workspace", "sync"] } deno_lockfile = "=0.24.0" -deno_media_type = { version = "0.2.4", features = ["module_specifier"] } +deno_media_type = { version = "=0.2.5", features = ["module_specifier"] } deno_npm = "=0.27.2" deno_path_util = "=0.3.0" deno_permissions = { version = "0.46.0", path = "./runtime/permissions" } diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 0a11d50df1..5fdc4317d0 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -76,6 +76,7 @@ deno_graph = { version = "=0.87.0" } deno_lib.workspace = true deno_lint = { version = "=0.68.2", features = ["docs"] } deno_lockfile.workspace = true +deno_media_type = { workspace = true, features = ["data_url", "decoding", "module_specifier"] } deno_npm.workspace = true deno_npm_cache.workspace = true deno_package_json.workspace = true diff --git a/cli/args/import_map.rs b/cli/args/import_map.rs index ff7e42ef20..75a1611120 100644 --- a/cli/args/import_map.rs +++ b/cli/args/import_map.rs @@ -13,7 +13,7 @@ pub async fn resolve_import_map_value_from_specifier( ) -> Result { if specifier.scheme() == "data" { let data_url_text = - deno_graph::source::RawDataUrl::parse(specifier)?.decode()?; + deno_media_type::data_url::RawDataUrl::parse(specifier)?.decode()?; Ok(serde_json::from_str(&data_url_text)?) } else { let file = TextDecodedFile::decode( diff --git a/cli/file_fetcher.rs b/cli/file_fetcher.rs index cfc26d7e69..723571649a 100644 --- a/cli/file_fetcher.rs +++ b/cli/file_fetcher.rs @@ -60,11 +60,10 @@ impl TextDecodedFile { file.maybe_headers.as_ref(), ); let specifier = file.url; - match deno_graph::source::decode_source( - &specifier, - file.source, - maybe_charset, - ) { + let charset = maybe_charset.unwrap_or_else(|| { + deno_media_type::encoding::detect_charset(&specifier, &file.source) + }); + match deno_media_type::encoding::decode_arc_source(charset, file.source) { Ok(source) => Ok(TextDecodedFile { media_type, specifier, diff --git a/cli/lsp/documents.rs b/cli/lsp/documents.rs index 6a7a08b5a1..b2bf37edf2 100644 --- a/cli/lsp/documents.rs +++ b/cli/lsp/documents.rs @@ -936,7 +936,7 @@ impl FileSystemDocuments { file_referrer.cloned(), ) } else if specifier.scheme() == "data" { - let source = deno_graph::source::RawDataUrl::parse(specifier) + let source = deno_media_type::data_url::RawDataUrl::parse(specifier) .ok()? .decode() .ok()?; @@ -1756,10 +1756,11 @@ fn bytes_to_content( // we use the dts representation for Wasm modules Ok(deno_graph::source::wasm::wasm_module_to_dts(&bytes)?) } else { - Ok(deno_graph::source::decode_owned_source( - specifier, - bytes, - maybe_charset, + let charset = maybe_charset.unwrap_or_else(|| { + deno_media_type::encoding::detect_charset(specifier, &bytes) + }); + Ok(deno_media_type::encoding::decode_owned_source( + charset, bytes, )?) } } diff --git a/cli/lsp/urls.rs b/cli/lsp/urls.rs index 068e4ad4d5..9c9f50dc34 100644 --- a/cli/lsp/urls.rs +++ b/cli/lsp/urls.rs @@ -219,7 +219,8 @@ impl LspUrlMap { let uri_str = if specifier.scheme() == "asset" { format!("deno:/asset{}", specifier.path()) } else if specifier.scheme() == "data" { - let data_url = deno_graph::source::RawDataUrl::parse(specifier)?; + let data_url = + deno_media_type::data_url::RawDataUrl::parse(specifier)?; let media_type = data_url.media_type(); let extension = if media_type == MediaType::Unknown { "" diff --git a/cli/tools/fmt.rs b/cli/tools/fmt.rs index d0948fd4f7..4619a546fc 100644 --- a/cli/tools/fmt.rs +++ b/cli/tools/fmt.rs @@ -1179,10 +1179,13 @@ fn read_file_contents(file_path: &Path) -> Result { .with_context(|| format!("Error reading {}", file_path.display()))?; let had_bom = file_bytes.starts_with(&[0xEF, 0xBB, 0xBF]); // will have the BOM stripped - let text = deno_graph::source::decode_owned_file_source(file_bytes) - .with_context(|| { - anyhow!("{} is not a valid UTF-8 file", file_path.display()) - })?; + let charset = + deno_media_type::encoding::detect_charset_local_file(&file_bytes); + let text = + deno_media_type::encoding::decode_owned_source(charset, file_bytes) + .with_context(|| { + anyhow!("{} is not a valid UTF-8 file", file_path.display()) + })?; Ok(FileContents { text, had_bom }) }