diff --git a/packages/react-dom-bindings/src/server/ReactFizzConfigDOM.js b/packages/react-dom-bindings/src/server/ReactFizzConfigDOM.js index 5dd228795ca87..9eb6780fe5de1 100644 --- a/packages/react-dom-bindings/src/server/ReactFizzConfigDOM.js +++ b/packages/react-dom-bindings/src/server/ReactFizzConfigDOM.js @@ -152,8 +152,7 @@ export type RenderState = { fontPreloads: Set, highImagePreloads: Set, // usedImagePreloads: Set, - precedences: Map>, - stylePrecedences: Map, + precedences: Map, bootstrapScripts: Set, scripts: Set, bulkPreloads: Set, @@ -2158,38 +2157,23 @@ function pushLink( } } const resource = { - type: 'stylesheet', chunks: ([]: Array), state, props: resourceProps, }; resumableState.stylesMap[key] = null; if (!stylesInPrecedence) { - stylesInPrecedence = new Map(); - renderState.precedences.set(precedence, stylesInPrecedence); - const emptyStyleResource = { - type: 'style', - chunks: ([]: Array), - state: NoState, - props: { - precedence, - hrefs: ([]: Array), - }, + stylesInPrecedence = { + precedence: stringToChunk(escapeTextForBrowser(precedence)), + rules: ([]: Array), + hrefs: ([]: Array), + sheets: (new Map(): Map), }; - stylesInPrecedence.set('', emptyStyleResource); - if (__DEV__) { - if (renderState.stylePrecedences.has(precedence)) { - console.error( - 'React constructed an empty style resource when a style resource already exists for this precedence: "%s". This is a bug in React.', - precedence, - ); - } - } - renderState.stylePrecedences.set(precedence, emptyStyleResource); + renderState.precedences.set(precedence, stylesInPrecedence); } - stylesInPrecedence.set(key, resource); + stylesInPrecedence.sheets.set(key, resource); if (renderState.boundaryResources) { - renderState.boundaryResources.add(resource); + renderState.boundaryResources.sheets.add(resource); } } else { // We need to track whether this boundary should wait on this resource or not. @@ -2198,10 +2182,10 @@ function pushLink( // and then it wouldn't be recreated in the RenderState and there's no need to track // it again since we should've hoisted it to the shell already. if (stylesInPrecedence) { - const resource = stylesInPrecedence.get(key); + const resource = stylesInPrecedence.sheets.get(key); if (resource) { if (renderState.boundaryResources) { - renderState.boundaryResources.add(resource); + renderState.boundaryResources.sheets.add(resource); } } } @@ -2335,44 +2319,32 @@ function pushStyle( } const key = getResourceKey('style', href); - let resource = renderState.stylePrecedences.get(precedence); + let stylesInPrecedence = renderState.precedences.get(precedence); if (!resumableState.stylesMap.hasOwnProperty(key)) { - if (!resource) { - resource = { - type: 'style', - chunks: [], - state: NoState, - props: { - precedence, - hrefs: [href], - }, + if (!stylesInPrecedence) { + stylesInPrecedence = { + precedence: stringToChunk(escapeTextForBrowser(precedence)), + rules: ([]: Array), + hrefs: [stringToChunk(escapeTextForBrowser(href))], + sheets: (new Map(): Map), }; - renderState.stylePrecedences.set(precedence, resource); - const stylesInPrecedence: Map = new Map(); - stylesInPrecedence.set('', resource); - if (__DEV__) { - if (renderState.precedences.has(precedence)) { - console.error( - 'React constructed a new style precedence set when one already exists for this precedence: "%s". This is a bug in React.', - precedence, - ); - } - } renderState.precedences.set(precedence, stylesInPrecedence); } else { - resource.props.hrefs.push(href); + stylesInPrecedence.hrefs.push( + stringToChunk(escapeTextForBrowser(href)), + ); } resumableState.stylesMap[key] = null; - pushStyleContents(resource.chunks, props); + pushStyleContents(stylesInPrecedence.rules, props); } - if (resource) { + if (stylesInPrecedence) { // We need to track whether this boundary should wait on this resource or not. // Typically this resource should always exist since we either had it or just created // it. However, it's possible when you resume that the style has already been emitted // and then it wouldn't be recreated in the RenderState and there's no need to track // it again since we should've hoisted it to the shell already. if (renderState.boundaryResources) { - renderState.boundaryResources.add(resource); + renderState.boundaryResources.precedences.add(stylesInPrecedence); } } @@ -2546,7 +2518,6 @@ function pushImg( referrerPolicy: props.referrerPolicy, }; resource = { - type: 'preload', chunks: [], state: NoState, props: preloadProps, @@ -2903,7 +2874,6 @@ function pushScript( // We can make this