Skip to content

Commit 2153a29

Browse files
authored
[Flight] createServerReference should export $$FORM_ACTION on the Server (#26987)
Currently, only the browser build exposes the `$$FORM_ACTION` helper. It's used for creating progressive enhancement fro Server Actions imported from Client Components. This helper is only useful in SSR builds so it should be included in the Edge/Node builds of the client. I also removed it from the browser build. 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.
1 parent 5945e06 commit 2153a29

14 files changed

+36
-11
lines changed

packages/react-client/src/ReactFlightClient.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import {
2929
readPartialStringChunk,
3030
readFinalStringChunk,
3131
createStringDecoder,
32+
usedWithSSR,
3233
} from './ReactFlightClientConfig';
3334

3435
import {
@@ -529,8 +530,10 @@ function createServerReferenceProxy<A: Iterable<any>, T>(
529530
});
530531
};
531532
// Expose encoder for use by SSR.
532-
// TODO: Only expose this in SSR builds and not the browser client.
533-
proxy.$$FORM_ACTION = encodeFormAction;
533+
if (usedWithSSR) {
534+
// Only expose this in builds that would actually use it. Not needed on the client.
535+
(proxy: any).$$FORM_ACTION = encodeFormAction;
536+
}
534537
knownServerReferences.set(proxy, metaData);
535538
return proxy;
536539
}

packages/react-client/src/ReactFlightReplyClient.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ import type {
2828
RejectedThenable,
2929
} from '../../shared/ReactTypes';
3030

31+
import {usedWithSSR} from './ReactFlightClientConfig';
32+
3133
type ReactJSONValue =
3234
| string
3335
| boolean
@@ -496,8 +498,10 @@ export function createServerReference<A: Iterable<any>, T>(
496498
return callServer(id, args);
497499
};
498500
// Expose encoder for use by SSR.
499-
// TODO: Only expose this in SSR builds and not the browser client.
500-
proxy.$$FORM_ACTION = encodeFormAction;
501+
if (usedWithSSR) {
502+
// Only expose this in builds that would actually use it. Not needed on the client.
503+
(proxy: any).$$FORM_ACTION = encodeFormAction;
504+
}
501505
knownServerReferences.set(proxy, {id: id, bound: null});
502506
return proxy;
503507
}

packages/react-client/src/forks/ReactFlightClientConfig.custom.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ export const resolveServerReference = $$$config.resolveServerReference;
3535
export const preloadModule = $$$config.preloadModule;
3636
export const requireModule = $$$config.requireModule;
3737
export const dispatchHint = $$$config.dispatchHint;
38+
export const usedWithSSR = true;
3839

3940
export opaque type Source = mixed;
4041

packages/react-client/src/forks/ReactFlightClientConfig.dom-browser.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,4 @@
1010
export * from 'react-client/src/ReactFlightClientConfigBrowser';
1111
export * from 'react-server-dom-webpack/src/ReactFlightClientConfigWebpackBundler';
1212
export * from 'react-dom-bindings/src/shared/ReactFlightClientConfigDOM';
13+
export const usedWithSSR = false;

packages/react-client/src/forks/ReactFlightClientConfig.dom-bun.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,4 @@ export const resolveClientReference: any = null;
2020
export const resolveServerReference: any = null;
2121
export const preloadModule: any = null;
2222
export const requireModule: any = null;
23+
export const usedWithSSR = true;

packages/react-client/src/forks/ReactFlightClientConfig.dom-edge-webpack.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,4 @@
1010
export * from 'react-client/src/ReactFlightClientConfigBrowser';
1111
export * from 'react-server-dom-webpack/src/ReactFlightClientConfigWebpackBundler';
1212
export * from 'react-dom-bindings/src/shared/ReactFlightClientConfigDOM';
13+
export const usedWithSSR = true;

packages/react-client/src/forks/ReactFlightClientConfig.dom-legacy.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,4 @@
1010
export * from 'react-client/src/ReactFlightClientConfigBrowser';
1111
export * from 'react-server-dom-webpack/src/ReactFlightClientConfigWebpackBundler';
1212
export * from 'react-dom-bindings/src/shared/ReactFlightClientConfigDOM';
13+
export const usedWithSSR = true;

packages/react-client/src/forks/ReactFlightClientConfig.dom-node-esm.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,4 @@
1111
export * from 'react-client/src/ReactFlightClientConfigBrowser';
1212
export * from 'react-server-dom-esm/src/ReactFlightClientConfigESMBundler';
1313
export * from 'react-dom-bindings/src/shared/ReactFlightClientConfigDOM';
14+
export const usedWithSSR = true;

packages/react-client/src/forks/ReactFlightClientConfig.dom-node-webpack.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,4 @@
1010
export * from 'react-client/src/ReactFlightClientConfigNode';
1111
export * from 'react-server-dom-webpack/src/ReactFlightClientConfigWebpackBundler';
1212
export * from 'react-dom-bindings/src/shared/ReactFlightClientConfigDOM';
13+
export const usedWithSSR = true;

packages/react-client/src/forks/ReactFlightClientConfig.dom-node.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,4 @@
1010
export * from 'react-client/src/ReactFlightClientConfigNode';
1111
export * from 'react-server-dom-webpack/src/ReactFlightClientConfigNodeBundler';
1212
export * from 'react-dom-bindings/src/shared/ReactFlightClientConfigDOM';
13+
export const usedWithSSR = true;

0 commit comments

Comments
 (0)