Skip to content

Commit 36d01c6

Browse files
committed
Incorporate changes from facebook/react#26300
1 parent 24caf7b commit 36d01c6

File tree

7 files changed

+40
-47
lines changed

7 files changed

+40
-47
lines changed

package-lock.json

Lines changed: 19 additions & 19 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@
2626
},
2727
"dependencies": {
2828
"htmlescape": "^1.1.1",
29-
"react": "18.3.0-next-41110021f-20230301",
30-
"react-dom": "18.3.0-next-41110021f-20230301",
29+
"react": "18.3.0-next-49f741046-20230305",
30+
"react-dom": "18.3.0-next-49f741046-20230305",
3131
"react-markdown": "^8.0.5",
32-
"react-server-dom-webpack": "18.3.0-next-41110021f-20230301",
32+
"react-server-dom-webpack": "18.3.0-next-49f741046-20230305",
3333
"server-only": "^0.0.1"
3434
},
3535
"devDependencies": {

rsc-loader.cjs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,9 @@ async function rscLoader(content) {
4848
// instead of the file URL, so that it can be imported from within the RSC
4949
// worker bundle.
5050
return sourceCode.replace(
51-
/\$\$filepath: \{value: "[^"]+"\}/,
52-
() => `$$filepath: {value: ${webpack.RuntimeGlobals.moduleId}}`,
51+
/(\$\$typeof: \{value: Symbol.for\("react.server.reference"\)\},\$\$id: \{value: )"[^#]+#([^"]*)"/,
52+
(_match, prefix, exportName) =>
53+
`${prefix}${webpack.RuntimeGlobals.moduleId}+"#${exportName}"`,
5354
);
5455
}
5556

src/call-server.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
11
import type {Thenable} from 'react';
2-
import type {ServerRef} from 'react-server-dom-webpack';
32
import ReactServerDOMClient from 'react-server-dom-webpack/client.browser';
43

5-
export function callServer(ref: ServerRef, args: unknown): Thenable<unknown> {
4+
export function callServer(id: string, args: unknown): Thenable<unknown> {
65
return ReactServerDOMClient.createFromFetch(
76
fetch(`/`, {
87
method: `POST`,
9-
headers: {
10-
'accept': `text/x-component`,
11-
'x-rsc-action': JSON.stringify(ref),
12-
},
8+
headers: {'accept': `text/x-component`, 'x-rsc-action': id},
139
body: JSON.stringify(args),
1410
}),
1511
);

src/rsc-worker/index.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import {getAssetFromKV} from '@cloudflare/kv-asset-handler';
22
import staticContentManifest from '__STATIC_CONTENT_MANIFEST';
33
import * as React from 'react';
4-
import type {ServerRef, WebpackMap} from 'react-server-dom-webpack';
4+
import type {WebpackMap} from 'react-server-dom-webpack';
55
import type {ReactModel} from 'react-server-dom-webpack/server';
66
import ReactServerDOMServer from 'react-server-dom-webpack/server';
77
import {App} from '../app.js';
@@ -12,7 +12,7 @@ export interface RscWorkerEnv {
1212
__STATIC_CONTENT: {};
1313
}
1414

15-
declare var __webpack_require__: (id: string) => Record<string, unknown>;
15+
declare var __webpack_require__: (moduleId: string) => Record<string, unknown>;
1616

1717
const handleGet: ExportedHandlerFetchHandler<RscWorkerEnv> = async (
1818
request,
@@ -42,14 +42,18 @@ const handleGet: ExportedHandlerFetchHandler<RscWorkerEnv> = async (
4242
const handlePost: ExportedHandlerFetchHandler<RscWorkerEnv> = async (
4343
request,
4444
) => {
45-
const rscActionHeader = request.headers.get(`x-rsc-action`);
45+
const serverReferenceId = request.headers.get(`x-rsc-action`);
46+
const [moduleId, exportName] = serverReferenceId?.split(`#`) ?? [];
47+
48+
if (!moduleId || !exportName) {
49+
console.error(
50+
`Invalid server reference ID: ${JSON.stringify(serverReferenceId)}`,
51+
);
4652

47-
if (!rscActionHeader) {
4853
return new Response(null, {status: 400});
4954
}
5055

51-
const {id, name} = JSON.parse(rscActionHeader) as ServerRef;
52-
const action = __webpack_require__(id)[name];
56+
const action = __webpack_require__(moduleId)[exportName];
5357

5458
if (!isValidServerReference(action)) {
5559
console.error(action, `is not a valid server reference.`);

types/react-server-dom-webpack-client.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
declare module 'react-server-dom-webpack/client.browser' {
22
import type {Thenable} from 'react';
3-
import type {ServerRef, WebpackMap} from 'react-server-dom-webpack';
3+
import type {WebpackMap} from 'react-server-dom-webpack';
44

55
export interface ReactServerDomClientOptions {
66
callServer?: CallServerCallback;
77
}
88

99
export type CallServerCallback = (
10-
ref: ServerRef,
10+
id: string,
1111
args: unknown,
1212
) => Thenable<unknown>;
1313

types/react-server-dom-webpack.d.ts

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,11 @@
11
declare module 'react-server-dom-webpack' {
22
export interface WebpackMap {
3-
[filepath: string]: {
4-
[name: string]: ClientReferenceMetadata;
5-
};
3+
[id: string]: ClientReferenceMetadata;
64
}
75

86
export interface ClientReferenceMetadata {
97
id: string;
108
chunks: string[];
119
name: string;
12-
async: boolean;
13-
}
14-
15-
export interface ServerRef {
16-
id: string;
17-
name: string;
1810
}
1911
}

0 commit comments

Comments
 (0)