Skip to content

Commit 18fd77e

Browse files
committed
Import ReactDOMServer from reactApis instead of directly
1 parent b71851f commit 18fd77e

File tree

4 files changed

+19
-4
lines changed

4 files changed

+19
-4
lines changed

node_package/src/handleError.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import * as React from 'react';
2-
import * as ReactDOMServer from 'react-dom/server';
2+
import { ReactDOMServer } from './reactApis.cts';
33
import type { ErrorOptions } from './types/index.ts';
44

55
function handleRenderFunctionIssue(options: ErrorOptions): string {

node_package/src/reactApis.cts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/* eslint-disable global-require,@typescript-eslint/no-require-imports */
12
import * as ReactDOM from 'react-dom';
23
import type { ReactElement } from 'react';
34
import type { RenderReturnType } from './types/index.ts' with { 'resolution-mode': 'import' };
@@ -15,7 +16,6 @@ if (supportsRootApi) {
1516
// https://github.com/webpack/webpack/issues/339#issuecomment-47739112
1617
// Unfortunately, it only converts the error to a warning.
1718
try {
18-
// eslint-disable-next-line global-require,@typescript-eslint/no-require-imports
1919
reactDomClient = require('react-dom/client') as typeof import('react-dom/client');
2020
} catch (_e) {
2121
// We should never get here, but if we do, we'll just use the default ReactDOM
@@ -24,6 +24,21 @@ if (supportsRootApi) {
2424
}
2525
}
2626

27+
export const ReactDOMServer = (() => {
28+
try {
29+
// in react-dom v18+
30+
return require('react-dom/server') as typeof import('react-dom/server');
31+
} catch (_e) {
32+
try {
33+
// in react-dom v16 or 17
34+
return require('react-dom/server.js') as typeof import('react-dom/server');
35+
} catch (_e2) {
36+
// this should never happen, one of the above requires should succeed
37+
return undefined as unknown as typeof import('react-dom/server');
38+
}
39+
}
40+
})();
41+
2742
type HydrateOrRenderType = (domNode: Element, reactElement: ReactElement) => RenderReturnType;
2843

2944
/* eslint-disable @typescript-eslint/no-deprecated,@typescript-eslint/no-non-null-assertion --

node_package/src/serverRenderReactComponent.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import * as React from 'react';
2-
import * as ReactDOMServer from 'react-dom/server';
32
import type { ReactElement } from 'react';
43

54
import * as ComponentRegistry from './ComponentRegistry.ts';
65
import createReactOutput from './createReactOutput.ts';
76
import { isPromise, isServerRenderHash } from './isServerRenderResult.ts';
87
import buildConsoleReplay from './buildConsoleReplay.ts';
98
import handleError from './handleError.ts';
9+
import { ReactDOMServer } from './reactApis.cts';
1010
import { createResultObject, convertToError, validateComponent } from './serverRenderUtils.ts';
1111
import type {
1212
CreateReactOutputResult,

node_package/src/streamServerRenderedReactComponent.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
import * as React from 'react';
2-
import * as ReactDOMServer from 'react-dom/server';
32
import { PassThrough, Readable } from 'stream';
43

54
import * as ComponentRegistry from './ComponentRegistry.ts';
65
import createReactOutput from './createReactOutput.ts';
76
import { isPromise, isServerRenderHash } from './isServerRenderResult.ts';
87
import buildConsoleReplay from './buildConsoleReplay.ts';
98
import handleError from './handleError.ts';
9+
import { ReactDOMServer } from './reactApis.cts';
1010
import { createResultObject, convertToError, validateComponent } from './serverRenderUtils.ts';
1111
import type { RenderParams, StreamRenderState, StreamableComponentResult } from './types/index.ts';
1212

0 commit comments

Comments
 (0)