From dfe709441900b6062d91d938134740e2d308ecb0 Mon Sep 17 00:00:00 2001 From: Sebastian Markbage Date: Mon, 26 Apr 2021 21:56:42 -0400 Subject: [PATCH] Switch the isPrimaryRender flag based on the stream config It's possible for Fizz and Fiber to co-exist for example. If they both end up using the same context field then that can clash. It's also possible for e.g. DOM and ART to co-exist on the server. Or Legacy Fizz DOM and Modern Fizz DOM. Instead of protecting against every possible clash, I just took the most common one. E.g. renderToString clashing with either Fiber or Modern Fizz. I flip it in the legacy stream config. --- packages/react-dom/src/server/ReactDOMServerFormatConfig.js | 3 ++- packages/react-server/src/ReactServerStreamConfigBrowser.js | 2 ++ packages/react-server/src/ReactServerStreamConfigNode.js | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/react-dom/src/server/ReactDOMServerFormatConfig.js b/packages/react-dom/src/server/ReactDOMServerFormatConfig.js index 72e984f1282..3e77b7ce35a 100644 --- a/packages/react-dom/src/server/ReactDOMServerFormatConfig.js +++ b/packages/react-dom/src/server/ReactDOMServerFormatConfig.js @@ -23,6 +23,7 @@ import { writeChunk, stringToChunk, stringToPrecomputedChunk, + isPrimaryStreamConfig, } from 'react-server/src/ReactServerStreamConfig'; import { @@ -50,7 +51,7 @@ import isArray from 'shared/isArray'; // Used to distinguish these contexts from ones used in other renderers. // E.g. this can be used to distinguish legacy renderers from this modern one. -export const isPrimaryRenderer = true; +export const isPrimaryRenderer = isPrimaryStreamConfig; // Per response, global state that is not contextual to the rendering subtree. export type ResponseState = { diff --git a/packages/react-server/src/ReactServerStreamConfigBrowser.js b/packages/react-server/src/ReactServerStreamConfigBrowser.js index 3714be43027..b669002aff7 100644 --- a/packages/react-server/src/ReactServerStreamConfigBrowser.js +++ b/packages/react-server/src/ReactServerStreamConfigBrowser.js @@ -12,6 +12,8 @@ export type Destination = ReadableStreamController; export type PrecomputedChunk = Uint8Array; export type Chunk = Uint8Array; +export const isPrimaryStreamConfig = true; + export function scheduleWork(callback: () => void) { callback(); } diff --git a/packages/react-server/src/ReactServerStreamConfigNode.js b/packages/react-server/src/ReactServerStreamConfigNode.js index 4329554b7f0..c44d5b8ee65 100644 --- a/packages/react-server/src/ReactServerStreamConfigNode.js +++ b/packages/react-server/src/ReactServerStreamConfigNode.js @@ -21,6 +21,8 @@ export type Destination = Writable & MightBeFlushable; export type PrecomputedChunk = Uint8Array; export type Chunk = string; +export const isPrimaryStreamConfig = true; + export function scheduleWork(callback: () => void) { setImmediate(callback); }