From 20e13490ab39eafa1262703e40742fd38af7bef1 Mon Sep 17 00:00:00 2001 From: Shu Ding Date: Tue, 9 May 2023 00:02:32 +0200 Subject: [PATCH] Restrict `useOptimistic` and `useFormStatus` APIs on the server layer (#49331) This PR extends `invalid_server_react_dom_apis` with `experimental_useOptimistic` and `experimental_useFormStatus` to create early compile-time errors. --- .../crates/core/src/react_server_components.rs | 2 ++ .../server-graph/react-dom-api/input.js | 5 +++++ .../server-graph/react-dom-api/output.js | 1 + .../server-graph/react-dom-api/output.stderr | 16 ++++++++++++++++ 4 files changed, 24 insertions(+) diff --git a/packages/next-swc/crates/core/src/react_server_components.rs b/packages/next-swc/crates/core/src/react_server_components.rs index 3333a3b97b9d..c3b14975304f 100644 --- a/packages/next-swc/crates/core/src/react_server_components.rs +++ b/packages/next-swc/crates/core/src/react_server_components.rs @@ -572,6 +572,8 @@ pub fn server_components( JsWord::from("findDOMNode"), JsWord::from("flushSync"), JsWord::from("unstable_batchedUpdates"), + JsWord::from("experimental_useFormStatus"), + JsWord::from("experimental_useOptimistic"), ], invalid_server_react_apis: vec![ JsWord::from("Component"), diff --git a/packages/next-swc/crates/core/tests/errors/react-server-components/server-graph/react-dom-api/input.js b/packages/next-swc/crates/core/tests/errors/react-server-components/server-graph/react-dom-api/input.js index 9e5244da2bde..722799c24127 100644 --- a/packages/next-swc/crates/core/tests/errors/react-server-components/server-graph/react-dom-api/input.js +++ b/packages/next-swc/crates/core/tests/errors/react-server-components/server-graph/react-dom-api/input.js @@ -1,5 +1,10 @@ import { findDOMNode, flushSync, unstable_batchedUpdates } from 'react-dom' +import { + experimental_useOptimistic as useOptimistic, + experimental_useFormStatus, +} from 'react-dom' + export default function () { return null } diff --git a/packages/next-swc/crates/core/tests/errors/react-server-components/server-graph/react-dom-api/output.js b/packages/next-swc/crates/core/tests/errors/react-server-components/server-graph/react-dom-api/output.js index eeb4b9e95e90..d7bf00f6bd08 100644 --- a/packages/next-swc/crates/core/tests/errors/react-server-components/server-graph/react-dom-api/output.js +++ b/packages/next-swc/crates/core/tests/errors/react-server-components/server-graph/react-dom-api/output.js @@ -1,4 +1,5 @@ import { findDOMNode, flushSync, unstable_batchedUpdates } from 'react-dom'; +import { experimental_useOptimistic as useOptimistic, experimental_useFormStatus } from 'react-dom'; export default function() { return null; } diff --git a/packages/next-swc/crates/core/tests/errors/react-server-components/server-graph/react-dom-api/output.stderr b/packages/next-swc/crates/core/tests/errors/react-server-components/server-graph/react-dom-api/output.stderr index 98676beb507a..eb7a1b154f5e 100644 --- a/packages/next-swc/crates/core/tests/errors/react-server-components/server-graph/react-dom-api/output.stderr +++ b/packages/next-swc/crates/core/tests/errors/react-server-components/server-graph/react-dom-api/output.stderr @@ -16,3 +16,19 @@ 1 | import { findDOMNode, flushSync, unstable_batchedUpdates } from 'react-dom' : ^^^^^^^^^^^^^^^^^^^^^^^ `---- + + x NEXT_RSC_ERR_REACT_API: experimental_useOptimistic + ,-[input.js:3:1] + 3 | import { + 4 | experimental_useOptimistic as useOptimistic, + : ^^^^^^^^^^^^^^^^^^^^^^^^^^ + 5 | experimental_useFormStatus, + `---- + + x NEXT_RSC_ERR_REACT_API: experimental_useFormStatus + ,-[input.js:4:1] + 4 | experimental_useOptimistic as useOptimistic, + 5 | experimental_useFormStatus, + : ^^^^^^^^^^^^^^^^^^^^^^^^^^ + 6 | } from 'react-dom' + `----