Skip to content

Commit 6cf9c7c

Browse files
serialize error during rsc payload generation at the RSC payload
1 parent 413e5d0 commit 6cf9c7c

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

packages/react-on-rails-pro/src/RSCRoute.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,15 @@ export type RSCRouteProps = {
7777

7878
const PromiseWrapper = ({ promise }: { promise: Promise<React.ReactNode> }) => {
7979
// React.use is available in React 18.3+
80-
return React.use(promise);
80+
const promiseResult = React.use(promise);
81+
82+
// In case that an error happened during the rendering of the RSC payload before the rendering of the component itself starts
83+
// RSC bundle will return an error object serilaized inside the RSC payload
84+
if (promiseResult instanceof Error) {
85+
throw promiseResult;
86+
}
87+
88+
return promiseResult;
8189
};
8290

8391
const RSCRoute = ({ componentName, componentProps }: RSCRouteProps): React.ReactNode => {

packages/react-on-rails-pro/src/handleErrorRSC.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
1-
import * as React from 'react';
21
import { ErrorOptions } from 'react-on-rails/types';
32
import { renderToPipeableStream } from 'react-on-rails-rsc/server.node';
43
import generateRenderingErrorMessage from 'react-on-rails/generateRenderingErrorMessage';
54

65
const handleError = (options: ErrorOptions) => {
76
const msg = generateRenderingErrorMessage(options);
8-
const reactElement = React.createElement('pre', null, msg);
9-
return renderToPipeableStream(reactElement, {
7+
return renderToPipeableStream(new Error(msg), {
108
filePathToModuleMetadata: {},
119
moduleLoading: { prefix: '', crossOrigin: null },
1210
});

0 commit comments

Comments
 (0)