Skip to content

Commit ff7fbfa

Browse files
Convert loadReactClientManifest to async and update RSC rendering
1 parent 8e8ebdd commit ff7fbfa

File tree

2 files changed

+8
-8
lines changed

2 files changed

+8
-8
lines changed

node_package/src/ReactOnRailsRSC.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,10 @@ const streamRenderRSCComponent = (reactElement: ReactElement, options: RSCRender
3333
};
3434

3535
const { pipeToTransform, readableStream, emitError } = transformRenderStreamChunksToResultObject(renderState);
36-
try {
36+
loadReactClientManifest(reactClientManifestFileName).then((reactClientManifest) => {
3737
const rscStream = renderToPipeableStream(
3838
reactElement,
39-
loadReactClientManifest(reactClientManifestFileName),
39+
reactClientManifest,
4040
{
4141
onError: (err) => {
4242
const error = convertToError(err);
@@ -50,15 +50,15 @@ const streamRenderRSCComponent = (reactElement: ReactElement, options: RSCRender
5050
}
5151
);
5252
pipeToTransform(rscStream);
53-
return readableStream;
54-
} catch (e) {
53+
}).catch((e) => {
5554
const error = convertToError(e);
5655
renderState.hasErrors = true;
5756
renderState.error = error;
5857
const htmlResult = handleError({ e: error, name: options.name, serverSide: true });
5958
const jsonResult = JSON.stringify(createResultObject(htmlResult, buildConsoleReplay(), renderState));
6059
return stringToStream(jsonResult);
61-
}
60+
});
61+
return readableStream;
6262
};
6363

6464
ReactOnRails.serverRenderRSCReactComponent = (options: RSCRenderParams) => {

node_package/src/loadReactClientManifest.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
import path from 'path';
2-
import fs from 'fs';
2+
import fs from 'fs/promises';
33

44
const loadedReactClientManifests = new Map<string, Record<string, unknown>>();
55

6-
export default function loadReactClientManifest(reactClientManifestFileName: string) {
6+
export default async function loadReactClientManifest(reactClientManifestFileName: string) {
77
// React client manifest is uploaded to node renderer as an asset.
88
// Renderer copies assets to the same place as the server-bundle.js and rsc-bundle.js.
99
// Thus, the __dirname of this code is where we can find the manifest file.
1010
const manifestPath = path.resolve(__dirname, reactClientManifestFileName);
1111
if (!loadedReactClientManifests.has(manifestPath)) {
1212
// TODO: convert to async
1313
try {
14-
const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
14+
const manifest = JSON.parse(await fs.readFile(manifestPath, 'utf8'));
1515
loadedReactClientManifests.set(manifestPath, manifest);
1616
} catch (error) {
1717
throw new Error(`Failed to load React client manifest from ${manifestPath}: ${error}`);

0 commit comments

Comments
 (0)