Skip to content

Commit 6c9a184

Browse files
committed
refactor to let react insert scripts
1 parent 1cb5ae5 commit 6c9a184

File tree

6 files changed

+164
-99
lines changed

6 files changed

+164
-99
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
{
22
"extends": "@parcel/config-default",
3-
"runtimes": ["...", "@parcel/runtime-rsc"]
3+
"runtimes": ["@parcel/runtime-rsc", "..."]
44
}

packages/examples/react-server-components/src/server.tsx

+5-3
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ import {injectRSCPayload} from 'rsc-html-stream/server';
66

77
// Client dependencies, used for SSR.
88
// These must run in the same environment as client components (e.g. same instance of React).
9-
import {createFromReadableStream} from 'react-server-dom-parcel/client' with {env: 'react-client'};
10-
import {renderToReadableStream as renderHTMLToReadableStream} from 'react-dom/server' with {env: 'react-client'};
9+
import {createFromReadableStream} from 'react-server-dom-parcel/client.edge' with {env: 'react-client'};
10+
import {renderToReadableStream as renderHTMLToReadableStream} from 'react-dom/server.edge' with {env: 'react-client'};
1111
import ReactClient from 'react' with {env: 'react-client'};
1212

1313
// Page components. These must have "use server-entry" so they are treated as code splitting entry points.
@@ -81,8 +81,10 @@ async function render(req, res, component, actionResult) {
8181

8282
// Use client react to render the RSC payload to HTML.
8383
let [s1, s2] = stream.tee();
84-
let data = createFromReadableStream(s1);
84+
let data;
8585
function Content() {
86+
// Important: this must be constructed inside a component for preinit scripts to be inserted.
87+
data ??= createFromReadableStream(s1);
8688
return ReactClient.use(data);
8789
}
8890

packages/packagers/js/src/index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ export default (new Packager({
6060
},
6161
);
6262

63-
let name = packageName?.contents?.name ?? '';
63+
let name = packageName?.contents ?? '';
6464
return {
6565
parcelRequireName: 'parcelRequire' + hashString(name).slice(-4),
6666
unstable_asyncBundleRuntime: Boolean(

packages/runtimes/rsc/package.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,16 @@
1818
"react-server": "./resources.js",
1919
"source": "./src/RSCRuntime.js",
2020
"default": "./lib/RSCRuntime.js"
21-
}
21+
},
22+
"./resources": "./resources.js"
2223
},
2324
"engines": {
2425
"node": ">= 12.0.0",
2526
"parcel": "^2.8.3"
2627
},
2728
"dependencies": {
2829
"@parcel/plugin": "2.13.2",
30+
"@parcel/rust": "2.13.2",
2931
"@parcel/utils": "2.13.2",
3032
"nullthrows": "^1.1.1"
3133
}

0 commit comments

Comments
 (0)