From b1bc4dc3183a867b8ba3bd675941118eba3dd587 Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Fri, 29 Apr 2022 22:45:36 +0200 Subject: [PATCH 01/24] Bump swc --- Cargo.lock | 238 ++++++++++----------- packages/transformers/js/core/Cargo.toml | 4 +- packages/transformers/js/core/src/hoist.rs | 5 +- packages/transformers/js/core/src/lib.rs | 10 +- 4 files changed, 129 insertions(+), 128 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2c41d14697f..fc690edc8df 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -56,9 +56,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.56" +version = "1.0.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4361135be9122e0870de935d7c439aef945b9f9ddd4199a553b5270b49c82a27" +checksum = "08f9b8508dccb7687a1d6c4ce66b2b0ecef467c94667de27d8d7fe1f8d2a9cdc" [[package]] name = "arrayvec" @@ -150,9 +150,9 @@ dependencies = [ [[package]] name = "browserslist-rs" -version = "0.9.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0f43be8e0fc9203f6ed7731d2a9a6bf5924cb78907e67e1fe9133617be402be" +checksum = "e55d9cadf66efd56338797ada06140423bd87f290eac200027265d79d621a266" dependencies = [ "ahash", "anyhow", @@ -430,23 +430,13 @@ dependencies = [ [[package]] name = "dashmap" -version = "4.0.2" +version = "5.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e77a43b28d0668df09411cb0bc9a8c2adc40f9a048afe863e05fd43251e8e39c" +checksum = "084c61a88f94d7557441d01e89fc3800b0b80658462b05aa7b55dfae069da09b" dependencies = [ "cfg-if 1.0.0", - "num_cpus", -] - -[[package]] -name = "dashmap" -version = "5.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8858831f7781322e539ea39e72449c46b059638250c14344fec8d0aa6e539c" -dependencies = [ - "cfg-if 1.0.0", - "num_cpus", - "parking_lot", + "hashbrown 0.12.0", + "lock_api", ] [[package]] @@ -519,9 +509,9 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "975ccf83d8d9d0d84682850a38c8169027be83368805971cc4f238c2b245bc98" +checksum = "c0408e2626025178a6a7f7ffc05a25bc47103229f19c113755de7bf63816290c" dependencies = [ "cfg-if 1.0.0", "libc", @@ -596,6 +586,15 @@ version = "0.11.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +[[package]] +name = "hashbrown" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c21d40587b92fa6a6c6e3c1bdbf87d75511db5672f9c93175574b3a00df1758" +dependencies = [ + "ahash", +] + [[package]] name = "hermit-abi" version = "0.1.19" @@ -650,7 +649,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0f647032dfaa1f8b6dc29bd3edb7bbef4861b8b8007ebb118d6db284fd59f6ee" dependencies = [ "autocfg", - "hashbrown", + "hashbrown 0.11.2", "rayon", ] @@ -820,9 +819,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.122" +version = "0.2.125" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec647867e2bf0772e28c8bcde4f0d19a9216916e890543b5a03ed8ef27b8f259" +checksum = "5916d2ae698f6de9bfb891ad7a8d65c09d232dc58cc4ac433c7da3b2fd84bc2b" [[package]] name = "libdeflate-sys" @@ -844,9 +843,9 @@ dependencies = [ [[package]] name = "libmimalloc-sys" -version = "0.1.24" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7705fc40f6ed493f73584abbb324e74f96b358ff60dfe5659a0f8fc12c590a69" +checksum = "11ca136052550448f55df7898c6dbe651c6b574fe38a0d9ea687a9f8088a2e2c" dependencies = [ "cc", ] @@ -893,9 +892,9 @@ dependencies = [ [[package]] name = "mimalloc" -version = "0.1.28" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0dfa131390c2f6bdb3242f65ff271fcdaca5ff7b6c08f28398be7f2280e3926" +checksum = "2f64ad83c969af2e732e907564deb0d0ed393cec4af80776f77dd77a1a427698" dependencies = [ "libmimalloc-sys", ] @@ -958,9 +957,9 @@ checksum = "ebd4419172727423cf30351406c54f6cc1b354a2cfb4f1dba3e6cd07f6d5522b" [[package]] name = "napi-derive" -version = "2.3.2" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "048a9a6127a77b541184324c622ddcbf15ca0af1557076a0993b304932347272" +checksum = "35d20a0de501d6ca0b007d008fefbdc875bc8947b7ee85964cff4a975c83fafb" dependencies = [ "convert_case", "napi-derive-backend", @@ -971,9 +970,9 @@ dependencies = [ [[package]] name = "napi-derive-backend" -version = "1.0.29" +version = "1.0.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c4e5660e8013eb5027e6d8ece13c2aaec9674b2332c503e658bfff8c90b4acb" +checksum = "11a711157fd22437c2997896210abd4c5707f5e2d9f48de91cb6bb02b4a6cb6c" dependencies = [ "convert_case", "once_cell", @@ -1037,9 +1036,9 @@ dependencies = [ [[package]] name = "num-integer" -version = "0.1.44" +version = "0.1.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" dependencies = [ "autocfg", "num-traits", @@ -1047,9 +1046,9 @@ dependencies = [ [[package]] name = "num-iter" -version = "0.1.42" +version = "0.1.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2021c8337a54d21aca0d59a92577a029af9431cb59b909b03252b9c164fad59" +checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" dependencies = [ "autocfg", "num-integer", @@ -1315,9 +1314,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" [[package]] name = "pmutil" @@ -1356,14 +1355,14 @@ checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" [[package]] name = "preset_env_base" -version = "0.2.1" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44b10336bf81e96a223c487607acb08a1407d3e208a65e477190e3fe51fc5dea" +checksum = "3ef989b02dabee8f04ce1048e423a55b2a71a1ba68b9df31266170e6220b61ad" dependencies = [ "ahash", "anyhow", "browserslist-rs", - "dashmap 5.2.0", + "dashmap", "from_variant", "once_cell", "semver 1.0.7", @@ -1388,9 +1387,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.17" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "632d02bff7f874a36f33ea8bb416cd484b90cc66c1194b1a1110d067a7013f58" +checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" dependencies = [ "proc-macro2", ] @@ -1427,9 +1426,9 @@ dependencies = [ [[package]] name = "rayon" -version = "1.5.1" +version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90" +checksum = "fd249e82c21598a9a426a4e00dd7adc1d640b22445ec8545feef801d1a74c221" dependencies = [ "autocfg", "crossbeam-deque", @@ -1439,14 +1438,13 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.9.1" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e" +checksum = "9f51245e1e62e1f1629cbfec37b5793bbabcaeb90f30e94d2ba03564687353e4" dependencies = [ "crossbeam-channel", "crossbeam-deque", "crossbeam-utils", - "lazy_static", "num_cpus", ] @@ -1771,7 +1769,7 @@ checksum = "84fed4a980e12c737171a7b17c5e0a2f4272899266fa0632ea4e31264ebdfdb5" dependencies = [ "ahash", "anyhow", - "dashmap 5.2.0", + "dashmap", "once_cell", "regex", "serde", @@ -1780,9 +1778,9 @@ dependencies = [ [[package]] name = "swc_common" -version = "0.17.21" +version = "0.17.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daac2e6fea713c68d37b29ea5fd6342213ca2915a868f38a3fd4aa6750a9b9f8" +checksum = "766ad22c1cb8586c038ccba7371a4903a6074b53ee4ba8980a52f502413f120e" dependencies = [ "ahash", "ast_node", @@ -1809,9 +1807,9 @@ dependencies = [ [[package]] name = "swc_ecma_ast" -version = "0.75.0" +version = "0.76.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72961898fbe56591997e667a1ec6a268383582810351c279a15ec710b6177d33" +checksum = "87eb325cc3e9bcf93dd9fcf14586e56fc502a5c7a9cc80e36c00bfd7c833b189" dependencies = [ "is-macro", "num-bigint", @@ -1824,9 +1822,9 @@ dependencies = [ [[package]] name = "swc_ecma_codegen" -version = "0.103.0" +version = "0.105.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99ca430d8ea2c8791d1341c4035431c90b87330e39479b4a6dabb4fded124e30" +checksum = "ae9844b5e0f24dd035de4993d3cc9dd9a7d2913cbedf81fca5be4b67e79f2f4a" dependencies = [ "bitflags", "memchr", @@ -1856,16 +1854,17 @@ dependencies = [ [[package]] name = "swc_ecma_loader" -version = "0.29.0" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9ab69df5d4de425833e02de111f14b5544b39ad9c9b82c97e4835fc55c8f1b6" +checksum = "e719f646201c51964a2c7b2a3dd79fadb563fc6a72454a7bc093d18c4aad44b0" dependencies = [ "ahash", "anyhow", - "dashmap 4.0.2", + "dashmap", "normpath", "once_cell", "path-clean", + "pathdiff", "serde", "serde_json", "swc_common", @@ -1874,9 +1873,9 @@ dependencies = [ [[package]] name = "swc_ecma_parser" -version = "0.100.2" +version = "0.102.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "890d967031e3e7330cd7892f27d826b7b4f37c7caa19db85c78a0862e1fe3974" +checksum = "aac5c37aa7bf93679d30d9d787ff985fca528fe4b15cf40321389a506aec10b3" dependencies = [ "either", "enum_kind", @@ -1894,13 +1893,13 @@ dependencies = [ [[package]] name = "swc_ecma_preset_env" -version = "0.117.0" +version = "0.123.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a37c95c8e7e47a1fd6bf09ff2744fe55570235e8aba2c9373200213ec2ce25" +checksum = "2ecd6f2e476981e127706792bf6f6d086bab33c6156a473a1fb7eb36931308ba" dependencies = [ "ahash", "anyhow", - "dashmap 5.2.0", + "dashmap", "indexmap", "once_cell", "preset_env_base", @@ -1919,9 +1918,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms" -version = "0.142.0" +version = "0.148.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f20e5e2d8ab843fa0454e049f73f6d99c444a8c0e2320f77028361ab75e2d18e" +checksum = "daddb05bfcf7090a838ecb5a3a21051940f4fe8ef445dc87759345f0b63d1143" dependencies = [ "swc_atoms", "swc_common", @@ -1939,13 +1938,14 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_base" -version = "0.75.0" +version = "0.80.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "404c6ea7ca61ceb2ce1f4ed448d1436a38c31b8c572850f04541c0229c966bbf" +checksum = "d77f99ead1bb808af77e0350dbf02bffa68e900f04621b7883e614b04721703c" dependencies = [ "better_scoped_tls", "once_cell", "phf", + "rustc-hash", "serde", "smallvec", "swc_atoms", @@ -1959,9 +1959,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_classes" -version = "0.63.0" +version = "0.68.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "503f2f6bd0f9e6363a93406753bf64675163423774256a267c85a5d9b5b44b08" +checksum = "ec137c540f3a9b74338ba5ff895cd3330a3d093503b3f0a4a6cbfc4cd7b83216" dependencies = [ "swc_atoms", "swc_common", @@ -1973,9 +1973,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_compat" -version = "0.89.0" +version = "0.94.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d234c84cee8aeeda2ec60087f65acd420e2475bb334a64bbf988b538c21b31d" +checksum = "fc8d2bf1e5a1c48c6958310e51e8958e0f692333b93a755cde4b7f4c65b1e7be" dependencies = [ "ahash", "arrayvec", @@ -2012,9 +2012,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_module" -version = "0.102.0" +version = "0.107.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c340a0228a9a49240d97a4a4e99a0a61e6613b29b427cc09a60f6ad4dcbf728" +checksum = "c4e69346f9341d63b942d699ab9f4bbfd5be431ac00f314cbbc967de0f6777bb" dependencies = [ "Inflector", "ahash", @@ -2036,12 +2036,12 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_optimization" -version = "0.112.1" +version = "0.118.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af43d7d92e0bb8ba60d64ce8a7edcab7738f7e858b8e42814fca5c133ba17c19" +checksum = "adbef528d0642b07670c193ba2af50ec0da1635e02d9e03aa3004b7793981d41" dependencies = [ "ahash", - "dashmap 5.2.0", + "dashmap", "indexmap", "once_cell", "serde_json", @@ -2058,9 +2058,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_proposal" -version = "0.97.0" +version = "0.102.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93d08411e517736b0167f3c9784fe9b98cc09308ae12e6072abd2bb2c2236da2" +checksum = "ccc254c4c98d88e39f2669e73d6d7add46ff5d26ea65a83cc43d418fbd7b3b47" dependencies = [ "either", "serde", @@ -2077,13 +2077,13 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_react" -version = "0.104.0" +version = "0.109.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43cda44270dfcc95d61582981baddaf53d96c5233ea7384e81cd6e462816c58e" +checksum = "27fe20ec2cb77b66708a85a0ac5dba7686ef1fefc635c6488f8a67f53c962f87" dependencies = [ "ahash", "base64 0.13.0", - "dashmap 5.2.0", + "dashmap", "indexmap", "once_cell", "regex", @@ -2102,9 +2102,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_typescript" -version = "0.107.0" +version = "0.112.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a09397169ed7ce0751a82cb71655f3a4a1fb00d8863aabd5cca9b46eff3dd5f2" +checksum = "3546be985a8733f7687e0a95ec65f2254cda00eb7f1eb66d0442262054a80735" dependencies = [ "serde", "swc_atoms", @@ -2118,9 +2118,9 @@ dependencies = [ [[package]] name = "swc_ecma_utils" -version = "0.79.1" +version = "0.82.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44ee8d60b9977f58214af7102dc30855a6754e742afe6d6e26e5bf13883c7b91" +checksum = "cbc14fb44a1cf39601f5495c03726accbf0c143a4476a8b80c4cd83cfd01d384" dependencies = [ "indexmap", "once_cell", @@ -2133,9 +2133,9 @@ dependencies = [ [[package]] name = "swc_ecma_visit" -version = "0.61.0" +version = "0.62.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5ea00a52ba2b971955c62275696d5c59f3cf0cd06db74a66dec378ec9843c78" +checksum = "d97c42c1e769cd4a442fbe91d076e8600fffae6139a90582db78da27613a033e" dependencies = [ "num-bigint", "swc_atoms", @@ -2147,9 +2147,9 @@ dependencies = [ [[package]] name = "swc_ecmascript" -version = "0.143.0" +version = "0.151.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebda93aa6422956c184a9eb5fdb0f0f0ff433169fa15e55ef445e5ad0b5e0abe" +checksum = "a06d815c94370a90a02d9a8b34570983f63e7019e2f797ed50b21082b04d5c90" dependencies = [ "swc_ecma_ast", "swc_ecma_codegen", @@ -2221,9 +2221,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.91" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b683b2b825c8eef438b77c36a06dc262294da3d5a5813fac20da149241dcd44d" +checksum = "7ff7c592601f11445996a06f8ad0c27f094a58857c2f89e97974ab9235b92c52" dependencies = [ "proc-macro2", "quote", @@ -2289,9 +2289,9 @@ dependencies = [ [[package]] name = "tinyvec" -version = "1.5.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" dependencies = [ "tinyvec_macros", ] @@ -2304,9 +2304,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tracing" -version = "0.1.33" +version = "0.1.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80b9fa4360528139bc96100c160b7ae879f5567f49f1782b0b02035b0358ebf3" +checksum = "5d0ecdcb44a79f0fe9844f0c4f33a342cbcbb5117de8001e6ba0dc2351327d09" dependencies = [ "cfg-if 1.0.0", "pin-project-lite", @@ -2316,9 +2316,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.20" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e65ce065b4b5c53e73bb28912318cb8c9e9ad3921f1d669eb0e68b4c8143a2b" +checksum = "cc6b8ad3567499f98a1db7a752b07a7c8c7c7c34c332ec00effb2b0027974b7c" dependencies = [ "proc-macro2", "quote", @@ -2327,9 +2327,9 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.24" +version = "0.1.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90442985ee2f57c9e1b548ee72ae842f4a9a20e3f417cc38dbc5dc684d9bb4ee" +checksum = "f54c8ca710e81886d498c2fd3331b56c93aa248d49de2222ad2742247c60072f" dependencies = [ "lazy_static", ] @@ -2354,9 +2354,9 @@ checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" [[package]] name = "unicode-bidi" -version = "0.3.7" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f" +checksum = "099b7128301d285f79ddd55b9a83d5e6b9e97c92e0ea0daebee7263e932de992" [[package]] name = "unicode-id" @@ -2534,15 +2534,15 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" -version = "0.36.0" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36e5436ab30c3d1422272fc6f7b5e7d46e93c94bfca83be808404df9ea5bea76" +checksum = "e53b97a83176b369b0eb2fd8158d4ae215357d02df9d40c1e1bf1879c5482c80" dependencies = [ - "windows_aarch64_msvc 0.36.0", - "windows_i686_gnu 0.36.0", - "windows_i686_msvc 0.36.0", - "windows_x86_64_gnu 0.36.0", - "windows_x86_64_msvc 0.36.0", + "windows_aarch64_msvc 0.36.1", + "windows_i686_gnu 0.36.1", + "windows_i686_msvc 0.36.1", + "windows_x86_64_gnu 0.36.1", + "windows_x86_64_msvc 0.36.1", ] [[package]] @@ -2566,9 +2566,9 @@ checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" [[package]] name = "windows_aarch64_msvc" -version = "0.36.0" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bee8cd327bbef19bf86d30bd66379f57905166d3103b0e2eff4a491b85e421d" +checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" [[package]] name = "windows_i686_gnu" @@ -2578,9 +2578,9 @@ checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" [[package]] name = "windows_i686_gnu" -version = "0.36.0" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b759cc6e3d97970c98cffe461739e89ab6d424ba5e2e7d3b9b05a2d56116057" +checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" [[package]] name = "windows_i686_msvc" @@ -2590,9 +2590,9 @@ checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" [[package]] name = "windows_i686_msvc" -version = "0.36.0" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a0cee91bff283876711f91e7db0aa234438bc663a9d8304596df00b0a6fd6ef" +checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" [[package]] name = "windows_x86_64_gnu" @@ -2602,9 +2602,9 @@ checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" [[package]] name = "windows_x86_64_gnu" -version = "0.36.0" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51e8c6f778aa4383b033ff785191aea0f1ebeceedc160c2c92f944ef7e191476" +checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" [[package]] name = "windows_x86_64_msvc" @@ -2614,15 +2614,15 @@ checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" [[package]] name = "windows_x86_64_msvc" -version = "0.36.0" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1dd6a8b0b1ea4331e4db47192729fce42ac8a110fd22bb3abac555d8d7700f29" +checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" [[package]] name = "xxhash-rust" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a16b7b403377d61184bb601d8349a4ff2c4cec08a305d004f710b7eaafef24" +checksum = "074914ea4eec286eb8d1fd745768504f420a1f7b7919185682a4a267bed7d2e7" [[package]] name = "zopfli" diff --git a/packages/transformers/js/core/Cargo.toml b/packages/transformers/js/core/Cargo.toml index 8e76f2ea6b0..4da3e3cbdd6 100644 --- a/packages/transformers/js/core/Cargo.toml +++ b/packages/transformers/js/core/Cargo.toml @@ -8,8 +8,8 @@ edition = "2018" crate-type = ["rlib"] [dependencies] -swc_ecmascript = { version = "0.143.0", features = ["parser", "transforms", "module", "optimization", "react", "typescript", "utils", "visit", "codegen", "utils", "preset_env"] } -swc_common = { version = "0.17.21", features = ["tty-emitter", "sourcemap"] } +swc_ecmascript = { version = "0.151.0", features = ["parser", "transforms", "module", "optimization", "react", "typescript", "utils", "visit", "codegen", "utils", "preset_env"] } +swc_common = { version = "0.17.25", features = ["tty-emitter", "sourcemap"] } swc_atoms = "0.2.11" indoc = "1.0.3" serde = "1.0.123" diff --git a/packages/transformers/js/core/src/hoist.rs b/packages/transformers/js/core/src/hoist.rs index 59f7f10101c..c1ed352733c 100644 --- a/packages/transformers/js/core/src/hoist.rs +++ b/packages/transformers/js/core/src/hoist.rs @@ -2097,7 +2097,7 @@ mod tests { use swc_ecmascript::codegen::text_writer::JsWriter; use swc_ecmascript::parser::lexer::Lexer; use swc_ecmascript::parser::{Parser, StringInput}; - use swc_ecmascript::transforms::resolver_with_mark; + use swc_ecmascript::transforms::resolver; extern crate indoc; use self::indoc::indoc; @@ -2119,8 +2119,9 @@ mod tests { swc_ecmascript::transforms::helpers::HELPERS.set( &swc_ecmascript::transforms::helpers::Helpers::new(false), || { + let unresolved_mark = Mark::fresh(Mark::root()); let global_mark = Mark::fresh(Mark::root()); - let module = module.fold_with(&mut resolver_with_mark(global_mark)); + let module = module.fold_with(&mut resolver(unresolved_mark, global_mark, false)); let mut collect = Collect::new( source_map.clone(), diff --git a/packages/transformers/js/core/src/lib.rs b/packages/transformers/js/core/src/lib.rs index 33ca1165251..e622968dfea 100644 --- a/packages/transformers/js/core/src/lib.rs +++ b/packages/transformers/js/core/src/lib.rs @@ -37,7 +37,7 @@ use swc_ecmascript::parser::lexer::Lexer; use swc_ecmascript::parser::{EsConfig, PResult, Parser, StringInput, Syntax, TsConfig}; use swc_ecmascript::preset_env::{preset_env, Mode::Entry, Targets, Version, Versions}; use swc_ecmascript::transforms::fixer::paren_remover; -use swc_ecmascript::transforms::resolver::resolver_with_mark; +use swc_ecmascript::transforms::resolver; use swc_ecmascript::transforms::{ compat::reserved_words::reserved_words, fixer, helpers, hygiene, optimization::simplify::dead_branch_remover, optimization::simplify::expr_simplifier, @@ -227,6 +227,7 @@ pub fn transform(config: Config) -> Result { } let global_mark = Mark::fresh(Mark::root()); + let unresolved_mark = Mark::fresh(Mark::root()); let ignore_mark = Mark::fresh(Mark::root()); module = { let mut passes = chain!( @@ -256,7 +257,7 @@ pub fn transform(config: Config) -> Result { typescript::strip(global_mark), config.is_type_script && !config.is_jsx ), - resolver_with_mark(global_mark), + resolver(unresolved_mark, global_mark, config.is_type_script), Optional::new( react::react( source_map.clone(), @@ -313,8 +314,8 @@ pub fn transform(config: Config) -> Result { paren_remover(Some(&comments)), // Simplify expressions and remove dead branches so that we // don't include dependencies inside conditionals that are always false. - expr_simplifier(Default::default()), - dead_branch_remover(), + expr_simplifier(unresolved_mark, Default::default()), + dead_branch_remover(unresolved_mark), // Inline Node fs.readFileSync calls Optional::new( inline_fs( @@ -505,7 +506,6 @@ fn parse( Syntax::Es(EsConfig { jsx: config.is_jsx, export_default_from: true, - static_blocks: true, decorators: config.decorators, ..Default::default() }) From 7c92208a49da68cfcef8ef307ccb44f7fcfa9f3c Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Fri, 6 May 2022 21:06:57 +0200 Subject: [PATCH 02/24] Bump swc --- Cargo.lock | 64 ++++++++++++------------ packages/transformers/js/core/Cargo.toml | 2 +- packages/transformers/js/core/src/lib.rs | 3 +- 3 files changed, 35 insertions(+), 34 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fc690edc8df..e75ff88807e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1807,9 +1807,9 @@ dependencies = [ [[package]] name = "swc_ecma_ast" -version = "0.76.2" +version = "0.77.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87eb325cc3e9bcf93dd9fcf14586e56fc502a5c7a9cc80e36c00bfd7c833b189" +checksum = "85c04cd31d52e59424b585bf84cedcf3353aa6600a0539c820f2096f304eeffa" dependencies = [ "is-macro", "num-bigint", @@ -1822,9 +1822,9 @@ dependencies = [ [[package]] name = "swc_ecma_codegen" -version = "0.105.3" +version = "0.106.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae9844b5e0f24dd035de4993d3cc9dd9a7d2913cbedf81fca5be4b67e79f2f4a" +checksum = "0eab1aff3d7272aefa9a222a570b3cdca4fc6b6871beb24576c7197e2e37795c" dependencies = [ "bitflags", "memchr", @@ -1873,9 +1873,9 @@ dependencies = [ [[package]] name = "swc_ecma_parser" -version = "0.102.10" +version = "0.103.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aac5c37aa7bf93679d30d9d787ff985fca528fe4b15cf40321389a506aec10b3" +checksum = "3e0460e77eb0e9177452deacab627930441c4b4b2ec996596753ed219e07f533" dependencies = [ "either", "enum_kind", @@ -1893,9 +1893,9 @@ dependencies = [ [[package]] name = "swc_ecma_preset_env" -version = "0.123.1" +version = "0.125.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ecd6f2e476981e127706792bf6f6d086bab33c6156a473a1fb7eb36931308ba" +checksum = "d3c698ed4e728250a79489f59b1d5d0999fbc365ac64067b79014b09c788e53d" dependencies = [ "ahash", "anyhow", @@ -1918,9 +1918,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms" -version = "0.148.1" +version = "0.150.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daddb05bfcf7090a838ecb5a3a21051940f4fe8ef445dc87759345f0b63d1143" +checksum = "a4671e1eaddcd2ffba0ccc876cd435d6c0f22c23525aaa22b95008634b129924" dependencies = [ "swc_atoms", "swc_common", @@ -1938,9 +1938,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_base" -version = "0.80.2" +version = "0.82.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d77f99ead1bb808af77e0350dbf02bffa68e900f04621b7883e614b04721703c" +checksum = "6cc0c22d30828dbce6dc29865fa46919ce344db9914496577f69add0aa4bb415" dependencies = [ "better_scoped_tls", "once_cell", @@ -1959,9 +1959,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_classes" -version = "0.68.0" +version = "0.70.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec137c540f3a9b74338ba5ff895cd3330a3d093503b3f0a4a6cbfc4cd7b83216" +checksum = "03f232b5168056e1c0a11c3b94bd81f8dfedc77f0750d64086fdfee410a746f9" dependencies = [ "swc_atoms", "swc_common", @@ -1973,9 +1973,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_compat" -version = "0.94.2" +version = "0.96.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc8d2bf1e5a1c48c6958310e51e8958e0f692333b93a755cde4b7f4c65b1e7be" +checksum = "45f76fa2c18e37382e322ca6684fd0443c58c5e90e0beb62d2f193099694a281" dependencies = [ "ahash", "arrayvec", @@ -2012,9 +2012,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_module" -version = "0.107.0" +version = "0.109.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4e69346f9341d63b942d699ab9f4bbfd5be431ac00f314cbbc967de0f6777bb" +checksum = "b6c7d72e5a1e109a3f69cbf4340948af2a458704ad82fb2863d72efa7159919a" dependencies = [ "Inflector", "ahash", @@ -2036,9 +2036,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_optimization" -version = "0.118.0" +version = "0.120.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adbef528d0642b07670c193ba2af50ec0da1635e02d9e03aa3004b7793981d41" +checksum = "3a5bea26db9cfe39b039d82e2dc8c407b495ce2e383938ed7c90f98276d7aa3e" dependencies = [ "ahash", "dashmap", @@ -2058,9 +2058,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_proposal" -version = "0.102.0" +version = "0.104.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccc254c4c98d88e39f2669e73d6d7add46ff5d26ea65a83cc43d418fbd7b3b47" +checksum = "13e804edf118cb53e8e9a925ea5cae348cb1f5e8b32ef4484539cba7ec65e3df" dependencies = [ "either", "serde", @@ -2077,9 +2077,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_react" -version = "0.109.0" +version = "0.111.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27fe20ec2cb77b66708a85a0ac5dba7686ef1fefc635c6488f8a67f53c962f87" +checksum = "53ee0c5596557060187467a6c491a2d7fdfe81a243bbfc1d1e9ab4f4420488b0" dependencies = [ "ahash", "base64 0.13.0", @@ -2102,9 +2102,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_typescript" -version = "0.112.0" +version = "0.114.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3546be985a8733f7687e0a95ec65f2254cda00eb7f1eb66d0442262054a80735" +checksum = "63f0809f36a8a6b3160c088aab47040a5de8f793b979e641a8e10b55d7e8f49c" dependencies = [ "serde", "swc_atoms", @@ -2118,9 +2118,9 @@ dependencies = [ [[package]] name = "swc_ecma_utils" -version = "0.82.0" +version = "0.83.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbc14fb44a1cf39601f5495c03726accbf0c143a4476a8b80c4cd83cfd01d384" +checksum = "a394f4ce467676abecbbabfe4d2787f804a0e6bc5b192837e38369a45db4e23f" dependencies = [ "indexmap", "once_cell", @@ -2133,9 +2133,9 @@ dependencies = [ [[package]] name = "swc_ecma_visit" -version = "0.62.0" +version = "0.63.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d97c42c1e769cd4a442fbe91d076e8600fffae6139a90582db78da27613a033e" +checksum = "dc615741cb42e81dd524f040062e34c7dff692329799ef1fb686211de2aa4d18" dependencies = [ "num-bigint", "swc_atoms", @@ -2147,9 +2147,9 @@ dependencies = [ [[package]] name = "swc_ecmascript" -version = "0.151.0" +version = "0.153.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06d815c94370a90a02d9a8b34570983f63e7019e2f797ed50b21082b04d5c90" +checksum = "1ece13217d53487c851288c360e96c1b9404d342e55c39826b72abd2268d576e" dependencies = [ "swc_ecma_ast", "swc_ecma_codegen", diff --git a/packages/transformers/js/core/Cargo.toml b/packages/transformers/js/core/Cargo.toml index 4da3e3cbdd6..c30abb638e7 100644 --- a/packages/transformers/js/core/Cargo.toml +++ b/packages/transformers/js/core/Cargo.toml @@ -8,7 +8,7 @@ edition = "2018" crate-type = ["rlib"] [dependencies] -swc_ecmascript = { version = "0.151.0", features = ["parser", "transforms", "module", "optimization", "react", "typescript", "utils", "visit", "codegen", "utils", "preset_env"] } +swc_ecmascript = { version = "0.153.0", features = ["parser", "transforms", "module", "optimization", "react", "typescript", "utils", "visit", "codegen", "utils", "preset_env"] } swc_common = { version = "0.17.25", features = ["tty-emitter", "sourcemap"] } swc_atoms = "0.2.11" indoc = "1.0.3" diff --git a/packages/transformers/js/core/src/lib.rs b/packages/transformers/js/core/src/lib.rs index e622968dfea..106154aa1f6 100644 --- a/packages/transformers/js/core/src/lib.rs +++ b/packages/transformers/js/core/src/lib.rs @@ -236,7 +236,8 @@ pub fn transform(config: Config) -> Result { decorators::decorators(decorators::Config { legacy: true, // Always disabled for now, SWC's implementation doesn't match TSC. - emit_metadata: false + emit_metadata: false, + use_define_for_class_fields: true }), config.decorators ), From 9b541f60a3199f1e4a772427db711990b55f15b6 Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Fri, 6 May 2022 21:53:30 +0200 Subject: [PATCH 03/24] Update GlobalReplacer to rewrite syntax context --- .../js/core/src/global_replacer.rs | 221 ++++++++---------- 1 file changed, 100 insertions(+), 121 deletions(-) diff --git a/packages/transformers/js/core/src/global_replacer.rs b/packages/transformers/js/core/src/global_replacer.rs index 92a072193aa..078ad47e63d 100644 --- a/packages/transformers/js/core/src/global_replacer.rs +++ b/packages/transformers/js/core/src/global_replacer.rs @@ -14,7 +14,7 @@ use crate::utils::{create_require, SourceLocation, SourceType}; pub struct GlobalReplacer<'a> { pub source_map: &'a SourceMap, pub items: &'a mut Vec, - pub globals: HashMap, + pub globals: HashMap, pub project_root: &'a Path, pub filename: &'a Path, pub decls: &'a mut HashSet<(JsWord, SyntaxContext)>, @@ -27,7 +27,7 @@ impl<'a> Fold for GlobalReplacer<'a> { use ast::{Expr::*, Ident, MemberExpr, MemberProp}; // Do not traverse into the `prop` side of member expressions unless computed. - let node = match node { + let mut node = match node { Member(expr) => { if let MemberProp::Computed(_) = expr.prop { Member(MemberExpr { @@ -45,130 +45,88 @@ impl<'a> Fold for GlobalReplacer<'a> { _ => node.fold_children_with(self), }; - if let Ident(ref id) = node { + if let Ident(id) = &mut node { // Only handle global variables - if self.globals.contains_key(&id.sym) - || self.decls.contains(&(id.sym.clone(), id.span.ctxt())) - { + if self.decls.contains(&(id.sym.clone(), id.span.ctxt())) { return node; } match id.sym.to_string().as_str() { "process" => { - self.globals.insert( - id.sym.clone(), - create_decl_stmt( - id.sym.clone(), - self.global_mark, - Call(create_require(js_word!("process"))), - ), - ); - - // So it gets renamed during scope hoisting. - self.decls.insert(id.to_id()); - - let specifier = id.sym.clone(); - self.items.push(DependencyDescriptor { - kind: DependencyKind::Require, - loc: SourceLocation::from(self.source_map, id.span), - specifier, - attributes: None, - is_optional: false, - is_helper: false, - source_type: Some(SourceType::Module), - placeholder: None, - }); + if self.update_binding(id, |_| Call(create_require(js_word!("process")))) { + let specifier = id.sym.clone(); + self.items.push(DependencyDescriptor { + kind: DependencyKind::Require, + loc: SourceLocation::from(self.source_map, id.span), + specifier, + attributes: None, + is_optional: false, + is_helper: false, + source_type: Some(SourceType::Module), + placeholder: None, + }); + } } "Buffer" => { let specifier = swc_atoms::JsWord::from("buffer"); - self.globals.insert( - id.sym.clone(), - create_decl_stmt( - id.sym.clone(), - self.global_mark, - Member(MemberExpr { - obj: Box::new(Call(create_require(specifier.clone()))), - prop: MemberProp::Ident(ast::Ident::new("Buffer".into(), DUMMY_SP)), - span: DUMMY_SP, - }), - ), - ); - - self.decls.insert(id.to_id()); - - self.items.push(DependencyDescriptor { - kind: DependencyKind::Require, - loc: SourceLocation::from(self.source_map, id.span), - specifier, - attributes: None, - is_optional: false, - is_helper: false, - source_type: Some(SourceType::Module), - placeholder: None, - }); + if self.update_binding(id, |_| { + Member(MemberExpr { + obj: Box::new(Call(create_require(specifier.clone()))), + prop: MemberProp::Ident(ast::Ident::new("Buffer".into(), DUMMY_SP)), + span: DUMMY_SP, + }) + }) { + self.items.push(DependencyDescriptor { + kind: DependencyKind::Require, + loc: SourceLocation::from(self.source_map, id.span), + specifier, + attributes: None, + is_optional: false, + is_helper: false, + source_type: Some(SourceType::Module), + placeholder: None, + }); + } } "__filename" => { - let filename = - if let Some(relative) = pathdiff::diff_paths(self.filename, self.project_root) { - relative.to_slash_lossy() - } else if let Some(filename) = self.filename.file_name() { - format!("/{}", filename.to_string_lossy()) - } else { - String::from("/unknown.js") - }; - - self.globals.insert( - id.sym.clone(), - create_decl_stmt( - id.sym.clone(), - self.global_mark, - ast::Expr::Lit(ast::Lit::Str(swc_atoms::JsWord::from(filename).into())), - ), - ); - - self.decls.insert(id.to_id()); + self.update_binding(id, |this| { + let filename = + if let Some(relative) = pathdiff::diff_paths(this.filename, this.project_root) { + relative.to_slash_lossy() + } else if let Some(filename) = this.filename.file_name() { + format!("/{}", filename.to_string_lossy()) + } else { + String::from("/unknown.js") + }; + ast::Expr::Lit(ast::Lit::Str(swc_atoms::JsWord::from(filename).into())) + }); } "__dirname" => { - let dirname = if let Some(dirname) = self.filename.parent() { - if let Some(relative) = pathdiff::diff_paths(dirname, self.project_root) { - relative.to_slash_lossy() + self.update_binding(id, |this| { + let dirname = if let Some(dirname) = this.filename.parent() { + if let Some(relative) = pathdiff::diff_paths(dirname, this.project_root) { + relative.to_slash_lossy() + } else { + String::from("/") + } } else { String::from("/") - } - } else { - String::from("/") - }; - - self.globals.insert( - id.sym.clone(), - create_decl_stmt( - id.sym.clone(), - self.global_mark, - ast::Expr::Lit(ast::Lit::Str(swc_atoms::JsWord::from(dirname).into())), - ), - ); - - self.decls.insert(id.to_id()); + }; + ast::Expr::Lit(ast::Lit::Str(swc_atoms::JsWord::from(dirname).into())) + }); } "global" => { if !self.scope_hoist { - self.globals.insert( - id.sym.clone(), - create_decl_stmt( - id.sym.clone(), - self.global_mark, - ast::Expr::Member(ast::MemberExpr { - obj: Box::new(Ident(Ident::new(js_word!("arguments"), DUMMY_SP))), - prop: MemberProp::Computed(ComputedPropName { - span: DUMMY_SP, - expr: Box::new(Lit(ast::Lit::Num(3.into()))), - }), + self.update_binding(id, |_| { + ast::Expr::Member(ast::MemberExpr { + obj: Box::new(Ident(Ident::new(js_word!("arguments"), DUMMY_SP))), + prop: MemberProp::Computed(ComputedPropName { span: DUMMY_SP, + expr: Box::new(Lit(ast::Lit::Num(3.into()))), }), - ), - ); - - self.decls.insert(id.to_id()); + span: DUMMY_SP, + }) + }); } } _ => {} @@ -186,7 +144,7 @@ impl<'a> Fold for GlobalReplacer<'a> { self .globals .values() - .map(|stmt| ast::ModuleItem::Stmt(stmt.clone())), + .map(|(_, stmt)| ast::ModuleItem::Stmt(stmt.clone())), ); node } @@ -196,19 +154,40 @@ fn create_decl_stmt( name: swc_atoms::JsWord, global_mark: swc_common::Mark, init: ast::Expr, -) -> ast::Stmt { - ast::Stmt::Decl(ast::Decl::Var(ast::VarDecl { - kind: ast::VarDeclKind::Var, - declare: false, - span: DUMMY_SP, - decls: vec![ast::VarDeclarator { - name: ast::Pat::Ident(ast::BindingIdent::from(ast::Ident::new( - name, - DUMMY_SP.apply_mark(global_mark), - ))), +) -> (ast::Stmt, SyntaxContext) { + let span = DUMMY_SP.apply_mark(global_mark); + ( + ast::Stmt::Decl(ast::Decl::Var(ast::VarDecl { + kind: ast::VarDeclKind::Var, + declare: false, span: DUMMY_SP, - definite: false, - init: Some(Box::new(init)), - }], - })) + decls: vec![ast::VarDeclarator { + name: ast::Pat::Ident(ast::BindingIdent::from(ast::Ident::new(name, span))), + span: DUMMY_SP, + definite: false, + init: Some(Box::new(init)), + }], + })), + span.ctxt, + ) +} + +impl GlobalReplacer<'_> { + fn update_binding(&mut self, id: &mut ast::Ident, expr: F) -> bool + where + F: FnOnce(&Self) -> ast::Expr, + { + if let Some((ctxt, _)) = self.globals.get(&id.sym) { + id.span.ctxt = *ctxt; + false + } else { + let (decl, ctxt) = create_decl_stmt(id.sym.clone(), self.global_mark, expr(self)); + + self.globals.insert(id.sym.clone(), (ctxt, decl)); + self.decls.insert(id.to_id()); + + id.span.ctxt = ctxt; + true + } + } } From 6fb8e2107376e9abf8a62b94d848216394b09b1c Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Fri, 6 May 2022 22:40:28 +0200 Subject: [PATCH 04/24] Node_replacer --- .../transformers/js/core/src/node_replacer.rs | 263 +++++++++--------- 1 file changed, 137 insertions(+), 126 deletions(-) diff --git a/packages/transformers/js/core/src/node_replacer.rs b/packages/transformers/js/core/src/node_replacer.rs index 313417cd8b5..a94e5bb699d 100644 --- a/packages/transformers/js/core/src/node_replacer.rs +++ b/packages/transformers/js/core/src/node_replacer.rs @@ -14,7 +14,7 @@ use crate::utils::{create_require, SourceLocation, SourceType}; pub struct NodeReplacer<'a> { pub source_map: &'a SourceMap, pub items: &'a mut Vec, - pub globals: HashMap, + pub globals: HashMap, pub project_root: &'a Path, pub filename: &'a Path, pub decls: &'a mut HashSet<(JsWord, SyntaxContext)>, @@ -28,7 +28,7 @@ impl<'a> Fold for NodeReplacer<'a> { use ast::{Expr::*, MemberExpr, MemberProp}; // Do not traverse into the `prop` side of member expressions unless computed. - let node = match node { + let mut node = match node { Member(expr) => { if let MemberProp::Computed(_) = expr.prop { Member(MemberExpr { @@ -46,7 +46,7 @@ impl<'a> Fold for NodeReplacer<'a> { _ => node.fold_children_with(self), }; - if let Ident(ref id) = node { + if let Ident(id) = &mut node { // Only handle global variables if self.globals.contains_key(&id.sym) || self.decls.contains(&(id.sym.clone(), id.span.ctxt())) @@ -59,121 +59,111 @@ impl<'a> Fold for NodeReplacer<'a> { let specifier = swc_atoms::JsWord::from("path"); let replace_me_value = swc_atoms::JsWord::from("$parcel$filenameReplace"); - let filename = if let Some(name) = self.filename.file_name() { - name - } else { - OsStr::new("unknown.js") - }; - - let inserted_expr = ast::Expr::Call(ast::CallExpr { - span: DUMMY_SP, - type_args: None, - args: vec![ - ast::ExprOrSpread { - spread: None, - expr: Box::new(ast::Expr::Ident(ast::Ident { - optional: false, - span: DUMMY_SP, - // This also uses __dirname as later in the path.join call the hierarchy is then correct - // Otherwise path.join(__filename, '..') would be one level to shallow (due to the /filename.js at the end) - sym: swc_atoms::JsWord::from("__dirname"), - })), - }, - ast::ExprOrSpread { - spread: None, - expr: Box::new(ast::Expr::Lit(ast::Lit::Str(ast::Str { - span: DUMMY_SP, - value: replace_me_value, - raw: None, - }))), - }, - ast::ExprOrSpread { - spread: None, - expr: Box::new(ast::Expr::Lit(ast::Lit::Str(ast::Str { - span: DUMMY_SP, - value: swc_atoms::JsWord::from(filename.to_string_lossy()), - raw: None, - }))), - }, - ], - callee: ast::Callee::Expr(Box::new(ast::Expr::Member(ast::MemberExpr { + let expr = |this: &NodeReplacer| { + let filename = if let Some(name) = this.filename.file_name() { + name + } else { + OsStr::new("unknown.js") + }; + ast::Expr::Call(ast::CallExpr { span: DUMMY_SP, - obj: (Box::new(Call(create_require(specifier.clone())))), - prop: MemberProp::Ident(ast::Ident::new("resolve".into(), DUMMY_SP)), - }))), - }); - - self.globals.insert( - id.sym.clone(), - create_decl_stmt(id.sym.clone(), self.global_mark, inserted_expr), - ); - - self.decls.insert(id.to_id()); - - self.items.push(DependencyDescriptor { - kind: DependencyKind::Require, - loc: SourceLocation::from(self.source_map, id.span), - specifier, - attributes: None, - is_optional: false, - is_helper: false, - source_type: Some(SourceType::Module), - placeholder: None, - }); - - *self.has_node_replacements = true; + type_args: None, + args: vec![ + ast::ExprOrSpread { + spread: None, + expr: Box::new(ast::Expr::Ident(ast::Ident { + optional: false, + span: DUMMY_SP, + // This also uses __dirname as later in the path.join call the hierarchy is then correct + // Otherwise path.join(__filename, '..') would be one level to shallow (due to the /filename.js at the end) + sym: swc_atoms::JsWord::from("__dirname"), + })), + }, + ast::ExprOrSpread { + spread: None, + expr: Box::new(ast::Expr::Lit(ast::Lit::Str(ast::Str { + span: DUMMY_SP, + value: replace_me_value, + raw: None, + }))), + }, + ast::ExprOrSpread { + spread: None, + expr: Box::new(ast::Expr::Lit(ast::Lit::Str(ast::Str { + span: DUMMY_SP, + value: swc_atoms::JsWord::from(filename.to_string_lossy()), + raw: None, + }))), + }, + ], + callee: ast::Callee::Expr(Box::new(ast::Expr::Member(ast::MemberExpr { + span: DUMMY_SP, + obj: (Box::new(Call(create_require(specifier.clone())))), + prop: MemberProp::Ident(ast::Ident::new("resolve".into(), DUMMY_SP)), + }))), + }) + }; + if self.update_binding(id, expr) { + self.items.push(DependencyDescriptor { + kind: DependencyKind::Require, + loc: SourceLocation::from(self.source_map, id.span), + specifier, + attributes: None, + is_optional: false, + is_helper: false, + source_type: Some(SourceType::Module), + placeholder: None, + }); + + *self.has_node_replacements = true; + } } "__dirname" => { let specifier = swc_atoms::JsWord::from("path"); let replace_me_value = swc_atoms::JsWord::from("$parcel$dirnameReplace"); - let inserted_expr = ast::Expr::Call(ast::CallExpr { - span: DUMMY_SP, - type_args: None, - args: vec![ - ast::ExprOrSpread { - spread: None, - expr: Box::new(ast::Expr::Ident(ast::Ident { - optional: false, - span: DUMMY_SP, - sym: swc_atoms::JsWord::from("__dirname"), - })), - }, - ast::ExprOrSpread { - spread: None, - expr: Box::new(ast::Expr::Lit(ast::Lit::Str(ast::Str { - span: DUMMY_SP, - value: replace_me_value, - raw: None, - }))), - }, - ], - callee: ast::Callee::Expr(Box::new(ast::Expr::Member(ast::MemberExpr { + if self.update_binding(id, |_| { + ast::Expr::Call(ast::CallExpr { span: DUMMY_SP, - obj: (Box::new(Call(create_require(specifier.clone())))), - prop: MemberProp::Ident(ast::Ident::new("resolve".into(), DUMMY_SP)), - }))), - }); - - self.globals.insert( - id.sym.clone(), - create_decl_stmt(id.sym.clone(), self.global_mark, inserted_expr), - ); - - self.decls.insert(id.to_id()); - - self.items.push(DependencyDescriptor { - kind: DependencyKind::Require, - loc: SourceLocation::from(self.source_map, id.span), - specifier, - attributes: None, - is_optional: false, - is_helper: false, - source_type: Some(SourceType::Module), - placeholder: None, - }); - - *self.has_node_replacements = true; + type_args: None, + args: vec![ + ast::ExprOrSpread { + spread: None, + expr: Box::new(ast::Expr::Ident(ast::Ident { + optional: false, + span: DUMMY_SP, + sym: swc_atoms::JsWord::from("__dirname"), + })), + }, + ast::ExprOrSpread { + spread: None, + expr: Box::new(ast::Expr::Lit(ast::Lit::Str(ast::Str { + span: DUMMY_SP, + value: replace_me_value, + raw: None, + }))), + }, + ], + callee: ast::Callee::Expr(Box::new(ast::Expr::Member(ast::MemberExpr { + span: DUMMY_SP, + obj: (Box::new(Call(create_require(specifier.clone())))), + prop: MemberProp::Ident(ast::Ident::new("resolve".into(), DUMMY_SP)), + }))), + }) + }) { + self.items.push(DependencyDescriptor { + kind: DependencyKind::Require, + loc: SourceLocation::from(self.source_map, id.span), + specifier, + attributes: None, + is_optional: false, + is_helper: false, + source_type: Some(SourceType::Module), + placeholder: None, + }); + + *self.has_node_replacements = true; + } } _ => {} } @@ -190,7 +180,7 @@ impl<'a> Fold for NodeReplacer<'a> { self .globals .values() - .map(|stmt| ast::ModuleItem::Stmt(stmt.clone())), + .map(|(_, stmt)| ast::ModuleItem::Stmt(stmt.clone())), ); node } @@ -200,19 +190,40 @@ fn create_decl_stmt( name: swc_atoms::JsWord, global_mark: swc_common::Mark, init: ast::Expr, -) -> ast::Stmt { - ast::Stmt::Decl(ast::Decl::Var(ast::VarDecl { - kind: ast::VarDeclKind::Var, - declare: false, - span: DUMMY_SP, - decls: vec![ast::VarDeclarator { - name: ast::Pat::Ident(ast::BindingIdent::from(ast::Ident::new( - name, - DUMMY_SP.apply_mark(global_mark), - ))), +) -> (ast::Stmt, SyntaxContext) { + let span = DUMMY_SP.apply_mark(global_mark); + ( + ast::Stmt::Decl(ast::Decl::Var(ast::VarDecl { + kind: ast::VarDeclKind::Var, + declare: false, span: DUMMY_SP, - definite: false, - init: Some(Box::new(init)), - }], - })) + decls: vec![ast::VarDeclarator { + name: ast::Pat::Ident(ast::BindingIdent::from(ast::Ident::new(name, span))), + span: DUMMY_SP, + definite: false, + init: Some(Box::new(init)), + }], + })), + span.ctxt, + ) +} + +impl NodeReplacer<'_> { + fn update_binding(&mut self, id: &mut ast::Ident, expr: F) -> bool + where + F: FnOnce(&Self) -> ast::Expr, + { + if let Some((ctxt, _)) = self.globals.get(&id.sym) { + id.span.ctxt = *ctxt; + false + } else { + let (decl, ctxt) = create_decl_stmt(id.sym.clone(), self.global_mark, expr(self)); + + self.globals.insert(id.sym.clone(), (ctxt, decl)); + self.decls.insert(id.to_id()); + + id.span.ctxt = ctxt; + true + } + } } From 87927c70d5bc041952cede6f835912cbbd6b8199 Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Fri, 6 May 2022 23:02:27 +0200 Subject: [PATCH 05/24] Fixup --- .../transformers/js/core/src/global_replacer.rs | 10 +++++++--- packages/transformers/js/core/src/node_replacer.rs | 14 ++++++++------ 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/packages/transformers/js/core/src/global_replacer.rs b/packages/transformers/js/core/src/global_replacer.rs index 078ad47e63d..3424c4b8e0d 100644 --- a/packages/transformers/js/core/src/global_replacer.rs +++ b/packages/transformers/js/core/src/global_replacer.rs @@ -3,7 +3,7 @@ use std::collections::{HashMap, HashSet}; use std::path::Path; use swc_atoms::JsWord; -use swc_common::{SourceMap, SyntaxContext, DUMMY_SP}; +use swc_common::{Mark, SourceMap, SyntaxContext, DUMMY_SP}; use swc_ecmascript::ast::{self, ComputedPropName}; use swc_ecmascript::utils::ident::IdentLike; use swc_ecmascript::visit::{Fold, FoldWith}; @@ -155,7 +155,10 @@ fn create_decl_stmt( global_mark: swc_common::Mark, init: ast::Expr, ) -> (ast::Stmt, SyntaxContext) { - let span = DUMMY_SP.apply_mark(global_mark); + let span = DUMMY_SP + .apply_mark(global_mark) + .apply_mark(Mark::fresh(Mark::root())); + ( ast::Stmt::Decl(ast::Decl::Var(ast::VarDecl { kind: ast::VarDeclKind::Var, @@ -183,10 +186,11 @@ impl GlobalReplacer<'_> { } else { let (decl, ctxt) = create_decl_stmt(id.sym.clone(), self.global_mark, expr(self)); + id.span.ctxt = ctxt; + self.globals.insert(id.sym.clone(), (ctxt, decl)); self.decls.insert(id.to_id()); - id.span.ctxt = ctxt; true } } diff --git a/packages/transformers/js/core/src/node_replacer.rs b/packages/transformers/js/core/src/node_replacer.rs index a94e5bb699d..d60eb12a38d 100644 --- a/packages/transformers/js/core/src/node_replacer.rs +++ b/packages/transformers/js/core/src/node_replacer.rs @@ -3,7 +3,7 @@ use std::ffi::OsStr; use std::path::Path; use swc_atoms::JsWord; -use swc_common::{SourceMap, SyntaxContext, DUMMY_SP}; +use swc_common::{Mark, SourceMap, SyntaxContext, DUMMY_SP}; use swc_ecmascript::ast::{self}; use swc_ecmascript::utils::ident::IdentLike; use swc_ecmascript::visit::{Fold, FoldWith}; @@ -48,9 +48,7 @@ impl<'a> Fold for NodeReplacer<'a> { if let Ident(id) = &mut node { // Only handle global variables - if self.globals.contains_key(&id.sym) - || self.decls.contains(&(id.sym.clone(), id.span.ctxt())) - { + if self.decls.contains(&(id.sym.clone(), id.span.ctxt())) { return node; } @@ -191,7 +189,10 @@ fn create_decl_stmt( global_mark: swc_common::Mark, init: ast::Expr, ) -> (ast::Stmt, SyntaxContext) { - let span = DUMMY_SP.apply_mark(global_mark); + let span = DUMMY_SP + .apply_mark(global_mark) + .apply_mark(Mark::fresh(Mark::root())); + ( ast::Stmt::Decl(ast::Decl::Var(ast::VarDecl { kind: ast::VarDeclKind::Var, @@ -219,10 +220,11 @@ impl NodeReplacer<'_> { } else { let (decl, ctxt) = create_decl_stmt(id.sym.clone(), self.global_mark, expr(self)); + id.span.ctxt = ctxt; + self.globals.insert(id.sym.clone(), (ctxt, decl)); self.decls.insert(id.to_id()); - id.span.ctxt = ctxt; true } } From 134cf235801113128faeb073c78e11c9514ee8f2 Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Mon, 9 May 2022 17:11:22 +0200 Subject: [PATCH 06/24] Bump swc helpers --- packages/transformers/js/package.json | 2 +- yarn.lock | 15 +++++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/transformers/js/package.json b/packages/transformers/js/package.json index 27bec9385e6..af059408312 100644 --- a/packages/transformers/js/package.json +++ b/packages/transformers/js/package.json @@ -35,7 +35,7 @@ "@parcel/source-map": "^2.0.0", "@parcel/utils": "2.5.0", "@parcel/workers": "2.5.0", - "@swc/helpers": "^0.3.6", + "@swc/helpers": "^0.3.13", "browserslist": "^4.6.6", "detect-libc": "^1.0.3", "nullthrows": "^1.1.1", diff --git a/yarn.lock b/yarn.lock index 2e46ab7f141..a8de54f4805 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2327,10 +2327,12 @@ "@swc/core-win32-ia32-msvc" "^1.2.106" "@swc/core-win32-x64-msvc" "^1.2.106" -"@swc/helpers@^0.3.6": - version "0.3.6" - resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.3.6.tgz#b41e77dbf14e9cb138988484563ad9680ae5dc3d" - integrity sha512-xVl7Sddrl9/eMjEMqkH9lT8fLOGCuWHH9VmR2IBKQ8xTcjA6UQw4O3/4oS3xnyZHLtL9vC3P+C0kLneHpiqeEg== +"@swc/helpers@^0.3.13": + version "0.3.13" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.3.13.tgz#b9af856aaa3804fefdd1544632dde35b7b6ff978" + integrity sha512-A1wswJhnqaLRn8uYVQ8YiNTtY5i/JIPmV08EXXjjTresIkUVUEUaFv/wXVhGXfRNYMvHPkuoMR1Nb6NgpxGjNg== + dependencies: + tslib "^2.4.0" "@tootallnate/once@2": version "2.0.0" @@ -12608,6 +12610,11 @@ tslib@^1.10.0, tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + tty-browserify@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" From e801248d03a5e2f96c896cea3d2777ff6349e9a0 Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Mon, 9 May 2022 17:14:12 +0200 Subject: [PATCH 07/24] TODO comment --- packages/transformers/js/core/src/global_replacer.rs | 1 + packages/transformers/js/core/src/node_replacer.rs | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/transformers/js/core/src/global_replacer.rs b/packages/transformers/js/core/src/global_replacer.rs index 3424c4b8e0d..3237b0f7e0d 100644 --- a/packages/transformers/js/core/src/global_replacer.rs +++ b/packages/transformers/js/core/src/global_replacer.rs @@ -156,6 +156,7 @@ fn create_decl_stmt( init: ast::Expr, ) -> (ast::Stmt, SyntaxContext) { let span = DUMMY_SP + // TODO this shouldn't actually be marked global because it's generated .apply_mark(global_mark) .apply_mark(Mark::fresh(Mark::root())); diff --git a/packages/transformers/js/core/src/node_replacer.rs b/packages/transformers/js/core/src/node_replacer.rs index d60eb12a38d..7a7db70d634 100644 --- a/packages/transformers/js/core/src/node_replacer.rs +++ b/packages/transformers/js/core/src/node_replacer.rs @@ -190,6 +190,7 @@ fn create_decl_stmt( init: ast::Expr, ) -> (ast::Stmt, SyntaxContext) { let span = DUMMY_SP + // TODO this shouldn't actually be marked global because it's generated .apply_mark(global_mark) .apply_mark(Mark::fresh(Mark::root())); From 50c833a191e5219f01814a584ab53c0a7e33a6d0 Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Mon, 9 May 2022 17:17:36 +0200 Subject: [PATCH 08/24] Bump crates --- Cargo.lock | 210 +++++++++-------------- packages/optimizers/image/src/lib.rs | 2 +- packages/transformers/js/core/Cargo.toml | 2 +- 3 files changed, 86 insertions(+), 128 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e75ff88807e..065de790d7d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -430,12 +430,12 @@ dependencies = [ [[package]] name = "dashmap" -version = "5.3.1" +version = "5.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "084c61a88f94d7557441d01e89fc3800b0b80658462b05aa7b55dfae069da09b" +checksum = "391b56fbd302e585b7a9494fb70e40949567b1cf9003a8e4a6041a1687c26573" dependencies = [ "cfg-if 1.0.0", - "hashbrown 0.12.0", + "hashbrown 0.12.1", "lock_api", ] @@ -588,12 +588,9 @@ checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" [[package]] name = "hashbrown" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c21d40587b92fa6a6c6e3c1bdbf87d75511db5672f9c93175574b3a00df1758" -dependencies = [ - "ahash", -] +checksum = "db0d4cf898abf0081f964436dc980e96670a0f36863e4b83aaacdb65c9d7ccc3" [[package]] name = "hermit-abi" @@ -655,12 +652,9 @@ dependencies = [ [[package]] name = "indoc" -version = "1.0.4" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7906a9fababaeacb774f72410e497a1d18de916322e33797bb2cd29baa23c9e" -dependencies = [ - "unindent", -] +checksum = "05a0bd019339e5d968b37855180087b7b9d512c5046fbd244cf8c95687927d6e" [[package]] name = "instant" @@ -841,6 +835,16 @@ dependencies = [ "libdeflate-sys", ] +[[package]] +name = "libloading" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efbc0f03f9a775e9f6aed295c6a1ba2253c5757a9e03d55c6caa46a681abcddd" +dependencies = [ + "cfg-if 1.0.0", + "winapi", +] + [[package]] name = "libmimalloc-sys" version = "0.1.25" @@ -862,9 +866,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.16" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6389c490849ff5bc16be905ae24bc913a9c8892e19b2341dbc175e14c341c2b8" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" dependencies = [ "cfg-if 1.0.0", ] @@ -877,9 +881,9 @@ checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" [[package]] name = "memchr" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "memoffset" @@ -937,16 +941,15 @@ dependencies = [ [[package]] name = "napi" -version = "2.3.3" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7806930f3d742fade085524e131dd4407c5bd68dff77086cf6b8ef300e0b12" +checksum = "2c43e69205d47ab5e43e5c98d63bd8a75d379d6631739b05dac26d5bcfb1a6ab" dependencies = [ "ctor", "lazy_static", "napi-sys", "serde", "serde_json", - "windows", ] [[package]] @@ -957,9 +960,9 @@ checksum = "ebd4419172727423cf30351406c54f6cc1b354a2cfb4f1dba3e6cd07f6d5522b" [[package]] name = "napi-derive" -version = "2.3.3" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35d20a0de501d6ca0b007d008fefbdc875bc8947b7ee85964cff4a975c83fafb" +checksum = "478e2cae8e7e7b2f8755a5da545641ae59c72dc495dc91077e586ce8b7d9bd67" dependencies = [ "convert_case", "napi-derive-backend", @@ -970,9 +973,9 @@ dependencies = [ [[package]] name = "napi-derive-backend" -version = "1.0.30" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11a711157fd22437c2997896210abd4c5707f5e2d9f48de91cb6bb02b4a6cb6c" +checksum = "0bcdaac1ddb4a5172aebd0a3132caf8434e8af801213b52c67df2749ce6f8754" dependencies = [ "convert_case", "once_cell", @@ -984,9 +987,12 @@ dependencies = [ [[package]] name = "napi-sys" -version = "2.1.0" +version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a385494dac3c52cbcacb393bb3b42669e7db8ab240c7ad5115f549eb061f2cc" +checksum = "91c795d73a38586eadcb9bfda5be786b45620e3fe5fae04e5d3623d7d6abb3d0" +dependencies = [ + "libloading", +] [[package]] name = "nasm-rs" @@ -1068,9 +1074,9 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.14" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" dependencies = [ "autocfg", ] @@ -1213,7 +1219,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58" dependencies = [ "lock_api", - "parking_lot_core 0.9.2", + "parking_lot_core 0.9.3", ] [[package]] @@ -1233,9 +1239,9 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.2" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "995f667a6c822200b0433ac218e05582f0e2efa1b922a3fd2fbaadc5f87bab37" +checksum = "09a279cbf25cb0757810394fbc1e359949b59e348145c643a939a525692e6929" dependencies = [ "cfg-if 1.0.0", "libc", @@ -1365,7 +1371,7 @@ dependencies = [ "dashmap", "from_variant", "once_cell", - "semver 1.0.7", + "semver 1.0.9", "serde", "st-map", ] @@ -1378,9 +1384,9 @@ checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" [[package]] name = "proc-macro2" -version = "1.0.37" +version = "1.0.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec757218438d5fda206afc041538b2f6d889286160d649a86a24d37e1235afd1" +checksum = "9027b48e9d4c9175fa2218adf3557f91c1137021739951d4932f5f8268ac48aa" dependencies = [ "unicode-xid", ] @@ -1510,7 +1516,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.7", + "semver 1.0.9", ] [[package]] @@ -1542,9 +1548,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.7" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d65bd28f48be7196d222d95b9243287f48d27aca604e08497513019ff0502cc4" +checksum = "8cb243bdfdb5936c8dc3c45762a19d12ab4550cdc753bc247637d4ec35a040fd" dependencies = [ "serde", ] @@ -1557,9 +1563,9 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.136" +version = "1.0.137" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" +checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1" dependencies = [ "serde_derive", ] @@ -1578,18 +1584,18 @@ dependencies = [ [[package]] name = "serde_bytes" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16ae07dd2f88a366f15bd0632ba725227018c69a1c8550a927324f8eb8368bb9" +checksum = "212e73464ebcde48d723aa02eb270ba62eff38a9b732df31f33f1b4e145f3a54" dependencies = [ "serde", ] [[package]] name = "serde_derive" -version = "1.0.136" +version = "1.0.137" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" +checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be" dependencies = [ "proc-macro2", "quote", @@ -1598,9 +1604,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.79" +version = "1.0.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95" +checksum = "9b7ce2b32a1aed03c558dc61a5cd328f15aff2dbc17daad8fb8af04d2100e15c" dependencies = [ "itoa", "ryu", @@ -1645,9 +1651,9 @@ checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" [[package]] name = "sourcemap" -version = "6.0.1" +version = "6.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e031f2463ecbdd5f34c950f89f5c1e1032f22c0f8e3dc4bdb2e8b6658cf61eb" +checksum = "a2ca89636b276071e7276488131f531dbf43ad1c19bc4bd5a04f6a0ce1ddc138" dependencies = [ "base64 0.11.0", "if_chain", @@ -1807,9 +1813,9 @@ dependencies = [ [[package]] name = "swc_ecma_ast" -version = "0.77.0" +version = "0.77.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85c04cd31d52e59424b585bf84cedcf3353aa6600a0539c820f2096f304eeffa" +checksum = "50cc75d1a709e466c1bcab59b88c01a04ba963237642fe7b6c0de071babb6a31" dependencies = [ "is-macro", "num-bigint", @@ -1893,9 +1899,9 @@ dependencies = [ [[package]] name = "swc_ecma_preset_env" -version = "0.125.0" +version = "0.126.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3c698ed4e728250a79489f59b1d5d0999fbc365ac64067b79014b09c788e53d" +checksum = "0bc86aa97deedb4c0eadd1954086fdd20e1aa28f44c0e38424839a10733559b4" dependencies = [ "ahash", "anyhow", @@ -1903,7 +1909,7 @@ dependencies = [ "indexmap", "once_cell", "preset_env_base", - "semver 1.0.7", + "semver 1.0.9", "serde", "serde_json", "st-map", @@ -1918,9 +1924,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms" -version = "0.150.0" +version = "0.151.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4671e1eaddcd2ffba0ccc876cd435d6c0f22c23525aaa22b95008634b129924" +checksum = "3c0d55c5730f69e1a1b8b75b119764d18655cbcdaf67fdac2504d957fa99456a" dependencies = [ "swc_atoms", "swc_common", @@ -1938,9 +1944,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_base" -version = "0.82.0" +version = "0.82.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cc0c22d30828dbce6dc29865fa46919ce344db9914496577f69add0aa4bb415" +checksum = "8c63c75659d4193194abf6e3d8df3e843243d4c8df9c2562d091b8824cae7de1" dependencies = [ "better_scoped_tls", "once_cell", @@ -2036,14 +2042,15 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_optimization" -version = "0.120.0" +version = "0.121.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a5bea26db9cfe39b039d82e2dc8c407b495ce2e383938ed7c90f98276d7aa3e" +checksum = "6186848e501bd42494a8c74cc44200d41ec9fe14c16708a953824290cc9523e0" dependencies = [ "ahash", "dashmap", "indexmap", "once_cell", + "rustc-hash", "serde_json", "swc_atoms", "swc_common", @@ -2118,9 +2125,9 @@ dependencies = [ [[package]] name = "swc_ecma_utils" -version = "0.83.0" +version = "0.83.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a394f4ce467676abecbbabfe4d2787f804a0e6bc5b192837e38369a45db4e23f" +checksum = "f42972203e18602ea8a8a4e382c2453e95ad6a1f2fc28764b2a02b60f05e0a20" dependencies = [ "indexmap", "once_cell", @@ -2147,9 +2154,9 @@ dependencies = [ [[package]] name = "swc_ecmascript" -version = "0.153.0" +version = "0.154.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ece13217d53487c851288c360e96c1b9404d342e55c39826b72abd2268d576e" +checksum = "3f525222f3600088534b0d33c3592c07ebc988fe313207daf8c3ef57dd4dd33d" dependencies = [ "swc_ecma_ast", "swc_ecma_codegen", @@ -2174,9 +2181,9 @@ dependencies = [ [[package]] name = "swc_macros_common" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "033f8b6e2fc4991a8e422a20b4f52741affcac2267c29357c931508a1a500797" +checksum = "d5dca3f08d02da4684c3373150f7c045128f81ea00f0c434b1b012bc65a6cce3" dependencies = [ "pmutil", "proc-macro2", @@ -2250,18 +2257,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.30" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" +checksum = "bd829fe32373d27f76265620b5309d0340cb8550f523c1dda251d6298069069a" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.30" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" +checksum = "0396bc89e626244658bef819e22d0cc459e795a5ebe878e6ec336d1674a8d79a" dependencies = [ "proc-macro2", "quote", @@ -2381,15 +2388,9 @@ checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973" [[package]] name = "unicode-xid" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" - -[[package]] -name = "unindent" -version = "0.1.8" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "514672a55d7380da379785a4d70ca8386c8883ff7eaae877be4d2081cebe73d8" +checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04" [[package]] name = "unreachable" @@ -2532,86 +2533,43 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "windows" -version = "0.36.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e53b97a83176b369b0eb2fd8158d4ae215357d02df9d40c1e1bf1879c5482c80" -dependencies = [ - "windows_aarch64_msvc 0.36.1", - "windows_i686_gnu 0.36.1", - "windows_i686_msvc 0.36.1", - "windows_x86_64_gnu 0.36.1", - "windows_x86_64_msvc 0.36.1", -] - [[package]] name = "windows-sys" -version = "0.34.0" +version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5acdd78cb4ba54c0045ac14f62d8f94a03d10047904ae2a40afa1e99d8f70825" +checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" dependencies = [ - "windows_aarch64_msvc 0.34.0", - "windows_i686_gnu 0.34.0", - "windows_i686_msvc 0.34.0", - "windows_x86_64_gnu 0.34.0", - "windows_x86_64_msvc 0.34.0", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_msvc", ] -[[package]] -name = "windows_aarch64_msvc" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" - [[package]] name = "windows_aarch64_msvc" version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" -[[package]] -name = "windows_i686_gnu" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" - [[package]] name = "windows_i686_gnu" version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" -[[package]] -name = "windows_i686_msvc" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" - [[package]] name = "windows_i686_msvc" version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" -[[package]] -name = "windows_x86_64_gnu" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" - [[package]] name = "windows_x86_64_gnu" version = "0.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" -[[package]] -name = "windows_x86_64_msvc" -version = "0.34.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" - [[package]] name = "windows_x86_64_msvc" version = "0.36.1" diff --git a/packages/optimizers/image/src/lib.rs b/packages/optimizers/image/src/lib.rs index 5c08a8d765b..0692112bd41 100644 --- a/packages/optimizers/image/src/lib.rs +++ b/packages/optimizers/image/src/lib.rs @@ -43,7 +43,7 @@ fn optimize(ctx: CallContext) -> Result { if let Some(msg) = err.downcast_ref::() { Err(Error::from_reason(msg.to_string())) } else { - Err(Error::from_reason("Unknown libjpeg error".into())) + Err(Error::from_reason("Unknown libjpeg error")) } } } diff --git a/packages/transformers/js/core/Cargo.toml b/packages/transformers/js/core/Cargo.toml index c30abb638e7..17b73b2782e 100644 --- a/packages/transformers/js/core/Cargo.toml +++ b/packages/transformers/js/core/Cargo.toml @@ -8,7 +8,7 @@ edition = "2018" crate-type = ["rlib"] [dependencies] -swc_ecmascript = { version = "0.153.0", features = ["parser", "transforms", "module", "optimization", "react", "typescript", "utils", "visit", "codegen", "utils", "preset_env"] } +swc_ecmascript = { version = "0.154.1", features = ["parser", "transforms", "module", "optimization", "react", "typescript", "utils", "visit", "codegen", "utils", "preset_env"] } swc_common = { version = "0.17.25", features = ["tty-emitter", "sourcemap"] } swc_atoms = "0.2.11" indoc = "1.0.3" From f96db99cc89f205838fedf21a46799a5a4a89c91 Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Mon, 9 May 2022 19:16:16 +0200 Subject: [PATCH 09/24] Hack in hoist to "detect" top level bindings --- packages/transformers/js/core/src/hoist.rs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/transformers/js/core/src/hoist.rs b/packages/transformers/js/core/src/hoist.rs index c1ed352733c..6f9b4a1b604 100644 --- a/packages/transformers/js/core/src/hoist.rs +++ b/packages/transformers/js/core/src/hoist.rs @@ -785,7 +785,11 @@ impl<'a> Fold for Hoist<'a> { return Ident::new("$parcel$global".into(), node.span); } - if node.span.ctxt() == self.collect.global_ctxt + // TODO + // neither ctxt == DUMMY_SP.apply_mark(global_mark) + // nor span.has_mark(self.collect.global_mark) + // are correct. + if node.span.has_mark(self.collect.global_mark) && self.collect.decls.contains(&id!(node)) && !self.collect.should_wrap { @@ -1073,6 +1077,7 @@ pub struct Collect { pub source_map: Lrc, pub decls: HashSet, pub ignore_mark: Mark, + pub global_mark: Mark, pub global_ctxt: SyntaxContext, pub static_cjs_exports: bool, pub has_cjs_exports: bool, @@ -1139,6 +1144,7 @@ impl Collect { source_map, decls, ignore_mark, + global_mark, global_ctxt: SyntaxContext::empty().apply_mark(global_mark), static_cjs_exports: true, has_cjs_exports: false, @@ -1548,6 +1554,10 @@ impl Visit for Collect { .or_insert_with(|| node.id.sym.clone()); } + // TODO + // neither ctxt == DUMMY_SP.apply_mark(global_mark) + // nor span.has_mark(self.collect.global_mark) + // are correct. if self.in_assign && node.id.span.ctxt() == self.global_ctxt { self .non_const_bindings @@ -1573,6 +1583,10 @@ impl Visit for Collect { .or_insert_with(|| node.key.sym.clone()); } + // TODO + // neither ctxt == DUMMY_SP.apply_mark(global_mark) + // nor span.has_mark(self.collect.global_mark) + // are correct. if self.in_assign && node.key.span.ctxt() == self.global_ctxt { self .non_const_bindings From 63b441fa835f7ab378d676913491147e8ad8e464 Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Mon, 9 May 2022 22:34:46 +0200 Subject: [PATCH 10/24] Bump --- Cargo.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 065de790d7d..b0e3369e6a0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1944,9 +1944,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_base" -version = "0.82.3" +version = "0.82.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c63c75659d4193194abf6e3d8df3e843243d4c8df9c2562d091b8824cae7de1" +checksum = "53d19055f788b054ce3a177ccebb6ad1d698c8d8c5b32961511cdfd216bfab2e" dependencies = [ "better_scoped_tls", "once_cell", @@ -2042,9 +2042,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_optimization" -version = "0.121.0" +version = "0.121.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6186848e501bd42494a8c74cc44200d41ec9fe14c16708a953824290cc9523e0" +checksum = "ab3967d4802307511e3f76e844695f80a3a339e67f5567b1f3b4c615b5e75218" dependencies = [ "ahash", "dashmap", From 91dafd327d023c0b462b76b394f6410742900b9a Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Mon, 9 May 2022 22:35:53 +0200 Subject: [PATCH 11/24] Reresolve to set global_mark for generated vars --- .../js/core/src/global_replacer.rs | 14 +++----------- packages/transformers/js/core/src/hoist.rs | 18 ++---------------- packages/transformers/js/core/src/lib.rs | 18 ++++++++++++++++-- .../transformers/js/core/src/node_replacer.rs | 14 +++----------- 4 files changed, 24 insertions(+), 40 deletions(-) diff --git a/packages/transformers/js/core/src/global_replacer.rs b/packages/transformers/js/core/src/global_replacer.rs index 3237b0f7e0d..d91aca37af9 100644 --- a/packages/transformers/js/core/src/global_replacer.rs +++ b/packages/transformers/js/core/src/global_replacer.rs @@ -18,7 +18,6 @@ pub struct GlobalReplacer<'a> { pub project_root: &'a Path, pub filename: &'a Path, pub decls: &'a mut HashSet<(JsWord, SyntaxContext)>, - pub global_mark: swc_common::Mark, pub scope_hoist: bool, } @@ -150,15 +149,8 @@ impl<'a> Fold for GlobalReplacer<'a> { } } -fn create_decl_stmt( - name: swc_atoms::JsWord, - global_mark: swc_common::Mark, - init: ast::Expr, -) -> (ast::Stmt, SyntaxContext) { - let span = DUMMY_SP - // TODO this shouldn't actually be marked global because it's generated - .apply_mark(global_mark) - .apply_mark(Mark::fresh(Mark::root())); +fn create_decl_stmt(name: swc_atoms::JsWord, init: ast::Expr) -> (ast::Stmt, SyntaxContext) { + let span = DUMMY_SP.apply_mark(Mark::fresh(Mark::root())); ( ast::Stmt::Decl(ast::Decl::Var(ast::VarDecl { @@ -185,7 +177,7 @@ impl GlobalReplacer<'_> { id.span.ctxt = *ctxt; false } else { - let (decl, ctxt) = create_decl_stmt(id.sym.clone(), self.global_mark, expr(self)); + let (decl, ctxt) = create_decl_stmt(id.sym.clone(), expr(self)); id.span.ctxt = ctxt; diff --git a/packages/transformers/js/core/src/hoist.rs b/packages/transformers/js/core/src/hoist.rs index 6f9b4a1b604..1a9f9783f6a 100644 --- a/packages/transformers/js/core/src/hoist.rs +++ b/packages/transformers/js/core/src/hoist.rs @@ -785,10 +785,6 @@ impl<'a> Fold for Hoist<'a> { return Ident::new("$parcel$global".into(), node.span); } - // TODO - // neither ctxt == DUMMY_SP.apply_mark(global_mark) - // nor span.has_mark(self.collect.global_mark) - // are correct. if node.span.has_mark(self.collect.global_mark) && self.collect.decls.contains(&id!(node)) && !self.collect.should_wrap @@ -1078,7 +1074,6 @@ pub struct Collect { pub decls: HashSet, pub ignore_mark: Mark, pub global_mark: Mark, - pub global_ctxt: SyntaxContext, pub static_cjs_exports: bool, pub has_cjs_exports: bool, pub is_esm: bool, @@ -1145,7 +1140,6 @@ impl Collect { decls, ignore_mark, global_mark, - global_ctxt: SyntaxContext::empty().apply_mark(global_mark), static_cjs_exports: true, has_cjs_exports: false, is_esm: false, @@ -1554,11 +1548,7 @@ impl Visit for Collect { .or_insert_with(|| node.id.sym.clone()); } - // TODO - // neither ctxt == DUMMY_SP.apply_mark(global_mark) - // nor span.has_mark(self.collect.global_mark) - // are correct. - if self.in_assign && node.id.span.ctxt() == self.global_ctxt { + if self.in_assign && node.id.span.has_mark(self.global_mark) { self .non_const_bindings .entry(id!(node.id)) @@ -1583,11 +1573,7 @@ impl Visit for Collect { .or_insert_with(|| node.key.sym.clone()); } - // TODO - // neither ctxt == DUMMY_SP.apply_mark(global_mark) - // nor span.has_mark(self.collect.global_mark) - // are correct. - if self.in_assign && node.key.span.ctxt() == self.global_ctxt { + if self.in_assign && node.key.span.has_mark(self.global_mark) { self .non_const_bindings .entry(id!(node.key)) diff --git a/packages/transformers/js/core/src/lib.rs b/packages/transformers/js/core/src/lib.rs index 106154aa1f6..fd03b1c6603 100644 --- a/packages/transformers/js/core/src/lib.rs +++ b/packages/transformers/js/core/src/lib.rs @@ -345,7 +345,6 @@ pub fn transform(config: Config) -> Result { project_root: Path::new(&config.project_root), filename: Path::new(&config.filename), decls: &mut decls, - global_mark, scope_hoist: config.scope_hoist }, config.insert_node_globals && config.source_type != SourceType::Script @@ -370,6 +369,9 @@ pub fn transform(config: Config) -> Result { module.fold_with(&mut passes) }; + // regnerate decls after preset-env ran + let mut decls = collect_decls(&module); + let mut has_node_replacements = false; let module = module.fold_with( // Replace __dirname and __filename with placeholders in Node env @@ -381,7 +383,6 @@ pub fn transform(config: Config) -> Result { project_root: Path::new(&config.project_root), filename: Path::new(&config.filename), decls: &mut decls, - global_mark, scope_hoist: config.scope_hoist, has_node_replacements: &mut has_node_replacements, }, @@ -412,6 +413,19 @@ pub fn transform(config: Config) -> Result { return Ok(result); } + // Flush (JsWord, SyntaxContexts) into unique names and reresolve to + // set global_mark for all nodes, even generated ones. + // (This changes the syntax context ids and therefore invalidates decls) + let (decls, module) = if config.scope_hoist { + let module = module.fold_with(&mut chain!( + hygiene(), + resolver(unresolved_mark, global_mark, false) + )); + (collect_decls(&module), module) + } else { + (decls, module) + }; + let mut collect = Collect::new( source_map.clone(), decls, diff --git a/packages/transformers/js/core/src/node_replacer.rs b/packages/transformers/js/core/src/node_replacer.rs index 7a7db70d634..ac439e5eb85 100644 --- a/packages/transformers/js/core/src/node_replacer.rs +++ b/packages/transformers/js/core/src/node_replacer.rs @@ -18,7 +18,6 @@ pub struct NodeReplacer<'a> { pub project_root: &'a Path, pub filename: &'a Path, pub decls: &'a mut HashSet<(JsWord, SyntaxContext)>, - pub global_mark: swc_common::Mark, pub scope_hoist: bool, pub has_node_replacements: &'a mut bool, } @@ -184,15 +183,8 @@ impl<'a> Fold for NodeReplacer<'a> { } } -fn create_decl_stmt( - name: swc_atoms::JsWord, - global_mark: swc_common::Mark, - init: ast::Expr, -) -> (ast::Stmt, SyntaxContext) { - let span = DUMMY_SP - // TODO this shouldn't actually be marked global because it's generated - .apply_mark(global_mark) - .apply_mark(Mark::fresh(Mark::root())); +fn create_decl_stmt(name: swc_atoms::JsWord, init: ast::Expr) -> (ast::Stmt, SyntaxContext) { + let span = DUMMY_SP.apply_mark(Mark::fresh(Mark::root())); ( ast::Stmt::Decl(ast::Decl::Var(ast::VarDecl { @@ -219,7 +211,7 @@ impl NodeReplacer<'_> { id.span.ctxt = *ctxt; false } else { - let (decl, ctxt) = create_decl_stmt(id.sym.clone(), self.global_mark, expr(self)); + let (decl, ctxt) = create_decl_stmt(id.sym.clone(), expr(self)); id.span.ctxt = ctxt; From 7b33986ffbf8a6ceed6138ab90a7c850fdd7aed4 Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Tue, 10 May 2022 18:20:34 +0200 Subject: [PATCH 12/24] Fixup --- packages/transformers/js/core/src/lib.rs | 29 ++++++++++++------------ 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/packages/transformers/js/core/src/lib.rs b/packages/transformers/js/core/src/lib.rs index fd03b1c6603..c50ffe5b629 100644 --- a/packages/transformers/js/core/src/lib.rs +++ b/packages/transformers/js/core/src/lib.rs @@ -228,7 +228,6 @@ pub fn transform(config: Config) -> Result { let global_mark = Mark::fresh(Mark::root()); let unresolved_mark = Mark::fresh(Mark::root()); - let ignore_mark = Mark::fresh(Mark::root()); module = { let mut passes = chain!( // Decorators can use type information, so must run before the TypeScript pass. @@ -391,6 +390,21 @@ pub fn transform(config: Config) -> Result { ); result.has_node_replacements = has_node_replacements; + // Flush (JsWord, SyntaxContexts) into unique names and reresolve to + // set global_mark for all nodes, even generated ones. + // - This changes the syntax context ids and therefore invalidates decls + // - This will also remove any other other marks (like ignore_mark) + let (decls, module) = if config.scope_hoist { + let module = module.fold_with(&mut chain!( + hygiene(), + resolver(unresolved_mark, global_mark, false) + )); + (collect_decls(&module), module) + } else { + (decls, module) + }; + + let ignore_mark = Mark::fresh(Mark::root()); let module = module.fold_with( // Collect dependencies &mut dependency_collector( @@ -413,19 +427,6 @@ pub fn transform(config: Config) -> Result { return Ok(result); } - // Flush (JsWord, SyntaxContexts) into unique names and reresolve to - // set global_mark for all nodes, even generated ones. - // (This changes the syntax context ids and therefore invalidates decls) - let (decls, module) = if config.scope_hoist { - let module = module.fold_with(&mut chain!( - hygiene(), - resolver(unresolved_mark, global_mark, false) - )); - (collect_decls(&module), module) - } else { - (decls, module) - }; - let mut collect = Collect::new( source_map.clone(), decls, From b1edad8a5fc3328d11f90664876668992909182d Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Tue, 10 May 2022 18:28:01 +0200 Subject: [PATCH 13/24] Bump --- Cargo.lock | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b0e3369e6a0..fd5f5ae3ffc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -941,15 +941,16 @@ dependencies = [ [[package]] name = "napi" -version = "2.4.1" +version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c43e69205d47ab5e43e5c98d63bd8a75d379d6631739b05dac26d5bcfb1a6ab" +checksum = "bbff174066eb7cd144e0fc5d4d82e47492fa2df6e29df5911c88a54cd4d6daea" dependencies = [ "ctor", "lazy_static", "napi-sys", "serde", "serde_json", + "thread_local", ] [[package]] @@ -960,9 +961,9 @@ checksum = "ebd4419172727423cf30351406c54f6cc1b354a2cfb4f1dba3e6cd07f6d5522b" [[package]] name = "napi-derive" -version = "2.4.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478e2cae8e7e7b2f8755a5da545641ae59c72dc495dc91077e586ce8b7d9bd67" +checksum = "bffed314331505d8a4ce6831dfb5fff9bad37113344ff55824bd398eb3157a1d" dependencies = [ "convert_case", "napi-derive-backend", @@ -973,9 +974,9 @@ dependencies = [ [[package]] name = "napi-derive-backend" -version = "1.0.31" +version = "1.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bcdaac1ddb4a5172aebd0a3132caf8434e8af801213b52c67df2749ce6f8754" +checksum = "a5cab83da14f4202c1f3858dde5b68e1d8c5bb7ee804c5955911cbbe00b835b8" dependencies = [ "convert_case", "once_cell", @@ -987,9 +988,9 @@ dependencies = [ [[package]] name = "napi-sys" -version = "2.2.1" +version = "2.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91c795d73a38586eadcb9bfda5be786b45620e3fe5fae04e5d3623d7d6abb3d0" +checksum = "529671ebfae679f2ce9630b62dd53c72c56b3eb8b2c852e7e2fa91704ff93d67" dependencies = [ "libloading", ] @@ -1944,9 +1945,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_base" -version = "0.82.4" +version = "0.82.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d19055f788b054ce3a177ccebb6ad1d698c8d8c5b32961511cdfd216bfab2e" +checksum = "c8a9408c084d8bebf3edb19668aa6001577fe215c3e4e5c5436503a8187cab8b" dependencies = [ "better_scoped_tls", "once_cell", @@ -2042,9 +2043,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_optimization" -version = "0.121.1" +version = "0.121.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab3967d4802307511e3f76e844695f80a3a339e67f5567b1f3b4c615b5e75218" +checksum = "be46a9d5d6250afb88ab5bf126db8c34ac121cc953ed8d6f912f7da9e2bea670" dependencies = [ "ahash", "dashmap", @@ -2228,9 +2229,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ff7c592601f11445996a06f8ad0c27f094a58857c2f89e97974ab9235b92c52" +checksum = "04066589568b72ec65f42d65a1a52436e954b168773148893c020269563decf2" dependencies = [ "proc-macro2", "quote", From b24752fc32c22e79b69143d1a23d739798288930 Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Tue, 10 May 2022 21:48:35 +0200 Subject: [PATCH 14/24] Flowify sourcemaps.js --- .../core/integration-tests/test/sourcemaps.js | 63 ++++++++++++++----- 1 file changed, 46 insertions(+), 17 deletions(-) diff --git a/packages/core/integration-tests/test/sourcemaps.js b/packages/core/integration-tests/test/sourcemaps.js index 3594231d2c4..79a3486fed2 100644 --- a/packages/core/integration-tests/test/sourcemaps.js +++ b/packages/core/integration-tests/test/sourcemaps.js @@ -1,6 +1,9 @@ +// @flow import assert from 'assert'; +import invariant from 'assert'; import path from 'path'; import SourceMap from '@parcel/source-map'; +import type {InitialParcelOptions} from '@parcel/types'; import { bundle as _bundle, inputFS, @@ -11,11 +14,11 @@ import { mergeParcelOptions, } from '@parcel/test-utils'; import {loadSourceMapUrl} from '@parcel/utils'; +import nullthrows from 'nullthrows'; -const bundle = (name, opts = {}) => { +const bundle = (name, opts?: InitialParcelOptions) => { return _bundle( name, - // $FlowFixMe mergeParcelOptions( { defaultTargetOptions: { @@ -43,7 +46,15 @@ function checkSourceMapping({ generatedStr = str, sourcePath, msg = '', -}) { +}: {| + map: SourceMap, + source: string, + generated: string, + str: string, + generatedStr?: string, + sourcePath: string, + msg?: string, +|}) { assert( generated.indexOf(generatedStr) !== -1, "'" + generatedStr + "' not found in generated code", @@ -90,13 +101,14 @@ function checkSourceMapping({ mapping = map.indexedMappingToStringMapping(mappings[closestIndex]); } - assert(mapping, "no mapping for '" + str + "'" + msg); + invariant(mapping, "no mapping for '" + str + "'" + msg); let generatedDiff = { line: generatedPosition.line - mapping.generated.line, column: generatedPosition.column - mapping.generated.column, }; + invariant(mapping.original); let computedSourcePosition = { line: mapping.original.line + generatedDiff.line, column: mapping.original.column + generatedDiff.column, @@ -610,7 +622,9 @@ describe('sourcemaps', function () { '/integration/sourcemap-css/style.css', ); - await bundle(inputFilePath, {minify}); + await bundle(inputFilePath, { + defaultTargetOptions: {shouldOptimize: minify}, + }); let distDir = path.join(__dirname, '../dist/'); let filename = path.join(distDir, 'style.css'); let raw = await outputFS.readFile(filename, 'utf8'); @@ -656,7 +670,9 @@ describe('sourcemaps', function () { '/integration/sourcemap-css-import/style.css', ); - await bundle(inputFilePath, {minify}); + await bundle(inputFilePath, { + defaultTargetOptions: {shouldOptimize: minify}, + }); let distDir = path.join(__dirname, '../dist/'); let filename = path.join(distDir, 'style.css'); let raw = await outputFS.readFile(filename, 'utf8'); @@ -673,22 +689,33 @@ describe('sourcemaps', function () { sourceMap.addVLQMap(map); let mapData = sourceMap.getMap(); - assert.deepEqual(mapData.sources, [ - 'other-style.css', - 'another-style.css', - 'style.css', - ]); + let sources = minify + ? ['style.css', 'other-style.css', 'another-style.css'] + : ['other-style.css', 'another-style.css', 'style.css']; + assert.deepEqual(mapData.sources, sources); let otherStyle = await inputFS.readFile( - path.join(path.dirname(filename), map.sourceRoot, map.sources[0]), + path.join( + path.dirname(filename), + map.sourceRoot, + map.sources[sources.indexOf('other-style.css')], + ), 'utf-8', ); let anotherStyle = await inputFS.readFile( - path.join(path.dirname(filename), map.sourceRoot, map.sources[1]), + path.join( + path.dirname(filename), + map.sourceRoot, + map.sources[sources.indexOf('another-style.css')], + ), 'utf-8', ); let style = await inputFS.readFile( - path.join(path.dirname(filename), map.sourceRoot, map.sources[2]), + path.join( + path.dirname(filename), + map.sourceRoot, + map.sources[sources.indexOf('style.css')], + ), 'utf8', ); @@ -1123,7 +1150,9 @@ describe('sourcemaps', function () { __dirname, '/integration/sourcemap-css-existing/style.css', ); - let b = await bundle(sourceFilename, {minify}); + let b = await bundle(sourceFilename, { + defaultTargetOptions: {shouldOptimize: minify}, + }); let filename = b.getBundles()[0].filePath; let raw = await outputFS.readFile(filename, 'utf8'); @@ -1281,7 +1310,7 @@ describe('sourcemaps', function () { let sourceMap = new SourceMap('/'); sourceMap.addVLQMap(map); let sourcePath = 'index.js'; - let sourceContent = sourceMap.getSourceContent(sourcePath); + let sourceContent = nullthrows(sourceMap.getSourceContent(sourcePath)); checkSourceMapping({ map: sourceMap, @@ -1326,7 +1355,7 @@ describe('sourcemaps', function () { let sourceMap = new SourceMap('/'); sourceMap.addVLQMap(map); let sourcePath = 'index.tsx'; - let sourceContent = sourceMap.getSourceContent(sourcePath); + let sourceContent = nullthrows(sourceMap.getSourceContent(sourcePath)); checkSourceMapping({ map: sourceMap, From c5cfd7e046165e638a86c475a239ebbb2a530dae Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Tue, 10 May 2022 22:13:25 +0200 Subject: [PATCH 15/24] Add test for renaming swc inserted vars --- .../scope-hoisting/es6/rename-helpers/a.js | 4 ++++ .../scope-hoisting/es6/rename-helpers/b.js | 5 +++++ .../scope-hoisting/es6/rename-helpers/c.js | 5 +++++ .../es6/rename-helpers/package.json | 3 +++ .../scope-hoisting/es6/rename-helpers/yarn.lock | 0 .../integration-tests/test/scope-hoisting.js | 17 +++++++++++++++++ 6 files changed, 34 insertions(+) create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/rename-helpers/a.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/rename-helpers/b.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/rename-helpers/c.js create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/rename-helpers/package.json create mode 100644 packages/core/integration-tests/test/integration/scope-hoisting/es6/rename-helpers/yarn.lock diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/rename-helpers/a.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/rename-helpers/a.js new file mode 100644 index 00000000000..da98e4e5420 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/rename-helpers/a.js @@ -0,0 +1,4 @@ +import {B} from './b.js'; +import {C} from './c.js'; + +output = [new B()[Symbol.toStringTag], new C()[Symbol.toStringTag]]; diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/rename-helpers/b.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/rename-helpers/b.js new file mode 100644 index 00000000000..b55a15508b7 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/rename-helpers/b.js @@ -0,0 +1,5 @@ +export class B { + get [Symbol.toStringTag]() { + return '1'; + } +} diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/rename-helpers/c.js b/packages/core/integration-tests/test/integration/scope-hoisting/es6/rename-helpers/c.js new file mode 100644 index 00000000000..3f9efc572e8 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/rename-helpers/c.js @@ -0,0 +1,5 @@ +export class C { + get [Symbol.toStringTag]() { + return '2'; + } +} diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/rename-helpers/package.json b/packages/core/integration-tests/test/integration/scope-hoisting/es6/rename-helpers/package.json new file mode 100644 index 00000000000..601436668c0 --- /dev/null +++ b/packages/core/integration-tests/test/integration/scope-hoisting/es6/rename-helpers/package.json @@ -0,0 +1,3 @@ +{ + "browserslist": "Chrome 50" +} diff --git a/packages/core/integration-tests/test/integration/scope-hoisting/es6/rename-helpers/yarn.lock b/packages/core/integration-tests/test/integration/scope-hoisting/es6/rename-helpers/yarn.lock new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/core/integration-tests/test/scope-hoisting.js b/packages/core/integration-tests/test/scope-hoisting.js index 63ddafd760a..2615f4f7836 100644 --- a/packages/core/integration-tests/test/scope-hoisting.js +++ b/packages/core/integration-tests/test/scope-hoisting.js @@ -169,6 +169,23 @@ describe('scope hoisting', function () { assert.equal(output, 2); }); + it('supports renaming helpers inserted during transpiling', async function () { + let b = await bundle( + path.join( + __dirname, + '/integration/scope-hoisting/es6/rename-helpers/a.js', + ), + ); + let contents = await outputFS.readFile( + b.getBundles()[0].filePath, + 'utf8', + ); + assert(/let \S* = Symbol.toStringTag;/.test(contents)); + + let output = await run(b); + assert.deepEqual(output, ['1', '2']); + }); + it('supports renaming imports', async function () { let b = await bundle( path.join( From 7e55659b683791318ff4096c2651aed3fbb6ba3f Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Wed, 11 May 2022 09:42:38 +0200 Subject: [PATCH 16/24] Bump --- Cargo.lock | 100 +++++++++++------- packages/transformers/js/core/Cargo.toml | 4 +- .../js/core/src/dependency_collector.rs | 1 - .../js/core/src/global_replacer.rs | 1 - packages/transformers/js/core/src/lib.rs | 14 +-- .../transformers/js/core/src/node_replacer.rs | 1 - 6 files changed, 73 insertions(+), 48 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fd5f5ae3ffc..59d1a8cadd1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1785,9 +1785,9 @@ dependencies = [ [[package]] name = "swc_common" -version = "0.17.25" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "766ad22c1cb8586c038ccba7371a4903a6074b53ee4ba8980a52f502413f120e" +checksum = "c5988fd245a86176271951c089f9144b7b48014bc1212872f9bd194f5f0f9dfd" dependencies = [ "ahash", "ast_node", @@ -1812,11 +1812,37 @@ dependencies = [ "url", ] +[[package]] +name = "swc_config" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3bddf0fdedf66f8f8b40b9689e6c600ba86d41fca8d25970ab2d2fbd8190046" +dependencies = [ + "anyhow", + "indexmap", + "serde", + "serde_json", + "swc_config_macro", +] + +[[package]] +name = "swc_config_macro" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb64bc03d90fd5c90d6ab917bb2b1d7fbd31957df39e31ea24a3f554b4372251" +dependencies = [ + "pmutil", + "proc-macro2", + "quote", + "swc_macros_common", + "syn", +] + [[package]] name = "swc_ecma_ast" -version = "0.77.1" +version = "0.78.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50cc75d1a709e466c1bcab59b88c01a04ba963237642fe7b6c0de071babb6a31" +checksum = "6ed68ad13e4489f309ffed9d302337d7c8bde11d00b8b275b7aa7fda4da035bf" dependencies = [ "is-macro", "num-bigint", @@ -1829,9 +1855,9 @@ dependencies = [ [[package]] name = "swc_ecma_codegen" -version = "0.106.0" +version = "0.107.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eab1aff3d7272aefa9a222a570b3cdca4fc6b6871beb24576c7197e2e37795c" +checksum = "b08ceb40519303a12fa987ff2d1888cb64e654adab7d5f475cc0b389ff3b0fba" dependencies = [ "bitflags", "memchr", @@ -1861,9 +1887,9 @@ dependencies = [ [[package]] name = "swc_ecma_loader" -version = "0.29.1" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e719f646201c51964a2c7b2a3dd79fadb563fc6a72454a7bc093d18c4aad44b0" +checksum = "b31692d1ac0d90760a3e835e520350bb596ebd837fd857e326b721260d8005a7" dependencies = [ "ahash", "anyhow", @@ -1880,9 +1906,9 @@ dependencies = [ [[package]] name = "swc_ecma_parser" -version = "0.103.0" +version = "0.104.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e0460e77eb0e9177452deacab627930441c4b4b2ec996596753ed219e07f533" +checksum = "efb97dc6efc95313dedc5158055cc811da77395ef7b54be61948b5ad097a3671" dependencies = [ "either", "enum_kind", @@ -1900,9 +1926,9 @@ dependencies = [ [[package]] name = "swc_ecma_preset_env" -version = "0.126.0" +version = "0.128.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bc86aa97deedb4c0eadd1954086fdd20e1aa28f44c0e38424839a10733559b4" +checksum = "b0f93e848d10e887338f9739ccad74bd7ac2aa51a16dbba5ad13d7b39d898378" dependencies = [ "ahash", "anyhow", @@ -1925,9 +1951,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms" -version = "0.151.0" +version = "0.153.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c0d55c5730f69e1a1b8b75b119764d18655cbcdaf67fdac2504d957fa99456a" +checksum = "5755ffcda1942d7c261a8acd3ae49fe686e2b7476eeecd6cb5e377a95eb1f5d9" dependencies = [ "swc_atoms", "swc_common", @@ -1945,9 +1971,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_base" -version = "0.82.5" +version = "0.84.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8a9408c084d8bebf3edb19668aa6001577fe215c3e4e5c5436503a8187cab8b" +checksum = "900f108a324d18e40c74a4597393c6ded1a3c24f86a0092ae6e95c485c74da48" dependencies = [ "better_scoped_tls", "once_cell", @@ -1966,9 +1992,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_classes" -version = "0.70.0" +version = "0.72.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03f232b5168056e1c0a11c3b94bd81f8dfedc77f0750d64086fdfee410a746f9" +checksum = "74319c4170af96434ac4e1779890b894a57203ddd4974414bdef853938d4825f" dependencies = [ "swc_atoms", "swc_common", @@ -1980,9 +2006,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_compat" -version = "0.96.0" +version = "0.98.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45f76fa2c18e37382e322ca6684fd0443c58c5e90e0beb62d2f193099694a281" +checksum = "d49ce0209714934dc0c9d854ce6447239926c2c5ca693b8cd6964b364d50b0cc" dependencies = [ "ahash", "arrayvec", @@ -1994,6 +2020,7 @@ dependencies = [ "smallvec", "swc_atoms", "swc_common", + "swc_config", "swc_ecma_ast", "swc_ecma_transforms_base", "swc_ecma_transforms_classes", @@ -2019,9 +2046,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_module" -version = "0.109.0" +version = "0.111.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c7d72e5a1e109a3f69cbf4340948af2a458704ad82fb2863d72efa7159919a" +checksum = "e6baca7d64bf60c7d184d647dae50dea51a8edcc262ffaceb07a91b81d64aa36" dependencies = [ "Inflector", "ahash", @@ -2043,9 +2070,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_optimization" -version = "0.121.3" +version = "0.123.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be46a9d5d6250afb88ab5bf126db8c34ac121cc953ed8d6f912f7da9e2bea670" +checksum = "19b6c32214722f4f2cb33d978aa62b97f8e189f5853849d0da9d3eca905da73f" dependencies = [ "ahash", "dashmap", @@ -2066,9 +2093,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_proposal" -version = "0.104.0" +version = "0.106.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e804edf118cb53e8e9a925ea5cae348cb1f5e8b32ef4484539cba7ec65e3df" +checksum = "47a3124e5f88b38b762316dd71d3e28674a3b1a773a1912785a5317a1811ccdd" dependencies = [ "either", "serde", @@ -2085,9 +2112,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_react" -version = "0.111.0" +version = "0.113.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53ee0c5596557060187467a6c491a2d7fdfe81a243bbfc1d1e9ab4f4420488b0" +checksum = "a32b923408e146e3caec63e829f81a7979c0efa46dfec20656fed7bd0fe7a917" dependencies = [ "ahash", "base64 0.13.0", @@ -2100,6 +2127,7 @@ dependencies = [ "string_enum", "swc_atoms", "swc_common", + "swc_config", "swc_ecma_ast", "swc_ecma_parser", "swc_ecma_transforms_base", @@ -2110,9 +2138,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_typescript" -version = "0.114.0" +version = "0.116.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63f0809f36a8a6b3160c088aab47040a5de8f793b979e641a8e10b55d7e8f49c" +checksum = "8dcda94818a971a654899b1a5fe04cad5435da5e3542ebbcc4ecbb027e904e5d" dependencies = [ "serde", "swc_atoms", @@ -2126,9 +2154,9 @@ dependencies = [ [[package]] name = "swc_ecma_utils" -version = "0.83.1" +version = "0.85.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f42972203e18602ea8a8a4e382c2453e95ad6a1f2fc28764b2a02b60f05e0a20" +checksum = "dff9d469b284a48317a695a81346a9609d04ce3a31da4493aac508e0d48a4257" dependencies = [ "indexmap", "once_cell", @@ -2141,9 +2169,9 @@ dependencies = [ [[package]] name = "swc_ecma_visit" -version = "0.63.0" +version = "0.64.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc615741cb42e81dd524f040062e34c7dff692329799ef1fb686211de2aa4d18" +checksum = "f2d3783a0dd1e301ae2945ab1241405f913427f9512ec62756d3d2072f7c21bb" dependencies = [ "num-bigint", "swc_atoms", @@ -2155,9 +2183,9 @@ dependencies = [ [[package]] name = "swc_ecmascript" -version = "0.154.1" +version = "0.156.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f525222f3600088534b0d33c3592c07ebc988fe313207daf8c3ef57dd4dd33d" +checksum = "67f282a0e17a9f48d72b04f611f0553bad26049b7b1bf2fa6b9074682f46462e" dependencies = [ "swc_ecma_ast", "swc_ecma_codegen", diff --git a/packages/transformers/js/core/Cargo.toml b/packages/transformers/js/core/Cargo.toml index 17b73b2782e..71d4e6a6067 100644 --- a/packages/transformers/js/core/Cargo.toml +++ b/packages/transformers/js/core/Cargo.toml @@ -8,8 +8,8 @@ edition = "2018" crate-type = ["rlib"] [dependencies] -swc_ecmascript = { version = "0.154.1", features = ["parser", "transforms", "module", "optimization", "react", "typescript", "utils", "visit", "codegen", "utils", "preset_env"] } -swc_common = { version = "0.17.25", features = ["tty-emitter", "sourcemap"] } +swc_ecmascript = { version = "0.156.0", features = ["parser", "transforms", "module", "optimization", "react", "typescript", "utils", "visit", "codegen", "utils", "preset_env"] } +swc_common = { version = "0.18.0", features = ["tty-emitter", "sourcemap"] } swc_atoms = "0.2.11" indoc = "1.0.3" serde = "1.0.123" diff --git a/packages/transformers/js/core/src/dependency_collector.rs b/packages/transformers/js/core/src/dependency_collector.rs index f28bcf923c3..b1d83f65650 100644 --- a/packages/transformers/js/core/src/dependency_collector.rs +++ b/packages/transformers/js/core/src/dependency_collector.rs @@ -7,7 +7,6 @@ use serde::{Deserialize, Serialize}; use swc_atoms::JsWord; use swc_common::{Mark, SourceMap, Span, SyntaxContext, DUMMY_SP}; use swc_ecmascript::ast::{self, Callee, MemberProp}; -use swc_ecmascript::utils::ident::IdentLike; use swc_ecmascript::visit::{Fold, FoldWith}; use crate::fold_member_expr_skip_prop; diff --git a/packages/transformers/js/core/src/global_replacer.rs b/packages/transformers/js/core/src/global_replacer.rs index d91aca37af9..6f9ffdbf7fb 100644 --- a/packages/transformers/js/core/src/global_replacer.rs +++ b/packages/transformers/js/core/src/global_replacer.rs @@ -5,7 +5,6 @@ use std::path::Path; use swc_atoms::JsWord; use swc_common::{Mark, SourceMap, SyntaxContext, DUMMY_SP}; use swc_ecmascript::ast::{self, ComputedPropName}; -use swc_ecmascript::utils::ident::IdentLike; use swc_ecmascript::visit::{Fold, FoldWith}; use crate::dependency_collector::{DependencyDescriptor, DependencyKind}; diff --git a/packages/transformers/js/core/src/lib.rs b/packages/transformers/js/core/src/lib.rs index c50ffe5b629..9f0a6e87419 100644 --- a/packages/transformers/js/core/src/lib.rs +++ b/packages/transformers/js/core/src/lib.rs @@ -202,14 +202,14 @@ pub fn transform(config: Config) -> Result { || { let mut react_options = react::Options::default(); if config.is_jsx { - react_options.use_spread = true; + react_options.use_spread = Some(true); if let Some(jsx_pragma) = &config.jsx_pragma { - react_options.pragma = jsx_pragma.clone(); + react_options.pragma = Some(jsx_pragma.clone()); } if let Some(jsx_pragma_frag) = &config.jsx_pragma_frag { - react_options.pragma_frag = jsx_pragma_frag.clone(); + react_options.pragma_frag = Some(jsx_pragma_frag.clone()); } - react_options.development = config.is_development; + react_options.development = Some(config.is_development); react_options.refresh = if config.react_refresh { Some(react::RefreshOptions::default()) } else { @@ -218,7 +218,7 @@ pub fn transform(config: Config) -> Result { react_options.runtime = if config.automatic_jsx_runtime { if let Some(import_source) = &config.jsx_import_source { - react_options.import_source = import_source.clone(); + react_options.import_source = Some(import_source.clone()); } Some(react::Runtime::Automatic) } else { @@ -244,8 +244,8 @@ pub fn transform(config: Config) -> Result { typescript::strip_with_jsx( source_map.clone(), typescript::Config { - pragma: Some(react_options.pragma.clone()), - pragma_frag: Some(react_options.pragma_frag.clone()), + pragma: react_options.pragma.clone(), + pragma_frag: react_options.pragma_frag.clone(), ..Default::default() }, Some(&comments), diff --git a/packages/transformers/js/core/src/node_replacer.rs b/packages/transformers/js/core/src/node_replacer.rs index ac439e5eb85..cf8d1925df8 100644 --- a/packages/transformers/js/core/src/node_replacer.rs +++ b/packages/transformers/js/core/src/node_replacer.rs @@ -5,7 +5,6 @@ use std::path::Path; use swc_atoms::JsWord; use swc_common::{Mark, SourceMap, SyntaxContext, DUMMY_SP}; use swc_ecmascript::ast::{self}; -use swc_ecmascript::utils::ident::IdentLike; use swc_ecmascript::visit::{Fold, FoldWith}; use crate::dependency_collector::{DependencyDescriptor, DependencyKind}; From 73a4b7026c370e29efcaaf6224ef9563dab90058 Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Wed, 11 May 2022 19:42:08 +0200 Subject: [PATCH 17/24] Handle dummy locs gracefully --- packages/transformers/js/core/src/utils.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/transformers/js/core/src/utils.rs b/packages/transformers/js/core/src/utils.rs index 6dec6e238c2..75efb75071f 100644 --- a/packages/transformers/js/core/src/utils.rs +++ b/packages/transformers/js/core/src/utils.rs @@ -185,6 +185,15 @@ pub struct SourceLocation { impl SourceLocation { pub fn from(source_map: &swc_common::SourceMap, span: swc_common::Span) -> Self { + if span.lo.is_dummy() || span.hi.is_dummy() { + return SourceLocation { + start_line: 1, + start_col: 1, + end_line: 1, + end_col: 1, + }; + } + let start = source_map.lookup_char_pos(span.lo); let end = source_map.lookup_char_pos(span.hi); // - SWC's columns are exclusive, ours are inclusive (column - 1) From 6d0b63553b2d7a10983ecc9606f617859abfa670 Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Wed, 11 May 2022 22:11:12 +0200 Subject: [PATCH 18/24] Fixup test assertion --- packages/core/integration-tests/test/javascript.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/integration-tests/test/javascript.js b/packages/core/integration-tests/test/javascript.js index 2ca75a87198..6413a2c3baa 100644 --- a/packages/core/integration-tests/test/javascript.js +++ b/packages/core/integration-tests/test/javascript.js @@ -5522,7 +5522,7 @@ describe('javascript', function () { }, end: { line: 1, - column: 0, + column: 1, }, }, ], From c322aa9b93ce3aa144947138ae56a1f767e33f5c Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Fri, 13 May 2022 18:00:50 +0200 Subject: [PATCH 19/24] Recollect decls only if preset-env ran --- packages/transformers/js/core/src/lib.rs | 39 ++++++++++--------- packages/transformers/js/src/JSTransformer.js | 3 +- 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/packages/transformers/js/core/src/lib.rs b/packages/transformers/js/core/src/lib.rs index 9f0a6e87419..14cec2840a8 100644 --- a/packages/transformers/js/core/src/lib.rs +++ b/packages/transformers/js/core/src/lib.rs @@ -279,11 +279,13 @@ pub fn transform(config: Config) -> Result { ..Default::default() }; let versions = targets_to_versions(&config.targets); + let mut should_run_preset_env = false; if !config.is_swc_helpers { // Avoid transpiling @swc/helpers so that we don't cause infinite recursion. // Filter the versions for preset_env only so that syntax support checks // (e.g. in esm2cjs) still work correctly. if let Some(versions) = versions { + should_run_preset_env = true; preset_env_config.targets = Some(Targets::Versions(versions)); preset_env_config.shipped_proposals = true; preset_env_config.mode = Some(Entry); @@ -321,6 +323,7 @@ pub fn transform(config: Config) -> Result { inline_fs( config.filename.as_str(), source_map.clone(), + // TODO this clone is unnecessary if we get the lifetimes right decls.clone(), global_mark, &config.project_root, @@ -346,21 +349,18 @@ pub fn transform(config: Config) -> Result { decls: &mut decls, scope_hoist: config.scope_hoist }, - config.insert_node_globals && config.source_type != SourceType::Script + config.insert_node_globals ), // Transpile new syntax to older syntax if needed - { - let should_transpile = preset_env_config.targets.is_some(); - Optional::new( - preset_env( - global_mark, - Some(&comments), - preset_env_config, - Default::default(), - ), - should_transpile, - ) - }, + Optional::new( + preset_env( + global_mark, + Some(&comments), + preset_env_config, + Default::default(), + ), + should_run_preset_env, + ), // Inject SWC helpers if needed. helpers::inject_helpers(), ); @@ -368,10 +368,14 @@ pub fn transform(config: Config) -> Result { module.fold_with(&mut passes) }; - // regnerate decls after preset-env ran - let mut decls = collect_decls(&module); + let mut decls = if should_run_preset_env { + // Regnerate decls after preset-env ran. Our own transforms correctly update + // the decls during modifications. + collect_decls(&module) + } else { + decls + }; - let mut has_node_replacements = false; let module = module.fold_with( // Replace __dirname and __filename with placeholders in Node env &mut Optional::new( @@ -383,12 +387,11 @@ pub fn transform(config: Config) -> Result { filename: Path::new(&config.filename), decls: &mut decls, scope_hoist: config.scope_hoist, - has_node_replacements: &mut has_node_replacements, + has_node_replacements: &mut result.has_node_replacements, }, config.node_replacer, ), ); - result.has_node_replacements = has_node_replacements; // Flush (JsWord, SyntaxContexts) into unique names and reresolve to // set global_mark for all nodes, even generated ones. diff --git a/packages/transformers/js/src/JSTransformer.js b/packages/transformers/js/src/JSTransformer.js index c8cbf426f4e..2b3cb225b8a 100644 --- a/packages/transformers/js/src/JSTransformer.js +++ b/packages/transformers/js/src/JSTransformer.js @@ -387,7 +387,8 @@ export default (new Transformer({ project_root: options.projectRoot, replace_env: !asset.env.isNode(), inline_fs: Boolean(config?.inlineFS) && !asset.env.isNode(), - insert_node_globals: !asset.env.isNode(), + insert_node_globals: + !asset.env.isNode() && asset.env.sourceType !== 'script', node_replacer: asset.env.isNode(), is_browser: asset.env.isBrowser(), is_worker: asset.env.isWorker(), From 15fe2190f9ea6eef8c4aa75495e8f1bf9fad7c04 Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Fri, 13 May 2022 18:00:56 +0200 Subject: [PATCH 20/24] Bump --- Cargo.lock | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 59d1a8cadd1..28477ad52a1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -941,9 +941,9 @@ dependencies = [ [[package]] name = "napi" -version = "2.4.2" +version = "2.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbff174066eb7cd144e0fc5d4d82e47492fa2df6e29df5911c88a54cd4d6daea" +checksum = "eba1b04555247b935187ea1dddac523ebc470c45806501d7203ed1bec7fa26b2" dependencies = [ "ctor", "lazy_static", @@ -1785,9 +1785,9 @@ dependencies = [ [[package]] name = "swc_common" -version = "0.18.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5988fd245a86176271951c089f9144b7b48014bc1212872f9bd194f5f0f9dfd" +checksum = "4ec38be09c030adbebf10014d0157df25826dba7254f60ef30d73cc24c267a06" dependencies = [ "ahash", "ast_node", @@ -1814,9 +1814,9 @@ dependencies = [ [[package]] name = "swc_config" -version = "0.1.0" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3bddf0fdedf66f8f8b40b9689e6c600ba86d41fca8d25970ab2d2fbd8190046" +checksum = "b8bb05ef56c14b95dd7e62e95960153af811b9a447287f1f6ca59f1337fb83d4" dependencies = [ "anyhow", "indexmap", @@ -1887,9 +1887,9 @@ dependencies = [ [[package]] name = "swc_ecma_loader" -version = "0.30.0" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b31692d1ac0d90760a3e835e520350bb596ebd837fd857e326b721260d8005a7" +checksum = "0f7baaa5b99cdf49e830caf54b837891c5c38275ac94c31d555859be95f6479c" dependencies = [ "ahash", "anyhow", @@ -1971,9 +1971,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_base" -version = "0.84.0" +version = "0.84.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900f108a324d18e40c74a4597393c6ded1a3c24f86a0092ae6e95c485c74da48" +checksum = "6be33c0ca26095f5d8e83f9df14f5798233e29f09125d3afaf925b70920da8a1" dependencies = [ "better_scoped_tls", "once_cell", @@ -2070,9 +2070,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_optimization" -version = "0.123.0" +version = "0.123.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b6c32214722f4f2cb33d978aa62b97f8e189f5853849d0da9d3eca905da73f" +checksum = "cd5c7efdde630a05a3f6ff453dd54946011f4cdc92fe94fbb081f87dcd72b403" dependencies = [ "ahash", "dashmap", @@ -2257,9 +2257,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.93" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04066589568b72ec65f42d65a1a52436e954b168773148893c020269563decf2" +checksum = "a07e33e919ebcd69113d5be0e4d70c5707004ff45188910106854f38b960df4a" dependencies = [ "proc-macro2", "quote", From f429db5155dd94d57f48ade8170b6675a4270fea Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Fri, 13 May 2022 18:34:53 +0200 Subject: [PATCH 21/24] Some performance hacks --- .../js/core/src/global_replacer.rs | 24 +++-------------- packages/transformers/js/core/src/lib.rs | 6 ++++- .../transformers/js/core/src/node_replacer.rs | 24 +++-------------- packages/transformers/js/core/src/utils.rs | 26 +++++++++++++++++++ 4 files changed, 37 insertions(+), 43 deletions(-) diff --git a/packages/transformers/js/core/src/global_replacer.rs b/packages/transformers/js/core/src/global_replacer.rs index 6f9ffdbf7fb..f2c5417e5f2 100644 --- a/packages/transformers/js/core/src/global_replacer.rs +++ b/packages/transformers/js/core/src/global_replacer.rs @@ -8,11 +8,12 @@ use swc_ecmascript::ast::{self, ComputedPropName}; use swc_ecmascript::visit::{Fold, FoldWith}; use crate::dependency_collector::{DependencyDescriptor, DependencyKind}; -use crate::utils::{create_require, SourceLocation, SourceType}; +use crate::utils::{create_global_decl_stmt, create_require, SourceLocation, SourceType}; pub struct GlobalReplacer<'a> { pub source_map: &'a SourceMap, pub items: &'a mut Vec, + pub global_mark: Mark, pub globals: HashMap, pub project_root: &'a Path, pub filename: &'a Path, @@ -148,25 +149,6 @@ impl<'a> Fold for GlobalReplacer<'a> { } } -fn create_decl_stmt(name: swc_atoms::JsWord, init: ast::Expr) -> (ast::Stmt, SyntaxContext) { - let span = DUMMY_SP.apply_mark(Mark::fresh(Mark::root())); - - ( - ast::Stmt::Decl(ast::Decl::Var(ast::VarDecl { - kind: ast::VarDeclKind::Var, - declare: false, - span: DUMMY_SP, - decls: vec![ast::VarDeclarator { - name: ast::Pat::Ident(ast::BindingIdent::from(ast::Ident::new(name, span))), - span: DUMMY_SP, - definite: false, - init: Some(Box::new(init)), - }], - })), - span.ctxt, - ) -} - impl GlobalReplacer<'_> { fn update_binding(&mut self, id: &mut ast::Ident, expr: F) -> bool where @@ -176,7 +158,7 @@ impl GlobalReplacer<'_> { id.span.ctxt = *ctxt; false } else { - let (decl, ctxt) = create_decl_stmt(id.sym.clone(), expr(self)); + let (decl, ctxt) = create_global_decl_stmt(id.sym.clone(), expr(self), self.global_mark); id.span.ctxt = ctxt; diff --git a/packages/transformers/js/core/src/lib.rs b/packages/transformers/js/core/src/lib.rs index 14cec2840a8..6778ad56ab6 100644 --- a/packages/transformers/js/core/src/lib.rs +++ b/packages/transformers/js/core/src/lib.rs @@ -343,6 +343,7 @@ pub fn transform(config: Config) -> Result { GlobalReplacer { source_map: &source_map, items: &mut global_deps, + global_mark, globals: HashMap::new(), project_root: Path::new(&config.project_root), filename: Path::new(&config.filename), @@ -382,6 +383,7 @@ pub fn transform(config: Config) -> Result { NodeReplacer { source_map: &source_map, items: &mut global_deps, + global_mark, globals: HashMap::new(), project_root: Path::new(&config.project_root), filename: Path::new(&config.filename), @@ -397,7 +399,9 @@ pub fn transform(config: Config) -> Result { // set global_mark for all nodes, even generated ones. // - This changes the syntax context ids and therefore invalidates decls // - This will also remove any other other marks (like ignore_mark) - let (decls, module) = if config.scope_hoist { + // This only needs to be done if preset_env ran because all other transforms + // insert declarations with global_mark (even though they are generated). + let (decls, module) = if config.scope_hoist && should_run_preset_env { let module = module.fold_with(&mut chain!( hygiene(), resolver(unresolved_mark, global_mark, false) diff --git a/packages/transformers/js/core/src/node_replacer.rs b/packages/transformers/js/core/src/node_replacer.rs index cf8d1925df8..4055805f194 100644 --- a/packages/transformers/js/core/src/node_replacer.rs +++ b/packages/transformers/js/core/src/node_replacer.rs @@ -8,11 +8,12 @@ use swc_ecmascript::ast::{self}; use swc_ecmascript::visit::{Fold, FoldWith}; use crate::dependency_collector::{DependencyDescriptor, DependencyKind}; -use crate::utils::{create_require, SourceLocation, SourceType}; +use crate::utils::{create_global_decl_stmt, create_require, SourceLocation, SourceType}; pub struct NodeReplacer<'a> { pub source_map: &'a SourceMap, pub items: &'a mut Vec, + pub global_mark: Mark, pub globals: HashMap, pub project_root: &'a Path, pub filename: &'a Path, @@ -182,25 +183,6 @@ impl<'a> Fold for NodeReplacer<'a> { } } -fn create_decl_stmt(name: swc_atoms::JsWord, init: ast::Expr) -> (ast::Stmt, SyntaxContext) { - let span = DUMMY_SP.apply_mark(Mark::fresh(Mark::root())); - - ( - ast::Stmt::Decl(ast::Decl::Var(ast::VarDecl { - kind: ast::VarDeclKind::Var, - declare: false, - span: DUMMY_SP, - decls: vec![ast::VarDeclarator { - name: ast::Pat::Ident(ast::BindingIdent::from(ast::Ident::new(name, span))), - span: DUMMY_SP, - definite: false, - init: Some(Box::new(init)), - }], - })), - span.ctxt, - ) -} - impl NodeReplacer<'_> { fn update_binding(&mut self, id: &mut ast::Ident, expr: F) -> bool where @@ -210,7 +192,7 @@ impl NodeReplacer<'_> { id.span.ctxt = *ctxt; false } else { - let (decl, ctxt) = create_decl_stmt(id.sym.clone(), expr(self)); + let (decl, ctxt) = create_global_decl_stmt(id.sym.clone(), expr(self), self.global_mark); id.span.ctxt = ctxt; diff --git a/packages/transformers/js/core/src/utils.rs b/packages/transformers/js/core/src/utils.rs index 75efb75071f..113aa35c091 100644 --- a/packages/transformers/js/core/src/utils.rs +++ b/packages/transformers/js/core/src/utils.rs @@ -175,6 +175,32 @@ pub fn match_import(node: &ast::Expr, ignore_mark: Mark) -> Option { } } +// `name` must not be an existing binding. +pub fn create_global_decl_stmt( + name: swc_atoms::JsWord, + init: ast::Expr, + global_mark: Mark, +) -> (ast::Stmt, SyntaxContext) { + // The correct value would actually be `DUMMY_SP.apply_mark(Mark::fresh(Mark::root()))`. + // But this saves us from running the resolver again in some cases. + let span = DUMMY_SP.apply_mark(global_mark); + + ( + ast::Stmt::Decl(ast::Decl::Var(ast::VarDecl { + kind: ast::VarDeclKind::Var, + declare: false, + span: DUMMY_SP, + decls: vec![ast::VarDeclarator { + name: ast::Pat::Ident(ast::BindingIdent::from(ast::Ident::new(name, span))), + span: DUMMY_SP, + definite: false, + init: Some(Box::new(init)), + }], + })), + span.ctxt, + ) +} + #[derive(Debug, Serialize, Deserialize, Clone, Eq, PartialEq)] pub struct SourceLocation { pub start_line: usize, From 9e6730c3d9e8d10f254486755652f6a87a041942 Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Sun, 15 May 2022 12:26:10 +0200 Subject: [PATCH 22/24] Bump swc --- Cargo.lock | 60 ++++++++++++------------ packages/transformers/js/core/Cargo.toml | 4 +- packages/transformers/js/core/src/lib.rs | 6 ++- 3 files changed, 37 insertions(+), 33 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 28477ad52a1..b037f853b86 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1433,9 +1433,9 @@ dependencies = [ [[package]] name = "rayon" -version = "1.5.2" +version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd249e82c21598a9a426a4e00dd7adc1d640b22445ec8545feef801d1a74c221" +checksum = "bd99e5772ead8baa5215278c9b15bf92087709e9c1b2d1f97cdb5a183c933a7d" dependencies = [ "autocfg", "crossbeam-deque", @@ -1445,9 +1445,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.9.2" +version = "1.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f51245e1e62e1f1629cbfec37b5793bbabcaeb90f30e94d2ba03564687353e4" +checksum = "258bcdb5ac6dad48491bb2992db6b7cf74878b0384908af124823d118c99683f" dependencies = [ "crossbeam-channel", "crossbeam-deque", @@ -1785,9 +1785,9 @@ dependencies = [ [[package]] name = "swc_common" -version = "0.18.1" +version = "0.18.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec38be09c030adbebf10014d0157df25826dba7254f60ef30d73cc24c267a06" +checksum = "a14c5d15a47c404bc1e1597f4412643d293aed2c3143c9c4a9c20abe879a934b" dependencies = [ "ahash", "ast_node", @@ -1855,9 +1855,9 @@ dependencies = [ [[package]] name = "swc_ecma_codegen" -version = "0.107.0" +version = "0.108.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b08ceb40519303a12fa987ff2d1888cb64e654adab7d5f475cc0b389ff3b0fba" +checksum = "897c6f0574ee1280a97d9d45210f50f8841c643a74ddbb09de2ba2d6f9598a33" dependencies = [ "bitflags", "memchr", @@ -1926,9 +1926,9 @@ dependencies = [ [[package]] name = "swc_ecma_preset_env" -version = "0.128.0" +version = "0.129.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0f93e848d10e887338f9739ccad74bd7ac2aa51a16dbba5ad13d7b39d898378" +checksum = "b5454c4b5a1e9b8278a5f40e3e03e986c70669768630d7a1252665d63cce3e5b" dependencies = [ "ahash", "anyhow", @@ -1951,9 +1951,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms" -version = "0.153.0" +version = "0.154.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5755ffcda1942d7c261a8acd3ae49fe686e2b7476eeecd6cb5e377a95eb1f5d9" +checksum = "2bce21d9e8ff785aaf9b4ac11375d9f5767630fcaf882f72e6af0516224085a6" dependencies = [ "swc_atoms", "swc_common", @@ -1971,9 +1971,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_base" -version = "0.84.1" +version = "0.85.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6be33c0ca26095f5d8e83f9df14f5798233e29f09125d3afaf925b70920da8a1" +checksum = "8262876d5387887776f23c4894fbddff26e5f184edadf2375f3dc19fca2b42a4" dependencies = [ "better_scoped_tls", "once_cell", @@ -1992,9 +1992,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_classes" -version = "0.72.0" +version = "0.73.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74319c4170af96434ac4e1779890b894a57203ddd4974414bdef853938d4825f" +checksum = "e74a27c29def9db5ff03db4d3ab3d37701fb6d100951162223b71132908451eb" dependencies = [ "swc_atoms", "swc_common", @@ -2006,9 +2006,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_compat" -version = "0.98.0" +version = "0.99.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d49ce0209714934dc0c9d854ce6447239926c2c5ca693b8cd6964b364d50b0cc" +checksum = "b8765716f50186e937f79726384cced3c2d4d15293fb0df7f32bd2feb25fb314" dependencies = [ "ahash", "arrayvec", @@ -2046,9 +2046,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_module" -version = "0.111.0" +version = "0.112.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6baca7d64bf60c7d184d647dae50dea51a8edcc262ffaceb07a91b81d64aa36" +checksum = "48a5415e54a7b7a95e3dd2ede463e377a6254c6a37fae9830b113a2ad45226fe" dependencies = [ "Inflector", "ahash", @@ -2070,9 +2070,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_optimization" -version = "0.123.1" +version = "0.124.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd5c7efdde630a05a3f6ff453dd54946011f4cdc92fe94fbb081f87dcd72b403" +checksum = "e27080f65285ccd53bd9ad68e64e62faba2595d57144e4552a1752664525e474" dependencies = [ "ahash", "dashmap", @@ -2093,9 +2093,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_proposal" -version = "0.106.0" +version = "0.107.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47a3124e5f88b38b762316dd71d3e28674a3b1a773a1912785a5317a1811ccdd" +checksum = "47fc0f3b336764f89adf1899830321c3f5a7e845ede3ad5949eeb7468aa260ab" dependencies = [ "either", "serde", @@ -2112,9 +2112,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_react" -version = "0.113.0" +version = "0.114.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a32b923408e146e3caec63e829f81a7979c0efa46dfec20656fed7bd0fe7a917" +checksum = "83e0f5f3cf67dd7d57f23b152c9d55159ceaa10b73b2a32f973398d2304f3363" dependencies = [ "ahash", "base64 0.13.0", @@ -2138,9 +2138,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_typescript" -version = "0.116.0" +version = "0.117.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8dcda94818a971a654899b1a5fe04cad5435da5e3542ebbcc4ecbb027e904e5d" +checksum = "fa8f32954c5a7c6bdead39c8a8a1580127a1759f33ef8b87d00f754882e6090a" dependencies = [ "serde", "swc_atoms", @@ -2183,9 +2183,9 @@ dependencies = [ [[package]] name = "swc_ecmascript" -version = "0.156.0" +version = "0.157.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67f282a0e17a9f48d72b04f611f0553bad26049b7b1bf2fa6b9074682f46462e" +checksum = "bd35679e1dc392f776b691b125692d90a7bebd5d23ec96699cfe37d8ae8633b1" dependencies = [ "swc_ecma_ast", "swc_ecma_codegen", diff --git a/packages/transformers/js/core/Cargo.toml b/packages/transformers/js/core/Cargo.toml index 71d4e6a6067..0669d031b9b 100644 --- a/packages/transformers/js/core/Cargo.toml +++ b/packages/transformers/js/core/Cargo.toml @@ -8,8 +8,8 @@ edition = "2018" crate-type = ["rlib"] [dependencies] -swc_ecmascript = { version = "0.156.0", features = ["parser", "transforms", "module", "optimization", "react", "typescript", "utils", "visit", "codegen", "utils", "preset_env"] } -swc_common = { version = "0.18.0", features = ["tty-emitter", "sourcemap"] } +swc_ecmascript = { version = "0.157.0", features = ["parser", "transforms", "module", "optimization", "react", "typescript", "utils", "visit", "codegen", "utils", "preset_env"] } +swc_common = { version = "0.18.2", features = ["tty-emitter", "sourcemap"] } swc_atoms = "0.2.11" indoc = "1.0.3" serde = "1.0.123" diff --git a/packages/transformers/js/core/src/lib.rs b/packages/transformers/js/core/src/lib.rs index 6778ad56ab6..c7f384069eb 100644 --- a/packages/transformers/js/core/src/lib.rs +++ b/packages/transformers/js/core/src/lib.rs @@ -567,7 +567,11 @@ fn emit( None }, )); - let config = swc_ecmascript::codegen::Config { minify: false }; + let config = swc_ecmascript::codegen::Config { + minify: false, + ascii_only: false, + target: swc_ecmascript::ast::EsVersion::Es5, + }; let mut emitter = swc_ecmascript::codegen::Emitter { cfg: config, comments: Some(&comments), From 45c305dc9147ccd8b0156af0540c40371213137e Mon Sep 17 00:00:00 2001 From: Niklas Mischkulnig <4586894+mischnic@users.noreply.github.com> Date: Tue, 17 May 2022 10:53:30 +0200 Subject: [PATCH 23/24] Update quote type in tests --- packages/core/integration-tests/test/cache.js | 6 +++--- packages/core/integration-tests/test/fs.js | 2 +- packages/core/integration-tests/test/html.js | 4 ++-- .../test/integration/sourcemap-comments/index.js | 2 +- .../core/integration-tests/test/javascript.js | 16 ++++++++-------- .../integration-tests/test/output-formats.js | 4 ++-- .../core/integration-tests/test/sourcemaps.js | 8 ++++++-- packages/core/integration-tests/test/svg.js | 2 +- packages/transformers/js/core/src/hoist.rs | 6 +++++- 9 files changed, 29 insertions(+), 21 deletions(-) diff --git a/packages/core/integration-tests/test/cache.js b/packages/core/integration-tests/test/cache.js index b03c13689e8..b72cc66eefd 100644 --- a/packages/core/integration-tests/test/cache.js +++ b/packages/core/integration-tests/test/cache.js @@ -4901,17 +4901,17 @@ describe('cache', function () { }, async update(b) { let res = await run(b.bundleGraph); - assert(res.includes("let a = 'a'")); + assert(res.includes(`let a = "a"`)); await overlayFS.writeFile( path.join(inputDir, 'src/entries/a.js'), - "export let a = 'b';", + `export let a = "b";`, ); }, }); let res = await run(b.bundleGraph); - assert(res.includes("let a = 'b'")); + assert(res.includes(`let a = "b"`)); }); it('should invalidate when switching to a different packager for an inline bundle', async function () { diff --git a/packages/core/integration-tests/test/fs.js b/packages/core/integration-tests/test/fs.js index d25c3dd44bb..800432aca0d 100644 --- a/packages/core/integration-tests/test/fs.js +++ b/packages/core/integration-tests/test/fs.js @@ -198,7 +198,7 @@ describe('fs', function () { path.join(distDir, 'index.js'), 'utf8', ); - assert(contents.includes("require('fs')")); + assert(contents.includes(`require("fs")`)); assert(contents.includes('readFileSync')); await outputFS.writeFile( diff --git a/packages/core/integration-tests/test/html.js b/packages/core/integration-tests/test/html.js index b8b20d51191..21436020961 100644 --- a/packages/core/integration-tests/test/html.js +++ b/packages/core/integration-tests/test/html.js @@ -2549,7 +2549,7 @@ describe('html', function () { await getNextBuild(b); let html = await outputFS.readFile('/dist/index.html', 'utf8'); - assert(html.includes("console.log('test')")); + assert(html.includes(`console.log("test")`)); await overlayFS.writeFile( path.join(__dirname, '/html-inline-js-require/test.js'), @@ -2558,7 +2558,7 @@ describe('html', function () { await getNextBuild(b); html = await outputFS.readFile(path.join(distDir, '/index.html'), 'utf8'); - assert(html.includes("console.log('foo')")); + assert(html.includes(`console.log("foo")`)); }); it('should invalidate parent bundle when nested inline bundles change', async function () { diff --git a/packages/core/integration-tests/test/integration/sourcemap-comments/index.js b/packages/core/integration-tests/test/integration/sourcemap-comments/index.js index 370f721276c..c764d6be5fa 100644 --- a/packages/core/integration-tests/test/integration/sourcemap-comments/index.js +++ b/packages/core/integration-tests/test/integration/sourcemap-comments/index.js @@ -4,6 +4,6 @@ console.log('bar'); /* block comment line */ console.log('baz'); /* multi line - block comment + block comment */ console.log('idhf'); diff --git a/packages/core/integration-tests/test/javascript.js b/packages/core/integration-tests/test/javascript.js index 65259ba7efa..821f8fb78cb 100644 --- a/packages/core/integration-tests/test/javascript.js +++ b/packages/core/integration-tests/test/javascript.js @@ -1084,8 +1084,8 @@ describe('javascript', function () { let main = await outputFS.readFile(b.getBundles()[0].filePath, 'utf8'); dedicated = await outputFS.readFile(dedicated.filePath, 'utf8'); shared = await outputFS.readFile(shared.filePath, 'utf8'); - assert(/new Worker(.*?, {[\n\s]+type: 'module'[\n\s]+})/.test(main)); - assert(/new SharedWorker(.*?, {[\n\s]+type: 'module'[\n\s]+})/.test(main)); + assert(/new Worker(.*?, {[\n\s]+type: "module"[\n\s]+})/.test(main)); + assert(/new SharedWorker(.*?, {[\n\s]+type: "module"[\n\s]+})/.test(main)); }); for (let shouldScopeHoist of [true, false]) { @@ -1238,8 +1238,8 @@ describe('javascript', function () { ); let main = await outputFS.readFile(b.getBundles()[0].filePath, 'utf8'); - assert(/new Worker(.*?, {[\n\s]+name: 'worker'[\n\s]+})/.test(main)); - assert(/new SharedWorker(.*?, {[\n\s]+name: 'shared'[\n\s]+})/.test(main)); + assert(/new Worker(.*?, {[\n\s]+name: "worker"[\n\s]+})/.test(main)); + assert(/new SharedWorker(.*?, {[\n\s]+name: "shared"[\n\s]+})/.test(main)); }); it('should error if importing in a worker without type: module', async function () { @@ -1438,7 +1438,7 @@ describe('javascript', function () { ]); let res = await outputFS.readFile(b.getBundles()[0].filePath, 'utf8'); - assert(res.includes("importScripts('imported.js')")); + assert(res.includes(`importScripts("imported.js")`)); }); it('should ignore importScripts in script workers when not passed a string literal', async function () { @@ -1484,7 +1484,7 @@ describe('javascript', function () { ]); let res = await outputFS.readFile(b.getBundles()[1].filePath, 'utf8'); - assert(res.includes("importScripts('https://unpkg.com/parcel')")); + assert(res.includes(`importScripts("https://unpkg.com/parcel")`)); }); it('should support bundling service-workers', async function () { @@ -1559,7 +1559,7 @@ describe('javascript', function () { let main = bundles.find(b => !b.env.isWorker()); let mainContents = await outputFS.readFile(main.filePath, 'utf8'); assert( - /navigator.serviceWorker.register\(.*?, {[\n\s]*scope: 'foo'[\n\s]*}\)/.test( + /navigator.serviceWorker.register\(.*?, {[\n\s]*scope: "foo"[\n\s]*}\)/.test( mainContents, ), ); @@ -4384,7 +4384,7 @@ describe('javascript', function () { let res = await run(b); assert.equal( res.default, - "

test

\n\n", + `

test

\n\n`, ); }); diff --git a/packages/core/integration-tests/test/output-formats.js b/packages/core/integration-tests/test/output-formats.js index 7b71ef26b90..c8de49eedc3 100644 --- a/packages/core/integration-tests/test/output-formats.js +++ b/packages/core/integration-tests/test/output-formats.js @@ -987,7 +987,7 @@ describe('output formats', function () { assert.equal(await res.output, 4); }); - it('should support use an import polyfill for older browsers', async function () { + it('should support using an import polyfill for older browsers', async function () { let b = await bundle( path.join(__dirname, '/integration/formats/esm-browser/index.html'), { @@ -1024,7 +1024,7 @@ describe('output formats', function () { .find(bundle => bundle.name.startsWith('async')); assert( new RegExp( - "getBundleURL\\('[a-zA-Z0-9]+'\\) \\+ \"" + + `getBundleURL\\("[a-zA-Z0-9]+"\\) \\+ "` + path.basename(asyncBundle.filePath) + '"', ).test(entry), diff --git a/packages/core/integration-tests/test/sourcemaps.js b/packages/core/integration-tests/test/sourcemaps.js index 79a3486fed2..42de11f19ca 100644 --- a/packages/core/integration-tests/test/sourcemaps.js +++ b/packages/core/integration-tests/test/sourcemaps.js @@ -1257,6 +1257,7 @@ describe('sourcemaps', function () { source: input, generated: raw, str: "console.log('foo')", + generatedStr: `console.log("foo")`, sourcePath, }); @@ -1265,6 +1266,7 @@ describe('sourcemaps', function () { source: input, generated: raw, str: "console.log('bar')", + generatedStr: `console.log("bar")`, sourcePath, }); @@ -1273,6 +1275,7 @@ describe('sourcemaps', function () { source: input, generated: raw, str: "console.log('baz')", + generatedStr: `console.log("baz")`, sourcePath, }); @@ -1281,6 +1284,7 @@ describe('sourcemaps', function () { source: input, generated: raw, str: "console.log('idhf')", + generatedStr: `console.log("idhf")`, sourcePath, }); }); @@ -1419,8 +1423,8 @@ describe('sourcemaps', function () { map: sourceMap, source: sourceContent, generated: raw, - str: "foo = 'Lorem ipsum", - generatedStr: "foo = 'Lorem ipsum", + str: `foo = 'Lorem ipsum`, + generatedStr: `foo = "Lorem ipsum`, sourcePath, }); }); diff --git a/packages/core/integration-tests/test/svg.js b/packages/core/integration-tests/test/svg.js index dd44e8dd6ec..f8e2d06ad5f 100644 --- a/packages/core/integration-tests/test/svg.js +++ b/packages/core/integration-tests/test/svg.js @@ -195,7 +195,7 @@ describe('svg', function () { ), ); assert(svg.includes('