summaryrefslogtreecommitdiff
path: root/cli/lsp/cache.rs
diff options
context:
space:
mode:
authorKitson Kelly <me@kitsonkelly.com>2021-11-09 12:26:39 +1100
committerGitHub <noreply@github.com>2021-11-09 12:26:39 +1100
commitf5eb177f50a0bf37bc6bd9d87b447c73a53b6ea5 (patch)
tree1990dadf311de59b45c677e234219a161f3ebf9d /cli/lsp/cache.rs
parent45425c114610516287c8e5831c9b6f023dfc8180 (diff)
feat(cli): support React 17 JSX transforms (#12631)
Closes #8440
Diffstat (limited to 'cli/lsp/cache.rs')
-rw-r--r--cli/lsp/cache.rs32
1 files changed, 27 insertions, 5 deletions
diff --git a/cli/lsp/cache.rs b/cli/lsp/cache.rs
index 1ea317240..b7bdb90c5 100644
--- a/cli/lsp/cache.rs
+++ b/cli/lsp/cache.rs
@@ -2,9 +2,11 @@
use crate::cache::CacherLoader;
use crate::cache::FetchCacher;
+use crate::config_file::ConfigFile;
use crate::flags::Flags;
use crate::proc_state::ProcState;
use crate::resolver::ImportMapResolver;
+use crate::resolver::JsxResolver;
use deno_core::error::anyhow;
use deno_core::error::AnyError;
@@ -13,6 +15,7 @@ use deno_runtime::permissions::Permissions;
use deno_runtime::tokio_util::create_basic_runtime;
use import_map::ImportMap;
use std::path::PathBuf;
+use std::sync::Arc;
use std::thread;
use tokio::sync::mpsc;
use tokio::sync::oneshot;
@@ -27,7 +30,8 @@ pub(crate) struct CacheServer(mpsc::UnboundedSender<Request>);
impl CacheServer {
pub async fn new(
maybe_cache_path: Option<PathBuf>,
- maybe_import_map: Option<ImportMap>,
+ maybe_import_map: Option<Arc<ImportMap>>,
+ maybe_config_file: Option<ConfigFile>,
) -> Self {
let (tx, mut rx) = mpsc::unbounded_channel::<Request>();
let _join_handle = thread::spawn(move || {
@@ -39,8 +43,26 @@ impl CacheServer {
})
.await
.unwrap();
- let maybe_resolver =
- maybe_import_map.as_ref().map(ImportMapResolver::new);
+ let maybe_import_map_resolver =
+ maybe_import_map.map(ImportMapResolver::new);
+ let maybe_jsx_resolver = maybe_config_file
+ .as_ref()
+ .map(|cf| {
+ cf.to_maybe_jsx_import_source_module()
+ .map(|im| JsxResolver::new(im, maybe_import_map_resolver.clone()))
+ })
+ .flatten();
+ let maybe_resolver = if maybe_jsx_resolver.is_some() {
+ maybe_jsx_resolver.as_ref().map(|jr| jr.as_resolver())
+ } else {
+ maybe_import_map_resolver
+ .as_ref()
+ .map(|im| im.as_resolver())
+ };
+ let maybe_imports = maybe_config_file
+ .map(|cf| cf.to_maybe_imports().ok())
+ .flatten()
+ .flatten();
let mut cache = FetchCacher::new(
ps.dir.gen_cache.clone(),
ps.file_fetcher.clone(),
@@ -52,9 +74,9 @@ impl CacheServer {
let graph = deno_graph::create_graph(
roots,
false,
- None,
+ maybe_imports.clone(),
cache.as_mut_loader(),
- maybe_resolver.as_ref().map(|r| r.as_resolver()),
+ maybe_resolver,
None,
None,
)