From fd231a68bfc8066dbfcc351cb0dd033a51b57163 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Fri, 14 Jan 2022 20:54:01 +0900 Subject: [PATCH] Update swc (#33201) This PR is a bit big because AST definitions are modified recently because previous AST defs were too error-prone. It will prevent plugin authors from making some common mistakes. - Closes #33088 - Closes #31084 - Closes #33283 --- packages/next-swc/Cargo.lock | 152 +++++++-------- packages/next-swc/crates/core/Cargo.toml | 18 +- .../next-swc/crates/core/src/auto_cjs/mod.rs | 32 ++-- .../crates/core/src/hook_optimizer.rs | 178 +++++++++--------- .../next-swc/crates/core/src/next_dynamic.rs | 37 ++-- packages/next-swc/crates/core/src/next_ssg.rs | 18 +- .../crates/core/src/remove_console.rs | 16 +- .../crates/core/src/styled_jsx/mod.rs | 43 ++--- .../crates/core/src/styled_jsx/utils.rs | 11 +- .../attribute-generation-modes/output.js | 46 ++--- .../styled-jsx/different-jsx-ids/output.js | 12 +- .../fixture/styled-jsx/expressions/output.js | 46 ++--- .../fixture/styled-jsx/issue-30480/output.js | 4 +- .../output.js | 6 +- .../number-after-placeholder/output.js | 6 +- .../tests/fixture/styled-jsx/styles/output.js | 28 +-- .../fixture/styled-jsx/too-many/output.js | 4 +- .../fixture/styled-jsx/tpl-escape-2/output.js | 4 +- .../tpl-placeholder-1-as-property/output.js | 6 +- .../output.js | 6 +- .../tpl-placeholder-3-as-value/output.js | 6 +- .../output.js | 6 +- .../output.js | 6 +- packages/next-swc/crates/napi/Cargo.toml | 10 +- packages/next-swc/crates/wasm/Cargo.toml | 6 +- 25 files changed, 334 insertions(+), 373 deletions(-) diff --git a/packages/next-swc/Cargo.lock b/packages/next-swc/Cargo.lock index 69e5bb882a8f..b17955ae4c70 100644 --- a/packages/next-swc/Cargo.lock +++ b/packages/next-swc/Cargo.lock @@ -588,9 +588,9 @@ dependencies = [ [[package]] name = "is-macro" -version = "0.1.9" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a322dd16d960e322c3d92f541b4c1a4f0a2e81e1fdeee430d8cecc8b72e8015f" +checksum = "94b2c46692aee0d1b3aad44e781ac0f0e7db42ef27adaa0a877b627040019813" dependencies = [ "Inflector", "pmutil", @@ -1578,9 +1578,9 @@ checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" [[package]] name = "styled_components" -version = "0.9.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03481b5475b58a779b5a01a1a4d73af4cd4a558293a8f63013dc13ded66858ad" +checksum = "a1f35439f191ee7605b2d07d3e9de27d5bb2059a92bb9b25c83724ba51bd0192" dependencies = [ "Inflector", "once_cell", @@ -1594,9 +1594,9 @@ dependencies = [ [[package]] name = "swc" -version = "0.110.0" +version = "0.114.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28fbf5ca7965aa18b1da211c28ad9b0e7c27c9b4fdcaa5f0f462d838a300bd20" +checksum = "80324824bb4f2b00fbcf224bd03981f0d48b73dcd9e72290664bb99dd03de9d8" dependencies = [ "ahash", "anyhow", @@ -1645,9 +1645,9 @@ dependencies = [ [[package]] name = "swc_bundler" -version = "0.98.0" +version = "0.101.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c259a985448bbb72521da3a4fdbe664980e055a422214fe871a428fb7091068" +checksum = "7e4ba80b219e651c3eeb830abc7caa391e55c9ff1fd4370e5723a2cbd752ea93" dependencies = [ "ahash", "anyhow", @@ -1679,9 +1679,9 @@ dependencies = [ [[package]] name = "swc_common" -version = "0.16.1" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df9aa1afd061fdc6e73c8dd0a0cd3bc4c36f1e40e61427a7033f2e9b70ce2269" +checksum = "015b0c14152981b1590d05c6073ac602008e5fc414b7cc4b2bbae60220d27ff2" dependencies = [ "ahash", "ast_node", @@ -1709,9 +1709,9 @@ dependencies = [ [[package]] name = "swc_css" -version = "0.45.0" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e34ca99200f5b09af8ce689f75a568dd07cdb1719b4e78c5d844ae1f96790bf" +checksum = "75a4e8913ddbf92a39e087996c30a80dfcac5192adc3fb63cd3beabe8975b0c8" dependencies = [ "swc_css_ast", "swc_css_codegen", @@ -1722,9 +1722,9 @@ dependencies = [ [[package]] name = "swc_css_ast" -version = "0.41.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d09734736a9b06e9fd3ab9c63c3edc7c5439d5ad74212feb250bd6e66ddf41c" +checksum = "b0861c74eba5c61ade5c1ef3a14e3e0fd0699f20e5619bbc292c2ac4f9463617" dependencies = [ "is-macro", "serde", @@ -1735,9 +1735,9 @@ dependencies = [ [[package]] name = "swc_css_codegen" -version = "0.43.0" +version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9d1dcb76300069a43fa9dbb88b6582e75fafb9d21252983e273839932359a33" +checksum = "de309d82614f8d3613c27f4ccafbacc1ed524ca5bfd7792387f76314d5131df2" dependencies = [ "auto_impl", "bitflags", @@ -1762,9 +1762,9 @@ dependencies = [ [[package]] name = "swc_css_parser" -version = "0.45.0" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd34959a0fdb90445abf51d6669840d9344ab9d1766703259cb45e1c462384bb" +checksum = "ac061b34fb0a3afa4ac5777b705c149f91c2ab29fc5f8463acb2bf8a17e02938" dependencies = [ "bitflags", "lexical", @@ -1775,9 +1775,9 @@ dependencies = [ [[package]] name = "swc_css_utils" -version = "0.38.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "824eeca37d946b192d754b5527ee14ab5d3b65faa1e9e6c6426420ff17ae64f2" +checksum = "94cdc01e5631f63f8d4c52545d9a61ed5a6616a2d8d4d4b6235ea2ff779ae80c" dependencies = [ "swc_atoms", "swc_common", @@ -1787,9 +1787,9 @@ dependencies = [ [[package]] name = "swc_css_visit" -version = "0.40.0" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b6005fda07744627afc7f96801856eeb2bcfba4a1e369bfa1439d40f7b37848" +checksum = "ce49ce82798c85e1a8f2a46552b6ef9530868302c333f8b135da3b5c9d5b1ca8" dependencies = [ "swc_atoms", "swc_common", @@ -1799,9 +1799,9 @@ dependencies = [ [[package]] name = "swc_ecma_ast" -version = "0.63.1" +version = "0.65.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79606092f73c188dfd4897cc63ff613c6967fd5f822cb407d2b6b96d4093b211" +checksum = "accaa4affdc0e2f3693c9d3b325ad97e9d9534e01abe5564b9b85c5d1cacdcbb" dependencies = [ "is-macro", "num-bigint", @@ -1814,9 +1814,9 @@ dependencies = [ [[package]] name = "swc_ecma_codegen" -version = "0.87.0" +version = "0.89.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "661dcec97d229f6bca1ea4d28e88364ff3512142afeb05e467cfc925a724937c" +checksum = "667e9174226b2228b5ddc850f59db0b2689652efa0b5d5d3c072d1caba256cb7" dependencies = [ "bitflags", "memchr", @@ -1846,9 +1846,9 @@ dependencies = [ [[package]] name = "swc_ecma_ext_transforms" -version = "0.47.0" +version = "0.49.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f22be85d48703ed980e523bfcf0cf60fdd59386470b9a2e6fdb3f01e72922ac1" +checksum = "453b8fe0dc9c5b86d4436d992f9f31a079ebbba2d47a57ff92629f68ac9f1bd8" dependencies = [ "phf", "swc_atoms", @@ -1860,9 +1860,9 @@ dependencies = [ [[package]] name = "swc_ecma_lints" -version = "0.6.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6569b03f6232db62f3520e6344d33a13c18b3bca356eca9137ad1c6087b54b62" +checksum = "9cfc9ff5b9bc4ad3a104191744ed2fe41f7346fd9679a51c7dba26a77492dc47" dependencies = [ "auto_impl", "parking_lot", @@ -1876,9 +1876,9 @@ dependencies = [ [[package]] name = "swc_ecma_loader" -version = "0.26.0" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61e4a236d9fc809d88e8d346381e72936dc8a4e4a2418d1f66ea8acb6ed298be" +checksum = "764c8e31524d35722aacdbee51e132424798365ddfd75deb81634f342c5fdce3" dependencies = [ "ahash", "anyhow", @@ -1896,9 +1896,9 @@ dependencies = [ [[package]] name = "swc_ecma_minifier" -version = "0.65.0" +version = "0.68.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c20d75221fe940ed8ffeae15d591a28bfa87ea64ab1bb5f09ed791e66f044604" +checksum = "436620800b966cd41e509ba51da2ad4c2c31a3d13c48230c448019655aa7ee7b" dependencies = [ "ahash", "indexmap", @@ -1925,9 +1925,9 @@ dependencies = [ [[package]] name = "swc_ecma_parser" -version = "0.85.0" +version = "0.87.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a61cbbfd77c475564b745ad782e177d3c5ee3503308150eed78fc264f40809f1" +checksum = "3c454cbd95ab84fd9ffc5059cffad80b7711bd4b8732257a7c83f4b2c809dfa1" dependencies = [ "either", "enum_kind", @@ -1945,9 +1945,9 @@ dependencies = [ [[package]] name = "swc_ecma_preset_env" -version = "0.81.0" +version = "0.84.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa0b09466dbea47b04178cfd0262999c2a9cebe67e6fb8869c7267ac166f7daa" +checksum = "b064eca226637af7fa7f734fc6dd0d01b50c90418d7fce2c64da26ff89d2e4f1" dependencies = [ "ahash", "anyhow", @@ -1971,9 +1971,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms" -version = "0.108.0" +version = "0.111.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693c0fc3090c7a4dd3fcea703b58bb3b7e12eb75c1b561ed185dd4359db3e78c" +checksum = "ae472031803e9fddb9f9141edc3ec0c3bff5904cd08e0509f2ad88689678ce7c" dependencies = [ "swc_atoms", "swc_common", @@ -1993,9 +1993,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_base" -version = "0.54.0" +version = "0.56.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e53a60add62a482d233e666ac14756251f7559fef66671e345ad935f2e18cc71" +checksum = "74824b2df0931ed3d84201e50138b68d1dc78a802aef9dbdec4ea0ffcea8a28b" dependencies = [ "once_cell", "phf", @@ -2014,9 +2014,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_classes" -version = "0.41.0" +version = "0.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81b0cbea86bae526d5c640ee8d3cbcb7726f907277225ffcca363796a6985f19" +checksum = "8a972a157b9104b7979a34556841f93e98d18d70b83c9e625b35dd390b57e59f" dependencies = [ "swc_atoms", "swc_common", @@ -2028,9 +2028,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_compat" -version = "0.64.0" +version = "0.67.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712770f8f1fc14e632b5f96a2b2f1d1d9fe037c669cbd62a7990c23d7e55a13a" +checksum = "584f0f1af7e7ebf403c1205176afb122dbca97a018c09af8c2be578a2c294ac8" dependencies = [ "ahash", "arrayvec 0.7.2", @@ -2066,9 +2066,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_module" -version = "0.70.0" +version = "0.73.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83a8d5053c0b3383f3292eea14cbe3d349b98fba3249fbd12323182d6aede4e4" +checksum = "7bf082852cca04cd3b7031ddd786fc1432a3c99727bada49cd68caf473b64617" dependencies = [ "Inflector", "ahash", @@ -2088,9 +2088,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_optimization" -version = "0.78.0" +version = "0.81.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139ace7ce4991532297ff1af7b960799988cba058cb49926b4951a67a0c2fa0d" +checksum = "3af299ad73dc689a0516950613a9262203feff76adc3f2f14307a12bdd5835c9" dependencies = [ "ahash", "dashmap", @@ -2111,9 +2111,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_proposal" -version = "0.70.0" +version = "0.73.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6e7e3f58a2b0ba87389826ca1a0552457f7e9cd7cc4c1d717b0addbc86fc424" +checksum = "fe1cf222cfe757700ffea622589990b1b0ef0a18c85ffe6e8442ba515257aa98" dependencies = [ "either", "serde", @@ -2131,9 +2131,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_react" -version = "0.72.0" +version = "0.75.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4d98cab103d93cfffca8938819fad7f5df4a16deb75956770ae6cbfc5b71f68" +checksum = "cee01d3f5c0f424a199a4d13fc6fbe14cfd88ccff0b778558311075477e25310" dependencies = [ "ahash", "base64 0.13.0", @@ -2156,9 +2156,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_testing" -version = "0.56.0" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ca6d81a864fab16bce9b86cbc921297256b6bf0f532bab621a6dbf04ecde366" +checksum = "460535faa436986fb82adbf52ba09309038b2f4fc96f00e67e837853a93b448e" dependencies = [ "ansi_term", "anyhow", @@ -2179,9 +2179,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_typescript" -version = "0.74.0" +version = "0.77.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37457c86bc39bf18d54995fb7d55d68a95d2f6ebb8d00ebffdd0f2419db1220d" +checksum = "50560b92ecbd43ee4dea19ae763d0bde8d753c8401d76115c714cfb51f838e76" dependencies = [ "serde", "swc_atoms", @@ -2196,9 +2196,9 @@ dependencies = [ [[package]] name = "swc_ecma_utils" -version = "0.61.0" +version = "0.63.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "164f22342740e5b299f215a511aefa4dbb9be3586248d05d4249c56964815197" +checksum = "a05826c1edd7d58ec97af8be523c9c15e24e6dc4c1762435bb12573d716dd7ba" dependencies = [ "once_cell", "rayon", @@ -2211,9 +2211,9 @@ dependencies = [ [[package]] name = "swc_ecma_visit" -version = "0.49.0" +version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7637451decd27af9db5ded9eb4ce2c071be4df68108e1221722033c0fab3e18" +checksum = "95cf6f39cd1c3682885125955e881bec872e0c1743eb1a31735da69b894f065e" dependencies = [ "num-bigint", "swc_atoms", @@ -2225,9 +2225,9 @@ dependencies = [ [[package]] name = "swc_ecmascript" -version = "0.105.0" +version = "0.108.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67db9c61ea3694375eed4ce95a916201b37470b19dad709c84087ebe8cd20c33" +checksum = "36c59346416fc6010a59c0fa10f19b8ba9a45bed7199005b7c452b68400fc345" dependencies = [ "swc_ecma_ast", "swc_ecma_codegen", @@ -2252,9 +2252,9 @@ dependencies = [ [[package]] name = "swc_fast_graph" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4857942a9c79e9836f51dca4ca0df89f354acfedc573708006c4365bad07083c" +checksum = "1d53bbcbb4b055c547f283af1f84211f425b95ac59e02d8b70c94b8a63a4704f" dependencies = [ "ahash", "indexmap", @@ -2264,9 +2264,9 @@ dependencies = [ [[package]] name = "swc_graph_analyzer" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5f079d9350dee80a59ac2f8be9867ed0a8ac9fb0023461b173e9e42168ff30" +checksum = "83b42a8b13068dd90dec954ec44576d5922914687bc34277f3b0f8d0bbeb4e83" dependencies = [ "ahash", "auto_impl", @@ -2298,9 +2298,9 @@ dependencies = [ [[package]] name = "swc_node_comments" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d526bfa1fde8b608352393c404071117c89170ae1e79b2fc97283d6a4bcd3cad" +checksum = "2cb940728fcaa85b619ae43c23110a2e88c1cd90e9a873bebb0f9f80e5ecd7e6" dependencies = [ "ahash", "dashmap", @@ -2309,9 +2309,9 @@ dependencies = [ [[package]] name = "swc_stylis" -version = "0.42.0" +version = "0.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b09b0bdc59e26768e9e2bbcf8b1b722f0798cc0b12856f43e3e610bf4f0eb8" +checksum = "75fd0f4f37579b15bbcd762b0fd1ae3fc6ef29215777b96cbc2bcdfaacd439ab" dependencies = [ "swc_atoms", "swc_common", @@ -2322,9 +2322,9 @@ dependencies = [ [[package]] name = "swc_timer" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81ea392f1e84a0195aa2d06e8c445751bdb1b93a1f6b156500fbf25965679e57" +checksum = "1371a950402552de1a2bf7beeb619b7fff9e4ab7e50f516db9a791869a4f731f" dependencies = [ "tracing", ] @@ -2389,9 +2389,9 @@ dependencies = [ [[package]] name = "testing" -version = "0.17.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b1398e0c651977e82840793e12605221139aeadbe63cf5c3704a38934fa1656" +checksum = "c77495bc9f7737f9a958ec3cf2fba2f0c2296867018c8b4da6ce01d008b93e5e" dependencies = [ "ansi_term", "difference", diff --git a/packages/next-swc/crates/core/Cargo.toml b/packages/next-swc/crates/core/Cargo.toml index 4300161a6ee7..e50cd9e2d987 100644 --- a/packages/next-swc/crates/core/Cargo.toml +++ b/packages/next-swc/crates/core/Cargo.toml @@ -14,21 +14,21 @@ fxhash = "0.2.1" pathdiff = "0.2.0" serde = "1" serde_json = "1" -styled_components = "0.9.0" -swc = "0.110.0" +styled_components = "0.11.0" +swc = "0.114.0" swc_atoms = "0.2.7" -swc_common = { version = "0.16.0", features = ["concurrent", "sourcemap"] } -swc_css = "0.45.0" -swc_ecma_loader = { version = "0.26.0", features = ["node", "lru"] } -swc_ecmascript = { version = "0.105.0", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] } +swc_common = { version = "0.17.0", features = ["concurrent", "sourcemap"] } +swc_css = "0.46.0" +swc_ecma_loader = { version = "0.27.0", features = ["node", "lru"] } +swc_ecmascript = { version = "0.108.1", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] } swc_node_base = "0.5.1" -swc_stylis = "0.42.0" +swc_stylis = "0.43.0" tracing = {version = "0.1.28", features = ["release_max_level_off"]} regex = "1.5" [dev-dependencies] -swc_ecma_transforms_testing = "0.56.0" -testing = "0.17.0" +swc_ecma_transforms_testing = "0.58.0" +testing = "0.18.0" walkdir = "2.3.2" diff --git a/packages/next-swc/crates/core/src/auto_cjs/mod.rs b/packages/next-swc/crates/core/src/auto_cjs/mod.rs index 746f4357c62d..3c885940fd77 100644 --- a/packages/next-swc/crates/core/src/auto_cjs/mod.rs +++ b/packages/next-swc/crates/core/src/auto_cjs/mod.rs @@ -18,28 +18,20 @@ struct CjsFinder { /// does not support changing configuration based on content of the file. impl Visit for CjsFinder { fn visit_member_expr(&mut self, e: &MemberExpr) { - if !e.computed { - match &e.obj { - ExprOrSuper::Super(_) => {} - ExprOrSuper::Expr(obj) => match &**obj { - Expr::Ident(obj) => match &*e.prop { - Expr::Ident(prop) => { - if &*obj.sym == "module" && &*prop.sym == "exports" { - self.found = true; - return; - } - } - _ => {} - }, - _ => {} - }, - } + match &*e.obj { + Expr::Ident(obj) => match &e.prop { + MemberProp::Ident(prop) => { + if &*obj.sym == "module" && &*prop.sym == "exports" { + self.found = true; + return; + } + } + _ => {} + }, + _ => {} } e.obj.visit_with(self); - - if e.computed { - e.prop.visit_with(self); - } + e.prop.visit_with(self); } } diff --git a/packages/next-swc/crates/core/src/hook_optimizer.rs b/packages/next-swc/crates/core/src/hook_optimizer.rs index 4bb9791562b2..0516fc8e1b48 100644 --- a/packages/next-swc/crates/core/src/hook_optimizer.rs +++ b/packages/next-swc/crates/core/src/hook_optimizer.rs @@ -1,119 +1,119 @@ use swc_atoms::JsWord; use swc_common::DUMMY_SP; use swc_ecmascript::ast::{ - ArrayPat, Decl, Expr, ExprOrSuper, Ident, ImportDecl, ImportSpecifier, KeyValuePatProp, Number, - ObjectPat, ObjectPatProp, Pat, PropName, VarDecl, VarDeclarator, + ArrayPat, Callee, Decl, Expr, Ident, ImportDecl, ImportSpecifier, KeyValuePatProp, Number, + ObjectPat, ObjectPatProp, Pat, PropName, VarDecl, VarDeclarator, }; use swc_ecmascript::visit::{Fold, FoldWith}; pub fn hook_optimizer() -> impl Fold { - HookOptimizer::default() + HookOptimizer::default() } #[derive(Debug, Default)] struct HookOptimizer { - hooks: Vec, + hooks: Vec, } impl Fold for HookOptimizer { - // Find hooks imported from react/preact - fn fold_import_decl(&mut self, decl: ImportDecl) -> ImportDecl { - let ImportDecl { - ref src, - ref specifiers, - .. - } = decl; - if &src.value == "react" || &src.value == "preact/hooks" { - for specifier in specifiers { - if let ImportSpecifier::Named(named_specifier) = specifier { - if named_specifier.local.sym.starts_with("use") { - self.hooks.push(named_specifier.local.sym.clone()) - } + // Find hooks imported from react/preact + fn fold_import_decl(&mut self, decl: ImportDecl) -> ImportDecl { + let ImportDecl { + ref src, + ref specifiers, + .. + } = decl; + if &src.value == "react" || &src.value == "preact/hooks" { + for specifier in specifiers { + if let ImportSpecifier::Named(named_specifier) = specifier { + if named_specifier.local.sym.starts_with("use") { + self.hooks.push(named_specifier.local.sym.clone()) + } + } + } } - } + + decl } + // Transform array desctructing to object destructuring for relevant hooks + fn fold_decl(&mut self, node: Decl) -> Decl { + let node = node.fold_children_with(self); + match node { + Decl::Var(VarDecl { + decls, + span, + kind, + declare, + }) => { + let mut new_decls = Vec::with_capacity(decls.len()); + for decl in decls { + new_decls.push(self.get_decl(decl)); + } - decl - } - // Transform array desctructing to object destructuring for relevant hooks - fn fold_decl(&mut self, node: Decl) -> Decl { - let node = node.fold_children_with(self); - match node { - Decl::Var(VarDecl { - decls, - span, - kind, - declare, - }) => { - let mut new_decls = Vec::with_capacity(decls.len()); - for decl in decls { - new_decls.push(self.get_decl(decl)); + Decl::Var(VarDecl { + decls: new_decls, + span, + kind, + declare, + }) + } + _ => node, } - - Decl::Var(VarDecl { - decls: new_decls, - span, - kind, - declare, - }) - } - _ => node, } - } } impl HookOptimizer { - fn get_decl(&mut self, decl: VarDeclarator) -> VarDeclarator { - let VarDeclarator { - name, - init, - span, - definite, - } = &decl; - let init_clone = init.clone(); - if let Pat::Array(a) = name { - if let Expr::Call(c) = &*init.as_deref().unwrap() { - if let ExprOrSuper::Expr(i) = &c.callee { - if let Expr::Ident(Ident { sym, .. }) = &**i { - if self.hooks.contains(&sym) { - let name = get_object_pattern(&a); - return VarDeclarator { - name, - init: init_clone, - span: *span, - definite: *definite, - }; + fn get_decl(&mut self, decl: VarDeclarator) -> VarDeclarator { + let VarDeclarator { + name, + init, + span, + definite, + } = &decl; + let init_clone = init.clone(); + if let Pat::Array(a) = name { + if let Expr::Call(c) = &*init.as_deref().unwrap() { + if let Callee::Expr(i) = &c.callee { + if let Expr::Ident(Ident { sym, .. }) = &**i { + if self.hooks.contains(&sym) { + let name = get_object_pattern(&a); + return VarDeclarator { + name, + init: init_clone, + span: *span, + definite: *definite, + }; + } + } + } } - } } - } - } - return decl; - } + return decl; + } } fn get_object_pattern(array_pattern: &ArrayPat) -> Pat { - let props: Vec = array_pattern - .elems - .iter() - .enumerate() - .filter_map(|(i, elem)| match elem { - Some(elem) => Some(ObjectPatProp::KeyValue(KeyValuePatProp { - key: PropName::Num(Number { - value: i as f64, - span: DUMMY_SP, - }), - value: Box::new(elem.clone()), - })), - None => None, - }) - .collect(); + let props: Vec = array_pattern + .elems + .iter() + .enumerate() + .filter_map(|(i, elem)| match elem { + Some(elem) => Some(ObjectPatProp::KeyValue(KeyValuePatProp { + key: PropName::Num(Number { + value: i as f64, + span: DUMMY_SP, + }), + value: Box::new(elem.clone()), + })), + None => None, + }) + .collect(); - Pat::Object(ObjectPat { - props, - span: DUMMY_SP, - optional: false, - type_ann: None, - }) + Pat::Object(ObjectPat { + props, + span: DUMMY_SP, + optional: false, + type_ann: None, + }) } diff --git a/packages/next-swc/crates/core/src/next_dynamic.rs b/packages/next-swc/crates/core/src/next_dynamic.rs index 12cb475dfba5..01bff29ad322 100644 --- a/packages/next-swc/crates/core/src/next_dynamic.rs +++ b/packages/next-swc/crates/core/src/next_dynamic.rs @@ -4,9 +4,9 @@ use pathdiff::diff_paths; use swc_atoms::js_word; use swc_common::{FileName, DUMMY_SP}; use swc_ecmascript::ast::{ - ArrayLit, ArrowExpr, BinExpr, BinaryOp, BlockStmtOrExpr, Bool, CallExpr, Expr, ExprOrSpread, - ExprOrSuper, Ident, ImportDecl, ImportSpecifier, KeyValueProp, Lit, MemberExpr, Null, - ObjectLit, Prop, PropName, PropOrSpread, Str, StrKind, + ArrayLit, ArrowExpr, BinExpr, BinaryOp, BlockStmtOrExpr, Bool, CallExpr, Callee, Expr, + ExprOrSpread, Ident, ImportDecl, ImportSpecifier, KeyValueProp, Lit, MemberExpr, MemberProp, + Null, ObjectLit, Prop, PropName, PropOrSpread, Str, StrKind, }; use swc_ecmascript::utils::ExprFactory; use swc_ecmascript::utils::{ @@ -63,19 +63,15 @@ impl Fold for NextDynamicPatcher { fn fold_call_expr(&mut self, expr: CallExpr) -> CallExpr { if self.is_next_dynamic_first_arg { - if let ExprOrSuper::Expr(e) = &expr.callee { - if let Expr::Ident(Ident { sym, .. }) = &**e { - if sym == "import" { - if let Expr::Lit(Lit::Str(Str { value, .. })) = &*expr.args[0].expr { - self.dynamically_imported_specifier = Some(value.to_string()); - } - } + if let Callee::Import(..) = &expr.callee { + if let Expr::Lit(Lit::Str(Str { value, .. })) = &*expr.args[0].expr { + self.dynamically_imported_specifier = Some(value.to_string()); } } return expr.fold_children_with(self); } let mut expr = expr.fold_children_with(self); - if let ExprOrSuper::Expr(i) = &expr.callee { + if let Callee::Expr(i) = &expr.callee { if let Expr::Ident(identifier) = &**i { if self.dynamic_bindings.contains(&identifier.to_id()) { if expr.args.len() == 0 { @@ -182,21 +178,18 @@ impl Fold for NextDynamicPatcher { body: BlockStmtOrExpr::Expr(Box::new(Expr::Array(ArrayLit { elems: vec![Some(ExprOrSpread { expr: Box::new(Expr::Call(CallExpr { - callee: ExprOrSuper::Expr(Box::new(Expr::Member( + callee: Callee::Expr(Box::new(Expr::Member( MemberExpr { - obj: ExprOrSuper::Expr(Box::new( - Expr::Ident(Ident { - sym: js_word!("require"), - span: DUMMY_SP, - optional: false, - }), - )), - prop: Box::new(Expr::Ident(Ident { - sym: "resolveWeak".into(), + obj: Box::new(Expr::Ident(Ident { + sym: js_word!("require"), span: DUMMY_SP, optional: false, })), - computed: false, + prop: MemberProp::Ident(Ident { + sym: "resolveWeak".into(), + span: DUMMY_SP, + optional: false, + }), span: DUMMY_SP, }, ))), diff --git a/packages/next-swc/crates/core/src/next_ssg.rs b/packages/next-swc/crates/core/src/next_ssg.rs index 5d3647c8cc10..f744bc7e4e78 100644 --- a/packages/next-swc/crates/core/src/next_ssg.rs +++ b/packages/next-swc/crates/core/src/next_ssg.rs @@ -144,12 +144,8 @@ impl Fold for Analyzer<'_> { fn fold_jsx_element(&mut self, jsx: JSXElement) -> JSXElement { fn get_leftmost_id_member_expr(e: &JSXMemberExpr) -> Id { match &e.obj { - JSXObject::Ident(i) => { - i.to_id() - } - JSXObject::JSXMemberExpr(e) => { - get_leftmost_id_member_expr(e) - } + JSXObject::Ident(i) => i.to_id(), + JSXObject::JSXMemberExpr(e) => get_leftmost_id_member_expr(e), } } @@ -202,16 +198,6 @@ impl Fold for Analyzer<'_> { f } - fn fold_member_expr(&mut self, mut e: MemberExpr) -> MemberExpr { - e.obj = e.obj.fold_with(self); - - if e.computed { - e.prop = e.prop.fold_with(self); - } - - e - } - /// Drops [ExportDecl] if all specifiers are removed. fn fold_module_item(&mut self, s: ModuleItem) -> ModuleItem { match s { diff --git a/packages/next-swc/crates/core/src/remove_console.rs b/packages/next-swc/crates/core/src/remove_console.rs index dd7cb46cb0f8..11238eb037e4 100644 --- a/packages/next-swc/crates/core/src/remove_console.rs +++ b/packages/next-swc/crates/core/src/remove_console.rs @@ -50,7 +50,7 @@ impl RemoveConsole { fn should_remove_call(&mut self, n: &CallExpr) -> bool { let callee = &n.callee; let member_expr = match callee { - ExprOrSuper::Expr(e) => match &**e { + Callee::Expr(e) => match &**e { Expr::Member(m) => m, _ => return false, }, @@ -58,24 +58,22 @@ impl RemoveConsole { }; // Don't attempt to evaluate computed properties. - if member_expr.computed { + + if matches!(&member_expr.prop, MemberProp::Computed(..)) { return false; } // Only proceed if the object is the global `console` object. - match &member_expr.obj { - ExprOrSuper::Expr(e) => match &**e { - Expr::Ident(i) if self.is_global_console(i) => {} - _ => return false, - }, + match &*member_expr.obj { + Expr::Ident(i) if self.is_global_console(i) => {} _ => return false, } // Check if the property is requested to be excluded. // Here we do an O(n) search on the list of excluded properties because the size // should be small. - match &*member_expr.prop { - Expr::Ident(i) if self.exclude.iter().find(|x| **x == i.sym).is_none() => {} + match &member_expr.prop { + MemberProp::Ident(i) if self.exclude.iter().find(|x| **x == i.sym).is_none() => {} _ => return false, } diff --git a/packages/next-swc/crates/core/src/styled_jsx/mod.rs b/packages/next-swc/crates/core/src/styled_jsx/mod.rs index b61d78aad9c6..667032d3e199 100644 --- a/packages/next-swc/crates/core/src/styled_jsx/mod.rs +++ b/packages/next-swc/crates/core/src/styled_jsx/mod.rs @@ -227,8 +227,7 @@ impl Fold for StyledJSXTransformer { } } Expr::Member(MemberExpr { - obj: ExprOrSuper::Expr(boxed_ident), - .. + obj: boxed_ident, .. }) => { if let Expr::Ident(identifier) = &**boxed_ident { if self.external_bindings.contains(&identifier.to_id()) { @@ -284,7 +283,7 @@ impl Fold for StyledJSXTransformer { for stmt in block.stmts { new_stmts.push(stmt.fold_children_with(self)); if let Some(add_hash) = self.add_hash.take() { - new_stmts.push(add_hash_statment(add_hash)); + new_stmts.push(add_hash_statement(add_hash)); } } @@ -317,14 +316,14 @@ impl Fold for StyledJSXTransformer { })))); self.add_default_decl = None; if let Some(add_hash) = self.add_hash.take() { - new_items.push(ModuleItem::Stmt(add_hash_statment(add_hash))); + new_items.push(ModuleItem::Stmt(add_hash_statement(add_hash))); } } if !is_styled_css_import(&new_item) { new_items.push(new_item); } if let Some(add_hash) = self.add_hash.take() { - new_items.push(ModuleItem::Stmt(add_hash_statment(add_hash))); + new_items.push(ModuleItem::Stmt(add_hash_statement(add_hash))); } } @@ -489,13 +488,12 @@ impl StyledJSXTransformer { StyleExpr::Ident(ident) => { return JSXStyle::External(ExternalStyle { expr: Expr::Member(MemberExpr { - obj: ExprOrSuper::Expr(Box::new(Expr::Ident(ident.clone()))), - prop: Box::new(Expr::Ident(Ident { + obj: Box::new(Expr::Ident(ident.clone())), + prop: MemberProp::Ident(Ident { sym: "__hash".into(), span: DUMMY_SP, optional: false, - })), - computed: false, + }), span: DUMMY_SP, }), identifier: ident.clone(), @@ -571,13 +569,10 @@ impl StyledJSXTransformer { compute_class_names(&styles, &self.style_import_name.as_ref().unwrap()); let tag = match &*tagged_tpl.tag { Expr::Ident(Ident { sym, .. }) => sym.to_string(), - Expr::Member(MemberExpr { prop, .. }) => { - if let Expr::Ident(Ident { sym, .. }) = &**prop { - sym.to_string() - } else { - String::from("not_styled_jsx_tag") - } - } + Expr::Member(MemberExpr { + prop: MemberProp::Ident(Ident { sym, .. }), + .. + }) => sym.to_string(), _ => String::from("not_styled_jsx_tag"), }; let style = if let JSXStyle::Local(style) = &styles[0] { @@ -809,10 +804,9 @@ fn get_existing_class_name(el: &JSXOpeningElement) -> (Option, Option) -> Expr { new_expr } -fn add_hash_statment((id, hash): (Id, String)) -> Stmt { +fn add_hash_statement((id, hash): (Id, String)) -> Stmt { Stmt::Expr(ExprStmt { expr: Box::new(Expr::Assign(AssignExpr { left: PatOrExpr::Expr(Box::new(Expr::Member(MemberExpr { - obj: ExprOrSuper::Expr(Box::new(Expr::Ident(Ident { + obj: Box::new(Expr::Ident(Ident { sym: id.0, span: DUMMY_SP.with_ctxt(id.1), optional: false, - }))), - prop: Box::new(Expr::Ident(Ident { + })), + prop: MemberProp::Ident(Ident { sym: "__hash".into(), span: DUMMY_SP, optional: false, - })), + }), span: DUMMY_SP, - computed: false, }))), right: Box::new(string_literal_expr(&hash)), op: op!("="), diff --git a/packages/next-swc/crates/core/src/styled_jsx/utils.rs b/packages/next-swc/crates/core/src/styled_jsx/utils.rs index a79fe91e2c53..f2acbf5f22bb 100644 --- a/packages/next-swc/crates/core/src/styled_jsx/utils.rs +++ b/packages/next-swc/crates/core/src/styled_jsx/utils.rs @@ -68,19 +68,18 @@ pub fn compute_class_names( let dynamic_class_name = match dynamic_styles.len() { 0 => None, _ => Some(Expr::Call(CallExpr { - callee: ExprOrSuper::Expr(Box::new(Expr::Member(MemberExpr { - obj: ExprOrSuper::Expr(Box::new(Expr::Ident(Ident { + callee: Callee::Expr(Box::new(Expr::Member(MemberExpr { + obj: Box::new(Expr::Ident(Ident { sym: style_import_name.into(), span: DUMMY_SP, optional: false, - }))), - prop: Box::new(Expr::Ident(Ident { + })), + prop: MemberProp::Ident(Ident { sym: "dynamic".into(), span: DUMMY_SP, optional: false, - })), + }), span: DUMMY_SP, - computed: false, }))), args: vec![ExprOrSpread { expr: Box::new(Expr::Array(ArrayLit { diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/attribute-generation-modes/output.js b/packages/next-swc/crates/core/tests/fixture/styled-jsx/attribute-generation-modes/output.js index c06fbbcc4c51..ddee98e5fbd4 100644 --- a/packages/next-swc/crates/core/tests/fixture/styled-jsx/attribute-generation-modes/output.js +++ b/packages/next-swc/crates/core/tests/fixture/styled-jsx/attribute-generation-modes/output.js @@ -23,7 +23,7 @@ export const Test2 = ()=>
external and dynamic

- <_JSXStyle id={"5cadd6714ea141b4"} dynamic={[ + <_JSXStyle id={"332b21af86b0ec6"} dynamic={[ color ]}>{`p.__jsx-style-dynamic-selector{color:${color}}`} @@ -49,7 +49,7 @@ export const Test3 = ({ color })=>
{"p.jsx-ceba8c9ce34e3d0c{display:inline-block}"} - <_JSXStyle id={"8f336bc49da94d3f"} dynamic={[ + <_JSXStyle id={"ec8f36d08fa7aa2c"} dynamic={[ color ]}>{`p.__jsx-style-dynamic-selector{color:${color}}`} @@ -87,7 +87,7 @@ export const Test5 = ()=>
; export const Test6 = ({ color })=>
{"p.jsx-ceba8c9ce34e3d0c{display:inline-block}"} - <_JSXStyle id={"8f336bc49da94d3f"} dynamic={[ + <_JSXStyle id={"ec8f36d08fa7aa2c"} dynamic={[ color ]}>{`p.__jsx-style-dynamic-selector{color:${color}}`} @@ -113,7 +113,7 @@ export const Test6 = ({ color })=>
dynamic only

- <_JSXStyle id={"5cadd6714ea141b4"} dynamic={[ + <_JSXStyle id={"332b21af86b0ec6"} dynamic={[ color ]}>{`p.__jsx-style-dynamic-selector{color:${color}}`} @@ -142,7 +142,7 @@ export const Test8 = ({ color })=>{ }; return
{

dynamic with scoped compound variable

- <_JSXStyle id={"6e7028e37f6f2a1c"} dynamic={[ + <_JSXStyle id={"c37e7ca12a9fbc5b"} dynamic={[ innerProps.color ]}>{`p.__jsx-style-dynamic-selector{color:${innerProps.color}}`} @@ -171,7 +171,7 @@ export const Test9 = ({ color })=>{ }; return
{

dynamic with compound variable

- <_JSXStyle id={"33344a45c20c74fe"} dynamic={[ + <_JSXStyle id={"59d22b990ceca2d7"} dynamic={[ innerProps.color ]}>{`p.__jsx-style-dynamic-selector{color:${innerProps.color}}`}
; }; const foo = "red"; -export const Test10 = ()=>
+export const Test10 = ()=>
-

dynamic with constant variable

+

dynamic with constant variable

- <_JSXStyle id={"e993bec5c22e1b75"}>{`p.jsx-e993bec5c22e1b75{color:${foo}}`} + <_JSXStyle id={"64eb0b4e09da0dd3"}>{`p.jsx-64eb0b4e09da0dd3{color:${foo}}`}
; @@ -207,14 +207,14 @@ export const Test11 = ({ color })=>{ length: 5 }).map((item, i)=>
  • - <_JSXStyle id={"5dc7166977a4514"} dynamic={[ + <_JSXStyle id={"93933d24284432d0"} dynamic={[ color ]}>{`.item.__jsx-style-dynamic-selector{color:${color}}`} diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/different-jsx-ids/output.js b/packages/next-swc/crates/core/tests/fixture/styled-jsx/different-jsx-ids/output.js index 49c9cc0120fb..f78146a476f1 100644 --- a/packages/next-swc/crates/core/tests/fixture/styled-jsx/different-jsx-ids/output.js +++ b/packages/next-swc/crates/core/tests/fixture/styled-jsx/different-jsx-ids/output.js @@ -1,19 +1,19 @@ import _JSXStyle from "styled-jsx/style"; const color = "red"; const otherColor = "green"; -const A = ()=>
    +const A = ()=>
    -

    test

    +

    test

    - <_JSXStyle id={"f44d626e14f3cfbc"}>{`p.jsx-f44d626e14f3cfbc{color:${color}}`} + <_JSXStyle id={"319ecfcffea32bfb"}>{`p.jsx-319ecfcffea32bfb{color:${color}}`}
    ; -const B = ()=>
    +const B = ()=>
    -

    test

    +

    test

    - <_JSXStyle id={"9db1df72abe82640"}>{`p.jsx-9db1df72abe82640{color:${otherColor}}`} + <_JSXStyle id={"8a19b9bd65b986e0"}>{`p.jsx-8a19b9bd65b986e0{color:${otherColor}}`}
    ; diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/expressions/output.js b/packages/next-swc/crates/core/tests/fixture/styled-jsx/expressions/output.js index 91f35e2ea9b5..ea1779a5ca0e 100644 --- a/packages/next-swc/crates/core/tests/fixture/styled-jsx/expressions/output.js +++ b/packages/next-swc/crates/core/tests/fixture/styled-jsx/expressions/output.js @@ -9,85 +9,85 @@ const animationName = "my-cool-animation"; const obj = { display: "block" }; -export default (({ display })=>
    -

    test

    - <_JSXStyle id={"5df43f2861c900e6"}>{`p.${color}.jsx-843124768056a74c{color:${otherColor}; + <_JSXStyle id={"6116059e04f3bff7"}>{`p.${color}.jsx-1ada4ad4dab7822f{color:${otherColor}; display:${obj.display}}`} - <_JSXStyle id={"94239b6d6b42c9b5"}>{"p.jsx-843124768056a74c{color:red}"} + <_JSXStyle id={"94239b6d6b42c9b5"}>{"p.jsx-1ada4ad4dab7822f{color:red}"} - <_JSXStyle id={"a971cf00393d41be"}>{`body{background:${color}}`} + <_JSXStyle id={"171303fb0d7f788b"}>{`body{background:${color}}`} - <_JSXStyle id={"a971cf00393d41be"}>{`body{background:${color}}`} + <_JSXStyle id={"171303fb0d7f788b"}>{`body{background:${color}}`} // TODO: the next two should have the same hash - <_JSXStyle id={"5cadd6714ea141b4"}>{`p.jsx-843124768056a74c{color:${color}}`} + <_JSXStyle id={"332b21af86b0ec6"}>{`p.jsx-1ada4ad4dab7822f{color:${color}}`} - <_JSXStyle id={"5cadd6714ea141b4"}>{`p.jsx-843124768056a74c{color:${color}}`} + <_JSXStyle id={"332b21af86b0ec6"}>{`p.jsx-1ada4ad4dab7822f{color:${color}}`} - <_JSXStyle id={"785cf5e120672da8"} dynamic={[ + <_JSXStyle id={"50021e09364b96c8"} dynamic={[ darken(color) ]}>{`p.__jsx-style-dynamic-selector{color:${darken(color)}}`} - <_JSXStyle id={"108a316873f1c6fc"} dynamic={[ + <_JSXStyle id={"f07deae908c9294f"} dynamic={[ darken(color) + 2 ]}>{`p.__jsx-style-dynamic-selector{color:${darken(color) + 2}}`} - <_JSXStyle id={"bb5a8a5ee5cd36db"}>{`@media (min-width:${mediumScreen}) {p.jsx-843124768056a74c{color:green} -p.jsx-843124768056a74c{color:${`red`}}} -p.jsx-843124768056a74c{color:red}`} + <_JSXStyle id={"4e4be2da62837c76"}>{`@media (min-width:${mediumScreen}) {p.jsx-1ada4ad4dab7822f{color:green} +p.jsx-1ada4ad4dab7822f{color:${`red`}}} +p.jsx-1ada4ad4dab7822f{color:red}`} - <_JSXStyle id={"99746edba785c617"}>{`p.jsx-843124768056a74c{-webkit-animation-duration:${animationDuration}; + <_JSXStyle id={"27040f0829fb73d4"}>{`p.jsx-1ada4ad4dab7822f{-webkit-animation-duration:${animationDuration}; animation-duration:${animationDuration}}`} - <_JSXStyle id={"62d69d091a270e9d"}>{`p.jsx-843124768056a74c{-webkit-animation:${animationDuration} forwards ${animationName}; + <_JSXStyle id={"3e72d735e703a530"}>{`p.jsx-1ada4ad4dab7822f{-webkit-animation:${animationDuration} forwards ${animationName}; animation:${animationDuration} forwards ${animationName}} -div.jsx-843124768056a74c{background:${color}}`} +div.jsx-1ada4ad4dab7822f{background:${color}}`} - <_JSXStyle id={"a124d516c2c0707d"} dynamic={[ + <_JSXStyle id={"183a75aa3877c18a"} dynamic={[ display ? "block" : "none" ]}>{`span.__jsx-style-dynamic-selector{display:${display ? "block" : "none"}}`} diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/issue-30480/output.js b/packages/next-swc/crates/core/tests/fixture/styled-jsx/issue-30480/output.js index 892df0b6ee3b..d91b5759a137 100644 --- a/packages/next-swc/crates/core/tests/fixture/styled-jsx/issue-30480/output.js +++ b/packages/next-swc/crates/core/tests/fixture/styled-jsx/issue-30480/output.js @@ -1,14 +1,14 @@ import _JSXStyle from "styled-jsx/style"; export default (({ breakPoint })=>
    - <_JSXStyle id={"6b843a9852a4be26"} dynamic={[ + <_JSXStyle id={"42a6f8ca08e1a043"} dynamic={[ breakPoint ]}>{`@media (${breakPoint}) {}`} diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/issue-31562-interpolation-in-mdea/output.js b/packages/next-swc/crates/core/tests/fixture/styled-jsx/issue-31562-interpolation-in-mdea/output.js index d44f9c1b2cfb..fb59ef207106 100644 --- a/packages/next-swc/crates/core/tests/fixture/styled-jsx/issue-31562-interpolation-in-mdea/output.js +++ b/packages/next-swc/crates/core/tests/fixture/styled-jsx/issue-31562-interpolation-in-mdea/output.js @@ -3,7 +3,7 @@ export default class { render() { return
    test

    - <_JSXStyle id={"a876575397b32eda"} dynamic={[ + <_JSXStyle id={"5bbb77b0f67942dc"} dynamic={[ Typography.base.size.default, Typography.base.lineHeight, Target.mediumPlus, diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/number-after-placeholder/output.js b/packages/next-swc/crates/core/tests/fixture/styled-jsx/number-after-placeholder/output.js index da1caf97d70e..19b912eb0102 100644 --- a/packages/next-swc/crates/core/tests/fixture/styled-jsx/number-after-placeholder/output.js +++ b/packages/next-swc/crates/core/tests/fixture/styled-jsx/number-after-placeholder/output.js @@ -1,17 +1,17 @@ import _JSXStyle from "styled-jsx/style"; import Link from "next/link"; export default function IndexPage() { - return
    + return
    Hello World.{" "} - Abound + Abound - <_JSXStyle id={"bc8a8bae32099ce8"}>{`a.jsx-bc8a8bae32099ce8{color:${"#abcdef"}12}`} + <_JSXStyle id={"b642661fd6426842"}>{`a.jsx-b642661fd6426842{color:${"#abcdef"}12}`}
    ; }; diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/styles/output.js b/packages/next-swc/crates/core/tests/fixture/styled-jsx/styles/output.js index 1e0ef8c9592f..415058e5691e 100644 --- a/packages/next-swc/crates/core/tests/fixture/styled-jsx/styles/output.js +++ b/packages/next-swc/crates/core/tests/fixture/styled-jsx/styles/output.js @@ -6,29 +6,29 @@ bar.__hash = "aaed0341accea8f"; const baz = new String("div{font-size:3em}"); baz.__hash = "aaed0341accea8f"; const a = new String(`div{font-size:${size}em}`); -a.__hash = "f14cced97c082d2c"; +a.__hash = "5ba1fcb8b8f3d807"; export const uh = bar; -export const foo = new String(`div.jsx-a0d126276b085021{color:${color}}`); -foo.__hash = "a0d126276b085021"; +export const foo = new String(`div.jsx-945eaa83250ed332{color:${color}}`); +foo.__hash = "945eaa83250ed332"; ({ - styles: <_JSXStyle id={"47e08c293b53f262"}>{`div.jsx-47e08c293b53f262{color:${colors.green.light}} -a.jsx-47e08c293b53f262{color:red}`}, - className: "jsx-47e08c293b53f262" + styles: <_JSXStyle id={"c107a919a5b2943d"}>{`div.jsx-c107a919a5b2943d{color:${colors.green.light}} +a.jsx-c107a919a5b2943d{color:red}`}, + className: "jsx-c107a919a5b2943d" }); const b = { - styles: <_JSXStyle id={"47e08c293b53f262"}>{`div.jsx-47e08c293b53f262{color:${colors.green.light}} -a.jsx-47e08c293b53f262{color:red}`}, - className: "jsx-47e08c293b53f262" + styles: <_JSXStyle id={"c107a919a5b2943d"}>{`div.jsx-c107a919a5b2943d{color:${colors.green.light}} +a.jsx-c107a919a5b2943d{color:red}`}, + className: "jsx-c107a919a5b2943d" }; const dynamic = (colors1)=>{ const b = { - styles: <_JSXStyle id={"79d79305fa1611e"} dynamic={[ + styles: <_JSXStyle id={"60132422fc87f1d1"} dynamic={[ colors1.green.light ]}>{`div.__jsx-style-dynamic-selector{color:${colors1.green.light}} a.__jsx-style-dynamic-selector{color:red}`}, className: _JSXStyle.dynamic([ [ - "79d79305fa1611e", + "60132422fc87f1d1", [ colors1.green.light ] @@ -37,7 +37,7 @@ a.__jsx-style-dynamic-selector{color:red}`}, }; }; export default { - styles: <_JSXStyle id={"d9cea503e39c5315"}>{`div.jsx-d9cea503e39c5315{font-size:3em} -p.jsx-d9cea503e39c5315{color:${color}}`}, - className: "jsx-d9cea503e39c5315" + styles: <_JSXStyle id={"e5da8dd7ff5c7f39"}>{`div.jsx-e5da8dd7ff5c7f39{font-size:3em} +p.jsx-e5da8dd7ff5c7f39{color:${color}}`}, + className: "jsx-e5da8dd7ff5c7f39" }; diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/too-many/output.js b/packages/next-swc/crates/core/tests/fixture/styled-jsx/too-many/output.js index f239d71bf04f..00ff7acd83a6 100644 --- a/packages/next-swc/crates/core/tests/fixture/styled-jsx/too-many/output.js +++ b/packages/next-swc/crates/core/tests/fixture/styled-jsx/too-many/output.js @@ -2,7 +2,7 @@ import _JSXStyle from "styled-jsx/style"; export const Red = ({ Component ="button" })=>{ return { {} - <_JSXStyle id={"ab280f80c0d19763"} dynamic={[ + <_JSXStyle id={"ca900d186ad0e495"} dynamic={[ e1, e2, e3, diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-escape-2/output.js b/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-escape-2/output.js index f9b09f84aa04..3e3ed2489c67 100644 --- a/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-escape-2/output.js +++ b/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-escape-2/output.js @@ -2,14 +2,14 @@ import _JSXStyle from "styled-jsx/style"; export default function Home({ fontFamily }) { return
    - <_JSXStyle id={"d64fed44dbc5d8df"} dynamic={[ + <_JSXStyle id={"f804e2f486b6ac13"} dynamic={[ fontFamily ]}>{`body{font-family:${fontFamily}} code:before, code:after{content:'\`'}`} diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-1-as-property/output.js b/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-1-as-property/output.js index 7422567d0bb6..9d93281ced13 100644 --- a/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-1-as-property/output.js +++ b/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-1-as-property/output.js @@ -3,7 +3,7 @@ export default class { render() { return
    test

    - <_JSXStyle id={"8c1103276226be14"} dynamic={[ + <_JSXStyle id={"e359801ddd3b3cb6"} dynamic={[ inputSize ? "height: calc(2 * var(--a)) !important;" : "" ]}>{`@media only screen {a.__jsx-style-dynamic-selector{${inputSize ? "height: calc(2 * var(--a)) !important;" : ""} }}`} diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-2-as-part-of-value/output.js b/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-2-as-part-of-value/output.js index 49d6ac7b3a0b..bc25a6c5235b 100644 --- a/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-2-as-part-of-value/output.js +++ b/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-2-as-part-of-value/output.js @@ -3,7 +3,7 @@ export default class { render() { return
    test

    - <_JSXStyle id={"1a8c0e5c60018729"} dynamic={[ + <_JSXStyle id={"1a799d9370a3a386"} dynamic={[ a[b], -1 * (c || 0), d diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-3-as-value/output.js b/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-3-as-value/output.js index 5b7244f9e42c..f311c3526881 100644 --- a/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-3-as-value/output.js +++ b/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-3-as-value/output.js @@ -3,7 +3,7 @@ export default class { render() { return
    test

    - <_JSXStyle id={"1dd34a5c235f087f"} dynamic={[ + <_JSXStyle id={"4ca4ef3595473f53"} dynamic={[ a ]}>{`@media only screen {a.__jsx-style-dynamic-selector{color:${a}}}`} diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-4-as-part-of-value-in-multiple/output.js b/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-4-as-part-of-value-in-multiple/output.js index 291494df4f02..4683d8c24306 100644 --- a/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-4-as-part-of-value-in-multiple/output.js +++ b/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-4-as-part-of-value-in-multiple/output.js @@ -3,7 +3,7 @@ export default class { render() { return
    test

    - <_JSXStyle id={"35bb702eb335aa6f"} dynamic={[ + <_JSXStyle id={"97886c1e9511aafa"} dynamic={[ a || "var(--c)", b || "inherit" ]}>{`.a:hover .b.__jsx-style-dynamic-selector{display:inline-block; diff --git a/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-5-values-of-multiple-properties/output.js b/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-5-values-of-multiple-properties/output.js index 04c7ddfab315..e009c13a7456 100644 --- a/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-5-values-of-multiple-properties/output.js +++ b/packages/next-swc/crates/core/tests/fixture/styled-jsx/tpl-placeholder-5-values-of-multiple-properties/output.js @@ -3,7 +3,7 @@ export default class { render() { return
    test

    - <_JSXStyle id={"21ae2868f133bbf6"} dynamic={[ + <_JSXStyle id={"bcc606c168bcd197"} dynamic={[ a ? "100%" : "200px", b ? "0" : "8px 20px" ]}>{`.item.__jsx-style-dynamic-selector{max-width:${a ? "100%" : "200px"}; diff --git a/packages/next-swc/crates/napi/Cargo.toml b/packages/next-swc/crates/napi/Cargo.toml index de8d313ea1ff..8ea18d426410 100644 --- a/packages/next-swc/crates/napi/Cargo.toml +++ b/packages/next-swc/crates/napi/Cargo.toml @@ -16,12 +16,12 @@ once_cell = "1.8.0" serde = "1" serde_json = "1" next-swc = { version = "0.0.0", path = "../core" } -swc = "0.110.0" +swc = "0.114.0" swc_atoms = "0.2.7" -swc_bundler = { version = "0.98.0", features = ["concurrent"] } -swc_common = { version = "0.16.0", features = ["concurrent", "sourcemap"] } -swc_ecma_loader = { version = "0.26.0", features = ["node", "lru"] } -swc_ecmascript = { version = "0.105.0", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] } +swc_bundler = { version = "0.101.0", features = ["concurrent"] } +swc_common = { version = "0.17.0", features = ["concurrent", "sourcemap"] } +swc_ecma_loader = { version = "0.27.0", features = ["node", "lru"] } +swc_ecmascript = { version = "0.108.1", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] } swc_node_base = "0.5.1" [build-dependencies] diff --git a/packages/next-swc/crates/wasm/Cargo.toml b/packages/next-swc/crates/wasm/Cargo.toml index 79ac28b8f5e1..eaad37105356 100644 --- a/packages/next-swc/crates/wasm/Cargo.toml +++ b/packages/next-swc/crates/wasm/Cargo.toml @@ -16,9 +16,9 @@ path-clean = "0.1" serde = {version = "1", features = ["derive"]} serde_json = "1" next-swc = { version = "0.0.0", path = "../core" } -swc = "0.110.0" -swc_common = { version = "0.16.0", features = ["concurrent", "sourcemap"] } -swc_ecmascript = { version = "0.105.0", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] } +swc = "0.114.0" +swc_common = { version = "0.17.0", features = ["concurrent", "sourcemap"] } +swc_ecmascript = { version = "0.108.1", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] } tracing = {version = "0.1.28", features = ["release_max_level_off"]} wasm-bindgen = {version = "0.2", features = ["serde-serialize"]} wasm-bindgen-futures = "0.4.8"