diff --git a/docs/advanced-features/static-html-export.md b/docs/advanced-features/static-html-export.md
index 6408adf0b7c6..a2a7a7f2b80a 100644
--- a/docs/advanced-features/static-html-export.md
+++ b/docs/advanced-features/static-html-export.md
@@ -27,7 +27,7 @@ Update your build script in `package.json` to use `next export`:
Running `npm run build` will generate an `out` directory.
-`next export` builds an HTML version of your app. During `next build`, [`getStaticProps`](/docs/basic-features/data-fetching/get-static-props.md) and [`getStaticPaths`](/docs/basic-features/data-fetching/get-static-paths.md) will generate an HTML file for each page in your `pages` directory (or more for [dynamic routes](/docs/routing/dynamic-routes.md). Then, `next export` will copy the already exported files into the correct directory. `getInitialProps` will generate the HTML files during `next export` instead of `next build`.
+`next export` builds an HTML version of your app. During `next build`, [`getStaticProps`](/docs/basic-features/data-fetching/get-static-props.md) and [`getStaticPaths`](/docs/basic-features/data-fetching/get-static-paths.md) will generate an HTML file for each page in your `pages` directory (or more for [dynamic routes](/docs/routing/dynamic-routes.md)). Then, `next export` will copy the already exported files into the correct directory. `getInitialProps` will generate the HTML files during `next export` instead of `next build`.
For more advanced scenarios, you can define a parameter called [`exportPathMap`](/docs/api-reference/next.config.js/exportPathMap.md) in your [`next.config.js`](/docs/api-reference/next.config.js/introduction.md) file to configure exactly which pages will be generated.
diff --git a/lerna.json b/lerna.json
index 0f2278e3372b..d224916ef887 100644
--- a/lerna.json
+++ b/lerna.json
@@ -16,5 +16,5 @@
"registry": "https://registry.npmjs.org/"
}
},
- "version": "12.1.1-canary.4"
+ "version": "12.1.1-canary.5"
}
diff --git a/packages/create-next-app/package.json b/packages/create-next-app/package.json
index 8313966e0ace..7ffad735cc9e 100644
--- a/packages/create-next-app/package.json
+++ b/packages/create-next-app/package.json
@@ -1,6 +1,6 @@
{
"name": "create-next-app",
- "version": "12.1.1-canary.4",
+ "version": "12.1.1-canary.5",
"keywords": [
"react",
"next",
diff --git a/packages/eslint-config-next/package.json b/packages/eslint-config-next/package.json
index a4db20baa864..589f52722a88 100644
--- a/packages/eslint-config-next/package.json
+++ b/packages/eslint-config-next/package.json
@@ -1,6 +1,6 @@
{
"name": "eslint-config-next",
- "version": "12.1.1-canary.4",
+ "version": "12.1.1-canary.5",
"description": "ESLint configuration used by NextJS.",
"main": "index.js",
"license": "MIT",
@@ -9,7 +9,7 @@
"directory": "packages/eslint-config-next"
},
"dependencies": {
- "@next/eslint-plugin-next": "12.1.1-canary.4",
+ "@next/eslint-plugin-next": "12.1.1-canary.5",
"@rushstack/eslint-patch": "1.0.8",
"@typescript-eslint/parser": "5.0.0",
"eslint-import-resolver-node": "0.3.4",
diff --git a/packages/eslint-plugin-next/package.json b/packages/eslint-plugin-next/package.json
index 8f081810ceb3..47256cabb29a 100644
--- a/packages/eslint-plugin-next/package.json
+++ b/packages/eslint-plugin-next/package.json
@@ -1,6 +1,6 @@
{
"name": "@next/eslint-plugin-next",
- "version": "12.1.1-canary.4",
+ "version": "12.1.1-canary.5",
"description": "ESLint plugin for NextJS.",
"main": "lib/index.js",
"license": "MIT",
diff --git a/packages/next-bundle-analyzer/package.json b/packages/next-bundle-analyzer/package.json
index 87c0bf1c4f10..6a975844ab8d 100644
--- a/packages/next-bundle-analyzer/package.json
+++ b/packages/next-bundle-analyzer/package.json
@@ -1,6 +1,6 @@
{
"name": "@next/bundle-analyzer",
- "version": "12.1.1-canary.4",
+ "version": "12.1.1-canary.5",
"main": "index.js",
"license": "MIT",
"repository": {
diff --git a/packages/next-codemod/package.json b/packages/next-codemod/package.json
index 3bac5f3f413a..ceae408a30d1 100644
--- a/packages/next-codemod/package.json
+++ b/packages/next-codemod/package.json
@@ -1,6 +1,6 @@
{
"name": "@next/codemod",
- "version": "12.1.1-canary.4",
+ "version": "12.1.1-canary.5",
"license": "MIT",
"dependencies": {
"chalk": "4.1.0",
diff --git a/packages/next-env/package.json b/packages/next-env/package.json
index 31f66a710754..92dc50567123 100644
--- a/packages/next-env/package.json
+++ b/packages/next-env/package.json
@@ -1,6 +1,6 @@
{
"name": "@next/env",
- "version": "12.1.1-canary.4",
+ "version": "12.1.1-canary.5",
"keywords": [
"react",
"next",
diff --git a/packages/next-mdx/package.json b/packages/next-mdx/package.json
index 0925c553c27e..c69f99934be5 100644
--- a/packages/next-mdx/package.json
+++ b/packages/next-mdx/package.json
@@ -1,6 +1,6 @@
{
"name": "@next/mdx",
- "version": "12.1.1-canary.4",
+ "version": "12.1.1-canary.5",
"main": "index.js",
"license": "MIT",
"repository": {
diff --git a/packages/next-plugin-storybook/package.json b/packages/next-plugin-storybook/package.json
index fb422576de68..aece9666c651 100644
--- a/packages/next-plugin-storybook/package.json
+++ b/packages/next-plugin-storybook/package.json
@@ -1,6 +1,6 @@
{
"name": "@next/plugin-storybook",
- "version": "12.1.1-canary.4",
+ "version": "12.1.1-canary.5",
"repository": {
"url": "vercel/next.js",
"directory": "packages/next-plugin-storybook"
diff --git a/packages/next-polyfill-module/package.json b/packages/next-polyfill-module/package.json
index 320629c8257b..73a9803939fd 100644
--- a/packages/next-polyfill-module/package.json
+++ b/packages/next-polyfill-module/package.json
@@ -1,6 +1,6 @@
{
"name": "@next/polyfill-module",
- "version": "12.1.1-canary.4",
+ "version": "12.1.1-canary.5",
"description": "A standard library polyfill for ES Modules supporting browsers (Edge 16+, Firefox 60+, Chrome 61+, Safari 10.1+)",
"main": "dist/polyfill-module.js",
"license": "MIT",
diff --git a/packages/next-polyfill-nomodule/package.json b/packages/next-polyfill-nomodule/package.json
index 1850361299cc..092cd4374bc8 100644
--- a/packages/next-polyfill-nomodule/package.json
+++ b/packages/next-polyfill-nomodule/package.json
@@ -1,6 +1,6 @@
{
"name": "@next/polyfill-nomodule",
- "version": "12.1.1-canary.4",
+ "version": "12.1.1-canary.5",
"description": "A polyfill for non-dead, nomodule browsers.",
"main": "dist/polyfill-nomodule.js",
"license": "MIT",
diff --git a/packages/next-swc/Cargo.lock b/packages/next-swc/Cargo.lock
index dd6333b29e4f..641a90fb2680 100644
--- a/packages/next-swc/Cargo.lock
+++ b/packages/next-swc/Cargo.lock
@@ -145,6 +145,15 @@ version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
+[[package]]
+name = "better_scoped_tls"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b73e8ecdec39e98aa3b19e8cd0b8ed8f77ccb86a6b0b2dc7cd86d105438a2123"
+dependencies = [
+ "scoped-tls",
+]
+
[[package]]
name = "bitflags"
version = "1.3.2"
@@ -162,9 +171,9 @@ dependencies = [
[[package]]
name = "browserslist-rs"
-version = "0.7.0"
+version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "38854056e7d44ad7af1214b7de30ceb71fff036ed67f3d1b48cc1200bb722cba"
+checksum = "67bf6eb040d26861376afa30a5b172f066bfda9cef992af7a55ac5395ef91437"
dependencies = [
"ahash",
"anyhow",
@@ -660,9 +669,9 @@ checksum = "8521a1b57e76b1ec69af7599e75e38e7b7fad6610f037db8c79b127201b5d119"
[[package]]
name = "lock_api"
-version = "0.4.5"
+version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "712a4d093c9976e24e7dbca41db895dabcbac38eb5f4045393d17a95bdfb1109"
+checksum = "88943dd7ef4a2e5a4bfa2753aaab3013e34ce2533d1996fb18ef591e315e2b3b"
dependencies = [
"scopeguard",
]
@@ -812,7 +821,7 @@ dependencies = [
"swc_css",
"swc_ecma_loader",
"swc_ecma_transforms_testing",
- "swc_ecmascript 0.114.2",
+ "swc_ecmascript",
"swc_node_base",
"swc_stylis",
"testing",
@@ -839,7 +848,7 @@ dependencies = [
"swc_bundler",
"swc_common",
"swc_ecma_loader",
- "swc_ecmascript 0.114.2",
+ "swc_ecmascript",
"swc_node_base",
]
@@ -944,23 +953,24 @@ dependencies = [
]
[[package]]
-name = "owning_ref"
-version = "0.4.1"
+name = "parking_lot"
+version = "0.11.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ff55baddef9e4ad00f88b6c743a2a8062d4c6ade126c2a528644b8e444d52ce"
+checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb"
dependencies = [
- "stable_deref_trait",
+ "instant",
+ "lock_api",
+ "parking_lot_core 0.8.0",
]
[[package]]
name = "parking_lot"
-version = "0.11.1"
+version = "0.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb"
+checksum = "87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58"
dependencies = [
- "instant",
"lock_api",
- "parking_lot_core",
+ "parking_lot_core 0.9.1",
]
[[package]]
@@ -978,6 +988,19 @@ dependencies = [
"winapi",
]
+[[package]]
+name = "parking_lot_core"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "28141e0cc4143da2443301914478dc976a61ffdb3f043058310c70df2fed8954"
+dependencies = [
+ "cfg-if 1.0.0",
+ "libc",
+ "redox_syscall 0.2.10",
+ "smallvec",
+ "windows-sys",
+]
+
[[package]]
name = "path-clean"
version = "0.1.0"
@@ -1013,7 +1036,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12"
dependencies = [
"phf_macros",
- "phf_shared",
+ "phf_shared 0.8.0",
"proc-macro-hack",
]
@@ -1023,7 +1046,7 @@ version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526"
dependencies = [
- "phf_shared",
+ "phf_shared 0.8.0",
"rand 0.7.3",
]
@@ -1034,7 +1057,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c"
dependencies = [
"phf_generator",
- "phf_shared",
+ "phf_shared 0.8.0",
"proc-macro-hack",
"proc-macro2",
"quote",
@@ -1050,6 +1073,15 @@ dependencies = [
"siphasher",
]
+[[package]]
+name = "phf_shared"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096"
+dependencies = [
+ "siphasher",
+]
+
[[package]]
name = "pin-project-lite"
version = "0.2.7"
@@ -1079,6 +1111,23 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+[[package]]
+name = "preset_env_base"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e072088b8b97a4ed729b40444fbb5cc6a7c1bc9b9c455a601d4de7f981a4987"
+dependencies = [
+ "ahash",
+ "anyhow",
+ "browserslist-rs",
+ "dashmap",
+ "from_variant",
+ "once_cell",
+ "semver 1.0.4",
+ "serde",
+ "st-map",
+]
+
[[package]]
name = "pretty_assertions"
version = "0.7.2"
@@ -1508,12 +1557,6 @@ dependencies = [
"static-map-macro",
]
-[[package]]
-name = "stable_deref_trait"
-version = "1.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
-
[[package]]
name = "static-map-macro"
version = "0.2.1"
@@ -1534,14 +1577,14 @@ checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
[[package]]
name = "string_cache"
-version = "0.8.2"
+version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "923f0f39b6267d37d23ce71ae7235602134b250ace715dd2c90421998ddac0c6"
+checksum = "33994d0838dc2d152d17a62adf608a869b5e846b65b389af7f3dbc1de45c5b26"
dependencies = [
"lazy_static",
"new_debug_unreachable",
- "parking_lot",
- "phf_shared",
+ "parking_lot 0.11.1",
+ "phf_shared 0.10.0",
"precomputed-hash",
"serde",
]
@@ -1553,7 +1596,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f24c8e5e19d22a726626f1a5e16fe15b132dcf21d10177fa5a45ce7962996b97"
dependencies = [
"phf_generator",
- "phf_shared",
+ "phf_shared 0.8.0",
"proc-macro2",
"quote",
]
@@ -1579,9 +1622,9 @@ checksum = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c"
[[package]]
name = "styled_components"
-version = "0.14.0"
+version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "aa4ab2ebb6f1bb84fb7b8b2fc16ebed9bbb7933a8f2f5d443c080f096a45b94d"
+checksum = "5e824357a52655bd0977b40a11072669ed9e9c16eff78d6eaf54cc7d822d2585"
dependencies = [
"Inflector",
"once_cell",
@@ -1589,15 +1632,15 @@ dependencies = [
"serde",
"swc_atoms",
"swc_common",
- "swc_ecmascript 0.112.6",
+ "swc_ecmascript",
"tracing",
]
[[package]]
name = "swc"
-version = "0.126.2"
+version = "0.138.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1c2373a6f6dddd42719a2d8fcd9989849915ae15691fd1a75f6b04d14a6cab91"
+checksum = "170a6c528c1b2052c7bdc388b12b6dd82bc51535c10f25298a46577e7183965b"
dependencies = [
"ahash",
"anyhow",
@@ -1628,7 +1671,7 @@ dependencies = [
"swc_ecma_transforms_optimization",
"swc_ecma_utils",
"swc_ecma_visit",
- "swc_ecmascript 0.114.2",
+ "swc_ecmascript",
"swc_node_comments",
"swc_visit",
"tracing",
@@ -1646,9 +1689,9 @@ dependencies = [
[[package]]
name = "swc_bundler"
-version = "0.107.0"
+version = "0.114.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c5b6761f9b57072658a42ff25304a7edc7f8444024726ed27d5861e4644c1ffe"
+checksum = "7072dba1e14f946f10cb5127f4e8afb8875f5c8a6a29ab6029ffb884342d3684"
dependencies = [
"ahash",
"anyhow",
@@ -1657,7 +1700,7 @@ dependencies = [
"indexmap",
"is-macro",
"once_cell",
- "parking_lot",
+ "parking_lot 0.12.0",
"petgraph",
"radix_fmt",
"rayon",
@@ -1680,23 +1723,22 @@ dependencies = [
[[package]]
name = "swc_common"
-version = "0.17.3"
+version = "0.17.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "80c35c61c23c33ef41fc779abc3fbd87fd83ee41eb6ced7ba4dd38a87e394986"
+checksum = "ffd694004c48af55237f1e471ccefdb76f88da8d8ac4726612ea11c525d02425"
dependencies = [
"ahash",
"ast_node",
"atty",
+ "better_scoped_tls",
"cfg-if 0.1.10",
"debug_unreachable",
"either",
"from_variant",
"num-bigint",
"once_cell",
- "owning_ref",
- "parking_lot",
+ "parking_lot 0.12.0",
"rustc-hash",
- "scoped-tls",
"serde",
"siphasher",
"sourcemap",
@@ -1711,9 +1753,9 @@ dependencies = [
[[package]]
name = "swc_css"
-version = "0.87.0"
+version = "0.94.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b4b570606b904949dcb186af2f32ee57a7731002d3cb72e21183edef0c1f2dc"
+checksum = "55d52d595da541b1626e3c9f89441607042cda81d2047dbdc7bec44449b73925"
dependencies = [
"swc_css_ast",
"swc_css_codegen",
@@ -1724,9 +1766,9 @@ dependencies = [
[[package]]
name = "swc_css_ast"
-version = "0.79.0"
+version = "0.86.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "00c07118ba87a4139be7d78bff15ba33438195f2eb35376157a5ca2e60cc54c4"
+checksum = "2c933063972e7d8d810e893935b10f66b3be1eb9f33685ecb2416cf80e337759"
dependencies = [
"is-macro",
"serde",
@@ -1737,9 +1779,9 @@ dependencies = [
[[package]]
name = "swc_css_codegen"
-version = "0.84.0"
+version = "0.91.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8d192566df252168bc1d0a206f0e783e30816a2c75c43ddd04b7ddd703b9d396"
+checksum = "59995589f6579069f2aadb1b73b38d53c9d2798e4c6379dc3e8245954ad5cb9e"
dependencies = [
"auto_impl",
"bitflags",
@@ -1764,9 +1806,9 @@ dependencies = [
[[package]]
name = "swc_css_parser"
-version = "0.85.2"
+version = "0.92.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c2550222e793736aa09d9361b43a04ca8b9467588bb73cf02ba827484c1243a4"
+checksum = "a918661b5fe9192f2608ee6b7aca44c80026b1e08c6058dd9fb6df0eb587a69b"
dependencies = [
"bitflags",
"lexical",
@@ -1777,9 +1819,9 @@ dependencies = [
[[package]]
name = "swc_css_utils"
-version = "0.76.0"
+version = "0.83.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ddab011e673ffd3b3d6dea612d113714caaeab1ec1673adb70b62f5a5727bbe"
+checksum = "8b33f951f0bb3f5c4310030cf5ad03ada3fff541010dada65436d00be86e07c1"
dependencies = [
"swc_atoms",
"swc_common",
@@ -1789,9 +1831,9 @@ dependencies = [
[[package]]
name = "swc_css_visit"
-version = "0.78.0"
+version = "0.85.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f9489996952eb66ba087c15258c41e34f4a5466e87db90df4e54557f4f47751c"
+checksum = "1be861b1f6ceab4f68a3e770910605b2ff0c7aafae7f078bdaa503c8302e6ce3"
dependencies = [
"swc_atoms",
"swc_common",
@@ -1801,9 +1843,9 @@ dependencies = [
[[package]]
name = "swc_ecma_ast"
-version = "0.65.3"
+version = "0.68.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff1aefdc512c8dfefa1de793c0e62a192bd74a7fa7e5affe3f08885751c127ee"
+checksum = "d465460177dcdf076f7c32b75cc0adede3c70506b4c7a859440001310e78e71f"
dependencies = [
"is-macro",
"num-bigint",
@@ -1816,9 +1858,9 @@ dependencies = [
[[package]]
name = "swc_ecma_codegen"
-version = "0.90.0"
+version = "0.93.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7cf4da57030370c49c343e536d3c7ab66dca3bd8da000b6040884fc6ac689241"
+checksum = "aa81be3ef5a662291f5b387681d497b8c73fabb846459fb3a84097cfe7e127c3"
dependencies = [
"bitflags",
"memchr",
@@ -1829,7 +1871,6 @@ dependencies = [
"swc_common",
"swc_ecma_ast",
"swc_ecma_codegen_macros",
- "swc_ecma_parser",
"tracing",
]
@@ -1848,9 +1889,9 @@ dependencies = [
[[package]]
name = "swc_ecma_ext_transforms"
-version = "0.51.0"
+version = "0.55.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f93651c5d1e3783914a789f6f7c26bdf72fa4ff08ac802d64ba304c2e40f5671"
+checksum = "0ed2bbd721290b19b26ece0e7f536dce4375c3cd5f5722b838ec1c985b432916"
dependencies = [
"phf",
"swc_atoms",
@@ -1862,14 +1903,14 @@ dependencies = [
[[package]]
name = "swc_ecma_lints"
-version = "0.14.8"
+version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9dc7e7d669e28b2df325d9a232f1d74e7b77d2606c04f0f70cc37e38dcf49ad3"
+checksum = "d097f0e4f44ea808b6533ddc2983573030e4e267a503e78f7ab64290ff8a52ab"
dependencies = [
"ahash",
"auto_impl",
"dashmap",
- "parking_lot",
+ "parking_lot 0.12.0",
"rayon",
"regex",
"serde",
@@ -1902,9 +1943,9 @@ dependencies = [
[[package]]
name = "swc_ecma_minifier"
-version = "0.74.1"
+version = "0.81.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "184e0e6337f2a4cfff36e3456e7937846dadf0b47833b7f711654e4acd0a13aa"
+checksum = "c7f6648dc44b95432c4253f03bce4c1a5c73a7a8adefe9be11c78c048d925dc0"
dependencies = [
"ahash",
"indexmap",
@@ -1931,9 +1972,9 @@ dependencies = [
[[package]]
name = "swc_ecma_parser"
-version = "0.88.3"
+version = "0.91.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bfd30c93f08afdf29226b5695e45aadcc6ce452470cc63ea87a7eb53d29bb02b"
+checksum = "58b099ab64a9e667ffcacbbf043710eabccd910f5664a82c997b4a1ff8bc9ed6"
dependencies = [
"either",
"enum_kind",
@@ -1951,16 +1992,16 @@ dependencies = [
[[package]]
name = "swc_ecma_preset_env"
-version = "0.90.0"
+version = "0.98.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5335f575d5cd4fcefe8bb3c52fa8dc8d59d461f07da43fb2ac6c31689aa88e0f"
+checksum = "16954dd8ff0ad4ef4046a8aee5a31122413242d520efef38bea3c13f350e9a54"
dependencies = [
"ahash",
"anyhow",
- "browserslist-rs",
"dashmap",
"indexmap",
"once_cell",
+ "preset_env_base",
"semver 1.0.4",
"serde",
"serde_json",
@@ -1972,19 +2013,17 @@ dependencies = [
"swc_ecma_transforms",
"swc_ecma_utils",
"swc_ecma_visit",
- "walkdir",
]
[[package]]
name = "swc_ecma_transforms"
-version = "0.117.0"
+version = "0.124.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b1fa132c1a736c2c61736958f1102249348a4cc911c7f60e3a6255aa49c1c03e"
+checksum = "e56c345bb62ac1494ef2d97eabe08ec0d0fc2ec46e029bdb4cb714c34fd15cc8"
dependencies = [
"swc_atoms",
"swc_common",
"swc_ecma_ast",
- "swc_ecma_parser",
"swc_ecma_transforms_base",
"swc_ecma_transforms_compat",
"swc_ecma_transforms_module",
@@ -1999,14 +2038,14 @@ dependencies = [
[[package]]
name = "swc_ecma_transforms_base"
-version = "0.58.2"
+version = "0.63.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e79e4c87b02ff0e227963000e90dff59e4ad75bf0c66bf886ba8dba7ec36f5b0"
+checksum = "49cfcab3966f8dc8c82604a50ccf54541dcc4101bff72ff70bbd6e73a37a1af7"
dependencies = [
+ "better_scoped_tls",
"once_cell",
"phf",
"rayon",
- "scoped-tls",
"serde",
"smallvec",
"swc_atoms",
@@ -2020,9 +2059,9 @@ dependencies = [
[[package]]
name = "swc_ecma_transforms_classes"
-version = "0.46.0"
+version = "0.51.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac8983235c6902879b65dcb1003d4084adf094408c96d94d62d3f33f44c3fa8e"
+checksum = "d15131c3944964e290102ddc180251f01b1264e8873f5565fb3f3c097962f800"
dependencies = [
"swc_atoms",
"swc_common",
@@ -2034,9 +2073,9 @@ dependencies = [
[[package]]
name = "swc_ecma_transforms_compat"
-version = "0.70.0"
+version = "0.75.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ff9a64fc99b205b6104a6996832b0006fc059f5aa9fe61d5fb2c3b9f1885b14"
+checksum = "4b1939156171fe03940e5918efb8b3058d6ef06bae23990d361233951b8f8db3"
dependencies = [
"ahash",
"arrayvec 0.7.2",
@@ -2054,6 +2093,7 @@ dependencies = [
"swc_ecma_transforms_macros",
"swc_ecma_utils",
"swc_ecma_visit",
+ "swc_trace_macro",
"tracing",
]
@@ -2072,9 +2112,9 @@ dependencies = [
[[package]]
name = "swc_ecma_transforms_module"
-version = "0.78.0"
+version = "0.84.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "441616e68981062a1650a923d2c63075021a8178045e2112007a90a157cdb1da"
+checksum = "da2c5960939be80ad54842bdb42b205d3cf17fd3c2955c693a6fd7f678e70ef3"
dependencies = [
"Inflector",
"ahash",
@@ -2094,9 +2134,9 @@ dependencies = [
[[package]]
name = "swc_ecma_transforms_optimization"
-version = "0.87.0"
+version = "0.94.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e074149dd5e969d35a790851b47b0f76700b14fcfda1c05e15751c1458e2dd38"
+checksum = "4103b2ba1f24dd7ff735d2fa33d86be5eefad4316d046e09509c11dba4f9bb5f"
dependencies = [
"ahash",
"dashmap",
@@ -2117,9 +2157,9 @@ dependencies = [
[[package]]
name = "swc_ecma_transforms_proposal"
-version = "0.77.0"
+version = "0.82.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "048ac8ea82e02fa9a54b9aa448dc5d15a8e994304364fcd8c4e2f650572c9141"
+checksum = "41bca77e95bdebfd9df234e707416bd57015808371010f5f1527314df86fc1e7"
dependencies = [
"either",
"serde",
@@ -2127,7 +2167,6 @@ dependencies = [
"swc_atoms",
"swc_common",
"swc_ecma_ast",
- "swc_ecma_parser",
"swc_ecma_transforms_base",
"swc_ecma_transforms_classes",
"swc_ecma_transforms_macros",
@@ -2137,9 +2176,9 @@ dependencies = [
[[package]]
name = "swc_ecma_transforms_react"
-version = "0.80.0"
+version = "0.86.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9fb5b7c98597bf41d1503ca4039be5445fd02e7aa381ae520d1c78a8a370f7f5"
+checksum = "fb79114c706cad8b83bee288cdfd55156558c74075059bc58558ab84275c3ba1"
dependencies = [
"ahash",
"base64 0.13.0",
@@ -2162,9 +2201,9 @@ dependencies = [
[[package]]
name = "swc_ecma_transforms_testing"
-version = "0.60.0"
+version = "0.65.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c24615dee8b5b818dab31d4e172d3a297cc07b99ee65194133035c83f4fb8da6"
+checksum = "6d3bf6537f7fac515dd1bb9f718b3af2c2413aad315704bdbb8b8ebd11b8a0a2"
dependencies = [
"ansi_term",
"anyhow",
@@ -2185,15 +2224,14 @@ dependencies = [
[[package]]
name = "swc_ecma_transforms_typescript"
-version = "0.82.0"
+version = "0.89.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f7859a18a33f751d488fbc1b7a0073fb08c69d794ad1f8daa2da47bfda2d9242"
+checksum = "5e5d6a8cd797383193a8138615a3f78de5da910fdd9b3f3543f02bcced603008"
dependencies = [
"serde",
"swc_atoms",
"swc_common",
"swc_ecma_ast",
- "swc_ecma_parser",
"swc_ecma_transforms_base",
"swc_ecma_transforms_react",
"swc_ecma_utils",
@@ -2202,9 +2240,9 @@ dependencies = [
[[package]]
name = "swc_ecma_utils"
-version = "0.65.3"
+version = "0.69.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b462ac7dd5340544e7a12965bb7fbbbf9db8b26c1b32159b43c4b2430fed3fc8"
+checksum = "3b289ad92ab2c2b5c55c7b2a8e3395b68b42a8145186549191786af5d44998d3"
dependencies = [
"indexmap",
"once_cell",
@@ -2218,9 +2256,9 @@ dependencies = [
[[package]]
name = "swc_ecma_visit"
-version = "0.51.1"
+version = "0.54.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "32aa4c53401d1390aa45043e0a69d52e1a04ef45845e19b55c484462e6dcd048"
+checksum = "768c7cb86162cb2538a188586909b5499740da73b2eb80b258210cf147652c84"
dependencies = [
"num-bigint",
"swc_atoms",
@@ -2232,21 +2270,9 @@ dependencies = [
[[package]]
name = "swc_ecmascript"
-version = "0.112.6"
+version = "0.123.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ce38cf2c41ed841d82dbfb1c328379a3ec75d4e4e43900ea8c8ef3c51a44e3cb"
-dependencies = [
- "swc_ecma_ast",
- "swc_ecma_parser",
- "swc_ecma_utils",
- "swc_ecma_visit",
-]
-
-[[package]]
-name = "swc_ecmascript"
-version = "0.114.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e752c12b209c65e203a952186ab2fcefa8021a17a8a393b7d5f410e1fe1a0e87"
+checksum = "643e8b16370a73258bfb162a1b1bf27888b4ed65d05c3962083fed7cae26bf6d"
dependencies = [
"swc_ecma_ast",
"swc_ecma_codegen",
@@ -2328,9 +2354,9 @@ dependencies = [
[[package]]
name = "swc_stylis"
-version = "0.83.0"
+version = "0.90.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "07fe7e1fea389c2a95bb8a8a46937d9f10aa573def79ca270e56a43d432822d9"
+checksum = "b453e3b964b9aaa96b81ff04c2a38ae64d2b1c55bd0a88b3f9fc478f6a61a1fe"
dependencies = [
"swc_atoms",
"swc_common",
@@ -2348,6 +2374,17 @@ dependencies = [
"tracing",
]
+[[package]]
+name = "swc_trace_macro"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85341fb96c46bd873272553b8b1d4330f886fe5231969cc1564e1c659fee8334"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
[[package]]
name = "swc_visit"
version = "0.3.0"
@@ -2408,9 +2445,9 @@ dependencies = [
[[package]]
name = "testing"
-version = "0.18.0"
+version = "0.18.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c77495bc9f7737f9a958ec3cf2fba2f0c2296867018c8b4da6ce01d008b93e5e"
+checksum = "27fb20163feffc42ee490fc7ef113b187ab09fa4e632e2cec649bce76cd40662"
dependencies = [
"ansi_term",
"difference",
@@ -2496,9 +2533,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
[[package]]
name = "tracing"
-version = "0.1.29"
+version = "0.1.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "375a639232caf30edfc78e8d89b2d4c375515393e7af7e16f01cd96917fb2105"
+checksum = "f6c650a8ef0cd2dd93736f033d21cbd1224c5a967aa0c258d00fcf7dafef9b9f"
dependencies = [
"cfg-if 1.0.0",
"pin-project-lite",
@@ -2508,9 +2545,9 @@ dependencies = [
[[package]]
name = "tracing-attributes"
-version = "0.1.18"
+version = "0.1.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f4f480b8f81512e825f337ad51e94c1eb5d3bbdf2b363dcd01e2b19a9ffe3f8e"
+checksum = "8276d9a4a3a558d7b7ad5303ad50b53d58264641b82914b7ada36bd762e7a716"
dependencies = [
"proc-macro2",
"quote",
@@ -2519,11 +2556,12 @@ dependencies = [
[[package]]
name = "tracing-core"
-version = "0.1.21"
+version = "0.1.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f4ed65637b8390770814083d20756f87bfa2c21bf2f110babdc5438351746e4"
+checksum = "03cfcb51380632a72d3111cb8d3447a8d908e577d31beeac006f836383d29a23"
dependencies = [
"lazy_static",
+ "valuable",
]
[[package]]
@@ -2615,6 +2653,12 @@ dependencies = [
"percent-encoding",
]
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
[[package]]
name = "version_check"
version = "0.9.3"
@@ -2658,13 +2702,13 @@ dependencies = [
"console_error_panic_hook",
"next-swc",
"once_cell",
- "parking_lot_core",
+ "parking_lot_core 0.8.0",
"path-clean",
"serde",
"serde_json",
"swc",
"swc_common",
- "swc_ecmascript 0.114.2",
+ "swc_ecmascript",
"tracing",
"wasm-bindgen",
"wasm-bindgen-futures",
@@ -2778,3 +2822,46 @@ name = "winapi-x86_64-pc-windows-gnu"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3df6e476185f92a12c072be4a189a0210dcdcf512a1891d6dff9edb874deadc6"
+dependencies = [
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8e92753b1c443191654ec532f14c199742964a061be25d77d7a96f09db20bf5"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a711c68811799e017b6038e0922cb27a5e2f43a2ddb609fe0b6f3eeda9de615"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "146c11bb1a02615db74680b32a68e2d61f553cc24c4eb5b4ca10311740e44172"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c912b12f7454c6620635bbff3450962753834be2a594819bd5e945af18ec64bc"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.32.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316"
diff --git a/packages/next-swc/crates/core/Cargo.toml b/packages/next-swc/crates/core/Cargo.toml
index 063a0129010a..85feabefe145 100644
--- a/packages/next-swc/crates/core/Cargo.toml
+++ b/packages/next-swc/crates/core/Cargo.toml
@@ -15,19 +15,19 @@ fxhash = "0.2.1"
pathdiff = "0.2.0"
serde = "1"
serde_json = "1"
-styled_components = "0.14.0"
-swc = "0.126.2"
+styled_components = "0.17.0"
+swc = "0.138.0"
swc_atoms = "0.2.7"
-swc_common = { version = "0.17.0", features = ["concurrent", "sourcemap"] }
-swc_css = "0.87.0"
+swc_common = { version = "0.17.9", features = ["concurrent", "sourcemap"] }
+swc_css = "0.94.0"
swc_ecma_loader = { version = "0.28.0", features = ["node", "lru"] }
-swc_ecmascript = { version = "0.114.2", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] }
+swc_ecmascript = { version = "0.123.0", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] }
swc_node_base = "0.5.1"
-swc_stylis = "0.83.0"
+swc_stylis = "0.90.0"
tracing = {version = "0.1.28", features = ["release_max_level_off"]}
regex = "1.5"
[dev-dependencies]
-swc_ecma_transforms_testing = "0.60.0"
-testing = "0.18.0"
+swc_ecma_transforms_testing = "0.65.0"
+testing = "0.18.1"
walkdir = "2.3.2"
diff --git a/packages/next-swc/crates/core/src/styled_jsx/transform_css.rs b/packages/next-swc/crates/core/src/styled_jsx/transform_css.rs
index 32e9850857e7..0d79a1187bc2 100644
--- a/packages/next-swc/crates/core/src/styled_jsx/transform_css.rs
+++ b/packages/next-swc/crates/core/src/styled_jsx/transform_css.rs
@@ -2,8 +2,8 @@ use easy_error::{bail, Error};
use std::panic;
use std::sync::Arc;
use swc_common::util::take::Take;
-use swc_common::SourceMap;
use swc_common::{source_map::Pos, BytePos, Span, SyntaxContext, DUMMY_SP};
+use swc_common::{SourceMap, Spanned};
use swc_css::ast::*;
use swc_css::codegen::{
writer::basic::{BasicCssWriter, BasicCssWriterConfig},
@@ -183,16 +183,12 @@ impl VisitMut for Namespacer {
combinator = None;
}
- ComplexSelectorChildren::Combinator(v) => match v.value {
- CombinatorValue::Descendant => {}
- _ => {
- combinator = Some(v.clone());
-
- new_selectors.push(sel);
- }
- },
+ ComplexSelectorChildren::Combinator(v) => {
+ combinator = Some(v.clone());
+ }
};
}
+
node.children = new_selectors;
}
}
@@ -204,8 +200,6 @@ impl Namespacer {
mut node: CompoundSelector,
) -> Result, Error> {
let mut pseudo_index = None;
-
- let empty_tokens = vec![];
let mut arg_tokens;
for (i, selector) in node.subclass_selectors.iter().enumerate() {
@@ -215,8 +209,22 @@ impl Namespacer {
.iter()
.flatten()
.flat_map(|v| match v {
- PseudoSelectorChildren::Nth(v) => nth_to_tokens(v).tokens,
- PseudoSelectorChildren::PreservedToken(v) => vec![v.clone()],
+ PseudoClassSelectorChildren::PreservedToken(v) => vec![v.clone()],
+ PseudoClassSelectorChildren::AnPlusB(an_plus_b) => match an_plus_b {
+ AnPlusB::Ident(v) => to_tokens(v).tokens,
+ AnPlusB::AnPlusBNotation(v) => to_tokens(v).tokens,
+ },
+ PseudoClassSelectorChildren::Ident(v) => to_tokens(v).tokens,
+ PseudoClassSelectorChildren::Str(v) => to_tokens(v).tokens,
+ PseudoClassSelectorChildren::Delimiter(v) => to_tokens(v).tokens,
+ PseudoClassSelectorChildren::SelectorList(v) => to_tokens(v).tokens,
+ PseudoClassSelectorChildren::CompoundSelectorList(v) => {
+ to_tokens(v).tokens
+ }
+ PseudoClassSelectorChildren::RelativeSelectorList(v) => {
+ to_tokens(v).tokens
+ }
+ PseudoClassSelectorChildren::CompoundSelector(v) => to_tokens(v).tokens,
})
.collect::>();
@@ -224,10 +232,21 @@ impl Namespacer {
}
SubclassSelector::PseudoElement(PseudoElementSelector {
name, children, ..
- }) => match children {
- Some(children) => (name, children),
- None => (name, &empty_tokens),
- },
+ }) => {
+ arg_tokens = children
+ .iter()
+ .flatten()
+ .flat_map(|v| match v {
+ PseudoElementSelectorChildren::PreservedToken(v) => vec![v.clone()],
+ PseudoElementSelectorChildren::Ident(v) => to_tokens(v).tokens,
+ PseudoElementSelectorChildren::CompoundSelector(v) => {
+ to_tokens(v).tokens
+ }
+ })
+ .collect::>();
+
+ (name, &arg_tokens)
+ }
_ => continue,
};
@@ -282,12 +301,16 @@ impl Namespacer {
trace!("Combinator: {:?}", combinator);
trace!("v[0]: {:?}", v[0]);
+ let mut result = vec![];
+
if let Some(combinator) = combinator {
match v.get(0) {
- Some(ComplexSelectorChildren::Combinator(..)) => {}
- Some(..) => {}
+ // `Descendant` combinator can't be the first because we removed it
+ // above
+ Some(ComplexSelectorChildren::Combinator(..))
+ if combinator.value == CombinatorValue::Descendant => {}
_ => {
- v.push(ComplexSelectorChildren::Combinator(combinator));
+ result.push(ComplexSelectorChildren::Combinator(combinator));
}
}
}
@@ -301,7 +324,9 @@ impl Namespacer {
}
});
- Ok(v)
+ result.extend(v);
+
+ Ok(result)
}
Err(_) => bail!("Failed to transform one off global selector"),
};
@@ -332,7 +357,15 @@ impl Namespacer {
);
}
- Ok(vec![ComplexSelectorChildren::CompoundSelector(node)])
+ let mut result = vec![];
+
+ if let Some(combinator) = combinator {
+ result.push(ComplexSelectorChildren::Combinator(combinator));
+ }
+
+ result.push(ComplexSelectorChildren::CompoundSelector(node));
+
+ Ok(result)
}
}
@@ -461,17 +494,21 @@ fn get_block_tokens(selector_tokens: &Tokens) -> Vec {
]
}
-fn nth_to_tokens(nth: &Nth) -> Tokens {
+fn to_tokens(node: &N) -> Tokens
+where
+ for<'aa> CodeGenerator<&'aa mut BasicCssWriter<'aa, &'aa mut std::string::String>>: Emit,
+{
let mut s = String::new();
{
let mut wr = BasicCssWriter::new(&mut s, BasicCssWriterConfig { indent: " " });
let mut gen = CodeGenerator::new(&mut wr, CodegenConfig { minify: true });
- gen.emit(&nth).unwrap();
+ gen.emit(node).unwrap();
}
+ let span = node.span();
let mut lexer = swc_css::parser::lexer::Lexer::new(
- StringInput::new(&s, nth.span.lo, nth.span.hi),
+ StringInput::new(&s, span.lo, span.hi),
ParserConfig {
allow_wrong_line_comments: true,
},
@@ -484,7 +521,7 @@ fn nth_to_tokens(nth: &Nth) -> Tokens {
}
Tokens {
- span: Span::new(nth.span.lo, nth.span.hi, Default::default()),
+ span: Span::new(span.lo, span.hi, Default::default()),
tokens,
}
}
diff --git a/packages/next-swc/crates/core/tests/full/example/output.js b/packages/next-swc/crates/core/tests/full/example/output.js
index e0a9c88dd80f..3311dd93d841 100644
--- a/packages/next-swc/crates/core/tests/full/example/output.js
+++ b/packages/next-swc/crates/core/tests/full/example/output.js
@@ -1,40 +1,40 @@
-function a(a, b) {
- (null == b || b > a.length) && (b = a.length);
- for(var c = 0, d = new Array(b); c < b; c++)d[c] = a[c];
+function b(c, a) {
+ (null == a || a > c.length) && (a = c.length);
+ for(var b = 0, d = new Array(a); b < a; b++)d[b] = c[b];
return d;
}
-import b from "other";
-(function(a, c) {
- return (function(a) {
- if (Array.isArray(a)) return a;
- })(a) || (function(a, c) {
- var d, e, f = null == a ? null : "undefined" != typeof Symbol && a[Symbol.iterator] || a["@@iterator"];
- if (null != f) {
- var g = [], h = !0, i = !1;
+import a from "other";
+(function(c, b) {
+ return (function(c) {
+ if (Array.isArray(c)) return c;
+ })(c) || (function(c, b) {
+ var g, h, a = null == c ? null : "undefined" != typeof Symbol && c[Symbol.iterator] || c["@@iterator"];
+ if (null != a) {
+ var d = [], e = !0, i = !1;
try {
- for(f = f.call(a); !(h = (d = f.next()).done) && (g.push(d.value), !c || g.length !== c); h = !0);
+ for(a = a.call(c); !(e = (g = a.next()).done) && (d.push(g.value), !b || d.length !== b); e = !0);
} catch (j) {
- i = !0, e = j;
+ i = !0, h = j;
} finally{
try {
- h || null == f.return || f.return();
+ e || null == a.return || a.return();
} finally{
- if (i) throw e;
+ if (i) throw h;
}
}
- return g;
+ return d;
}
- })(a, c) || (function(b, c) {
- if (b) {
- if ("string" == typeof b) return a(b, c);
- var d = Object.prototype.toString.call(b).slice(8, -1);
- if ("Object" === d && b.constructor && (d = b.constructor.name), "Map" === d || "Set" === d) return Array.from(d);
- if ("Arguments" === d || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(d)) return a(b, c);
+ })(c, b) || (function(a, d) {
+ if (a) {
+ if ("string" == typeof a) return b(a, d);
+ 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 b(a, d);
}
- })(a, c) || (function() {
+ })(c, b) || (function() {
throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
})();
-})(b, 1)[0];
+})(a, 1)[0];
var c = function() {
"use strict";
!function(a, b) {
diff --git a/packages/next-swc/crates/napi/Cargo.toml b/packages/next-swc/crates/napi/Cargo.toml
index 493424eb23bf..ebd06062e1d9 100644
--- a/packages/next-swc/crates/napi/Cargo.toml
+++ b/packages/next-swc/crates/napi/Cargo.toml
@@ -16,12 +16,12 @@ once_cell = "1.8.0"
serde = "1"
serde_json = "1"
next-swc = { version = "0.0.0", path = "../core" }
-swc = "0.126.2"
+swc = "0.138.0"
swc_atoms = "0.2.7"
-swc_bundler = { version = "0.107.0", features = ["concurrent"] }
-swc_common = { version = "0.17.0", features = ["concurrent", "sourcemap"] }
+swc_bundler = { version = "0.114.0", features = ["concurrent"] }
+swc_common = { version = "0.17.9", features = ["concurrent", "sourcemap"] }
swc_ecma_loader = { version = "0.28.0", features = ["node", "lru"] }
-swc_ecmascript = { version = "0.114.2", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] }
+swc_ecmascript = { version = "0.123.0", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] }
swc_node_base = "0.5.1"
[build-dependencies]
diff --git a/packages/next-swc/crates/wasm/Cargo.toml b/packages/next-swc/crates/wasm/Cargo.toml
index b25e21bcbe0e..a69fa56fa20d 100644
--- a/packages/next-swc/crates/wasm/Cargo.toml
+++ b/packages/next-swc/crates/wasm/Cargo.toml
@@ -16,9 +16,9 @@ path-clean = "0.1"
serde = {version = "1", features = ["derive"]}
serde_json = "1"
next-swc = { version = "0.0.0", path = "../core" }
-swc = "0.126.2"
-swc_common = { version = "0.17.0", features = ["concurrent", "sourcemap"] }
-swc_ecmascript = { version = "0.114.2", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] }
+swc = "0.138.0"
+swc_common = { version = "0.17.9", features = ["concurrent", "sourcemap"] }
+swc_ecmascript = { version = "0.123.0", features = ["codegen", "minifier", "optimization", "parser", "react", "transforms", "typescript", "utils", "visit"] }
tracing = {version = "0.1.28", features = ["release_max_level_off"]}
wasm-bindgen = {version = "0.2", features = ["serde-serialize"]}
wasm-bindgen-futures = "0.4.8"
diff --git a/packages/next-swc/package.json b/packages/next-swc/package.json
index 4daa06fb1bee..081ef4729455 100644
--- a/packages/next-swc/package.json
+++ b/packages/next-swc/package.json
@@ -1,6 +1,6 @@
{
"name": "@next/swc",
- "version": "12.1.1-canary.4",
+ "version": "12.1.1-canary.5",
"private": true,
"scripts": {
"build-native": "napi build --platform --cargo-name next_swc_napi native",
diff --git a/packages/next/build/webpack/loaders/next-flight-server-loader.ts b/packages/next/build/webpack/loaders/next-flight-server-loader.ts
index c7c2c13646b0..bd72e0956dcd 100644
--- a/packages/next/build/webpack/loaders/next-flight-server-loader.ts
+++ b/packages/next/build/webpack/loaders/next-flight-server-loader.ts
@@ -1,14 +1,20 @@
import { parse } from '../../swc'
import { getRawPageExtensions } from '../../utils'
-const getIsClientComponent =
+const createClientComponentFilter =
(pageExtensions: string[]) => (importSource: string) => {
- return new RegExp(`\\.client(\\.(${pageExtensions.join('|')}))?`).test(
- importSource
+ const hasClientExtension = new RegExp(
+ `\\.client(\\.(${pageExtensions.join('|')}))?`
+ ).test(importSource)
+ // Special cases for Next.js APIs that are considered as client components:
+ return (
+ hasClientExtension ||
+ isNextComponent(importSource) ||
+ isImageImport(importSource)
)
}
-const getIsServerComponent =
+const createServerComponentFilter =
(pageExtensions: string[]) => (importSource: string) => {
return new RegExp(`\\.server(\\.(${pageExtensions.join('|')}))?`).test(
importSource
@@ -21,7 +27,7 @@ function isNextComponent(importSource: string) {
)
}
-export function isImageImport(importSource: string) {
+function isImageImport(importSource: string) {
// TODO: share extension with next/image
// TODO: add other static assets, jpeg -> jpg
return ['jpg', 'jpeg', 'png', 'webp', 'avif'].some((imageExt) =>
@@ -49,7 +55,6 @@ async function parseImportsInfo({
}> {
const ast = await parse(source, { filename: resourcePath, isModule: true })
const { body } = ast
- const beginPos = ast.span.start
let transformedSource = ''
let lastIndex = 0
let defaultExportName
@@ -66,16 +71,18 @@ async function parseImportsInfo({
const importDeclarations = source.substring(
lastIndex,
- node.source.span.start - beginPos
+ node.source.span.start
)
- if (
- !(
- isClientComponent(importSource) ||
- isNextComponent(importSource) ||
- isImageImport(importSource)
- )
- ) {
+ if (isClientComponent(importSource)) {
+ // A client component. It should be loaded as module reference.
+ transformedSource += importDeclarations
+ transformedSource += JSON.stringify(`${importSource}?__sc_client__`)
+ imports.push(`require(${JSON.stringify(importSource)})`)
+ } else {
+ // This is a special case to avoid the Duplicate React error.
+ // Since we already include React in the SSR runtime,
+ // here we can't create a new module with the ?__rsc_server__ query.
if (
['react/jsx-runtime', 'react/jsx-dev-runtime'].includes(
importSource
@@ -88,11 +95,6 @@ async function parseImportsInfo({
// component.
transformedSource += importDeclarations
transformedSource += JSON.stringify(`${importSource}?__sc_server__`)
- } else {
- // A client component. It should be loaded as module reference.
- transformedSource += importDeclarations
- transformedSource += JSON.stringify(`${importSource}?__sc_client__`)
- imports.push(`require(${JSON.stringify(importSource)})`)
}
} else {
// For the client compilation, we skip all modules imports but
@@ -100,12 +102,7 @@ async function parseImportsInfo({
// have to be imported from either server or client components.
if (
!(
- isClientComponent(importSource) ||
- isServerComponent(importSource) ||
- // Special cases for Next.js APIs that are considered as client
- // components:
- isNextComponent(importSource) ||
- isImageImport(importSource)
+ isClientComponent(importSource) || isServerComponent(importSource)
)
) {
continue
@@ -114,7 +111,7 @@ async function parseImportsInfo({
imports.push(`require(${JSON.stringify(importSource)})`)
}
- lastIndex = node.source.span.end - beginPos
+ lastIndex = node.source.span.end
break
}
case 'ExportDefaultDeclaration': {
@@ -162,8 +159,8 @@ export default async function transformSource(
}
const rawRawPageExtensions = getRawPageExtensions(pageExtensions)
- const isServerComponent = getIsServerComponent(rawRawPageExtensions)
- const isClientComponent = getIsClientComponent(rawRawPageExtensions)
+ const isServerComponent = createServerComponentFilter(rawRawPageExtensions)
+ const isClientComponent = createClientComponentFilter(rawRawPageExtensions)
if (!isClientCompilation) {
// We only apply the loader to server components, or shared components that
diff --git a/packages/next/package.json b/packages/next/package.json
index f3f8ebd40354..dc59420eb07c 100644
--- a/packages/next/package.json
+++ b/packages/next/package.json
@@ -1,6 +1,6 @@
{
"name": "next",
- "version": "12.1.1-canary.4",
+ "version": "12.1.1-canary.5",
"description": "The React Framework",
"main": "./dist/server/next.js",
"license": "MIT",
@@ -69,7 +69,7 @@
]
},
"dependencies": {
- "@next/env": "12.1.1-canary.4",
+ "@next/env": "12.1.1-canary.5",
"caniuse-lite": "^1.0.30001283",
"postcss": "8.4.5",
"styled-jsx": "5.0.0",
@@ -117,11 +117,11 @@
"@hapi/accept": "5.0.2",
"@napi-rs/cli": "2.4.4",
"@napi-rs/triples": "1.1.0",
- "@next/polyfill-module": "12.1.1-canary.4",
- "@next/polyfill-nomodule": "12.1.1-canary.4",
- "@next/react-dev-overlay": "12.1.1-canary.4",
- "@next/react-refresh-utils": "12.1.1-canary.4",
- "@next/swc": "12.1.1-canary.4",
+ "@next/polyfill-module": "12.1.1-canary.5",
+ "@next/polyfill-nomodule": "12.1.1-canary.5",
+ "@next/react-dev-overlay": "12.1.1-canary.5",
+ "@next/react-refresh-utils": "12.1.1-canary.5",
+ "@next/swc": "12.1.1-canary.5",
"@peculiar/webcrypto": "1.1.7",
"@taskr/clear": "1.1.0",
"@taskr/esnext": "1.1.0",
diff --git a/packages/next/server/image-optimizer.ts b/packages/next/server/image-optimizer.ts
index 747d07ce5d4e..976bd8c29fd6 100644
--- a/packages/next/server/image-optimizer.ts
+++ b/packages/next/server/image-optimizer.ts
@@ -546,10 +546,18 @@ export async function imageOptimizer(
throw new ImageError(500, 'Unable to optimize buffer')
}
} catch (error) {
- return {
- buffer: upstreamBuffer,
- contentType: upstreamType!,
- maxAge,
+ if (upstreamBuffer && upstreamType) {
+ // If we fail to optimize, fallback to the original image
+ return {
+ buffer: upstreamBuffer,
+ contentType: upstreamType,
+ maxAge: nextConfig.images.minimumCacheTTL,
+ }
+ } else {
+ throw new ImageError(
+ 500,
+ 'Unable to optimize image and unable to fallback to upstream image'
+ )
}
}
}
diff --git a/packages/react-dev-overlay/package.json b/packages/react-dev-overlay/package.json
index 4c13fd10dcbf..b0fdc25a23f3 100644
--- a/packages/react-dev-overlay/package.json
+++ b/packages/react-dev-overlay/package.json
@@ -1,6 +1,6 @@
{
"name": "@next/react-dev-overlay",
- "version": "12.1.1-canary.4",
+ "version": "12.1.1-canary.5",
"description": "A development-only overlay for developing React applications.",
"repository": {
"url": "vercel/next.js",
diff --git a/packages/react-refresh-utils/package.json b/packages/react-refresh-utils/package.json
index 0d4622df894d..a31c9d56f5f0 100644
--- a/packages/react-refresh-utils/package.json
+++ b/packages/react-refresh-utils/package.json
@@ -1,6 +1,6 @@
{
"name": "@next/react-refresh-utils",
- "version": "12.1.1-canary.4",
+ "version": "12.1.1-canary.5",
"description": "An experimental package providing utilities for React Refresh.",
"repository": {
"url": "vercel/next.js",
diff --git a/test/integration/image-optimizer/test/util.js b/test/integration/image-optimizer/test/util.js
index 290e108ea335..570f4bd2fff3 100644
--- a/test/integration/image-optimizer/test/util.js
+++ b/test/integration/image-optimizer/test/util.js
@@ -691,6 +691,17 @@ export function runTests(ctx) {
expect(await res.text()).toBe(`"url" parameter is invalid`)
})
+ it('should fail when internal url is not an image', async () => {
+ const url = `//not-an-image
`
+ const query = { url, w: ctx.w, q: 39 }
+ const opts = { headers: { accept: 'image/webp' } }
+ const res = await fetchViaHTTP(ctx.appPort, '/_next/image', query, opts)
+ expect(res.status).toBe(500)
+ expect(await res.text()).toBe(
+ `Unable to optimize image and unable to fallback to upstream image`
+ )
+ })
+
if (ctx.domains.includes('localhost')) {
it('should fail when url fails to load an image', async () => {
const url = `http://localhost:${ctx.appPort}/not-an-image`
diff --git a/test/production/middleware-typescript/test/index.test.ts b/test/production/middleware-typescript/test/index.test.ts
index dd04154749ac..031cdc00e9a4 100644
--- a/test/production/middleware-typescript/test/index.test.ts
+++ b/test/production/middleware-typescript/test/index.test.ts
@@ -18,7 +18,7 @@ describe('should set-up next', () => {
'next.config.js': new FileRef(join(appDir, 'next.config.js')),
},
dependencies: {
- typescript: 'latest',
+ typescript: '4.4.3',
'@types/node': 'latest',
'@types/react': 'latest',
'@types/react-dom': 'latest',