From e52afc34b6f8a6622bf2a273be30c24a6988b520 Mon Sep 17 00:00:00 2001 From: Hendrik Liebau Date: Fri, 17 May 2024 10:46:01 +0200 Subject: [PATCH] [Flight] Add failing test to reproduce issue with `Object.freeze` --- .../__tests__/ReactFlightDOMBrowser-test.js | 56 +++++++++++++++++++ .../src/__tests__/utils/WebpackMock.js | 5 ++ 2 files changed, 61 insertions(+) diff --git a/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMBrowser-test.js b/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMBrowser-test.js index 55ccb44fb041c..1c11dda49c5f7 100644 --- a/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMBrowser-test.js +++ b/packages/react-server-dom-webpack/src/__tests__/ReactFlightDOMBrowser-test.js @@ -198,6 +198,62 @@ describe('ReactFlightDOMBrowser', () => { }); }); + it('should resolve client components (with async chunks) when referenced in props', async () => { + let resolve; + const chunkPromise = new Promise(r => (resolve = r)); + + function ClientOuter({Component, children}) { + return {children}; + } + + function ClientInner({children}) { + return {children}; + } + + const ClientOuterRef = clientExports(ClientOuter); + + const ClientInnerRef = clientExports( + ClientInner, + '42', + '/test.js', + chunkPromise, + ); + + function Server() { + return ( + + Hello, World! + + ); + } + + const stream = ReactServerDOMServer.renderToReadableStream( + , + webpackMap, + ); + + function ClientRoot({response}) { + return use(response); + } + + const response = ReactServerDOMClient.createFromReadableStream(stream); + const container = document.createElement('div'); + const root = ReactDOMClient.createRoot(container); + + await act(() => { + root.render(); + }); + + expect(container.innerHTML).toBe(''); + + await act(() => { + // Resolve async client component chunks. + resolve(); + }); + + expect(container.innerHTML).toBe('Hello, World!'); + }); + it('should progressively reveal server components', async () => { let reportedErrors = []; diff --git a/packages/react-server-dom-webpack/src/__tests__/utils/WebpackMock.js b/packages/react-server-dom-webpack/src/__tests__/utils/WebpackMock.js index cf21030834438..4527118c1de8b 100644 --- a/packages/react-server-dom-webpack/src/__tests__/utils/WebpackMock.js +++ b/packages/react-server-dom-webpack/src/__tests__/utils/WebpackMock.js @@ -69,10 +69,15 @@ exports.clientExports = function clientExports( moduleExports, chunkId, chunkFilename, + blockOnChunk, ) { const chunks = []; if (chunkId) { chunks.push(chunkId, chunkFilename); + + if (blockOnChunk) { + webpackChunkMap[chunkId] = blockOnChunk; + } } const idx = '' + webpackModuleIdx++; webpackClientModules[idx] = moduleExports;