From fbd937ace76263b646cd6c877152c0033da45995 Mon Sep 17 00:00:00 2001 From: Donny Date: Tue, 9 Nov 2021 14:01:44 +0900 Subject: [PATCH 1/9] Update swc --- packages/next/build/swc/Cargo.lock | 92 +++++++++++++++--------------- packages/next/build/swc/Cargo.toml | 12 ++-- 2 files changed, 52 insertions(+), 52 deletions(-) diff --git a/packages/next/build/swc/Cargo.lock b/packages/next/build/swc/Cargo.lock index ec152b3a386dcd8..ce38f0e5ccabb5b 100644 --- a/packages/next/build/swc/Cargo.lock +++ b/packages/next/build/swc/Cargo.lock @@ -1625,9 +1625,9 @@ checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" [[package]] name = "swc" -version = "0.81.1" +version = "0.83.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f877212f3dbeba2fb448192c5045ce50af39da1b54e48fd2894a12753a61a1d" +checksum = "cfadbb1e59ec66db1ffff2ec0024b47e725e5c93519a95c65c60ac2649f39107" dependencies = [ "ahash", "anyhow", @@ -1674,9 +1674,9 @@ dependencies = [ [[package]] name = "swc_bundler" -version = "0.79.0" +version = "0.80.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52993195a4365d22ec362b26b6d5f64d9f51ffe1a2bb93a6b68e64648b1193c6" +checksum = "91ec07321d14896d4de4b83af50fa65f1438180f69af056108c060e764ee32e3" dependencies = [ "ahash", "anyhow", @@ -1706,9 +1706,9 @@ dependencies = [ [[package]] name = "swc_common" -version = "0.14.3" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c96fee6d6608c3022c455fd8a670ecb52f60c3a3ec4ea911ef0b173bd40dd1d" +checksum = "2cc7f3a65556dcd305165d2d03068cc114df917435fe4d5220584c21a4d9684d" dependencies = [ "ahash", "ast_node", @@ -1826,9 +1826,9 @@ dependencies = [ [[package]] name = "swc_ecma_ast" -version = "0.56.0" +version = "0.57.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3a8d411060714c3fe2abbb15cddab1f78929d34409f47495eea77490694a52f" +checksum = "8b5299a017039d8c6a6aba0ed6aca8bdb9863d113d26af3d7ad54ada5f23281c" dependencies = [ "is-macro", "num-bigint", @@ -1840,9 +1840,9 @@ dependencies = [ [[package]] name = "swc_ecma_codegen" -version = "0.78.1" +version = "0.79.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17f553750c724f1c35169c5821a507e3431e54ef6d60135affab84ca709ba3d6" +checksum = "7ef0433372312eda24f69e4718b725de6e9ccfebe7ae8191d904a8b9e4a3670d" dependencies = [ "bitflags", "memchr", @@ -1872,9 +1872,9 @@ dependencies = [ [[package]] name = "swc_ecma_ext_transforms" -version = "0.36.1" +version = "0.37.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4982906ddf552c3a1fba697fd40319150d3e08102450ef53330a26a17b01650a" +checksum = "02351bfbc674fd588c8b40f0b578adf1d34048a5c25d5bf551839d8ceb7be14d" dependencies = [ "phf", "swc_atoms", @@ -1887,9 +1887,9 @@ dependencies = [ [[package]] name = "swc_ecma_loader" -version = "0.23.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8175736fa6f87725ee3736bb601d934444bd8b0e3b6b9032842fd0f189368e87" +checksum = "79f2110de50f1c2ca0b35e5d1024d77a4ed7008078b96ab646523f7185860eeb" dependencies = [ "ahash", "anyhow", @@ -1910,9 +1910,9 @@ dependencies = [ [[package]] name = "swc_ecma_minifier" -version = "0.48.4" +version = "0.49.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c079c92a805da29b4272f9846a545231478c8cd02aefa5aedea5eb450a78e70b" +checksum = "cc808dc0e5d3e6c5319e02ddac25008ae2ae5dff2baeda1192ba6ede0b75b57f" dependencies = [ "ahash", "indexmap", @@ -1938,9 +1938,9 @@ dependencies = [ [[package]] name = "swc_ecma_parser" -version = "0.76.3" +version = "0.77.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f410fad7848bf376f31b621bde573858325d8127a71fbbe2d5effbe897420bb3" +checksum = "a526a6dfb2146ea6337853dac7bd23e049fe9e8a9336d0a2ea8d748aa95a04be" dependencies = [ "either", "enum_kind", @@ -1959,9 +1959,9 @@ dependencies = [ [[package]] name = "swc_ecma_preset_env" -version = "0.63.1" +version = "0.64.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa3ac0ad38409e19ee9c55120fb20c16311978fa2746d425e21a704f837f6d5f" +checksum = "ccdb2668c07a70beb4a0ab9003ee88dc7f8da6e8c0faf47b501b1925077b9711" dependencies = [ "ahash", "dashmap", @@ -1983,9 +1983,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms" -version = "0.92.1" +version = "0.93.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20274f70994cacecf98728cffcc29f7e89bf9d72452ac7f912db72230b261451" +checksum = "458bee9140196391eb44920c9bd4f5552e0ead3f542702984f5cd6922eda527c" dependencies = [ "swc_atoms", "swc_common", @@ -2005,9 +2005,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_base" -version = "0.42.1" +version = "0.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d47323456ee73ecffa584a3964cc82dbf3daee2c7c72221d1f2130d3e42312d" +checksum = "819aa4d767fd0741176d3308f66f1e17900729e4930ebb14073c2027d37b82c6" dependencies = [ "once_cell", "phf", @@ -2025,9 +2025,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_classes" -version = "0.28.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b26b5cc2e20bc232d366361a52347266b34443ec561bda7f2f00da83801a2e76" +checksum = "b91ed59e16a892088dc688895163971924db87eba05f3bd26782d6f4f7f10c2f" dependencies = [ "swc_atoms", "swc_common", @@ -2039,9 +2039,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_compat" -version = "0.49.3" +version = "0.50.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aefdc14b1f1a2806c887fdf804f26456bd64844fd6ef0033d4cdd058a01eabeb" +checksum = "c6928fa65beebc11e401b4c661bfd4de728807fdfb512e99be58a6563e37b0d4" dependencies = [ "ahash", "arrayvec", @@ -2076,9 +2076,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_module" -version = "0.55.2" +version = "0.56.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b650afe12cae3bdb1d56023e1df24327bcb2b47233c7f4573742c42539617ae" +checksum = "4e7cdab646c89604c353861e0d687bc750b4ca5ad4f35b2015b005f27d921f8b" dependencies = [ "Inflector", "ahash", @@ -2098,9 +2098,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_optimization" -version = "0.62.1" +version = "0.63.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "804930bf18b7a467a0c309129ecdc7a07f378ffc0c6a963c6a0e592b4eeff53e" +checksum = "81dbb2e2ad03aa5e76932d767e7ca81469eb11780cd497bc74f03a7b726fb0f7" dependencies = [ "ahash", "dashmap", @@ -2122,9 +2122,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_proposal" -version = "0.55.1" +version = "0.56.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc9a9d26f33973ebc3f34d78551b3c4444c2bc1eeb89b2b376d08db7f73c649" +checksum = "e0d5a54177c17ba9736ac65878fa677e17867de7b8e90dbe27c13e7cf5ff7aa3" dependencies = [ "either", "serde", @@ -2142,9 +2142,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_react" -version = "0.57.1" +version = "0.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "174789f88a5df9c6c714eb174bb392d2eb5a0692e310ceca39816536d4157716" +checksum = "262b788279078e7d521052e7b14f00a6d2c10aba436c7cde65618b979354dbb7" dependencies = [ "ahash", "base64 0.13.0", @@ -2167,9 +2167,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_testing" -version = "0.43.1" +version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e590950e01356b107a9d4f7c94c474ae2d09a8c63a42e31811600687011957ed" +checksum = "b6242dc8f9a0d38ed105e93961b8d960297bcd725740d460676d431360a32cbc" dependencies = [ "ansi_term", "anyhow", @@ -2190,9 +2190,9 @@ dependencies = [ [[package]] name = "swc_ecma_transforms_typescript" -version = "0.58.2" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071eaf1280a9e874c4d0d4a6e5f862adcb3721d5e0670053d9b2df5f6785083f" +checksum = "77be2906b25d4a50dedf1151c3d062a34e86fa41cc7e890295af2e8eebd10eb9" dependencies = [ "serde", "swc_atoms", @@ -2207,9 +2207,9 @@ dependencies = [ [[package]] name = "swc_ecma_utils" -version = "0.50.1" +version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8762b5fccb1bbb5f4bcb83eb6668a78b3861ae8df692c76e75cc33605d611480" +checksum = "11dd67f85fe25b7aa4899ecc63191f50bc9c3bb13ccb8d4aa99800119eb3ff09" dependencies = [ "once_cell", "rayon", @@ -2222,9 +2222,9 @@ dependencies = [ [[package]] name = "swc_ecma_visit" -version = "0.42.0" +version = "0.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3839eb1dfad16550140d59462187de81fc536c53c53035a25fc40cbf01cc5042" +checksum = "45a31547556529dd5310219ace29d2c9c3b9316466d0e489ddaa59f1173c9a06" dependencies = [ "num-bigint", "swc_atoms", @@ -2235,9 +2235,9 @@ dependencies = [ [[package]] name = "swc_ecmascript" -version = "0.84.1" +version = "0.85.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ca7d514168991ecf5e548ff3eb4af82e810b4f50cfd0031e7ded90357cbfb02" +checksum = "baa1b467fae5dc365f1bd533543160bec39beabfe04731213c9cb4dcbdae99f9" dependencies = [ "swc_ecma_ast", "swc_ecma_codegen", diff --git a/packages/next/build/swc/Cargo.toml b/packages/next/build/swc/Cargo.toml index da5afce92d50207..cfcb1de1d763a67 100644 --- a/packages/next/build/swc/Cargo.toml +++ b/packages/next/build/swc/Cargo.toml @@ -22,14 +22,14 @@ retain_mut = "0.1.3" rustc-hash = "1.1.0" serde = "1" serde_json = "1" -swc = "0.81.1" +swc = "0.83.0" swc_atoms = "0.2.7" -swc_bundler = {version = "0.79.0", features = ["concurrent"]} +swc_bundler = { version = "0.80.0", features = ["concurrent"] } swc_common = {version = "0.14.2", features = ["concurrent", "sourcemap"]} swc_css = "0.20.0" -swc_ecma_loader = {version = "0.23.0", features = ["node", "lru"]} -swc_ecma_preset_env = "0.63.1" -swc_ecmascript = {version = "0.84.1", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"]} +swc_ecma_loader = { version = "0.24.0", features = ["node", "lru"] } +swc_ecma_preset_env = "0.64.0" +swc_ecmascript = { version = "0.85.0", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] } swc_node_base = "0.5.1" swc_stylis = "0.17.0" tracing = {version = "0.1.28", features = ["release_max_level_off"]} @@ -38,7 +38,7 @@ tracing = {version = "0.1.28", features = ["release_max_level_off"]} napi-build = "1" [dev-dependencies] -swc_ecma_transforms_testing = "0.43.1" +swc_ecma_transforms_testing = "0.44.0" testing = "0.15.1" walkdir = "2.3.2" From 9bde8893c8fde4092296c62cb017ad04adb4b7c1 Mon Sep 17 00:00:00 2001 From: Donny Date: Tue, 9 Nov 2021 14:02:14 +0900 Subject: [PATCH 2/9] Add dep --- packages/next/build/swc/Cargo.lock | 17 +++++++++++++++++ packages/next/build/swc/Cargo.toml | 1 + 2 files changed, 18 insertions(+) diff --git a/packages/next/build/swc/Cargo.lock b/packages/next/build/swc/Cargo.lock index ce38f0e5ccabb5b..8abb3289ca6d825 100644 --- a/packages/next/build/swc/Cargo.lock +++ b/packages/next/build/swc/Cargo.lock @@ -758,6 +758,7 @@ dependencies = [ "rustc-hash", "serde", "serde_json", + "styled_components", "swc", "swc_atoms", "swc_bundler", @@ -1623,6 +1624,22 @@ version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c" +[[package]] +name = "styled_components" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bead63e50d51304ddf1f938513b5fec3dc66c57b0b742db6e4748ba61192fd5" +dependencies = [ + "Inflector", + "once_cell", + "regex", + "serde", + "swc_atoms", + "swc_common", + "swc_ecmascript", + "tracing", +] + [[package]] name = "swc" version = "0.83.0" diff --git a/packages/next/build/swc/Cargo.toml b/packages/next/build/swc/Cargo.toml index cfcb1de1d763a67..c1f33ef59c735fd 100644 --- a/packages/next/build/swc/Cargo.toml +++ b/packages/next/build/swc/Cargo.toml @@ -22,6 +22,7 @@ retain_mut = "0.1.3" rustc-hash = "1.1.0" serde = "1" serde_json = "1" +styled_components = "0.1.0" swc = "0.83.0" swc_atoms = "0.2.7" swc_bundler = { version = "0.80.0", features = ["concurrent"] } From eb82b494aa6b2159df40bb8e57fa8f86c4f9ddd6 Mon Sep 17 00:00:00 2001 From: Donny Date: Tue, 9 Nov 2021 14:06:29 +0900 Subject: [PATCH 3/9] Fix --- packages/next/build/swc/src/transform.rs | 5 +++-- packages/next/build/swc/tests/full.rs | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/next/build/swc/src/transform.rs b/packages/next/build/swc/src/transform.rs index 971adcc8caf63ef..4991d99f7c8ad08 100644 --- a/packages/next/build/swc/src/transform.rs +++ b/packages/next/build/swc/src/transform.rs @@ -80,10 +80,11 @@ impl Task for TransformTask { let before_pass = custom_before_pass(&fm.name, &options); self.c.process_js_with_custom_pass( fm.clone(), + None, &handler, &options.swc, - before_pass, - noop(), + |_| before_pass, + |_| noop(), ) } }) diff --git a/packages/next/build/swc/tests/full.rs b/packages/next/build/swc/tests/full.rs index 9fd03327c2be9bd..82321a2280c467d 100644 --- a/packages/next/build/swc/tests/full.rs +++ b/packages/next/build/swc/tests/full.rs @@ -62,10 +62,11 @@ fn test(input: &Path, minify: bool) { match c.process_js_with_custom_pass( fm.clone(), + None, &handler, &options.swc, - custom_before_pass(&fm.name, &assert_json(&"{}")), - noop(), + |_| custom_before_pass(&fm.name, &assert_json(&"{}")), + |_| noop(), ) { Ok(v) => { NormalizedOutput::from(v.code) From 5765ef281470ebdc641bea0a8bcd9c2f3901c87b Mon Sep 17 00:00:00 2001 From: Donny Date: Tue, 9 Nov 2021 14:11:51 +0900 Subject: [PATCH 4/9] Dep on `either` --- packages/next/build/swc/Cargo.lock | 1 + packages/next/build/swc/Cargo.toml | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/next/build/swc/Cargo.lock b/packages/next/build/swc/Cargo.lock index 8abb3289ca6d825..3dfe170adccc226 100644 --- a/packages/next/build/swc/Cargo.lock +++ b/packages/next/build/swc/Cargo.lock @@ -746,6 +746,7 @@ dependencies = [ "backtrace", "chrono", "easy-error", + "either", "fxhash", "napi", "napi-build", diff --git a/packages/next/build/swc/Cargo.toml b/packages/next/build/swc/Cargo.toml index c1f33ef59c735fd..205f175bbbf1c73 100644 --- a/packages/next/build/swc/Cargo.toml +++ b/packages/next/build/swc/Cargo.toml @@ -11,6 +11,7 @@ anyhow = "1.0" backtrace = "0.3" chrono = "0.4" easy-error = "1.0.0" +either = "1" fxhash = "0.2.1" napi = {version = "1", features = ["serde-json"]} napi-derive = "1" From 35177d7953d6b873f34bc3a62321bab26f223631 Mon Sep 17 00:00:00 2001 From: Donny Date: Tue, 9 Nov 2021 14:16:21 +0900 Subject: [PATCH 5/9] styled-components --- packages/next/build/swc/src/lib.rs | 27 +++++++++++++++++++++--- packages/next/build/swc/src/transform.rs | 2 +- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/packages/next/build/swc/src/lib.rs b/packages/next/build/swc/src/lib.rs index 5bd3efffff68bab..45d30fb928b1a2b 100644 --- a/packages/next/build/swc/src/lib.rs +++ b/packages/next/build/swc/src/lib.rs @@ -36,13 +36,17 @@ extern crate swc_node_base; use auto_cjs::contains_cjs; use backtrace::Backtrace; +use either::Either; use napi::{CallContext, Env, JsObject, JsUndefined}; use serde::Deserialize; +use std::cell::RefCell; +use std::rc::Rc; use std::{env, panic::set_hook, path::PathBuf, sync::Arc}; use swc::{config::ModuleConfig, Compiler, TransformOutput}; use swc_common::SourceFile; -use swc_common::{self, chain, pass::Optional, sync::Lazy, FileName, FilePathMapping, SourceMap}; +use swc_common::{self, chain, pass::Optional, sync::Lazy, FilePathMapping, SourceMap}; use swc_ecmascript::ast::EsVersion; +use swc_ecmascript::transforms::pass::noop; use swc_ecmascript::{ parser::{lexer::Lexer, Parser, StringInput}, visit::Fold, @@ -80,15 +84,32 @@ pub struct TransformOptions { #[serde(default)] pub is_development: bool, + + #[serde(default)] + pub styled_components: Option, } -pub fn custom_before_pass(name: &FileName, opts: &TransformOptions) -> impl Fold { +pub fn custom_before_pass(file: Arc, opts: &TransformOptions) -> impl Fold { chain!( styled_jsx::styled_jsx(), hook_optimizer::hook_optimizer(), + match &opts.styled_components { + Some(config) => { + let config = Rc::new(config.clone()); + let state: Rc> = Default::default(); + + Either::Left(chain!( + styled_components::analyzer(config.clone(), state.clone()), + styled_components::display_name_and_id(file.clone(), config, state) + )) + } + None => { + Either::Right(noop()) + } + }, Optional::new(next_ssg::next_ssg(), !opts.disable_next_ssg), amp_attributes::amp_attributes(), - next_dynamic::next_dynamic(name.clone(), opts.pages_dir.clone()), + next_dynamic::next_dynamic(file.name.clone(), opts.pages_dir.clone()), Optional::new( page_config::page_config(opts.is_development, opts.is_page_file), !opts.disable_page_config diff --git a/packages/next/build/swc/src/transform.rs b/packages/next/build/swc/src/transform.rs index 4991d99f7c8ad08..cb0fc793286126f 100644 --- a/packages/next/build/swc/src/transform.rs +++ b/packages/next/build/swc/src/transform.rs @@ -77,7 +77,7 @@ impl Task for TransformTask { let options = options.patch(&fm); - let before_pass = custom_before_pass(&fm.name, &options); + let before_pass = custom_before_pass(fm.clone(), &options); self.c.process_js_with_custom_pass( fm.clone(), None, From 7a1392ce2da56e793e68e0a8362fd02daa79603d Mon Sep 17 00:00:00 2001 From: Donny Date: Tue, 9 Nov 2021 14:16:25 +0900 Subject: [PATCH 6/9] Add a test --- packages/next/build/swc/tests/full.rs | 3 ++- .../next/build/swc/tests/full/styled-components/1/input.js | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 packages/next/build/swc/tests/full/styled-components/1/input.js diff --git a/packages/next/build/swc/tests/full.rs b/packages/next/build/swc/tests/full.rs index 82321a2280c467d..ad0fdbbd4e58035 100644 --- a/packages/next/build/swc/tests/full.rs +++ b/packages/next/build/swc/tests/full.rs @@ -56,6 +56,7 @@ fn test(input: &Path, minify: bool) { pages_dir: None, is_page_file: false, is_development: true, + styled_components: Some(Default::default()), }; let options = options.patch(&fm); @@ -65,7 +66,7 @@ fn test(input: &Path, minify: bool) { None, &handler, &options.swc, - |_| custom_before_pass(&fm.name, &assert_json(&"{}")), + |_| custom_before_pass(fm.clone(), &options), |_| noop(), ) { Ok(v) => { diff --git a/packages/next/build/swc/tests/full/styled-components/1/input.js b/packages/next/build/swc/tests/full/styled-components/1/input.js new file mode 100644 index 000000000000000..dbc881f6d005f14 --- /dev/null +++ b/packages/next/build/swc/tests/full/styled-components/1/input.js @@ -0,0 +1,7 @@ +import styled from 'styled-components'; + + + +export const foo = styled.input` + color: red; +`; \ No newline at end of file From 10224c7f00b85f761259cf011e62be6badf0a7be Mon Sep 17 00:00:00 2001 From: Donny Date: Tue, 9 Nov 2021 14:21:00 +0900 Subject: [PATCH 7/9] Fix --- packages/next/build/swc/tests/full.rs | 2 +- .../styled-components/1/input.js | 0 .../loader/styled-components/1/output.js | 24 +++++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) rename packages/next/build/swc/tests/{full => loader}/styled-components/1/input.js (100%) create mode 100644 packages/next/build/swc/tests/loader/styled-components/1/output.js diff --git a/packages/next/build/swc/tests/full.rs b/packages/next/build/swc/tests/full.rs index ad0fdbbd4e58035..38ab5603ed6d317 100644 --- a/packages/next/build/swc/tests/full.rs +++ b/packages/next/build/swc/tests/full.rs @@ -56,7 +56,7 @@ fn test(input: &Path, minify: bool) { pages_dir: None, is_page_file: false, is_development: true, - styled_components: Some(Default::default()), + styled_components: Some(assert_json("{}")), }; let options = options.patch(&fm); diff --git a/packages/next/build/swc/tests/full/styled-components/1/input.js b/packages/next/build/swc/tests/loader/styled-components/1/input.js similarity index 100% rename from packages/next/build/swc/tests/full/styled-components/1/input.js rename to packages/next/build/swc/tests/loader/styled-components/1/input.js diff --git a/packages/next/build/swc/tests/loader/styled-components/1/output.js b/packages/next/build/swc/tests/loader/styled-components/1/output.js new file mode 100644 index 000000000000000..70e1bb4afc6bb2a --- /dev/null +++ b/packages/next/build/swc/tests/loader/styled-components/1/output.js @@ -0,0 +1,24 @@ +import styled from 'styled-components'; +function _taggedTemplateLiteral(strings, raw) { + if (!raw) { + raw = strings.slice(0); + } + return Object.freeze(Object.defineProperties(strings, { + raw: { + value: Object.freeze(raw) + } + })); +} +function _templateObject() { + var data = _taggedTemplateLiteral([ + "\n color: red;\n" + ]); + _templateObject = function _templateObject() { + return data; + }; + return data; +} +export var foo = styled.input.withConfig({ + displayName: "input__foo", + componentId: "sc-12c52e68-0" +})(_templateObject()); From af1b30b9237075cc112294a2cc21255c4099244e Mon Sep 17 00:00:00 2001 From: Donny Date: Tue, 9 Nov 2021 15:19:30 +0900 Subject: [PATCH 8/9] Update swc --- packages/next/build/swc/Cargo.lock | 4 ++-- packages/next/build/swc/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/next/build/swc/Cargo.lock b/packages/next/build/swc/Cargo.lock index 3dfe170adccc226..9791cd80532e8a0 100644 --- a/packages/next/build/swc/Cargo.lock +++ b/packages/next/build/swc/Cargo.lock @@ -1643,9 +1643,9 @@ dependencies = [ [[package]] name = "swc" -version = "0.83.0" +version = "0.83.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfadbb1e59ec66db1ffff2ec0024b47e725e5c93519a95c65c60ac2649f39107" +checksum = "0c9dfd3fa9b1e3dc214afe20974a938b1d6c52db137bfe6645234dc6a725e2aa" dependencies = [ "ahash", "anyhow", diff --git a/packages/next/build/swc/Cargo.toml b/packages/next/build/swc/Cargo.toml index 205f175bbbf1c73..ff0467aeb206737 100644 --- a/packages/next/build/swc/Cargo.toml +++ b/packages/next/build/swc/Cargo.toml @@ -24,7 +24,7 @@ rustc-hash = "1.1.0" serde = "1" serde_json = "1" styled_components = "0.1.0" -swc = "0.83.0" +swc = "0.83.1" swc_atoms = "0.2.7" swc_bundler = { version = "0.80.0", features = ["concurrent"] } swc_common = {version = "0.14.2", features = ["concurrent", "sourcemap"]} From 9a1926327be2850506f50bc9a8d876b146841dd8 Mon Sep 17 00:00:00 2001 From: Tim Neutkens Date: Tue, 9 Nov 2021 10:22:44 +0100 Subject: [PATCH 9/9] Add experimental flag for styled-components transform + add test --- package.json | 1 + packages/next/build/swc/options.js | 7 + packages/next/build/webpack-config.ts | 1 + .../build/webpack/loaders/next-swc-loader.js | 4 +- packages/next/server/config-shared.ts | 1 + .../basic/styled-components.test.ts | 60 ++++++ .../basic/styled-components/next.config.js | 5 + .../basic/styled-components/pages/_app.js | 26 +++ .../styled-components/pages/_document.js | 30 +++ .../basic/styled-components/pages/index.js | 38 ++++ yarn.lock | 199 +++++++++++++++++- 11 files changed, 369 insertions(+), 3 deletions(-) create mode 100644 test/development/basic/styled-components.test.ts create mode 100644 test/development/basic/styled-components/next.config.js create mode 100644 test/development/basic/styled-components/pages/_app.js create mode 100644 test/development/basic/styled-components/pages/_document.js create mode 100644 test/development/basic/styled-components/pages/index.js diff --git a/package.json b/package.json index 2f8f5ccfaadae1a..206dce7ee28e29e 100644 --- a/package.json +++ b/package.json @@ -149,6 +149,7 @@ "seedrandom": "3.0.5", "selenium-webdriver": "4.0.0-beta.4", "shell-quote": "1.7.3", + "styled-components": "5.3.3", "styled-jsx-plugin-postcss": "3.0.2", "tailwindcss": "1.1.3", "taskr": "1.1.0", diff --git a/packages/next/build/swc/options.js b/packages/next/build/swc/options.js index ccc0e5aa00a1acb..362ce88a42a555a 100644 --- a/packages/next/build/swc/options.js +++ b/packages/next/build/swc/options.js @@ -6,6 +6,7 @@ function getBaseSWCOptions({ development, hasReactRefresh, globalWindow, + styledComponents, }) { const isTSFile = filename.endsWith('.ts') const isTypeScript = isTSFile || filename.endsWith('.tsx') @@ -42,6 +43,10 @@ function getBaseSWCOptions({ }, }, }, + styledComponents: { + displayName: styledComponents, + ssr: styledComponents, + }, } } @@ -78,12 +83,14 @@ export function getLoaderSWCOptions({ pagesDir, isPageFile, hasReactRefresh, + styledComponents, }) { let baseOptions = getBaseSWCOptions({ filename, development, globalWindow: !isServer, hasReactRefresh, + styledComponents, }) const isNextDist = nextDistPath.test(filename) diff --git a/packages/next/build/webpack-config.ts b/packages/next/build/webpack-config.ts index b3288143b20119c..81e9beb63207510 100644 --- a/packages/next/build/webpack-config.ts +++ b/packages/next/build/webpack-config.ts @@ -469,6 +469,7 @@ export default async function getBaseWebpackConfig( isServer: isMiddleware || isServer, pagesDir, hasReactRefresh: !isMiddleware && hasReactRefresh, + styledComponents: config.experimental.styledComponents, }, } : { diff --git a/packages/next/build/webpack/loaders/next-swc-loader.js b/packages/next/build/webpack/loaders/next-swc-loader.js index 4215bb257921edd..09528a72d77822b 100644 --- a/packages/next/build/webpack/loaders/next-swc-loader.js +++ b/packages/next/build/webpack/loaders/next-swc-loader.js @@ -35,7 +35,8 @@ async function loaderTransform(parentTrace, source, inputSourceMap) { let loaderOptions = this.getOptions() || {} - const { isServer, pagesDir, hasReactRefresh } = loaderOptions + const { isServer, pagesDir, hasReactRefresh, styledComponents } = + loaderOptions const isPageFile = filename.startsWith(pagesDir) const swcOptions = getLoaderSWCOptions({ @@ -45,6 +46,7 @@ async function loaderTransform(parentTrace, source, inputSourceMap) { isPageFile, development: this.mode === 'development', hasReactRefresh, + styledComponents, }) const programmaticOptions = { diff --git a/packages/next/server/config-shared.ts b/packages/next/server/config-shared.ts index 5ee94ee1a40105f..e69275fffac9591 100644 --- a/packages/next/server/config-shared.ts +++ b/packages/next/server/config-shared.ts @@ -126,6 +126,7 @@ export type NextConfig = { [key: string]: any } & { crossOrigin?: false | 'anonymous' | 'use-credentials' swcMinify?: boolean experimental?: { + styledComponents?: boolean swcMinify?: boolean cpus?: number sharedPool?: boolean diff --git a/test/development/basic/styled-components.test.ts b/test/development/basic/styled-components.test.ts new file mode 100644 index 000000000000000..99838fd36f4fb00 --- /dev/null +++ b/test/development/basic/styled-components.test.ts @@ -0,0 +1,60 @@ +import { join } from 'path' +import webdriver from 'next-webdriver' +import { createNext, FileRef } from 'e2e-utils' +import { NextInstance } from 'test/lib/next-modes/base' +import { fetchViaHTTP } from 'next-test-utils' + +describe('styled-components SWC transform', () => { + let next: NextInstance + + beforeAll(async () => { + next = await createNext({ + files: { + // 'next.config.js': new FileRef( + // join(__dirname, 'styled-components/next.config.js') + // ), + pages: new FileRef(join(__dirname, 'styled-components/pages')), + }, + dependencies: { + 'styled-components': '5.3.3', + }, + }) + }) + afterAll(() => next.destroy()) + + async function matchLogs$(browser) { + let foundLog = false + + const browserLogs = await browser.log('browser') + + browserLogs.forEach((log) => { + console.error({ log }) + if (log.message.includes('Warning: Prop `%s` did not match.')) { + foundLog = true + } + }) + return foundLog + } + it('should not have hydration mismatch with styled-components transform enabled', async () => { + let browser + try { + browser = await webdriver(next.appPort, '/') + + // Compile /_error + await fetchViaHTTP(next.appPort, '/404') + + // Try 4 times to be sure there is no mismatch + expect(await matchLogs$(browser)).toBe(false) + await browser.refresh() + expect(await matchLogs$(browser)).toBe(false) + await browser.refresh() + expect(await matchLogs$(browser)).toBe(false) + await browser.refresh() + expect(await matchLogs$(browser)).toBe(false) + } finally { + if (browser) { + await browser.close() + } + } + }) +}) diff --git a/test/development/basic/styled-components/next.config.js b/test/development/basic/styled-components/next.config.js new file mode 100644 index 000000000000000..b125c0d79477619 --- /dev/null +++ b/test/development/basic/styled-components/next.config.js @@ -0,0 +1,5 @@ +module.exports = { + experimental: { + styledComponents: true, + }, +} diff --git a/test/development/basic/styled-components/pages/_app.js b/test/development/basic/styled-components/pages/_app.js new file mode 100644 index 000000000000000..019f78b2afc64a4 --- /dev/null +++ b/test/development/basic/styled-components/pages/_app.js @@ -0,0 +1,26 @@ +import { createGlobalStyle, ThemeProvider } from 'styled-components' + +const GlobalStyle = createGlobalStyle` + body { + margin: 0; + padding: 0; + box-sizing: border-box; + } +` + +const theme = { + colors: { + primary: '#0070f3', + }, +} + +export default function App({ Component, pageProps }) { + return ( + <> + + + + + + ) +} diff --git a/test/development/basic/styled-components/pages/_document.js b/test/development/basic/styled-components/pages/_document.js new file mode 100644 index 000000000000000..2a59afeb93c1fe1 --- /dev/null +++ b/test/development/basic/styled-components/pages/_document.js @@ -0,0 +1,30 @@ +import Document from 'next/document' +import { ServerStyleSheet } from 'styled-components' + +export default class MyDocument extends Document { + static async getInitialProps(ctx) { + const sheet = new ServerStyleSheet() + const originalRenderPage = ctx.renderPage + + try { + ctx.renderPage = () => + originalRenderPage({ + enhanceApp: (App) => (props) => + sheet.collectStyles(), + }) + + const initialProps = await Document.getInitialProps(ctx) + return { + ...initialProps, + styles: ( + <> + {initialProps.styles} + {sheet.getStyleElement()} + + ), + } + } finally { + sheet.seal() + } + } +} diff --git a/test/development/basic/styled-components/pages/index.js b/test/development/basic/styled-components/pages/index.js new file mode 100644 index 000000000000000..31bd1226e76891b --- /dev/null +++ b/test/development/basic/styled-components/pages/index.js @@ -0,0 +1,38 @@ +import styled, { css } from 'styled-components' +const Button = styled.a` + /* This renders the buttons above... Edit me! */ + display: inline-block; + border-radius: 3px; + padding: 0.5rem 0; + margin: 0.5rem 1rem; + width: 11rem; + background: transparent; + color: white; + border: 2px solid white; + + /* The GitHub button is a primary button + * edit this to target it specifically! */ + ${(props) => + props.primary && + css` + background: white; + color: black; + `} +` + +export default function Home() { + return ( +
+ + + +
+ ) +} diff --git a/yarn.lock b/yarn.lock index 175424a4a29f4f9..131e6f08c6fea0b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -74,6 +74,13 @@ dependencies: "@babel/highlight" "^7.14.5" +"@babel/code-frame@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431" + integrity sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA== + dependencies: + "@babel/highlight" "^7.16.0" + "@babel/compat-data@^7.12.5", "@babel/compat-data@^7.12.7": version "7.12.7" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.7.tgz#9329b4782a7d6bbd7eef57e11addf91ee3ef1e41" @@ -206,6 +213,15 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.0.tgz#d40f3d1d5075e62d3500bccb67f3daa8a95265b2" + integrity sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew== + dependencies: + "@babel/types" "^7.16.0" + jsesc "^2.5.1" + source-map "^0.5.0" + "@babel/helper-annotate-as-pure@^7.10.4", "@babel/helper-annotate-as-pure@^7.12.10": version "7.12.10" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz#54ab9b000e60a93644ce17b3f37d313aaf1d115d" @@ -220,6 +236,13 @@ dependencies: "@babel/types" "^7.14.5" +"@babel/helper-annotate-as-pure@^7.15.4": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.0.tgz#9a1f0ebcda53d9a2d00108c4ceace6a5d5f1f08d" + integrity sha512-ItmYF9vR4zA8cByDocY05o0LGUkp1zhbTQOH1NFyl5xXEqlTJQCEJjieriw+aFpxo16swMxUnUiKS7a/r4vtHg== + dependencies: + "@babel/types" "^7.16.0" + "@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" @@ -383,6 +406,15 @@ "@babel/template" "^7.14.5" "@babel/types" "^7.14.5" +"@babel/helper-function-name@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz#b7dd0797d00bbfee4f07e9c4ea5b0e30c8bb1481" + integrity sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog== + dependencies: + "@babel/helper-get-function-arity" "^7.16.0" + "@babel/template" "^7.16.0" + "@babel/types" "^7.16.0" + "@babel/helper-get-function-arity@^7.12.10": version "7.12.10" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz#b158817a3165b5faa2047825dfa61970ddcc16cf" @@ -404,6 +436,13 @@ dependencies: "@babel/types" "^7.14.5" +"@babel/helper-get-function-arity@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz#0088c7486b29a9cb5d948b1a1de46db66e089cfa" + integrity sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ== + dependencies: + "@babel/types" "^7.16.0" + "@babel/helper-hoist-variables@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" @@ -418,6 +457,13 @@ dependencies: "@babel/types" "^7.14.5" +"@babel/helper-hoist-variables@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz#4c9023c2f1def7e28ff46fc1dbcd36a39beaa81a" + integrity sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg== + dependencies: + "@babel/types" "^7.16.0" + "@babel/helper-member-expression-to-functions@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz#fba0f2fcff3fba00e6ecb664bb5e6e26e2d6165c" @@ -439,6 +485,13 @@ dependencies: "@babel/types" "^7.15.0" +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.15.4": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz#90538e60b672ecf1b448f5f4f5433d37e79a3ec3" + integrity sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg== + dependencies: + "@babel/types" "^7.16.0" + "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.5": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" @@ -636,6 +689,13 @@ dependencies: "@babel/types" "^7.14.5" +"@babel/helper-split-export-declaration@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz#29672f43663e936df370aaeb22beddb3baec7438" + integrity sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw== + dependencies: + "@babel/types" "^7.16.0" + "@babel/helper-validator-identifier@^7.10.4", "@babel/helper-validator-identifier@^7.12.11": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" @@ -651,6 +711,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz#6654d171b2024f6d8ee151bf2509699919131d48" integrity sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g== +"@babel/helper-validator-identifier@^7.15.7": + version "7.15.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" + integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== + "@babel/helper-validator-option@^7.12.1", "@babel/helper-validator-option@^7.12.11": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz#d66cb8b7a3e7fe4c6962b32020a131ecf0847f4f" @@ -735,6 +800,15 @@ chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/highlight@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a" + integrity sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g== + dependencies: + "@babel/helper-validator-identifier" "^7.15.7" + chalk "^2.0.0" + js-tokens "^4.0.0" + "@babel/parser@^7.1.0", "@babel/parser@^7.1.6", "@babel/parser@^7.12.10", "@babel/parser@^7.12.11", "@babel/parser@^7.12.7", "@babel/parser@^7.3.3": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.11.tgz#9ce3595bcd74bc5c466905e86c535b8b25011e79" @@ -755,6 +829,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.3.tgz#3416d9bea748052cfcb63dbcc27368105b1ed862" integrity sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA== +"@babel/parser@^7.16.0": + version "7.16.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.2.tgz#3723cd5c8d8773eef96ce57ea1d9b7faaccd12ac" + integrity sha512-RUVpT0G2h6rOZwqLDTrKk7ksNv7YpAilTnYe1/Q+eDjxEceRMKVWbCsX7t8h6C1qCFi/1Y8WZjcEPBAFG27GPw== + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz#4b467302e1548ed3b1be43beae2cc9cf45e0bb7e" @@ -2229,6 +2308,15 @@ "@babel/parser" "^7.14.5" "@babel/types" "^7.14.5" +"@babel/template@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.0.tgz#d16a35ebf4cd74e202083356fab21dd89363ddd6" + integrity sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A== + dependencies: + "@babel/code-frame" "^7.16.0" + "@babel/parser" "^7.16.0" + "@babel/types" "^7.16.0" + "@babel/traverse@7.15.0", "@babel/traverse@^7.15.0": version "7.15.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.0.tgz#4cca838fd1b2a03283c1f38e141f639d60b3fc98" @@ -2274,6 +2362,21 @@ debug "^4.1.0" globals "^11.1.0" +"@babel/traverse@^7.4.5": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.0.tgz#965df6c6bfc0a958c1e739284d3c9fa4a6e3c45b" + integrity sha512-qQ84jIs1aRQxaGaxSysII9TuDaguZ5yVrEuC0BN2vcPlalwfLovVmCjbFDPECPXcYM/wLvNFfp8uDOliLxIoUQ== + dependencies: + "@babel/code-frame" "^7.16.0" + "@babel/generator" "^7.16.0" + "@babel/helper-function-name" "^7.16.0" + "@babel/helper-hoist-variables" "^7.16.0" + "@babel/helper-split-export-declaration" "^7.16.0" + "@babel/parser" "^7.16.0" + "@babel/types" "^7.16.0" + debug "^4.1.0" + globals "^11.1.0" + "@babel/traverse@^7.7.2": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.0.tgz#6d95752475f86ee7ded06536de309a65fc8966cc" @@ -2323,6 +2426,14 @@ "@babel/helper-validator-identifier" "^7.14.5" to-fast-properties "^2.0.0" +"@babel/types@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.0.tgz#db3b313804f96aadd0b776c4823e127ad67289ba" + integrity sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg== + dependencies: + "@babel/helper-validator-identifier" "^7.15.7" + to-fast-properties "^2.0.0" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -2332,6 +2443,28 @@ version "1.4.0" resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" +"@emotion/is-prop-valid@^0.8.8": + version "0.8.8" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz#db28b1c4368a259b60a97311d6a952d4fd01ac1a" + integrity sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA== + dependencies: + "@emotion/memoize" "0.7.4" + +"@emotion/memoize@0.7.4": + version "0.7.4" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.4.tgz#19bf0f5af19149111c40d98bb0cf82119f5d9eeb" + integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== + +"@emotion/stylis@^0.8.4": + version "0.8.5" + resolved "https://registry.yarnpkg.com/@emotion/stylis/-/stylis-0.8.5.tgz#deacb389bd6ee77d1e7fcaccce9e16c5c7e78e04" + integrity sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ== + +"@emotion/unitless@^0.7.4": + version "0.7.5" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.5.tgz#77211291c1900a700b8a78cfafda3160d76949ed" + integrity sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg== + "@eslint/eslintrc@^0.4.0": version "0.4.0" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.0.tgz#99cc0a0584d72f1df38b900fb062ba995f395547" @@ -6022,6 +6155,21 @@ babel-plugin-polyfill-regenerator@^0.2.2: dependencies: "@babel/helper-define-polyfill-provider" "^0.2.2" +"babel-plugin-styled-components@>= 1.12.0": + version "1.13.3" + resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.13.3.tgz#1f1cb3927d4afa1e324695c78f690900e3d075bc" + integrity sha512-meGStRGv+VuKA/q0/jXxrPNWEm4LPfYIqxooDTdmh8kFsP/Ph7jJG5rUPwUPX3QHUvggwdbgdGpo88P/rRYsVw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.15.4" + "@babel/helper-module-imports" "^7.15.4" + babel-plugin-syntax-jsx "^6.18.0" + lodash "^4.17.11" + +babel-plugin-syntax-jsx@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= + babel-plugin-transform-async-to-promises@^0.8.15: version "0.8.15" resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-promises/-/babel-plugin-transform-async-to-promises-0.8.15.tgz#13b6d8ef13676b4e3c576d3600b85344bb1ba346" @@ -6559,6 +6707,11 @@ camelcase@^6.0.0, camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== +camelize@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" + integrity sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs= + caniuse-api@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" @@ -7635,6 +7788,11 @@ css-blank-pseudo@^0.1.4: dependencies: postcss "^7.0.5" +css-color-keywords@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" + integrity sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU= + css-color-names@0.0.4, css-color-names@^0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" @@ -7692,6 +7850,15 @@ css-select@~1.2.0: domutils "1.5.1" nth-check "~1.0.1" +css-to-react-native@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-3.0.0.tgz#62dbe678072a824a689bcfee011fc96e02a7d756" + integrity sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ== + dependencies: + camelize "^1.0.0" + css-color-keywords "^1.0.0" + postcss-value-parser "^4.0.2" + css-tree@1.0.0-alpha.37: version "1.0.0-alpha.37" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" @@ -10439,6 +10606,13 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" +hoist-non-react-statics@^3.0.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + homedir-polyfill@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" @@ -16102,7 +16276,7 @@ react-is@17.0.2: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== -react-is@^16.12.0, react-is@^16.8.1: +react-is@^16.12.0, react-is@^16.7.0, react-is@^16.8.1: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" @@ -17264,6 +17438,11 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" +shallowequal@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -17974,6 +18153,22 @@ style-inject@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/style-inject/-/style-inject-0.3.0.tgz#d21c477affec91811cc82355832a700d22bf8dd3" +styled-components@5.3.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.3.3.tgz#312a3d9a549f4708f0fb0edc829eb34bde032743" + integrity sha512-++4iHwBM7ZN+x6DtPPWkCI4vdtwumQ+inA/DdAsqYd4SVgUKJie5vXyzotA00ttcFdQkCng7zc6grwlfIfw+lw== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/traverse" "^7.4.5" + "@emotion/is-prop-valid" "^0.8.8" + "@emotion/stylis" "^0.8.4" + "@emotion/unitless" "^0.7.4" + babel-plugin-styled-components ">= 1.12.0" + css-to-react-native "^3.0.0" + hoist-non-react-statics "^3.0.0" + shallowequal "^1.1.0" + supports-color "^5.5.0" + styled-jsx-plugin-postcss@3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/styled-jsx-plugin-postcss/-/styled-jsx-plugin-postcss-3.0.2.tgz#ec374dfcac1b6c1257117a7d102efed1f61c0896" @@ -18037,7 +18232,7 @@ supports-color@^3.2.3: dependencies: has-flag "^1.0.0" -supports-color@^5.3.0, supports-color@^5.4.0: +supports-color@^5.3.0, supports-color@^5.4.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" dependencies: