Skip to content

Commit 009f69e

Browse files
linting
1 parent cb1683d commit 009f69e

File tree

9 files changed

+36
-30
lines changed

9 files changed

+36
-30
lines changed

node_package/src/RSCClientRoot.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import * as ReactDOMClient from 'react-dom/client';
77
import { createFromReadableStream } from 'react-on-rails-rsc/client';
88
import { fetch } from './utils';
99
import transformRSCStreamAndReplayConsoleLogs from './transformRSCStreamAndReplayConsoleLogs';
10-
import { RailsContext, RenderFunction } from './types';
10+
import { RailsContext, RenderFunction, RenderResult } from './types';
1111

1212
const { use } = React;
1313

@@ -44,14 +44,14 @@ const fetchRSC = ({ componentName, rscPayloadGenerationUrlPath, componentProps }
4444
};
4545

4646
const createRSCStreamFromPage = () => {
47-
let streamController: ReadableStreamController<unknown> | undefined;
48-
const stream = new ReadableStream({
47+
let streamController: ReadableStreamController<RenderResult> | undefined;
48+
const stream = new ReadableStream<RenderResult>({
4949
start(controller) {
5050
if (typeof window === 'undefined') {
5151
return;
5252
}
5353
const handleChunk = (chunk: unknown) => {
54-
controller.enqueue(chunk);
54+
controller.enqueue(chunk as RenderResult);
5555
};
5656
if (!window.__FLIGHT_DATA) {
5757
window.__FLIGHT_DATA = [];

node_package/src/RSCPayloadContainer.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ export default function RSCPayloadContainerWrapper({ RSCPayloadStream }: RSCPayl
5050
const [chunkPromises] = React.useState<Promise<StreamChunk>[]>(() => {
5151
const promises: Promise<StreamChunk>[] = [];
5252
let resolveCurrentPromise: (streamChunk: StreamChunk) => void = () => {};
53-
let rejectCurrentPromise: (error: Error) => void = () => {};
53+
let rejectCurrentPromise: (error: unknown) => void = () => {};
5454
const decoder = new TextDecoder();
5555

5656
const createNewPromise = () => {
@@ -64,7 +64,7 @@ export default function RSCPayloadContainerWrapper({ RSCPayloadStream }: RSCPayl
6464

6565
createNewPromise();
6666
RSCPayloadStream.on('data', (streamChunk) => {
67-
resolveCurrentPromise({ chunk: decoder.decode(streamChunk), isLastChunk: false });
67+
resolveCurrentPromise({ chunk: decoder.decode(streamChunk as Uint8Array), isLastChunk: false });
6868
createNewPromise();
6969
});
7070

node_package/src/RSCServerRoot.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import * as React from 'react';
22
import { createFromNodeStream } from 'react-on-rails-rsc/client.node';
3+
import { PassThrough } from 'stream';
34
import type { RenderFunction, RailsContext } from './types';
45
import transformRSCStream from './transformRSCNodeStreamAndReplayConsoleLogs';
56
import loadJsonFile from './loadJsonFile';
67
import RSCPayloadContainer from './RSCPayloadContainer';
7-
import { PassThrough } from 'stream';
88

99
declare global {
1010
function generateRSCPayload(

node_package/src/ReactOnRails.client.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,7 @@ ctx.ReactOnRails = {
337337
},
338338

339339
resetOptions(): void {
340-
this.options = Object.assign({}, DEFAULT_OPTIONS);
340+
this.options = { ...DEFAULT_OPTIONS };
341341
},
342342

343343
isRSCBundle: false,

node_package/src/createReactOutput.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ work if you return JSX. Update by wrapping the result JSX of ${name} in a fat ar
2525
}
2626

2727
// If a component, then wrap in an element
28-
const reactComponent = renderFunctionResult as ReactComponent;
28+
const reactComponent = renderFunctionResult;
2929
return React.createElement(reactComponent, props);
3030
}
3131

node_package/src/loadJsonFile.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ export default async function loadJsonFile(fileName: string) {
1515
}
1616

1717
try {
18-
const file = JSON.parse(await fs.readFile(filePath, 'utf8'));
18+
const file = JSON.parse(await fs.readFile(filePath, 'utf8')) as LoadedJsonFile;
1919
loadedJsonFiles.set(filePath, file);
2020
return file;
2121
} catch (error) {

node_package/src/registerServerComponent/server.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ const registerServerComponent = (components: Record<string, ReactComponent>) =>
3131
railsContext?: RailsContext,
3232
) => RSCServerRoot({ componentName, componentProps }, railsContext);
3333
}
34-
return ReactOnRails.register(componentsWrappedInRSCServerRoot);
34+
ReactOnRails.register(componentsWrappedInRSCServerRoot);
3535
};
3636

3737
export default registerServerComponent;

node_package/src/transformRSCNodeStreamAndReplayConsoleLogs.ts

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ export default function transformRSCStream(stream: NodeJS.ReadableStream): NodeJ
77
const htmlExtractor = new Transform({
88
transform(oneOrMoreChunks, _, callback) {
99
try {
10-
const decodedChunk = lastIncompleteChunk + decoder.decode(oneOrMoreChunks);
10+
const decodedChunk = lastIncompleteChunk + decoder.decode(oneOrMoreChunks as Uint8Array);
1111
const separateChunks = decodedChunk.split('\n').filter((chunk) => chunk.trim() !== '');
1212

1313
if (!decodedChunk.endsWith('\n')) {
@@ -27,11 +27,5 @@ export default function transformRSCStream(stream: NodeJS.ReadableStream): NodeJ
2727
},
2828
});
2929

30-
try {
31-
return stream.pipe(htmlExtractor);
32-
} catch (error) {
33-
throw new Error(
34-
`Error transforming RSC stream (${stream.constructor.name}), (stream: ${stream}), stringified stream: ${JSON.stringify(stream)}, error: ${error}`,
35-
);
36-
}
30+
return stream.pipe(htmlExtractor);
3731
}

node_package/tests/streamServerRenderedReactComponent.test.jsx

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ describe('streamServerRenderedReactComponent', () => {
115115
it('streamServerRenderedReactComponent streams the rendered component', async () => {
116116
const { renderResult, chunks } = setupStreamTest();
117117
await new Promise((resolve) => {
118-
renderResult.on('end', resolve);
118+
renderResult.once('end', resolve);
119119
});
120120

121121
expect(chunks).toHaveLength(2);
@@ -134,7 +134,7 @@ describe('streamServerRenderedReactComponent', () => {
134134
const onError = jest.fn();
135135
renderResult.on('error', onError);
136136
await new Promise((resolve) => {
137-
renderResult.on('end', resolve);
137+
renderResult.once('end', resolve);
138138
});
139139

140140
expect(onError).toHaveBeenCalled();
@@ -150,7 +150,7 @@ describe('streamServerRenderedReactComponent', () => {
150150
const onError = jest.fn();
151151
renderResult.on('error', onError);
152152
await new Promise((resolve) => {
153-
renderResult.on('end', resolve);
153+
renderResult.once('end', resolve);
154154
});
155155

156156
expect(onError).not.toHaveBeenCalled();
@@ -166,7 +166,7 @@ describe('streamServerRenderedReactComponent', () => {
166166
const onError = jest.fn();
167167
renderResult.on('error', onError);
168168
await new Promise((resolve) => {
169-
renderResult.on('end', resolve);
169+
renderResult.once('end', resolve);
170170
});
171171

172172
expect(onError).toHaveBeenCalled();
@@ -187,7 +187,7 @@ describe('streamServerRenderedReactComponent', () => {
187187
const onError = jest.fn();
188188
renderResult.on('error', onError);
189189
await new Promise((resolve) => {
190-
renderResult.on('end', resolve);
190+
renderResult.once('end', resolve);
191191
});
192192

193193
expect(onError).not.toHaveBeenCalled();
@@ -207,7 +207,9 @@ describe('streamServerRenderedReactComponent', () => {
207207
'streams a component from a %s that resolves to a React component',
208208
async (componentType) => {
209209
const { renderResult, chunks } = setupStreamTest({ componentType });
210-
await new Promise((resolve) => renderResult.on('end', resolve));
210+
await new Promise((resolve) => {
211+
renderResult.once('end', resolve);
212+
});
211213

212214
expect(chunks).toHaveLength(2);
213215
expect(chunks[0].html).toContain('Header In The Shell');
@@ -225,7 +227,9 @@ describe('streamServerRenderedReactComponent', () => {
225227
'handles sync errors in the %s',
226228
async (componentType) => {
227229
const { renderResult, chunks } = setupStreamTest({ componentType, throwSyncError: true });
228-
await new Promise((resolve) => renderResult.on('end', resolve));
230+
await new Promise((resolve) => {
231+
renderResult.once('end', resolve);
232+
});
229233

230234
expect(chunks).toHaveLength(1);
231235
expect(chunks[0].html).toMatch(/<pre>Exception in rendering[.\s\S]*Sync Error[.\s\S]*<\/pre>/);
@@ -239,7 +243,9 @@ describe('streamServerRenderedReactComponent', () => {
239243
'handles async errors in the %s',
240244
async (componentType) => {
241245
const { renderResult, chunks } = setupStreamTest({ componentType, throwAsyncError: true });
242-
await new Promise((resolve) => renderResult.on('end', resolve));
246+
await new Promise((resolve) => {
247+
renderResult.once('end', resolve);
248+
});
243249

244250
expect(chunks.length).toBeGreaterThanOrEqual(2);
245251
expect(chunks[0].html).toContain('Header In The Shell');
@@ -257,7 +263,9 @@ describe('streamServerRenderedReactComponent', () => {
257263
'handles error in the %s',
258264
async (componentType) => {
259265
const { renderResult, chunks } = setupStreamTest({ componentType });
260-
await new Promise((resolve) => renderResult.on('end', resolve));
266+
await new Promise((resolve) => {
267+
renderResult.once('end', resolve);
268+
});
261269

262270
expect(chunks).toHaveLength(1);
263271
const errorMessage =
@@ -279,7 +287,9 @@ describe('streamServerRenderedReactComponent', () => {
279287
const { renderResult, chunks } = setupStreamTest({ componentType, throwJsErrors: true });
280288
const onError = jest.fn();
281289
renderResult.on('error', onError);
282-
await new Promise((resolve) => renderResult.on('end', resolve));
290+
await new Promise((resolve) => {
291+
renderResult.once('end', resolve);
292+
});
283293

284294
expect(chunks).toHaveLength(1);
285295
const errorMessage =
@@ -313,7 +323,9 @@ describe('streamServerRenderedReactComponent', () => {
313323
chunks.push(expectStreamChunk(decodedText));
314324
});
315325

316-
await new Promise((resolve) => renderResult.on('end', resolve));
326+
await new Promise((resolve) => {
327+
renderResult.once('end', resolve);
328+
});
317329

318330
// Verify we have at least one chunk and it contains our string
319331
expect(chunks.length).toBeGreaterThan(0);

0 commit comments

Comments
 (0)