Skip to content

Commit d975912

Browse files
tmp
1 parent 44f5b87 commit d975912

File tree

3 files changed

+9
-3
lines changed

3 files changed

+9
-3
lines changed

Gemfile.lock

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
PATH
22
remote: .
33
specs:
4-
react_on_rails (14.0.5)
4+
react_on_rails (15.0.0.alpha.1)
55
addressable
66
connection_pool
77
execjs (~> 2.5)

lib/react_on_rails/server_rendering_pool/ruby_embedded_java_script.rb

+3-2
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ def exec_server_render_js(js_code, render_options, js_evaluator = nil)
5656
@file_index += 1
5757
end
5858
begin
59-
result = if render_options.stream?
59+
result = if render_options.stream? || render_options.rsc?
6060
js_evaluator.eval_streaming_js(js_code, render_options)
6161
else
6262
js_evaluator.eval_js(js_code, render_options)
@@ -76,7 +76,7 @@ def exec_server_render_js(js_code, render_options, js_evaluator = nil)
7676
raise ReactOnRails::Error, msg, err.backtrace
7777
end
7878

79-
return parse_result_and_replay_console_messages(result, render_options) unless render_options.stream?
79+
return parse_result_and_replay_console_messages(result, render_options) unless render_options.stream? || render_options.rsc?
8080

8181
# Streamed component is returned as stream of strings.
8282
# We need to parse each chunk and replay the console messages.
@@ -231,6 +231,7 @@ def parse_result_and_replay_console_messages(result_string, render_options)
231231
begin
232232
result = JSON.parse(result_string)
233233
rescue JSON::ParserError => e
234+
return { html: result_string }
234235
raise ReactOnRails::JsonParseError.new(parse_error: e, json: result_string)
235236
end
236237

node_package/src/ReactOnRailsRSC.ts

+5
Original file line numberDiff line numberDiff line change
@@ -62,14 +62,19 @@ See https://github.com/shakacode/react_on_rails#renderer-functions`);
6262
}
6363

6464
renderResult = new PassThrough();
65+
let finalValue = "";
6566
const streamReader = renderToReadableStream(reactRenderingResult, getBundleConfig()).getReader();
67+
const decoder = new TextDecoder();
6668
const processStream = async () => {
6769
const { done, value } = await streamReader.read();
6870
if (done) {
6971
renderResult?.push(null);
72+
// @ts-expect-error value is not typed
73+
debugConsole.log('value', finalValue);
7074
return;
7175
}
7276

77+
finalValue += decoder.decode(value);
7378
renderResult?.push(value);
7479
processStream();
7580
}

0 commit comments

Comments
 (0)