@tanstack/router-plugin
Version:
Modern and scalable routing for React applications
50 lines (49 loc) • 1.95 kB
JavaScript
import * as template from "@babel/template";
function handleRouteUpdate(oldRoute, newRoute) {
newRoute._path = oldRoute._path;
newRoute._id = oldRoute._id;
newRoute._fullPath = oldRoute._fullPath;
newRoute._to = oldRoute._to;
newRoute.children = oldRoute.children;
newRoute.parentRoute = oldRoute.parentRoute;
const router = window.__TSR_ROUTER__;
router.routesById[newRoute.id] = newRoute;
router.routesByPath[newRoute.fullPath] = newRoute;
router.processedTree.matchCache.clear();
router.processedTree.flatCache?.clear();
router.processedTree.singleCache.clear();
router.resolvePathCache.clear();
walkReplaceSegmentTree(newRoute, router.processedTree.segmentTree);
const filter = (m) => m.routeId === oldRoute.id;
if (router.state.matches.find(filter) || router.state.pendingMatches?.find(filter)) {
router.invalidate({ filter });
}
function walkReplaceSegmentTree(route, node) {
if (node.route?.id === route.id) node.route = route;
if (node.index) walkReplaceSegmentTree(route, node.index);
node.static?.forEach((child) => walkReplaceSegmentTree(route, child));
node.staticInsensitive?.forEach(
(child) => walkReplaceSegmentTree(route, child)
);
node.dynamic?.forEach((child) => walkReplaceSegmentTree(route, child));
node.optional?.forEach((child) => walkReplaceSegmentTree(route, child));
node.wildcard?.forEach((child) => walkReplaceSegmentTree(route, child));
}
}
const routeHmrStatement = template.statement(
`
if (import.meta.hot) {
import.meta.hot.accept((newModule) => {
if (Route && newModule && newModule.Route) {
(${handleRouteUpdate.toString()})(Route, newModule.Route)
}
})
}
`,
// Disable placeholder parsing so identifiers like __TSR_ROUTER__ are treated as normal identifiers instead of template placeholders
{ placeholderPattern: false }
)();
export {
routeHmrStatement
};
//# sourceMappingURL=route-hmr-statement.js.map