From b6240b2e67c95172016d32714b7a32d44d605770 Mon Sep 17 00:00:00 2001 From: Sebastian Markbage Date: Wed, 21 Jun 2023 17:14:04 -0400 Subject: [PATCH] Only expose the $$FORM_ACTION extension in SSR builds We assume that only the Edge or Node builds of the client are used together with SSR. On the client this feature is not needed so we can exclude the code. This might be a bit unnecessary because it's not that much code and in theory you might use SSR in a Service Worker or something where the Browser build would be used but currently we assume that build is only for the client. That's why it also don't take an option for reverse look up of file names. --- packages/react-client/src/ReactFlightClient.js | 7 +++++-- packages/react-client/src/ReactFlightReplyClient.js | 8 ++++++-- .../src/forks/ReactFlightClientConfig.custom.js | 1 + .../src/forks/ReactFlightClientConfig.dom-browser.js | 1 + .../src/forks/ReactFlightClientConfig.dom-bun.js | 1 + .../src/forks/ReactFlightClientConfig.dom-edge-webpack.js | 1 + .../src/forks/ReactFlightClientConfig.dom-legacy.js | 1 + .../src/forks/ReactFlightClientConfig.dom-node-esm.js | 1 + .../src/forks/ReactFlightClientConfig.dom-node-webpack.js | 1 + .../src/forks/ReactFlightClientConfig.dom-node.js | 1 + 10 files changed, 19 insertions(+), 4 deletions(-) diff --git a/packages/react-client/src/ReactFlightClient.js b/packages/react-client/src/ReactFlightClient.js index 6f1cdd74d108c..09b6718050f0e 100644 --- a/packages/react-client/src/ReactFlightClient.js +++ b/packages/react-client/src/ReactFlightClient.js @@ -29,6 +29,7 @@ import { readPartialStringChunk, readFinalStringChunk, createStringDecoder, + usedWithSSR, } from './ReactFlightClientConfig'; import { @@ -529,8 +530,10 @@ function createServerReferenceProxy, T>( }); }; // Expose encoder for use by SSR. - // TODO: Only expose this in SSR builds and not the browser client. - proxy.$$FORM_ACTION = encodeFormAction; + if (usedWithSSR) { + // Only expose this in builds that would actually use it. Not needed on the client. + (proxy: any).$$FORM_ACTION = encodeFormAction; + } knownServerReferences.set(proxy, metaData); return proxy; } diff --git a/packages/react-client/src/ReactFlightReplyClient.js b/packages/react-client/src/ReactFlightReplyClient.js index d1f1362089457..122c007cdbc8d 100644 --- a/packages/react-client/src/ReactFlightReplyClient.js +++ b/packages/react-client/src/ReactFlightReplyClient.js @@ -28,6 +28,8 @@ import type { RejectedThenable, } from '../../shared/ReactTypes'; +import {usedWithSSR} from './ReactFlightClientConfig'; + type ReactJSONValue = | string | boolean @@ -466,8 +468,10 @@ export function createServerReference, T>( return callServer(id, args); }; // Expose encoder for use by SSR. - // TODO: Only expose this in SSR builds and not the browser client. - proxy.$$FORM_ACTION = encodeFormAction; + if (usedWithSSR) { + // Only expose this in builds that would actually use it. Not needed on the client. + (proxy: any).$$FORM_ACTION = encodeFormAction; + } knownServerReferences.set(proxy, {id: id, bound: null}); return proxy; } diff --git a/packages/react-client/src/forks/ReactFlightClientConfig.custom.js b/packages/react-client/src/forks/ReactFlightClientConfig.custom.js index 9d00b3afa10ad..b5de594d4d46f 100644 --- a/packages/react-client/src/forks/ReactFlightClientConfig.custom.js +++ b/packages/react-client/src/forks/ReactFlightClientConfig.custom.js @@ -35,6 +35,7 @@ export const resolveServerReference = $$$config.resolveServerReference; export const preloadModule = $$$config.preloadModule; export const requireModule = $$$config.requireModule; export const dispatchHint = $$$config.dispatchHint; +export const usedWithSSR = true; export opaque type Source = mixed; diff --git a/packages/react-client/src/forks/ReactFlightClientConfig.dom-browser.js b/packages/react-client/src/forks/ReactFlightClientConfig.dom-browser.js index a51bc8f1c2f77..52212d1e0c869 100644 --- a/packages/react-client/src/forks/ReactFlightClientConfig.dom-browser.js +++ b/packages/react-client/src/forks/ReactFlightClientConfig.dom-browser.js @@ -10,3 +10,4 @@ export * from 'react-client/src/ReactFlightClientConfigBrowser'; export * from 'react-server-dom-webpack/src/ReactFlightClientConfigWebpackBundler'; export * from 'react-dom-bindings/src/shared/ReactFlightClientConfigDOM'; +export const usedWithSSR = false; diff --git a/packages/react-client/src/forks/ReactFlightClientConfig.dom-bun.js b/packages/react-client/src/forks/ReactFlightClientConfig.dom-bun.js index 64200788f1966..0ad00d57cdac4 100644 --- a/packages/react-client/src/forks/ReactFlightClientConfig.dom-bun.js +++ b/packages/react-client/src/forks/ReactFlightClientConfig.dom-bun.js @@ -20,3 +20,4 @@ export const resolveClientReference: any = null; export const resolveServerReference: any = null; export const preloadModule: any = null; export const requireModule: any = null; +export const usedWithSSR = true; diff --git a/packages/react-client/src/forks/ReactFlightClientConfig.dom-edge-webpack.js b/packages/react-client/src/forks/ReactFlightClientConfig.dom-edge-webpack.js index a51bc8f1c2f77..212290670bd57 100644 --- a/packages/react-client/src/forks/ReactFlightClientConfig.dom-edge-webpack.js +++ b/packages/react-client/src/forks/ReactFlightClientConfig.dom-edge-webpack.js @@ -10,3 +10,4 @@ export * from 'react-client/src/ReactFlightClientConfigBrowser'; export * from 'react-server-dom-webpack/src/ReactFlightClientConfigWebpackBundler'; export * from 'react-dom-bindings/src/shared/ReactFlightClientConfigDOM'; +export const usedWithSSR = true; diff --git a/packages/react-client/src/forks/ReactFlightClientConfig.dom-legacy.js b/packages/react-client/src/forks/ReactFlightClientConfig.dom-legacy.js index a51bc8f1c2f77..212290670bd57 100644 --- a/packages/react-client/src/forks/ReactFlightClientConfig.dom-legacy.js +++ b/packages/react-client/src/forks/ReactFlightClientConfig.dom-legacy.js @@ -10,3 +10,4 @@ export * from 'react-client/src/ReactFlightClientConfigBrowser'; export * from 'react-server-dom-webpack/src/ReactFlightClientConfigWebpackBundler'; export * from 'react-dom-bindings/src/shared/ReactFlightClientConfigDOM'; +export const usedWithSSR = true; diff --git a/packages/react-client/src/forks/ReactFlightClientConfig.dom-node-esm.js b/packages/react-client/src/forks/ReactFlightClientConfig.dom-node-esm.js index a2307ca3155f5..a4a68b8773170 100644 --- a/packages/react-client/src/forks/ReactFlightClientConfig.dom-node-esm.js +++ b/packages/react-client/src/forks/ReactFlightClientConfig.dom-node-esm.js @@ -11,3 +11,4 @@ export * from 'react-client/src/ReactFlightClientConfigBrowser'; export * from 'react-server-dom-esm/src/ReactFlightClientConfigESMBundler'; export * from 'react-dom-bindings/src/shared/ReactFlightClientConfigDOM'; +export const usedWithSSR = true; diff --git a/packages/react-client/src/forks/ReactFlightClientConfig.dom-node-webpack.js b/packages/react-client/src/forks/ReactFlightClientConfig.dom-node-webpack.js index 4529bdb4e1fea..4df4617caec67 100644 --- a/packages/react-client/src/forks/ReactFlightClientConfig.dom-node-webpack.js +++ b/packages/react-client/src/forks/ReactFlightClientConfig.dom-node-webpack.js @@ -10,3 +10,4 @@ export * from 'react-client/src/ReactFlightClientConfigNode'; export * from 'react-server-dom-webpack/src/ReactFlightClientConfigWebpackBundler'; export * from 'react-dom-bindings/src/shared/ReactFlightClientConfigDOM'; +export const usedWithSSR = true; diff --git a/packages/react-client/src/forks/ReactFlightClientConfig.dom-node.js b/packages/react-client/src/forks/ReactFlightClientConfig.dom-node.js index e4098fad781fc..bf0ddb29fa434 100644 --- a/packages/react-client/src/forks/ReactFlightClientConfig.dom-node.js +++ b/packages/react-client/src/forks/ReactFlightClientConfig.dom-node.js @@ -10,3 +10,4 @@ export * from 'react-client/src/ReactFlightClientConfigNode'; export * from 'react-server-dom-webpack/src/ReactFlightClientConfigNodeBundler'; export * from 'react-dom-bindings/src/shared/ReactFlightClientConfigDOM'; +export const usedWithSSR = true;