Skip to content

Commit 0374749

Browse files
Remove unused classic compiler HMR logic (#11594)
1 parent 135d8d9 commit 0374749

File tree

1 file changed

+0
-143
lines changed

1 file changed

+0
-143
lines changed

packages/react-router/lib/dom/ssr/browser.tsx

Lines changed: 0 additions & 143 deletions
Original file line numberDiff line numberDiff line change
@@ -56,146 +56,6 @@ function initSsrInfo(): void {
5656
}
5757
}
5858

59-
type HmrInfo = {
60-
abortController: AbortController | undefined;
61-
routerReadyResolve: (router: RemixRouter) => void;
62-
routerReadyPromise: Promise<RemixRouter>;
63-
};
64-
65-
let hmrInfo: HmrInfo | null = null;
66-
67-
if (
68-
import.meta &&
69-
// @ts-expect-error
70-
import.meta.hot &&
71-
typeof window !== "undefined" &&
72-
window.__remixManifest
73-
) {
74-
let resolve: (router: RemixRouter) => void;
75-
let routerReadyPromise = new Promise((r) => {
76-
resolve = r;
77-
}).catch(() => {
78-
// This is a noop catch handler to avoid unhandled promise rejection warnings
79-
// in the console. The promise is never rejected.
80-
return undefined;
81-
}) as Promise<RemixRouter>;
82-
83-
hmrInfo = {
84-
abortController: undefined,
85-
routerReadyResolve: resolve!,
86-
// There's a race condition with HMR where the remix:manifest is signaled before
87-
// the router is assigned in the RemixBrowser component. This promise gates the
88-
// HMR handler until the router is ready
89-
routerReadyPromise,
90-
};
91-
92-
// @ts-expect-error
93-
import.meta.hot.accept(
94-
"remix:manifest",
95-
async ({
96-
assetsManifest,
97-
needsRevalidation,
98-
}: {
99-
assetsManifest: AssetsManifest;
100-
needsRevalidation: Set<string>;
101-
}) => {
102-
let router = await hmrInfo!.routerReadyPromise;
103-
// This should never happen, but just in case...
104-
if (!router || !ssrInfo || !hmrInfo) {
105-
console.error(
106-
"Failed to accept HMR update because the router/ssrInfo was not ready."
107-
);
108-
return;
109-
}
110-
111-
let routeIds = [
112-
...new Set(
113-
router.state.matches
114-
.map((m) => m.route.id)
115-
.concat(Object.keys(ssrInfo!.routeModules))
116-
),
117-
];
118-
119-
hmrInfo.abortController?.abort();
120-
hmrInfo.abortController = new AbortController();
121-
let signal = hmrInfo.abortController.signal;
122-
123-
// Load new route modules that we've seen.
124-
let newRouteModules = Object.assign(
125-
{},
126-
ssrInfo.routeModules,
127-
Object.fromEntries(
128-
(
129-
await Promise.all(
130-
routeIds.map(async (id) => {
131-
if (!assetsManifest.routes[id]) {
132-
return null;
133-
}
134-
let imported = await import(
135-
assetsManifest.routes[id].module +
136-
`?t=${assetsManifest.hmr?.timestamp}`
137-
);
138-
invariant(ssrInfo, "ssrInfo unavailable for HMR update");
139-
return [
140-
id,
141-
{
142-
...imported,
143-
// react-refresh takes care of updating these in-place,
144-
// if we don't preserve existing values we'll loose state.
145-
default: imported.default
146-
? ssrInfo.routeModules[id]?.default || imported.default
147-
: imported.default,
148-
ErrorBoundary: imported.ErrorBoundary
149-
? ssrInfo.routeModules[id]?.ErrorBoundary ||
150-
imported.ErrorBoundary
151-
: imported.ErrorBoundary,
152-
HydrateFallback: imported.HydrateFallback
153-
? ssrInfo.routeModules[id]?.HydrateFallback ||
154-
imported.HydrateFallback
155-
: imported.HydrateFallback,
156-
},
157-
];
158-
})
159-
)
160-
).filter(Boolean) as [string, RouteModules[string]][]
161-
)
162-
);
163-
164-
Object.assign(ssrInfo.routeModules, newRouteModules);
165-
// Create new routes
166-
let routes = createClientRoutesWithHMRRevalidationOptOut(
167-
needsRevalidation,
168-
assetsManifest.routes,
169-
ssrInfo.routeModules,
170-
ssrInfo.context.state,
171-
ssrInfo.context.future,
172-
ssrInfo.context.isSpaMode
173-
);
174-
175-
// This is temporary API and will be more granular before release
176-
router._internalSetRoutes(routes);
177-
178-
// Wait for router to be idle before updating the manifest and route modules
179-
// and triggering a react-refresh
180-
let unsub = router.subscribe((state) => {
181-
if (state.revalidation === "idle") {
182-
unsub();
183-
// Abort if a new update comes in while we're waiting for the
184-
// router to be idle.
185-
if (signal.aborted) return;
186-
// Ensure RouterProvider setState has flushed before re-rendering
187-
setTimeout(() => {
188-
Object.assign(ssrInfo!.manifest, assetsManifest);
189-
window.$RefreshRuntime$!.performReactRefresh();
190-
}, 1);
191-
}
192-
});
193-
window.__remixRevalidation = (window.__remixRevalidation || 0) + 1;
194-
router.revalidate();
195-
}
196-
);
197-
}
198-
19959
function createHydratedRouter(): RemixRouter {
20060
initSsrInfo();
20161

@@ -330,9 +190,6 @@ function createHydratedRouter(): RemixRouter {
330190
router.createRoutesForHMR = createClientRoutesWithHMRRevalidationOptOut;
331191
window.__remixRouter = router;
332192

333-
// Notify that the router is ready for HMR
334-
hmrInfo?.routerReadyResolve(router);
335-
336193
return router;
337194
}
338195

0 commit comments

Comments
 (0)