Update swc (#32210)

Co-authored-by: Tim Neutkens <tim@timneutkens.nl>
This commit is contained in:
Donny/강동윤 2021-12-09 02:54:21 +09:00 committed by GitHub
parent 345956f1d2
commit 4ce49b79a2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
59 changed files with 842 additions and 370 deletions

View file

@ -173,11 +173,13 @@ dependencies = [
[[package]] [[package]]
name = "browserslist-rs" name = "browserslist-rs"
version = "0.2.0" version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aa428c5a7369965603314e5fbfa5ae1755159bce2c35880d80ea84a866213b20" checksum = "06d55644ca5427fce1939111997f9d58e78b0ea196e76a4cf327aa93f2553608"
dependencies = [ dependencies = [
"anyhow",
"chrono", "chrono",
"either",
"itertools", "itertools",
"js-sys", "js-sys",
"once_cell", "once_cell",
@ -186,6 +188,7 @@ dependencies = [
"serde-wasm-bindgen", "serde-wasm-bindgen",
"serde_json", "serde_json",
"thiserror", "thiserror",
"ustr",
"wasm-bindgen", "wasm-bindgen",
] ]
@ -832,7 +835,7 @@ dependencies = [
"swc_css", "swc_css",
"swc_ecma_loader", "swc_ecma_loader",
"swc_ecma_transforms_testing", "swc_ecma_transforms_testing",
"swc_ecmascript 0.88.3", "swc_ecmascript",
"swc_node_base", "swc_node_base",
"swc_stylis", "swc_stylis",
"testing", "testing",
@ -859,7 +862,7 @@ dependencies = [
"swc_bundler", "swc_bundler",
"swc_common", "swc_common",
"swc_ecma_loader", "swc_ecma_loader",
"swc_ecmascript 0.88.3", "swc_ecmascript",
"swc_node_base", "swc_node_base",
] ]
@ -1733,9 +1736,9 @@ checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c"
[[package]] [[package]]
name = "styled_components" name = "styled_components"
version = "0.2.0" version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "80be3206e0bfb4137e355c3370913169c03a656578b8d24583248e4503a8d50b" checksum = "08dffe3103edc558dbd35ef58cdfee40f5f0d8983fc079c769e6414e709874fc"
dependencies = [ dependencies = [
"Inflector", "Inflector",
"once_cell", "once_cell",
@ -1743,15 +1746,15 @@ dependencies = [
"serde", "serde",
"swc_atoms", "swc_atoms",
"swc_common", "swc_common",
"swc_ecmascript 0.87.0", "swc_ecmascript",
"tracing", "tracing",
] ]
[[package]] [[package]]
name = "swc" name = "swc"
version = "0.88.2" version = "0.95.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95e31ae9192b444c5e9564d6645203b8b1af79e4df7df2162311211ca0b42e21" checksum = "da888cb9f9d0526ba5955466d85f040d67d7a9ae7dd5b5b9925fab3484bf41ce"
dependencies = [ dependencies = [
"ahash", "ahash",
"anyhow", "anyhow",
@ -1781,7 +1784,7 @@ dependencies = [
"swc_ecma_transforms_optimization", "swc_ecma_transforms_optimization",
"swc_ecma_utils", "swc_ecma_utils",
"swc_ecma_visit", "swc_ecma_visit",
"swc_ecmascript 0.88.3", "swc_ecmascript",
"swc_node_comments", "swc_node_comments",
"swc_visit", "swc_visit",
"tracing", "tracing",
@ -1799,9 +1802,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_bundler" name = "swc_bundler"
version = "0.82.2" version = "0.88.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f6c696144d52ef57a25738680de9c4e20c0bfd2b8eca326820986b4179f34756" checksum = "e85f88efa0b6df11df12921280a679b5cfe23fdc1c56e7f37c5c166d55be3e0a"
dependencies = [ dependencies = [
"ahash", "ahash",
"anyhow", "anyhow",
@ -1833,9 +1836,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_common" name = "swc_common"
version = "0.14.7" version = "0.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "188984898a61b3d0d7aa7c2451ae23d6bda16cb1a94d19dd8d1b7d906c5754bc" checksum = "560998b621793a613c98ec8cdbd729e46332dd3fbf7619b57e9d98c15e142e2e"
dependencies = [ dependencies = [
"ahash", "ahash",
"ast_node", "ast_node",
@ -1862,9 +1865,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_css" name = "swc_css"
version = "0.31.0" version = "0.44.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "706a6a61731552fc0adfa367acd26c1095e4af4d4cda2d1a8f9bbb9fb3edb27e" checksum = "9c8a884ef7656268711992a8ff9c210ca10d8b9805d49ee76c3064fe36d54cd8"
dependencies = [ dependencies = [
"swc_css_ast", "swc_css_ast",
"swc_css_codegen", "swc_css_codegen",
@ -1875,9 +1878,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_css_ast" name = "swc_css_ast"
version = "0.29.0" version = "0.40.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ecc5971c63c5ef848d7d6c9cb6d8da69b8fb2e98bf56266895367bea44f3e56b" checksum = "a45ea4319216278b889edb38feefdc6174f0b7f4e76412dd1b64c796d2a1ae98"
dependencies = [ dependencies = [
"is-macro", "is-macro",
"serde", "serde",
@ -1888,9 +1891,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_css_codegen" name = "swc_css_codegen"
version = "0.29.0" version = "0.42.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "708b3a52cfbf52edf4df499a17c8887a0a4c9632654a8d9e60a3e7172afb60ab" checksum = "6fa9cc8b1c68320e0fd7df1b6d0f2d71e4429fd207c1ab95a84f3f4021fb6886"
dependencies = [ dependencies = [
"auto_impl 0.4.1", "auto_impl 0.4.1",
"bitflags", "bitflags",
@ -1915,9 +1918,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_css_parser" name = "swc_css_parser"
version = "0.31.0" version = "0.44.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "79630423c25828a8ea5c1aba90687c3f4ef48ddcb31f9c97299e4c8ff0321c7b" checksum = "a1e320dae7460f78c5496bfd58b7a3494addd34a8df8841e689774cdecf760b4"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"lexical", "lexical",
@ -1929,9 +1932,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_css_utils" name = "swc_css_utils"
version = "0.26.0" version = "0.37.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bf42c983650eaa74303c92643f1c64212f66c92a5c4194f0071cfad2e90876d1" checksum = "d68fa86c5475fab73ec9648823149d1e3735ef847a5fbf015043eb2be67a59ca"
dependencies = [ dependencies = [
"swc_atoms", "swc_atoms",
"swc_common", "swc_common",
@ -1941,9 +1944,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_css_visit" name = "swc_css_visit"
version = "0.28.0" version = "0.39.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "397018fa9ec794307aafb56d8934c7abb8287cfe4ebf2842a1e3b7ff5b8974a8" checksum = "9ba4976df9cb8aebba40624620295cec44ddbd66aca90ac0ea27a59cf89312be"
dependencies = [ dependencies = [
"swc_atoms", "swc_atoms",
"swc_common", "swc_common",
@ -1953,9 +1956,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_ecma_ast" name = "swc_ecma_ast"
version = "0.58.1" version = "0.59.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d8678255e15265b4cf564c44035b9901c5bef22c19c2c3f4babccfb8de5ccfbe" checksum = "a31826c0275a1062d1e16d5b428c5059d176274c4e6c1c499525ddd2c65fcacc"
dependencies = [ dependencies = [
"is-macro", "is-macro",
"num-bigint", "num-bigint",
@ -1967,9 +1970,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_ecma_codegen" name = "swc_ecma_codegen"
version = "0.80.0" version = "0.83.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c00f3932d286865ae2784cd4da1926d7668032b156360831103fc2a24c5ff18" checksum = "08ed18a9bf4bca94b2029ed267373b01f4e207f5f617ab403b3bca96a44f5547"
dependencies = [ dependencies = [
"bitflags", "bitflags",
"memchr", "memchr",
@ -1999,9 +2002,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_ecma_ext_transforms" name = "swc_ecma_ext_transforms"
version = "0.38.1" version = "0.41.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74246f8ffabdb1272e94043ed7446b65b1964e95a07111406d7d6cd68588abd3" checksum = "2a1a9b843b5a4f3d4bb4f5def7ac0e6657c814e8dd169801ac8cdbd23ad45ff3"
dependencies = [ dependencies = [
"phf", "phf",
"swc_atoms", "swc_atoms",
@ -2014,9 +2017,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_ecma_loader" name = "swc_ecma_loader"
version = "0.24.4" version = "0.25.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eda70aee2118769474918d260e947fe08bfd56a5fc3d17c1a5aebeeb8d0c226e" checksum = "b0c9672f7cf71bf2a98fc0c66eed90d43db9252c82e52096c7159ea5521f3478"
dependencies = [ dependencies = [
"ahash", "ahash",
"anyhow", "anyhow",
@ -2035,9 +2038,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_ecma_minifier" name = "swc_ecma_minifier"
version = "0.51.4" version = "0.58.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d6d7c84fc1e976d25a2ca940e1f614ae55a42e1bc5c717e6d87ec29201825169" checksum = "7c39028b6c8a3b189c99f7c6bd8ce4d3104957a0ab99fa935501107430507c5b"
dependencies = [ dependencies = [
"ahash", "ahash",
"indexmap", "indexmap",
@ -2063,9 +2066,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_ecma_parser" name = "swc_ecma_parser"
version = "0.78.11" version = "0.81.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "abe082abd0148a66e6b5c9c97c36a770bac1912bf500c3bc982ac7101c17218d" checksum = "97570156b3eec2e91b43f3adf9526caaf5cdf656c65a7722715b3537c2952261"
dependencies = [ dependencies = [
"either", "either",
"enum_kind", "enum_kind",
@ -2084,9 +2087,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_ecma_preset_env" name = "swc_ecma_preset_env"
version = "0.67.4" version = "0.73.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5429c17805bddd7ab965b7dcfda6d2d3077f39d6aa3746b322fbf3d917cb23ac" checksum = "cc3cec2c243a4bcd9ff686b96fe59d342e632c5986cfc2a5cf548908903e574a"
dependencies = [ dependencies = [
"ahash", "ahash",
"anyhow", "anyhow",
@ -2110,9 +2113,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_ecma_transforms" name = "swc_ecma_transforms"
version = "0.95.2" version = "0.101.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "54c954d14b46f24ea894f37cacad4bdf1a9f37a316aaefe62e3a5033689e71de" checksum = "15931263dab79ddee709e981b5222d84a684cfaa66d2913394bee6d5b4635cca"
dependencies = [ dependencies = [
"swc_atoms", "swc_atoms",
"swc_common", "swc_common",
@ -2132,9 +2135,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_ecma_transforms_base" name = "swc_ecma_transforms_base"
version = "0.44.3" version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "18e0f787be734204a739fb774d0c00b15dcf0f8a3040f993ac18f6b8e47cc50e" checksum = "0bfa5fa18d0f7b7f2cf3522049e22ca8c5a77072a30f597c38de1c5f10a69501"
dependencies = [ dependencies = [
"once_cell", "once_cell",
"phf", "phf",
@ -2152,9 +2155,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_ecma_transforms_classes" name = "swc_ecma_transforms_classes"
version = "0.30.2" version = "0.34.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "59d4aa36016acc3da3f42036f5c6fdab84b0e6200a49b84280dd852bbae256a3" checksum = "7305d99e9851ae762e8bca1f7d43a0a1dd6c55b78220b10425b06a5f54c4498f"
dependencies = [ dependencies = [
"swc_atoms", "swc_atoms",
"swc_common", "swc_common",
@ -2166,9 +2169,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_ecma_transforms_compat" name = "swc_ecma_transforms_compat"
version = "0.52.19" version = "0.57.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f8857bd04b2b6fba11168c1a4c66b48c1d9e7867a7bf1c649fe7131d2c2cfb2" checksum = "6a93703c4aa6df222557f36ce7fe14d3c8ed458ae7546d74a67534360cf0eed3"
dependencies = [ dependencies = [
"ahash", "ahash",
"arrayvec", "arrayvec",
@ -2186,6 +2189,7 @@ dependencies = [
"swc_ecma_transforms_macros", "swc_ecma_transforms_macros",
"swc_ecma_utils", "swc_ecma_utils",
"swc_ecma_visit", "swc_ecma_visit",
"tracing",
] ]
[[package]] [[package]]
@ -2203,9 +2207,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_ecma_transforms_module" name = "swc_ecma_transforms_module"
version = "0.58.3" version = "0.63.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "866abb059c40d454d8010de499d9f8e12994a7213779596d1c9a9a611dac9dfa" checksum = "721c7aa29ce8a905a1aef0c29546a158fb1859b733329ead7c5b40d86a9e25cb"
dependencies = [ dependencies = [
"Inflector", "Inflector",
"ahash", "ahash",
@ -2225,9 +2229,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_ecma_transforms_optimization" name = "swc_ecma_transforms_optimization"
version = "0.65.1" version = "0.71.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bcd8f861cef30f9b3bd262828249cd32df4bbe5000d250fe63de2888d79ff08f" checksum = "7d528d813fd0af0c8727b0143b0c60759ff6a1cefb7223ee955da85c90edaaa6"
dependencies = [ dependencies = [
"ahash", "ahash",
"dashmap", "dashmap",
@ -2249,9 +2253,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_ecma_transforms_proposal" name = "swc_ecma_transforms_proposal"
version = "0.58.1" version = "0.63.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "954e89a6b90b36719530624b9607fe62f783e04b7f368d526ac0038e9d646faa" checksum = "1185431bc8fb9d5460f662effbe4eaa10f1038f4e7fc7cfb2edfef4a7cc1104e"
dependencies = [ dependencies = [
"either", "either",
"serde", "serde",
@ -2269,9 +2273,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_ecma_transforms_react" name = "swc_ecma_transforms_react"
version = "0.60.1" version = "0.65.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "380dc7c6617b4866f295baf4c41a0e64f5c265a734ac457008723fca18235765" checksum = "c0f9a87fba33abfae51b6442c521af5bc607fe81aca98efb131102eff2b3df38"
dependencies = [ dependencies = [
"ahash", "ahash",
"base64 0.13.0", "base64 0.13.0",
@ -2294,9 +2298,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_ecma_transforms_testing" name = "swc_ecma_transforms_testing"
version = "0.45.1" version = "0.49.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0af96fa0f7935d8b596e6041c0cebea6f01ec7b72ca21af78724e6bdccb3da7e" checksum = "99ff879410a201151440a2cc096abc28fd0e065cdc20a3edde71e9332c411c6a"
dependencies = [ dependencies = [
"ansi_term", "ansi_term",
"anyhow", "anyhow",
@ -2317,9 +2321,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_ecma_transforms_typescript" name = "swc_ecma_transforms_typescript"
version = "0.61.2" version = "0.67.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "92de92acef99e2e3cbd38eb0d864d46dbae66d45eb04cb64792d2aec5e8cf622" checksum = "104774e78a1c8e3f1a82c82e34f8664ba2975eaa4c61b4355499b4f270aac06f"
dependencies = [ dependencies = [
"serde", "serde",
"swc_atoms", "swc_atoms",
@ -2334,9 +2338,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_ecma_utils" name = "swc_ecma_utils"
version = "0.52.4" version = "0.55.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a574cee3c938142eb2ba55ddc8de9416c03400f8c7e90a7ac9c1b1b8bae1d211" checksum = "f0adfd7c7ebc9133e5d98dbe307c8ef41d43ae9ba9e5f3f690880b057ab0adc3"
dependencies = [ dependencies = [
"once_cell", "once_cell",
"rayon", "rayon",
@ -2344,39 +2348,29 @@ dependencies = [
"swc_common", "swc_common",
"swc_ecma_ast", "swc_ecma_ast",
"swc_ecma_visit", "swc_ecma_visit",
"tracing",
"unicode-xid", "unicode-xid",
] ]
[[package]] [[package]]
name = "swc_ecma_visit" name = "swc_ecma_visit"
version = "0.44.1" version = "0.45.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "635ac1f529c75c948a3a55d1bc2cef1861004811b733560cf3f62d0183dbdbb8" checksum = "f0b3826abd1e68214fe9743437236608a0a22d27912e84a85a53f1e977e10468"
dependencies = [ dependencies = [
"num-bigint", "num-bigint",
"swc_atoms", "swc_atoms",
"swc_common", "swc_common",
"swc_ecma_ast", "swc_ecma_ast",
"swc_visit", "swc_visit",
"tracing",
] ]
[[package]] [[package]]
name = "swc_ecmascript" name = "swc_ecmascript"
version = "0.87.0" version = "0.95.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e766b0ce800f14c983fdeb2d6fb81880e341321841afd4ad1469d9f2ac79ecd" checksum = "703291bc32dd81c1d73761e02442bdefed5844490f853f9979b8b8cb21e7392b"
dependencies = [
"swc_ecma_ast",
"swc_ecma_parser",
"swc_ecma_utils",
"swc_ecma_visit",
]
[[package]]
name = "swc_ecmascript"
version = "0.88.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fd485710cd6f3e1b7ff55f3249f613cee3e527bb169529b73fc62717b1e91f9f"
dependencies = [ dependencies = [
"swc_ecma_ast", "swc_ecma_ast",
"swc_ecma_codegen", "swc_ecma_codegen",
@ -2401,9 +2395,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_fast_graph" name = "swc_fast_graph"
version = "0.1.0" version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "216c58d35aaef9ba671166bae0e6137e6b652d5f6db1b1e9db728f8ef6fe3336" checksum = "b4e08c814c7283238c72c61069614b55d58ccfeeb5e4fd9887913e9d34102632"
dependencies = [ dependencies = [
"ahash", "ahash",
"indexmap", "indexmap",
@ -2413,9 +2407,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_graph_analyzer" name = "swc_graph_analyzer"
version = "0.1.1" version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ebef7e80ffd2d2669969d9794155de5f08cc122c47c591ba93d4ab96d1adfadb" checksum = "13707fe5ba172950c56e16ab206f4d2a7da4e16742e7f527c331c1e0973267d4"
dependencies = [ dependencies = [
"ahash", "ahash",
"auto_impl 0.5.0", "auto_impl 0.5.0",
@ -2447,9 +2441,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_node_comments" name = "swc_node_comments"
version = "0.1.0" version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "52fd186eff1e6fd5639966b1caf460e13141ddf9d956f0bbfe8ec7b83730d3ff" checksum = "413c5c78a9a26b7aa5bb5b0a3e972f90c9d077e5b0adcbac74f6acda69c0ecea"
dependencies = [ dependencies = [
"ahash", "ahash",
"dashmap", "dashmap",
@ -2458,9 +2452,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_stylis" name = "swc_stylis"
version = "0.28.0" version = "0.41.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "55dc9ebf2ab47eba62cc4299370f29107bd7e77b7f15bd4b9616d728c4e4b3dd" checksum = "c4de66eb78145902126ab5b366f2c87cda60310b0ebf36f263d336d07b48c3b7"
dependencies = [ dependencies = [
"swc_atoms", "swc_atoms",
"swc_common", "swc_common",
@ -2471,9 +2465,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_visit" name = "swc_visit"
version = "0.2.8" version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8511a4788ab29daf00bee23e425aac92c9be4eec74c98fec4a45d0e710be695" checksum = "e5c639379dd2a8a0221fa1e12fafbdd594ba53a0cace6560054da52409dfcc1a"
dependencies = [ dependencies = [
"either", "either",
"swc_visit_macros", "swc_visit_macros",
@ -2481,9 +2475,9 @@ dependencies = [
[[package]] [[package]]
name = "swc_visit_macros" name = "swc_visit_macros"
version = "0.2.3" version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e3b2825fee79f10d0166e8e650e79c7a862fb991db275743083f07555d7641f0" checksum = "e505bbf8e11898fa05a65aa5e773c827ec743fc15aa3c064c9e06164ed0b6630"
dependencies = [ dependencies = [
"Inflector", "Inflector",
"pmutil", "pmutil",
@ -2529,9 +2523,9 @@ dependencies = [
[[package]] [[package]]
name = "testing" name = "testing"
version = "0.15.2" version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e764b2295c3486c1fff4e77723d43319ead3f3b7081a553525f9dc369e19b416" checksum = "8c76da55a24d7aaae035f6740bfd50e85c0b152217e4894114ce3486a781d1bc"
dependencies = [ dependencies = [
"ansi_term", "ansi_term",
"difference", "difference",
@ -2741,6 +2735,19 @@ dependencies = [
"percent-encoding", "percent-encoding",
] ]
[[package]]
name = "ustr"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cbd539d8973e229b9d04f15d36e6a8f8d8f85f946b366f06bb001aaed3fa9dd9"
dependencies = [
"ahash",
"byteorder",
"lazy_static",
"parking_lot 0.11.1",
"serde",
]
[[package]] [[package]]
name = "version_check" name = "version_check"
version = "0.9.3" version = "0.9.3"
@ -2784,7 +2791,7 @@ dependencies = [
"serde_json", "serde_json",
"swc", "swc",
"swc_common", "swc_common",
"swc_ecmascript 0.88.3", "swc_ecmascript",
"tracing", "tracing",
"wasm-bindgen", "wasm-bindgen",
"wasm-bindgen-futures", "wasm-bindgen-futures",

View file

@ -14,21 +14,21 @@ fxhash = "0.2.1"
pathdiff = "0.2.0" pathdiff = "0.2.0"
serde = "1" serde = "1"
serde_json = "1" serde_json = "1"
styled_components = "0.2.0" styled_components = "0.4.0"
swc = "0.88.0" swc = "0.95.0"
swc_atoms = "0.2.7" swc_atoms = "0.2.7"
swc_common = {version = "0.14.2", features = ["concurrent", "sourcemap"]} swc_common = { version = "0.15.0", features = ["concurrent", "sourcemap"] }
swc_css = "0.31.0" swc_css = "0.44.0"
swc_ecma_loader = { version = "0.24.4", features = ["node", "lru"] } swc_ecma_loader = { version = "0.25.0", features = ["node", "lru"] }
swc_ecmascript = { version = "0.88.2", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] } swc_ecmascript = { version = "0.95.0", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] }
swc_node_base = "0.5.1" swc_node_base = "0.5.1"
swc_stylis = "0.28.0" swc_stylis = "0.41.0"
tracing = {version = "0.1.28", features = ["release_max_level_off"]} tracing = {version = "0.1.28", features = ["release_max_level_off"]}
regex = "1.5" regex = "1.5"
[dev-dependencies] [dev-dependencies]
swc_ecma_transforms_testing = "0.45.1" swc_ecma_transforms_testing = "0.49.0"
testing = "0.15.2" testing = "0.16.0"
walkdir = "2.3.2" walkdir = "2.3.2"

View file

@ -1,12 +1,11 @@
use swc_common::DUMMY_SP;
use swc_ecmascript::{ use swc_ecmascript::{
ast::*, ast::*,
visit::{Node, Visit, VisitWith}, visit::{Visit, VisitWith},
}; };
pub(crate) fn contains_cjs(m: &Module) -> bool { pub(crate) fn contains_cjs(m: &Module) -> bool {
let mut v = CjsFinder::default(); let mut v = CjsFinder::default();
m.visit_with(&Invalid { span: DUMMY_SP }, &mut v); m.visit_with(&mut v);
v.found v.found
} }
@ -18,7 +17,7 @@ struct CjsFinder {
/// This visitor implementation supports typescript, because the api of `swc` /// This visitor implementation supports typescript, because the api of `swc`
/// does not support changing configuration based on content of the file. /// does not support changing configuration based on content of the file.
impl Visit for CjsFinder { impl Visit for CjsFinder {
fn visit_member_expr(&mut self, e: &MemberExpr, _: &dyn Node) { fn visit_member_expr(&mut self, e: &MemberExpr) {
if !e.computed { if !e.computed {
match &e.obj { match &e.obj {
ExprOrSuper::Super(_) => {} ExprOrSuper::Super(_) => {}
@ -37,10 +36,10 @@ impl Visit for CjsFinder {
} }
} }
e.obj.visit_with(e, self); e.obj.visit_with(self);
if e.computed { if e.computed {
e.prop.visit_with(e, self); e.prop.visit_with(self);
} }
} }
} }

View file

@ -1,5 +1,6 @@
use easy_error::{bail, Error}; use easy_error::{bail, Error};
use std::panic; use std::panic;
use swc_common::util::take::Take;
use swc_common::{source_map::Pos, BytePos, Span, SyntaxContext, DUMMY_SP}; use swc_common::{source_map::Pos, BytePos, Span, SyntaxContext, DUMMY_SP};
use swc_css::ast::*; use swc_css::ast::*;
use swc_css::codegen::{ use swc_css::codegen::{
@ -11,6 +12,7 @@ use swc_css::visit::{VisitMut, VisitMutWith};
use swc_ecmascript::ast::{Expr, Str, StrKind, Tpl, TplElement}; use swc_ecmascript::ast::{Expr, Str, StrKind, Tpl, TplElement};
use swc_ecmascript::utils::HANDLER; use swc_ecmascript::utils::HANDLER;
use swc_stylis::prefixer::prefixer; use swc_stylis::prefixer::prefixer;
use tracing::{debug, trace};
use super::{hash_string, string_literal_expr, LocalStyle}; use super::{hash_string, string_literal_expr, LocalStyle};
@ -19,6 +21,8 @@ pub fn transform_css(
is_global: bool, is_global: bool,
class_name: &Option<String>, class_name: &Option<String>,
) -> Result<Expr, Error> { ) -> Result<Expr, Error> {
debug!("CSS: \n{}", style_info.css);
let result: Result<Stylesheet, _> = parse_str( let result: Result<Stylesheet, _> = parse_str(
&style_info.css, &style_info.css,
style_info.css_span.lo, style_info.css_span.lo,
@ -52,8 +56,8 @@ pub fn transform_css(
} }
}; };
// ? Do we need to support optionally prefixing? // ? Do we need to support optionally prefixing?
ss.visit_mut_with(&mut FixedPrefixer); ss.visit_mut_with(&mut prefixer());
ss.visit_mut_with(&mut CssFixer); ss.visit_mut_with(&mut CssPlaceholderFixer);
ss.visit_mut_with(&mut Namespacer { ss.visit_mut_with(&mut Namespacer {
class_name: match class_name { class_name: match class_name {
Some(s) => s.clone(), Some(s) => s.clone(),
@ -122,27 +126,17 @@ fn read_number(s: &str) -> (usize, usize) {
unreachable!("read_number(`{}`) is invalid because it is empty", s) unreachable!("read_number(`{}`) is invalid because it is empty", s)
} }
/// Applies `prefixer`, but this avoids bug of `swc_stylis::prefixer()`. /// This fixes invalid css which is created from interpolated expressions.
/// ///
/// TODO(kdy1): Remove this when we upgrade crates related to css. (The crate /// `__styled-jsx-placeholder-` is handled at here.
/// update is blocked by `ComplexSelectorChildren` issue) struct CssPlaceholderFixer;
struct FixedPrefixer;
impl VisitMut for FixedPrefixer { impl VisitMut for CssPlaceholderFixer {
fn visit_mut_style_rule(&mut self, n: &mut StyleRule) {
n.visit_mut_with(&mut prefixer());
}
}
/// This fixes invalid css.
struct CssFixer;
impl VisitMut for CssFixer {
fn visit_mut_media_query(&mut self, q: &mut MediaQuery) { fn visit_mut_media_query(&mut self, q: &mut MediaQuery) {
q.visit_mut_children_with(self); q.visit_mut_children_with(self);
match q { match q {
MediaQuery::Text(q) => { MediaQuery::Ident(q) => {
if q.raw.starts_with("__styled-jsx-placeholder-") { if q.raw.starts_with("__styled-jsx-placeholder-") {
// TODO(kdy1): Remove this once we have CST for media query. // TODO(kdy1): Remove this once we have CST for media query.
// We need good error recovery for media queries to handle this. // We need good error recovery for media queries to handle this.
@ -162,9 +156,36 @@ struct Namespacer {
impl VisitMut for Namespacer { impl VisitMut for Namespacer {
fn visit_mut_complex_selector(&mut self, node: &mut ComplexSelector) { fn visit_mut_complex_selector(&mut self, node: &mut ComplexSelector) {
#[cfg(debug_assertions)]
let _tracing = {
// This will add information to the log messages, only for debug build.
// Note that we use cargo feature to remove all logging on production builds.
let mut code = String::new();
{
let mut wr = BasicCssWriter::new(&mut code, BasicCssWriterConfig { indent: " " });
let mut gen = CodeGenerator::new(&mut wr, CodegenConfig { minify: true });
gen.emit(&*node).unwrap();
}
tracing::span!(
tracing::Level::TRACE,
"Namespacer::visit_mut_complex_selector",
class_name = &*self.class_name,
is_global = self.is_global,
is_dynamic = self.is_dynamic,
input = &*code
)
.entered()
};
let mut new_selectors = vec![]; let mut new_selectors = vec![];
for selector in &node.selectors { let mut combinator = None;
match self.get_transformed_selectors(selector.clone()) { for sel in node.children.take() {
match &sel {
ComplexSelectorChildren::CompoundSelector(selector) => {
match self.get_transformed_selectors(combinator, selector.clone()) {
Ok(transformed_selectors) => new_selectors.extend(transformed_selectors), Ok(transformed_selectors) => new_selectors.extend(transformed_selectors),
Err(_) => { Err(_) => {
HANDLER.with(|handler| { HANDLER.with(|handler| {
@ -175,22 +196,59 @@ impl VisitMut for Namespacer {
) )
.emit() .emit()
}); });
new_selectors.push(selector.clone()); new_selectors.push(sel);
} }
}
combinator = None;
}
ComplexSelectorChildren::Combinator(v) => match v.value {
CombinatorValue::Descendant => {}
CombinatorValue::NextSibling
| CombinatorValue::Child
| CombinatorValue::LaterSibling => {
combinator = Some(v.clone());
new_selectors.push(sel);
}
},
}; };
} }
node.selectors = new_selectors; node.children = new_selectors;
} }
} }
impl Namespacer { impl Namespacer {
fn get_transformed_selectors( fn get_transformed_selectors(
&mut self, &mut self,
combinator: Option<Combinator>,
mut node: CompoundSelector, mut node: CompoundSelector,
) -> Result<Vec<CompoundSelector>, Error> { ) -> Result<Vec<ComplexSelectorChildren>, Error> {
let mut pseudo_index = None; let mut pseudo_index = None;
let empty_tokens = Tokens {
span: node.span,
tokens: vec![],
};
for (i, selector) in node.subclass_selectors.iter().enumerate() { for (i, selector) in node.subclass_selectors.iter().enumerate() {
if let SubclassSelector::Pseudo(PseudoSelector { name, args, .. }) = selector { let (name, args) = match selector {
SubclassSelector::PseudoClass(PseudoClassSelector { name, children, .. }) => {
match children {
Some(PseudoSelectorChildren::Nth(_)) => todo!("nth"),
Some(PseudoSelectorChildren::Tokens(v)) => (name, v),
None => (name, &empty_tokens),
}
}
SubclassSelector::PseudoElement(PseudoElementSelector {
name, children, ..
}) => match children {
Some(children) => (name, children),
None => (name, &empty_tokens),
},
_ => continue,
};
// One off global selector // One off global selector
if &name.value == "global" { if &name.value == "global" {
let block_tokens = get_block_tokens(&args); let block_tokens = get_block_tokens(&args);
@ -199,6 +257,7 @@ impl Namespacer {
front_tokens.extend(args.tokens); front_tokens.extend(args.tokens);
front_tokens.extend(block_tokens); front_tokens.extend(block_tokens);
args.tokens = front_tokens; args.tokens = front_tokens;
let complex_selectors = panic::catch_unwind(|| { let complex_selectors = panic::catch_unwind(|| {
let x: ComplexSelector = parse_tokens( let x: ComplexSelector = parse_tokens(
&args, &args,
@ -215,25 +274,50 @@ impl Namespacer {
return match complex_selectors { return match complex_selectors {
Ok(complex_selectors) => { Ok(complex_selectors) => {
let mut v = complex_selectors.selectors[1..] let mut v = complex_selectors.children[1..]
.iter() .iter()
.cloned() .cloned()
.collect::<Vec<_>>(); .collect::<Vec<_>>();
match v[0] {
ComplexSelectorChildren::Combinator(Combinator {
value: CombinatorValue::Descendant,
..
}) => {
v.remove(0);
}
_ => {}
}
if v.is_empty() { if v.is_empty() {
bail!("Failed to transform one off global selector"); bail!("Failed to transform one off global selector");
} }
if node.combinator.is_some() && v[0].combinator.is_some() { trace!("Combinator: {:?}", combinator);
bail!("Failed to transform one off global selector"); trace!("v[0]: {:?}", v[0]);
} else if node.combinator.is_some() {
v[0].combinator = node.combinator; if combinator.is_some() {
match v.get(0) {
Some(ComplexSelectorChildren::Combinator(..)) => {}
Some(..) => {}
_ => {
v.push(ComplexSelectorChildren::Combinator(
combinator.unwrap(),
));
}
}
} }
v.iter_mut().for_each(|sel| { v.iter_mut().for_each(|sel| {
if i < node.subclass_selectors.len() { if i < node.subclass_selectors.len() {
sel.subclass_selectors match sel {
.extend(node.subclass_selectors[i + 1..].to_vec()); ComplexSelectorChildren::CompoundSelector(sel) => {
sel.subclass_selectors.extend(
node.subclass_selectors[i + 1..].iter().cloned(),
);
}
_ => {}
}
} }
}); });
@ -245,7 +329,6 @@ impl Namespacer {
pseudo_index = Some(i); pseudo_index = Some(i);
} }
} }
}
let subclass_selector = match self.is_dynamic { let subclass_selector = match self.is_dynamic {
true => "__jsx-style-dynamic-selector", true => "__jsx-style-dynamic-selector",
@ -260,7 +343,7 @@ impl Namespacer {
insert_index, insert_index,
SubclassSelector::Class(ClassSelector { SubclassSelector::Class(ClassSelector {
span: DUMMY_SP, span: DUMMY_SP,
text: Text { text: Ident {
raw: subclass_selector.into(), raw: subclass_selector.into(),
value: subclass_selector.into(), value: subclass_selector.into(),
span: DUMMY_SP, span: DUMMY_SP,
@ -269,7 +352,7 @@ impl Namespacer {
); );
} }
Ok(vec![node]) Ok(vec![ComplexSelectorChildren::CompoundSelector(node)])
} }
} }

View file

@ -1,12 +1,12 @@
use std::hash::Hash; use std::hash::Hash;
use swc_common::{collections::AHashSet, SyntaxContext, DUMMY_SP}; use swc_common::{collections::AHashSet, SyntaxContext};
use swc_ecmascript::{ use swc_ecmascript::{
ast::{ ast::{
ClassDecl, FnDecl, Ident, ImportDefaultSpecifier, ImportNamedSpecifier, ClassDecl, FnDecl, Ident, ImportDefaultSpecifier, ImportNamedSpecifier,
ImportStarAsSpecifier, Invalid, ModuleItem, ObjectPatProp, Param, Pat, Stmt, VarDeclarator, ImportStarAsSpecifier, ModuleItem, ObjectPatProp, Param, Pat, Stmt, VarDeclarator,
}, },
utils::ident::IdentLike, utils::ident::IdentLike,
visit::{noop_visit_type, Node, Visit, VisitWith}, visit::{noop_visit_type, Visit, VisitWith},
}; };
// Modified from swc_ecma_utils/src/lib.rs:BindingCollector. // Modified from swc_ecma_utils/src/lib.rs:BindingCollector.
@ -40,15 +40,15 @@ where
{ {
noop_visit_type!(); noop_visit_type!();
fn visit_class_decl(&mut self, node: &ClassDecl, _: &dyn Node) { fn visit_class_decl(&mut self, node: &ClassDecl) {
self.add(&node.ident); self.add(&node.ident);
} }
fn visit_fn_decl(&mut self, node: &FnDecl, _: &dyn Node) { fn visit_fn_decl(&mut self, node: &FnDecl) {
self.add(&node.ident); self.add(&node.ident);
} }
fn visit_pat(&mut self, node: &Pat, _: &dyn Node) { fn visit_pat(&mut self, node: &Pat) {
if self.is_pat_decl { if self.is_pat_decl {
match node { match node {
Pat::Ident(i) => self.add(&i.id), Pat::Ident(i) => self.add(&i.id),
@ -56,14 +56,14 @@ where
for prop in o.props.iter() { for prop in o.props.iter() {
match prop { match prop {
ObjectPatProp::Assign(a) => self.add(&a.key), ObjectPatProp::Assign(a) => self.add(&a.key),
ObjectPatProp::KeyValue(k) => k.value.visit_with(k, self), ObjectPatProp::KeyValue(k) => k.value.visit_with(self),
ObjectPatProp::Rest(_) => {} ObjectPatProp::Rest(_) => {}
} }
} }
} }
Pat::Array(a) => { Pat::Array(a) => {
for elem in a.elems.iter() { for elem in a.elems.iter() {
elem.visit_with(a, self); elem.visit_with(self);
} }
} }
_ => {} _ => {}
@ -71,44 +71,44 @@ where
} }
} }
fn visit_param(&mut self, node: &Param, _: &dyn Node) { fn visit_param(&mut self, node: &Param) {
let old = self.is_pat_decl; let old = self.is_pat_decl;
self.is_pat_decl = true; self.is_pat_decl = true;
node.visit_children_with(self); node.visit_children_with(self);
self.is_pat_decl = old; self.is_pat_decl = old;
} }
fn visit_import_default_specifier(&mut self, node: &ImportDefaultSpecifier, _: &dyn Node) { fn visit_import_default_specifier(&mut self, node: &ImportDefaultSpecifier) {
self.add(&node.local); self.add(&node.local);
} }
fn visit_import_named_specifier(&mut self, node: &ImportNamedSpecifier, _: &dyn Node) { fn visit_import_named_specifier(&mut self, node: &ImportNamedSpecifier) {
self.add(&node.local); self.add(&node.local);
} }
fn visit_import_star_as_specifier(&mut self, node: &ImportStarAsSpecifier, _: &dyn Node) { fn visit_import_star_as_specifier(&mut self, node: &ImportStarAsSpecifier) {
self.add(&node.local); self.add(&node.local);
} }
fn visit_module_items(&mut self, nodes: &[ModuleItem], _: &dyn Node) { fn visit_module_items(&mut self, nodes: &[ModuleItem]) {
for node in nodes { for node in nodes {
node.visit_children_with(self) node.visit_children_with(self)
} }
} }
fn visit_stmts(&mut self, nodes: &[Stmt], _: &dyn Node) { fn visit_stmts(&mut self, nodes: &[Stmt]) {
for node in nodes { for node in nodes {
node.visit_children_with(self) node.visit_children_with(self)
} }
} }
fn visit_var_declarator(&mut self, node: &VarDeclarator, _: &dyn Node) { fn visit_var_declarator(&mut self, node: &VarDeclarator) {
let old = self.is_pat_decl; let old = self.is_pat_decl;
self.is_pat_decl = true; self.is_pat_decl = true;
node.name.visit_with(node, self); node.name.visit_with(self);
self.is_pat_decl = false; self.is_pat_decl = false;
node.init.visit_with(node, self); node.init.visit_with(self);
self.is_pat_decl = old; self.is_pat_decl = old;
} }
} }
@ -123,6 +123,6 @@ where
bindings: Default::default(), bindings: Default::default(),
is_pat_decl: false, is_pat_decl: false,
}; };
n.visit_with(&Invalid { span: DUMMY_SP }, &mut v); n.visit_with(&mut v);
v.bindings v.bindings
} }

View file

@ -10,7 +10,6 @@ use testing::fixture;
fn syntax() -> Syntax { fn syntax() -> Syntax {
Syntax::Es(EsConfig { Syntax::Es(EsConfig {
jsx: true, jsx: true,
dynamic_import: true,
..Default::default() ..Default::default()
}) })
} }

View file

@ -16,7 +16,6 @@ use testing::fixture;
fn syntax() -> Syntax { fn syntax() -> Syntax {
Syntax::Es(EsConfig { Syntax::Es(EsConfig {
jsx: true, jsx: true,
dynamic_import: true,
..Default::default() ..Default::default()
}) })
} }

View file

@ -2,62 +2,111 @@ import _JSXStyle from "styled-jsx/style";
export default (()=>{ export default (()=>{
const Element = "div"; const Element = "div";
return <div className={"jsx-abb4c2202db1a207"}> return <div className={"jsx-abb4c2202db1a207"}>
<div {...test.test} className={"jsx-abb4c2202db1a207" + " " + (test.test && test.test.className != null && test.test.className || "test")}/> <div {...test.test} className={"jsx-abb4c2202db1a207" + " " + (test.test && test.test.className != null && test.test.className || "test")}/>
<div {...test.test.test} className={"jsx-abb4c2202db1a207" + " " + (test.test.test && test.test.test.className != null && test.test.test.className || "test")}/> <div {...test.test.test} className={"jsx-abb4c2202db1a207" + " " + (test.test.test && test.test.test.className != null && test.test.test.className || "test")}/>
<div {...this.test.test} className={"jsx-abb4c2202db1a207" + " " + (this.test.test && this.test.test.className != null && this.test.test.className || "test")}/> <div {...this.test.test} className={"jsx-abb4c2202db1a207" + " " + (this.test.test && this.test.test.className != null && this.test.test.className || "test")}/>
<div data-test="test" className={"jsx-abb4c2202db1a207"}/> <div data-test="test" className={"jsx-abb4c2202db1a207"}/>
<div className={"jsx-abb4c2202db1a207" + " " + "test"}/> <div className={"jsx-abb4c2202db1a207" + " " + "test"}/>
<div className={"jsx-abb4c2202db1a207" + " " + `test`}/> <div className={"jsx-abb4c2202db1a207" + " " + `test`}/>
<div className={"jsx-abb4c2202db1a207" + " " + `test${true ? " test2" : ""}`}/> <div className={"jsx-abb4c2202db1a207" + " " + `test${true ? " test2" : ""}`}/>
<div className={"jsx-abb4c2202db1a207" + " " + ("test " + test || "")}/> <div className={"jsx-abb4c2202db1a207" + " " + ("test " + test || "")}/>
<div className={"jsx-abb4c2202db1a207" + " " + ([ <div className={"jsx-abb4c2202db1a207" + " " + ([
"test", "test",
"test2" "test2"
].join(" ") || "")}/> ].join(" ") || "")}/>
<div className={"jsx-abb4c2202db1a207" + " " + (true && "test" || "")}/> <div className={"jsx-abb4c2202db1a207" + " " + (true && "test" || "")}/>
<div className={"jsx-abb4c2202db1a207" + " " + ((test ? "test" : null) || "")}/> <div className={"jsx-abb4c2202db1a207" + " " + ((test ? "test" : null) || "")}/>
<div className={"jsx-abb4c2202db1a207" + " " + (test || "")}/> <div className={"jsx-abb4c2202db1a207" + " " + (test || "")}/>
<div className={"jsx-abb4c2202db1a207" + " " + (test && "test" || "")}/> <div className={"jsx-abb4c2202db1a207" + " " + (test && "test" || "")}/>
<div className={"jsx-abb4c2202db1a207" + " " + (test && test("test") || "")}/> <div className={"jsx-abb4c2202db1a207" + " " + (test && test("test") || "")}/>
<div className={"jsx-abb4c2202db1a207" + " " + (undefined || "")}/> <div className={"jsx-abb4c2202db1a207" + " " + (undefined || "")}/>
<div className={"jsx-abb4c2202db1a207" + " " + (null || "")}/> <div className={"jsx-abb4c2202db1a207" + " " + (null || "")}/>
<div className={"jsx-abb4c2202db1a207" + " " + (false || "")}/> <div className={"jsx-abb4c2202db1a207" + " " + (false || "")}/>
<div data-test className={"jsx-abb4c2202db1a207" + " " + "test"}/> <div data-test className={"jsx-abb4c2202db1a207" + " " + "test"}/>
<div data-test className={"jsx-abb4c2202db1a207" + " " + "test"}/> <div data-test className={"jsx-abb4c2202db1a207" + " " + "test"}/>
<div data-test="test" className={"jsx-abb4c2202db1a207" + " " + "test"}/> <div data-test="test" className={"jsx-abb4c2202db1a207" + " " + "test"}/>
<div {...props} className={"jsx-abb4c2202db1a207" + " " + (props && props.className != null && props.className || "test")}/> <div {...props} className={"jsx-abb4c2202db1a207" + " " + (props && props.className != null && props.className || "test")}/>
<div {...props} {...rest} className={"jsx-abb4c2202db1a207" + " " + (rest && rest.className != null && rest.className || props && props.className != null && props.className || "test")}/> <div {...props} {...rest} className={"jsx-abb4c2202db1a207" + " " + (rest && rest.className != null && rest.className || props && props.className != null && props.className || "test")}/>
<div {...props} className={"jsx-abb4c2202db1a207" + " " + (props && props.className != null && props.className || `test ${test ? "test" : ""}`)}/> <div {...props} className={"jsx-abb4c2202db1a207" + " " + (props && props.className != null && props.className || `test ${test ? "test" : ""}`)}/>
<div {...props} className={"jsx-abb4c2202db1a207" + " " + (props && props.className != null && props.className || test && test("test") || "")}/> <div {...props} className={"jsx-abb4c2202db1a207" + " " + (props && props.className != null && props.className || test && test("test") || "")}/>
<div {...props} className={"jsx-abb4c2202db1a207" + " " + (props && props.className != null && props.className || test && test("test") && "test" || "")}/> <div {...props} className={"jsx-abb4c2202db1a207" + " " + (props && props.className != null && props.className || test && test("test") && "test" || "")}/>
<div {...props} className={"jsx-abb4c2202db1a207" + " " + (props && props.className != null && props.className || test && test("test") && test2("test") || "")}/> <div {...props} className={"jsx-abb4c2202db1a207" + " " + (props && props.className != null && props.className || test && test("test") && test2("test") || "")}/>
<div {...props} className={"jsx-abb4c2202db1a207" + " " + "test"}/> <div {...props} className={"jsx-abb4c2202db1a207" + " " + "test"}/>
<div {...props} {...rest} className={"jsx-abb4c2202db1a207" + " " + "test"}/> <div {...props} {...rest} className={"jsx-abb4c2202db1a207" + " " + "test"}/>
<div {...props} {...rest} className={"jsx-abb4c2202db1a207" + " " + (rest && rest.className != null && rest.className || "test")}/> <div {...props} {...rest} className={"jsx-abb4c2202db1a207" + " " + (rest && rest.className != null && rest.className || "test")}/>
<div {...props} className={"jsx-abb4c2202db1a207" + " " + (props && props.className != null && props.className || "")}/> <div {...props} className={"jsx-abb4c2202db1a207" + " " + (props && props.className != null && props.className || "")}/>
<div {...props} {...rest} className={"jsx-abb4c2202db1a207" + " " + (rest && rest.className != null && rest.className || props && props.className != null && props.className || "")}/> <div {...props} {...rest} className={"jsx-abb4c2202db1a207" + " " + (rest && rest.className != null && rest.className || props && props.className != null && props.className || "")}/>
<div {...props} data-foo {...rest} className={"jsx-abb4c2202db1a207" + " " + (rest && rest.className != null && rest.className || props && props.className != null && props.className || "")}/> <div {...props} data-foo {...rest} className={"jsx-abb4c2202db1a207" + " " + (rest && rest.className != null && rest.className || props && props.className != null && props.className || "")}/>
<div {...props} data-foo {...rest} className={"jsx-abb4c2202db1a207" + " " + (rest && rest.className != null && rest.className || "test")}/> <div {...props} data-foo {...rest} className={"jsx-abb4c2202db1a207" + " " + (rest && rest.className != null && rest.className || "test")}/>
<div {...{ <div {...{
id: "foo" id: "foo"
}} className={"jsx-abb4c2202db1a207"}/> }} className={"jsx-abb4c2202db1a207"}/>
<div className={"jsx-abb4c2202db1a207" + " " + "foo"}/> <div className={"jsx-abb4c2202db1a207" + " " + "foo"}/>
<div {...{ <div {...{
className: "foo" className: "foo"
}} className={"jsx-abb4c2202db1a207" + " " + "test"}/> }} className={"jsx-abb4c2202db1a207" + " " + "test"}/>
<div className="test" className={"jsx-abb4c2202db1a207" + " " + "foo"}/> <div className="test" className={"jsx-abb4c2202db1a207" + " " + "foo"}/>
<div {...bar} className={"jsx-abb4c2202db1a207" + " " + (bar && bar.className != null && bar.className || "foo")}/> <div {...bar} className={"jsx-abb4c2202db1a207" + " " + (bar && bar.className != null && bar.className || "foo")}/>
<div {...{ <div {...{
className: "foo" className: "foo"
}} {...bar} className={"jsx-abb4c2202db1a207" + " " + "test"}/> }} {...bar} className={"jsx-abb4c2202db1a207" + " " + "test"}/>
<div className="test" {...bar} className={"jsx-abb4c2202db1a207" + " " + (bar && bar.className != null && bar.className || "foo")}/> <div className="test" {...bar} className={"jsx-abb4c2202db1a207" + " " + (bar && bar.className != null && bar.className || "foo")}/>
<div className="test" className={"jsx-abb4c2202db1a207" + " " + (props.className || "")}/> <div className="test" className={"jsx-abb4c2202db1a207" + " " + (props.className || "")}/>
<div className="test" {...bar} className={"jsx-abb4c2202db1a207" + " " + (bar && bar.className != null && bar.className || props.className || "")}/> <div className="test" {...bar} className={"jsx-abb4c2202db1a207" + " " + (bar && bar.className != null && bar.className || props.className || "")}/>
<div className="test" {...bar} className={"jsx-abb4c2202db1a207" + " " + (props.className || "")}/> <div className="test" {...bar} className={"jsx-abb4c2202db1a207" + " " + (props.className || "")}/>
<div {...bar()} className={"jsx-abb4c2202db1a207" + " " + "test"}/> <div {...bar()} className={"jsx-abb4c2202db1a207" + " " + "test"}/>
<Element className={"jsx-abb4c2202db1a207"}/> <Element className={"jsx-abb4c2202db1a207"}/>
<Element className={"jsx-abb4c2202db1a207" + " " + "test"}/> <Element className={"jsx-abb4c2202db1a207" + " " + "test"}/>
<Element {...props} className={"jsx-abb4c2202db1a207" + " " + (props && props.className != null && props.className || "")}/> <Element {...props} className={"jsx-abb4c2202db1a207" + " " + (props && props.className != null && props.className || "")}/>
<_JSXStyle id={"abb4c2202db1a207"}>{"div.jsx-abb4c2202db1a207{color:red}"}</_JSXStyle> <_JSXStyle id={"abb4c2202db1a207"}>{"div.jsx-abb4c2202db1a207{color:red}"}</_JSXStyle>
</div>; </div>;
}); });

View file

@ -2,8 +2,11 @@ import _JSXStyle from "styled-jsx/style";
export default class { export default class {
render() { render() {
return <div className={"jsx-b2b86d63f35d25ee"}> return <div className={"jsx-b2b86d63f35d25ee"}>
<p className={"jsx-b2b86d63f35d25ee"}>test</p> <p className={"jsx-b2b86d63f35d25ee"}>test</p>
<_JSXStyle id={"b2b86d63f35d25ee"}>{"p.jsx-b2b86d63f35d25ee{color:red}"}</_JSXStyle> <_JSXStyle id={"b2b86d63f35d25ee"}>{"p.jsx-b2b86d63f35d25ee{color:red}"}</_JSXStyle>
</div>; </div>;
} }
} };

View file

@ -1,7 +1,11 @@
import _JSXStyle from "styled-jsx/style"; import _JSXStyle from "styled-jsx/style";
const Test = ()=><div className={"jsx-a9535d7d5f32c3c4"}> const Test = ()=><div className={"jsx-a9535d7d5f32c3c4"}>
<span className={"jsx-a9535d7d5f32c3c4"}>test</span> <span className={"jsx-a9535d7d5f32c3c4"}>test</span>
<Component /> <Component />
<_JSXStyle id={"a9535d7d5f32c3c4"}>{"span.jsx-a9535d7d5f32c3c4{color:red}"}</_JSXStyle> <_JSXStyle id={"a9535d7d5f32c3c4"}>{"span.jsx-a9535d7d5f32c3c4{color:red}"}</_JSXStyle>
</div> </div>
; ;

View file

@ -3,17 +3,23 @@ export default class {
render() { render() {
const Element = "div"; const Element = "div";
return <Element className={"jsx-f825b24bbab5b83b" + " " + "root"}> return <Element className={"jsx-f825b24bbab5b83b" + " " + "root"}>
<p className={"jsx-f825b24bbab5b83b"}>dynamic element</p> <p className={"jsx-f825b24bbab5b83b"}>dynamic element</p>
<_JSXStyle id={"f825b24bbab5b83b"}>{".root.jsx-f825b24bbab5b83b{background:red}"}</_JSXStyle> <_JSXStyle id={"f825b24bbab5b83b"}>{".root.jsx-f825b24bbab5b83b{background:red}"}</_JSXStyle>
</Element>; </Element>;
} }
} };
const Element2 = "div"; const Element2 = "div";
export const Test2 = class { export const Test2 = class {
render() { render() {
return <Element2 className="root"> return <Element2 className="root">
<p className={"jsx-f825b24bbab5b83b"}>dynamic element</p> <p className={"jsx-f825b24bbab5b83b"}>dynamic element</p>
<_JSXStyle id={"f825b24bbab5b83b"}>{".root.jsx-f825b24bbab5b83b{background:red}"}</_JSXStyle> <_JSXStyle id={"f825b24bbab5b83b"}>{".root.jsx-f825b24bbab5b83b{background:red}"}</_JSXStyle>
</Element2>; </Element2>;
} }
} };

View file

@ -2,27 +2,39 @@ import _JSXStyle from "styled-jsx/style";
export default (({ level =1 })=>{ export default (({ level =1 })=>{
const Element = `h${level}`; const Element = `h${level}`;
return <Element className={"jsx-fca64cc3f069b519" + " " + "root"}> return <Element className={"jsx-fca64cc3f069b519" + " " + "root"}>
<p className={"jsx-fca64cc3f069b519"}>dynamic element</p> <p className={"jsx-fca64cc3f069b519"}>dynamic element</p>
<_JSXStyle id={"fca64cc3f069b519"}>{".root.jsx-fca64cc3f069b519{background:red}"}</_JSXStyle> <_JSXStyle id={"fca64cc3f069b519"}>{".root.jsx-fca64cc3f069b519{background:red}"}</_JSXStyle>
</Element>; </Element>;
}); });
export const TestLowerCase = ({ level =1 })=>{ export const TestLowerCase = ({ level =1 })=>{
const element = `h${level}`; const element = `h${level}`;
return <element className={"jsx-fca64cc3f069b519" + " " + "root"}> return <element className={"jsx-fca64cc3f069b519" + " " + "root"}>
<p className={"jsx-fca64cc3f069b519"}>dynamic element</p> <p className={"jsx-fca64cc3f069b519"}>dynamic element</p>
<_JSXStyle id={"fca64cc3f069b519"}>{".root.jsx-fca64cc3f069b519{background:red}"}</_JSXStyle> <_JSXStyle id={"fca64cc3f069b519"}>{".root.jsx-fca64cc3f069b519{background:red}"}</_JSXStyle>
</element>; </element>;
}; };
const Element2 = "div"; const Element2 = "div";
export const Test2 = ()=>{ export const Test2 = ()=>{
return <Element2 className="root"> return <Element2 className="root">
<p className={"jsx-fca64cc3f069b519"}>dynamic element</p> <p className={"jsx-fca64cc3f069b519"}>dynamic element</p>
<_JSXStyle id={"fca64cc3f069b519"}>{".root.jsx-fca64cc3f069b519{background:red}"}</_JSXStyle> <_JSXStyle id={"fca64cc3f069b519"}>{".root.jsx-fca64cc3f069b519{background:red}"}</_JSXStyle>
</Element2>; </Element2>;
}; };
export const Test3 = ({ Component ="div" })=>{ export const Test3 = ({ Component ="div" })=>{
return <Component className={"jsx-f825b24bbab5b83b"}> return <Component className={"jsx-f825b24bbab5b83b"}>
<p className={"jsx-f825b24bbab5b83b"}>dynamic element</p> <p className={"jsx-f825b24bbab5b83b"}>dynamic element</p>
<_JSXStyle id={"f825b24bbab5b83b"}>{".root.jsx-f825b24bbab5b83b{background:red}"}</_JSXStyle> <_JSXStyle id={"f825b24bbab5b83b"}>{".root.jsx-f825b24bbab5b83b{background:red}"}</_JSXStyle>
</Component>; </Component>;
}; };

View file

@ -1,29 +1,48 @@
import _JSXStyle from "styled-jsx/style"; import _JSXStyle from "styled-jsx/style";
import React from "react"; import React from "react";
export default (()=><> export default (()=><>
<p className={"jsx-6dd5f97e085c0297"}>Testing!!!</p> <p className={"jsx-6dd5f97e085c0297"}>Testing!!!</p>
<p className={"jsx-6dd5f97e085c0297" + " " + "foo"}>Bar</p> <p className={"jsx-6dd5f97e085c0297" + " " + "foo"}>Bar</p>
<> <>
<h3 id="head" className={"jsx-6dd5f97e085c0297"}>Title...</h3> <h3 id="head" className={"jsx-6dd5f97e085c0297"}>Title...</h3>
<React.Fragment > <React.Fragment >
<p className={"jsx-6dd5f97e085c0297"}>hello</p> <p className={"jsx-6dd5f97e085c0297"}>hello</p>
<> <>
<p className={"jsx-6dd5f97e085c0297"}>foo</p> <p className={"jsx-6dd5f97e085c0297"}>foo</p>
<p className={"jsx-6dd5f97e085c0297"}>bar</p> <p className={"jsx-6dd5f97e085c0297"}>bar</p>
</> </>
<p className={"jsx-6dd5f97e085c0297"}>world</p> <p className={"jsx-6dd5f97e085c0297"}>world</p>
</React.Fragment> </React.Fragment>
</> </>
<_JSXStyle id={"6dd5f97e085c0297"}>{"p.jsx-6dd5f97e085c0297{color:cyan}\n.foo.jsx-6dd5f97e085c0297{font-size:18px;\ncolor:hotpink}\n#head.jsx-6dd5f97e085c0297{text-decoration:underline}"}</_JSXStyle> <_JSXStyle id={"6dd5f97e085c0297"}>{"p.jsx-6dd5f97e085c0297{color:cyan}\n.foo.jsx-6dd5f97e085c0297{font-size:18px;\ncolor:hotpink}\n#head.jsx-6dd5f97e085c0297{text-decoration:underline}"}</_JSXStyle>
</> </>
); );
function Component1() { function Component1() {
return <> return <>
<div >test</div> <div >test</div>
</>; </>;
} }
function Component2() { function Component2() {
return <div className={"jsx-678f41ca6d3b294b"}> return <div className={"jsx-678f41ca6d3b294b"}>
<_JSXStyle id={"678f41ca6d3b294b"}>{"div.jsx-678f41ca6d3b294b{color:red}"}</_JSXStyle> <_JSXStyle id={"678f41ca6d3b294b"}>{"div.jsx-678f41ca6d3b294b{color:red}"}</_JSXStyle>
</div>; </div>;
} }

View file

@ -1,6 +1,8 @@
import _JSXStyle from "styled-jsx/style"; import _JSXStyle from "styled-jsx/style";
const Test = ()=><div className={"jsx-d47d6adadf14e957"}> const Test = ()=><div className={"jsx-d47d6adadf14e957"}>
<_JSXStyle id={"d47d6adadf14e957"}>{"body{color:red}\n:hover{color:red;\ndisplay:-webkit-box;\ndisplay:-webkit-flex;\ndisplay:-ms-flexbox;\ndisplay:flex;\n-webkit-animation:foo 1s ease-out;\nanimation:foo 1s ease-out}\ndiv a{display:none}\n[data-test]>div{color:red}"}</_JSXStyle> <_JSXStyle id={"d47d6adadf14e957"}>{"body{color:red}\n:hover{color:red;\ndisplay:-webkit-box;\ndisplay:-webkit-flex;\ndisplay:-ms-flexbox;\ndisplay:flex;\n-webkit-animation:foo 1s ease-out;\nanimation:foo 1s ease-out}\ndiv a{display:none}\n[data-test]>div{color:red}"}</_JSXStyle>
</div> </div>
; ;
const Test2 = ()=><_JSXStyle id={"94239b6d6b42c9b5"}>{"p{color:red}"}</_JSXStyle> const Test2 = ()=><_JSXStyle id={"94239b6d6b42c9b5"}>{"p{color:red}"}</_JSXStyle>

View file

@ -2,8 +2,12 @@ import _JSXStyle from "styled-jsx/style";
const Test = ()=><_JSXStyle id={"94239b6d6b42c9b5"}>{"p{color:red}"}</_JSXStyle> const Test = ()=><_JSXStyle id={"94239b6d6b42c9b5"}>{"p{color:red}"}</_JSXStyle>
; ;
export default (()=><div className={"jsx-3822e6e1fb9fa41a"}> export default (()=><div className={"jsx-3822e6e1fb9fa41a"}>
<p className={"jsx-3822e6e1fb9fa41a"}>test</p> <p className={"jsx-3822e6e1fb9fa41a"}>test</p>
<_JSXStyle id={"b7efb453c85593c1"}>{"body{background:red}"}</_JSXStyle> <_JSXStyle id={"b7efb453c85593c1"}>{"body{background:red}"}</_JSXStyle>
<_JSXStyle id={"94239b6d6b42c9b5"}>{"p.jsx-3822e6e1fb9fa41a{color:red}"}</_JSXStyle> <_JSXStyle id={"94239b6d6b42c9b5"}>{"p.jsx-3822e6e1fb9fa41a{color:red}"}</_JSXStyle>
</div> </div>
); );

View file

@ -3,23 +3,33 @@ const attrs = {
id: "test" id: "test"
}; };
const Test1 = ()=><div className={"jsx-a9535d7d5f32c3c4"}> const Test1 = ()=><div className={"jsx-a9535d7d5f32c3c4"}>
<span {...attrs} data-test="test" className={"jsx-a9535d7d5f32c3c4" + " " + (attrs && attrs.className != null && attrs.className || "")}>test</span> <span {...attrs} data-test="test" className={"jsx-a9535d7d5f32c3c4" + " " + (attrs && attrs.className != null && attrs.className || "")}>test</span>
<Component /> <Component />
<_JSXStyle id={"a9535d7d5f32c3c4"}>{"span.jsx-a9535d7d5f32c3c4{color:red}"}</_JSXStyle> <_JSXStyle id={"a9535d7d5f32c3c4"}>{"span.jsx-a9535d7d5f32c3c4{color:red}"}</_JSXStyle>
</div> </div>
; ;
const Test2 = ()=><span >test</span> const Test2 = ()=><span >test</span>
; ;
const Test3 = ()=><div className={"jsx-a9535d7d5f32c3c4"}> const Test3 = ()=><div className={"jsx-a9535d7d5f32c3c4"}>
<span className={"jsx-a9535d7d5f32c3c4"}>test</span> <span className={"jsx-a9535d7d5f32c3c4"}>test</span>
<_JSXStyle id={"a9535d7d5f32c3c4"}>{"span.jsx-a9535d7d5f32c3c4{color:red}"}</_JSXStyle> <_JSXStyle id={"a9535d7d5f32c3c4"}>{"span.jsx-a9535d7d5f32c3c4{color:red}"}</_JSXStyle>
</div> </div>
; ;
export default class { export default class {
render() { render() {
return <div className={"jsx-b2b86d63f35d25ee"}> return <div className={"jsx-b2b86d63f35d25ee"}>
<p className={"jsx-b2b86d63f35d25ee"}>test</p> <p className={"jsx-b2b86d63f35d25ee"}>test</p>
<_JSXStyle id={"b2b86d63f35d25ee"}>{"p.jsx-b2b86d63f35d25ee{color:red}"}</_JSXStyle> <_JSXStyle id={"b2b86d63f35d25ee"}>{"p.jsx-b2b86d63f35d25ee{color:red}"}</_JSXStyle>
</div>; </div>;
} }
} };

View file

@ -1,9 +1,13 @@
import _JSXStyle from "styled-jsx/style"; import _JSXStyle from "styled-jsx/style";
export default (()=><div className={"jsx-94239b6d6b42c9b5"}> export default (()=><div className={"jsx-94239b6d6b42c9b5"}>
<p className={"jsx-94239b6d6b42c9b5"}>woot</p> <p className={"jsx-94239b6d6b42c9b5"}>woot</p>
<style dangerouslySetInnerHTML={{ <style dangerouslySetInnerHTML={{
__html: `body { margin: 0; }` __html: `body { margin: 0; }`
}}></style> }}></style>
<_JSXStyle id={"94239b6d6b42c9b5"}>{"p.jsx-94239b6d6b42c9b5{color:red}"}</_JSXStyle> <_JSXStyle id={"94239b6d6b42c9b5"}>{"p.jsx-94239b6d6b42c9b5{color:red}"}</_JSXStyle>
</div> </div>
); );

View file

@ -1,6 +1,9 @@
import _JSXStyle from "styled-jsx/style"; import _JSXStyle from "styled-jsx/style";
export default (()=><div className={"jsx-c7c3a8e231c9215a"}> export default (()=><div className={"jsx-c7c3a8e231c9215a"}>
<p className={"jsx-c7c3a8e231c9215a"}>test</p> <p className={"jsx-c7c3a8e231c9215a"}>test</p>
<_JSXStyle id={"c7c3a8e231c9215a"}>{".container.jsx-c7c3a8e231c9215a>*{color:red}"}</_JSXStyle> <_JSXStyle id={"c7c3a8e231c9215a"}>{".container.jsx-c7c3a8e231c9215a>*{color:red}"}</_JSXStyle>
</div> </div>
); );

View file

@ -1,8 +1,13 @@
import _JSXStyle from "styled-jsx/style"; import _JSXStyle from "styled-jsx/style";
export default (()=><div className={"jsx-94239b6d6b42c9b5"}> export default (()=><div className={"jsx-94239b6d6b42c9b5"}>
<p className={"jsx-94239b6d6b42c9b5"}>test</p> <p className={"jsx-94239b6d6b42c9b5"}>test</p>
<p className={"jsx-94239b6d6b42c9b5"}>woot</p> <p className={"jsx-94239b6d6b42c9b5"}>woot</p>
<p className={"jsx-94239b6d6b42c9b5"}>woot</p> <p className={"jsx-94239b6d6b42c9b5"}>woot</p>
<_JSXStyle id={"94239b6d6b42c9b5"}>{"p.jsx-94239b6d6b42c9b5{color:red}"}</_JSXStyle> <_JSXStyle id={"94239b6d6b42c9b5"}>{"p.jsx-94239b6d6b42c9b5{color:red}"}</_JSXStyle>
</div> </div>
); );

View file

@ -1,5 +1,5 @@
import _JSXStyle from "styled-jsx/style"; import _JSXStyle from "styled-jsx/style";
import colors1, { size } from "./constants"; import colors, { size } from "./constants";
const color = "red"; const color = "red";
const bar = new String("div.jsx-aaed0341accea8f{font-size:3em}"); const bar = new String("div.jsx-aaed0341accea8f{font-size:3em}");
bar.__hash = "aaed0341accea8f"; bar.__hash = "aaed0341accea8f";
@ -11,26 +11,26 @@ export const uh = bar;
export const foo = new String(`div.jsx-a0d126276b085021{color:${color}}`); export const foo = new String(`div.jsx-a0d126276b085021{color:${color}}`);
foo.__hash = "a0d126276b085021"; foo.__hash = "a0d126276b085021";
({ ({
styles: <_JSXStyle id={"47e08c293b53f262"}>{`div.jsx-47e08c293b53f262 {color:${colors1.green.light}} styles: <_JSXStyle id={"47e08c293b53f262"}>{`div.jsx-47e08c293b53f262{color:${colors.green.light}}
a.jsx-47e08c293b53f262{color:red}`}</_JSXStyle>, a.jsx-47e08c293b53f262{color:red}`}</_JSXStyle>,
className: "jsx-47e08c293b53f262" className: "jsx-47e08c293b53f262"
}); });
const b = { const b = {
styles: <_JSXStyle id={"47e08c293b53f262"}>{`div.jsx-47e08c293b53f262 {color:${colors1.green.light}} styles: <_JSXStyle id={"47e08c293b53f262"}>{`div.jsx-47e08c293b53f262{color:${colors.green.light}}
a.jsx-47e08c293b53f262{color:red}`}</_JSXStyle>, a.jsx-47e08c293b53f262{color:red}`}</_JSXStyle>,
className: "jsx-47e08c293b53f262" className: "jsx-47e08c293b53f262"
}; };
const dynamic = (colors)=>{ const dynamic = (colors1)=>{
const b = { const b = {
styles: <_JSXStyle id={"79d79305fa1611e"} dynamic={[ styles: <_JSXStyle id={"79d79305fa1611e"} dynamic={[
colors.green.light colors1.green.light
]}>{`div.__jsx-style-dynamic-selector {color:${colors.green.light}} ]}>{`div.__jsx-style-dynamic-selector{color:${colors1.green.light}}
a.__jsx-style-dynamic-selector{color:red}`}</_JSXStyle>, a.__jsx-style-dynamic-selector{color:red}`}</_JSXStyle>,
className: _JSXStyle.dynamic([ className: _JSXStyle.dynamic([
[ [
"79d79305fa1611e", "79d79305fa1611e",
[ [
colors.green.light colors1.green.light
] ]
] ]
]) ])

View file

@ -2,8 +2,11 @@ import _JSXStyle from "styled-jsx/style";
export default class { export default class {
render() { render() {
return <div className={"jsx-1f6cef12199c3a8f"}> return <div className={"jsx-1f6cef12199c3a8f"}>
<p className={"jsx-1f6cef12199c3a8f"}>test</p> <p className={"jsx-1f6cef12199c3a8f"}>test</p>
<_JSXStyle id={"1f6cef12199c3a8f"}>{"p.jsx-1f6cef12199c3a8f{content:'`'}"}</_JSXStyle> <_JSXStyle id={"1f6cef12199c3a8f"}>{"p.jsx-1f6cef12199c3a8f{content:'`'}"}</_JSXStyle>
</div>; </div>;
} }
} };

View file

@ -0,0 +1,116 @@
export default () => (
<div>
<p>test</p>
<style jsx>{`
p a span {
color: red;
}
p :global(span) {
background: blue
}
p a[title="'w ' ' t'"] {
margin: auto
}
p :global(span:not(.test)) {
color: green
}
p, h1 {
color: blue;
animation: hahaha 3s ease forwards infinite;
animation-name: hahaha;
animation-delay: 100ms;
}
p {
animation: hahaha 1s, hehehe 2s;
}
p:hover {
color: red;
}
p::before {
color: red;
}
:hover {
color: red;
}
::before {
color: red;
}
:hover p {
color: red;
}
p + a {
color: red;
}
p ~ a {
color: red;
}
p > a {
color: red;
}
@keyframes hahaha {
from { top: 0 }
to { top: 100 }
}
@keyframes hehehe {
from { left: 0 }
to { left: 100 }
}
@media (min-width: 500px) {
.test {
color: red;
}
}
.test {
/* test, test */
display: block;
/*
test
*/
}
.inline-flex {
display: inline-flex;
}
.flex {
display: flex;
}
.test {
box-shadow: 0 0 10px black, inset 0 0 5px black
}
.test[title=","] {
display: inline-block;
}
.test.is-status .test {
color: red;
}
.a-selector:hover,
.a-selector:focus
{
outline: none;
}
`}</style>
</div>
)

View file

@ -0,0 +1,9 @@
import _JSXStyle from "styled-jsx/style";
export default (()=><div className={"jsx-713499aa363d6373"}>
<p className={"jsx-713499aa363d6373"}>test</p>
<_JSXStyle id={"713499aa363d6373"}>{"p.jsx-713499aa363d6373 a.jsx-713499aa363d6373 span.jsx-713499aa363d6373{color:red}\np.jsx-713499aa363d6373 span{background:blue}\np.jsx-713499aa363d6373 a[title=\"'w ' ' t'\"].jsx-713499aa363d6373{margin:auto}\np.jsx-713499aa363d6373 span:not(.test){color:green}\np.jsx-713499aa363d6373, h1.jsx-713499aa363d6373{color:blue;\n-webkit-animation:hahaha 3s ease forwards infinite;\nanimation:hahaha 3s ease forwards infinite;\n-webkit-animation-name:hahaha;\nanimation-name:hahaha;\nanimation-delay:100ms}\np.jsx-713499aa363d6373{-webkit-animation:hahaha 1s, hehehe 2s;\nanimation:hahaha 1s, hehehe 2s}\np.jsx-713499aa363d6373:hover{color:red}\np.jsx-713499aa363d6373::before{color:red}\n.jsx-713499aa363d6373:hover{color:red}\n.jsx-713499aa363d6373::before{color:red}\n.jsx-713499aa363d6373:hover p.jsx-713499aa363d6373{color:red}\np.jsx-713499aa363d6373+a.jsx-713499aa363d6373{color:red}\np.jsx-713499aa363d6373~a.jsx-713499aa363d6373{color:red}\np.jsx-713499aa363d6373>a.jsx-713499aa363d6373{color:red}\n@keyframes hahaha {from {top:0}to {top:100}}\n@keyframes hehehe {from {left:0}to {left:100}}\n@media (min-width:500px) {.test.jsx-713499aa363d6373{color:red}}\n.test.jsx-713499aa363d6373{display:block}\n.inline-flex.jsx-713499aa363d6373{display:-webkit-inline-box;\ndisplay:-webkit-inline-flex;\ndisplay:-ms-inline-flexbox;\ndisplay:inline-flex}\n.flex.jsx-713499aa363d6373{display:-webkit-box;\ndisplay:-webkit-flex;\ndisplay:-ms-flexbox;\ndisplay:flex}\n.test.jsx-713499aa363d6373{box-shadow:0 0 10px black, inset 0 0 5px black}\n.test[title=\",\"].jsx-713499aa363d6373{display:inline-block}\n.test.is-status.jsx-713499aa363d6373 .test.jsx-713499aa363d6373{color:red}\n.a-selector.jsx-713499aa363d6373:hover, .a-selector.jsx-713499aa363d6373:focus{outline:none}"}</_JSXStyle>
</div>
);

View file

@ -0,0 +1,32 @@
export default () => (
<div>
<p>test</p>
<style jsx>{`
html {
background-image:
linear-gradient(0deg, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.8)),
url(/static/background.svg);
}
:global(p) {
color: blue
}
:global(p){
color: blue;
}
:global(p), a {
color: blue;
}
:global(.foo + a) {
color: red;
}
:global(body) {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
}
`}</style>
</div>
)

View file

@ -0,0 +1,9 @@
import _JSXStyle from "styled-jsx/style";
export default (()=><div className={"jsx-53fd644ab080300c"}>
<p className={"jsx-53fd644ab080300c"}>test</p>
<_JSXStyle id={"53fd644ab080300c"}>{"html.jsx-53fd644ab080300c{background-image:linear-gradient(0deg, rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.8)), url(/static/background.svg)}\np{color:blue}\np{color:blue}\np, a.jsx-53fd644ab080300c{color:blue}\n.foo+a{color:red}\nbody{font-family:-apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif}"}</_JSXStyle>
</div>
);

View file

@ -0,0 +1,24 @@
export default () => (
<div>
<p>test</p>
<style jsx>{`
@media (min-width: 1px) and (max-width: 768px) {
[class*='grid__col--'] {
margin-top: 12px;
margin-bottom: 12px;
}
}
@media (max-width: 64em) {
.test {
margin-bottom: 1em;
}
@supports (-moz-appearance: none) and (display: contents) {
.test {
margin-bottom: 2rem;
}
}
}
`}</style>
</div>
)

View file

@ -0,0 +1,9 @@
import _JSXStyle from "styled-jsx/style";
export default (()=><div className={"jsx-1f7963ae04c6466a"}>
<p className={"jsx-1f7963ae04c6466a"}>test</p>
<_JSXStyle id={"1f7963ae04c6466a"}>{"@media (min-width:1px) and (max-width:768px) {[class*='grid__col--'].jsx-1f7963ae04c6466a{margin-top:12px;\nmargin-bottom:12px}}\n@media (max-width:64em) {.test.jsx-1f7963ae04c6466a{margin-bottom:1em}\n@supports (-moz-appearance:none) and (display:contents) {.test.jsx-1f7963ae04c6466a{margin-bottom:2rem}}}"}</_JSXStyle>
</div>
);

View file

@ -0,0 +1,22 @@
export default () => (
<div>
<p>test</p>
<style jsx>{`
p {
color: red;
}
p{
color: red
}
* {
color: blue;
}
[href="woot"] {
color: red;
}
`}</style>
</div>
)

View file

@ -0,0 +1,9 @@
import _JSXStyle from "styled-jsx/style";
export default (()=><div className={"jsx-1a19bb4817c105dd"}>
<p className={"jsx-1a19bb4817c105dd"}>test</p>
<_JSXStyle id={"1a19bb4817c105dd"}>{"p.jsx-1a19bb4817c105dd{color:red}\np.jsx-1a19bb4817c105dd{color:red}\n*.jsx-1a19bb4817c105dd{color:blue}\n[href=\"woot\"].jsx-1a19bb4817c105dd{color:red}"}</_JSXStyle>
</div>
);

View file

@ -1,8 +1,13 @@
import _JSXStyle from "styled-jsx/style"; import _JSXStyle from "styled-jsx/style";
export default (()=><div className={"jsx-94239b6d6b42c9b5"}> export default (()=><div className={"jsx-94239b6d6b42c9b5"}>
<p className={"jsx-94239b6d6b42c9b5"}>test</p> <p className={"jsx-94239b6d6b42c9b5"}>test</p>
<p className={"jsx-94239b6d6b42c9b5"}>woot</p> <p className={"jsx-94239b6d6b42c9b5"}>woot</p>
<p className={"jsx-94239b6d6b42c9b5"}>woot</p> <p className={"jsx-94239b6d6b42c9b5"}>woot</p>
<_JSXStyle id={"94239b6d6b42c9b5"}>{"p.jsx-94239b6d6b42c9b5{color:red}"}</_JSXStyle> <_JSXStyle id={"94239b6d6b42c9b5"}>{"p.jsx-94239b6d6b42c9b5{color:red}"}</_JSXStyle>
</div> </div>
); );

View file

@ -42,7 +42,6 @@ fn test(input: &Path, minify: bool) {
}, },
syntax: Some(Syntax::Typescript(TsConfig { syntax: Some(Syntax::Typescript(TsConfig {
tsx: true, tsx: true,
dynamic_import: true,
..Default::default() ..Default::default()
})), })),
..Default::default() ..Default::default()

View file

@ -1,4 +1,9 @@
import a from "other"; import a from "other";
function _arrayLikeToArray(a, b) {
(null == b || b > a.length) && (b = a.length);
for(var b = 0, d = new Array(b); b < b; b++)d[b] = a[b];
return d;
}
function _arrayWithHoles(a) { function _arrayWithHoles(a) {
if (Array.isArray(a)) return a; if (Array.isArray(a)) return a;
} }
@ -6,25 +11,36 @@ function _classCallCheck(a, b) {
if (!(a instanceof b)) throw new TypeError("Cannot call a class as a function"); if (!(a instanceof b)) throw new TypeError("Cannot call a class as a function");
} }
function _iterableToArrayLimit(a, b) { function _iterableToArrayLimit(a, b) {
var c = [], d = !0, e = !1, f = void 0; var c, d, e = null == a ? null : "undefined" != typeof Symbol && a[Symbol.iterator] || a["@@iterator"];
if (null != e) {
var f = [], g = !0, h = !1;
try { try {
for(var g, h = a[Symbol.iterator](); !(d = (g = h.next()).done) && (c.push(g.value), !b || c.length !== b); d = !0); for(e = e.call(a); !(g = (c = e.next()).done) && (f.push(c.value), !b || f.length !== b); g = !0);
} catch (i) { } catch (i) {
e = !0, f = i; h = !0, d = i;
} finally{ } finally{
try { try {
d || null == h.return || h.return(); g || null == e.return || e.return();
} finally{ } finally{
if (e) throw f; if (h) throw d;
} }
} }
return c; return f;
}
} }
function _nonIterableRest() { function _nonIterableRest() {
throw new TypeError("Invalid attempt to destructure non-iterable instance"); throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
} }
function _slicedToArray(a, b) { function _slicedToArray(a, b) {
return _arrayWithHoles(a) || _iterableToArrayLimit(a, b) || _nonIterableRest(); return _arrayWithHoles(a) || _iterableToArrayLimit(a, b) || _unsupportedIterableToArray(a, b) || _nonIterableRest();
}
function _unsupportedIterableToArray(a, b) {
if (a) {
if ("string" == typeof a) return _arrayLikeToArray(a, b);
var c = Object.prototype.toString.call(a).slice(8, -1);
if ("Object" === c && a.constructor && (c = a.constructor.name), "Map" === c || "Set" === c) return Array.from(c);
if ("Arguments" === c || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c)) return _arrayLikeToArray(a, b);
}
} }
var _other = _slicedToArray(a, 1), foo = _other[0], Foo = function() { var _other = _slicedToArray(a, 1), foo = _other[0], Foo = function() {
"use strict"; "use strict";

View file

@ -1,4 +1,9 @@
import other from 'other'; import other from 'other';
function _arrayLikeToArray(arr, len) {
if (len == null || len > arr.length) len = arr.length;
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
return arr2;
}
function _arrayWithHoles(arr) { function _arrayWithHoles(arr) {
if (Array.isArray(arr)) return arr; if (Array.isArray(arr)) return arr;
} }
@ -8,12 +13,14 @@ function _classCallCheck(instance, Constructor) {
} }
} }
function _iterableToArrayLimit(arr, i) { function _iterableToArrayLimit(arr, i) {
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
if (_i == null) return;
var _arr = []; var _arr = [];
var _n = true; var _n = true;
var _d = false; var _d = false;
var _e = undefined; var _s, _e;
try { try {
for(var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true){ for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
_arr.push(_s.value); _arr.push(_s.value);
if (i && _arr.length === i) break; if (i && _arr.length === i) break;
} }
@ -30,10 +37,18 @@ function _iterableToArrayLimit(arr, i) {
return _arr; return _arr;
} }
function _nonIterableRest() { function _nonIterableRest() {
throw new TypeError("Invalid attempt to destructure non-iterable instance"); throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
} }
function _slicedToArray(arr, i) { function _slicedToArray(arr, i) {
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
}
function _unsupportedIterableToArray(o, minLen) {
if (!o) return;
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
var n = Object.prototype.toString.call(o).slice(8, -1);
if (n === "Object" && o.constructor) n = o.constructor.name;
if (n === "Map" || n === "Set") return Array.from(n);
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
} }
var _other = _slicedToArray(other, 1), foo = _other[0]; var _other = _slicedToArray(other, 1), foo = _other[0];
var Foo = function Foo() { var Foo = function Foo() {

View file

@ -16,12 +16,12 @@ once_cell = "1.8.0"
serde = "1" serde = "1"
serde_json = "1" serde_json = "1"
next-swc = { version = "0.0.0", path = "../core" } next-swc = { version = "0.0.0", path = "../core" }
swc = "0.88.0" swc = "0.95.0"
swc_atoms = "0.2.7" swc_atoms = "0.2.7"
swc_bundler = { version = "0.82.0", features = ["concurrent"] } swc_bundler = { version = "0.88.0", features = ["concurrent"] }
swc_common = {version = "0.14.2", features = ["concurrent", "sourcemap"]} swc_common = { version = "0.15.0", features = ["concurrent", "sourcemap"] }
swc_ecma_loader = { version = "0.24.4", features = ["node", "lru"] } swc_ecma_loader = { version = "0.25.0", features = ["node", "lru"] }
swc_ecmascript = { version = "0.88.2", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] } swc_ecmascript = { version = "0.95.0", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] }
swc_node_base = "0.5.1" swc_node_base = "0.5.1"
[build-dependencies] [build-dependencies]

View file

@ -13,9 +13,7 @@ use swc::{
}; };
use swc_atoms::JsWord; use swc_atoms::JsWord;
use swc_bundler::{Bundler, ModuleData, ModuleRecord}; use swc_bundler::{Bundler, ModuleData, ModuleRecord};
use swc_common::{ use swc_common::{collections::AHashMap, errors::Handler, BytePos, FileName, SourceMap, Span};
collections::AHashMap, errors::Handler, BytePos, FileName, SourceMap, Span, DUMMY_SP,
};
use swc_ecma_loader::{ use swc_ecma_loader::{
resolvers::{lru::CachingResolver, node::NodeModulesResolver}, resolvers::{lru::CachingResolver, node::NodeModulesResolver},
TargetEnv, NODE_BUILTINS, TargetEnv, NODE_BUILTINS,
@ -23,7 +21,7 @@ use swc_ecma_loader::{
use swc_ecmascript::{ use swc_ecmascript::{
ast::*, ast::*,
parser::{lexer::Lexer, EsConfig, Parser, StringInput, Syntax}, parser::{lexer::Lexer, EsConfig, Parser, StringInput, Syntax},
visit::{noop_visit_type, Node, Visit, VisitWith}, visit::{noop_visit_type, Visit, VisitWith},
}; };
#[js_function(1)] #[js_function(1)]
@ -100,9 +98,7 @@ impl Task for BundleTask {
names: Default::default(), names: Default::default(),
}; };
output output.module.visit_with(&mut v);
.module
.visit_with(&Invalid { span: DUMMY_SP }, &mut v);
v.names v.names
}; };
@ -197,7 +193,7 @@ pub struct SourceMapIdentCollector {
impl Visit for SourceMapIdentCollector { impl Visit for SourceMapIdentCollector {
noop_visit_type!(); noop_visit_type!();
fn visit_ident(&mut self, ident: &Ident, _: &dyn Node) { fn visit_ident(&mut self, ident: &Ident) {
self.names.insert(ident.span.lo, ident.sym.clone()); self.names.insert(ident.span.lo, ident.sym.clone());
} }
} }

View file

@ -16,9 +16,9 @@ path-clean = "0.1"
serde = {version = "1", features = ["derive"]} serde = {version = "1", features = ["derive"]}
serde_json = "1" serde_json = "1"
next-swc = { version = "0.0.0", path = "../core" } next-swc = { version = "0.0.0", path = "../core" }
swc = "0.88.0" swc = "0.95.0"
swc_common = {version = "0.14.2", features = ["concurrent", "sourcemap"]} swc_common = { version = "0.15.0", features = ["concurrent", "sourcemap"] }
swc_ecmascript = { version = "0.88.2", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] } swc_ecmascript = { version = "0.95.0", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] }
tracing = {version = "0.1.28", features = ["release_max_level_off"]} tracing = {version = "0.1.28", features = ["release_max_level_off"]}
wasm-bindgen = {version = "0.2", features = ["serde-serialize"]} wasm-bindgen = {version = "0.2", features = ["serde-serialize"]}
wasm-bindgen-futures = "0.4.8" wasm-bindgen-futures = "0.4.8"