summaryrefslogtreecommitdiff
path: root/cli/lsp/language_server.rs
diff options
context:
space:
mode:
authorSatya Rohith <me@satyarohith.com>2021-09-13 09:49:23 +0530
committerGitHub <noreply@github.com>2021-09-13 09:49:23 +0530
commit84f874715763df71bb3bbf77f0714f8afdc17bb3 (patch)
tree1d4b2b5da1a79fab2f6ccec4fd15601057afbc77 /cli/lsp/language_server.rs
parenta442821d9790489242e8cdb9286ae3b237e4705c (diff)
fix(lsp): support data urls in `deno.importMap` option (#11397)
Diffstat (limited to 'cli/lsp/language_server.rs')
-rw-r--r--cli/lsp/language_server.rs27
1 files changed, 18 insertions, 9 deletions
diff --git a/cli/lsp/language_server.rs b/cli/lsp/language_server.rs
index 93d24f9bd..3f1bfc923 100644
--- a/cli/lsp/language_server.rs
+++ b/cli/lsp/language_server.rs
@@ -56,6 +56,7 @@ use super::urls;
use crate::config_file::ConfigFile;
use crate::config_file::TsConfig;
use crate::deno_dir;
+use crate::file_fetcher::get_source_from_data_url;
use crate::fs_util;
use crate::logger;
use crate::tools::fmt::format_file;
@@ -474,6 +475,10 @@ impl Inner {
let import_map_url = if let Ok(url) = Url::from_file_path(import_map_str)
{
Ok(url)
+ } else if import_map_str.starts_with("data:") {
+ Url::parse(import_map_str).map_err(|_| {
+ anyhow!("Bad data url for import map: {:?}", import_map_str)
+ })
} else if let Some(root_uri) = &maybe_root_uri {
let root_path = root_uri
.to_file_path()
@@ -488,21 +493,25 @@ impl Inner {
import_map_str
))
}?;
- let import_map_path = import_map_url.to_file_path().map_err(|_| {
- anyhow!("Cannot convert \"{}\" into a file path.", import_map_url)
- })?;
- info!(
- " Resolved import map: \"{}\"",
- import_map_path.to_string_lossy()
- );
- let import_map_json =
+
+ let import_map_json = if import_map_url.scheme() == "data" {
+ get_source_from_data_url(&import_map_url)?.0
+ } else {
+ let import_map_path = import_map_url.to_file_path().map_err(|_| {
+ anyhow!("Cannot convert \"{}\" into a file path.", import_map_url)
+ })?;
+ info!(
+ " Resolved import map: \"{}\"",
+ import_map_path.to_string_lossy()
+ );
fs::read_to_string(import_map_path).await.map_err(|err| {
anyhow!(
"Failed to load the import map at: {}. [{}]",
import_map_url,
err
)
- })?;
+ })?
+ };
let import_map =
ImportMap::from_json(&import_map_url.to_string(), &import_map_json)?;
self.maybe_import_map_uri = Some(import_map_url);