diff --git a/Cargo.lock b/Cargo.lock index 5d69e72..a9341e0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -102,9 +102,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.13.0" +version = "3.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" [[package]] name = "cc" @@ -261,9 +261,9 @@ dependencies = [ [[package]] name = "dprint-swc-ext" -version = "0.12.0" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a0a2492465344a58a37ae119de59e81fe5a2885f2711c7b5048ef0dfa14ce42" +checksum = "7b2f24ce6b89a06ae3eb08d5d4f88c05d0aef1fa58e2eba8dd92c97b84210c25" dependencies = [ "bumpalo", "num-bigint", @@ -775,6 +775,12 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" +[[package]] +name = "ryu-js" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4950d85bc52415f8432144c97c4791bd0c4f7954de32a7270ee9cccd3c22b12b" + [[package]] name = "scoped-tls" version = "1.0.1" @@ -804,18 +810,18 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.183" +version = "1.0.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32ac8da02677876d532745a130fc9d8e6edfa81a269b107c5b00829b91d8eb3c" +checksum = "8e422a44e74ad4001bdc8eede9a4570ab52f71190e9c076d14369f38b9200537" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.183" +version = "1.0.189" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aafe972d60b0b9bee71a91b92fee2d4fb3c9d7e8f6b179aa99f27203d99a4816" +checksum = "1e48d1f918009ce3145511378cf68d613e3b3d9137d67272562080d68a2b32d5" dependencies = [ "proc-macro2", "quote", @@ -950,9 +956,9 @@ dependencies = [ [[package]] name = "swc_atoms" -version = "0.5.9" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f54563d7dcba626d4acfe14ed12def7ecc28e004debe3ecd2c3ee07cc47e449" +checksum = "ebf7a12229f0c0efb654a6a0f8cbfd94fbd320a57c764857a82d8abe9342b450" dependencies = [ "once_cell", "rustc-hash", @@ -964,9 +970,9 @@ dependencies = [ [[package]] name = "swc_bundler" -version = "0.219.5" +version = "0.222.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "421cc659acd7807306c5a422eb95d09c20975464fe3ad5004e1e62ee2a6fc304" +checksum = "dd23005258a28d04d7f14257c76ef053b3622f94374c7bcab05eadf4267b4132" dependencies = [ "anyhow", "crc", @@ -994,9 +1000,9 @@ dependencies = [ [[package]] name = "swc_common" -version = "0.32.0" +version = "0.33.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39cb7fcd56655c8ae7dcf2344f0be6cbff4d9c7cb401fe3ec8e56e1de8dfe582" +checksum = "490e199e25d2aa3fbef675524fa81408651f4e7178b51110470ddd1b3e3bbe75" dependencies = [ "ast_node", "better_scoped_tls", @@ -1046,9 +1052,9 @@ dependencies = [ [[package]] name = "swc_ecma_ast" -version = "0.109.0" +version = "0.110.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bc2286cedd688a68f214faa1c19bb5cceab7c9c54d0cbe3273e4c1704e38f69" +checksum = "5cbbf9918976a7e7fbdb4f76fe659d08e291a8b56b524b424183fc67d1189679" dependencies = [ "bitflags 2.4.0", "is-macro", @@ -1063,9 +1069,9 @@ dependencies = [ [[package]] name = "swc_ecma_codegen" -version = "0.144.1" +version = "0.146.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e62ba2c0ed1f119fc1a76542d007f1b2c12854d54dea15f5491363227debe11" +checksum = "fa38b8961c26a4c35d9386e143d2037697bc2b2c816bef4505546ca441c2b32e" dependencies = [ "memchr", "num-bigint", @@ -1093,11 +1099,204 @@ dependencies = [ "syn 2.0.28", ] +[[package]] +name = "swc_ecma_compat_bugfixes" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ea916aba5f26999a9ae41084d6af32f477af39efca35f23f6021f25e1c5061f" +dependencies = [ + "swc_atoms", + "swc_common", + "swc_ecma_ast", + "swc_ecma_compat_es2015", + "swc_ecma_transforms_base", + "swc_ecma_utils", + "swc_ecma_visit", + "swc_trace_macro", + "tracing", +] + +[[package]] +name = "swc_ecma_compat_common" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43ddd94895462786220db143504525d63d6ed8f50f5ce013bcce74a75c867430" +dependencies = [ + "swc_common", + "swc_ecma_ast", + "swc_ecma_utils", + "swc_ecma_visit", + "swc_trace_macro", +] + +[[package]] +name = "swc_ecma_compat_es2015" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc35f34fe5946cc882e2384c8660423011660073b553ffc196d0763213f91d20" +dependencies = [ + "arrayvec", + "indexmap 1.9.3", + "is-macro", + "serde", + "serde_derive", + "smallvec", + "swc_atoms", + "swc_common", + "swc_config", + "swc_ecma_ast", + "swc_ecma_compat_common", + "swc_ecma_transforms_base", + "swc_ecma_transforms_classes", + "swc_ecma_transforms_macros", + "swc_ecma_utils", + "swc_ecma_visit", + "swc_trace_macro", + "tracing", +] + +[[package]] +name = "swc_ecma_compat_es2016" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "019538e228986ee2c36be8aafeb64b02c079ab7e928362c838951cf37e576b35" +dependencies = [ + "swc_atoms", + "swc_common", + "swc_ecma_ast", + "swc_ecma_transforms_base", + "swc_ecma_transforms_macros", + "swc_ecma_utils", + "swc_ecma_visit", + "swc_trace_macro", + "tracing", +] + +[[package]] +name = "swc_ecma_compat_es2017" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aaea5539d33588df8953ae1e10c52c8e384eab74fc45eb47257787b973af22ae" +dependencies = [ + "serde", + "swc_atoms", + "swc_common", + "swc_ecma_ast", + "swc_ecma_transforms_base", + "swc_ecma_transforms_macros", + "swc_ecma_utils", + "swc_ecma_visit", + "swc_trace_macro", + "tracing", +] + +[[package]] +name = "swc_ecma_compat_es2018" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e167a455b42f1b715989cb771ac89ad03181da30f86848984e346f3ae2d2f42" +dependencies = [ + "serde", + "swc_atoms", + "swc_common", + "swc_ecma_ast", + "swc_ecma_compat_common", + "swc_ecma_transforms_base", + "swc_ecma_transforms_macros", + "swc_ecma_utils", + "swc_ecma_visit", + "swc_trace_macro", + "tracing", +] + +[[package]] +name = "swc_ecma_compat_es2019" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce0991bc64cccf9708ab2c84dcb3e34c01a2e99242594adcae65f7bdd4a25b61" +dependencies = [ + "swc_atoms", + "swc_common", + "swc_ecma_ast", + "swc_ecma_transforms_base", + "swc_ecma_utils", + "swc_ecma_visit", + "swc_trace_macro", + "tracing", +] + +[[package]] +name = "swc_ecma_compat_es2020" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68d47a4f5a9dcc8d8f0607ebce3b1945173a6deb0b94d6f8355373ecf0d3dad0" +dependencies = [ + "serde", + "swc_atoms", + "swc_common", + "swc_ecma_ast", + "swc_ecma_transforms_base", + "swc_ecma_utils", + "swc_ecma_visit", + "swc_trace_macro", + "tracing", +] + +[[package]] +name = "swc_ecma_compat_es2021" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51954b49ed83bb71711507e9448635b9c594f23e7a91c7124fd11946bb504650" +dependencies = [ + "swc_atoms", + "swc_common", + "swc_ecma_ast", + "swc_ecma_transforms_base", + "swc_ecma_utils", + "swc_ecma_visit", + "swc_trace_macro", + "tracing", +] + +[[package]] +name = "swc_ecma_compat_es2022" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15b608e6a0acec03c4b6080802ab7acce721f14fc1bad4b74ed3a8f88b10591d" +dependencies = [ + "swc_atoms", + "swc_common", + "swc_ecma_ast", + "swc_ecma_compat_common", + "swc_ecma_transforms_base", + "swc_ecma_transforms_classes", + "swc_ecma_transforms_macros", + "swc_ecma_utils", + "swc_ecma_visit", + "swc_trace_macro", + "tracing", +] + +[[package]] +name = "swc_ecma_compat_es3" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9090df83f32d59f3ca4a634fbad737e65c713454ed0e70c7fd29342192023f80" +dependencies = [ + "swc_common", + "swc_ecma_ast", + "swc_ecma_transforms_base", + "swc_ecma_utils", + "swc_ecma_visit", + "swc_trace_macro", + "tracing", +] + [[package]] name = "swc_ecma_dep_graph" -version = "0.111.1" +version = "0.113.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5526adf6a434f145c8caf7e3a2dba554a2ad09b84467b6a62210f9ef0af0f71" +checksum = "fa26e30851f26478dda3f5ab9b6dcdd947aa7e5f1223bd6847441c0fad197cc3" dependencies = [ "swc_atoms", "swc_common", @@ -1107,9 +1306,9 @@ dependencies = [ [[package]] name = "swc_ecma_loader" -version = "0.44.2" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7d7c322462657ae27ac090a2c89f7e456c94416284a2f5ecf66c43a6a3c19d1" +checksum = "a7fe06d942fe20a5a81cc14f4a53e64a5efdc851fa895a869224b2d41df73276" dependencies = [ "anyhow", "pathdiff", @@ -1120,9 +1319,9 @@ dependencies = [ [[package]] name = "swc_ecma_parser" -version = "0.139.0" +version = "0.141.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eab46cb863bc5cd61535464e07e5b74d5f792fa26a27b9f6fd4c8daca9903b7" +checksum = "97025b945d6d0b80089225de57a031bee01b3754a148eb5469b2d13a3b1dda48" dependencies = [ "either", "num-bigint", @@ -1140,9 +1339,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_base" -version = "0.132.2" +version = "0.134.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01ffd4a8149052bfc1ec1832fcbe04f317846ce635a49ec438df33b06db27d26" +checksum = "eb62881d11242b097e10815834a44063ce7d1308290f9c00a2a5c6ab70404984" dependencies = [ "better_scoped_tls", "bitflags 2.4.0", @@ -1163,9 +1362,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_classes" -version = "0.121.2" +version = "0.123.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4b7fee0e2c6f12456d2aefb2418f2f26529b995945d493e1dce35a5a22584fc" +checksum = "fe8ee3ee411e95bdad4725ebc06b354691a4d89d11dffd58428e1c3845ecb3d9" dependencies = [ "swc_atoms", "swc_common", @@ -1177,9 +1376,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_compat" -version = "0.158.3" +version = "0.160.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f8166acda99407392d9efcd6d7d1ad40e7b25a8f2a4f317fc4c029deeb43cd2" +checksum = "5a1711bb7c64ef1639f95eb92370df4f7be6738b33edaa72a5a914c97d2f1080" dependencies = [ "arrayvec", "indexmap 1.9.3", @@ -1191,6 +1390,17 @@ dependencies = [ "swc_common", "swc_config", "swc_ecma_ast", + "swc_ecma_compat_bugfixes", + "swc_ecma_compat_common", + "swc_ecma_compat_es2015", + "swc_ecma_compat_es2016", + "swc_ecma_compat_es2017", + "swc_ecma_compat_es2018", + "swc_ecma_compat_es2019", + "swc_ecma_compat_es2020", + "swc_ecma_compat_es2021", + "swc_ecma_compat_es2022", + "swc_ecma_compat_es3", "swc_ecma_transforms_base", "swc_ecma_transforms_classes", "swc_ecma_transforms_macros", @@ -1215,9 +1425,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_optimization" -version = "0.192.3" +version = "0.195.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "880fd2a588ac88a61cd1d21b10203bbabe31d7adacbd22de3bb4d702bf2c42b4" +checksum = "489aa13b1205c6aee64250ebe72ef4a1dd48747c26ba8c99eb5ae951c30f3def" dependencies = [ "dashmap", "indexmap 1.9.3", @@ -1239,9 +1449,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_proposal" -version = "0.166.3" +version = "0.168.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "122fd9a69f464694edefbf9c59106b3c15e5cc8cb8575a97836e4fb79018e98f" +checksum = "d1b398847c9ea283be19532764a94e5364e7758b9fed1b6d586b369ee1c95adf" dependencies = [ "either", "rustc-hash", @@ -1259,9 +1469,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_react" -version = "0.178.3" +version = "0.180.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "675b5c755b0448268830e85e59429095d3423c0ce4a850b209c6f0eeab069f63" +checksum = "8a8269a1a8a2af099fdfbb449f854be3ad4225603d7c32b2cf342b53cb865a11" dependencies = [ "base64", "dashmap", @@ -1283,10 +1493,11 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_typescript" -version = "0.182.3" +version = "0.185.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eba97b1ea71739fcf278aedad4677a3cacb52288a3f3566191b70d16a889de6" +checksum = "879a4ccfd7560010dca24e8051b0c8cf3284c71c3960eaa64303ba0889bb1ade" dependencies = [ + "ryu-js", "serde", "swc_atoms", "swc_common", @@ -1299,9 +1510,9 @@ dependencies = [ [[package]] name = "swc_ecma_utils" -version = "0.122.0" +version = "0.124.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11006a3398ffd4693c4d3b0a1b1a5030edbdc04228159f5301120a6178144708" +checksum = "ca44c8eb2841389493b6b532fc80c635b73a9f3f0e936edec4783abc7fa8e979" dependencies = [ "indexmap 1.9.3", "num_cpus", @@ -1317,9 +1528,9 @@ dependencies = [ [[package]] name = "swc_ecma_visit" -version = "0.95.0" +version = "0.96.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f628ec196e76e67892441e14eef2e423a738543d32bffdabfeec20c29582117" +checksum = "47081acd84cdb2d49d6340ed3204e17738b444da10a3e1dd1eb3d7c8e4d47091" dependencies = [ "num-bigint", "swc_atoms", @@ -1343,9 +1554,9 @@ dependencies = [ [[package]] name = "swc_fast_graph" -version = "0.20.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a407fff2eb5ce3bee7513bdd9531a7be0285bc1213500b6d98ad235428d94cce" +checksum = "b97e69e9617913611e39284cf724a412ab7fc6081708d0ef2820855774da5357" dependencies = [ "indexmap 1.9.3", "petgraph", @@ -1355,9 +1566,9 @@ dependencies = [ [[package]] name = "swc_graph_analyzer" -version = "0.21.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90b996222612382d0d297d0315f5eedc5a830c37e62476c69774884633d31177" +checksum = "0f59cccef405565b041a8fa1fc2e7059856149f7fc658544c4bafd1a001ea483" dependencies = [ "auto_impl", "petgraph", diff --git a/Cargo.toml b/Cargo.toml index 7a20333..c28dc8a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -35,7 +35,7 @@ anyhow = { version = "1.0.64", optional = true } base64 = { version = "0.13.1", optional = true } deno_media_type = { version = "0.1.2", default-features = false } -dprint-swc-ext = "0.12.0" +dprint-swc-ext = "0.13.0" serde = { version = "1.0.144", features = ["derive"] } text_lines = { version = "0.6.0", features = ["serialization"] } url = { version = "2.3.1", features = ["serde"], optional = true } @@ -43,29 +43,29 @@ url = { version = "2.3.1", features = ["serde"], optional = true } # swc's version bumping is very buggy and there will often be patch versions # published that break our build, so we pin all swc versions to prevent # pulling in new versions of swc crates -swc_atoms = "=0.5.9" -swc_common = "=0.32.0" +swc_atoms = "=0.6.0" +swc_common = "=0.33.0" swc_config = { version = "=0.1.7", optional = true } swc_config_macro = { version = "=0.1.2", optional = true } -swc_ecma_ast = { version = "=0.109.0", features = ["serde-impl"] } -swc_ecma_codegen = { version = "=0.144.1", optional = true } +swc_ecma_ast = { version = "=0.110.0", features = ["serde-impl"] } +swc_ecma_codegen = { version = "=0.146.2", optional = true } swc_ecma_codegen_macros = { version = "=0.7.3", optional = true } -swc_ecma_dep_graph = { version = "=0.111.1", optional = true } -swc_ecma_loader = { version = "=0.44.2", optional = true } -swc_ecma_parser = "=0.139.0" -swc_ecma_transforms_base = { version = "=0.132.2", optional = true } -swc_ecma_transforms_classes = { version = "=0.121.2", optional = true } -swc_ecma_transforms_compat = { version = "=0.158.3", optional = true } +swc_ecma_dep_graph = { version = "=0.113.2", optional = true } +swc_ecma_loader = { version = "=0.45.0", optional = true } +swc_ecma_parser = "=0.141.2" +swc_ecma_transforms_base = { version = "=0.134.6", optional = true } +swc_ecma_transforms_classes = { version = "=0.123.6", optional = true } +swc_ecma_transforms_compat = { version = "=0.160.8", optional = true } swc_ecma_transforms_macros = { version = "=0.5.3", optional = true } -swc_ecma_transforms_optimization = { version = "=0.192.3", optional = true } -swc_ecma_transforms_proposal = { version = "=0.166.3", optional = true } -swc_ecma_transforms_react = { version = "=0.178.3", optional = true } -swc_ecma_transforms_typescript = { version = "=0.182.3", optional = true } -swc_ecma_utils = { version = "=0.122.0", optional = true } -swc_ecma_visit = { version = "=0.95.0", optional = true } +swc_ecma_transforms_optimization = { version = "=0.195.4", optional = true } +swc_ecma_transforms_proposal = { version = "=0.168.10", optional = true } +swc_ecma_transforms_react = { version = "=0.180.8", optional = true } +swc_ecma_transforms_typescript = { version = "=0.185.4", optional = true } +swc_ecma_utils = { version = "=0.124.5", optional = true } +swc_ecma_visit = { version = "=0.96.0", optional = true } swc_eq_ignore_macros = "=0.1.2" -swc_bundler = { version = "=0.219.5", optional = true } -swc_graph_analyzer = { version = "=0.21.0", optional = true } +swc_bundler = { version = "=0.222.6", optional = true } +swc_graph_analyzer = { version = "=0.22.0", optional = true } swc_macros_common = { version = "=0.3.8", optional = true } swc_trace_macro = { version = "=0.1.3", optional = true } swc_visit = { version = "=0.5.7", optional = true } diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 39a7169..0639850 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,4 +1,4 @@ [toolchain] -channel = "1.70.0" +channel = "1.73.0" components = ["clippy", "rustfmt"] profile = "minimal" diff --git a/src/transpiling/mod.rs b/src/transpiling/mod.rs index 89b7771..4c3d9eb 100644 --- a/src/transpiling/mod.rs +++ b/src/transpiling/mod.rs @@ -24,13 +24,11 @@ use crate::swc::transforms::proposal; use crate::swc::transforms::react; use crate::swc::transforms::resolver; use crate::swc::transforms::typescript; -use crate::swc::transforms::typescript::TsEnumConfig; use crate::swc::visit::FoldWith; use crate::Diagnostic; use crate::DiagnosticsError; use crate::ModuleSpecifier; use crate::ParsedSource; -use crate::ES_VERSION; use std::cell::RefCell; @@ -108,34 +106,36 @@ impl Default for EmitOptions { } impl EmitOptions { - fn as_typescript_strip_config(&self) -> typescript::strip::Config { - #![allow(deprecated)] - typescript::strip::Config { + fn as_tsx_config(&self) -> typescript::TsxConfig { + typescript::TsxConfig { pragma: Some(self.jsx_factory.clone()), pragma_frag: Some(self.jsx_fragment_factory.clone()), + } + } + + fn as_typescript_config(&self) -> typescript::Config { + typescript::Config { + verbatim_module_syntax: false, import_not_used_as_values: match self.imports_not_used_as_values { ImportsNotUsedAsValues::Remove => { - typescript::strip::ImportsNotUsedAsValues::Remove + typescript::ImportsNotUsedAsValues::Remove } ImportsNotUsedAsValues::Preserve => { - typescript::strip::ImportsNotUsedAsValues::Preserve + typescript::ImportsNotUsedAsValues::Preserve } // `Error` only affects the type-checking stage. Fall back to `Remove` here. ImportsNotUsedAsValues::Error => { - typescript::strip::ImportsNotUsedAsValues::Remove + typescript::ImportsNotUsedAsValues::Remove } }, - // this property is deprecated, but we don't use it anyway because we target >ES2020 - use_define_for_class_fields: true, // no need for this to be false because we treat all files as modules no_empty_export: true, - ts_enum_config: TsEnumConfig { - treat_const_enum_as_enum: false, - ts_enum_is_readonly: false, - }, // we don't suport this, so leave it as-is so it errors in v8 import_export_assign_config: typescript::TsImportExportAssignConfig::Preserve, + // Do not opt into swc's optimization to inline enum member values + // in the same module as it might cause bugs in certain code. + ts_enum_is_mutable: true, } } } @@ -209,14 +209,9 @@ impl ParsedSource { Some(&mut src_map_buf), )); writer.set_indent_str(" "); // two spaces - let config = crate::swc::codegen::Config { - minify: false, - ascii_only: false, - omit_last_semi: false, - target: ES_VERSION, - }; + let mut emitter = crate::swc::codegen::Emitter { - cfg: config, + cfg: swc_codegen_config(), comments: Some(&comments), cm: source_map.clone(), wr: writer, @@ -295,16 +290,14 @@ pub fn fold_program( proposal::explicit_resource_management::explicit_resource_management(), helpers::inject_helpers(top_level_mark), Optional::new( - typescript::strip::strip_with_config( - options.as_typescript_strip_config(), - top_level_mark - ), + typescript::typescript(options.as_typescript_config(), top_level_mark), !options.transform_jsx ), Optional::new( - typescript::strip::strip_with_jsx( + typescript::tsx( source_map.clone(), - options.as_typescript_strip_config(), + options.as_typescript_config(), + options.as_tsx_config(), comments, top_level_mark ), @@ -452,6 +445,20 @@ fn is_fatal_syntax_error(error_kind: &SyntaxError) -> bool { ) } +pub(crate) fn swc_codegen_config() -> crate::swc::codegen::Config { + // NOTICE ON UPGRADE: This struct has #[non_exhaustive] on it, + // which prevents creating a struct expr here. For that reason, + // inspect the struct on swc upgrade and explicitly specify any + // new options here in order to ensure we maintain these settings. + let mut config = crate::swc::codegen::Config::default(); + config.minify = false; + config.ascii_only = false; + config.omit_last_semi = false; + config.target = crate::ES_VERSION; + config.emit_assert_for_import_attributes = false; + config +} + #[cfg(test)] mod tests { use super::*; @@ -512,7 +519,7 @@ var N; (function(D) { D["A"] = "value"; })(D = N.D || (N.D = {})); - var Value = N.Value = 5; + N.Value = 5; })(N || (N = {})); export class A { d; diff --git a/src/transpiling/transforms.rs b/src/transpiling/transforms.rs index fda8ac8..0bdac5b 100644 --- a/src/transpiling/transforms.rs +++ b/src/transpiling/transforms.rs @@ -284,7 +284,6 @@ mod test { use crate::swc::visit::Fold; use crate::swc::visit::FoldWith; use crate::ModuleSpecifier; - use crate::ES_VERSION; use pretty_assertions::assert_eq; use std::rc::Rc; @@ -506,14 +505,8 @@ mod test { let mut writer = Box::new(JsWriter::new(source_map.clone(), "\n", &mut buf, None)); writer.set_indent_str(" "); // two spaces - let config = crate::swc::codegen::Config { - minify: false, - ascii_only: false, - omit_last_semi: false, - target: ES_VERSION, - }; let mut emitter = crate::swc::codegen::Emitter { - cfg: config, + cfg: crate::swc_codegen_config(), comments: None, cm: source_map, wr: writer,