diff --git a/Cargo.lock b/Cargo.lock index 92f0efd..cd9e076 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -316,9 +316,9 @@ dependencies = [ [[package]] name = "dprint-swc-ext" -version = "0.16.0" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "019d17f2c2457c5a70a7cf4505b1a562ca8ab168c0ac0c005744efbd29fcb8fe" +checksum = "5a0d5b63e52434314e3d767c463b1f68c467c31e61d279bc019227016c44e535" dependencies = [ "allocator-api2", "bumpalo", @@ -410,9 +410,9 @@ checksum = "d0c62115964e08cb8039170eb33c1d0e2388a256930279edca206fff675f82c3" [[package]] name = "hstr" -version = "0.2.8" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0f5356d62012374578cd3a5c013d6586de3efbca3b53379fc1edfbb95c9db14" +checksum = "96274be293b8877e61974a607105d09c84caebe9620b47774aa8a6b942042dd4" dependencies = [ "hashbrown", "new_debug_unreachable", @@ -496,9 +496,9 @@ checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" [[package]] name = "new_debug_unreachable" -version = "1.0.4" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" [[package]] name = "num-bigint" @@ -840,10 +840,10 @@ dependencies = [ ] [[package]] -name = "sha-1" -version = "0.10.0" +name = "sha1" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", "cpufeatures", @@ -952,9 +952,9 @@ dependencies = [ [[package]] name = "swc_bundler" -version = "0.228.0" +version = "0.230.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43e4698d94115ea10fe3c6fdde2d1e736c6ba6601abab0a61d95e1015d13359f" +checksum = "9c506ddddebb846f8e68780464e2fe1fdc0add4bc265659f713a71015ffcdb13" dependencies = [ "anyhow", "crc", @@ -996,9 +996,9 @@ dependencies = [ [[package]] name = "swc_common" -version = "0.33.26" +version = "0.34.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2f9706038906e66f3919028f9f7a37f3ed552f1b85578e93f4468742e2da438" +checksum = "9087befec6b63911f9d2f239e4f91c9b21589c169b86ed2d616944d23cf4a243" dependencies = [ "ast_node", "better_scoped_tls", @@ -1048,9 +1048,9 @@ dependencies = [ [[package]] name = "swc_ecma_ast" -version = "0.113.7" +version = "0.115.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98a534a8360a076a030989f6d121ba6044345594bdf0457c4629f432742026b8" +checksum = "7be1306930c235435a892104c00c2b5e16231043c085d5a10bd3e7537b15659b" dependencies = [ "bitflags 2.5.0", "is-macro", @@ -1066,9 +1066,9 @@ dependencies = [ [[package]] name = "swc_ecma_codegen" -version = "0.149.3" +version = "0.151.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efb2bef3f4998865b2d466fb2ef9410a03449d255d199f3eb807fb19acc3862b" +checksum = "f5141a8cb4eb69e090e6aea5d49061b46919be5210f3d084f9d9ad63d30f5cff" dependencies = [ "memchr", "num-bigint", @@ -1097,9 +1097,9 @@ dependencies = [ [[package]] name = "swc_ecma_compat_bugfixes" -version = "0.5.1" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47dad0d8b1c4ca3264a8c5ac59a10127e4f1c3ec5ed271692c8897228f306d05" +checksum = "04182e17ec1343e355c4150b51226627d0160b8c0fb612bfcf3faa3d030a3866" dependencies = [ "swc_atoms", "swc_common", @@ -1114,9 +1114,9 @@ dependencies = [ [[package]] name = "swc_ecma_compat_common" -version = "0.5.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d888bcaea9c3b8178ea4abf65adf64457a95a5dd3a3c109a69e02c3c38878e96" +checksum = "0d2f791e974b5dd20a72c50aaf5507a07c6b7c2778711a4b8f62b881b92035b1" dependencies = [ "swc_common", "swc_ecma_ast", @@ -1127,9 +1127,9 @@ dependencies = [ [[package]] name = "swc_ecma_compat_es2015" -version = "0.5.1" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "248532f9ae603be6bf4763f66f74ad0dfd82d6307be876ccf4c5d081826a1161" +checksum = "d23a9a192078d1d074113d77d8ad811f2a81a4447ae967739824da5d391616bf" dependencies = [ "arrayvec", "indexmap", @@ -1153,9 +1153,9 @@ dependencies = [ [[package]] name = "swc_ecma_compat_es2016" -version = "0.5.1" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d7222c8114ae47fb2e46a65f426b125edab523192e835aecbe3136541f96500" +checksum = "a166a024e6415bb6e6e326ed6ebe2fadcea093408f0de3cf1308b4f971c171b0" dependencies = [ "swc_atoms", "swc_common", @@ -1170,9 +1170,9 @@ dependencies = [ [[package]] name = "swc_ecma_compat_es2017" -version = "0.5.1" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccdc725616ef5a558fb905b991cf328a3a36a4d1b8423173708a02568077a14" +checksum = "65f84891ddbc61b105222e64f7f33cf8a27d4020cbae2e7381899eacb69c540a" dependencies = [ "serde", "swc_atoms", @@ -1188,9 +1188,9 @@ dependencies = [ [[package]] name = "swc_ecma_compat_es2018" -version = "0.5.1" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a6c329c3980fb20c6c3f7f2afc94975bfe640d53dbb90b74a4707a514f16882" +checksum = "fe11cda413787f46bef9a66752933fb8f6f2e509cb938758ad67d27710619ee6" dependencies = [ "serde", "swc_atoms", @@ -1207,9 +1207,9 @@ dependencies = [ [[package]] name = "swc_ecma_compat_es2019" -version = "0.5.1" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1934f5021e80f6b76e5e0bd06e331d719eb9541c13cb5c128a2b994931952a4" +checksum = "ce2888fa110ff41e36bd824fa8636f876f812e64c8b12d721df90a133c28ee86" dependencies = [ "swc_atoms", "swc_common", @@ -1223,9 +1223,9 @@ dependencies = [ [[package]] name = "swc_ecma_compat_es2020" -version = "0.5.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0aeddeba198fef2e0ed2bc4a5a0b412a04063f062dc47f93e191b492fc07db4f" +checksum = "3baf93ce04ee5a888e41265280dcb12d4e6a7bcf907ef2526b69d2aed9187607" dependencies = [ "serde", "swc_atoms", @@ -1241,9 +1241,9 @@ dependencies = [ [[package]] name = "swc_ecma_compat_es2021" -version = "0.5.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "288ad7b2cc410dc4fb08687915c1f588f6a714d737e0a4d4128657124902bcae" +checksum = "529b0368f8ada330a928ecf82c6c480eefd51cacd2d6e9f3bdedf9187782f0da" dependencies = [ "swc_atoms", "swc_common", @@ -1257,9 +1257,9 @@ dependencies = [ [[package]] name = "swc_ecma_compat_es2022" -version = "0.5.2" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d4a8a9fde6f96316e8b0792a72baa209277e0ce3050b476ee3ab408ec579a2d" +checksum = "0fb64c1ee316e05823b6b698d44017848241626f1e11eaf394a642bc99d4d4cd" dependencies = [ "swc_atoms", "swc_common", @@ -1276,9 +1276,9 @@ dependencies = [ [[package]] name = "swc_ecma_compat_es3" -version = "0.5.1" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc88d41bf1d86c163997a48b10ad47a40d2d0c8b9c6ee03ead151d0022975789" +checksum = "d2d6a9792a2f534232b98a1564e3982d9135d86f6948a55e8f944ab3b960e602" dependencies = [ "swc_common", "swc_ecma_ast", @@ -1291,9 +1291,9 @@ dependencies = [ [[package]] name = "swc_ecma_loader" -version = "0.45.28" +version = "0.46.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92c68f934bd2c51f29c4ad0bcae09924e9dc30d7ce0680367d45b42d40338a67" +checksum = "5a9febebf047d1286e7b723fa2758f3229da2c103834f3eaee69833f46692612" dependencies = [ "anyhow", "pathdiff", @@ -1305,9 +1305,9 @@ dependencies = [ [[package]] name = "swc_ecma_parser" -version = "0.144.3" +version = "0.146.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0b4193b9c127db1990a5a08111aafe0122bc8b138646807c63f2a6521b7da4" +checksum = "0a4e0c2e85f12c63b85c805e923079b04d1fb3e25edd069d638eed5f2098de74" dependencies = [ "either", "new_debug_unreachable", @@ -1327,9 +1327,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_base" -version = "0.138.4" +version = "0.140.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7b76d09313cdd8f99bc1519fb04f8a93427c7a6f4bfbc64b39fcc5a378ab1b7" +checksum = "d37dc505c92af56d0f77cf6f31a6ccd37ac40cad1e01ff77277e0b1c70e8f8ff" dependencies = [ "better_scoped_tls", "bitflags 2.5.0", @@ -1350,9 +1350,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_classes" -version = "0.127.1" +version = "0.129.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53043d81678f3c693604eeb1d1f0fe6ba10f303104a31b954dbeebed9cadf530" +checksum = "a3eab5f8179e5b0aedf385eacc2c033691c6d211a7babd1bbbff12cf794a824e" dependencies = [ "swc_atoms", "swc_common", @@ -1364,9 +1364,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_compat" -version = "0.164.1" +version = "0.166.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d4e2942c5d8b7afdf81b8d1eec2f4a961aa9fc89ab05ebe5cbd0f6066b60afc" +checksum = "626198f214d4c09adc98ab14565c19d72b6df9630f7e806ef9b2ef05a5fd17a5" dependencies = [ "arrayvec", "indexmap", @@ -1412,9 +1412,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_optimization" -version = "0.199.2" +version = "0.201.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25982d69c91cd64cbfae714d9e953810b3f2835486d08108967cbd15016e7720" +checksum = "724a8306e98c1b1f9640fc44c1acc0c971f6daa17651919e06b64f905d4a4564" dependencies = [ "dashmap", "indexmap", @@ -1436,9 +1436,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_proposal" -version = "0.172.3" +version = "0.174.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fbc414d6a9c5479cfb4c6e92fcdac504582bd7bc89a0ed7f8808b72dc8bd1f0" +checksum = "6df8aa6752cc2fcf3d78ac67827542fb666e52283f2b26802aa058906bb750d3" dependencies = [ "either", "rustc-hash", @@ -1456,16 +1456,16 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_react" -version = "0.184.1" +version = "0.186.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "565a76c4ca47ce31d78301c0beab878e4c2cb4f624691254d834ec8c0e236755" +checksum = "446da32cac8299973aaf1d37496562bfd0c1e4f3c3ab5d0af6f07f42e8184102" dependencies = [ "base64", "dashmap", "indexmap", "once_cell", "serde", - "sha-1", + "sha1", "string_enum", "swc_atoms", "swc_common", @@ -1480,9 +1480,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_typescript" -version = "0.189.1" +version = "0.191.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e209026c1d3c577cafac257d87e7c0d23119282fbdc8ed03d7f56077e95beb90" +checksum = "f1ce8af2865449e714ae56dacb6b54b3f6dc4cc25074da4e39b878bd93c5e39c" dependencies = [ "ryu-js", "serde", @@ -1497,9 +1497,9 @@ dependencies = [ [[package]] name = "swc_ecma_utils" -version = "0.128.3" +version = "0.130.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02f470d8cc31adf6189b228636201ee3cdd268c0b5a2d0407f83093dfa96ff91" +checksum = "13e62b199454a576c5fdbd7e1bef8ab88a395427456d8a713d994b7d469833aa" dependencies = [ "indexmap", "num_cpus", @@ -1516,9 +1516,9 @@ dependencies = [ [[package]] name = "swc_ecma_visit" -version = "0.99.1" +version = "0.101.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28a6ce28ad8e591f8d627f1f9cb26b25e5d83052a9bc1b674d95fc28040cfa98" +checksum = "ce0d997f0c9b4e181225f603d161f6757c2a97022258170982cfe005ec69ec92" dependencies = [ "num-bigint", "swc_atoms", @@ -1541,9 +1541,9 @@ dependencies = [ [[package]] name = "swc_fast_graph" -version = "0.21.22" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3fdd64bc3d161d6c1ea9a8ae5779e4ba132afc67e7b8ece5420bfc9c6e1275d" +checksum = "c00cf5c1687e9858fb9de1ffa90a3e21369095406e97ace870a389320d105b0a" dependencies = [ "indexmap", "petgraph", @@ -1553,9 +1553,9 @@ dependencies = [ [[package]] name = "swc_graph_analyzer" -version = "0.22.23" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c728a8f9b82b7160a1ae246e31232177b371f827eb0d01006c0f120a3494871c" +checksum = "a928a2ad8897fb78c38898ba342960863e9937b7a3de2d010d3204d85ce1b72a" dependencies = [ "auto_impl", "petgraph", diff --git a/Cargo.toml b/Cargo.toml index 327cfd1..5d006a0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -36,7 +36,7 @@ base64 = { version = "0.21.6", optional = true } deno_media_type = "0.1.4" deno_terminal = "0.1.1" -dprint-swc-ext = "0.16.0" +dprint-swc-ext = "0.17.0" once_cell = "1.19.0" percent-encoding = "2.3.1" serde = { version = "1.0.144", features = ["derive"] } @@ -50,27 +50,27 @@ unicode-width = "0.1" # # NOTE: You can automatically update these dependencies by running ./scripts/update_swc_deps.ts swc_atoms = "=0.6.7" -swc_common = "=0.33.26" +swc_common = "=0.34.4" swc_config = { version = "=0.1.14", optional = true } swc_config_macro = { version = "=0.1.4", optional = true } -swc_ecma_ast = { version = "=0.113.7", features = ["serde-impl"] } -swc_ecma_codegen = { version = "=0.149.3", optional = true } +swc_ecma_ast = { version = "=0.115.1", features = ["serde-impl"] } +swc_ecma_codegen = { version = "=0.151.1", optional = true } swc_ecma_codegen_macros = { version = "=0.7.6", optional = true } -swc_ecma_loader = { version = "=0.45.28", optional = true } -swc_ecma_parser = "=0.144.3" -swc_ecma_transforms_base = { version = "=0.138.4", optional = true } -swc_ecma_transforms_classes = { version = "=0.127.1", optional = true } -swc_ecma_transforms_compat = { version = "=0.164.1", optional = true } +swc_ecma_loader = { version = "=0.46.1", optional = true } +swc_ecma_parser = "=0.146.12" +swc_ecma_transforms_base = { version = "=0.140.3", optional = true } +swc_ecma_transforms_classes = { version = "=0.129.0", optional = true } +swc_ecma_transforms_compat = { version = "=0.166.1", optional = true } swc_ecma_transforms_macros = { version = "=0.5.5", optional = true } -swc_ecma_transforms_optimization = { version = "=0.199.2", optional = true } -swc_ecma_transforms_proposal = { version = "=0.172.3", optional = true } -swc_ecma_transforms_react = { version = "=0.184.1", optional = true } -swc_ecma_transforms_typescript = { version = "=0.189.1", optional = true } -swc_ecma_utils = { version = "=0.128.3", optional = true } -swc_ecma_visit = { version = "=0.99.1", optional = true } +swc_ecma_transforms_optimization = { version = "=0.201.2", optional = true } +swc_ecma_transforms_proposal = { version = "=0.174.3", optional = true } +swc_ecma_transforms_react = { version = "=0.186.2", optional = true } +swc_ecma_transforms_typescript = { version = "=0.191.2", optional = true } +swc_ecma_utils = { version = "=0.130.3", optional = true } +swc_ecma_visit = { version = "=0.101.0", optional = true } swc_eq_ignore_macros = "=0.1.3" -swc_bundler = { version = "=0.228.0", optional = true } -swc_graph_analyzer = { version = "=0.22.23", optional = true } +swc_bundler = { version = "=0.230.2", optional = true } +swc_graph_analyzer = { version = "=0.23.0", optional = true } swc_macros_common = { version = "=0.3.11", optional = true } swc_trace_macro = { version = "=0.1.3", optional = true } swc_visit = { version = "=0.5.14", optional = true } diff --git a/src/parsing.rs b/src/parsing.rs index 7f99098..fcbd2bd 100644 --- a/src/parsing.rs +++ b/src/parsing.rs @@ -15,9 +15,9 @@ use crate::swc::common::input::StringInput; use crate::swc::parser::error::Error as SwcError; use crate::swc::parser::lexer::Lexer; use crate::swc::parser::token::TokenAndSpan; -use crate::swc::parser::EsConfig; +use crate::swc::parser::EsSyntax; use crate::swc::parser::Syntax; -use crate::swc::parser::TsConfig; +use crate::swc::parser::TsSyntax; use crate::Globals; use crate::MediaType; use crate::ModuleSpecifier; @@ -291,7 +291,7 @@ pub fn get_syntax(media_type: MediaType) -> Syntax { | MediaType::Dmts | MediaType::Dcts | MediaType::Tsx => { - Syntax::Typescript(TsConfig { + Syntax::Typescript(TsSyntax { decorators: true, // should be true for mts and cts: // https://babeljs.io/docs/babel-preset-typescript#disallowambiguousjsxlike @@ -315,7 +315,7 @@ pub fn get_syntax(media_type: MediaType) -> Syntax { | MediaType::Wasm | MediaType::TsBuildInfo | MediaType::SourceMap - | MediaType::Unknown => Syntax::Es(EsConfig { + | MediaType::Unknown => Syntax::Es(EsSyntax { allow_return_outside_function: true, allow_super_outside_method: true, auto_accessors: true, diff --git a/src/transpiling/jsx_precompile.rs b/src/transpiling/jsx_precompile.rs index 728e233..08c66b3 100644 --- a/src/transpiling/jsx_precompile.rs +++ b/src/transpiling/jsx_precompile.rs @@ -299,15 +299,19 @@ fn normalize_lit_str(lit: &Lit) -> Lit { } } -fn jsx_text_to_str(jsx_text: &JSXText, escape: bool) -> String { +fn jsx_text_to_str( + jsx_text: &JSXText, + escape: bool, + trim_last_child: bool, +) -> String { let mut text = String::new(); let mut lines = jsx_text.value.lines().enumerate().peekable(); while let Some((i, line)) = lines.next() { let mut line = if i != 0 { line.trim_start() } else { line }; - if lines.peek().is_some() { - line = line.trim_end() + if lines.peek().is_some() || trim_last_child { + line = line.trim_end(); } if line.is_empty() { @@ -427,6 +431,7 @@ fn merge_serializable_children( children: &[JSXElementChild], skip_serialize: &Option>, escape_text_children: bool, + is_parent_serializable: bool, ) -> (Vec, usize, usize) { // Do a first pass over children to merge sibling text nodes // and check if it contains any serializable nodes. @@ -435,10 +440,15 @@ fn merge_serializable_children( let mut buf = String::new(); let mut normalized_children: Vec = vec![]; - for child in children.iter() { + let mut child_iter = children.iter().peekable(); + while let Some(child) = child_iter.next() { match child { JSXElementChild::JSXText(jsx_text) => { - let text = jsx_text_to_str(jsx_text, escape_text_children); + let text = jsx_text_to_str( + jsx_text, + escape_text_children, + is_parent_serializable && child_iter.peek().is_none(), + ); if text.is_empty() { continue; } @@ -641,7 +651,7 @@ impl JsxPrecompile { let child = &children[0]; match child { JSXElementChild::JSXText(jsx_text) => { - let text = jsx_text_to_str(jsx_text, false); + let text = jsx_text_to_str(jsx_text, false, true); Some(string_lit_expr(text.into())) } JSXElementChild::JSXExprContainer(jsx_expr_container) => { @@ -669,7 +679,12 @@ impl JsxPrecompile { } _ => { let (normalized_children, text_count, serializable_count) = - merge_serializable_children(children, &self.skip_serialize, false); + merge_serializable_children( + children, + &self.skip_serialize, + false, + false, + ); // Merge sibling children when they can be serialized into one // serialized child. If all children are serializable, we'll @@ -693,6 +708,7 @@ impl JsxPrecompile { &normalized_children, &mut strings, &mut dynamic_exprs, + false, ); let expr = self.gen_template(index, strings, dynamic_exprs); @@ -987,9 +1003,15 @@ impl JsxPrecompile { children: &[JSXElementChild], strings: &mut Vec, dynamic_exprs: &mut Vec, + is_parent_serializable: bool, ) { let (normalized_children, _text_count, _serializable_count) = - merge_serializable_children(children, &self.skip_serialize, true); + merge_serializable_children( + children, + &self.skip_serialize, + true, + is_parent_serializable, + ); for child in normalized_children { match child { @@ -1030,6 +1052,7 @@ impl JsxPrecompile { &jsx_frag.children, strings, dynamic_exprs, + false, ), // Invalid, was part of an earlier JSX iteration, but no // transform supports it. Babel and TypeScript error when they @@ -1285,7 +1308,12 @@ impl JsxPrecompile { return; } - self.serialize_jsx_children_to_string(&el.children, strings, dynamic_exprs); + self.serialize_jsx_children_to_string( + &el.children, + strings, + dynamic_exprs, + true, + ); let closing_tag = format!("", name); strings.last_mut().unwrap().push_str(closing_tag.as_str()); @@ -1498,6 +1526,7 @@ impl VisitMut for JsxPrecompile { &frag.children, &mut strings, &mut dynamic_exprs, + false, ); *expr = self.gen_template(index, strings, dynamic_exprs) } @@ -1531,6 +1560,7 @@ impl VisitMut for JsxPrecompile { &frag.children, &mut strings, &mut dynamic_exprs, + false, ); *expr = self.gen_template(index, strings, dynamic_exprs) } @@ -1547,7 +1577,7 @@ mod tests { use crate::swc::parser::Parser; use crate::swc::parser::StringInput; use crate::swc::parser::Syntax; - use crate::swc::parser::TsConfig; + use crate::swc::parser::TsSyntax; use crate::swc::visit::FoldWith; use crate::EmitOptions; use crate::SourceMap; @@ -2755,7 +2785,7 @@ const a = _jsxTemplate($$_tpl_1, _jsxAttr("class", "foo"), _jsxAttr("className", let source_file = source_map.new_source_file("file:///test.ts", src.to_string()); let input = StringInput::from(&*source_file); - let syntax = Syntax::Typescript(TsConfig { + let syntax = Syntax::Typescript(TsSyntax { tsx: true, ..Default::default() }); diff --git a/src/transpiling/transforms.rs b/src/transpiling/transforms.rs index 7c6bf3c..3295b22 100644 --- a/src/transpiling/transforms.rs +++ b/src/transpiling/transforms.rs @@ -283,7 +283,7 @@ mod test { use crate::swc::parser::Parser; use crate::swc::parser::StringInput; use crate::swc::parser::Syntax; - use crate::swc::parser::TsConfig; + use crate::swc::parser::TsSyntax; use crate::swc::visit::Fold; use crate::swc::visit::FoldWith; use crate::ModuleSpecifier; @@ -495,7 +495,7 @@ mod test { src.to_string(), ); let input = StringInput::from(&*source_file); - let syntax = Syntax::Typescript(TsConfig { + let syntax = Syntax::Typescript(TsSyntax { ..Default::default() }); let mut parser = Parser::new(syntax, input, None);