From 018c41c003cfc20e56552555eaee32905f9a0046 Mon Sep 17 00:00:00 2001 From: zodern Date: Tue, 15 Feb 2022 18:02:21 -0600 Subject: [PATCH] Fix tracking states with circular dependencies --- packages/react-fast-refresh/client-runtime.js | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/packages/react-fast-refresh/client-runtime.js b/packages/react-fast-refresh/client-runtime.js index 47f48a75f1..63fd985781 100644 --- a/packages/react-fast-refresh/client-runtime.js +++ b/packages/react-fast-refresh/client-runtime.js @@ -94,15 +94,14 @@ module.hot.onRequire({ after: function (module) { // TODO: handle modules with errors - const beforeData = moduleInitialState.get(module); - if (!beforeData) { + const beforeStates = moduleInitialState.get(module); + const beforeState = beforeStates && beforeStates.pop(); + if (!beforeState) { return; } - moduleInitialState.delete(module); - - window.$RefreshReg$ = beforeData.prevRefreshReg; - window.$RefreshSig$ = beforeData.prevRefreshSig; + window.$RefreshReg$ = beforeState.prevRefreshReg; + window.$RefreshSig$ = beforeState.prevRefreshSig; if (isReactRefreshBoundary(module.exports)) { registerExportsForReactRefresh(module.id, module.exports); module.hot.accept(); @@ -118,6 +117,13 @@ module.exports = function setupModule (module) { return; } + let beforeStates = moduleInitialState.get(module); + + if (beforeStates === undefined) { + beforeStates = []; + moduleInitialState.set(module, beforeStates); + } + var prevRefreshReg = window.$RefreshReg$; var prevRefreshSig = window.$RefreshSig$; @@ -128,7 +134,7 @@ module.exports = function setupModule (module) { } window.$RefreshSig$ = RefreshRuntime.createSignatureFunctionForTransform; - moduleInitialState.set(module, { + beforeStates.push({ prevRefreshReg: prevRefreshReg, prevRefreshSig: prevRefreshSig });