From 5bc707381a8dfe13ba0de7d7a446ff10d4f70601 Mon Sep 17 00:00:00 2001 From: CPunisher <1343316114@qq.com> Date: Wed, 29 Oct 2025 14:05:49 +0800 Subject: [PATCH 01/22] Bump --- Cargo.lock | 231 +++++++++---------- Cargo.toml | 17 +- crates/rspack_javascript_compiler/Cargo.toml | 1 - 3 files changed, 114 insertions(+), 135 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6c2caf9c3e50..fd2794f5b08b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1780,14 +1780,15 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "hstr" -version = "2.0.1" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced1416104790052518d199e753d49a7d8130d476c664bc9e53f40cfecb8e615" +checksum = "32b36ab53534dc7f07cd5355d3d3f532c51187d98f1383ed7302e08ce1373069" dependencies = [ "hashbrown 0.14.5", "new_debug_unreachable", "once_cell", "rustc-hash", + "serde", "triomphe", ] @@ -3881,7 +3882,6 @@ dependencies = [ "stacker", "swc_config", "swc_core", - "swc_ecma_lexer", "swc_ecma_minifier", "swc_error_reporters", "swc_node_comments", @@ -5509,9 +5509,9 @@ checksum = "b7401a30af6cb5818bb64852270bb722533397edcfc7344954a38f420819ece2" [[package]] name = "swc" -version = "43.0.0" +version = "44.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37aa6523fc9d76cbc14f5abafdf326860c5ad0b1195c1b11a5dd66623745ff43" +checksum = "3bf68edc4ece92a50afd44b835c3c1096eec7fd528af8adde76e13b5de1dace1" dependencies = [ "anyhow", "base64", @@ -5572,9 +5572,9 @@ dependencies = [ [[package]] name = "swc_atoms" -version = "7.0.0" +version = "8.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3500dcf04c84606b38464561edc5e46f5132201cb3e23cf9613ed4033d6b1bb2" +checksum = "8d3c59621f6909ec8b0f2d4f467c4d802650f4a9d19bb9911b9ff413162f7748" dependencies = [ "bytecheck 0.8.0", "hstr", @@ -5586,9 +5586,9 @@ dependencies = [ [[package]] name = "swc_common" -version = "15.0.0" +version = "16.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13be0317490fc330a53ee9e64b26891503c35336b509eb69c4fc1dc4e0119ff9" +checksum = "09e51fecd32bb0989543f0a64f4103cbd728e375838be83d768ce6989f5ea631" dependencies = [ "anyhow", "ast_node", @@ -5617,9 +5617,9 @@ dependencies = [ [[package]] name = "swc_compiler_base" -version = "37.0.0" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17c391731b37a8dc4ec47824b03a11cd835309250ac705c109a78ee75be727eb" +checksum = "42225efb3cc324aa9e403f90bb9e88415bba01d82281b875149c71fb1f6ed097" dependencies = [ "anyhow", "base64", @@ -5676,9 +5676,9 @@ dependencies = [ [[package]] name = "swc_core" -version = "45.0.1" +version = "46.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c765366589d67d0883250b7aa66997da5de2cefd9081ee6ec881d50117b6e6a5" +checksum = "af7fd770b41d96857fa84524a68985cd83347f6221099b2ad08b5a2cc2941963" dependencies = [ "par-core", "swc", @@ -5705,9 +5705,9 @@ dependencies = [ [[package]] name = "swc_ecma_ast" -version = "16.0.0" +version = "17.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "add9298e06af471f29aea2f8d1b6232885bd2a634521d0e95dc9d5bde3d39d3d" +checksum = "7da8bb0e5aaa6e077f178a28d29bc7da4a8ddaf012b3c21c043cb5f72a0b9779" dependencies = [ "bitflags 2.9.1", "bytecheck 0.8.0", @@ -5728,9 +5728,9 @@ dependencies = [ [[package]] name = "swc_ecma_codegen" -version = "18.0.0" +version = "19.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c70760095f23e70a295bc86dd52d454f5de4050621c9e27681ae26d166b77be4" +checksum = "43b756350060f51856d6d1f6ce63183b299d783d9d4458c1ecd6a3d72f4acf7e" dependencies = [ "ascii", "compact_str", @@ -5763,9 +5763,9 @@ dependencies = [ [[package]] name = "swc_ecma_compat_bugfixes" -version = "31.0.0" +version = "32.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce408152ee3f1119ec91192381d7fa65dc65715ac52444fda51a74c29f62e8e7" +checksum = "12e29b0a7e2d788340c8110ed36eec1664be23ac75a9d5ff330f3182dcf68b43" dependencies = [ "rustc-hash", "swc_atoms", @@ -5781,9 +5781,9 @@ dependencies = [ [[package]] name = "swc_ecma_compat_common" -version = "22.0.0" +version = "23.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26c8e4400709546f3b62b23c3f777be41a068a972a153bab779f4976b9545c14" +checksum = "1a045a59b86d56e55d98c713305be77d5936b300840b00d26762c2fb65f71fc5" dependencies = [ "swc_common", "swc_ecma_ast", @@ -5793,9 +5793,9 @@ dependencies = [ [[package]] name = "swc_ecma_compat_es2015" -version = "31.0.0" +version = "32.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9d0917a1eca37bc184540d64685ce066201b96c9eb2c50f38c69ce296c2c686" +checksum = "fecb5c0e093022ee652646cab6bc1e156fbe41f5e9ca9de58b40e0b56be174f9" dependencies = [ "arrayvec", "indexmap", @@ -5820,9 +5820,9 @@ dependencies = [ [[package]] name = "swc_ecma_compat_es2016" -version = "28.0.0" +version = "29.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ead70453d65d02ce1d283c0159408dc4e5dd9a7b4635f2a3cc94d7346fdcf74a" +checksum = "cad6ece169c2d1271af8f69ba92f0b9a037a545b06a67cd3c62f139c6d9e1752" dependencies = [ "swc_common", "swc_ecma_ast", @@ -5836,9 +5836,9 @@ dependencies = [ [[package]] name = "swc_ecma_compat_es2017" -version = "28.0.0" +version = "29.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c4549bc226e0f359d6906a4b67dcb1f28d377e38976fb959f2297dd3a9eb38f" +checksum = "0df8bf74f1fe63d94ede6284704ebe73ce2b94ec0f641e9bdc4c52cbd7f5c123" dependencies = [ "serde", "swc_common", @@ -5852,9 +5852,9 @@ dependencies = [ [[package]] name = "swc_ecma_compat_es2018" -version = "28.0.0" +version = "29.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edc24a4b66caa22afcf5b42464f302675a38ce09a1e2eea0e0374c36923adbe0" +checksum = "5fc3dd613909b7b69a36a7fcc11aa120fbd38f6a32106e5275ac18e57ac54009" dependencies = [ "serde", "swc_common", @@ -5870,9 +5870,9 @@ dependencies = [ [[package]] name = "swc_ecma_compat_es2019" -version = "28.0.0" +version = "29.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "129658fc4634c8ad08cb039ddbc3ce3689aa269548cb8bac8f7b838c1ba5e953" +checksum = "2ec0da8cce65b7869e07736a0abd82fe4a813eb3b3d1a4ae0070db2d0dc022c8" dependencies = [ "swc_common", "swc_ecma_ast", @@ -5885,9 +5885,9 @@ dependencies = [ [[package]] name = "swc_ecma_compat_es2020" -version = "29.0.0" +version = "30.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4cbb6cbba95100f8db2c0317cb8989ce58fc570bd4e1c9da204e52ac0b2d366" +checksum = "88d05d2d7d9144ff94951188ff5d23b360304ca66ad83193c95dec9ff523ea1e" dependencies = [ "serde", "swc_common", @@ -5902,9 +5902,9 @@ dependencies = [ [[package]] name = "swc_ecma_compat_es2021" -version = "28.0.0" +version = "29.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c36529cd59e0855608b031fb6fe8b1d35f585fb5d361e97444763cc1386442fb" +checksum = "c2b9c5bf1d86f0b46fcb728cbddd397c1ca4c18b67d812470a7e6f199b853911" dependencies = [ "swc_ecma_ast", "swc_ecma_compiler", @@ -5915,9 +5915,9 @@ dependencies = [ [[package]] name = "swc_ecma_compat_es2022" -version = "29.0.0" +version = "30.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "714b9b562308c78d60f9776a1b80160da2157968943481ff5c2d9c5982d4e951" +checksum = "0b5f3509741c05ab37df73180b4ec83a99103e0f6e8a2110a8ea3e7aef246657" dependencies = [ "rustc-hash", "swc_atoms", @@ -5936,9 +5936,9 @@ dependencies = [ [[package]] name = "swc_ecma_compat_es3" -version = "23.0.0" +version = "24.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2e151f8a93d6ddba163ec700a25737089b207d4cd86b8916a0e750c52379576" +checksum = "3f9718d766b883e39876121d468cf8d654ac219eb410ea97706e27fd7ff8e502" dependencies = [ "swc_common", "swc_ecma_ast", @@ -5950,9 +5950,9 @@ dependencies = [ [[package]] name = "swc_ecma_compiler" -version = "6.0.0" +version = "7.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80f09a1096f454cc4685f75040ae90a7ea6d25aad7b4d6c3b6a947c595d8b23c" +checksum = "da55e28fc6494e924675af0236e71558c35596534c2e40c2b9da2304666625a1" dependencies = [ "bitflags 2.9.1", "rustc-hash", @@ -5968,9 +5968,9 @@ dependencies = [ [[package]] name = "swc_ecma_ext_transforms" -version = "22.0.0" +version = "23.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bf4fdcbb1431079b5c0cc008715e7e4856dad739754dd985e4aa9e0b6ffd857" +checksum = "868b71f2b3da7a98d7394345f5f1262be0bb042b0944f70f029ce6cef4dd5f69" dependencies = [ "phf", "swc_common", @@ -5979,34 +5979,11 @@ dependencies = [ "swc_ecma_visit", ] -[[package]] -name = "swc_ecma_lexer" -version = "24.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfc7dca92e2239f09d177999b0fae2efe6e68a51eae1d9bae85b2efa78537924" -dependencies = [ - "arrayvec", - "bitflags 2.9.1", - "either", - "num-bigint", - "phf", - "rustc-hash", - "seq-macro", - "serde", - "smallvec", - "smartstring", - "stacker", - "swc_atoms", - "swc_common", - "swc_ecma_ast", - "tracing", -] - [[package]] name = "swc_ecma_loader" -version = "15.0.0" +version = "16.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e63f947d3263a0a3f41b6dd4d3fceac3788268a7fac9888f2d78ac9c71cf676" +checksum = "a8b70f9918764dc62c0f7d3c7ea0672770485393f06b4269c3cfeab5bad2fefd" dependencies = [ "anyhow", "dashmap 5.5.3", @@ -6026,9 +6003,9 @@ dependencies = [ [[package]] name = "swc_ecma_minifier" -version = "34.0.1" +version = "35.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "977ee617c78a4ace62abc8733222f6c3c51c6a9000c074a567b361377f6b756c" +checksum = "4b5638de009f031fa1b8cd554fdfa49cba9b15308935c9f78bc6ff0d93d8640b" dependencies = [ "arrayvec", "bitflags 2.9.1", @@ -6062,25 +6039,29 @@ dependencies = [ [[package]] name = "swc_ecma_parser" -version = "25.0.0" +version = "26.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8a43a89976cdbb42f152cfbd89a430b1fb693a9e0f2b5e2b1959466a88c3de0" +checksum = "6ac3281dd9eef03b877fe9cef75a4c8951ce6df0c5f381868f302ee3c58fa6e2" dependencies = [ + "bitflags 2.9.1", "either", "num-bigint", + "phf", + "rustc-hash", + "seq-macro", "serde", + "smartstring", "swc_atoms", "swc_common", "swc_ecma_ast", - "swc_ecma_lexer", "tracing", ] [[package]] name = "swc_ecma_preset_env" -version = "37.0.0" +version = "38.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f823c2a9ff3576ba2b8bf498e371eb6e86ffdeeaa98ab151a1f9eaa589f4e360" +checksum = "9c7621b39a62fb7925b3420754c542cd6a6c09d1717d0c8b54e8a58440d71b6f" dependencies = [ "anyhow", "foldhash 0.1.5", @@ -6103,9 +6084,9 @@ dependencies = [ [[package]] name = "swc_ecma_quote_macros" -version = "25.0.0" +version = "26.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3b83953c928934f0b0b242c0bbda51a5895fec8c55409b3073c5fe851e11177" +checksum = "4086f93c86b9ea772c4d34f908f8c64a80f8235b6513fa8c00a565dd3eb199a1" dependencies = [ "anyhow", "proc-macro2", @@ -6121,9 +6102,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms" -version = "36.0.0" +version = "37.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "932e4ff767145e75a64a837b589c87ad4abd133eef37abd9ca095fbd0721f6f4" +checksum = "2a70e8f4f9aac59466bb6b3cab9d82f9a469b390dc57c560e930ed967e1089da" dependencies = [ "par-core", "swc_common", @@ -6140,9 +6121,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_base" -version = "28.0.0" +version = "29.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f72ecdabae8bccf20d9d030c787e9f2b7dbeddef3282c4732f5a28494d814764" +checksum = "0e757ebf73dcab085bed9d1290bbe387c4cf889e21e105b4f480cbafac865ed9" dependencies = [ "better_scoped_tls", "indexmap", @@ -6163,9 +6144,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_classes" -version = "28.0.0" +version = "29.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "552e3f1541e74eef1d9c30c7eeeb0c5716a7655f3a2361f822d9c53291ddb98b" +checksum = "b45f07af4dd1f1df3e460c3e0614af94e7851f619cf40c1cec9ff381a205ee86" dependencies = [ "swc_common", "swc_ecma_ast", @@ -6176,9 +6157,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_compat" -version = "32.0.0" +version = "33.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3a1edea2695a75dee6acf54eb4c32a91e4b28843bde8bbdc47fc928ae005440" +checksum = "ac132617693ad58ddab4ff86a72c52ae587c4f34d6a180a054acc9704ab743e0" dependencies = [ "indexmap", "par-core", @@ -6217,9 +6198,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_module" -version = "31.0.0" +version = "32.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86153dade5ae62dc05e42a7298cb53ed13c2b61a907e6a2c5c1ed8d414f7eb3c" +checksum = "e76e826b58b9c0a4a0511a8a2af8642e085083f789008336162feafa082dcb9a" dependencies = [ "Inflector", "anyhow", @@ -6245,9 +6226,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_optimization" -version = "30.0.0" +version = "31.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b572cc5ef6532d006cdf5365b50802dfa94b030676be4164939f34c75b88dc9d" +checksum = "2165d5c32a79eb1dfc6b2166acdce1f90b2e2b1b18f328417278ae8afc86af6f" dependencies = [ "bytes-str", "dashmap 5.5.3", @@ -6269,9 +6250,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_proposal" -version = "28.0.0" +version = "29.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae20a71fad49a8e2784bacd146328c435854160ad2c7428529d5fa9d740acb6" +checksum = "18cf352f22e55370b44562ed6be94dfedbf99ff08f92672841446b8062a04744" dependencies = [ "either", "rustc-hash", @@ -6287,9 +6268,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_react" -version = "31.0.0" +version = "32.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46abf63b0ee1dd746d9069ce1eeacc257ff1ef514619acd69db06279669e58bd" +checksum = "6ad0d635cd9bd795e600190b80c51e6eb60d99300691d4389115d3c143357f77" dependencies = [ "base64", "bytes-str", @@ -6311,9 +6292,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_typescript" -version = "31.0.0" +version = "32.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2608b63e08955f0795de7e1dd1ab8b6e95f722fbc2eeb6902132c1702f61c131" +checksum = "714f792aca48d58906f17cf613c75d7dfa4bb12f367a1e04e07b59a8d1b36690" dependencies = [ "bytes-str", "rustc-hash", @@ -6329,9 +6310,9 @@ dependencies = [ [[package]] name = "swc_ecma_usage_analyzer" -version = "23.0.0" +version = "24.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e4faf08438c2ba8f48732eccc4630cf4ef7e0b998df8ba0ab20e1a8bebc05d2" +checksum = "1216dd27bcfbbf83ae8a0f89c36c6a80709cd222d5b6a9ad41ae674ab89de7f2" dependencies = [ "bitflags 2.9.1", "indexmap", @@ -6347,9 +6328,9 @@ dependencies = [ [[package]] name = "swc_ecma_utils" -version = "22.0.0" +version = "23.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "110befba503dcec034023f4ad3559b84991c7a4be977287300db9562955bda1d" +checksum = "6c17da9ae2d3ad51e865bb27aa97f68b89441ef0b6ee1ba507913c412303c9b7" dependencies = [ "indexmap", "num_cpus", @@ -6366,9 +6347,9 @@ dependencies = [ [[package]] name = "swc_ecma_visit" -version = "16.0.0" +version = "17.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8763b91f52a54d5836c1f922dd393b157d47c121c7aab87308f582daf345f77" +checksum = "d6e6fea33cf8e654d46998cb65bf2915d3dbaab869a25f0ae2c70a86f1e7c2a4" dependencies = [ "new_debug_unreachable", "num-bigint", @@ -6392,9 +6373,9 @@ dependencies = [ [[package]] name = "swc_error_reporters" -version = "17.0.0" +version = "18.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61f991c703dea8982ebfb955a0b1c35fdfe551b24d8d13039c5a0b66e381edbd" +checksum = "f8457a012c93109582b926c97716ff4408923bd54690a8b1fd6b138b1b6334cd" dependencies = [ "anyhow", "miette", @@ -6405,9 +6386,9 @@ dependencies = [ [[package]] name = "swc_html" -version = "27.0.0" +version = "28.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcd2ac7dcb3841d1bf07888e74b41a113b5e844ab41a3b2e824215d1bbf82215" +checksum = "ad1146274c898f1b56147dcdba8e3e516f433cc0a523163a9fddded7b3ebfed8" dependencies = [ "swc_html_ast", "swc_html_codegen", @@ -6417,9 +6398,9 @@ dependencies = [ [[package]] name = "swc_html_ast" -version = "15.0.0" +version = "16.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c35d30f6adfbc510f1902eb7e1b3e2581b8e9b81ed2b417051169e90a8d37718" +checksum = "b5b8840473c89daa3b766063565cfad0a84609c6eb8cf2698a09ebef22e3afc8" dependencies = [ "is-macro", "string_enum", @@ -6429,9 +6410,9 @@ dependencies = [ [[package]] name = "swc_html_codegen" -version = "16.0.0" +version = "17.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09d02d28f15db209a3d68a32cc790de8528fde6f514b9fe724b32c8396b92a4d" +checksum = "2bc5705b723e2fe180ff20887221fe016297bcc3f8488eb40739cde47b476f27" dependencies = [ "auto_impl", "bitflags 2.9.1", @@ -6455,9 +6436,9 @@ dependencies = [ [[package]] name = "swc_html_minifier" -version = "34.0.0" +version = "35.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98844511eb700875039a29476a142e850cf7890292957939c2de28373c82e650" +checksum = "a63cc51738ac5ad5b6156bc7036750fcbe2a244dfde30c0f86146fb349bd5ed8" dependencies = [ "once_cell", "rustc-hash", @@ -6481,9 +6462,9 @@ dependencies = [ [[package]] name = "swc_html_parser" -version = "15.0.0" +version = "16.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f3788242eb9f7e090838b041ff71cde89315284a4dd7b32e5ccc7b7d97165e4" +checksum = "a8a5cc944ae9dade675648e8b67b6ac9c42ab8facec3ea936114f1ad2d6f0949" dependencies = [ "rustc-hash", "swc_atoms", @@ -6494,9 +6475,9 @@ dependencies = [ [[package]] name = "swc_html_utils" -version = "14.0.0" +version = "15.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de231a2c4d35e68dc8df22a96445b1750737fabac1daac3021c7eca35c9a42b1" +checksum = "e9a1dc63ca4c9e8e99c64b2491765e6711df9e396833e4e074b4b1510915d49c" dependencies = [ "once_cell", "rustc-hash", @@ -6507,9 +6488,9 @@ dependencies = [ [[package]] name = "swc_html_visit" -version = "15.0.0" +version = "16.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa214ab3b75881da08553c927941a4f8d6be87b6463bf8cdd3b1f1ae176d23f6" +checksum = "81e767ade8f97ea10710b0990acce47f212577f518a55703cecad5a889dd60b4" dependencies = [ "serde", "swc_atoms", @@ -6531,9 +6512,9 @@ dependencies = [ [[package]] name = "swc_node_comments" -version = "15.0.0" +version = "16.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b71569a4f63edcf31b34c261a6062ec3ad8f1a7b5d3838e8b570f2b2a055a8f" +checksum = "0201555157adc561a797e49785ef55ab15cad735a0c55da740ffd6e8fe7f32a1" dependencies = [ "dashmap 5.5.3", "rustc-hash", @@ -6543,9 +6524,9 @@ dependencies = [ [[package]] name = "swc_plugin_proxy" -version = "16.0.0" +version = "17.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef02609fd5dc946a13448833f8443173f45ff1477eb7e3683c0abb03018cdf20" +checksum = "5aa8c82358eebd41d96ffe6f9e8d8ebb77218e1e44ec9bd5b9d986a060ae896e" dependencies = [ "better_scoped_tls", "bytecheck 0.8.0", @@ -6560,9 +6541,9 @@ dependencies = [ [[package]] name = "swc_plugin_runner" -version = "20.0.0" +version = "21.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d593f644b9803819cf40934aa6217aeafc787417eb91434cea7a1ee00bbca2" +checksum = "9cc0cca34c45312a52022a3bc9173c25071d207cf8ba71ac8239698fc883f68c" dependencies = [ "anyhow", "blake3", @@ -6619,9 +6600,9 @@ dependencies = [ [[package]] name = "swc_transform_common" -version = "9.0.0" +version = "10.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b0ccbb3fe8a93a2bbe6df94c205a0ca909bb8786705031d355904efbb89a2a3" +checksum = "ac052dc4f163680187023eaad6737cfeec2f7b69ac063bb004b3a4cc52407924" dependencies = [ "better_scoped_tls", "rustc-hash", diff --git a/Cargo.toml b/Cargo.toml index 9946bd605db8..ee89b9304682 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -135,16 +135,15 @@ rkyv = { version = "=0.8.8", default-features = false, features = ["std", " # Must be pinned with the same swc versions pnp = { version = "0.12.1", default-features = false } -swc = { version = "43.0.0", default-features = false } +swc = { version = "44.0.0", default-features = false } swc_config = { version = "3.1.2", default-features = false } -swc_core = { version = "45.0.1", default-features = false, features = ["parallel_rayon"] } -swc_ecma_lexer = { version = "=24.0.0", default-features = false } -swc_ecma_minifier = { version = "34.0.1", default-features = false } -swc_error_reporters = { version = "17.0.0", default-features = false } -swc_html = { version = "27.0.0", default-features = false } -swc_html_minifier = { version = "34.0.0", default-features = false } -swc_node_comments = { version = "15.0.0", default-features = false } -swc_plugin_runner = { version = "20.0.0", default-features = false } +swc_core = { version = "46.0.2", default-features = false, features = ["parallel_rayon"] } +swc_ecma_minifier = { version = "35.0.0", default-features = false } +swc_error_reporters = { version = "18.0.0", default-features = false } +swc_html = { version = "28.0.0", default-features = false } +swc_html_minifier = { version = "35.0.0", default-features = false } +swc_node_comments = { version = "16.0.0", default-features = false } +swc_plugin_runner = { version = "21.0.0", default-features = false } wasi-common = { version = "35.0.0", default-features = false } wasmtime = { version = "35.0.0", default-features = false } diff --git a/crates/rspack_javascript_compiler/Cargo.toml b/crates/rspack_javascript_compiler/Cargo.toml index 86d8c128016a..07384863ed65 100644 --- a/crates/rspack_javascript_compiler/Cargo.toml +++ b/crates/rspack_javascript_compiler/Cargo.toml @@ -36,7 +36,6 @@ swc_core = { workspace = true, features = [ "swc_ecma_codegen", "swc_ecma_visit", ] } -swc_ecma_lexer = { workspace = true } swc_ecma_minifier = { workspace = true, features = ["concurrent"] } swc_error_reporters = { workspace = true } swc_node_comments = { workspace = true } From a012a33939181416788288273b26da22d5443193 Mon Sep 17 00:00:00 2001 From: CPunisher <1343316114@qq.com> Date: Wed, 29 Oct 2025 15:09:10 +0800 Subject: [PATCH 02/22] Fix ts_collector and import --- Cargo.lock | 1 + .../src/compiler/parse.rs | 1 - crates/rspack_util/src/atom.rs | 17 ++++++ crates/swc_plugin_import/src/lib.rs | 12 +++-- crates/swc_plugin_ts_collector/Cargo.toml | 5 +- crates/swc_plugin_ts_collector/src/enums.rs | 52 ++++++++++--------- .../src/type_exports.rs | 51 +++++++++++------- 7 files changed, 89 insertions(+), 50 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fd2794f5b08b..4d4413b9dfef 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4996,6 +4996,7 @@ version = "0.6.0-beta.1" dependencies = [ "glob", "rspack_javascript_compiler", + "rspack_util", "rustc-hash", "serde_json", "swc_core", diff --git a/crates/rspack_javascript_compiler/src/compiler/parse.rs b/crates/rspack_javascript_compiler/src/compiler/parse.rs index 2bdcc165f5f2..7ed4b83d9069 100644 --- a/crates/rspack_javascript_compiler/src/compiler/parse.rs +++ b/crates/rspack_javascript_compiler/src/compiler/parse.rs @@ -124,7 +124,6 @@ fn parse_with_lexer( is_module: IsModule, with_tokens: bool, ) -> Result<(SwcProgram, Option>), Vec> { - use swc_ecma_lexer::common::parser::{Parser as _, buffer::Buffer}; let inner = || { // don't call capturing when with_tokens is false to avoid performance cost let (tokens, program_result, mut errors) = if with_tokens { diff --git a/crates/rspack_util/src/atom.rs b/crates/rspack_util/src/atom.rs index 5a1717f2e41e..acd6fed378cc 100644 --- a/crates/rspack_util/src/atom.rs +++ b/crates/rspack_util/src/atom.rs @@ -1 +1,18 @@ +use std::borrow::Borrow; + +use swc_core::{atoms::Wtf8Atom, ecma::ast::ModuleExportName}; + pub type Atom = swc_core::atoms::Atom; + +pub trait ModuleExportNameExt { + fn wtf8(&self) -> &Wtf8Atom; +} + +impl ModuleExportNameExt for ModuleExportName { + fn wtf8(&self) -> &Wtf8Atom { + match self { + ModuleExportName::Ident(ident) => ident.sym.borrow(), + ModuleExportName::Str(str) => &str.value, + } + } +} diff --git a/crates/swc_plugin_import/src/lib.rs b/crates/swc_plugin_import/src/lib.rs index 3eedf211851f..a1d1b8dc9f44 100644 --- a/crates/swc_plugin_import/src/lib.rs +++ b/crates/swc_plugin_import/src/lib.rs @@ -11,6 +11,7 @@ use heck::{ToKebabCase, ToLowerCamelCase, ToSnakeCase}; use rustc_hash::{FxHashMap as HashMap, FxHashSet as HashSet}; use serde::Deserialize; use swc_core::{ + atoms::Wtf8Atom, common::{BytePos, DUMMY_SP, Span, SyntaxContext, errors::HANDLER, util::take::Take}, ecma::{ ast::{ @@ -398,7 +399,10 @@ impl VisitMut for ImportPlugin<'_> { if let ModuleItem::ModuleDecl(ModuleDecl::Import(var)) = item { let source = &*var.src.value; - if let Some(child_config) = config.iter().find(|&c| c.library_name == source) { + if let Some(child_config) = config + .iter() + .find(|&c| c.library_name == source.to_string_lossy()) + { let mut rm_specifier = HashSet::default(); for (specifier_idx, specifier) in var.specifiers.iter().enumerate() { @@ -406,7 +410,7 @@ impl VisitMut for ImportPlugin<'_> { ImportSpecifier::Named(s) => { let imported = s.imported.as_ref().map(|imported| match imported { ModuleExportName::Ident(ident) => ident.sym.to_string(), - ModuleExportName::Str(str) => str.value.to_string(), + ModuleExportName::Str(str) => str.value.to_string_lossy().to_string(), }); let as_name: Option = imported.is_some().then(|| s.local.sym.to_string()); @@ -510,7 +514,7 @@ impl VisitMut for ImportPlugin<'_> { }, src: Box::new(Str { span: DUMMY_SP, - value: Atom::from(js_source_ref), + value: Wtf8Atom::from(js_source_ref), raw: None, }), type_only: false, @@ -526,7 +530,7 @@ impl VisitMut for ImportPlugin<'_> { specifiers: vec![], src: Box::new(Str { span: DUMMY_SP, - value: Atom::from(css_source), + value: Wtf8Atom::from(css_source), raw: None, }), type_only: false, diff --git a/crates/swc_plugin_ts_collector/Cargo.toml b/crates/swc_plugin_ts_collector/Cargo.toml index 53ed677c104b..f127fffcb7b0 100644 --- a/crates/swc_plugin_ts_collector/Cargo.toml +++ b/crates/swc_plugin_ts_collector/Cargo.toml @@ -7,8 +7,9 @@ repository = "https://github.com/web-infra-dev/rspack" version.workspace = true [dependencies] -rustc-hash = { workspace = true } -swc_core = { workspace = true, features = ["common", "ecma_ast", "ecma_visit", "ecma_parser"] } +rspack_util = { workspace = true } +rustc-hash = { workspace = true } +swc_core = { workspace = true, features = ["common", "ecma_ast", "ecma_visit", "ecma_parser"] } [dev-dependencies] glob = { workspace = true } diff --git a/crates/swc_plugin_ts_collector/src/enums.rs b/crates/swc_plugin_ts_collector/src/enums.rs index 17f08a2d71a5..da0646109481 100644 --- a/crates/swc_plugin_ts_collector/src/enums.rs +++ b/crates/swc_plugin_ts_collector/src/enums.rs @@ -1,6 +1,9 @@ +use std::borrow::Borrow; + +use rspack_util::atom::ModuleExportNameExt; use rustc_hash::{FxHashMap, FxHashSet}; use swc_core::{ - atoms::Atom, + atoms::Wtf8Atom, common::SyntaxContext, ecma::{ ast::{ @@ -12,20 +15,20 @@ use swc_core::{ }, }; -type EnumKeyValueMap = FxHashMap; +type EnumKeyValueMap = FxHashMap; #[derive(Debug)] pub struct ExportedEnumCollector<'a> { const_only: bool, - export_idents: FxHashSet, + export_idents: FxHashSet, unresolved_ctxt: SyntaxContext, - collected: &'a mut FxHashMap, + collected: &'a mut FxHashMap, } #[derive(Debug, Clone)] pub enum EnumMemberValue { Number(f64), - String(Atom), + String(Wtf8Atom), Unknown, } @@ -33,7 +36,7 @@ impl<'a> ExportedEnumCollector<'a> { pub fn new( const_only: bool, unresolved_ctxt: SyntaxContext, - collected: &'a mut FxHashMap, + collected: &'a mut FxHashMap, ) -> Self { Self { const_only, @@ -47,7 +50,7 @@ impl<'a> ExportedEnumCollector<'a> { if self.const_only && !enum_decl.is_const { return; } - let enum_id = &enum_decl.id.sym; + let enum_id = enum_decl.id.sym.borrow(); // remove existing enum members for enum merging let mut enum_members = self.collected.remove(enum_id).unwrap_or_default(); // ref: https://github.com/evanw/esbuild/blob/f4159a7b823cd5fe2217da2c30e8873d2f319667/internal/js_parser/js_parser.go#L11263-L11320 @@ -84,7 +87,7 @@ impl<'a> ExportedEnumCollector<'a> { fn evaluate_expr( &self, expr: &Expr, - enum_id: &Atom, + enum_id: &Wtf8Atom, existing_enum_members: &EnumKeyValueMap, ) -> EnumMemberValue { match expr { @@ -99,7 +102,7 @@ impl<'a> ExportedEnumCollector<'a> { EnumMemberValue::Number(f64::INFINITY) } Expr::Ident(ident) => existing_enum_members - .get(&ident.sym) + .get(ident.sym.borrow()) .map(|value| match value { EnumMemberValue::String(s) => EnumMemberValue::String(s.clone()), EnumMemberValue::Number(n) => EnumMemberValue::Number(*n), @@ -118,7 +121,7 @@ impl<'a> ExportedEnumCollector<'a> { fn evaluate_unary( &self, expr: &UnaryExpr, - enum_id: &Atom, + enum_id: &Wtf8Atom, existing_enum_members: &EnumKeyValueMap, ) -> EnumMemberValue { if !matches!(expr.op, op!(unary, "+") | op!(unary, "-") | op!("~")) { @@ -142,7 +145,7 @@ impl<'a> ExportedEnumCollector<'a> { fn evaluate_bin( &self, expr: &BinExpr, - enum_id: &Atom, + enum_id: &Wtf8Atom, existing_enum_members: &EnumKeyValueMap, ) -> EnumMemberValue { if !matches!( @@ -193,17 +196,17 @@ impl<'a> ExportedEnumCollector<'a> { EnumMemberValue::Number(value) } (EnumMemberValue::String(left), EnumMemberValue::String(right), op!(bin, "+")) => { - EnumMemberValue::String(format!("{left}{right}").into()) + EnumMemberValue::String(format!("{left:?}{right:?}").into()) } (EnumMemberValue::Number(left), EnumMemberValue::String(right), op!(bin, "+")) => { let left = left.to_js_string(); - EnumMemberValue::String(format!("{left}{right}").into()) + EnumMemberValue::String(format!("{left}{right:?}").into()) } (EnumMemberValue::String(left), EnumMemberValue::Number(right), op!(bin, "+")) => { let right = right.to_js_string(); - EnumMemberValue::String(format!("{left}{right}").into()) + EnumMemberValue::String(format!("{left:?}{right}").into()) } _ => EnumMemberValue::Unknown, } @@ -212,14 +215,14 @@ impl<'a> ExportedEnumCollector<'a> { fn evaluate_member( &self, expr: &MemberExpr, - enum_id: &Atom, + enum_id: &Wtf8Atom, existing_enum_members: &EnumKeyValueMap, ) -> EnumMemberValue { if matches!(expr.prop, MemberProp::PrivateName(..)) { return EnumMemberValue::Unknown; } let member_name = match &expr.prop { - MemberProp::Ident(ident) => &ident.sym, + MemberProp::Ident(ident) => ident.sym.borrow(), MemberProp::Computed(ComputedPropName { expr, .. }) => { let Expr::Lit(Lit::Str(s)) = &**expr else { return EnumMemberValue::Unknown; @@ -233,7 +236,8 @@ impl<'a> ExportedEnumCollector<'a> { return EnumMemberValue::Unknown; }; // Only support referencing properties inside the same enum decl for now - if &ident.sym != enum_id { + let ident_sym: &Wtf8Atom = ident.sym.borrow(); + if ident_sym != enum_id { return EnumMemberValue::Unknown; } if let Some(value) = existing_enum_members.get(member_name) { @@ -245,7 +249,7 @@ impl<'a> ExportedEnumCollector<'a> { fn evaluate_tpl( &self, expr: &Tpl, - enum_id: &Atom, + enum_id: &Wtf8Atom, existing_enum_members: &EnumKeyValueMap, ) -> EnumMemberValue { let Tpl { exprs, quasis, .. } = expr; @@ -260,7 +264,7 @@ impl<'a> ExportedEnumCollector<'a> { let expr = self.evaluate_expr(expr, enum_id, existing_enum_members); let expr = match expr { - EnumMemberValue::String(s) => s.to_string(), + EnumMemberValue::String(s) => s.to_string_lossy().into(), EnumMemberValue::Number(n) => n.to_js_string(), _ => return EnumMemberValue::Unknown, }; @@ -273,9 +277,9 @@ impl<'a> ExportedEnumCollector<'a> { } } -fn enum_member_id_atom(member_id: &TsEnumMemberId) -> Atom { +fn enum_member_id_atom(member_id: &TsEnumMemberId) -> Wtf8Atom { match member_id { - TsEnumMemberId::Ident(ident) => ident.sym.clone(), + TsEnumMemberId::Ident(ident) => Wtf8Atom::new(ident.sym.as_str()), TsEnumMemberId::Str(str) => str.value.clone(), } } @@ -316,7 +320,7 @@ impl Visit for ExportedEnumCollector<'_> { if specifier.is_type_only { continue; } - self.export_idents.insert(specifier.orig.atom().clone()); + self.export_idents.insert(specifier.orig.wtf8().clone()); } _ => continue, } @@ -324,7 +328,7 @@ impl Visit for ExportedEnumCollector<'_> { } ModuleDecl::ExportDefaultExpr(expr) => { if let Some(ident) = expr.expr.unwrap_parens().as_ident() { - self.export_idents.insert(ident.sym.clone()); + self.export_idents.insert(Wtf8Atom::new(ident.sym.clone())); } } _ => {} @@ -332,7 +336,7 @@ impl Visit for ExportedEnumCollector<'_> { } for stmt in node.body.iter().filter_map(|item| item.as_stmt()) { if let Stmt::Decl(Decl::TsEnum(enum_decl)) = stmt - && self.export_idents.contains(&enum_decl.id.sym) + && self.export_idents.contains(enum_decl.id.sym.borrow()) { self.collect(enum_decl); } diff --git a/crates/swc_plugin_ts_collector/src/type_exports.rs b/crates/swc_plugin_ts_collector/src/type_exports.rs index 89fd4737dae1..abab3448889e 100644 --- a/crates/swc_plugin_ts_collector/src/type_exports.rs +++ b/crates/swc_plugin_ts_collector/src/type_exports.rs @@ -1,6 +1,7 @@ +use rspack_util::atom::ModuleExportNameExt; use rustc_hash::{FxHashMap, FxHashSet}; use swc_core::{ - atoms::Atom, + atoms::Wtf8Atom, ecma::{ ast::{Decl, ExportSpecifier, ModuleDecl, ModuleItem, Program, Stmt}, visit::Visit, @@ -9,14 +10,14 @@ use swc_core::{ #[derive(Debug)] pub struct TypeExportsCollector<'a> { - type_idents: FxHashSet, - export_idents: FxHashMap, + type_idents: FxHashSet, + export_idents: FxHashMap, - type_exports: &'a mut FxHashSet, + type_exports: &'a mut FxHashSet, } impl<'a> TypeExportsCollector<'a> { - pub fn new(type_exports: &'a mut FxHashSet) -> Self { + pub fn new(type_exports: &'a mut FxHashSet) -> Self { Self { type_idents: Default::default(), export_idents: Default::default(), @@ -35,16 +36,24 @@ impl Visit for TypeExportsCollector<'_> { ModuleItem::ModuleDecl(decl) => match decl { ModuleDecl::ExportDecl(export_decl) => match &export_decl.decl { Decl::TsInterface(interface_decl) => { - self.type_idents.insert(interface_decl.id.sym.clone()); - self.type_exports.insert(interface_decl.id.sym.clone()); + self + .type_idents + .insert(interface_decl.id.sym.clone().into()); + self + .type_exports + .insert(interface_decl.id.sym.clone().into()); } Decl::TsTypeAlias(type_alias_decl) => { - self.type_idents.insert(type_alias_decl.id.sym.clone()); - self.type_exports.insert(type_alias_decl.id.sym.clone()); + self + .type_idents + .insert(type_alias_decl.id.sym.clone().into()); + self + .type_exports + .insert(type_alias_decl.id.sym.clone().into()); } Decl::TsEnum(enum_decl) => { - self.type_idents.insert(enum_decl.id.sym.clone()); - self.type_exports.insert(enum_decl.id.sym.clone()); + self.type_idents.insert(enum_decl.id.sym.clone().into()); + self.type_exports.insert(enum_decl.id.sym.clone().into()); } _ => {} }, @@ -59,7 +68,7 @@ impl Visit for TypeExportsCollector<'_> { .exported .as_ref() .unwrap_or(&specifier.orig) - .atom() + .wtf8() .clone(), ), _ => None, @@ -75,17 +84,17 @@ impl Visit for TypeExportsCollector<'_> { .exported .as_ref() .unwrap_or(&specifier.orig) - .atom() + .wtf8() .clone(), ); } else if named_export.src.is_none() { self.export_idents.insert( - specifier.orig.atom().clone(), + specifier.orig.wtf8().clone(), specifier .exported .as_ref() .unwrap_or(&specifier.orig) - .atom() + .wtf8() .clone(), ); } @@ -102,7 +111,7 @@ impl Visit for TypeExportsCollector<'_> { if let Some(ident) = expr.expr.unwrap_parens().as_ident() { self .export_idents - .insert(ident.sym.clone(), "default".into()); + .insert(ident.sym.clone().into(), "default".into()); } } _ => {} @@ -111,13 +120,17 @@ impl Visit for TypeExportsCollector<'_> { if let Stmt::Decl(decl) = stmt { match decl { Decl::TsInterface(interface_decl) => { - self.type_idents.insert(interface_decl.id.sym.clone()); + self + .type_idents + .insert(interface_decl.id.sym.clone().into()); } Decl::TsTypeAlias(type_alias_decl) => { - self.type_idents.insert(type_alias_decl.id.sym.clone()); + self + .type_idents + .insert(type_alias_decl.id.sym.clone().into()); } Decl::TsEnum(enum_decl) => { - self.type_idents.insert(enum_decl.id.sym.clone()); + self.type_idents.insert(enum_decl.id.sym.clone().into()); } _ => {} } From 2861573f44c332ee9a57e6d4d90225f27cb5f532 Mon Sep 17 00:00:00 2001 From: CPunisher <1343316114@qq.com> Date: Wed, 29 Oct 2025 16:02:58 +0800 Subject: [PATCH 03/22] Fix visitor.rs --- .../persistent/build_dependencies/helper/visitor.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/crates/rspack_core/src/cache/persistent/build_dependencies/helper/visitor.rs b/crates/rspack_core/src/cache/persistent/build_dependencies/helper/visitor.rs index 72687515cd23..cdc24037eca0 100644 --- a/crates/rspack_core/src/cache/persistent/build_dependencies/helper/visitor.rs +++ b/crates/rspack_core/src/cache/persistent/build_dependencies/helper/visitor.rs @@ -12,7 +12,9 @@ pub struct DependencyVisitor { impl Visit for DependencyVisitor { /// handle `import .. from "..."` fn visit_import_decl(&mut self, node: &ImportDecl) { - self.requests.push(node.src.value.to_string()); + self + .requests + .push(node.src.value.to_string_lossy().to_string()); } /// handle `import("...")` and `require("...")` @@ -28,19 +30,21 @@ impl Visit for DependencyVisitor { && let Some(args) = node.args.first() && let Expr::Lit(Lit::Str(s)) = args.expr.as_ref() { - self.requests.push(s.value.to_string()); + self.requests.push(s.value.to_string_lossy().to_string()); } } /// handle `export * from "..."` fn visit_export_all(&mut self, node: &ExportAll) { - self.requests.push(node.src.value.to_string()); + self + .requests + .push(node.src.value.to_string_lossy().to_string()); } /// handle `export .. from "..."` fn visit_named_export(&mut self, node: &swc_core::ecma::ast::NamedExport) { if let Some(src) = &node.src { - self.requests.push(src.value.to_string()); + self.requests.push(src.value.to_string_lossy().to_string()); } } } From 19da4f251d41b26cfe2cdb5502cdec402e10e637 Mon Sep 17 00:00:00 2001 From: CPunisher <1343316114@qq.com> Date: Wed, 29 Oct 2025 16:15:44 +0800 Subject: [PATCH 04/22] Fix lazy_barrel_artifact.rs --- crates/rspack_core/src/compilation/make/lazy_barrel_artifact.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/rspack_core/src/compilation/make/lazy_barrel_artifact.rs b/crates/rspack_core/src/compilation/make/lazy_barrel_artifact.rs index 1d98545fba83..7fee71945a09 100644 --- a/crates/rspack_core/src/compilation/make/lazy_barrel_artifact.rs +++ b/crates/rspack_core/src/compilation/make/lazy_barrel_artifact.rs @@ -137,7 +137,7 @@ impl LazyDependencies { ForwardedIdSet::All => self.all_lazy_dependencies().collect(), ForwardedIdSet::IdSet(set) => set .iter() - .filter(|forward_id| !self.terminal_forward_ids.contains(forward_id)) + .filter(|forward_id| !self.terminal_forward_ids.contains(*forward_id)) .flat_map(|forward_id| { self .forward_id_to_request From c50e76c79187f0e2cfb9a79e7abfc8b8f89571d3 Mon Sep 17 00:00:00 2001 From: CPunisher <1343316114@qq.com> Date: Wed, 29 Oct 2025 16:16:00 +0800 Subject: [PATCH 05/22] Fix concatenated_module.rs --- crates/rspack_core/src/concatenated_module.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/rspack_core/src/concatenated_module.rs b/crates/rspack_core/src/concatenated_module.rs index 0f40b3f7932e..1261c48a5393 100644 --- a/crates/rspack_core/src/concatenated_module.rs +++ b/crates/rspack_core/src/concatenated_module.rs @@ -217,7 +217,7 @@ impl ConcatenatedModuleInfo { } if atom.as_str() == "default" { - return self.internal_names.get(&DEFAULT_EXPORT_ATOM); + return self.internal_names.get(&*DEFAULT_EXPORT_ATOM); } if let Some(name) = &self.namespace_export_symbol From 748d477a3f3aec88f73c604b28ead68a918cda33 Mon Sep 17 00:00:00 2001 From: CPunisher <1343316114@qq.com> Date: Wed, 29 Oct 2025 16:26:36 +0800 Subject: [PATCH 06/22] Update ts_collector --- .../rspack_loader_swc/src/collect_ts_info.rs | 5 +-- crates/rspack_util/src/atom.rs | 17 ---------- crates/swc_plugin_ts_collector/src/enums.rs | 32 +++++++++---------- .../src/type_exports.rs | 27 ++++++++-------- 4 files changed, 32 insertions(+), 49 deletions(-) diff --git a/crates/rspack_loader_swc/src/collect_ts_info.rs b/crates/rspack_loader_swc/src/collect_ts_info.rs index fa713921b863..f6f928c7adde 100644 --- a/crates/rspack_loader_swc/src/collect_ts_info.rs +++ b/crates/rspack_loader_swc/src/collect_ts_info.rs @@ -3,7 +3,7 @@ use rspack_swc_plugin_ts_collector::{ EnumMemberValue, ExportedEnumCollector, TypeExportsCollector, }; use rustc_hash::FxHashMap; -use swc::atoms::Atom; +use swc::atoms::{Atom, Wtf8Atom}; use swc_core::{ common::SyntaxContext, ecma::{ast::Program, visit::VisitWith}, @@ -20,7 +20,8 @@ pub fn collect_typescript_info( if options.type_exports.unwrap_or_default() { program.visit_with(&mut TypeExportsCollector::new(&mut type_exports)); } - let mut exported_enums: FxHashMap> = Default::default(); + let mut exported_enums: FxHashMap> = + Default::default(); if let Some(kind) = &options.exported_enum { program.visit_with(&mut ExportedEnumCollector::new( matches!(kind, CollectingEnumKind::ConstOnly), diff --git a/crates/rspack_util/src/atom.rs b/crates/rspack_util/src/atom.rs index acd6fed378cc..5a1717f2e41e 100644 --- a/crates/rspack_util/src/atom.rs +++ b/crates/rspack_util/src/atom.rs @@ -1,18 +1 @@ -use std::borrow::Borrow; - -use swc_core::{atoms::Wtf8Atom, ecma::ast::ModuleExportName}; - pub type Atom = swc_core::atoms::Atom; - -pub trait ModuleExportNameExt { - fn wtf8(&self) -> &Wtf8Atom; -} - -impl ModuleExportNameExt for ModuleExportName { - fn wtf8(&self) -> &Wtf8Atom { - match self { - ModuleExportName::Ident(ident) => ident.sym.borrow(), - ModuleExportName::Str(str) => &str.value, - } - } -} diff --git a/crates/swc_plugin_ts_collector/src/enums.rs b/crates/swc_plugin_ts_collector/src/enums.rs index da0646109481..696951013d0f 100644 --- a/crates/swc_plugin_ts_collector/src/enums.rs +++ b/crates/swc_plugin_ts_collector/src/enums.rs @@ -1,9 +1,8 @@ use std::borrow::Borrow; -use rspack_util::atom::ModuleExportNameExt; use rustc_hash::{FxHashMap, FxHashSet}; use swc_core::{ - atoms::Wtf8Atom, + atoms::{Atom, Wtf8Atom}, common::SyntaxContext, ecma::{ ast::{ @@ -20,9 +19,9 @@ type EnumKeyValueMap = FxHashMap; #[derive(Debug)] pub struct ExportedEnumCollector<'a> { const_only: bool, - export_idents: FxHashSet, + export_idents: FxHashSet, unresolved_ctxt: SyntaxContext, - collected: &'a mut FxHashMap, + collected: &'a mut FxHashMap, } #[derive(Debug, Clone)] @@ -36,7 +35,7 @@ impl<'a> ExportedEnumCollector<'a> { pub fn new( const_only: bool, unresolved_ctxt: SyntaxContext, - collected: &'a mut FxHashMap, + collected: &'a mut FxHashMap, ) -> Self { Self { const_only, @@ -50,7 +49,7 @@ impl<'a> ExportedEnumCollector<'a> { if self.const_only && !enum_decl.is_const { return; } - let enum_id = enum_decl.id.sym.borrow(); + let enum_id = &enum_decl.id.sym; // remove existing enum members for enum merging let mut enum_members = self.collected.remove(enum_id).unwrap_or_default(); // ref: https://github.com/evanw/esbuild/blob/f4159a7b823cd5fe2217da2c30e8873d2f319667/internal/js_parser/js_parser.go#L11263-L11320 @@ -87,7 +86,7 @@ impl<'a> ExportedEnumCollector<'a> { fn evaluate_expr( &self, expr: &Expr, - enum_id: &Wtf8Atom, + enum_id: &Atom, existing_enum_members: &EnumKeyValueMap, ) -> EnumMemberValue { match expr { @@ -121,7 +120,7 @@ impl<'a> ExportedEnumCollector<'a> { fn evaluate_unary( &self, expr: &UnaryExpr, - enum_id: &Wtf8Atom, + enum_id: &Atom, existing_enum_members: &EnumKeyValueMap, ) -> EnumMemberValue { if !matches!(expr.op, op!(unary, "+") | op!(unary, "-") | op!("~")) { @@ -145,7 +144,7 @@ impl<'a> ExportedEnumCollector<'a> { fn evaluate_bin( &self, expr: &BinExpr, - enum_id: &Wtf8Atom, + enum_id: &Atom, existing_enum_members: &EnumKeyValueMap, ) -> EnumMemberValue { if !matches!( @@ -215,7 +214,7 @@ impl<'a> ExportedEnumCollector<'a> { fn evaluate_member( &self, expr: &MemberExpr, - enum_id: &Wtf8Atom, + enum_id: &Atom, existing_enum_members: &EnumKeyValueMap, ) -> EnumMemberValue { if matches!(expr.prop, MemberProp::PrivateName(..)) { @@ -236,8 +235,7 @@ impl<'a> ExportedEnumCollector<'a> { return EnumMemberValue::Unknown; }; // Only support referencing properties inside the same enum decl for now - let ident_sym: &Wtf8Atom = ident.sym.borrow(); - if ident_sym != enum_id { + if &ident.sym != enum_id { return EnumMemberValue::Unknown; } if let Some(value) = existing_enum_members.get(member_name) { @@ -249,7 +247,7 @@ impl<'a> ExportedEnumCollector<'a> { fn evaluate_tpl( &self, expr: &Tpl, - enum_id: &Wtf8Atom, + enum_id: &Atom, existing_enum_members: &EnumKeyValueMap, ) -> EnumMemberValue { let Tpl { exprs, quasis, .. } = expr; @@ -320,7 +318,9 @@ impl Visit for ExportedEnumCollector<'_> { if specifier.is_type_only { continue; } - self.export_idents.insert(specifier.orig.wtf8().clone()); + self + .export_idents + .insert(specifier.orig.atom().into_owned()); } _ => continue, } @@ -328,7 +328,7 @@ impl Visit for ExportedEnumCollector<'_> { } ModuleDecl::ExportDefaultExpr(expr) => { if let Some(ident) = expr.expr.unwrap_parens().as_ident() { - self.export_idents.insert(Wtf8Atom::new(ident.sym.clone())); + self.export_idents.insert(ident.sym.clone()); } } _ => {} @@ -336,7 +336,7 @@ impl Visit for ExportedEnumCollector<'_> { } for stmt in node.body.iter().filter_map(|item| item.as_stmt()) { if let Stmt::Decl(Decl::TsEnum(enum_decl)) = stmt - && self.export_idents.contains(enum_decl.id.sym.borrow()) + && self.export_idents.contains(&enum_decl.id.sym) { self.collect(enum_decl); } diff --git a/crates/swc_plugin_ts_collector/src/type_exports.rs b/crates/swc_plugin_ts_collector/src/type_exports.rs index abab3448889e..baa16779056e 100644 --- a/crates/swc_plugin_ts_collector/src/type_exports.rs +++ b/crates/swc_plugin_ts_collector/src/type_exports.rs @@ -1,7 +1,6 @@ -use rspack_util::atom::ModuleExportNameExt; use rustc_hash::{FxHashMap, FxHashSet}; use swc_core::{ - atoms::Wtf8Atom, + atoms::Atom, ecma::{ ast::{Decl, ExportSpecifier, ModuleDecl, ModuleItem, Program, Stmt}, visit::Visit, @@ -10,14 +9,14 @@ use swc_core::{ #[derive(Debug)] pub struct TypeExportsCollector<'a> { - type_idents: FxHashSet, - export_idents: FxHashMap, + type_idents: FxHashSet, + export_idents: FxHashMap, - type_exports: &'a mut FxHashSet, + type_exports: &'a mut FxHashSet, } impl<'a> TypeExportsCollector<'a> { - pub fn new(type_exports: &'a mut FxHashSet) -> Self { + pub fn new(type_exports: &'a mut FxHashSet) -> Self { Self { type_idents: Default::default(), export_idents: Default::default(), @@ -68,8 +67,8 @@ impl Visit for TypeExportsCollector<'_> { .exported .as_ref() .unwrap_or(&specifier.orig) - .wtf8() - .clone(), + .atom() + .into_owned(), ), _ => None, } @@ -84,18 +83,18 @@ impl Visit for TypeExportsCollector<'_> { .exported .as_ref() .unwrap_or(&specifier.orig) - .wtf8() - .clone(), + .atom() + .into_owned(), ); } else if named_export.src.is_none() { self.export_idents.insert( - specifier.orig.wtf8().clone(), + specifier.orig.atom().into_owned(), specifier .exported .as_ref() .unwrap_or(&specifier.orig) - .wtf8() - .clone(), + .atom() + .into_owned(), ); } } @@ -143,7 +142,7 @@ impl Visit for TypeExportsCollector<'_> { self .export_idents .iter() - .filter(|(export_ident, _)| self.type_idents.contains(export_ident)) + .filter(|(export_ident, _)| self.type_idents.contains(*export_ident)) .map(|(_, exported_as)| exported_as.clone()), ); } From c769808e482520fb63da18c1ae3b8ceb80fec362 Mon Sep 17 00:00:00 2001 From: CPunisher <1343316114@qq.com> Date: Wed, 29 Oct 2025 16:36:58 +0800 Subject: [PATCH 07/22] Fix some js plugins --- .../import_meta_context_dependency_parser_plugin.rs | 4 ++-- .../src/parser_plugin/use_strict_plugin.rs | 12 +++++------- .../src/parser_plugin/worker_plugin.rs | 2 +- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/crates/rspack_plugin_javascript/src/parser_plugin/import_meta_context_dependency_parser_plugin.rs b/crates/rspack_plugin_javascript/src/parser_plugin/import_meta_context_dependency_parser_plugin.rs index bc3f21a815ff..fc2210c420b9 100644 --- a/crates/rspack_plugin_javascript/src/parser_plugin/import_meta_context_dependency_parser_plugin.rs +++ b/crates/rspack_plugin_javascript/src/parser_plugin/import_meta_context_dependency_parser_plugin.rs @@ -30,7 +30,7 @@ fn create_import_meta_context_dependency( .as_lit() .and_then(|lit| { if let Lit::Str(str) = lit { - return Some(str.value.to_string()); + return Some(str.value.to_string_lossy().to_string()); } None }) @@ -57,7 +57,7 @@ fn create_import_meta_context_dependency( let exclude = get_regex_by_obj_prop(obj, "exclude") .map(|regexp| RspackRegex::try_from(regexp).expect("reg failed")); let mode = get_literal_str_by_obj_prop(obj, "mode") - .map(|s| s.value.to_string().as_str().into()) + .map(|s| s.value.to_string_lossy().as_ref().into()) .unwrap_or(ContextMode::Sync); let recursive = get_bool_by_obj_prop(obj, "recursive") .map(|bool| bool.value) diff --git a/crates/rspack_plugin_javascript/src/parser_plugin/use_strict_plugin.rs b/crates/rspack_plugin_javascript/src/parser_plugin/use_strict_plugin.rs index b17697e29761..d68fd2e6d39a 100644 --- a/crates/rspack_plugin_javascript/src/parser_plugin/use_strict_plugin.rs +++ b/crates/rspack_plugin_javascript/src/parser_plugin/use_strict_plugin.rs @@ -1,4 +1,5 @@ use rspack_core::ConstDependency; +use swc_core::atoms::wtf8::Wtf8; use super::JavascriptParserPlugin; use crate::visitors::JavascriptParser; @@ -17,13 +18,10 @@ impl JavascriptParserPlugin for UseStrictPlugin { } .and_then(|i| i.as_expr()); if let Some(first) = first - && matches!( - first.expr.as_lit().and_then(|i| match i { - swc_core::ecma::ast::Lit::Str(s) => Some(s.value.as_str()), - _ => None, - }), - Some("use strict") - ) + && first.expr.as_lit().and_then(|i| match i { + swc_core::ecma::ast::Lit::Str(s) => Some(s.value.as_wtf8()), + _ => None, + }) == Some(Wtf8::from_str("use strict")) { // Remove "use strict" expression. It will be added later by the renderer again. // This is necessary in order to not break the strict mode when webpack prepends code. diff --git a/crates/rspack_plugin_javascript/src/parser_plugin/worker_plugin.rs b/crates/rspack_plugin_javascript/src/parser_plugin/worker_plugin.rs index 52c28ab18534..a3827efeb33e 100644 --- a/crates/rspack_plugin_javascript/src/parser_plugin/worker_plugin.rs +++ b/crates/rspack_plugin_javascript/src/parser_plugin/worker_plugin.rs @@ -42,7 +42,7 @@ fn parse_new_worker_options(arg: &ExprOrSpread) -> ParsedNewWorkerOptions { let obj = arg.expr.as_object(); let name = obj .and_then(|obj| get_literal_str_by_obj_prop(obj, "name")) - .map(|str| str.value.to_string()); + .map(|str| str.value.to_string_lossy().into()); let span = arg.span(); ParsedNewWorkerOptions { range: Some((span.real_lo(), span.real_hi())), From 1670056f378904cf27440d11cd8cbabfa84f54fc Mon Sep 17 00:00:00 2001 From: CPunisher <1343316114@qq.com> Date: Wed, 29 Oct 2025 16:49:35 +0800 Subject: [PATCH 08/22] Fix JSXAttrValue::Lit --- .../src/visitors/dependency/parser/walk.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/rspack_plugin_javascript/src/visitors/dependency/parser/walk.rs b/crates/rspack_plugin_javascript/src/visitors/dependency/parser/walk.rs index 214fa46d9faf..b7a326808a06 100644 --- a/crates/rspack_plugin_javascript/src/visitors/dependency/parser/walk.rs +++ b/crates/rspack_plugin_javascript/src/visitors/dependency/parser/walk.rs @@ -585,7 +585,7 @@ impl JavascriptParser<'_> { fn walk_jsx_attr_value(&mut self, value: &JSXAttrValue) { match value { - JSXAttrValue::Lit(_) => (), + JSXAttrValue::Str(_) => (), JSXAttrValue::JSXExprContainer(container) => self.walk_jsx_expr_container(container), JSXAttrValue::JSXElement(element) => self.walk_jsx_element(element), JSXAttrValue::JSXFragment(fragment) => self.walk_jsx_fragment(fragment), From 7a54be63f18499119ef7fb6518b95705e9f312c5 Mon Sep 17 00:00:00 2001 From: CPunisher <1343316114@qq.com> Date: Wed, 29 Oct 2025 19:11:32 +0800 Subject: [PATCH 09/22] Fix JavaScriptParserPlugin --- .../amd_define_dependency_parser_plugin.rs | 2 +- .../src/utils/eval/eval_lit_expr.rs | 2 +- .../src/utils/eval/eval_tpl_expr.rs | 1 + .../src/utils/object_properties.rs | 4 +-- .../src/visitors/dependency/parser/estree.rs | 30 ++++++++++++------- .../src/visitors/dependency/parser/mod.rs | 16 +++++----- .../dependency/parser/walk_module_pre.rs | 9 +++--- crates/rspack_util/src/atom.rs | 18 +++++++++++ 8 files changed, 55 insertions(+), 27 deletions(-) diff --git a/crates/rspack_plugin_javascript/src/parser_plugin/amd/amd_define_dependency_parser_plugin.rs b/crates/rspack_plugin_javascript/src/parser_plugin/amd/amd_define_dependency_parser_plugin.rs index 2a5ffb426079..a92825cc345e 100644 --- a/crates/rspack_plugin_javascript/src/parser_plugin/amd/amd_define_dependency_parser_plugin.rs +++ b/crates/rspack_plugin_javascript/src/parser_plugin/amd/amd_define_dependency_parser_plugin.rs @@ -99,7 +99,7 @@ const RESERVED_NAMES: [&str; 3] = [REQUIRE, EXPORTS, MODULE]; fn get_lit_str(expr: &Expr) -> Option { expr.as_lit().and_then(|lit| match lit { - Lit::Str(s) => Some(s.value.clone()), + Lit::Str(s) => Some(s.value.to_atom_lossy().into_owned()), _ => None, }) } diff --git a/crates/rspack_plugin_javascript/src/utils/eval/eval_lit_expr.rs b/crates/rspack_plugin_javascript/src/utils/eval/eval_lit_expr.rs index 45b77689e638..1671e2c7023a 100644 --- a/crates/rspack_plugin_javascript/src/utils/eval/eval_lit_expr.rs +++ b/crates/rspack_plugin_javascript/src/utils/eval/eval_lit_expr.rs @@ -9,7 +9,7 @@ use super::BasicEvaluatedExpression; #[inline] pub fn eval_str(str: &Str) -> BasicEvaluatedExpression<'_> { let mut res = BasicEvaluatedExpression::with_range(str.span().real_lo(), str.span().real_hi()); - res.set_string(str.value.to_string()); + res.set_string(str.value.to_string_lossy().to_string()); res } diff --git a/crates/rspack_plugin_javascript/src/utils/eval/eval_tpl_expr.rs b/crates/rspack_plugin_javascript/src/utils/eval/eval_tpl_expr.rs index c4c89430d4db..5d640c9d9099 100644 --- a/crates/rspack_plugin_javascript/src/utils/eval/eval_tpl_expr.rs +++ b/crates/rspack_plugin_javascript/src/utils/eval/eval_tpl_expr.rs @@ -31,6 +31,7 @@ fn get_simplified_template_result<'a>( TemplateStringKind::Cooked => quasi_expr .cooked .as_ref() + .and_then(|q| q.as_atom()) .expect("quasic should be not empty"), TemplateStringKind::Raw => &quasi_expr.raw, }; diff --git a/crates/rspack_plugin_javascript/src/utils/object_properties.rs b/crates/rspack_plugin_javascript/src/utils/object_properties.rs index 6640730c457a..0e804a71970d 100644 --- a/crates/rspack_plugin_javascript/src/utils/object_properties.rs +++ b/crates/rspack_plugin_javascript/src/utils/object_properties.rs @@ -49,10 +49,10 @@ pub fn get_attributes(obj: &ObjectLit) -> ImportAttributes { kv.key .as_ident() .map(|k| k.sym.as_str()) - .or_else(|| kv.key.as_str().map(|k| k.value.as_str())) + .or_else(|| kv.key.as_str().and_then(|k| k.value.as_str())) .map(|s| s.to_string()) .zip(kv.value.as_lit().and_then(|lit| match lit { - Lit::Str(s) => Some(s.value.to_string()), + Lit::Str(s) => Some(s.value.to_string_lossy().to_string()), _ => None, })) }) diff --git a/crates/rspack_plugin_javascript/src/visitors/dependency/parser/estree.rs b/crates/rspack_plugin_javascript/src/visitors/dependency/parser/estree.rs index 215409e0ee6f..ff57f722d6f9 100644 --- a/crates/rspack_plugin_javascript/src/visitors/dependency/parser/estree.rs +++ b/crates/rspack_plugin_javascript/src/visitors/dependency/parser/estree.rs @@ -1,5 +1,6 @@ //! The compat estree helpers for swc ecma ast +use rspack_util::atom::ModuleExportNameExt; use swc_core::{ atoms::Atom, common::{Span, Spanned}, @@ -58,13 +59,18 @@ impl Spanned for ExportAllDeclaration<'_> { impl ExportAllDeclaration<'_> { pub fn source(&self) -> &Atom { match self { - ExportAllDeclaration::All(e) => &e.src.value, - ExportAllDeclaration::NamedAll(e) => { - &e.src - .as_ref() - .expect("ExportAllDeclaration::NamedAll (export * as x from 'm') must have src") - .value - } + ExportAllDeclaration::All(e) => &e + .src + .value + .as_atom() + .expect("ModuleExportName should be a valid utf8"), + ExportAllDeclaration::NamedAll(e) => &e + .src + .as_ref() + .expect("ExportAllDeclaration::NamedAll (export * as x from 'm') must have src") + .value + .as_atom() + .unwrap(), } } @@ -99,7 +105,7 @@ impl ExportAllDeclaration<'_> { e.specifiers .first() .and_then(|e| e.as_namespace()) - .map(|e| e.name.atom()) + .map(|e| e.name.atom_ref()) .expect("ExportAllDeclaration::NamedAll (export * as x from 'm') must one specifier"), ), } @@ -136,7 +142,11 @@ impl ExportNamedDeclaration<'_> { pub fn source(&self) -> Option<&Atom> { match self { Self::Decl(_) => None, - Self::Specifiers(e) => e.src.as_ref().map(|s| &s.value), + Self::Specifiers(e) => e.src.as_ref().map(|s| { + s.value + .as_atom() + .expect("ModuleExportName should be a valid utf8") + }), } } @@ -172,7 +182,7 @@ impl ExportNamedDeclaration<'_> { }, ExportSpecifier::Named(n) => { let exported_name = n.exported.as_ref().unwrap_or(&n.orig); - (n.orig.atom().clone(), exported_name.atom().clone(), exported_name.span()) + (n.orig.atom().into_owned(), exported_name.atom().into_owned(), exported_name.span()) }, } }) diff --git a/crates/rspack_plugin_javascript/src/visitors/dependency/parser/mod.rs b/crates/rspack_plugin_javascript/src/visitors/dependency/parser/mod.rs index 98e5d2a8a279..3997d88faa0e 100644 --- a/crates/rspack_plugin_javascript/src/visitors/dependency/parser/mod.rs +++ b/crates/rspack_plugin_javascript/src/visitors/dependency/parser/mod.rs @@ -105,7 +105,6 @@ pub enum MemberExpressionInfo { #[derive(Debug)] pub struct CallExpressionInfo { pub call: CallExpr, - pub callee_name: String, pub root_info: ExportedVariableInfo, pub callee_members: Vec, pub members: Vec, @@ -893,18 +892,15 @@ impl<'parser> JavascriptParser<'parser> { (callee.get_root_name()?, vec![]) }; let NameInfo { - name: resolved_root, - info: root_info, + info: root_info, .. } = self.get_name_info_from_variable(&root_name)?; - let callee_name = object_and_members_to_name(resolved_root.to_string(), &root_members); root_members.reverse(); members.reverse(); members_optionals.reverse(); member_ranges.reverse(); Some(MemberExpressionInfo::Call(CallExpressionInfo { call: expr, - callee_name, root_info: root_info .map(|i| ExportedVariableInfo::VariableInfo(i.id())) .unwrap_or_else(|| ExportedVariableInfo::Name(root_name)), @@ -998,13 +994,15 @@ impl<'parser> JavascriptParser<'parser> { Lit::Null(_) => "null".into(), Lit::Num(n) => n.value.to_string().into(), Lit::BigInt(i) => i.value.to_string().into(), - Lit::Regex(r) => r.exp.clone(), + Lit::Regex(r) => r.exp.clone().into(), Lit::JSXText(_) => unreachable!(), }; - members.push(value); + // Since members are not used across rspack javascript parser plugin, + // we directly makes it atom here + members.push(value.to_atom_lossy().into_owned()); member_ranges.push(expr.obj.span()); } else if let Some(ident) = expr.prop.as_ident() { - members.push(ident.sym.clone()); + members.push(ident.sym.clone().into()); member_ranges.push(expr.obj.span()); } else { break; @@ -1267,7 +1265,7 @@ impl<'parser> JavascriptParser<'parser> { return; }; - if str.value.as_str() == "use strict" { + if str.value == "use strict" { self.set_strict(true); } } diff --git a/crates/rspack_plugin_javascript/src/visitors/dependency/parser/walk_module_pre.rs b/crates/rspack_plugin_javascript/src/visitors/dependency/parser/walk_module_pre.rs index d739d3feaf16..e020227bb31f 100644 --- a/crates/rspack_plugin_javascript/src/visitors/dependency/parser/walk_module_pre.rs +++ b/crates/rspack_plugin_javascript/src/visitors/dependency/parser/walk_module_pre.rs @@ -40,7 +40,8 @@ impl JavascriptParser<'_> { pub fn module_pre_walk_import_declaration(&mut self, decl: &ImportDecl) { let drive = self.plugin_drive.clone(); - let source = &decl.src.value; + let atom = decl.src.value.to_atom_lossy(); + let source = atom.as_ref(); drive.import(self, decl, source.as_str()); for specifier in &decl.specifiers { @@ -50,9 +51,9 @@ impl JavascriptParser<'_> { let export_name = named .imported .as_ref() - .map(|imported| match imported { - ModuleExportName::Ident(ident) => &ident.sym, - ModuleExportName::Str(s) => &s.value, + .and_then(|imported| match imported { + ModuleExportName::Ident(ident) => Some(&ident.sym), + ModuleExportName::Str(s) => s.value.as_atom(), }) .unwrap_or_else(|| &named.local.sym); if drive diff --git a/crates/rspack_util/src/atom.rs b/crates/rspack_util/src/atom.rs index 5a1717f2e41e..0204a9589729 100644 --- a/crates/rspack_util/src/atom.rs +++ b/crates/rspack_util/src/atom.rs @@ -1 +1,19 @@ +use swc_core::ecma::ast::ModuleExportName; + pub type Atom = swc_core::atoms::Atom; + +pub trait ModuleExportNameExt { + fn atom_ref(&self) -> &Atom; +} + +impl ModuleExportNameExt for ModuleExportName { + fn atom_ref(&self) -> &Atom { + match self { + ModuleExportName::Ident(ident) => &ident.sym, + ModuleExportName::Str(s) => s + .value + .as_atom() + .expect("ModuleExportName should be a valid utf8"), + } + } +} From d501cd4e1dce1f6ff3a44b669850f1dd6215086b Mon Sep 17 00:00:00 2001 From: CPunisher <1343316114@qq.com> Date: Wed, 29 Oct 2025 19:11:49 +0800 Subject: [PATCH 10/22] Fix Ts collect --- crates/rspack_loader_swc/src/collect_ts_info.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/crates/rspack_loader_swc/src/collect_ts_info.rs b/crates/rspack_loader_swc/src/collect_ts_info.rs index f6f928c7adde..d1470b84cc38 100644 --- a/crates/rspack_loader_swc/src/collect_ts_info.rs +++ b/crates/rspack_loader_swc/src/collect_ts_info.rs @@ -40,10 +40,12 @@ pub fn collect_typescript_info( .map(|(id, v)| { let value = match v { EnumMemberValue::Number(n) => Some(EvaluatedInlinableValue::new_number(n)), - EnumMemberValue::String(s) => Some(EvaluatedInlinableValue::new_string(s)), + EnumMemberValue::String(s) => Some(EvaluatedInlinableValue::new_string( + s.to_atom_lossy().into_owned(), + )), EnumMemberValue::Unknown => None, }; - (id, value) + (id.to_atom_lossy().into_owned(), value) }) .collect(), ); From 531387e70c3913123834d255808e59064b6652f2 Mon Sep 17 00:00:00 2001 From: CPunisher <1343316114@qq.com> Date: Wed, 29 Oct 2025 19:11:59 +0800 Subject: [PATCH 11/22] Fix rspack_plugin_esm_library --- .../rspack_plugin_esm_library/src/chunk_link.rs | 15 ++++++--------- crates/rspack_plugin_esm_library/src/link.rs | 2 +- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/crates/rspack_plugin_esm_library/src/chunk_link.rs b/crates/rspack_plugin_esm_library/src/chunk_link.rs index 7495c58899da..2ad5ae89de7c 100644 --- a/crates/rspack_plugin_esm_library/src/chunk_link.rs +++ b/crates/rspack_plugin_esm_library/src/chunk_link.rs @@ -87,11 +87,10 @@ impl ExternalInterop { if let Some(namespace_object) = &self.namespace_object { namespace_object.clone() } else { - let mut new_name = format!( + let mut new_name = Atom::new(format!( "{}_namespace", self.required_symbol.as_ref().expect("already set") - ) - .into(); + )); if used_names.contains(&new_name) { new_name = find_new_name(new_name.as_str(), used_names, &vec![]); @@ -112,11 +111,10 @@ impl ExternalInterop { if let Some(namespace_object) = &self.namespace_object2 { namespace_object.clone() } else { - let mut new_name = format!( + let mut new_name = Atom::new(format!( "{}_namespace2", self.required_symbol.as_ref().expect("already set") - ) - .into(); + )); if used_names.contains(&new_name) { new_name = find_new_name(new_name.as_str(), used_names, &vec![]); @@ -137,11 +135,10 @@ impl ExternalInterop { if let Some(default_access) = &self.default_access { default_access.clone() } else { - let mut new_name = format!( + let mut new_name = Atom::new(format!( "{}_default", self.required_symbol.as_ref().expect("already set") - ) - .into(); + )); if used_names.contains(&new_name) { new_name = find_new_name(new_name.as_str(), used_names, &vec![]); diff --git a/crates/rspack_plugin_esm_library/src/link.rs b/crates/rspack_plugin_esm_library/src/link.rs index 6b2208deb2c5..3859cd54df24 100644 --- a/crates/rspack_plugin_esm_library/src/link.rs +++ b/crates/rspack_plugin_esm_library/src/link.rs @@ -129,7 +129,7 @@ impl EsmLibraryPlugin { // we find another name to export this symbol let mut idx = 0; - let mut new_export = format!("{exported}_{idx}").into(); + let mut new_export = Atom::new(format!("{exported}_{idx}")); while ctx.exported_symbols.contains_key(&new_export) { idx += 1; new_export = format!("{exported}_{idx}").into(); From 2f12945ad752e9f72a8d17576f68e67c9bb84d24 Mon Sep 17 00:00:00 2001 From: CPunisher <1343316114@qq.com> Date: Wed, 29 Oct 2025 19:25:05 +0800 Subject: [PATCH 12/22] Fix rspack_plugin_rstest --- crates/rspack_plugin_rstest/src/parser_plugin.rs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/crates/rspack_plugin_rstest/src/parser_plugin.rs b/crates/rspack_plugin_rstest/src/parser_plugin.rs index 9f7bc8049edd..3f3f0cc0d5de 100644 --- a/crates/rspack_plugin_rstest/src/parser_plugin.rs +++ b/crates/rspack_plugin_rstest/src/parser_plugin.rs @@ -82,7 +82,7 @@ impl RstestParserPlugin { { let range_expr: DependencyRange = first_arg.span().into(); let dep = CommonJsRequireDependency::new( - lit.value.to_string(), + lit.value.to_string_lossy().to_string(), range_expr, Some(call_expr.span.into()), parser.in_try, @@ -130,7 +130,7 @@ impl RstestParserPlugin { let imported_span = call_expr.args.first().expect("should have one arg"); let dep = Box::new(ImportDependency::new( - Atom::from(lit.value.as_ref()), + lit.value.to_atom_lossy().into_owned(), call_expr.span.into(), None, Some(attrs), @@ -148,7 +148,7 @@ impl RstestParserPlugin { Into::::into(call_expr.span).to_loc(Some(&source_map)), None, vec![dep], - Some(lit.value.to_string()), + Some(lit.value.to_string_lossy().to_string()), ); parser.add_block(Box::new(block)); @@ -216,13 +216,13 @@ impl RstestParserPlugin { .and_then(|expr| expr.args.first()) .and_then(|arg| arg.expr.as_lit()) .and_then(|lit| lit.as_str()) - .map(|lit| lit.value.as_str()) + .and_then(|lit| lit.value.as_str()) } else { first_arg .expr .as_lit() .and_then(|lit| lit.as_str()) - .map(|lit| lit.value.as_str()) + .and_then(|lit| lit.value.as_str()) }; lit_str.map(|s| s.to_string()) @@ -383,7 +383,10 @@ impl RstestParserPlugin { let first_arg = &call_expr.args[0]; if let Some(lit) = first_arg.expr.as_lit() { if let Some(lit) = lit.as_str() { - if let Some(mocked_target) = self.calc_mocked_target(&lit.value).as_std_path().to_str() + if let Some(mocked_target) = self + .calc_mocked_target(&lit.value.to_string_lossy()) + .as_std_path() + .to_str() { if is_esm { let imported_span = call_expr.args.first().expect("should have one arg"); From 6015b4af89ec8bc042c354061c86e8e1a44a41c7 Mon Sep 17 00:00:00 2001 From: CPunisher <1343316114@qq.com> Date: Wed, 29 Oct 2025 19:25:19 +0800 Subject: [PATCH 13/22] Fix rspack_plugin_library --- crates/rspack_plugin_library/src/assign_library_plugin.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/rspack_plugin_library/src/assign_library_plugin.rs b/crates/rspack_plugin_library/src/assign_library_plugin.rs index edac2f401ec5..bcb5891416fc 100644 --- a/crates/rspack_plugin_library/src/assign_library_plugin.rs +++ b/crates/rspack_plugin_library/src/assign_library_plugin.rs @@ -19,6 +19,7 @@ use rspack_plugin_javascript::{ JavascriptModulesChunkHash, JavascriptModulesEmbedInRuntimeBailout, JavascriptModulesRender, JavascriptModulesRenderStartup, JavascriptModulesStrictRuntimeBailout, JsPlugin, RenderSource, }; +use swc_core::atoms::Atom; use crate::utils::{COMMON_LIBRARY_NAME_MESSAGE, get_options_for_chunk}; @@ -393,7 +394,7 @@ async fn embed_in_runtime_bailout( .get_resolved_full_name(&options, compilation, chunk) .await?; if let Some(base) = full_name.first() - && top_level_decls.contains(&base.as_str().into()) + && top_level_decls.contains(&Atom::new(base.as_str())) { return Ok(Some(format!( "it declares '{base}' on top-level, which conflicts with the current library output." From d5ef5243814736edf5f0cce4cb8be3482092020f Mon Sep 17 00:00:00 2001 From: CPunisher <1343316114@qq.com> Date: Wed, 29 Oct 2025 19:27:44 +0800 Subject: [PATCH 14/22] Cargo shear --- Cargo.lock | 1 - crates/swc_plugin_ts_collector/Cargo.toml | 5 ++--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4d4413b9dfef..fd2794f5b08b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4996,7 +4996,6 @@ version = "0.6.0-beta.1" dependencies = [ "glob", "rspack_javascript_compiler", - "rspack_util", "rustc-hash", "serde_json", "swc_core", diff --git a/crates/swc_plugin_ts_collector/Cargo.toml b/crates/swc_plugin_ts_collector/Cargo.toml index f127fffcb7b0..53ed677c104b 100644 --- a/crates/swc_plugin_ts_collector/Cargo.toml +++ b/crates/swc_plugin_ts_collector/Cargo.toml @@ -7,9 +7,8 @@ repository = "https://github.com/web-infra-dev/rspack" version.workspace = true [dependencies] -rspack_util = { workspace = true } -rustc-hash = { workspace = true } -swc_core = { workspace = true, features = ["common", "ecma_ast", "ecma_visit", "ecma_parser"] } +rustc-hash = { workspace = true } +swc_core = { workspace = true, features = ["common", "ecma_ast", "ecma_visit", "ecma_parser"] } [dev-dependencies] glob = { workspace = true } From c8662d3953b5ab11e0e44ba0c4ce1e9b8c214ae5 Mon Sep 17 00:00:00 2001 From: CPunisher <1343316114@qq.com> Date: Wed, 29 Oct 2025 19:35:54 +0800 Subject: [PATCH 15/22] Cargo codegen --- crates/rspack_workspace/src/generated.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/rspack_workspace/src/generated.rs b/crates/rspack_workspace/src/generated.rs index 8b79da5ae16b..6faf744f2f9e 100644 --- a/crates/rspack_workspace/src/generated.rs +++ b/crates/rspack_workspace/src/generated.rs @@ -1,7 +1,7 @@ //! This is a generated file. Don't modify it by hand! Run 'cargo codegen' to re-generate the file. /// The version of the `swc_core` package used in the current workspace. pub const fn rspack_swc_core_version() -> &'static str { - "45.0.1" + "46.0.2" } /// The version of the JavaScript `@rspack/core` package. From 74899bc78c4bd1bc24aa2c4744bf4def32dc14d9 Mon Sep 17 00:00:00 2001 From: CPunisher <1343316114@qq.com> Date: Wed, 29 Oct 2025 19:37:20 +0800 Subject: [PATCH 16/22] Cargo clippy --- .../src/type_exports.rs | 32 ++++++------------- 1 file changed, 10 insertions(+), 22 deletions(-) diff --git a/crates/swc_plugin_ts_collector/src/type_exports.rs b/crates/swc_plugin_ts_collector/src/type_exports.rs index baa16779056e..79f3d4c52b0a 100644 --- a/crates/swc_plugin_ts_collector/src/type_exports.rs +++ b/crates/swc_plugin_ts_collector/src/type_exports.rs @@ -35,24 +35,16 @@ impl Visit for TypeExportsCollector<'_> { ModuleItem::ModuleDecl(decl) => match decl { ModuleDecl::ExportDecl(export_decl) => match &export_decl.decl { Decl::TsInterface(interface_decl) => { - self - .type_idents - .insert(interface_decl.id.sym.clone().into()); - self - .type_exports - .insert(interface_decl.id.sym.clone().into()); + self.type_idents.insert(interface_decl.id.sym.clone()); + self.type_exports.insert(interface_decl.id.sym.clone()); } Decl::TsTypeAlias(type_alias_decl) => { - self - .type_idents - .insert(type_alias_decl.id.sym.clone().into()); - self - .type_exports - .insert(type_alias_decl.id.sym.clone().into()); + self.type_idents.insert(type_alias_decl.id.sym.clone()); + self.type_exports.insert(type_alias_decl.id.sym.clone()); } Decl::TsEnum(enum_decl) => { - self.type_idents.insert(enum_decl.id.sym.clone().into()); - self.type_exports.insert(enum_decl.id.sym.clone().into()); + self.type_idents.insert(enum_decl.id.sym.clone()); + self.type_exports.insert(enum_decl.id.sym.clone()); } _ => {} }, @@ -110,7 +102,7 @@ impl Visit for TypeExportsCollector<'_> { if let Some(ident) = expr.expr.unwrap_parens().as_ident() { self .export_idents - .insert(ident.sym.clone().into(), "default".into()); + .insert(ident.sym.clone(), "default".into()); } } _ => {} @@ -119,17 +111,13 @@ impl Visit for TypeExportsCollector<'_> { if let Stmt::Decl(decl) = stmt { match decl { Decl::TsInterface(interface_decl) => { - self - .type_idents - .insert(interface_decl.id.sym.clone().into()); + self.type_idents.insert(interface_decl.id.sym.clone()); } Decl::TsTypeAlias(type_alias_decl) => { - self - .type_idents - .insert(type_alias_decl.id.sym.clone().into()); + self.type_idents.insert(type_alias_decl.id.sym.clone()); } Decl::TsEnum(enum_decl) => { - self.type_idents.insert(enum_decl.id.sym.clone().into()); + self.type_idents.insert(enum_decl.id.sym.clone()); } _ => {} } From 463c0ec18a4298aa106f7e4b2bf4c50a6dca60fd Mon Sep 17 00:00:00 2001 From: CPunisher <1343316114@qq.com> Date: Wed, 29 Oct 2025 20:24:47 +0800 Subject: [PATCH 17/22] Cargo clippy --- .../src/visitors/dependency/parser/estree.rs | 6 +++--- .../src/visitors/dependency/parser/mod.rs | 2 +- .../src/visitors/dependency/parser/walk_module_pre.rs | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/rspack_plugin_javascript/src/visitors/dependency/parser/estree.rs b/crates/rspack_plugin_javascript/src/visitors/dependency/parser/estree.rs index ff57f722d6f9..100482cd5c93 100644 --- a/crates/rspack_plugin_javascript/src/visitors/dependency/parser/estree.rs +++ b/crates/rspack_plugin_javascript/src/visitors/dependency/parser/estree.rs @@ -59,18 +59,18 @@ impl Spanned for ExportAllDeclaration<'_> { impl ExportAllDeclaration<'_> { pub fn source(&self) -> &Atom { match self { - ExportAllDeclaration::All(e) => &e + ExportAllDeclaration::All(e) => e .src .value .as_atom() .expect("ModuleExportName should be a valid utf8"), - ExportAllDeclaration::NamedAll(e) => &e + ExportAllDeclaration::NamedAll(e) => e .src .as_ref() .expect("ExportAllDeclaration::NamedAll (export * as x from 'm') must have src") .value .as_atom() - .unwrap(), + .expect("ModuleExportName should be a valid utf8"), } } diff --git a/crates/rspack_plugin_javascript/src/visitors/dependency/parser/mod.rs b/crates/rspack_plugin_javascript/src/visitors/dependency/parser/mod.rs index 3997d88faa0e..c8ed631958c9 100644 --- a/crates/rspack_plugin_javascript/src/visitors/dependency/parser/mod.rs +++ b/crates/rspack_plugin_javascript/src/visitors/dependency/parser/mod.rs @@ -1002,7 +1002,7 @@ impl<'parser> JavascriptParser<'parser> { members.push(value.to_atom_lossy().into_owned()); member_ranges.push(expr.obj.span()); } else if let Some(ident) = expr.prop.as_ident() { - members.push(ident.sym.clone().into()); + members.push(ident.sym.clone()); member_ranges.push(expr.obj.span()); } else { break; diff --git a/crates/rspack_plugin_javascript/src/visitors/dependency/parser/walk_module_pre.rs b/crates/rspack_plugin_javascript/src/visitors/dependency/parser/walk_module_pre.rs index e020227bb31f..e41d67871237 100644 --- a/crates/rspack_plugin_javascript/src/visitors/dependency/parser/walk_module_pre.rs +++ b/crates/rspack_plugin_javascript/src/visitors/dependency/parser/walk_module_pre.rs @@ -55,7 +55,7 @@ impl JavascriptParser<'_> { ModuleExportName::Ident(ident) => Some(&ident.sym), ModuleExportName::Str(s) => s.value.as_atom(), }) - .unwrap_or_else(|| &named.local.sym); + .unwrap_or(&named.local.sym); if drive .import_specifier(self, decl, source, Some(export_name), identifier_name) .unwrap_or_default() From fda983d86218d3eee662a1b92371e0420e59e324 Mon Sep 17 00:00:00 2001 From: CPunisher <1343316114@qq.com> Date: Wed, 29 Oct 2025 20:30:50 +0800 Subject: [PATCH 18/22] Fix --- .../src/visitors/dependency/parser/walk_module_pre.rs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/crates/rspack_plugin_javascript/src/visitors/dependency/parser/walk_module_pre.rs b/crates/rspack_plugin_javascript/src/visitors/dependency/parser/walk_module_pre.rs index e41d67871237..41ccf5d146c2 100644 --- a/crates/rspack_plugin_javascript/src/visitors/dependency/parser/walk_module_pre.rs +++ b/crates/rspack_plugin_javascript/src/visitors/dependency/parser/walk_module_pre.rs @@ -51,9 +51,12 @@ impl JavascriptParser<'_> { let export_name = named .imported .as_ref() - .and_then(|imported| match imported { - ModuleExportName::Ident(ident) => Some(&ident.sym), - ModuleExportName::Str(s) => s.value.as_atom(), + .map(|imported| match imported { + ModuleExportName::Ident(ident) => &ident.sym, + ModuleExportName::Str(s) => s + .value + .as_atom() + .expect("ModuleExportName should be a valid utf8"), }) .unwrap_or(&named.local.sym); if drive From 29fbada6ae5431067bbf243c5b33de795ccab1ef Mon Sep 17 00:00:00 2001 From: jserfeng <1114550440@qq.com> Date: Thu, 30 Oct 2025 13:08:51 +0800 Subject: [PATCH 19/22] fix: should use ordered map to store module outgoing refs --- crates/rspack_core/src/concatenated_module.rs | 15 ++++++------- crates/rspack_plugin_esm_library/src/link.rs | 21 ++++++++++++------- crates/rspack_util/src/fx_hash.rs | 2 +- .../__snapshots__/esm.snap.txt | 8 +++---- .../__snapshots__/esm.snap.txt | 8 +++---- 5 files changed, 31 insertions(+), 23 deletions(-) diff --git a/crates/rspack_core/src/concatenated_module.rs b/crates/rspack_core/src/concatenated_module.rs index 1261c48a5393..e11635e96544 100644 --- a/crates/rspack_core/src/concatenated_module.rs +++ b/crates/rspack_core/src/concatenated_module.rs @@ -1,6 +1,6 @@ use std::{ borrow::Cow, - collections::{BTreeMap, hash_map::Entry}, + collections::BTreeMap, fmt::Debug, hash::{BuildHasherDefault, Hasher}, sync::{Arc, LazyLock}, @@ -22,7 +22,8 @@ use rspack_sources::{ BoxSource, CachedSource, ConcatSource, RawStringSource, ReplaceSource, Source, SourceExt, }; use rspack_util::{ - SpanExt, ext::DynHash, itoa, json_stringify, source_map::SourceMapKind, swc::join_atom, + SpanExt, ext::DynHash, fx_hash::FxIndexMap, itoa, json_stringify, source_map::SourceMapKind, + swc::join_atom, }; use rustc_hash::{FxHashMap as HashMap, FxHashSet as HashSet, FxHasher}; use swc_core::{ @@ -204,7 +205,7 @@ pub struct ConcatenatedModuleInfo { pub global_scope_ident: Vec, pub idents: Vec, pub all_used_names: HashSet, - pub binding_to_ref: HashMap<(Atom, SyntaxContext), Vec>, + pub binding_to_ref: FxIndexMap<(Atom, SyntaxContext), Vec>, pub public_path_auto_replacement: Option, pub static_url_replacement: bool, @@ -2319,15 +2320,15 @@ impl ConcatenatedModule { } module_info.all_used_names = all_used_names; - let mut binding_to_ref: HashMap<(Atom, SyntaxContext), Vec> = - HashMap::default(); + let mut binding_to_ref: FxIndexMap<(Atom, SyntaxContext), Vec> = + Default::default(); for ident in module_info.idents.iter() { match binding_to_ref.entry((ident.id.sym.clone(), ident.id.ctxt)) { - Entry::Occupied(mut occ) => { + indexmap::map::Entry::Occupied(mut occ) => { occ.get_mut().push(ident.clone()); } - Entry::Vacant(vac) => { + indexmap::map::Entry::Vacant(vac) => { vac.insert(vec![ident.clone()]); } }; diff --git a/crates/rspack_plugin_esm_library/src/link.rs b/crates/rspack_plugin_esm_library/src/link.rs index 3859cd54df24..176197d47199 100644 --- a/crates/rspack_plugin_esm_library/src/link.rs +++ b/crates/rspack_plugin_esm_library/src/link.rs @@ -1,5 +1,5 @@ use std::{ - collections::{self, hash_map::Entry}, + collections::{self}, hash::BuildHasher, sync::Arc, }; @@ -27,7 +27,7 @@ use rspack_plugin_javascript::{ }; use rspack_util::{ atom::Atom, - fx_hash::{FxHashMap, FxHashSet, FxIndexMap, FxIndexSet}, + fx_hash::{FxHashMap, FxHashSet, FxIndexMap, FxIndexSet, indexmap}, swc::join_atom, }; use swc_core::{ @@ -821,17 +821,17 @@ impl EsmLibraryPlugin { idents.push(ident); } - let mut binding_to_ref: FxHashMap< + let mut binding_to_ref: FxIndexMap< (Atom, SyntaxContext), Vec, - > = FxHashMap::default(); + > = Default::default(); for ident in &idents { match binding_to_ref.entry((ident.id.sym.clone(), ident.id.ctxt)) { - Entry::Occupied(mut occ) => { + indexmap::map::Entry::Occupied(mut occ) => { occ.get_mut().push(ident.clone()); } - Entry::Vacant(vac) => { + indexmap::map::Entry::Vacant(vac) => { vac.insert(vec![ident.clone()]); } }; @@ -1517,7 +1517,14 @@ impl EsmLibraryPlugin { // link entry direct exports if let Some(preserve_modules) = &self.preserve_modules { - for module_id in module_graph.modules().keys() { + let modules = module_graph.modules(); + let mut modules = modules.keys().collect::>(); + modules.sort_by(|a, b| { + let ad = module_graph.get_depth(a); + let bd = module_graph.get_depth(b); + ad.cmp(&bd) + }); + for module_id in modules { if compilation.entry_modules().contains(module_id) { continue; } diff --git a/crates/rspack_util/src/fx_hash.rs b/crates/rspack_util/src/fx_hash.rs index 3b1fe02b441e..5ccbf8cdaad5 100644 --- a/crates/rspack_util/src/fx_hash.rs +++ b/crates/rspack_util/src/fx_hash.rs @@ -1,9 +1,9 @@ use std::hash::BuildHasherDefault; use dashmap::{DashMap, DashSet}; +pub use indexmap; use indexmap::{IndexMap, IndexSet}; use rustc_hash::FxHasher; - pub type BuildFxHasher = BuildHasherDefault; pub use rustc_hash::{FxHashMap, FxHashSet}; pub type FxDashMap = DashMap>; diff --git a/tests/rspack-test/esmOutputCases/deconflict/deconflit-local/__snapshots__/esm.snap.txt b/tests/rspack-test/esmOutputCases/deconflict/deconflit-local/__snapshots__/esm.snap.txt index cb7016cf53db..65a82ad00f9e 100644 --- a/tests/rspack-test/esmOutputCases/deconflict/deconflit-local/__snapshots__/esm.snap.txt +++ b/tests/rspack-test/esmOutputCases/deconflict/deconflit-local/__snapshots__/esm.snap.txt @@ -6,13 +6,13 @@ const value = 42 // ./index.js -const index_local_0 = 'index' -const index_local = '' +const index_local = 'index' +const index_index_local = '' it('should have deconflicted symbol', () => { expect(value).toBe(42) - expect(index_local_0).toBe('index') - expect(index_local).toBe('') + expect(index_local).toBe('index') + expect(index_index_local).toBe('') }) diff --git a/tests/rspack-test/esmOutputCases/deconflict/other-chunk-local/__snapshots__/esm.snap.txt b/tests/rspack-test/esmOutputCases/deconflict/other-chunk-local/__snapshots__/esm.snap.txt index b6b975e98118..21e69c6277a6 100644 --- a/tests/rspack-test/esmOutputCases/deconflict/other-chunk-local/__snapshots__/esm.snap.txt +++ b/tests/rspack-test/esmOutputCases/deconflict/other-chunk-local/__snapshots__/esm.snap.txt @@ -6,13 +6,13 @@ const value = 42 // ./index.js -const index_local_0 = 'index' -const index_local = '' +const index_local = 'index' +const index_index_local = '' it('should have deconflicted symbol', async () => { expect(value).toBe(42) - expect(index_local_0).toBe('index') - expect(index_local).toBe('') + expect(index_local).toBe('index') + expect(index_index_local).toBe('') const {value: v} = await import("./other_js.mjs").then((mod) => ({ value: mod.value })) expect(v).toBe(value) }) From 2ffc289890fa8ee83743ae7369c258f883afb48e Mon Sep 17 00:00:00 2001 From: CPunisher <1343316114@qq.com> Date: Thu, 30 Oct 2025 14:00:01 +0800 Subject: [PATCH 20/22] Update snap --- tests/rspack-test/statsAPICases/exports.js | 2390 ++++++++++---------- 1 file changed, 1195 insertions(+), 1195 deletions(-) diff --git a/tests/rspack-test/statsAPICases/exports.js b/tests/rspack-test/statsAPICases/exports.js index 0117077f846a..a1bd1d500746 100644 --- a/tests/rspack-test/statsAPICases/exports.js +++ b/tests/rspack-test/statsAPICases/exports.js @@ -23,1201 +23,1201 @@ module.exports = { }; expect(typeof stats?.hash).toBe("string"); expect(stats?.toJson(statsOptions)).toMatchInlineSnapshot(` - Object { - assets: Array [ - Object { - auxiliaryChunkIdHints: Array [], - auxiliaryChunkNames: Array [], - auxiliaryChunks: Array [], - cached: false, - chunkIdHints: Array [], - chunkNames: Array [ - main, - ], - chunks: Array [ - 889, - ], - emitted: true, - filteredRelated: 0, - info: Object { - chunkhash: Array [], - contenthash: Array [], - fullhash: Array [], - isOverSizeLimit: false, - javascriptModule: false, - minimized: true, - related: Object {}, - }, - isOverSizeLimit: false, - name: main.js, - related: Array [], - size: 412, - type: asset, - }, - ], - assetsByChunkName: Object { - main: Array [ - main.js, - ], - }, - children: Array [], - chunks: Array [ - Object { - auxiliaryFiles: Array [], - children: Array [], - childrenByOrder: Object {}, - entry: true, - files: Array [ - main.js, - ], - filteredModules: undefined, - hash: d327995fd271e089, - id: 889, - idHints: Array [], - initial: true, - modules: Array [ - Object { - assets: Array [], - buildTimeExecuted: false, - built: false, - cacheable: true, - cached: false, - chunks: Array [ - 889, - ], - codeGenerated: true, - dependent: false, - depth: 0, - errors: 0, - failed: false, - filteredModules: undefined, - filteredReasons: undefined, - id: 720, - identifier: /fixtures/esm/abc.js|0e47874493fdefd960142324ecb88ecc, - index: 0, - index2: 3, - issuer: undefined, - issuerId: undefined, - issuerName: undefined, - issuerPath: undefined, - layer: undefined, - moduleType: javascript/esm, - modules: Array [ - Object { - assets: Array [], - buildTimeExecuted: false, - built: true, - cacheable: true, - cached: false, - chunks: Array [], - codeGenerated: false, - dependent: true, - depth: 0, - errors: 0, - failed: false, - filteredReasons: undefined, - id: undefined, - identifier: /fixtures/esm/abc.js, - index: 0, - index2: 3, - issuer: undefined, - issuerId: undefined, - issuerName: undefined, - issuerPath: undefined, - layer: undefined, - moduleType: javascript/auto, - name: ./fixtures/esm/abc.js, - nameForCondition: /fixtures/esm/abc.js, - optimizationBailout: Array [ - ModuleConcatenation bailout: Module is an entry point, - ], - optional: false, - orphan: true, - postOrderIndex: 3, - preOrderIndex: 0, - providedExports: Array [], - reasons: Array [], - size: 80, - sizes: Object { - javascript: 80, - }, - type: module, - usedExports: Array [], - warnings: 0, - }, - Object { - assets: Array [], - buildTimeExecuted: false, - built: true, - cacheable: true, - cached: false, - chunks: Array [], - codeGenerated: false, - dependent: true, - depth: 1, - errors: 0, - failed: false, - filteredReasons: undefined, - id: undefined, - identifier: /fixtures/esm/a.js, - index: 1, - index2: 0, - issuer: /fixtures/esm/abc.js, - issuerId: undefined, - issuerName: ./fixtures/esm/abc.js, - issuerPath: Array [ - Object { - id: undefined, - identifier: /fixtures/esm/abc.js, - name: ./fixtures/esm/abc.js, - }, - ], - layer: undefined, - moduleType: javascript/auto, - name: ./fixtures/esm/a.js, - nameForCondition: /fixtures/esm/a.js, - optimizationBailout: Array [], - optional: false, - orphan: true, - postOrderIndex: 0, - preOrderIndex: 1, - providedExports: Array [ - a, - default, - ], - reasons: Array [ - Object { - active: false, - explanation: undefined, - loc: 1:0-24, - moduleId: undefined, - moduleIdentifier: /fixtures/esm/abc.js, - moduleName: ./fixtures/esm/abc.js, - resolvedModule: ./fixtures/esm/abc.js, - resolvedModuleId: undefined, - resolvedModuleIdentifier: /fixtures/esm/abc.js, - type: esm import, - userRequest: ./a, - }, - Object { - active: true, - explanation: undefined, - loc: 5:0-1, - moduleId: undefined, - moduleIdentifier: /fixtures/esm/abc.js, - moduleName: ./fixtures/esm/abc.js, - resolvedModule: ./fixtures/esm/abc.js, - resolvedModuleId: undefined, - resolvedModuleIdentifier: /fixtures/esm/abc.js, - type: esm import specifier, - userRequest: ./a, - }, - ], - size: 37, - sizes: Object { - javascript: 37, - }, - type: module, - usedExports: Array [ - a, - ], - warnings: 0, - }, - Object { - assets: Array [], - buildTimeExecuted: false, - built: true, - cacheable: true, - cached: false, - chunks: Array [], - codeGenerated: false, - dependent: true, - depth: 1, - errors: 0, - failed: false, - filteredReasons: undefined, - id: undefined, - identifier: /fixtures/esm/b.js, - index: 2, - index2: 1, - issuer: /fixtures/esm/abc.js, - issuerId: undefined, - issuerName: ./fixtures/esm/abc.js, - issuerPath: Array [ - Object { - id: undefined, - identifier: /fixtures/esm/abc.js, - name: ./fixtures/esm/abc.js, - }, - ], - layer: undefined, - moduleType: javascript/auto, - name: ./fixtures/esm/b.js, - nameForCondition: /fixtures/esm/b.js, - optimizationBailout: Array [], - optional: false, - orphan: true, - postOrderIndex: 1, - preOrderIndex: 2, - providedExports: Array [ - b, - default, - ], - reasons: Array [ - Object { - active: false, - explanation: undefined, - loc: 2:0-20, - moduleId: undefined, - moduleIdentifier: /fixtures/esm/abc.js, - moduleName: ./fixtures/esm/abc.js, - resolvedModule: ./fixtures/esm/abc.js, - resolvedModuleId: undefined, - resolvedModuleIdentifier: /fixtures/esm/abc.js, - type: esm import, - userRequest: ./b, - }, - Object { - active: true, - explanation: undefined, - loc: 5:3-4, - moduleId: undefined, - moduleIdentifier: /fixtures/esm/abc.js, - moduleName: ./fixtures/esm/abc.js, - resolvedModule: ./fixtures/esm/abc.js, - resolvedModuleId: undefined, - resolvedModuleIdentifier: /fixtures/esm/abc.js, - type: esm import specifier, - userRequest: ./b, - }, - ], - size: 38, - sizes: Object { - javascript: 38, - }, - type: module, - usedExports: Array [ - default, - ], - warnings: 0, - }, - Object { - assets: Array [], - buildTimeExecuted: false, - built: true, - cacheable: true, - cached: false, - chunks: Array [], - codeGenerated: false, - dependent: true, - depth: 1, - errors: 0, - failed: false, - filteredReasons: undefined, - id: undefined, - identifier: /fixtures/esm/c.js, - index: 3, - index2: 2, - issuer: /fixtures/esm/abc.js, - issuerId: undefined, - issuerName: ./fixtures/esm/abc.js, - issuerPath: Array [ - Object { - id: undefined, - identifier: /fixtures/esm/abc.js, - name: ./fixtures/esm/abc.js, - }, - ], - layer: undefined, - moduleType: javascript/auto, - name: ./fixtures/esm/c.js, - nameForCondition: /fixtures/esm/c.js, - optimizationBailout: Array [], - optional: false, - orphan: true, - postOrderIndex: 2, - preOrderIndex: 3, - providedExports: Array [ - c, - default, - ], - reasons: Array [ - Object { - active: false, - explanation: undefined, - loc: 3:0-25, - moduleId: undefined, - moduleIdentifier: /fixtures/esm/abc.js, - moduleName: ./fixtures/esm/abc.js, - resolvedModule: ./fixtures/esm/abc.js, - resolvedModuleId: undefined, - resolvedModuleIdentifier: /fixtures/esm/abc.js, - type: esm import, - userRequest: ./c, - }, - Object { - active: true, - explanation: undefined, - loc: 5:6-7, - moduleId: undefined, - moduleIdentifier: /fixtures/esm/abc.js, - moduleName: ./fixtures/esm/abc.js, - resolvedModule: ./fixtures/esm/abc.js, - resolvedModuleId: undefined, - resolvedModuleIdentifier: /fixtures/esm/abc.js, - type: esm import specifier, - userRequest: ./c, - }, - ], - size: 37, - sizes: Object { - javascript: 37, - }, - type: module, - usedExports: true, - warnings: 0, - }, - ], - name: ./fixtures/esm/abc.js + 3 modules, - nameForCondition: /fixtures/esm/abc.js, - optimizationBailout: Array [], - optional: false, - orphan: false, - postOrderIndex: 3, - preOrderIndex: 0, - providedExports: Array [], - reasons: Array [ - Object { - active: true, - explanation: undefined, - loc: undefined, - moduleId: null, - resolvedModuleId: null, - type: entry, - userRequest: ./fixtures/esm/abc, - }, - ], - size: 192, - sizes: Object { - javascript: 192, - }, - type: module, - usedExports: Array [], - warnings: 0, - }, - ], - names: Array [ - main, - ], - origins: Array [ - Object { - loc: main, - module: , - moduleId: undefined, - moduleIdentifier: , - moduleName: , - request: ./fixtures/esm/abc, - }, - ], - parents: Array [], - reason: undefined, - rendered: true, - runtime: Array [ - main, - ], - siblings: Array [], - size: 192, - sizes: Object { - javascript: 192, - runtime: 647, - }, - type: chunk, - }, - ], - entrypoints: Object { - main: Object { - assets: Array [ - Object { - name: main.js, - size: 412, - }, - ], - assetsSize: 412, - auxiliaryAssets: Array [], - auxiliaryAssetsSize: 0, - childAssets: Object {}, - children: Object {}, - chunks: Array [ - 889, - ], - filteredAssets: 0, - isOverSizeLimit: false, - name: main, - }, - }, - errors: Array [], - errorsCount: 0, - filteredAssets: undefined, - filteredModules: undefined, - hash: 2abe0aea473cf602, - modules: Array [ - Object { - assets: Array [], - buildTimeExecuted: false, - built: true, - cacheable: true, - cached: false, - chunks: Array [], - codeGenerated: false, - dependent: undefined, - depth: 0, - errors: 0, - failed: false, - filteredReasons: undefined, - id: undefined, - identifier: /fixtures/esm/abc.js, - index: 0, - index2: 3, - issuer: undefined, - issuerId: undefined, - issuerName: undefined, - issuerPath: undefined, - layer: undefined, - moduleType: javascript/auto, - name: ./fixtures/esm/abc.js, - nameForCondition: /fixtures/esm/abc.js, - optimizationBailout: Array [ - ModuleConcatenation bailout: Module is an entry point, - ], - optional: false, - orphan: true, - postOrderIndex: 3, - preOrderIndex: 0, - providedExports: Array [], - reasons: Array [], - size: 80, - sizes: Object { - javascript: 80, - }, - type: module, - usedExports: Array [], - warnings: 0, - }, - Object { - assets: Array [], - buildTimeExecuted: false, - built: false, - cacheable: true, - cached: false, - chunks: Array [ - 889, - ], - codeGenerated: true, - dependent: undefined, - depth: 0, - errors: 0, - failed: false, - filteredModules: undefined, - filteredReasons: undefined, - id: 720, - identifier: /fixtures/esm/abc.js|0e47874493fdefd960142324ecb88ecc, - index: 0, - index2: 3, - issuer: undefined, - issuerId: undefined, - issuerName: undefined, - issuerPath: undefined, - layer: undefined, - moduleType: javascript/esm, - modules: Array [ - Object { - assets: Array [], - buildTimeExecuted: false, - built: true, - cacheable: true, - cached: false, - chunks: Array [], - codeGenerated: false, - dependent: undefined, - depth: 0, - errors: 0, - failed: false, - filteredReasons: undefined, - id: undefined, - identifier: /fixtures/esm/abc.js, - index: 0, - index2: 3, - issuer: undefined, - issuerId: undefined, - issuerName: undefined, - issuerPath: undefined, - layer: undefined, - moduleType: javascript/auto, - name: ./fixtures/esm/abc.js, - nameForCondition: /fixtures/esm/abc.js, - optimizationBailout: Array [ - ModuleConcatenation bailout: Module is an entry point, - ], - optional: false, - orphan: true, - postOrderIndex: 3, - preOrderIndex: 0, - providedExports: Array [], - reasons: Array [], - size: 80, - sizes: Object { - javascript: 80, - }, - type: module, - usedExports: Array [], - warnings: 0, - }, - Object { - assets: Array [], - buildTimeExecuted: false, - built: true, - cacheable: true, - cached: false, - chunks: Array [], - codeGenerated: false, - dependent: undefined, - depth: 1, - errors: 0, - failed: false, - filteredReasons: undefined, - id: undefined, - identifier: /fixtures/esm/a.js, - index: 1, - index2: 0, - issuer: /fixtures/esm/abc.js, - issuerId: undefined, - issuerName: ./fixtures/esm/abc.js, - issuerPath: Array [ - Object { - id: undefined, - identifier: /fixtures/esm/abc.js, - name: ./fixtures/esm/abc.js, - }, - ], - layer: undefined, - moduleType: javascript/auto, - name: ./fixtures/esm/a.js, - nameForCondition: /fixtures/esm/a.js, - optimizationBailout: Array [], - optional: false, - orphan: true, - postOrderIndex: 0, - preOrderIndex: 1, - providedExports: Array [ - a, - default, - ], - reasons: Array [ - Object { - active: false, - explanation: undefined, - loc: 1:0-24, - moduleId: undefined, - moduleIdentifier: /fixtures/esm/abc.js, - moduleName: ./fixtures/esm/abc.js, - resolvedModule: ./fixtures/esm/abc.js, - resolvedModuleId: undefined, - resolvedModuleIdentifier: /fixtures/esm/abc.js, - type: esm import, - userRequest: ./a, - }, - Object { - active: true, - explanation: undefined, - loc: 5:0-1, - moduleId: undefined, - moduleIdentifier: /fixtures/esm/abc.js, - moduleName: ./fixtures/esm/abc.js, - resolvedModule: ./fixtures/esm/abc.js, - resolvedModuleId: undefined, - resolvedModuleIdentifier: /fixtures/esm/abc.js, - type: esm import specifier, - userRequest: ./a, - }, - ], - size: 37, - sizes: Object { - javascript: 37, - }, - type: module, - usedExports: Array [ - a, - ], - warnings: 0, - }, - Object { - assets: Array [], - buildTimeExecuted: false, - built: true, - cacheable: true, - cached: false, - chunks: Array [], - codeGenerated: false, - dependent: undefined, - depth: 1, - errors: 0, - failed: false, - filteredReasons: undefined, - id: undefined, - identifier: /fixtures/esm/b.js, - index: 2, - index2: 1, - issuer: /fixtures/esm/abc.js, - issuerId: undefined, - issuerName: ./fixtures/esm/abc.js, - issuerPath: Array [ - Object { - id: undefined, - identifier: /fixtures/esm/abc.js, - name: ./fixtures/esm/abc.js, - }, - ], - layer: undefined, - moduleType: javascript/auto, - name: ./fixtures/esm/b.js, - nameForCondition: /fixtures/esm/b.js, - optimizationBailout: Array [], - optional: false, - orphan: true, - postOrderIndex: 1, - preOrderIndex: 2, - providedExports: Array [ - b, - default, - ], - reasons: Array [ - Object { - active: false, - explanation: undefined, - loc: 2:0-20, - moduleId: undefined, - moduleIdentifier: /fixtures/esm/abc.js, - moduleName: ./fixtures/esm/abc.js, - resolvedModule: ./fixtures/esm/abc.js, - resolvedModuleId: undefined, - resolvedModuleIdentifier: /fixtures/esm/abc.js, - type: esm import, - userRequest: ./b, - }, - Object { - active: true, - explanation: undefined, - loc: 5:3-4, - moduleId: undefined, - moduleIdentifier: /fixtures/esm/abc.js, - moduleName: ./fixtures/esm/abc.js, - resolvedModule: ./fixtures/esm/abc.js, - resolvedModuleId: undefined, - resolvedModuleIdentifier: /fixtures/esm/abc.js, - type: esm import specifier, - userRequest: ./b, - }, - ], - size: 38, - sizes: Object { - javascript: 38, - }, - type: module, - usedExports: Array [ - default, - ], - warnings: 0, - }, - Object { - assets: Array [], - buildTimeExecuted: false, - built: true, - cacheable: true, - cached: false, - chunks: Array [], - codeGenerated: false, - dependent: undefined, - depth: 1, - errors: 0, - failed: false, - filteredReasons: undefined, - id: undefined, - identifier: /fixtures/esm/c.js, - index: 3, - index2: 2, - issuer: /fixtures/esm/abc.js, - issuerId: undefined, - issuerName: ./fixtures/esm/abc.js, - issuerPath: Array [ - Object { - id: undefined, - identifier: /fixtures/esm/abc.js, - name: ./fixtures/esm/abc.js, - }, - ], - layer: undefined, - moduleType: javascript/auto, - name: ./fixtures/esm/c.js, - nameForCondition: /fixtures/esm/c.js, - optimizationBailout: Array [], - optional: false, - orphan: true, - postOrderIndex: 2, - preOrderIndex: 3, - providedExports: Array [ - c, - default, - ], - reasons: Array [ - Object { - active: false, - explanation: undefined, - loc: 3:0-25, - moduleId: undefined, - moduleIdentifier: /fixtures/esm/abc.js, - moduleName: ./fixtures/esm/abc.js, - resolvedModule: ./fixtures/esm/abc.js, - resolvedModuleId: undefined, - resolvedModuleIdentifier: /fixtures/esm/abc.js, - type: esm import, - userRequest: ./c, - }, - Object { - active: true, - explanation: undefined, - loc: 5:6-7, - moduleId: undefined, - moduleIdentifier: /fixtures/esm/abc.js, - moduleName: ./fixtures/esm/abc.js, - resolvedModule: ./fixtures/esm/abc.js, - resolvedModuleId: undefined, - resolvedModuleIdentifier: /fixtures/esm/abc.js, - type: esm import specifier, - userRequest: ./c, - }, - ], - size: 37, - sizes: Object { - javascript: 37, - }, - type: module, - usedExports: true, - warnings: 0, - }, - ], - name: ./fixtures/esm/abc.js + 3 modules, - nameForCondition: /fixtures/esm/abc.js, - optimizationBailout: Array [], - optional: false, - orphan: false, - postOrderIndex: 3, - preOrderIndex: 0, - providedExports: Array [], - reasons: Array [ - Object { - active: true, - explanation: undefined, - loc: undefined, - moduleId: null, - resolvedModuleId: null, - type: entry, - userRequest: ./fixtures/esm/abc, - }, - ], - size: 192, - sizes: Object { - javascript: 192, - }, - type: module, - usedExports: Array [], - warnings: 0, - }, - Object { - assets: Array [], - buildTimeExecuted: false, - built: true, - cacheable: true, - cached: false, - chunks: Array [], - codeGenerated: false, - dependent: undefined, - depth: 1, - errors: 0, - failed: false, - filteredReasons: undefined, - id: undefined, - identifier: /fixtures/esm/a.js, - index: 1, - index2: 0, - issuer: /fixtures/esm/abc.js, - issuerId: undefined, - issuerName: ./fixtures/esm/abc.js, - issuerPath: Array [ - Object { - id: undefined, - identifier: /fixtures/esm/abc.js, - name: ./fixtures/esm/abc.js, - }, - ], - layer: undefined, - moduleType: javascript/auto, - name: ./fixtures/esm/a.js, - nameForCondition: /fixtures/esm/a.js, - optimizationBailout: Array [], - optional: false, - orphan: true, - postOrderIndex: 0, - preOrderIndex: 1, - providedExports: Array [ - a, - default, - ], - reasons: Array [ - Object { - active: false, - explanation: undefined, - loc: 1:0-24, - moduleId: undefined, - moduleIdentifier: /fixtures/esm/abc.js, - moduleName: ./fixtures/esm/abc.js, - resolvedModule: ./fixtures/esm/abc.js, - resolvedModuleId: undefined, - resolvedModuleIdentifier: /fixtures/esm/abc.js, - type: esm import, - userRequest: ./a, - }, - Object { - active: true, - explanation: undefined, - loc: 5:0-1, - moduleId: undefined, - moduleIdentifier: /fixtures/esm/abc.js, - moduleName: ./fixtures/esm/abc.js, - resolvedModule: ./fixtures/esm/abc.js, - resolvedModuleId: undefined, - resolvedModuleIdentifier: /fixtures/esm/abc.js, - type: esm import specifier, - userRequest: ./a, - }, - ], - size: 37, - sizes: Object { - javascript: 37, - }, - type: module, - usedExports: Array [ - a, - ], - warnings: 0, - }, - Object { - assets: Array [], - buildTimeExecuted: false, - built: true, - cacheable: true, - cached: false, - chunks: Array [], - codeGenerated: false, - dependent: undefined, - depth: 1, - errors: 0, - failed: false, - filteredReasons: undefined, - id: undefined, - identifier: /fixtures/esm/b.js, - index: 2, - index2: 1, - issuer: /fixtures/esm/abc.js, - issuerId: undefined, - issuerName: ./fixtures/esm/abc.js, - issuerPath: Array [ - Object { - id: undefined, - identifier: /fixtures/esm/abc.js, - name: ./fixtures/esm/abc.js, - }, - ], - layer: undefined, - moduleType: javascript/auto, - name: ./fixtures/esm/b.js, - nameForCondition: /fixtures/esm/b.js, - optimizationBailout: Array [], - optional: false, - orphan: true, - postOrderIndex: 1, - preOrderIndex: 2, - providedExports: Array [ - b, - default, - ], - reasons: Array [ - Object { - active: false, - explanation: undefined, - loc: 2:0-20, - moduleId: undefined, - moduleIdentifier: /fixtures/esm/abc.js, - moduleName: ./fixtures/esm/abc.js, - resolvedModule: ./fixtures/esm/abc.js, - resolvedModuleId: undefined, - resolvedModuleIdentifier: /fixtures/esm/abc.js, - type: esm import, - userRequest: ./b, - }, - Object { - active: true, - explanation: undefined, - loc: 5:3-4, - moduleId: undefined, - moduleIdentifier: /fixtures/esm/abc.js, - moduleName: ./fixtures/esm/abc.js, - resolvedModule: ./fixtures/esm/abc.js, - resolvedModuleId: undefined, - resolvedModuleIdentifier: /fixtures/esm/abc.js, - type: esm import specifier, - userRequest: ./b, - }, - ], - size: 38, - sizes: Object { - javascript: 38, - }, - type: module, - usedExports: Array [ - default, - ], - warnings: 0, - }, - Object { - assets: Array [], - buildTimeExecuted: false, - built: true, - cacheable: true, - cached: false, - chunks: Array [], - codeGenerated: false, - dependent: undefined, - depth: 1, - errors: 0, - failed: false, - filteredReasons: undefined, - id: undefined, - identifier: /fixtures/esm/c.js, - index: 3, - index2: 2, - issuer: /fixtures/esm/abc.js, - issuerId: undefined, - issuerName: ./fixtures/esm/abc.js, - issuerPath: Array [ - Object { - id: undefined, - identifier: /fixtures/esm/abc.js, - name: ./fixtures/esm/abc.js, - }, - ], - layer: undefined, - moduleType: javascript/auto, - name: ./fixtures/esm/c.js, - nameForCondition: /fixtures/esm/c.js, - optimizationBailout: Array [], - optional: false, - orphan: true, - postOrderIndex: 2, - preOrderIndex: 3, - providedExports: Array [ - c, - default, - ], - reasons: Array [ - Object { - active: false, - explanation: undefined, - loc: 3:0-25, - moduleId: undefined, - moduleIdentifier: /fixtures/esm/abc.js, - moduleName: ./fixtures/esm/abc.js, - resolvedModule: ./fixtures/esm/abc.js, - resolvedModuleId: undefined, - resolvedModuleIdentifier: /fixtures/esm/abc.js, - type: esm import, - userRequest: ./c, - }, - Object { - active: true, - explanation: undefined, - loc: 5:6-7, - moduleId: undefined, - moduleIdentifier: /fixtures/esm/abc.js, - moduleName: ./fixtures/esm/abc.js, - resolvedModule: ./fixtures/esm/abc.js, - resolvedModuleId: undefined, - resolvedModuleIdentifier: /fixtures/esm/abc.js, - type: esm import specifier, - userRequest: ./c, - }, - ], - size: 37, - sizes: Object { - javascript: 37, - }, - type: module, - usedExports: true, - warnings: 0, - }, - Object { - assets: Array [], - buildTimeExecuted: false, - built: false, - cacheable: true, - cached: false, - chunks: Array [ - 889, - ], - codeGenerated: true, - dependent: false, - depth: undefined, - errors: 0, - failed: false, - filteredReasons: undefined, - id: , - identifier: webpack/runtime/define_property_getters, - index: undefined, - index2: undefined, - issuer: undefined, - issuerId: undefined, - issuerName: undefined, - issuerPath: undefined, - layer: undefined, - moduleType: runtime, - name: webpack/runtime/define_property_getters, - nameForCondition: undefined, - optimizationBailout: Array [], - optional: false, - orphan: false, - postOrderIndex: undefined, - preOrderIndex: undefined, - providedExports: Array [], - reasons: Array [], - size: 285, - sizes: Object { - runtime: 285, - }, - type: module, - usedExports: null, - warnings: 0, - }, - Object { - assets: Array [], - buildTimeExecuted: false, - built: false, - cacheable: true, - cached: false, - chunks: Array [ - 889, - ], - codeGenerated: true, - dependent: false, - depth: undefined, - errors: 0, - failed: false, - filteredReasons: undefined, - id: , - identifier: webpack/runtime/has_own_property, - index: undefined, - index2: undefined, - issuer: undefined, - issuerId: undefined, - issuerName: undefined, - issuerPath: undefined, - layer: undefined, - moduleType: runtime, - name: webpack/runtime/has_own_property, - nameForCondition: undefined, - optimizationBailout: Array [], - optional: false, - orphan: false, - postOrderIndex: undefined, - preOrderIndex: undefined, - providedExports: Array [], - reasons: Array [], - size: 88, - sizes: Object { - runtime: 88, - }, - type: module, - usedExports: null, - warnings: 0, - }, - Object { - assets: Array [], - buildTimeExecuted: false, - built: false, - cacheable: true, - cached: false, - chunks: Array [ - 889, - ], - codeGenerated: true, - dependent: false, - depth: undefined, - errors: 0, - failed: false, - filteredReasons: undefined, - id: , - identifier: webpack/runtime/make_namespace_object, - index: undefined, - index2: undefined, - issuer: undefined, - issuerId: undefined, - issuerName: undefined, - issuerPath: undefined, - layer: undefined, - moduleType: runtime, - name: webpack/runtime/make_namespace_object, - nameForCondition: undefined, - optimizationBailout: Array [], - optional: false, - orphan: false, - postOrderIndex: undefined, - preOrderIndex: undefined, - providedExports: Array [], - reasons: Array [], - size: 274, - sizes: Object { - runtime: 274, - }, - type: module, - usedExports: null, - warnings: 0, - }, - ], - namedChunkGroups: Object { - main: Object { - assets: Array [ - Object { - name: main.js, - size: 412, - }, - ], - assetsSize: 412, - auxiliaryAssets: Array [], - auxiliaryAssetsSize: 0, - childAssets: Object {}, - children: Object {}, - chunks: Array [ - 889, - ], - filteredAssets: 0, - isOverSizeLimit: false, - name: main, - }, - }, - outputPath: /dist, - publicPath: auto, - warnings: Array [], - warningsCount: 0, - } - `); + Object { + assets: Array [ + Object { + auxiliaryChunkIdHints: Array [], + auxiliaryChunkNames: Array [], + auxiliaryChunks: Array [], + cached: false, + chunkIdHints: Array [], + chunkNames: Array [ + main, + ], + chunks: Array [ + 889, + ], + emitted: true, + filteredRelated: 0, + info: Object { + chunkhash: Array [], + contenthash: Array [], + fullhash: Array [], + isOverSizeLimit: false, + javascriptModule: false, + minimized: true, + related: Object {}, + }, + isOverSizeLimit: false, + name: main.js, + related: Array [], + size: 412, + type: asset, + }, + ], + assetsByChunkName: Object { + main: Array [ + main.js, + ], + }, + children: Array [], + chunks: Array [ + Object { + auxiliaryFiles: Array [], + children: Array [], + childrenByOrder: Object {}, + entry: true, + files: Array [ + main.js, + ], + filteredModules: undefined, + hash: ac11555a8a0fd2a9, + id: 889, + idHints: Array [], + initial: true, + modules: Array [ + Object { + assets: Array [], + buildTimeExecuted: false, + built: false, + cacheable: true, + cached: false, + chunks: Array [ + 889, + ], + codeGenerated: true, + dependent: false, + depth: 0, + errors: 0, + failed: false, + filteredModules: undefined, + filteredReasons: undefined, + id: 720, + identifier: /fixtures/esm/abc.js|0e47874493fdefd960142324ecb88ecc, + index: 0, + index2: 3, + issuer: undefined, + issuerId: undefined, + issuerName: undefined, + issuerPath: undefined, + layer: undefined, + moduleType: javascript/esm, + modules: Array [ + Object { + assets: Array [], + buildTimeExecuted: false, + built: true, + cacheable: true, + cached: false, + chunks: Array [], + codeGenerated: false, + dependent: true, + depth: 0, + errors: 0, + failed: false, + filteredReasons: undefined, + id: undefined, + identifier: /fixtures/esm/abc.js, + index: 0, + index2: 3, + issuer: undefined, + issuerId: undefined, + issuerName: undefined, + issuerPath: undefined, + layer: undefined, + moduleType: javascript/auto, + name: ./fixtures/esm/abc.js, + nameForCondition: /fixtures/esm/abc.js, + optimizationBailout: Array [ + ModuleConcatenation bailout: Module is an entry point, + ], + optional: false, + orphan: true, + postOrderIndex: 3, + preOrderIndex: 0, + providedExports: Array [], + reasons: Array [], + size: 80, + sizes: Object { + javascript: 80, + }, + type: module, + usedExports: Array [], + warnings: 0, + }, + Object { + assets: Array [], + buildTimeExecuted: false, + built: true, + cacheable: true, + cached: false, + chunks: Array [], + codeGenerated: false, + dependent: true, + depth: 1, + errors: 0, + failed: false, + filteredReasons: undefined, + id: undefined, + identifier: /fixtures/esm/a.js, + index: 1, + index2: 0, + issuer: /fixtures/esm/abc.js, + issuerId: undefined, + issuerName: ./fixtures/esm/abc.js, + issuerPath: Array [ + Object { + id: undefined, + identifier: /fixtures/esm/abc.js, + name: ./fixtures/esm/abc.js, + }, + ], + layer: undefined, + moduleType: javascript/auto, + name: ./fixtures/esm/a.js, + nameForCondition: /fixtures/esm/a.js, + optimizationBailout: Array [], + optional: false, + orphan: true, + postOrderIndex: 0, + preOrderIndex: 1, + providedExports: Array [ + a, + default, + ], + reasons: Array [ + Object { + active: false, + explanation: undefined, + loc: 1:0-24, + moduleId: undefined, + moduleIdentifier: /fixtures/esm/abc.js, + moduleName: ./fixtures/esm/abc.js, + resolvedModule: ./fixtures/esm/abc.js, + resolvedModuleId: undefined, + resolvedModuleIdentifier: /fixtures/esm/abc.js, + type: esm import, + userRequest: ./a, + }, + Object { + active: true, + explanation: undefined, + loc: 5:0-1, + moduleId: undefined, + moduleIdentifier: /fixtures/esm/abc.js, + moduleName: ./fixtures/esm/abc.js, + resolvedModule: ./fixtures/esm/abc.js, + resolvedModuleId: undefined, + resolvedModuleIdentifier: /fixtures/esm/abc.js, + type: esm import specifier, + userRequest: ./a, + }, + ], + size: 37, + sizes: Object { + javascript: 37, + }, + type: module, + usedExports: Array [ + a, + ], + warnings: 0, + }, + Object { + assets: Array [], + buildTimeExecuted: false, + built: true, + cacheable: true, + cached: false, + chunks: Array [], + codeGenerated: false, + dependent: true, + depth: 1, + errors: 0, + failed: false, + filteredReasons: undefined, + id: undefined, + identifier: /fixtures/esm/b.js, + index: 2, + index2: 1, + issuer: /fixtures/esm/abc.js, + issuerId: undefined, + issuerName: ./fixtures/esm/abc.js, + issuerPath: Array [ + Object { + id: undefined, + identifier: /fixtures/esm/abc.js, + name: ./fixtures/esm/abc.js, + }, + ], + layer: undefined, + moduleType: javascript/auto, + name: ./fixtures/esm/b.js, + nameForCondition: /fixtures/esm/b.js, + optimizationBailout: Array [], + optional: false, + orphan: true, + postOrderIndex: 1, + preOrderIndex: 2, + providedExports: Array [ + b, + default, + ], + reasons: Array [ + Object { + active: false, + explanation: undefined, + loc: 2:0-20, + moduleId: undefined, + moduleIdentifier: /fixtures/esm/abc.js, + moduleName: ./fixtures/esm/abc.js, + resolvedModule: ./fixtures/esm/abc.js, + resolvedModuleId: undefined, + resolvedModuleIdentifier: /fixtures/esm/abc.js, + type: esm import, + userRequest: ./b, + }, + Object { + active: true, + explanation: undefined, + loc: 5:3-4, + moduleId: undefined, + moduleIdentifier: /fixtures/esm/abc.js, + moduleName: ./fixtures/esm/abc.js, + resolvedModule: ./fixtures/esm/abc.js, + resolvedModuleId: undefined, + resolvedModuleIdentifier: /fixtures/esm/abc.js, + type: esm import specifier, + userRequest: ./b, + }, + ], + size: 38, + sizes: Object { + javascript: 38, + }, + type: module, + usedExports: Array [ + default, + ], + warnings: 0, + }, + Object { + assets: Array [], + buildTimeExecuted: false, + built: true, + cacheable: true, + cached: false, + chunks: Array [], + codeGenerated: false, + dependent: true, + depth: 1, + errors: 0, + failed: false, + filteredReasons: undefined, + id: undefined, + identifier: /fixtures/esm/c.js, + index: 3, + index2: 2, + issuer: /fixtures/esm/abc.js, + issuerId: undefined, + issuerName: ./fixtures/esm/abc.js, + issuerPath: Array [ + Object { + id: undefined, + identifier: /fixtures/esm/abc.js, + name: ./fixtures/esm/abc.js, + }, + ], + layer: undefined, + moduleType: javascript/auto, + name: ./fixtures/esm/c.js, + nameForCondition: /fixtures/esm/c.js, + optimizationBailout: Array [], + optional: false, + orphan: true, + postOrderIndex: 2, + preOrderIndex: 3, + providedExports: Array [ + c, + default, + ], + reasons: Array [ + Object { + active: false, + explanation: undefined, + loc: 3:0-25, + moduleId: undefined, + moduleIdentifier: /fixtures/esm/abc.js, + moduleName: ./fixtures/esm/abc.js, + resolvedModule: ./fixtures/esm/abc.js, + resolvedModuleId: undefined, + resolvedModuleIdentifier: /fixtures/esm/abc.js, + type: esm import, + userRequest: ./c, + }, + Object { + active: true, + explanation: undefined, + loc: 5:6-7, + moduleId: undefined, + moduleIdentifier: /fixtures/esm/abc.js, + moduleName: ./fixtures/esm/abc.js, + resolvedModule: ./fixtures/esm/abc.js, + resolvedModuleId: undefined, + resolvedModuleIdentifier: /fixtures/esm/abc.js, + type: esm import specifier, + userRequest: ./c, + }, + ], + size: 37, + sizes: Object { + javascript: 37, + }, + type: module, + usedExports: true, + warnings: 0, + }, + ], + name: ./fixtures/esm/abc.js + 3 modules, + nameForCondition: /fixtures/esm/abc.js, + optimizationBailout: Array [], + optional: false, + orphan: false, + postOrderIndex: 3, + preOrderIndex: 0, + providedExports: Array [], + reasons: Array [ + Object { + active: true, + explanation: undefined, + loc: undefined, + moduleId: null, + resolvedModuleId: null, + type: entry, + userRequest: ./fixtures/esm/abc, + }, + ], + size: 192, + sizes: Object { + javascript: 192, + }, + type: module, + usedExports: Array [], + warnings: 0, + }, + ], + names: Array [ + main, + ], + origins: Array [ + Object { + loc: main, + module: , + moduleId: undefined, + moduleIdentifier: , + moduleName: , + request: ./fixtures/esm/abc, + }, + ], + parents: Array [], + reason: undefined, + rendered: true, + runtime: Array [ + main, + ], + siblings: Array [], + size: 192, + sizes: Object { + javascript: 192, + runtime: 647, + }, + type: chunk, + }, + ], + entrypoints: Object { + main: Object { + assets: Array [ + Object { + name: main.js, + size: 412, + }, + ], + assetsSize: 412, + auxiliaryAssets: Array [], + auxiliaryAssetsSize: 0, + childAssets: Object {}, + children: Object {}, + chunks: Array [ + 889, + ], + filteredAssets: 0, + isOverSizeLimit: false, + name: main, + }, + }, + errors: Array [], + errorsCount: 0, + filteredAssets: undefined, + filteredModules: undefined, + hash: 9ba974575f150ee8, + modules: Array [ + Object { + assets: Array [], + buildTimeExecuted: false, + built: true, + cacheable: true, + cached: false, + chunks: Array [], + codeGenerated: false, + dependent: undefined, + depth: 0, + errors: 0, + failed: false, + filteredReasons: undefined, + id: undefined, + identifier: /fixtures/esm/abc.js, + index: 0, + index2: 3, + issuer: undefined, + issuerId: undefined, + issuerName: undefined, + issuerPath: undefined, + layer: undefined, + moduleType: javascript/auto, + name: ./fixtures/esm/abc.js, + nameForCondition: /fixtures/esm/abc.js, + optimizationBailout: Array [ + ModuleConcatenation bailout: Module is an entry point, + ], + optional: false, + orphan: true, + postOrderIndex: 3, + preOrderIndex: 0, + providedExports: Array [], + reasons: Array [], + size: 80, + sizes: Object { + javascript: 80, + }, + type: module, + usedExports: Array [], + warnings: 0, + }, + Object { + assets: Array [], + buildTimeExecuted: false, + built: false, + cacheable: true, + cached: false, + chunks: Array [ + 889, + ], + codeGenerated: true, + dependent: undefined, + depth: 0, + errors: 0, + failed: false, + filteredModules: undefined, + filteredReasons: undefined, + id: 720, + identifier: /fixtures/esm/abc.js|0e47874493fdefd960142324ecb88ecc, + index: 0, + index2: 3, + issuer: undefined, + issuerId: undefined, + issuerName: undefined, + issuerPath: undefined, + layer: undefined, + moduleType: javascript/esm, + modules: Array [ + Object { + assets: Array [], + buildTimeExecuted: false, + built: true, + cacheable: true, + cached: false, + chunks: Array [], + codeGenerated: false, + dependent: undefined, + depth: 0, + errors: 0, + failed: false, + filteredReasons: undefined, + id: undefined, + identifier: /fixtures/esm/abc.js, + index: 0, + index2: 3, + issuer: undefined, + issuerId: undefined, + issuerName: undefined, + issuerPath: undefined, + layer: undefined, + moduleType: javascript/auto, + name: ./fixtures/esm/abc.js, + nameForCondition: /fixtures/esm/abc.js, + optimizationBailout: Array [ + ModuleConcatenation bailout: Module is an entry point, + ], + optional: false, + orphan: true, + postOrderIndex: 3, + preOrderIndex: 0, + providedExports: Array [], + reasons: Array [], + size: 80, + sizes: Object { + javascript: 80, + }, + type: module, + usedExports: Array [], + warnings: 0, + }, + Object { + assets: Array [], + buildTimeExecuted: false, + built: true, + cacheable: true, + cached: false, + chunks: Array [], + codeGenerated: false, + dependent: undefined, + depth: 1, + errors: 0, + failed: false, + filteredReasons: undefined, + id: undefined, + identifier: /fixtures/esm/a.js, + index: 1, + index2: 0, + issuer: /fixtures/esm/abc.js, + issuerId: undefined, + issuerName: ./fixtures/esm/abc.js, + issuerPath: Array [ + Object { + id: undefined, + identifier: /fixtures/esm/abc.js, + name: ./fixtures/esm/abc.js, + }, + ], + layer: undefined, + moduleType: javascript/auto, + name: ./fixtures/esm/a.js, + nameForCondition: /fixtures/esm/a.js, + optimizationBailout: Array [], + optional: false, + orphan: true, + postOrderIndex: 0, + preOrderIndex: 1, + providedExports: Array [ + a, + default, + ], + reasons: Array [ + Object { + active: false, + explanation: undefined, + loc: 1:0-24, + moduleId: undefined, + moduleIdentifier: /fixtures/esm/abc.js, + moduleName: ./fixtures/esm/abc.js, + resolvedModule: ./fixtures/esm/abc.js, + resolvedModuleId: undefined, + resolvedModuleIdentifier: /fixtures/esm/abc.js, + type: esm import, + userRequest: ./a, + }, + Object { + active: true, + explanation: undefined, + loc: 5:0-1, + moduleId: undefined, + moduleIdentifier: /fixtures/esm/abc.js, + moduleName: ./fixtures/esm/abc.js, + resolvedModule: ./fixtures/esm/abc.js, + resolvedModuleId: undefined, + resolvedModuleIdentifier: /fixtures/esm/abc.js, + type: esm import specifier, + userRequest: ./a, + }, + ], + size: 37, + sizes: Object { + javascript: 37, + }, + type: module, + usedExports: Array [ + a, + ], + warnings: 0, + }, + Object { + assets: Array [], + buildTimeExecuted: false, + built: true, + cacheable: true, + cached: false, + chunks: Array [], + codeGenerated: false, + dependent: undefined, + depth: 1, + errors: 0, + failed: false, + filteredReasons: undefined, + id: undefined, + identifier: /fixtures/esm/b.js, + index: 2, + index2: 1, + issuer: /fixtures/esm/abc.js, + issuerId: undefined, + issuerName: ./fixtures/esm/abc.js, + issuerPath: Array [ + Object { + id: undefined, + identifier: /fixtures/esm/abc.js, + name: ./fixtures/esm/abc.js, + }, + ], + layer: undefined, + moduleType: javascript/auto, + name: ./fixtures/esm/b.js, + nameForCondition: /fixtures/esm/b.js, + optimizationBailout: Array [], + optional: false, + orphan: true, + postOrderIndex: 1, + preOrderIndex: 2, + providedExports: Array [ + b, + default, + ], + reasons: Array [ + Object { + active: false, + explanation: undefined, + loc: 2:0-20, + moduleId: undefined, + moduleIdentifier: /fixtures/esm/abc.js, + moduleName: ./fixtures/esm/abc.js, + resolvedModule: ./fixtures/esm/abc.js, + resolvedModuleId: undefined, + resolvedModuleIdentifier: /fixtures/esm/abc.js, + type: esm import, + userRequest: ./b, + }, + Object { + active: true, + explanation: undefined, + loc: 5:3-4, + moduleId: undefined, + moduleIdentifier: /fixtures/esm/abc.js, + moduleName: ./fixtures/esm/abc.js, + resolvedModule: ./fixtures/esm/abc.js, + resolvedModuleId: undefined, + resolvedModuleIdentifier: /fixtures/esm/abc.js, + type: esm import specifier, + userRequest: ./b, + }, + ], + size: 38, + sizes: Object { + javascript: 38, + }, + type: module, + usedExports: Array [ + default, + ], + warnings: 0, + }, + Object { + assets: Array [], + buildTimeExecuted: false, + built: true, + cacheable: true, + cached: false, + chunks: Array [], + codeGenerated: false, + dependent: undefined, + depth: 1, + errors: 0, + failed: false, + filteredReasons: undefined, + id: undefined, + identifier: /fixtures/esm/c.js, + index: 3, + index2: 2, + issuer: /fixtures/esm/abc.js, + issuerId: undefined, + issuerName: ./fixtures/esm/abc.js, + issuerPath: Array [ + Object { + id: undefined, + identifier: /fixtures/esm/abc.js, + name: ./fixtures/esm/abc.js, + }, + ], + layer: undefined, + moduleType: javascript/auto, + name: ./fixtures/esm/c.js, + nameForCondition: /fixtures/esm/c.js, + optimizationBailout: Array [], + optional: false, + orphan: true, + postOrderIndex: 2, + preOrderIndex: 3, + providedExports: Array [ + c, + default, + ], + reasons: Array [ + Object { + active: false, + explanation: undefined, + loc: 3:0-25, + moduleId: undefined, + moduleIdentifier: /fixtures/esm/abc.js, + moduleName: ./fixtures/esm/abc.js, + resolvedModule: ./fixtures/esm/abc.js, + resolvedModuleId: undefined, + resolvedModuleIdentifier: /fixtures/esm/abc.js, + type: esm import, + userRequest: ./c, + }, + Object { + active: true, + explanation: undefined, + loc: 5:6-7, + moduleId: undefined, + moduleIdentifier: /fixtures/esm/abc.js, + moduleName: ./fixtures/esm/abc.js, + resolvedModule: ./fixtures/esm/abc.js, + resolvedModuleId: undefined, + resolvedModuleIdentifier: /fixtures/esm/abc.js, + type: esm import specifier, + userRequest: ./c, + }, + ], + size: 37, + sizes: Object { + javascript: 37, + }, + type: module, + usedExports: true, + warnings: 0, + }, + ], + name: ./fixtures/esm/abc.js + 3 modules, + nameForCondition: /fixtures/esm/abc.js, + optimizationBailout: Array [], + optional: false, + orphan: false, + postOrderIndex: 3, + preOrderIndex: 0, + providedExports: Array [], + reasons: Array [ + Object { + active: true, + explanation: undefined, + loc: undefined, + moduleId: null, + resolvedModuleId: null, + type: entry, + userRequest: ./fixtures/esm/abc, + }, + ], + size: 192, + sizes: Object { + javascript: 192, + }, + type: module, + usedExports: Array [], + warnings: 0, + }, + Object { + assets: Array [], + buildTimeExecuted: false, + built: true, + cacheable: true, + cached: false, + chunks: Array [], + codeGenerated: false, + dependent: undefined, + depth: 1, + errors: 0, + failed: false, + filteredReasons: undefined, + id: undefined, + identifier: /fixtures/esm/a.js, + index: 1, + index2: 0, + issuer: /fixtures/esm/abc.js, + issuerId: undefined, + issuerName: ./fixtures/esm/abc.js, + issuerPath: Array [ + Object { + id: undefined, + identifier: /fixtures/esm/abc.js, + name: ./fixtures/esm/abc.js, + }, + ], + layer: undefined, + moduleType: javascript/auto, + name: ./fixtures/esm/a.js, + nameForCondition: /fixtures/esm/a.js, + optimizationBailout: Array [], + optional: false, + orphan: true, + postOrderIndex: 0, + preOrderIndex: 1, + providedExports: Array [ + a, + default, + ], + reasons: Array [ + Object { + active: false, + explanation: undefined, + loc: 1:0-24, + moduleId: undefined, + moduleIdentifier: /fixtures/esm/abc.js, + moduleName: ./fixtures/esm/abc.js, + resolvedModule: ./fixtures/esm/abc.js, + resolvedModuleId: undefined, + resolvedModuleIdentifier: /fixtures/esm/abc.js, + type: esm import, + userRequest: ./a, + }, + Object { + active: true, + explanation: undefined, + loc: 5:0-1, + moduleId: undefined, + moduleIdentifier: /fixtures/esm/abc.js, + moduleName: ./fixtures/esm/abc.js, + resolvedModule: ./fixtures/esm/abc.js, + resolvedModuleId: undefined, + resolvedModuleIdentifier: /fixtures/esm/abc.js, + type: esm import specifier, + userRequest: ./a, + }, + ], + size: 37, + sizes: Object { + javascript: 37, + }, + type: module, + usedExports: Array [ + a, + ], + warnings: 0, + }, + Object { + assets: Array [], + buildTimeExecuted: false, + built: true, + cacheable: true, + cached: false, + chunks: Array [], + codeGenerated: false, + dependent: undefined, + depth: 1, + errors: 0, + failed: false, + filteredReasons: undefined, + id: undefined, + identifier: /fixtures/esm/b.js, + index: 2, + index2: 1, + issuer: /fixtures/esm/abc.js, + issuerId: undefined, + issuerName: ./fixtures/esm/abc.js, + issuerPath: Array [ + Object { + id: undefined, + identifier: /fixtures/esm/abc.js, + name: ./fixtures/esm/abc.js, + }, + ], + layer: undefined, + moduleType: javascript/auto, + name: ./fixtures/esm/b.js, + nameForCondition: /fixtures/esm/b.js, + optimizationBailout: Array [], + optional: false, + orphan: true, + postOrderIndex: 1, + preOrderIndex: 2, + providedExports: Array [ + b, + default, + ], + reasons: Array [ + Object { + active: false, + explanation: undefined, + loc: 2:0-20, + moduleId: undefined, + moduleIdentifier: /fixtures/esm/abc.js, + moduleName: ./fixtures/esm/abc.js, + resolvedModule: ./fixtures/esm/abc.js, + resolvedModuleId: undefined, + resolvedModuleIdentifier: /fixtures/esm/abc.js, + type: esm import, + userRequest: ./b, + }, + Object { + active: true, + explanation: undefined, + loc: 5:3-4, + moduleId: undefined, + moduleIdentifier: /fixtures/esm/abc.js, + moduleName: ./fixtures/esm/abc.js, + resolvedModule: ./fixtures/esm/abc.js, + resolvedModuleId: undefined, + resolvedModuleIdentifier: /fixtures/esm/abc.js, + type: esm import specifier, + userRequest: ./b, + }, + ], + size: 38, + sizes: Object { + javascript: 38, + }, + type: module, + usedExports: Array [ + default, + ], + warnings: 0, + }, + Object { + assets: Array [], + buildTimeExecuted: false, + built: true, + cacheable: true, + cached: false, + chunks: Array [], + codeGenerated: false, + dependent: undefined, + depth: 1, + errors: 0, + failed: false, + filteredReasons: undefined, + id: undefined, + identifier: /fixtures/esm/c.js, + index: 3, + index2: 2, + issuer: /fixtures/esm/abc.js, + issuerId: undefined, + issuerName: ./fixtures/esm/abc.js, + issuerPath: Array [ + Object { + id: undefined, + identifier: /fixtures/esm/abc.js, + name: ./fixtures/esm/abc.js, + }, + ], + layer: undefined, + moduleType: javascript/auto, + name: ./fixtures/esm/c.js, + nameForCondition: /fixtures/esm/c.js, + optimizationBailout: Array [], + optional: false, + orphan: true, + postOrderIndex: 2, + preOrderIndex: 3, + providedExports: Array [ + c, + default, + ], + reasons: Array [ + Object { + active: false, + explanation: undefined, + loc: 3:0-25, + moduleId: undefined, + moduleIdentifier: /fixtures/esm/abc.js, + moduleName: ./fixtures/esm/abc.js, + resolvedModule: ./fixtures/esm/abc.js, + resolvedModuleId: undefined, + resolvedModuleIdentifier: /fixtures/esm/abc.js, + type: esm import, + userRequest: ./c, + }, + Object { + active: true, + explanation: undefined, + loc: 5:6-7, + moduleId: undefined, + moduleIdentifier: /fixtures/esm/abc.js, + moduleName: ./fixtures/esm/abc.js, + resolvedModule: ./fixtures/esm/abc.js, + resolvedModuleId: undefined, + resolvedModuleIdentifier: /fixtures/esm/abc.js, + type: esm import specifier, + userRequest: ./c, + }, + ], + size: 37, + sizes: Object { + javascript: 37, + }, + type: module, + usedExports: true, + warnings: 0, + }, + Object { + assets: Array [], + buildTimeExecuted: false, + built: false, + cacheable: true, + cached: false, + chunks: Array [ + 889, + ], + codeGenerated: true, + dependent: false, + depth: undefined, + errors: 0, + failed: false, + filteredReasons: undefined, + id: , + identifier: webpack/runtime/define_property_getters, + index: undefined, + index2: undefined, + issuer: undefined, + issuerId: undefined, + issuerName: undefined, + issuerPath: undefined, + layer: undefined, + moduleType: runtime, + name: webpack/runtime/define_property_getters, + nameForCondition: undefined, + optimizationBailout: Array [], + optional: false, + orphan: false, + postOrderIndex: undefined, + preOrderIndex: undefined, + providedExports: Array [], + reasons: Array [], + size: 285, + sizes: Object { + runtime: 285, + }, + type: module, + usedExports: null, + warnings: 0, + }, + Object { + assets: Array [], + buildTimeExecuted: false, + built: false, + cacheable: true, + cached: false, + chunks: Array [ + 889, + ], + codeGenerated: true, + dependent: false, + depth: undefined, + errors: 0, + failed: false, + filteredReasons: undefined, + id: , + identifier: webpack/runtime/has_own_property, + index: undefined, + index2: undefined, + issuer: undefined, + issuerId: undefined, + issuerName: undefined, + issuerPath: undefined, + layer: undefined, + moduleType: runtime, + name: webpack/runtime/has_own_property, + nameForCondition: undefined, + optimizationBailout: Array [], + optional: false, + orphan: false, + postOrderIndex: undefined, + preOrderIndex: undefined, + providedExports: Array [], + reasons: Array [], + size: 88, + sizes: Object { + runtime: 88, + }, + type: module, + usedExports: null, + warnings: 0, + }, + Object { + assets: Array [], + buildTimeExecuted: false, + built: false, + cacheable: true, + cached: false, + chunks: Array [ + 889, + ], + codeGenerated: true, + dependent: false, + depth: undefined, + errors: 0, + failed: false, + filteredReasons: undefined, + id: , + identifier: webpack/runtime/make_namespace_object, + index: undefined, + index2: undefined, + issuer: undefined, + issuerId: undefined, + issuerName: undefined, + issuerPath: undefined, + layer: undefined, + moduleType: runtime, + name: webpack/runtime/make_namespace_object, + nameForCondition: undefined, + optimizationBailout: Array [], + optional: false, + orphan: false, + postOrderIndex: undefined, + preOrderIndex: undefined, + providedExports: Array [], + reasons: Array [], + size: 274, + sizes: Object { + runtime: 274, + }, + type: module, + usedExports: null, + warnings: 0, + }, + ], + namedChunkGroups: Object { + main: Object { + assets: Array [ + Object { + name: main.js, + size: 412, + }, + ], + assetsSize: 412, + auxiliaryAssets: Array [], + auxiliaryAssetsSize: 0, + childAssets: Object {}, + children: Object {}, + chunks: Array [ + 889, + ], + filteredAssets: 0, + isOverSizeLimit: false, + name: main, + }, + }, + outputPath: /dist, + publicPath: auto, + warnings: Array [], + warningsCount: 0, + } + `); expect(stats?.toString(statsOptions)).toMatchInlineSnapshot(` asset main.js 412 bytes [emitted] (name: main) orphan modules 192 bytes [orphan] 4 modules From 78608f63f144154d4ea3091989cbd45f0806efaa Mon Sep 17 00:00:00 2001 From: CPunisher <1343316114@qq.com> Date: Thu, 30 Oct 2025 14:44:23 +0800 Subject: [PATCH 21/22] Bump swc plugin --- pnpm-lock.yaml | 10 +++++----- tests/rspack-test/package.json | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c0dbc150fb99..5ed0180c993e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -705,8 +705,8 @@ importers: specifier: 0.5.17 version: 0.5.17 '@swc/plugin-remove-console': - specifier: ^9.1.0 - version: 9.1.0 + specifier: ^10.0.0 + version: 10.0.0 '@types/babel__generator': specifier: 7.27.0 version: 7.27.0 @@ -3369,8 +3369,8 @@ packages: '@swc/helpers@0.5.17': resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} - '@swc/plugin-remove-console@9.1.0': - resolution: {integrity: sha512-XSyKs7d2+VZaQYl6zAs7tron+jK0yp+RfVA986Un0ZjyxQ6Nq/rMFGlhppZKMDqpAKQTGdYvwjb+hxXU1OoVyg==} + '@swc/plugin-remove-console@10.0.0': + resolution: {integrity: sha512-9jXO5AlMm+EFOdq8iRmDhZ5pdNawLwdCX8a9P0bHqZVi6AkWkDMNaBr51/0VBKvruMxJZUwQFtYnx0xAJOSUEw==} '@swc/types@0.1.25': resolution: {integrity: sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==} @@ -11344,7 +11344,7 @@ snapshots: dependencies: tslib: 2.8.1 - '@swc/plugin-remove-console@9.1.0': + '@swc/plugin-remove-console@10.0.0': dependencies: '@swc/counter': 0.1.3 diff --git a/tests/rspack-test/package.json b/tests/rspack-test/package.json index e7902e1f7953..5a485b33f678 100644 --- a/tests/rspack-test/package.json +++ b/tests/rspack-test/package.json @@ -22,7 +22,7 @@ "@rspack/test-tools": "workspace:*", "@rstest/core": "^0.6.1", "@swc/helpers": "0.5.17", - "@swc/plugin-remove-console": "^9.1.0", + "@swc/plugin-remove-console": "^10.0.0", "@types/babel__generator": "7.27.0", "@types/babel__traverse": "7.28.0", "@types/fs-extra": "11.0.4", From 3bf7f7f652d8f94713e32916b9f2e07e246f45e7 Mon Sep 17 00:00:00 2001 From: CPunisher <1343316114@qq.com> Date: Thu, 30 Oct 2025 15:32:58 +0800 Subject: [PATCH 22/22] Update enum string combination --- crates/swc_plugin_ts_collector/src/enums.rs | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/crates/swc_plugin_ts_collector/src/enums.rs b/crates/swc_plugin_ts_collector/src/enums.rs index 696951013d0f..20167c0a4ab8 100644 --- a/crates/swc_plugin_ts_collector/src/enums.rs +++ b/crates/swc_plugin_ts_collector/src/enums.rs @@ -2,7 +2,7 @@ use std::borrow::Borrow; use rustc_hash::{FxHashMap, FxHashSet}; use swc_core::{ - atoms::{Atom, Wtf8Atom}, + atoms::{Atom, Wtf8Atom, wtf8::Wtf8Buf}, common::SyntaxContext, ecma::{ ast::{ @@ -195,17 +195,22 @@ impl<'a> ExportedEnumCollector<'a> { EnumMemberValue::Number(value) } (EnumMemberValue::String(left), EnumMemberValue::String(right), op!(bin, "+")) => { - EnumMemberValue::String(format!("{left:?}{right:?}").into()) + let mut res = Wtf8Buf::new(); + res.push_wtf8(left.as_wtf8()); + res.push_wtf8(right.as_wtf8()); + EnumMemberValue::String(Wtf8Atom::new(res)) } (EnumMemberValue::Number(left), EnumMemberValue::String(right), op!(bin, "+")) => { - let left = left.to_js_string(); - - EnumMemberValue::String(format!("{left}{right:?}").into()) + let mut res = Wtf8Buf::new(); + res.push_str(left.to_js_string().as_str()); + res.push_wtf8(right.as_wtf8()); + EnumMemberValue::String(Wtf8Atom::new(res)) } (EnumMemberValue::String(left), EnumMemberValue::Number(right), op!(bin, "+")) => { - let right = right.to_js_string(); - - EnumMemberValue::String(format!("{left:?}{right}").into()) + let mut res = Wtf8Buf::new(); + res.push_wtf8(left.as_wtf8()); + res.push_str(right.to_js_string().as_str()); + EnumMemberValue::String(Wtf8Atom::new(res)) } _ => EnumMemberValue::Unknown, }