Skip to content

Commit 0c2313e

Browse files
make render function returns Readable stream instead of PassThrough
1 parent 2e48073 commit 0c2313e

File tree

3 files changed

+11
-10
lines changed

3 files changed

+11
-10
lines changed

node_package/src/ReactOnRails.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { ReactElement } from 'react';
2-
import type { PassThrough } from 'stream';
2+
import type { Readable } from 'stream';
33

44
import * as ClientStartup from './clientStartup';
55
import handleError from './handleError';
@@ -250,7 +250,7 @@ ctx.ReactOnRails = {
250250
* Used by server rendering by Rails
251251
* @param options
252252
*/
253-
streamServerRenderedReactComponent(options: RenderParams): PassThrough {
253+
streamServerRenderedReactComponent(options: RenderParams): Readable {
254254
return streamServerRenderedReactComponent(options);
255255
},
256256

node_package/src/serverRenderReactComponent.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import ReactDOMServer from 'react-dom/server';
2-
import { PassThrough } from 'stream';
2+
import { PassThrough, Readable } from 'stream';
33
import type { ReactElement } from 'react';
44

55
import ComponentRegistry from './ComponentRegistry';
@@ -185,17 +185,17 @@ const serverRenderReactComponent: typeof serverRenderReactComponentInternal = (o
185185
return result;
186186
};
187187

188-
const stringToStream = (str: string) => {
188+
const stringToStream = (str: string): Readable => {
189189
const stream = new PassThrough();
190190
stream.push(str);
191191
stream.push(null);
192192
return stream;
193193
};
194194

195-
export const streamServerRenderedReactComponent = (options: RenderParams) => {
195+
export const streamServerRenderedReactComponent = (options: RenderParams): Readable => {
196196
const { name, domNodeId, trace, props, railsContext, throwJsErrors } = options;
197197

198-
let renderResult: null | PassThrough = null;
198+
let renderResult: null | Readable = null;
199199

200200
try {
201201
const componentObj = ComponentRegistry.get(name);
@@ -217,8 +217,9 @@ See https://github.com/shakacode/react_on_rails#renderer-functions`);
217217
throw new Error('Server rendering of streams is not supported for server render hashes or promises.');
218218
}
219219

220-
renderResult = new PassThrough();
221-
ReactDOMServer.renderToPipeableStream(reactRenderingResult).pipe(renderResult);
220+
const renderStream = new PassThrough();
221+
ReactDOMServer.renderToPipeableStream(reactRenderingResult).pipe(renderStream);
222+
renderResult = renderStream;
222223

223224
// TODO: Add console replay script to the stream
224225
// Ensure to avoid console messages leaking between different components rendering

node_package/src/types/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { ReactElement, ReactNode, Component, ComponentType } from 'react';
2-
import type { PassThrough } from 'stream';
2+
import type { Readable } from 'stream';
33

44
// Don't import redux just for the type definitions
55
// See https://github.com/shakacode/react_on_rails/issues/1321
@@ -139,7 +139,7 @@ export interface ReactOnRails {
139139
): RenderReturnType;
140140
getComponent(name: string): RegisteredComponent;
141141
serverRenderReactComponent(options: RenderParams): null | string | Promise<RenderResult>;
142-
streamServerRenderedReactComponent(options: RenderParams): PassThrough;
142+
streamServerRenderedReactComponent(options: RenderParams): Readable;
143143
handleError(options: ErrorOptions): string | undefined;
144144
buildConsoleReplay(): string;
145145
registeredComponents(): Map<string, RegisteredComponent>;

0 commit comments

Comments
 (0)