From f5eb177f50a0bf37bc6bd9d87b447c73a53b6ea5 Mon Sep 17 00:00:00 2001 From: Kitson Kelly Date: Tue, 9 Nov 2021 12:26:39 +1100 Subject: feat(cli): support React 17 JSX transforms (#12631) Closes #8440 --- cli/tools/doc.rs | 2 +- cli/tools/repl.rs | 3 +++ cli/tools/test.rs | 31 +++++++++++++++++++++++++------ 3 files changed, 29 insertions(+), 7 deletions(-) (limited to 'cli/tools') diff --git a/cli/tools/doc.rs b/cli/tools/doc.rs index aa9d913a0..cc37df06d 100644 --- a/cli/tools/doc.rs +++ b/cli/tools/doc.rs @@ -38,7 +38,7 @@ impl Loader for StubDocLoader { #[derive(Debug)] struct DocResolver { - import_map: Option, + import_map: Option>, } impl Resolver for DocResolver { diff --git a/cli/tools/repl.rs b/cli/tools/repl.rs index f3ba626af..b6874f574 100644 --- a/cli/tools/repl.rs +++ b/cli/tools/repl.rs @@ -668,8 +668,11 @@ impl ReplSession { imports_not_used_as_values: ImportsNotUsedAsValues::Preserve, // JSX is not supported in the REPL transform_jsx: false, + jsx_automatic: false, + jsx_development: false, jsx_factory: "React.createElement".into(), jsx_fragment_factory: "React.Fragment".into(), + jsx_import_source: None, repl_imports: true, }, )? diff --git a/cli/tools/test.rs b/cli/tools/test.rs index d883f18a3..fba178202 100644 --- a/cli/tools/test.rs +++ b/cli/tools/test.rs @@ -18,6 +18,7 @@ use crate::lockfile; use crate::ops; use crate::proc_state::ProcState; use crate::resolver::ImportMapResolver; +use crate::resolver::JsxResolver; use crate::tools::coverage::CoverageCollector; use deno_ast::swc::common::comments::CommentKind; @@ -1053,14 +1054,21 @@ pub async fn run_tests_with_watch( let paths_to_watch = paths_to_watch.clone(); let paths_to_watch_clone = paths_to_watch.clone(); - let maybe_resolver = - ps.maybe_import_map.as_ref().map(ImportMapResolver::new); + let maybe_import_map_resolver = + ps.maybe_import_map.clone().map(ImportMapResolver::new); + let maybe_jsx_resolver = ps + .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_locker = lockfile::as_maybe_locker(ps.lockfile.clone()); let maybe_imports = ps .maybe_config_file .as_ref() - .map(|cf| cf.to_maybe_imports()) - .flatten(); + .map(|cf| cf.to_maybe_imports()); let files_changed = changed.is_some(); let include = include.clone(); let ignore = ignore.clone(); @@ -1081,13 +1089,24 @@ pub async fn run_tests_with_watch( .filter_map(|url| deno_core::resolve_url(url.as_str()).ok()) .collect() }; - + let maybe_imports = if let Some(result) = maybe_imports { + result? + } else { + None + }; + 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 graph = deno_graph::create_graph( test_modules.clone(), false, maybe_imports, cache.as_mut_loader(), - maybe_resolver.as_ref().map(|r| r.as_resolver()), + maybe_resolver, maybe_locker, None, ) -- cgit v1.2.3