Skip to content

Commit 0a2772f

Browse files
get console replay messages after promise resolves or rejects
1 parent bb9a8a2 commit 0a2772f

File tree

2 files changed

+16
-7
lines changed

2 files changed

+16
-7
lines changed

node_package/src/buildConsoleReplay.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,10 @@ declare global {
1313

1414
export function consoleReplay(): string {
1515
// console.history is a global polyfill used in server rendering.
16+
// Must use Array.isArray instead of instanceof Array the history array is defined outside the vm if node renderer is used.
17+
// In this case, the Array prototype used to define the array is not the same as the one in the global scope inside the vm.
1618
// $FlowFixMe
17-
if (!(console.history instanceof Array)) {
19+
if (!(Array.isArray(console.history))) {
1820
return '';
1921
}
2022

node_package/src/serverRenderReactComponent.ts

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,6 @@ as a renderFunction and not a simple React Function Component.`);
9999
renderingError = e;
100100
}
101101

102-
const consoleReplayScript = buildConsoleReplay();
103102
const addRenderingErrors = (resultObject: RenderResult, renderError: RenderingError) => {
104103
resultObject.renderingError = { // eslint-disable-line no-param-reassign
105104
message: renderError.message,
@@ -114,7 +113,7 @@ as a renderFunction and not a simple React Function Component.`);
114113
try {
115114
promiseResult = {
116115
html: await renderResult,
117-
consoleReplayScript,
116+
consoleReplayScript: buildConsoleReplay(),
118117
hasErrors,
119118
};
120119
} catch (e: any) {
@@ -127,7 +126,7 @@ as a renderFunction and not a simple React Function Component.`);
127126
name,
128127
serverSide: true,
129128
}),
130-
consoleReplayScript,
129+
consoleReplayScript: buildConsoleReplay(),
131130
hasErrors: true,
132131
}
133132
renderingError = e;
@@ -145,7 +144,7 @@ as a renderFunction and not a simple React Function Component.`);
145144

146145
const result = {
147146
html: renderResult,
148-
consoleReplayScript,
147+
consoleReplayScript: buildConsoleReplay(),
149148
hasErrors,
150149
} as RenderResult;
151150

@@ -157,12 +156,20 @@ as a renderFunction and not a simple React Function Component.`);
157156
}
158157

159158
const serverRenderReactComponent: typeof serverRenderReactComponentInternal = (options) => {
159+
let result: string | Promise<RenderResult> | null = null;
160160
try {
161-
return serverRenderReactComponentInternal(options);
161+
result = serverRenderReactComponentInternal(options);
162162
} finally {
163163
// Reset console history after each render.
164164
// See `RubyEmbeddedJavaScript.console_polyfill` for initialization.
165-
console.history = [];
165+
if (!result || typeof(result) === 'string') {
166+
console.history = [];
167+
} else {
168+
result.finally(() => {
169+
console.history = [];
170+
});
171+
}
166172
}
173+
return result;
167174
};
168175
export default serverRenderReactComponent;

0 commit comments

Comments
 (0)