diff --git a/crates/next-custom-transforms/tests/errors.rs b/crates/next-custom-transforms/tests/errors.rs index dd9798030df7c2..35edb880f9b60c 100644 --- a/crates/next-custom-transforms/tests/errors.rs +++ b/crates/next-custom-transforms/tests/errors.rs @@ -90,24 +90,32 @@ fn next_ssg_errors(input: PathBuf) { } #[fixture("tests/errors/react-server-components/**/input.js")] +#[fixture("tests/errors/react-server-components/**/page.js")] +#[fixture("tests/errors/react-server-components/**/route.js")] fn react_server_components_errors(input: PathBuf) { use next_custom_transforms::transforms::react_server_components::{Config, Options}; let is_react_server_layer = input.iter().any(|s| s.to_str() == Some("server-graph")); let cache_components_enabled = input.iter().any(|s| s.to_str() == Some("cache-components")); let use_cache_enabled = input.iter().any(|s| s.to_str() == Some("use-cache")); + + let app_dir = input + .iter() + .position(|s| s.to_str() == Some("app-dir")) + .map(|pos| input.iter().take(pos + 1).collect()); + let output = input.parent().unwrap().join("output.js"); test_fixture( syntax(), &|tr| { server_components( - FileName::Real(PathBuf::from("/some-project/src/page.js")).into(), + FileName::Real(input.clone()).into(), Config::WithOptions(Options { is_react_server_layer, cache_components_enabled, use_cache_enabled, }), tr.comments.as_ref().clone(), - None, + app_dir.clone(), ) }, &input, diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/cache-life/input.js b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/cache-life/input.js new file mode 100644 index 00000000000000..3a47513f169127 --- /dev/null +++ b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/cache-life/input.js @@ -0,0 +1,6 @@ +import { cacheLife } from 'next/cache' + +export async function test() { + cacheLife('days') + return null +} diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/cache-life/output.js b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/cache-life/output.js new file mode 100644 index 00000000000000..f930ae454162da --- /dev/null +++ b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/cache-life/output.js @@ -0,0 +1,5 @@ +import { cacheLife } from 'next/cache'; +export async function test() { + cacheLife('days'); + return null; +} diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/cache-life/output.stderr b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/cache-life/output.stderr new file mode 100644 index 00000000000000..23506fb6b39340 --- /dev/null +++ b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/cache-life/output.stderr @@ -0,0 +1,8 @@ + x You're importing a component that needs "cacheLife". That only works in a Server Component but one of its parents is marked with "use client", so it's a Client Component. + | Learn more: https://nextjs.org/docs/app/building-your-application/rendering + | + | + ,-[input.js:1:1] + 1 | import { cacheLife } from 'next/cache' + : ^^^^^^^^^ + `---- diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/cache-tag/input.js b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/cache-tag/input.js new file mode 100644 index 00000000000000..58db8cbad25d9e --- /dev/null +++ b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/cache-tag/input.js @@ -0,0 +1,6 @@ +import { cacheTag } from 'next/cache' + +export async function test() { + cacheTag('test') + return null +} diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/cache-tag/output.js b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/cache-tag/output.js new file mode 100644 index 00000000000000..3ec311062d10eb --- /dev/null +++ b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/cache-tag/output.js @@ -0,0 +1,5 @@ +import { cacheTag } from 'next/cache'; +export async function test() { + cacheTag('test'); + return null; +} diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/cache-tag/output.stderr b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/cache-tag/output.stderr new file mode 100644 index 00000000000000..5bda6c171eb5a7 --- /dev/null +++ b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/cache-tag/output.stderr @@ -0,0 +1,8 @@ + x You're importing a component that needs "cacheTag". That only works in a Server Component but one of its parents is marked with "use client", so it's a Client Component. + | Learn more: https://nextjs.org/docs/app/building-your-application/rendering + | + | + ,-[input.js:1:1] + 1 | import { cacheTag } from 'next/cache' + : ^^^^^^^^ + `---- diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/root-params/input.js b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/root-params/input.js new file mode 100644 index 00000000000000..edde535f6212f9 --- /dev/null +++ b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/root-params/input.js @@ -0,0 +1,13 @@ +// This is a comment. + +'use strict' + +/** + * This is a comment. + */ + +import { lang } from 'next/root-params' + +export default function () { + return null +} diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/root-params/output.js b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/root-params/output.js new file mode 100644 index 00000000000000..25945c27bfb2e7 --- /dev/null +++ b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/root-params/output.js @@ -0,0 +1,8 @@ +// This is a comment. +'use strict'; +/** + * This is a comment. + */ import { lang } from 'next/root-params'; +export default function() { + return null; +} diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/root-params/output.stderr b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/root-params/output.stderr new file mode 100644 index 00000000000000..87ed9010872405 --- /dev/null +++ b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/root-params/output.stderr @@ -0,0 +1,9 @@ + x You're importing a component that needs "next/root-params". That only works in a Server Component but one of its parents is marked with "use client", so it's a Client Component. + | Learn more: https://nextjs.org/docs/app/building-your-application/rendering + | + | + ,-[input.js:9:1] + 8 | + 9 | import { lang } from 'next/root-params' + : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + `---- diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/server-only/input.js b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/server-only/input.js new file mode 100644 index 00000000000000..3abc20f8f65104 --- /dev/null +++ b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/server-only/input.js @@ -0,0 +1,13 @@ +// This is a comment. + +'use strict' + +/** + * This is a comment. + */ + +import 'server-only' + +export default function () { + return null +} diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/server-only/output.js b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/server-only/output.js new file mode 100644 index 00000000000000..4766155152a11b --- /dev/null +++ b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/server-only/output.js @@ -0,0 +1,8 @@ +// This is a comment. +'use strict'; +/** + * This is a comment. + */ import 'server-only'; +export default function() { + return null; +} diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/server-only/output.stderr b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/server-only/output.stderr new file mode 100644 index 00000000000000..d07054578929d9 --- /dev/null +++ b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/app-dir/server-only/output.stderr @@ -0,0 +1,9 @@ + x You're importing a component that needs "server-only". That only works in a Server Component but one of its parents is marked with "use client", so it's a Client Component. + | Learn more: https://nextjs.org/docs/app/building-your-application/rendering + | + | + ,-[input.js:9:1] + 8 | + 9 | import 'server-only' + : ^^^^^^^^^^^^^^^^^^^^ + `---- diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/cache-life/input.js b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/cache-life/input.js new file mode 100644 index 00000000000000..3a47513f169127 --- /dev/null +++ b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/cache-life/input.js @@ -0,0 +1,6 @@ +import { cacheLife } from 'next/cache' + +export async function test() { + cacheLife('days') + return null +} diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/cache-life/output.js b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/cache-life/output.js new file mode 100644 index 00000000000000..f930ae454162da --- /dev/null +++ b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/cache-life/output.js @@ -0,0 +1,5 @@ +import { cacheLife } from 'next/cache'; +export async function test() { + cacheLife('days'); + return null; +} diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/cache-life/output.stderr b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/cache-life/output.stderr new file mode 100644 index 00000000000000..630d308e309e54 --- /dev/null +++ b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/cache-life/output.stderr @@ -0,0 +1,8 @@ + x You're importing a component that needs "cacheLife". That only works in a Server Component which is not supported in the pages/ directory. Read more: https://nextjs.org/docs/app/building-your- + | application/rendering/server-components + | + | + ,-[input.js:1:1] + 1 | import { cacheLife } from 'next/cache' + : ^^^^^^^^^ + `---- diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/cache-tag/input.js b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/cache-tag/input.js new file mode 100644 index 00000000000000..58db8cbad25d9e --- /dev/null +++ b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/cache-tag/input.js @@ -0,0 +1,6 @@ +import { cacheTag } from 'next/cache' + +export async function test() { + cacheTag('test') + return null +} diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/cache-tag/output.js b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/cache-tag/output.js new file mode 100644 index 00000000000000..3ec311062d10eb --- /dev/null +++ b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/cache-tag/output.js @@ -0,0 +1,5 @@ +import { cacheTag } from 'next/cache'; +export async function test() { + cacheTag('test'); + return null; +} diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/cache-tag/output.stderr b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/cache-tag/output.stderr new file mode 100644 index 00000000000000..b6a1714b0ee2ad --- /dev/null +++ b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/cache-tag/output.stderr @@ -0,0 +1,8 @@ + x You're importing a component that needs "cacheTag". That only works in a Server Component which is not supported in the pages/ directory. Read more: https://nextjs.org/docs/app/building-your- + | application/rendering/server-components + | + | + ,-[input.js:1:1] + 1 | import { cacheTag } from 'next/cache' + : ^^^^^^^^ + `---- diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/generate-metadata/input.js b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/generate-metadata/page.js similarity index 100% rename from crates/next-custom-transforms/tests/errors/react-server-components/client-graph/generate-metadata/input.js rename to crates/next-custom-transforms/tests/errors/react-server-components/client-graph/generate-metadata/page.js diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/get-server-side-props/input.js b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/get-server-side-props/page.js similarity index 100% rename from crates/next-custom-transforms/tests/errors/react-server-components/client-graph/get-server-side-props/input.js rename to crates/next-custom-transforms/tests/errors/react-server-components/client-graph/get-server-side-props/page.js diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/get-static-props/input.js b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/get-static-props/page.js similarity index 100% rename from crates/next-custom-transforms/tests/errors/react-server-components/client-graph/get-static-props/input.js rename to crates/next-custom-transforms/tests/errors/react-server-components/client-graph/get-static-props/page.js diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/metadata/input.js b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/metadata/page.js similarity index 100% rename from crates/next-custom-transforms/tests/errors/react-server-components/client-graph/metadata/input.js rename to crates/next-custom-transforms/tests/errors/react-server-components/client-graph/metadata/page.js diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/multiple/input.js b/crates/next-custom-transforms/tests/errors/react-server-components/client-graph/multiple/page.js similarity index 100% rename from crates/next-custom-transforms/tests/errors/react-server-components/client-graph/multiple/input.js rename to crates/next-custom-transforms/tests/errors/react-server-components/client-graph/multiple/page.js diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/server-graph/cache-components/input.js b/crates/next-custom-transforms/tests/errors/react-server-components/server-graph/cache-components/page.js similarity index 100% rename from crates/next-custom-transforms/tests/errors/react-server-components/server-graph/cache-components/input.js rename to crates/next-custom-transforms/tests/errors/react-server-components/server-graph/cache-components/page.js diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/server-graph/generate-metadata/input.js b/crates/next-custom-transforms/tests/errors/react-server-components/server-graph/generate-metadata/page.js similarity index 100% rename from crates/next-custom-transforms/tests/errors/react-server-components/server-graph/generate-metadata/input.js rename to crates/next-custom-transforms/tests/errors/react-server-components/server-graph/generate-metadata/page.js diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/server-graph/get-server-side-props/input.js b/crates/next-custom-transforms/tests/errors/react-server-components/server-graph/get-server-side-props/page.js similarity index 100% rename from crates/next-custom-transforms/tests/errors/react-server-components/server-graph/get-server-side-props/input.js rename to crates/next-custom-transforms/tests/errors/react-server-components/server-graph/get-server-side-props/page.js diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/server-graph/get-static-props/input.js b/crates/next-custom-transforms/tests/errors/react-server-components/server-graph/get-static-props/page.js similarity index 100% rename from crates/next-custom-transforms/tests/errors/react-server-components/server-graph/get-static-props/input.js rename to crates/next-custom-transforms/tests/errors/react-server-components/server-graph/get-static-props/page.js diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/server-graph/image-response/input.js b/crates/next-custom-transforms/tests/errors/react-server-components/server-graph/image-response/route.js similarity index 100% rename from crates/next-custom-transforms/tests/errors/react-server-components/server-graph/image-response/input.js rename to crates/next-custom-transforms/tests/errors/react-server-components/server-graph/image-response/route.js diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/server-graph/metadata-conflict/input.js b/crates/next-custom-transforms/tests/errors/react-server-components/server-graph/metadata-conflict/page.js similarity index 100% rename from crates/next-custom-transforms/tests/errors/react-server-components/server-graph/metadata-conflict/input.js rename to crates/next-custom-transforms/tests/errors/react-server-components/server-graph/metadata-conflict/page.js diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/server-graph/metadata/input.js b/crates/next-custom-transforms/tests/errors/react-server-components/server-graph/metadata/page.js similarity index 100% rename from crates/next-custom-transforms/tests/errors/react-server-components/server-graph/metadata/input.js rename to crates/next-custom-transforms/tests/errors/react-server-components/server-graph/metadata/page.js diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/server-graph/react-api/input.js b/crates/next-custom-transforms/tests/errors/react-server-components/server-graph/react-api/page.js similarity index 100% rename from crates/next-custom-transforms/tests/errors/react-server-components/server-graph/react-api/input.js rename to crates/next-custom-transforms/tests/errors/react-server-components/server-graph/react-api/page.js diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/server-graph/react-dom-api/input.js b/crates/next-custom-transforms/tests/errors/react-server-components/server-graph/react-dom-api/page.js similarity index 100% rename from crates/next-custom-transforms/tests/errors/react-server-components/server-graph/react-dom-api/input.js rename to crates/next-custom-transforms/tests/errors/react-server-components/server-graph/react-dom-api/page.js diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/server-graph/react-dom-server-client/input.js b/crates/next-custom-transforms/tests/errors/react-server-components/server-graph/react-dom-server-client/page.js similarity index 100% rename from crates/next-custom-transforms/tests/errors/react-server-components/server-graph/react-dom-server-client/input.js rename to crates/next-custom-transforms/tests/errors/react-server-components/server-graph/react-dom-server-client/page.js diff --git a/crates/next-custom-transforms/tests/errors/react-server-components/server-graph/use-cache/input.js b/crates/next-custom-transforms/tests/errors/react-server-components/server-graph/use-cache/page.js similarity index 100% rename from crates/next-custom-transforms/tests/errors/react-server-components/server-graph/use-cache/input.js rename to crates/next-custom-transforms/tests/errors/react-server-components/server-graph/use-cache/page.js