From 2ea3f3a61f488a2045eb17e0e2dc63a7848f2ba1 Mon Sep 17 00:00:00 2001 From: Josh Larson Date: Wed, 19 Jan 2022 15:36:28 -0600 Subject: [PATCH] wip: fix reentrant error with ReadableStreams in RSC --- .../src/foundation/ShopifyProvider/README.md | 23 +++++++++++++++++++ ...t-server-dom-vite-writer.browser.server.js | 4 ++++ 2 files changed, 27 insertions(+) create mode 100644 packages/hydrogen/src/foundation/ShopifyProvider/README.md diff --git a/packages/hydrogen/src/foundation/ShopifyProvider/README.md b/packages/hydrogen/src/foundation/ShopifyProvider/README.md new file mode 100644 index 0000000000..3d5a17d63e --- /dev/null +++ b/packages/hydrogen/src/foundation/ShopifyProvider/README.md @@ -0,0 +1,23 @@ + + +The `ShopifyProvider` component wraps your entire app and provides support for hooks. +You should place it in your app's entry point component. For example, `<App>`. + +## Example code + +```tsx +import {ShopifyProvider} from '@shopify/hydrogen'; +import shopifyConfig from '../shopify.config'; + +export default function App() { + return ( + + {/* Routes, Pages, etc */} + + ); +} +``` + +## Component type + +The `ShopifyProvider` component is a shared component, which means that it renders on both the server and the client. For more information about component types, refer to [React Server Components](/custom-storefronts/hydrogen/framework/react-server-components). diff --git a/packages/hydrogen/vendor/react-server-dom-vite/esm/react-server-dom-vite-writer.browser.server.js b/packages/hydrogen/vendor/react-server-dom-vite/esm/react-server-dom-vite-writer.browser.server.js index c6ad3b655e..8ec64afa69 100644 --- a/packages/hydrogen/vendor/react-server-dom-vite/esm/react-server-dom-vite-writer.browser.server.js +++ b/packages/hydrogen/vendor/react-server-dom-vite/esm/react-server-dom-vite-writer.browser.server.js @@ -839,7 +839,10 @@ function performWork(request) { } } +let reentrant = false; function flushCompletedChunks(request, destination) { + if (reentrant) return; + reentrant = true; try { // We emit module chunks first in the stream so that // they can be preloaded as early as possible. @@ -893,6 +896,7 @@ function flushCompletedChunks(request, destination) { errorChunks.splice(0, i); } finally { + reentrant = false; } if (request.pendingChunks === 0) {