@@ -8,6 +8,8 @@ const reactMajorVersion = Number(ReactDOM.version?.split('.')[0]) || 16;
88// TODO: once we require React 18, we can remove this and inline everything guarded by it.
99export const supportsRootApi = reactMajorVersion >= 18 ;
1010
11+ export const supportsHydrate = supportsRootApi || 'hydrate' in ReactDOM ;
12+
1113// TODO: once React dependency is updated to >= 18, we can remove this and just
1214// import ReactDOM from 'react-dom/client';
1315let reactDomClient : typeof import ( 'react-dom/client' ) ;
@@ -24,7 +26,7 @@ if (supportsRootApi) {
2426 }
2527}
2628
27- export const ReactDOMServer = ( ( ) => {
29+ export const ReactDOMServer = /* #__PURE */ ( ( ) => {
2830 try {
2931 // in react-dom v18+
3032 return require ( 'react-dom/server' ) as typeof import ( 'react-dom/server' ) ;
@@ -41,15 +43,12 @@ export const ReactDOMServer = (() => {
4143
4244type HydrateOrRenderType = ( domNode : Element , reactElement : ReactElement ) => RenderReturnType ;
4345
44- /* eslint-disable @typescript-eslint/no-deprecated,@typescript-eslint/no-non-null-assertion --
46+ /* eslint-disable @typescript-eslint/no-deprecated,@typescript-eslint/no-non-null-assertion,react/no-deprecated --
4547 * while we need to support React 16
4648 */
47- const hydrateProp = 'hydrate' ;
48- const renderProp = 'render' ;
49-
5049export const reactHydrate : HydrateOrRenderType = supportsRootApi
5150 ? reactDomClient ! . hydrateRoot
52- : ( domNode , reactElement ) => ReactDOM [ hydrateProp ] ( reactElement , domNode ) ;
51+ : ( domNode , reactElement ) => ReactDOM . hydrate ( reactElement , domNode ) ;
5352
5453export function reactRender ( domNode : Element , reactElement : ReactElement ) : RenderReturnType {
5554 if ( supportsRootApi ) {
@@ -58,6 +57,11 @@ export function reactRender(domNode: Element, reactElement: ReactElement): Rende
5857 return root ;
5958 }
6059
61- return ReactDOM [ renderProp ] ( reactElement , domNode ) ;
60+ // eslint-disable-next-line react/no-render-return-value
61+ return ReactDOM . render ( reactElement , domNode ) ;
6262}
63- /* eslint-enable @typescript-eslint/no-deprecated,@typescript-eslint/no-non-null-assertion */
63+
64+ export const unmountComponentAtNode : typeof ReactDOM . unmountComponentAtNode = supportsRootApi
65+ ? // not used if we use root API
66+ ( ) => false
67+ : ReactDOM . unmountComponentAtNode ;
0 commit comments