Skip to content

Commit dd926ba

Browse files
committed
Use react-dom/server.edge instead of .browser in Edge Runtime
1 parent f085c7a commit dd926ba

File tree

4 files changed

+22
-1
lines changed

4 files changed

+22
-1
lines changed

packages/next-swc/crates/next-core/src/next_import_map.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,12 @@ pub async fn get_next_edge_import_map(
370370
) -> Result<Vc<ImportMap>> {
371371
let mut import_map = ImportMap::empty();
372372

373+
// https://github.com/vercel/next.js/blob/e1c0f63520d7fc39ce0eab60333d311c90610414/packages/next/src/build/create-compiler-aliases.ts#L121-L125
374+
import_map.insert_exact_alias(
375+
"react-dom/server.browser",
376+
request_to_import_mapping(project_path, "react-dom/server.edge"),
377+
);
378+
373379
// https://github.com/vercel/next.js/blob/786ef25e529e1fb2dda398aebd02ccbc8d0fb673/packages/next/src/build/webpack-config.ts#L815-L861
374380

375381
// Alias next/dist imports to next/dist/esm assets

packages/next/src/build/create-compiler-aliases.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,12 @@ export function createWebpackAliases({
118118
}
119119
: undefined),
120120

121+
'react-dom/server.browser$': isEdgeServer
122+
? // This is masking userspace errors where .browser is imported in the Edge runtime
123+
// But we're also making that mistake so maybe it's good to fix for everybody?
124+
'react-dom/server.edge'
125+
: 'react-dom/server.browser',
126+
121127
'styled-jsx/style$': defaultOverrides['styled-jsx/style'],
122128
'styled-jsx$': defaultOverrides['styled-jsx'],
123129

@@ -292,6 +298,8 @@ export function createRSCAliases(
292298
'react/compiler-runtime$': `next/dist/server/route-modules/app-page/vendored/${layer}/react-compiler-runtime`,
293299
react$: `next/dist/server/route-modules/app-page/vendored/${layer}/react`,
294300
'react-dom$': `next/dist/server/route-modules/app-page/vendored/${layer}/react-dom`,
301+
// FIXME(NEXT-3539): react-dom/server should be aliased to react-dom/server.react-server
302+
// 'react-dom/server$': `next/dist/compiled/react-dom${bundledReactChannel}/server.react-server.js`,
295303
'react-server-dom-webpack/server.edge$': `next/dist/server/route-modules/app-page/vendored/${layer}/react-server-dom-webpack-server-edge`,
296304
'react-server-dom-webpack/server.node$': `next/dist/server/route-modules/app-page/vendored/${layer}/react-server-dom-webpack-server-node`,
297305
})
@@ -312,6 +320,8 @@ export function createRSCAliases(
312320
'next/dist/compiled/react/jsx-dev-runtime$': `next/dist/compiled/react${bundledReactChannel}/jsx-dev-runtime.react-server`,
313321
'next/dist/compiled/react-experimental/jsx-dev-runtime$': `next/dist/compiled/react-experimental/jsx-dev-runtime.react-server`,
314322
'react-dom$': `next/dist/compiled/react-dom${bundledReactChannel}/react-dom.react-server`,
323+
// FIXME(NEXT-3539): react-dom/server should be aliased to react-dom/server.react-server
324+
// 'react-dom/server$': `next/dist/compiled/react-dom${bundledReactChannel}/server.react-server.js`,
315325
'next/dist/compiled/react-dom$': `next/dist/compiled/react-dom${bundledReactChannel}/react-dom.react-server`,
316326
'next/dist/compiled/react-dom-experimental$': `next/dist/compiled/react-dom-experimental/react-dom.react-server`,
317327
})

packages/next/src/server/render.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ import type { Revalidate, SwrDelta } from './lib/revalidate'
4141
import type { COMPILER_NAMES } from '../shared/lib/constants'
4242

4343
import React, { type JSX } from 'react'
44+
// This is actually aliased to `react-dom/server.edge` in Edge Runtime
4445
import ReactDOMServer from 'react-dom/server.browser'
4546
import { StyleRegistry, createStyleRegistry } from 'styled-jsx'
4647
import {

packages/next/src/server/stream-utils/node-web-streams-helper.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,11 @@ export function renderToInitialFizzStream({
188188
element,
189189
streamOptions,
190190
}: {
191-
ReactDOMServer: typeof import('react-dom/server.edge')
191+
ReactDOMServer: Pick<
192+
// TODO: Should be a union with typeof import('react-dom/server.browser') but .browser is not typed at all.
193+
typeof import('react-dom/server.edge'),
194+
'renderToReadableStream'
195+
>
192196
element: React.ReactElement
193197
streamOptions?: any
194198
}): Promise<ReactReadableStream> {

0 commit comments

Comments
 (0)