mirror of
https://github.com/pbakaus/impeccable.git
synced 2026-09-18 00:56:30 +03:00
Live mode had no TanStack coverage: a TanStack Start user hit disconnects and static previews because there is no static index.html to inject and no adapter for the SSR root document. - New tanstack-adapter.mjs, modeled on the SvelteKit/Nuxt adapters: detects a TanStack Start project (@tanstack/react-start + src/routes/__root.tsx) and patches the __root document to mount a generated dev-only React component (src/impeccable/ImpeccableLiveRoot) that appends the live bundle on the client after hydration, carrying the ?token= param via buildLiveScriptSrc. Patch/unpatch round-trips byte-for-byte and is idempotent; refuses to clobber an unmanaged file at the component path. - Wire detection into live-inject.mjs (insert + remove + gitignore), ordered so SvelteKit/Nuxt win and a plain TanStack Router SPA falls through to the baseline Vite index.html path. - tanstack-router-vite fixture (baseline, no adapter) and tanstack-start fixture (SSR adapter), both with runtime blocks. Both pass the full live-e2e cycle (handshake, steer, pick, Go, cycle, accept, carbonize, reloadProbe). - Unit tests for detection + patch round-trip + apply/remove; tanstack-start branches in framework-fixtures.test.mjs; live.md framework table + adapter note. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
38 lines
988 B
React
38 lines
988 B
React
import { StrictMode } from 'react';
|
|
import { createRoot } from 'react-dom/client';
|
|
import {
|
|
createRootRoute,
|
|
createRoute,
|
|
createRouter,
|
|
RouterProvider,
|
|
Outlet,
|
|
Link,
|
|
} from '@tanstack/react-router';
|
|
import Home from './routes/Home.jsx';
|
|
import About from './routes/About.jsx';
|
|
import './styles.css';
|
|
|
|
const rootRoute = createRootRoute({
|
|
component: () => (
|
|
<>
|
|
<nav className="nav">
|
|
<Link to="/">Home</Link>
|
|
<Link to="/about" data-testid="nav-about">About</Link>
|
|
</nav>
|
|
<Outlet />
|
|
</>
|
|
),
|
|
});
|
|
|
|
const indexRoute = createRoute({ getParentRoute: () => rootRoute, path: '/', component: Home });
|
|
const aboutRoute = createRoute({ getParentRoute: () => rootRoute, path: '/about', component: About });
|
|
|
|
const routeTree = rootRoute.addChildren([indexRoute, aboutRoute]);
|
|
const router = createRouter({ routeTree });
|
|
|
|
createRoot(document.getElementById('root')).render(
|
|
<StrictMode>
|
|
<RouterProvider router={router} />
|
|
</StrictMode>,
|
|
);
|