diff --git a/.cargo/config.toml b/.cargo/config.toml index 9f4c9cf..586348b 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,4 +1,4 @@ # These command aliases are not final, may change [alias] # Alias to build actual plugin binary for the specified target. -prepublish = "build --target wasm32-wasi" \ No newline at end of file +prepublish = "build --target wasm32-wasip1" \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 99c5a02..70e106a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -69,6 +69,12 @@ version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c042108f3ed77fd83760a5fd79b53be043192bb3b9dba91d8c574c0ada7850c8" +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + [[package]] name = "ascii" version = "1.1.0" @@ -139,11 +145,12 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64-simd" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "781dd20c3aff0bd194fe7d2a977dd92f21c173891f3a03b677359e5fa457e5d5" +checksum = "339abbe78e73178762e23bea9dfd08e697eb3f3301cd4be981c0f78ba5859195" dependencies = [ - "simd-abstraction", + "outref", + "vsimd", ] [[package]] @@ -261,7 +268,7 @@ checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a" dependencies = [ "camino", "cargo-platform", - "semver 1.0.23", + "semver", "serde", "serde_json", "thiserror", @@ -275,7 +282,7 @@ checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" dependencies = [ "camino", "cargo-platform", - "semver 1.0.23", + "semver", "serde", "serde_json", "thiserror", @@ -940,7 +947,7 @@ checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" [[package]] name = "next_superjson" -version = "0.7.1" +version = "0.8.0" dependencies = [ "serde", "serde_json", @@ -1008,15 +1015,15 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.20.2" +version = "1.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" [[package]] name = "outref" -version = "0.1.0" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f222829ae9293e33a9f5e9f440c6760a3d450a64affe1846486b140db81c1f4" +checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e" [[package]] name = "overload" @@ -1036,6 +1043,25 @@ version = "4.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb37767f6569cd834a413442455e0f066d0d522de8630436e2a1761d9726ba56" +[[package]] +name = "par-core" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "757892557993c69e82f9de0f9051e87144278aa342f03bf53617bbf044554484" +dependencies = [ + "once_cell", +] + +[[package]] +name = "par-iter" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a5b20f31e9ba82bfcbbb54a67aa40be6cebec9f668ba5753be138f9523c531a" +dependencies = [ + "either", + "par-core", +] + [[package]] name = "parking_lot" version = "0.12.3" @@ -1365,15 +1391,6 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -dependencies = [ - "semver 0.9.0", -] - [[package]] name = "rustix" version = "0.38.37" @@ -1417,15 +1434,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -dependencies = [ - "semver-parser", -] - [[package]] name = "semver" version = "1.0.23" @@ -1435,12 +1443,6 @@ dependencies = [ "serde", ] -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" - [[package]] name = "serde" version = "1.0.213" @@ -1499,15 +1501,6 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" -[[package]] -name = "simd-abstraction" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cadb29c57caadc51ff8346233b5cec1d240b68ce55cf1afc764818791876987" -dependencies = [ - "outref", -] - [[package]] name = "simdutf8" version = "0.1.5" @@ -1545,17 +1538,16 @@ checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c" [[package]] name = "sourcemap" -version = "9.0.0" +version = "9.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dab08a862c70980b8e23698b507e272317ae52a608a164a844111f5372374f1f" +checksum = "e22afbcb92ce02d23815b9795523c005cb9d3c214f8b7a66318541c240ea7935" dependencies = [ "base64-simd", "bitvec", "data-encoding", "debugid", "if_chain", - "rustc-hash 1.1.0", - "rustc_version", + "rustc-hash 2.1.1", "serde", "serde_json", "unicode-id-start", @@ -1733,9 +1725,9 @@ dependencies = [ [[package]] name = "swc_common" -version = "8.0.1" +version = "11.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e4a932c152e7142de2d5dba1c393e5523c47cd8fe656e5b0d411954bbaf1810" +checksum = "44c332906667b0fa98622f19a19e43afa5aa63b652813f80645dd0f33eca1fbb" dependencies = [ "anyhow", "ast_node 3.0.0", @@ -1766,14 +1758,14 @@ dependencies = [ [[package]] name = "swc_core" -version = "16.10.0" +version = "26.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7453b2e6771d55f483903ed12fa9cf949ff7a3fefdfe4a63a5ea13b542e9eca" +checksum = "083af217e9715a7c1b020f7c9e71e4961285adb0333ee3f0e5e92962a0494a11" dependencies = [ "once_cell", "swc_allocator", "swc_atoms 5.0.0", - "swc_common 8.0.1", + "swc_common 11.1.3", "swc_ecma_ast", "swc_ecma_parser", "swc_ecma_transforms_base", @@ -1783,35 +1775,38 @@ dependencies = [ "swc_plugin", "swc_plugin_macro", "swc_plugin_proxy", + "swc_transform_common", "vergen", ] [[package]] name = "swc_ecma_ast" -version = "8.1.0" +version = "11.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01f80679b1afc52ae0663eed0a2539cc3c108d48c287b5601712f9850d9fa9c2" +checksum = "d2313360a518a37c4b9ee50030d189222927a3af902903cc70c50f6929e402dc" dependencies = [ "bitflags", "bytecheck", "is-macro", "num-bigint", + "once_cell", "phf", "rancor", "rkyv", + "rustc-hash 2.1.1", "scoped-tls", "string_enum", "swc_atoms 5.0.0", - "swc_common 8.0.1", + "swc_common 11.1.3", "swc_visit 2.0.0", "unicode-id-start", ] [[package]] name = "swc_ecma_codegen" -version = "8.0.2" +version = "13.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92103aa982740f265d6850bb3ffffbf6c3c1dee30ab0ed25117ca553f0d7467d" +checksum = "005b9e6e4cdd15c4c437d6662e4fc6dc93f60bd1c5159a1afcf6cd9eea6fb24f" dependencies = [ "ascii", "compact_str", @@ -1820,11 +1815,12 @@ dependencies = [ "once_cell", "regex", "rustc-hash 2.1.1", + "ryu-js", "serde", "sourcemap", "swc_allocator", "swc_atoms 5.0.0", - "swc_common 8.0.1", + "swc_common 11.1.3", "swc_ecma_ast", "swc_ecma_codegen_macros", "tracing", @@ -1832,9 +1828,9 @@ dependencies = [ [[package]] name = "swc_ecma_codegen_macros" -version = "1.0.1" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ac2ff0957329e0dfcde86a1ac465382e189bf42a5989720d3476bea78eaa31a" +checksum = "e99e1931669a67c83e2c2b4375674f6901d1480994a76aa75b23f1389e6c5076" dependencies = [ "proc-macro2", "quote", @@ -1842,12 +1838,39 @@ dependencies = [ "syn 2.0.85", ] +[[package]] +name = "swc_ecma_lexer" +version = "14.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb339d30ba6ee93da5d5638982faaa79586cd429fe331648abf42afa0eb0a7b5" +dependencies = [ + "arrayvec", + "bitflags", + "either", + "new_debug_unreachable", + "num-bigint", + "num-traits", + "phf", + "rustc-hash 2.1.1", + "serde", + "smallvec", + "smartstring", + "stacker", + "swc_atoms 5.0.0", + "swc_common 11.1.3", + "swc_ecma_ast", + "tracing", + "typed-arena", +] + [[package]] name = "swc_ecma_parser" -version = "10.0.2" +version = "14.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edfbfa5baabd14901a310f9d55d991625787d27d94de5c38a1a2ef85ebc19c97" +checksum = "60e07e6ecd47f748988902976d09c4022b1147772f88ad8a95852a20722ac7dc" dependencies = [ + "arrayvec", + "bitflags", "either", "new_debug_unreachable", "num-bigint", @@ -1859,54 +1882,55 @@ dependencies = [ "smartstring", "stacker", "swc_atoms 5.0.0", - "swc_common 8.0.1", + "swc_common 11.1.3", "swc_ecma_ast", + "swc_ecma_lexer", "tracing", "typed-arena", ] [[package]] name = "swc_ecma_testing" -version = "8.0.0" +version = "12.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e72a43b7acd904fa0c6d244a72aeda66febbc5a9720975481cb836d6804b604" +checksum = "bfca232a0a2e743c963185665bc6fb6f92b1422449aba17ccd836ff4aa02858d" dependencies = [ "anyhow", "hex", "sha2", - "testing 8.0.0", + "testing 12.0.0", "tracing", ] [[package]] name = "swc_ecma_transforms_base" -version = "11.2.0" +version = "15.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39889063ff4819eae414dfe6426aa5cd72ebb0f9f48739a1fa1e7eb82d0adc78" +checksum = "49c0a76bff24b9fa13d5451e7a664d18158849c45434d863e0553e29fb31170b" dependencies = [ "better_scoped_tls 1.0.0", "bitflags", "indexmap", "once_cell", + "par-core", "phf", "rustc-hash 2.1.1", "serde", "smallvec", "swc_atoms 5.0.0", - "swc_common 8.0.1", + "swc_common 11.1.3", "swc_ecma_ast", "swc_ecma_parser", "swc_ecma_utils", "swc_ecma_visit", - "swc_parallel", "tracing", ] [[package]] name = "swc_ecma_transforms_testing" -version = "11.0.1" +version = "18.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c4d8c48a36ad5d02626f853edcf52ae82b65d238389e7e76270ddf564b69ab" +checksum = "297e4f7638cfc0d6088ad637ec717b9ffbf7555a913963344cd1f3ce2864a660" dependencies = [ "ansi_term", "anyhow", @@ -1917,7 +1941,7 @@ dependencies = [ "sha2", "sourcemap", "swc_allocator", - "swc_common 8.0.1", + "swc_common 11.1.3", "swc_ecma_ast", "swc_ecma_codegen", "swc_ecma_parser", @@ -1926,39 +1950,40 @@ dependencies = [ "swc_ecma_utils", "swc_ecma_visit", "tempfile", - "testing 8.0.0", + "testing 12.0.0", ] [[package]] name = "swc_ecma_utils" -version = "11.0.0" +version = "15.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "721dc779e7de200da96ac4002c710bc32c988e3e1ebf62b39d32bf99f14d9765" +checksum = "7d2c29dbfc54e02c14975aff9d2c75ae6fff0808d860d9971a493d37870e282f" dependencies = [ "indexmap", "num_cpus", "once_cell", + "par-core", + "par-iter", "rustc-hash 2.1.1", "ryu-js", "swc_atoms 5.0.0", - "swc_common 8.0.1", + "swc_common 11.1.3", "swc_ecma_ast", "swc_ecma_visit", - "swc_parallel", "tracing", "unicode-id", ] [[package]] name = "swc_ecma_visit" -version = "8.0.0" +version = "11.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f7a65fa06d0c0f709f1df4e820ccdc4eca7b3db7f9d131545e20c2ac2f1cd23" +checksum = "8227d1d2d76a9ccfd190ec06bb4a4720bf3edb9f954c69816b2bca5f5aa43887" dependencies = [ "new_debug_unreachable", "num-bigint", "swc_atoms 5.0.0", - "swc_common 8.0.1", + "swc_common 11.1.3", "swc_ecma_ast", "swc_visit 2.0.0", "tracing", @@ -2001,9 +2026,9 @@ dependencies = [ [[package]] name = "swc_error_reporters" -version = "9.1.1" +version = "13.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7938665a5561d6c3e2b796b5b2d0bc9a961d461db960cb5139f12e82b45bb471" +checksum = "572075b92eef780f9a13b99abcb4fbf8e6272abeed27b361632b5e3a2e8de70d" dependencies = [ "anyhow", "miette 7.2.0", @@ -2012,7 +2037,7 @@ dependencies = [ "serde", "serde_derive", "serde_json", - "swc_common 8.0.1", + "swc_common 11.1.3", ] [[package]] @@ -2037,15 +2062,6 @@ dependencies = [ "syn 2.0.85", ] -[[package]] -name = "swc_parallel" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f16052d5123ec45c1c49100781363f3f4e4a6be2da6d82f473b79db1e3abeb8" -dependencies = [ - "once_cell", -] - [[package]] name = "swc_plugin" version = "1.0.0" @@ -2057,9 +2073,9 @@ dependencies = [ [[package]] name = "swc_plugin_macro" -version = "1.0.0" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0917ccfdcd3fa6cf41bdacef2388702a3b274f9ea708d930e1e8db37c7c3e1c6" +checksum = "ace467dfafbbdf3aecff786b8605b35db57d945e92fd88800569aa2cba0cdf61" dependencies = [ "proc-macro2", "quote", @@ -2068,16 +2084,16 @@ dependencies = [ [[package]] name = "swc_plugin_proxy" -version = "8.0.0" +version = "11.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a18c199683d9f946db8dfca444212a3551e74a7c563196b154d5ac30f3bf9de6" +checksum = "ab1281343dca1fe02aa027e2dfdf77067e62506e77b651e3e9c1a4e3fa8bccf6" dependencies = [ "better_scoped_tls 1.0.0", "bytecheck", "rancor", "rkyv", "rustc-hash 2.1.1", - "swc_common 8.0.1", + "swc_common 11.1.3", "swc_ecma_ast", "swc_trace_macro", "tracing", @@ -2085,15 +2101,28 @@ dependencies = [ [[package]] name = "swc_trace_macro" -version = "2.0.0" +version = "2.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c78717a841565df57f811376a3d19c9156091c55175e12d378f3a522de70cef" +checksum = "dfd2b4b0adb82e36f2ac688d00a6a67132c7f4170c772617516793a701be89e8" dependencies = [ - "proc-macro2", "quote", "syn 2.0.85", ] +[[package]] +name = "swc_transform_common" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3be97f7341c59045d8ecbd5579acad8063e545d10304db086846b9dcf985c56e" +dependencies = [ + "better_scoped_tls 1.0.0", + "once_cell", + "rustc-hash 2.1.1", + "serde", + "serde_json", + "swc_common 11.1.3", +] + [[package]] name = "swc_visit" version = "0.5.14" @@ -2220,9 +2249,9 @@ dependencies = [ [[package]] name = "testing" -version = "8.0.0" +version = "12.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d32ddc0e2ebd072cbffe7424087267da990708a5bc3ae29e075904468450275" +checksum = "4afa5efbee09e27d4fa6f7d3278e351ab1feaf8d253eea84bc69975fb6da418e" dependencies = [ "ansi_term", "cargo_metadata 0.18.1", @@ -2233,8 +2262,8 @@ dependencies = [ "rustc-hash 2.1.1", "serde", "serde_json", - "swc_common 8.0.1", - "swc_error_reporters 9.1.1", + "swc_common 11.1.3", + "swc_error_reporters 13.0.0", "testing_macros 1.0.0", "tracing", "tracing-subscriber", @@ -2528,6 +2557,12 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" +[[package]] +name = "vsimd" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64" + [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" diff --git a/Cargo.toml b/Cargo.toml index 8463f9d..3f43226 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "next_superjson" -version = "0.7.1" +version = "0.8.0" edition = "2021" authors = ["https://github.com/serg-and"] description = "SWC Plugin of SuperJSON for Next.js" @@ -13,7 +13,8 @@ crate-type = ["cdylib", "rlib"] [dependencies] serde = "1.0.144" serde_json = "1.0.85" -swc_core = { version = "16.10.*", features = [ +# match next@15.4.0 +swc_core = { version = "26.4.*", features = [ "ecma_plugin_transform", "ecma_ast", "ecma_utils", diff --git a/README.md b/README.md index ac782d9..149db44 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@

Next SuperJSON Plugin

🔌 SuperJSON Plugin for Next.js (SWC)

-## Usage +## Installation Install packages first: @@ -16,20 +16,26 @@ npm install superjson superjson-next yarn add superjson superjson-next ``` -> [!IMPORTANT] -> Because of a bug in Next.js (see [#72019](https://github.com/vercel/next.js/issues/72019)), this plugin can only run in either app router or page router mode. - -Add the plugin into `next.config.js`. And select the type of [Router](https://nextjs.org/docs#app-router-vs-pages-router) you are using. +Add the plugin into `next.config.js` ```js // next.config.js module.exports = { experimental: { - swcPlugins: [["superjson-next", { router: "APP" | "PAGE" }]], + swcPlugins: [["superjson-next", {}]], }, }; ``` +### Versions + +| package version | Next.js versions | notes | +| :-------------- | :--------------- | :------------------------------------------ | +| `0.8.0` | `15.4.*` | | +| `0.7.1` | `15.0.*` | requires choosing router type (see release) | + +## Usage + ### /pages (Pages Directory) ```jsx @@ -63,16 +69,16 @@ export default function ServerComponent() { } ``` -- Provides `data-superjson` attribute for [Server Component > Client Component Serialization](https://beta.nextjs.org/docs/rendering/server-and-client-components#passing-props-from-server-to-client-components-serialization). - ### Options You can use the `excluded` option to exclude specific properties from serialization. ```js -["superjson-next", { router: "APP" | "PAGE", excluded: ["someProp"] }], +['superjson-next', { excluded: ["someProp"] }], ``` +- Provides `data-superjson` attribute for [Server Component > Client Component Serialization](https://beta.nextjs.org/docs/rendering/server-and-client-components#passing-props-from-server-to-client-components-serialization). + ## How it works ```mermaid diff --git a/package.json b/package.json index 580734d..11ea054 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "superjson-next", - "version": "0.7.1", + "version": "0.8.0", "description": "Automatically transform your Next.js Pages to use SuperJSON with SWC", "author": "https://github.com/serg-and", "homepage": "https://github.com/serg-and/superjson-next#readme", @@ -31,7 +31,7 @@ "dist" ], "peerDependencies": { - "next": "^15.2", + "next": "^15.4", "superjson": "^1 || ^2" }, "dependencies": { diff --git a/src/lib.rs b/src/lib.rs index da425f2..92cf0f9 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,5 +1,8 @@ +use std::path::{Component, Path}; + use serde::Deserialize; use swc_core::{ + common::plugin::metadata::TransformPluginMetadataContextKind, ecma::{ast::*, visit::*}, plugin::{plugin_transform, proxies::TransformPluginProgramMetadata}, }; @@ -11,25 +14,6 @@ pub mod app; pub mod page; mod utils; -static MISSING_CONFIG: &str = "superjson-next: Missing config, - -Provide a plugin config in your next.config.(js|ts) like: - -module.exports = { - experimental: { - swcPlugins: [ - [ - 'superjson-next', - { - router: 'APP' | 'PAGE', - excluded: ['someProps'], (optional) - } - ] - ], - } -} -"; - static BAD_CONFIG: &str = "superjson-next: Failed to parse config, Provide a plugin config in your next.config.(js|ts) like: @@ -40,7 +24,6 @@ module.exports = { [ 'superjson-next', { - router: 'APP' | 'PAGE', excluded: ['someProps'], (optional) } ] @@ -49,50 +32,32 @@ module.exports = { } "; -#[derive(Debug, Clone, Deserialize)] -#[serde(rename_all = "UPPERCASE")] -pub enum Router { - #[serde(alias = "app", alias = "App")] - App, - #[serde(alias = "page", alias = "Page")] - Page, -} - -#[derive(Debug, Clone, Deserialize)] +#[derive(Debug, Clone, Deserialize, Default)] #[serde(rename_all = "camelCase", deny_unknown_fields)] pub struct Config { - pub router: Router, #[serde(default)] pub excluded: Vec, } -// pub enum DirType { -// Page, -// App, -// } +pub enum DirType { + Page, + App, +} #[plugin_transform] pub fn process_transform(program: Program, metadata: TransformPluginProgramMetadata) -> Program { - let plugin_config_str = &metadata - .get_transform_plugin_config() - .expect(MISSING_CONFIG); - let config = serde_json::from_str::(&plugin_config_str).expect(BAD_CONFIG); - - match config.router { - Router::App => program.apply(&mut visit_mut_pass(transform_app(config))), - Router::Page => program.apply(&mut visit_mut_pass(transform_page(config))), - } - - /* - // Automatic detection of router type is disabled because of a bug in Next.js - // Re enable this code once Next.js fixes this issue - // https://github.com/vercel/next.js/issues/72019 + let config = match metadata.get_transform_plugin_config() { + Some(plugin_config_str) => { + serde_json::from_str::(&plugin_config_str).expect(BAD_CONFIG) + } + None => Config::default(), + }; - let raw_cwd = _metadata + let raw_cwd = metadata .get_context(&TransformPluginMetadataContextKind::Cwd) .unwrap(); - let raw_path = _metadata + let raw_path = metadata .get_context(&TransformPluginMetadataContextKind::Filename) .unwrap(); @@ -131,19 +96,11 @@ pub fn process_transform(program: Program, metadata: TransformPluginProgramMetad // consider server components outside the app directory let dir_type = if is_page { DirType::Page } else { DirType::App }; - let config = serde_json::from_str::( - &_metadata - .get_transform_plugin_config() - .unwrap_or_else(|| "{}".to_string()), - ) - .expect("Failed to parse plugin config"); - match dir_type { - DirType::Page => program.fold_with(&mut as_folder(transform_page(config))), - DirType::App => program.fold_with(&mut as_folder(transform_app(config))), + DirType::Page => program.apply(&mut visit_mut_pass(transform_page(config))), + DirType::App => program.apply(&mut visit_mut_pass(transform_app(config))), } } else { program } - */ } diff --git a/tests/fixture.rs b/tests/fixture.rs index a0dd804..c90157a 100644 --- a/tests/fixture.rs +++ b/tests/fixture.rs @@ -6,7 +6,7 @@ use swc_core::ecma::{ }; use testing::fixture; -use next_superjson::{app::transform_app, page::transform_page, Config, Router}; +use next_superjson::{app::transform_app, page::transform_page, Config}; #[fixture("tests/fixture/page/**/code.js")] fn fixture_page(input: PathBuf) { @@ -19,7 +19,6 @@ fn fixture_page(input: PathBuf) { }), &|_| { visit_mut_pass(transform_page(Config { - router: Router::Page, excluded: vec!["smth".to_string()], })) }, @@ -40,7 +39,6 @@ fn fixture_app(input: PathBuf) { }), &|_| { visit_mut_pass(transform_app(Config { - router: Router::App, excluded: vec!["smth".to_string()], })) },