[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-tanstack-auth-and-guards":3,"mdc-pynpit-key":52,"related-org-tanstack-auth-and-guards":9176,"related-repo-tanstack-auth-and-guards":9318},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":47,"sourceUrl":50,"mdContent":51},"auth-and-guards","implement route protection in TanStack Router","Route protection with beforeLoad, redirect()\u002Fthrow redirect(), isRedirect helper, authenticated layout routes (_authenticated), non-redirect auth (inline login), RBAC with roles and permissions, auth provider integration (Auth0, Clerk, Supabase), router context for auth state.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},"tanstack","TanStack","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Ftanstack.png",[12,16,19,22,23],{"name":13,"slug":14,"type":15},"TanStack Router","tanstack-router","tag",{"name":17,"slug":18,"type":15},"Auth","auth",{"name":20,"slug":21,"type":15},"Routing","routing",{"name":9,"slug":8,"type":15},{"name":24,"slug":25,"type":15},"Frontend","frontend",14787,"https:\u002F\u002Fgithub.com\u002FTanStack\u002Frouter","2026-07-30T05:27:07.639032",null,1761,[32,33,34,35,36,37,21,38,39,40,41,42,43,44,45,46],"framework","fullstack","javascript","react","route","router","rpc","search","searchparams","server-functions","ssr","state-management","typesafe","typescript","url",{"repoUrl":27,"stars":26,"forks":30,"topics":48,"description":49},[32,33,34,35,36,37,21,38,39,40,41,42,43,44,45,46],"🤖 A client-first, server-capable, fully type-safe router and full-stack framework for the web (React and more).","https:\u002F\u002Fgithub.com\u002FTanStack\u002Frouter\u002Ftree\u002FHEAD\u002Fpackages\u002Frouter-core\u002Fskills\u002Frouter-core\u002Fauth-and-guards","---\nname: auth-and-guards\ndescription: >-\n  Route protection with beforeLoad, redirect()\u002Fthrow redirect(),\n  isRedirect helper, authenticated layout routes (_authenticated),\n  non-redirect auth (inline login), RBAC with roles and permissions,\n  auth provider integration (Auth0, Clerk, Supabase), router context\n  for auth state.\nmetadata:\n  type: sub-skill\n  library: tanstack-router\n  library_version: '1.171.15'\nrequires:\n  - router-core\nsources:\n  - TanStack\u002Frouter:docs\u002Frouter\u002Fguide\u002Fauthenticated-routes.md\n  - TanStack\u002Frouter:docs\u002Frouter\u002Fhow-to\u002Fsetup-authentication.md\n  - TanStack\u002Frouter:docs\u002Frouter\u002Fhow-to\u002Fsetup-auth-providers.md\n  - TanStack\u002Frouter:docs\u002Frouter\u002Fhow-to\u002Fsetup-rbac.md\n---\n\n# Auth and Guards\n\n> **This skill covers the routing side of auth.** Route guards are UX and navigation control; the data\u002FAPI boundary still belongs in the server function, server route, or API endpoint that reads or mutates private data. For the **server-side primitives** — session cookies (`HttpOnly`\u002F`Secure`\u002F`SameSite`), `useSession`-style helpers, OAuth `state` + PKCE, password-reset enumeration defense, CSRF, rate limiting — see [start-core\u002Fauth-server-primitives](..\u002F..\u002F..\u002F..\u002Fstart-client-core\u002Fskills\u002Fstart-core\u002Fauth-server-primitives\u002FSKILL.md).\n>\n> **CRITICAL**: A route guard (`beforeLoad`) does NOT protect a `createServerFn` declared on that route. Server functions are API endpoints reachable independently of the route that calls them. See \"Route guards do not protect server functions\" below.\n\n## Setup\n\nProtect routes with `beforeLoad` + `redirect()` in a pathless layout route (`_authenticated`):\n\n```tsx\n\u002F\u002F src\u002Froutes\u002F_authenticated.tsx\nimport { createFileRoute, redirect } from '@tanstack\u002Freact-router'\n\nexport const Route = createFileRoute('\u002F_authenticated')({\n  beforeLoad: ({ context, location }) => {\n    if (!context.auth.isAuthenticated) {\n      throw redirect({\n        to: '\u002Flogin',\n        search: {\n          redirect: location.href,\n        },\n      })\n    }\n  },\n  \u002F\u002F component defaults to Outlet — no need to declare it\n})\n```\n\nAny route file placed under `src\u002Froutes\u002F_authenticated\u002F` is automatically protected:\n\n```tsx\n\u002F\u002F src\u002Froutes\u002F_authenticated\u002Fdashboard.tsx\nimport { createFileRoute } from '@tanstack\u002Freact-router'\n\nexport const Route = createFileRoute('\u002F_authenticated\u002Fdashboard')({\n  component: DashboardComponent,\n})\n\nfunction DashboardComponent() {\n  const { auth } = Route.useRouteContext()\n  return \u003Cdiv>Welcome, {auth.user?.username}\u003C\u002Fdiv>\n}\n```\n\n## Core Patterns\n\n### Router Context for Auth State\n\nAuth state flows into the router via `createRootRouteWithContext` and `RouterProvider`'s `context` prop:\n\n```tsx\n\u002F\u002F src\u002Froutes\u002F__root.tsx\nimport { createRootRouteWithContext, Outlet } from '@tanstack\u002Freact-router'\n\ninterface AuthState {\n  isAuthenticated: boolean\n  user: { id: string; username: string; email: string } | null\n  login: (username: string, password: string) => Promise\u003Cvoid>\n  logout: () => void\n}\n\ninterface MyRouterContext {\n  auth: AuthState\n}\n\nexport const Route = createRootRouteWithContext\u003CMyRouterContext>()({\n  component: () => \u003COutlet \u002F>,\n})\n```\n\n```tsx\n\u002F\u002F src\u002Frouter.tsx\nimport { createRouter } from '@tanstack\u002Freact-router'\nimport { routeTree } from '.\u002FrouteTree.gen'\n\nexport const router = createRouter({\n  routeTree,\n  context: {\n    auth: undefined!, \u002F\u002F placeholder — filled by RouterProvider context prop\n  },\n})\n\ndeclare module '@tanstack\u002Freact-router' {\n  interface Register {\n    router: typeof router\n  }\n}\n```\n\n```tsx\n\u002F\u002F src\u002FApp.tsx\nimport { RouterProvider } from '@tanstack\u002Freact-router'\nimport { AuthProvider, useAuth } from '.\u002Fauth'\nimport { router } from '.\u002Frouter'\n\nfunction InnerApp() {\n  const auth = useAuth()\n  \u002F\u002F context prop injects live auth state WITHOUT recreating the router\n  return \u003CRouterProvider router={router} context={{ auth }} \u002F>\n}\n\nfunction App() {\n  return (\n    \u003CAuthProvider>\n      \u003CInnerApp \u002F>\n    \u003C\u002FAuthProvider>\n  )\n}\n```\n\nThe router is created once with a placeholder. `RouterProvider`'s `context` prop injects the live auth state on each render — this avoids recreating the router on auth changes (which would reset caches and rebuild the route tree).\n\n### Redirect-Based Auth with Redirect-Back\n\nSave the current location in search params so you can redirect back after login:\n\n```tsx\n\u002F\u002F src\u002Froutes\u002F_authenticated.tsx\nimport { createFileRoute, redirect } from '@tanstack\u002Freact-router'\n\nexport const Route = createFileRoute('\u002F_authenticated')({\n  beforeLoad: ({ context, location }) => {\n    if (!context.auth.isAuthenticated) {\n      throw redirect({\n        to: '\u002Flogin',\n        search: { redirect: location.href },\n      })\n    }\n  },\n})\n```\n\n```tsx\n\u002F\u002F src\u002Froutes\u002Flogin.tsx\nimport { createFileRoute, redirect } from '@tanstack\u002Freact-router'\nimport { useState, type FormEvent } from 'react'\n\n\u002F\u002F Validate redirect target to prevent open redirect attacks\nfunction sanitizeRedirect(url: unknown): string {\n  if (typeof url !== 'string' || !url.startsWith('\u002F') || url.startsWith('\u002F\u002F')) {\n    return '\u002F'\n  }\n  return url\n}\n\nexport const Route = createFileRoute('\u002Flogin')({\n  validateSearch: (search) => ({\n    redirect: sanitizeRedirect(search.redirect),\n  }),\n  beforeLoad: ({ context, search }) => {\n    if (context.auth.isAuthenticated) {\n      throw redirect({ to: search.redirect })\n    }\n  },\n  component: LoginComponent,\n})\n\nfunction LoginComponent() {\n  const { auth } = Route.useRouteContext()\n  const search = Route.useSearch()\n  const navigate = Route.useNavigate()\n  const [username, setUsername] = useState('')\n  const [password, setPassword] = useState('')\n  const [error, setError] = useState('')\n\n  const handleSubmit = async (e: FormEvent) => {\n    e.preventDefault()\n    try {\n      await auth.login(username, password)\n      navigate({ to: search.redirect })\n    } catch {\n      setError('Invalid credentials')\n    }\n  }\n\n  return (\n    \u003Cform onSubmit={handleSubmit}>\n      {error && \u003Cdiv>{error}\u003C\u002Fdiv>}\n      \u003Cinput value={username} onChange={(e) => setUsername(e.target.value)} \u002F>\n      \u003Cinput\n        type=\"password\"\n        value={password}\n        onChange={(e) => setPassword(e.target.value)}\n      \u002F>\n      \u003Cbutton type=\"submit\">Sign In\u003C\u002Fbutton>\n    \u003C\u002Fform>\n  )\n}\n```\n\n### Non-Redirect Auth (Inline Login)\n\nInstead of redirecting, show a login form in place of the `Outlet`:\n\n```tsx\n\u002F\u002F src\u002Froutes\u002F_authenticated.tsx\nimport { createFileRoute, Outlet } from '@tanstack\u002Freact-router'\n\nexport const Route = createFileRoute('\u002F_authenticated')({\n  component: AuthenticatedLayout,\n})\n\nfunction AuthenticatedLayout() {\n  const { auth } = Route.useRouteContext()\n\n  if (!auth.isAuthenticated) {\n    return \u003CLoginForm \u002F>\n  }\n\n  return \u003COutlet \u002F>\n}\n```\n\nThis keeps the URL unchanged — the user stays on the same page and sees a login form instead of protected content. After authentication, `\u003COutlet \u002F>` renders and child routes appear.\n\n### RBAC with Roles and Permissions\n\nExtend auth state with role\u002Fpermission helpers, then check in `beforeLoad`:\n\n```tsx\n\u002F\u002F src\u002Fauth.tsx\ninterface User {\n  id: string\n  username: string\n  email: string\n  roles: string[]\n  permissions: string[]\n}\n\ninterface AuthState {\n  isAuthenticated: boolean\n  user: User | null\n  hasRole: (role: string) => boolean\n  hasAnyRole: (roles: string[]) => boolean\n  hasPermission: (permission: string) => boolean\n  hasAnyPermission: (permissions: string[]) => boolean\n  login: (username: string, password: string) => Promise\u003Cvoid>\n  logout: () => void\n}\n```\n\nAdmin-only layout route:\n\n```tsx\n\u002F\u002F src\u002Froutes\u002F_authenticated\u002F_admin.tsx\nimport { createFileRoute, redirect } from '@tanstack\u002Freact-router'\n\nexport const Route = createFileRoute('\u002F_authenticated\u002F_admin')({\n  beforeLoad: ({ context, location }) => {\n    if (!context.auth.hasRole('admin')) {\n      throw redirect({\n        to: '\u002Funauthorized',\n        search: { redirect: location.href },\n      })\n    }\n  },\n})\n```\n\nMulti-role access:\n\n```tsx\n\u002F\u002F src\u002Froutes\u002F_authenticated\u002F_moderator.tsx\nimport { createFileRoute, redirect } from '@tanstack\u002Freact-router'\n\nexport const Route = createFileRoute('\u002F_authenticated\u002F_moderator')({\n  beforeLoad: ({ context, location }) => {\n    if (!context.auth.hasAnyRole(['admin', 'moderator'])) {\n      throw redirect({\n        to: '\u002Funauthorized',\n        search: { redirect: location.href },\n      })\n    }\n  },\n})\n```\n\nPermission-based:\n\n```tsx\n\u002F\u002F src\u002Froutes\u002F_authenticated\u002F_users.tsx\nimport { createFileRoute, redirect } from '@tanstack\u002Freact-router'\n\nexport const Route = createFileRoute('\u002F_authenticated\u002F_users')({\n  beforeLoad: ({ context, location }) => {\n    if (!context.auth.hasAnyPermission(['users:read', 'users:write'])) {\n      throw redirect({\n        to: '\u002Funauthorized',\n        search: { redirect: location.href },\n      })\n    }\n  },\n})\n```\n\nPage-level permission check (nested under an already-role-protected layout):\n\n```tsx\n\u002F\u002F src\u002Froutes\u002F_authenticated\u002F_users\u002Fmanage.tsx\nimport { createFileRoute } from '@tanstack\u002Freact-router'\n\nexport const Route = createFileRoute('\u002F_authenticated\u002F_users\u002Fmanage')({\n  beforeLoad: ({ context }) => {\n    if (!context.auth.hasPermission('users:write')) {\n      throw new Error('Write permission required')\n    }\n  },\n  component: UserManagement,\n})\n\nfunction UserManagement() {\n  const { auth } = Route.useRouteContext()\n  const canDelete = auth.hasPermission('users:delete')\n\n  return (\n    \u003Cdiv>\n      \u003Ch1>User Management\u003C\u002Fh1>\n      {canDelete && \u003Cbutton>Delete User\u003C\u002Fbutton>}\n    \u003C\u002Fdiv>\n  )\n}\n```\n\n### Handling Auth Check Failures (isRedirect)\n\nWhen `beforeLoad` has a try\u002Fcatch, redirects (which work by throwing) can get swallowed. Use `isRedirect` to re-throw:\n\n```tsx\nimport { createFileRoute, redirect, isRedirect } from '@tanstack\u002Freact-router'\n\nexport const Route = createFileRoute('\u002F_authenticated')({\n  beforeLoad: async ({ context, location }) => {\n    try {\n      const user = await verifySession(context.auth)\n      if (!user) {\n        throw redirect({\n          to: '\u002Flogin',\n          search: { redirect: location.href },\n        })\n      }\n      return { user }\n    } catch (error) {\n      if (isRedirect(error)) throw error \u002F\u002F re-throw redirect, don't swallow it\n      \u002F\u002F Actual error — redirect to login\n      throw redirect({\n        to: '\u002Flogin',\n        search: { redirect: location.href },\n      })\n    }\n  },\n})\n```\n\n## Common Mistakes\n\n### CRITICAL: Route guards do not protect server functions\n\nA `beforeLoad` redirect protects the **route's UI**, not the **server functions** declared on it. `createServerFn` produces an RPC endpoint reachable directly with its declared HTTP method regardless of which route renders the calling UI. An attacker doesn't have to load `\u002F_authenticated\u002Forders` — they can call this GET RPC endpoint directly.\n\n```tsx\n\u002F\u002F WRONG — handler has no auth check; the route guard doesn't help\nimport { createServerFn } from '@tanstack\u002Freact-start'\nimport { createFileRoute, redirect } from '@tanstack\u002Freact-router'\n\nconst getMyOrders = createServerFn({ method: 'GET' }).handler(async () => {\n  return db.orders.findMany() \u002F\u002F ← anyone can hit the RPC\n})\n\nexport const Route = createFileRoute('\u002F_authenticated\u002Forders')({\n  beforeLoad: ({ context }) => {\n    if (!context.auth.isAuthenticated) throw redirect({ to: '\u002Flogin' })\n  },\n  loader: () => getMyOrders(),\n})\n```\n\n```tsx\n\u002F\u002F CORRECT — auth enforced on the handler itself, via middleware\nimport { createServerFn } from '@tanstack\u002Freact-start'\nimport { authMiddleware } from '~\u002Fserver\u002Fauth-middleware'\n\nconst getMyOrders = createServerFn({ method: 'GET' })\n  .middleware([authMiddleware])\n  .handler(async ({ context }) => {\n    return db.orders.findMany({ where: { userId: context.session.userId } })\n  })\n```\n\nRule of thumb: every `createServerFn`, server route, or API endpoint that touches user data needs `authMiddleware` (or an equivalent in-handler check). The route guard is for the page experience; the endpoint guard is for the data. See [start-core\u002Fauth-server-primitives](..\u002F..\u002F..\u002F..\u002Fstart-client-core\u002Fskills\u002Fstart-core\u002Fauth-server-primitives\u002FSKILL.md) for the full session\u002Fmiddleware pattern.\n\n### CRITICAL: The anonymous destination can still disclose protected data\n\nProtect the entire anonymous response, not only the API call. A public login or unauthorized page still leaks data if its title, copy, search params, or serialized loader state names the protected user, tenant, record, or resource. Test a direct anonymous request and follow redirects. Assert that the handler rejects before reading private data, no protected loader runs, the final HTML and serialized state contain no protected identity, and the redirect contains only a sanitized relative return URL.\n\n### HIGH: Auth check in component instead of beforeLoad\n\nComponent-level auth checks cause a **flash of protected content** before the redirect:\n\n```tsx\n\u002F\u002F WRONG — protected content renders briefly before redirect\nexport const Route = createFileRoute('\u002F_authenticated\u002Fdashboard')({\n  component: () => {\n    const auth = useAuth()\n    if (!auth.isAuthenticated) return \u003CNavigate to=\"\u002Flogin\" \u002F>\n    return \u003CDashboard \u002F>\n  },\n})\n\n\u002F\u002F CORRECT — beforeLoad runs before any rendering\nexport const Route = createFileRoute('\u002F_authenticated\u002Fdashboard')({\n  beforeLoad: ({ context }) => {\n    if (!context.auth.isAuthenticated) {\n      throw redirect({ to: '\u002Flogin' })\n    }\n  },\n  component: Dashboard,\n})\n```\n\n### HIGH: Not re-throwing redirects in try\u002Fcatch\n\n`redirect()` works by throwing. If `beforeLoad` has a try\u002Fcatch, the redirect gets swallowed:\n\n```tsx\n\u002F\u002F WRONG — redirect is caught and swallowed\nbeforeLoad: async ({ context }) => {\n  try {\n    await validateSession(context.auth)\n  } catch (e) {\n    console.error(e) \u002F\u002F swallows the redirect!\n  }\n}\n\n\u002F\u002F CORRECT — use isRedirect to distinguish intentional redirects from errors\nimport { isRedirect } from '@tanstack\u002Freact-router'\n\nbeforeLoad: async ({ context }) => {\n  try {\n    await validateSession(context.auth)\n  } catch (e) {\n    if (isRedirect(e)) throw e\n    console.error(e)\n  }\n}\n```\n\n### MEDIUM: Conditionally rendering root route component\n\nThe root route always renders regardless of auth state. You cannot conditionally render its component:\n\n```tsx\n\u002F\u002F WRONG — root route always renders, this doesn't protect anything\nexport const Route = createRootRoute({\n  component: () => {\n    if (!isAuthenticated()) return \u003CLogin \u002F>\n    return \u003COutlet \u002F>\n  },\n})\n\n\u002F\u002F CORRECT — use a pathless layout route for auth boundaries\n\u002F\u002F src\u002Froutes\u002F_authenticated.tsx\nexport const Route = createFileRoute('\u002F_authenticated')({\n  beforeLoad: ({ context }) => {\n    if (!context.auth.isAuthenticated) {\n      throw redirect({ to: '\u002Flogin' })\n    }\n  },\n})\n```\n\nPlace protected routes as children of the `_authenticated` layout route. Public routes (login, home, etc.) live outside it.\n\n## Cross-References\n\n- See also: **router-core\u002Fdata-loading\u002FSKILL.md** — `beforeLoad` runs before `loader`; auth context flows into loader via route context\n- See also: **start-core\u002Fauth-server-primitives\u002FSKILL.md** — server-side session cookies, OAuth state + PKCE, CSRF, password-reset hardening, rate limiting (the server half of authentication)\n- See also: **start-core\u002Fmiddleware\u002FSKILL.md** — `authMiddleware` factory pattern for protecting individual `createServerFn` calls\n",{"data":53,"body":64},{"name":4,"description":6,"metadata":54,"requires":57,"sources":59},{"type":55,"library":14,"library_version":56},"sub-skill","1.171.15",[58],"router-core",[60,61,62,63],"TanStack\u002Frouter:docs\u002Frouter\u002Fguide\u002Fauthenticated-routes.md","TanStack\u002Frouter:docs\u002Frouter\u002Fhow-to\u002Fsetup-authentication.md","TanStack\u002Frouter:docs\u002Frouter\u002Fhow-to\u002Fsetup-auth-providers.md","TanStack\u002Frouter:docs\u002Frouter\u002Fhow-to\u002Fsetup-rbac.md",{"type":65,"children":66},"root",[67,75,173,180,208,620,633,921,927,934,962,1393,1678,2035,2053,2059,2064,2379,3961,3967,3978,4287,4300,4306,4317,4775,4780,5115,5120,5472,5477,5828,5833,6365,6371,6391,6960,6966,6972,7013,7474,7782,7808,7814,7819,7825,7837,8281,8287,8304,8711,8717,8722,9085,9097,9103,9170],{"type":68,"tag":69,"props":70,"children":71},"element","h1",{"id":4},[72],{"type":73,"value":74},"text","Auth and Guards",{"type":68,"tag":76,"props":77,"children":78},"blockquote",{},[79,147],{"type":68,"tag":80,"props":81,"children":82},"p",{},[83,89,91,96,98,105,107,113,114,120,122,128,130,136,138,145],{"type":68,"tag":84,"props":85,"children":86},"strong",{},[87],{"type":73,"value":88},"This skill covers the routing side of auth.",{"type":73,"value":90}," Route guards are UX and navigation control; the data\u002FAPI boundary still belongs in the server function, server route, or API endpoint that reads or mutates private data. For the ",{"type":68,"tag":84,"props":92,"children":93},{},[94],{"type":73,"value":95},"server-side primitives",{"type":73,"value":97}," — session cookies (",{"type":68,"tag":99,"props":100,"children":102},"code",{"className":101},[],[103],{"type":73,"value":104},"HttpOnly",{"type":73,"value":106},"\u002F",{"type":68,"tag":99,"props":108,"children":110},{"className":109},[],[111],{"type":73,"value":112},"Secure",{"type":73,"value":106},{"type":68,"tag":99,"props":115,"children":117},{"className":116},[],[118],{"type":73,"value":119},"SameSite",{"type":73,"value":121},"), ",{"type":68,"tag":99,"props":123,"children":125},{"className":124},[],[126],{"type":73,"value":127},"useSession",{"type":73,"value":129},"-style helpers, OAuth ",{"type":68,"tag":99,"props":131,"children":133},{"className":132},[],[134],{"type":73,"value":135},"state",{"type":73,"value":137}," + PKCE, password-reset enumeration defense, CSRF, rate limiting — see ",{"type":68,"tag":139,"props":140,"children":142},"a",{"href":141},"..\u002F..\u002F..\u002F..\u002Fstart-client-core\u002Fskills\u002Fstart-core\u002Fauth-server-primitives\u002FSKILL.md",[143],{"type":73,"value":144},"start-core\u002Fauth-server-primitives",{"type":73,"value":146},".",{"type":68,"tag":80,"props":148,"children":149},{},[150,155,157,163,165,171],{"type":68,"tag":84,"props":151,"children":152},{},[153],{"type":73,"value":154},"CRITICAL",{"type":73,"value":156},": A route guard (",{"type":68,"tag":99,"props":158,"children":160},{"className":159},[],[161],{"type":73,"value":162},"beforeLoad",{"type":73,"value":164},") does NOT protect a ",{"type":68,"tag":99,"props":166,"children":168},{"className":167},[],[169],{"type":73,"value":170},"createServerFn",{"type":73,"value":172}," declared on that route. Server functions are API endpoints reachable independently of the route that calls them. See \"Route guards do not protect server functions\" below.",{"type":68,"tag":174,"props":175,"children":177},"h2",{"id":176},"setup",[178],{"type":73,"value":179},"Setup",{"type":68,"tag":80,"props":181,"children":182},{},[183,185,190,192,198,200,206],{"type":73,"value":184},"Protect routes with ",{"type":68,"tag":99,"props":186,"children":188},{"className":187},[],[189],{"type":73,"value":162},{"type":73,"value":191}," + ",{"type":68,"tag":99,"props":193,"children":195},{"className":194},[],[196],{"type":73,"value":197},"redirect()",{"type":73,"value":199}," in a pathless layout route (",{"type":68,"tag":99,"props":201,"children":203},{"className":202},[],[204],{"type":73,"value":205},"_authenticated",{"type":73,"value":207},"):",{"type":68,"tag":209,"props":210,"children":215},"pre",{"className":211,"code":212,"language":213,"meta":214,"style":214},"language-tsx shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F src\u002Froutes\u002F_authenticated.tsx\nimport { createFileRoute, redirect } from '@tanstack\u002Freact-router'\n\nexport const Route = createFileRoute('\u002F_authenticated')({\n  beforeLoad: ({ context, location }) => {\n    if (!context.auth.isAuthenticated) {\n      throw redirect({\n        to: '\u002Flogin',\n        search: {\n          redirect: location.href,\n        },\n      })\n    }\n  },\n  \u002F\u002F component defaults to Outlet — no need to declare it\n})\n","tsx","",[216],{"type":68,"tag":99,"props":217,"children":218},{"__ignoreMap":214},[219,231,289,299,358,407,458,479,510,527,557,566,580,589,598,607],{"type":68,"tag":220,"props":221,"children":224},"span",{"class":222,"line":223},"line",1,[225],{"type":68,"tag":220,"props":226,"children":228},{"style":227},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[229],{"type":73,"value":230},"\u002F\u002F src\u002Froutes\u002F_authenticated.tsx\n",{"type":68,"tag":220,"props":232,"children":234},{"class":222,"line":233},2,[235,241,247,253,258,263,268,273,278,284],{"type":68,"tag":220,"props":236,"children":238},{"style":237},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[239],{"type":73,"value":240},"import",{"type":68,"tag":220,"props":242,"children":244},{"style":243},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[245],{"type":73,"value":246}," {",{"type":68,"tag":220,"props":248,"children":250},{"style":249},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[251],{"type":73,"value":252}," createFileRoute",{"type":68,"tag":220,"props":254,"children":255},{"style":243},[256],{"type":73,"value":257},",",{"type":68,"tag":220,"props":259,"children":260},{"style":249},[261],{"type":73,"value":262}," redirect",{"type":68,"tag":220,"props":264,"children":265},{"style":243},[266],{"type":73,"value":267}," }",{"type":68,"tag":220,"props":269,"children":270},{"style":237},[271],{"type":73,"value":272}," from",{"type":68,"tag":220,"props":274,"children":275},{"style":243},[276],{"type":73,"value":277}," '",{"type":68,"tag":220,"props":279,"children":281},{"style":280},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[282],{"type":73,"value":283},"@tanstack\u002Freact-router",{"type":68,"tag":220,"props":285,"children":286},{"style":243},[287],{"type":73,"value":288},"'\n",{"type":68,"tag":220,"props":290,"children":292},{"class":222,"line":291},3,[293],{"type":68,"tag":220,"props":294,"children":296},{"emptyLinePlaceholder":295},true,[297],{"type":73,"value":298},"\n",{"type":68,"tag":220,"props":300,"children":302},{"class":222,"line":301},4,[303,308,314,319,324,329,334,339,344,348,353],{"type":68,"tag":220,"props":304,"children":305},{"style":237},[306],{"type":73,"value":307},"export",{"type":68,"tag":220,"props":309,"children":311},{"style":310},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[312],{"type":73,"value":313}," const",{"type":68,"tag":220,"props":315,"children":316},{"style":249},[317],{"type":73,"value":318}," Route ",{"type":68,"tag":220,"props":320,"children":321},{"style":243},[322],{"type":73,"value":323},"=",{"type":68,"tag":220,"props":325,"children":327},{"style":326},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[328],{"type":73,"value":252},{"type":68,"tag":220,"props":330,"children":331},{"style":249},[332],{"type":73,"value":333},"(",{"type":68,"tag":220,"props":335,"children":336},{"style":243},[337],{"type":73,"value":338},"'",{"type":68,"tag":220,"props":340,"children":341},{"style":280},[342],{"type":73,"value":343},"\u002F_authenticated",{"type":68,"tag":220,"props":345,"children":346},{"style":243},[347],{"type":73,"value":338},{"type":68,"tag":220,"props":349,"children":350},{"style":249},[351],{"type":73,"value":352},")(",{"type":68,"tag":220,"props":354,"children":355},{"style":243},[356],{"type":73,"value":357},"{\n",{"type":68,"tag":220,"props":359,"children":361},{"class":222,"line":360},5,[362,367,372,377,383,387,392,397,402],{"type":68,"tag":220,"props":363,"children":364},{"style":326},[365],{"type":73,"value":366},"  beforeLoad",{"type":68,"tag":220,"props":368,"children":369},{"style":243},[370],{"type":73,"value":371},":",{"type":68,"tag":220,"props":373,"children":374},{"style":243},[375],{"type":73,"value":376}," ({",{"type":68,"tag":220,"props":378,"children":380},{"style":379},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic",[381],{"type":73,"value":382}," context",{"type":68,"tag":220,"props":384,"children":385},{"style":243},[386],{"type":73,"value":257},{"type":68,"tag":220,"props":388,"children":389},{"style":379},[390],{"type":73,"value":391}," location",{"type":68,"tag":220,"props":393,"children":394},{"style":243},[395],{"type":73,"value":396}," })",{"type":68,"tag":220,"props":398,"children":399},{"style":310},[400],{"type":73,"value":401}," =>",{"type":68,"tag":220,"props":403,"children":404},{"style":243},[405],{"type":73,"value":406}," {\n",{"type":68,"tag":220,"props":408,"children":410},{"class":222,"line":409},6,[411,416,422,427,432,436,440,444,449,454],{"type":68,"tag":220,"props":412,"children":413},{"style":237},[414],{"type":73,"value":415},"    if",{"type":68,"tag":220,"props":417,"children":419},{"style":418},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[420],{"type":73,"value":421}," (",{"type":68,"tag":220,"props":423,"children":424},{"style":243},[425],{"type":73,"value":426},"!",{"type":68,"tag":220,"props":428,"children":429},{"style":249},[430],{"type":73,"value":431},"context",{"type":68,"tag":220,"props":433,"children":434},{"style":243},[435],{"type":73,"value":146},{"type":68,"tag":220,"props":437,"children":438},{"style":249},[439],{"type":73,"value":18},{"type":68,"tag":220,"props":441,"children":442},{"style":243},[443],{"type":73,"value":146},{"type":68,"tag":220,"props":445,"children":446},{"style":249},[447],{"type":73,"value":448},"isAuthenticated",{"type":68,"tag":220,"props":450,"children":451},{"style":418},[452],{"type":73,"value":453},") ",{"type":68,"tag":220,"props":455,"children":456},{"style":243},[457],{"type":73,"value":357},{"type":68,"tag":220,"props":459,"children":461},{"class":222,"line":460},7,[462,467,471,475],{"type":68,"tag":220,"props":463,"children":464},{"style":237},[465],{"type":73,"value":466},"      throw",{"type":68,"tag":220,"props":468,"children":469},{"style":326},[470],{"type":73,"value":262},{"type":68,"tag":220,"props":472,"children":473},{"style":418},[474],{"type":73,"value":333},{"type":68,"tag":220,"props":476,"children":477},{"style":243},[478],{"type":73,"value":357},{"type":68,"tag":220,"props":480,"children":482},{"class":222,"line":481},8,[483,488,492,496,501,505],{"type":68,"tag":220,"props":484,"children":485},{"style":418},[486],{"type":73,"value":487},"        to",{"type":68,"tag":220,"props":489,"children":490},{"style":243},[491],{"type":73,"value":371},{"type":68,"tag":220,"props":493,"children":494},{"style":243},[495],{"type":73,"value":277},{"type":68,"tag":220,"props":497,"children":498},{"style":280},[499],{"type":73,"value":500},"\u002Flogin",{"type":68,"tag":220,"props":502,"children":503},{"style":243},[504],{"type":73,"value":338},{"type":68,"tag":220,"props":506,"children":507},{"style":243},[508],{"type":73,"value":509},",\n",{"type":68,"tag":220,"props":511,"children":513},{"class":222,"line":512},9,[514,519,523],{"type":68,"tag":220,"props":515,"children":516},{"style":418},[517],{"type":73,"value":518},"        search",{"type":68,"tag":220,"props":520,"children":521},{"style":243},[522],{"type":73,"value":371},{"type":68,"tag":220,"props":524,"children":525},{"style":243},[526],{"type":73,"value":406},{"type":68,"tag":220,"props":528,"children":530},{"class":222,"line":529},10,[531,536,540,544,548,553],{"type":68,"tag":220,"props":532,"children":533},{"style":418},[534],{"type":73,"value":535},"          redirect",{"type":68,"tag":220,"props":537,"children":538},{"style":243},[539],{"type":73,"value":371},{"type":68,"tag":220,"props":541,"children":542},{"style":249},[543],{"type":73,"value":391},{"type":68,"tag":220,"props":545,"children":546},{"style":243},[547],{"type":73,"value":146},{"type":68,"tag":220,"props":549,"children":550},{"style":249},[551],{"type":73,"value":552},"href",{"type":68,"tag":220,"props":554,"children":555},{"style":243},[556],{"type":73,"value":509},{"type":68,"tag":220,"props":558,"children":560},{"class":222,"line":559},11,[561],{"type":68,"tag":220,"props":562,"children":563},{"style":243},[564],{"type":73,"value":565},"        },\n",{"type":68,"tag":220,"props":567,"children":569},{"class":222,"line":568},12,[570,575],{"type":68,"tag":220,"props":571,"children":572},{"style":243},[573],{"type":73,"value":574},"      }",{"type":68,"tag":220,"props":576,"children":577},{"style":418},[578],{"type":73,"value":579},")\n",{"type":68,"tag":220,"props":581,"children":583},{"class":222,"line":582},13,[584],{"type":68,"tag":220,"props":585,"children":586},{"style":243},[587],{"type":73,"value":588},"    }\n",{"type":68,"tag":220,"props":590,"children":592},{"class":222,"line":591},14,[593],{"type":68,"tag":220,"props":594,"children":595},{"style":243},[596],{"type":73,"value":597},"  },\n",{"type":68,"tag":220,"props":599,"children":601},{"class":222,"line":600},15,[602],{"type":68,"tag":220,"props":603,"children":604},{"style":227},[605],{"type":73,"value":606},"  \u002F\u002F component defaults to Outlet — no need to declare it\n",{"type":68,"tag":220,"props":608,"children":610},{"class":222,"line":609},16,[611,616],{"type":68,"tag":220,"props":612,"children":613},{"style":243},[614],{"type":73,"value":615},"}",{"type":68,"tag":220,"props":617,"children":618},{"style":249},[619],{"type":73,"value":579},{"type":68,"tag":80,"props":621,"children":622},{},[623,625,631],{"type":73,"value":624},"Any route file placed under ",{"type":68,"tag":99,"props":626,"children":628},{"className":627},[],[629],{"type":73,"value":630},"src\u002Froutes\u002F_authenticated\u002F",{"type":73,"value":632}," is automatically protected:",{"type":68,"tag":209,"props":634,"children":636},{"className":211,"code":635,"language":213,"meta":214,"style":214},"\u002F\u002F src\u002Froutes\u002F_authenticated\u002Fdashboard.tsx\nimport { createFileRoute } from '@tanstack\u002Freact-router'\n\nexport const Route = createFileRoute('\u002F_authenticated\u002Fdashboard')({\n  component: DashboardComponent,\n})\n\nfunction DashboardComponent() {\n  const { auth } = Route.useRouteContext()\n  return \u003Cdiv>Welcome, {auth.user?.username}\u003C\u002Fdiv>\n}\n",[637],{"type":68,"tag":99,"props":638,"children":639},{"__ignoreMap":214},[640,648,683,690,738,759,770,777,798,843,913],{"type":68,"tag":220,"props":641,"children":642},{"class":222,"line":223},[643],{"type":68,"tag":220,"props":644,"children":645},{"style":227},[646],{"type":73,"value":647},"\u002F\u002F src\u002Froutes\u002F_authenticated\u002Fdashboard.tsx\n",{"type":68,"tag":220,"props":649,"children":650},{"class":222,"line":233},[651,655,659,663,667,671,675,679],{"type":68,"tag":220,"props":652,"children":653},{"style":237},[654],{"type":73,"value":240},{"type":68,"tag":220,"props":656,"children":657},{"style":243},[658],{"type":73,"value":246},{"type":68,"tag":220,"props":660,"children":661},{"style":249},[662],{"type":73,"value":252},{"type":68,"tag":220,"props":664,"children":665},{"style":243},[666],{"type":73,"value":267},{"type":68,"tag":220,"props":668,"children":669},{"style":237},[670],{"type":73,"value":272},{"type":68,"tag":220,"props":672,"children":673},{"style":243},[674],{"type":73,"value":277},{"type":68,"tag":220,"props":676,"children":677},{"style":280},[678],{"type":73,"value":283},{"type":68,"tag":220,"props":680,"children":681},{"style":243},[682],{"type":73,"value":288},{"type":68,"tag":220,"props":684,"children":685},{"class":222,"line":291},[686],{"type":68,"tag":220,"props":687,"children":688},{"emptyLinePlaceholder":295},[689],{"type":73,"value":298},{"type":68,"tag":220,"props":691,"children":692},{"class":222,"line":301},[693,697,701,705,709,713,717,721,726,730,734],{"type":68,"tag":220,"props":694,"children":695},{"style":237},[696],{"type":73,"value":307},{"type":68,"tag":220,"props":698,"children":699},{"style":310},[700],{"type":73,"value":313},{"type":68,"tag":220,"props":702,"children":703},{"style":249},[704],{"type":73,"value":318},{"type":68,"tag":220,"props":706,"children":707},{"style":243},[708],{"type":73,"value":323},{"type":68,"tag":220,"props":710,"children":711},{"style":326},[712],{"type":73,"value":252},{"type":68,"tag":220,"props":714,"children":715},{"style":249},[716],{"type":73,"value":333},{"type":68,"tag":220,"props":718,"children":719},{"style":243},[720],{"type":73,"value":338},{"type":68,"tag":220,"props":722,"children":723},{"style":280},[724],{"type":73,"value":725},"\u002F_authenticated\u002Fdashboard",{"type":68,"tag":220,"props":727,"children":728},{"style":243},[729],{"type":73,"value":338},{"type":68,"tag":220,"props":731,"children":732},{"style":249},[733],{"type":73,"value":352},{"type":68,"tag":220,"props":735,"children":736},{"style":243},[737],{"type":73,"value":357},{"type":68,"tag":220,"props":739,"children":740},{"class":222,"line":360},[741,746,750,755],{"type":68,"tag":220,"props":742,"children":743},{"style":418},[744],{"type":73,"value":745},"  component",{"type":68,"tag":220,"props":747,"children":748},{"style":243},[749],{"type":73,"value":371},{"type":68,"tag":220,"props":751,"children":752},{"style":249},[753],{"type":73,"value":754}," DashboardComponent",{"type":68,"tag":220,"props":756,"children":757},{"style":243},[758],{"type":73,"value":509},{"type":68,"tag":220,"props":760,"children":761},{"class":222,"line":409},[762,766],{"type":68,"tag":220,"props":763,"children":764},{"style":243},[765],{"type":73,"value":615},{"type":68,"tag":220,"props":767,"children":768},{"style":249},[769],{"type":73,"value":579},{"type":68,"tag":220,"props":771,"children":772},{"class":222,"line":460},[773],{"type":68,"tag":220,"props":774,"children":775},{"emptyLinePlaceholder":295},[776],{"type":73,"value":298},{"type":68,"tag":220,"props":778,"children":779},{"class":222,"line":481},[780,785,789,794],{"type":68,"tag":220,"props":781,"children":782},{"style":310},[783],{"type":73,"value":784},"function",{"type":68,"tag":220,"props":786,"children":787},{"style":326},[788],{"type":73,"value":754},{"type":68,"tag":220,"props":790,"children":791},{"style":243},[792],{"type":73,"value":793},"()",{"type":68,"tag":220,"props":795,"children":796},{"style":243},[797],{"type":73,"value":406},{"type":68,"tag":220,"props":799,"children":800},{"class":222,"line":512},[801,806,810,815,819,824,829,833,838],{"type":68,"tag":220,"props":802,"children":803},{"style":310},[804],{"type":73,"value":805},"  const",{"type":68,"tag":220,"props":807,"children":808},{"style":243},[809],{"type":73,"value":246},{"type":68,"tag":220,"props":811,"children":812},{"style":249},[813],{"type":73,"value":814}," auth",{"type":68,"tag":220,"props":816,"children":817},{"style":243},[818],{"type":73,"value":267},{"type":68,"tag":220,"props":820,"children":821},{"style":243},[822],{"type":73,"value":823}," =",{"type":68,"tag":220,"props":825,"children":826},{"style":249},[827],{"type":73,"value":828}," Route",{"type":68,"tag":220,"props":830,"children":831},{"style":243},[832],{"type":73,"value":146},{"type":68,"tag":220,"props":834,"children":835},{"style":326},[836],{"type":73,"value":837},"useRouteContext",{"type":68,"tag":220,"props":839,"children":840},{"style":418},[841],{"type":73,"value":842},"()\n",{"type":68,"tag":220,"props":844,"children":845},{"class":222,"line":529},[846,851,856,861,866,871,876,880,884,889,894,899,904,908],{"type":68,"tag":220,"props":847,"children":848},{"style":237},[849],{"type":73,"value":850},"  return",{"type":68,"tag":220,"props":852,"children":853},{"style":243},[854],{"type":73,"value":855}," \u003C",{"type":68,"tag":220,"props":857,"children":858},{"style":418},[859],{"type":73,"value":860},"div",{"type":68,"tag":220,"props":862,"children":863},{"style":243},[864],{"type":73,"value":865},">",{"type":68,"tag":220,"props":867,"children":868},{"style":249},[869],{"type":73,"value":870},"Welcome, ",{"type":68,"tag":220,"props":872,"children":873},{"style":243},[874],{"type":73,"value":875},"{",{"type":68,"tag":220,"props":877,"children":878},{"style":249},[879],{"type":73,"value":18},{"type":68,"tag":220,"props":881,"children":882},{"style":243},[883],{"type":73,"value":146},{"type":68,"tag":220,"props":885,"children":886},{"style":249},[887],{"type":73,"value":888},"user",{"type":68,"tag":220,"props":890,"children":891},{"style":243},[892],{"type":73,"value":893},"?.",{"type":68,"tag":220,"props":895,"children":896},{"style":249},[897],{"type":73,"value":898},"username",{"type":68,"tag":220,"props":900,"children":901},{"style":243},[902],{"type":73,"value":903},"}\u003C\u002F",{"type":68,"tag":220,"props":905,"children":906},{"style":418},[907],{"type":73,"value":860},{"type":68,"tag":220,"props":909,"children":910},{"style":243},[911],{"type":73,"value":912},">\n",{"type":68,"tag":220,"props":914,"children":915},{"class":222,"line":559},[916],{"type":68,"tag":220,"props":917,"children":918},{"style":243},[919],{"type":73,"value":920},"}\n",{"type":68,"tag":174,"props":922,"children":924},{"id":923},"core-patterns",[925],{"type":73,"value":926},"Core Patterns",{"type":68,"tag":928,"props":929,"children":931},"h3",{"id":930},"router-context-for-auth-state",[932],{"type":73,"value":933},"Router Context for Auth State",{"type":68,"tag":80,"props":935,"children":936},{},[937,939,945,947,953,955,960],{"type":73,"value":938},"Auth state flows into the router via ",{"type":68,"tag":99,"props":940,"children":942},{"className":941},[],[943],{"type":73,"value":944},"createRootRouteWithContext",{"type":73,"value":946}," and ",{"type":68,"tag":99,"props":948,"children":950},{"className":949},[],[951],{"type":73,"value":952},"RouterProvider",{"type":73,"value":954},"'s ",{"type":68,"tag":99,"props":956,"children":958},{"className":957},[],[959],{"type":73,"value":431},{"type":73,"value":961}," prop:",{"type":68,"tag":209,"props":963,"children":965},{"className":211,"code":964,"language":213,"meta":214,"style":214},"\u002F\u002F src\u002Froutes\u002F__root.tsx\nimport { createRootRouteWithContext, Outlet } from '@tanstack\u002Freact-router'\n\ninterface AuthState {\n  isAuthenticated: boolean\n  user: { id: string; username: string; email: string } | null\n  login: (username: string, password: string) => Promise\u003Cvoid>\n  logout: () => void\n}\n\ninterface MyRouterContext {\n  auth: AuthState\n}\n\nexport const Route = createRootRouteWithContext\u003CMyRouterContext>()({\n  component: () => \u003COutlet \u002F>,\n})\n",[966],{"type":68,"tag":99,"props":967,"children":968},{"__ignoreMap":214},[969,977,1022,1029,1047,1064,1143,1216,1242,1249,1256,1272,1289,1296,1303,1348,1381],{"type":68,"tag":220,"props":970,"children":971},{"class":222,"line":223},[972],{"type":68,"tag":220,"props":973,"children":974},{"style":227},[975],{"type":73,"value":976},"\u002F\u002F src\u002Froutes\u002F__root.tsx\n",{"type":68,"tag":220,"props":978,"children":979},{"class":222,"line":233},[980,984,988,993,997,1002,1006,1010,1014,1018],{"type":68,"tag":220,"props":981,"children":982},{"style":237},[983],{"type":73,"value":240},{"type":68,"tag":220,"props":985,"children":986},{"style":243},[987],{"type":73,"value":246},{"type":68,"tag":220,"props":989,"children":990},{"style":249},[991],{"type":73,"value":992}," createRootRouteWithContext",{"type":68,"tag":220,"props":994,"children":995},{"style":243},[996],{"type":73,"value":257},{"type":68,"tag":220,"props":998,"children":999},{"style":249},[1000],{"type":73,"value":1001}," Outlet",{"type":68,"tag":220,"props":1003,"children":1004},{"style":243},[1005],{"type":73,"value":267},{"type":68,"tag":220,"props":1007,"children":1008},{"style":237},[1009],{"type":73,"value":272},{"type":68,"tag":220,"props":1011,"children":1012},{"style":243},[1013],{"type":73,"value":277},{"type":68,"tag":220,"props":1015,"children":1016},{"style":280},[1017],{"type":73,"value":283},{"type":68,"tag":220,"props":1019,"children":1020},{"style":243},[1021],{"type":73,"value":288},{"type":68,"tag":220,"props":1023,"children":1024},{"class":222,"line":291},[1025],{"type":68,"tag":220,"props":1026,"children":1027},{"emptyLinePlaceholder":295},[1028],{"type":73,"value":298},{"type":68,"tag":220,"props":1030,"children":1031},{"class":222,"line":301},[1032,1037,1043],{"type":68,"tag":220,"props":1033,"children":1034},{"style":310},[1035],{"type":73,"value":1036},"interface",{"type":68,"tag":220,"props":1038,"children":1040},{"style":1039},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[1041],{"type":73,"value":1042}," AuthState",{"type":68,"tag":220,"props":1044,"children":1045},{"style":243},[1046],{"type":73,"value":406},{"type":68,"tag":220,"props":1048,"children":1049},{"class":222,"line":360},[1050,1055,1059],{"type":68,"tag":220,"props":1051,"children":1052},{"style":418},[1053],{"type":73,"value":1054},"  isAuthenticated",{"type":68,"tag":220,"props":1056,"children":1057},{"style":243},[1058],{"type":73,"value":371},{"type":68,"tag":220,"props":1060,"children":1061},{"style":1039},[1062],{"type":73,"value":1063}," boolean\n",{"type":68,"tag":220,"props":1065,"children":1066},{"class":222,"line":409},[1067,1072,1076,1080,1085,1089,1094,1099,1104,1108,1112,1116,1121,1125,1129,1133,1138],{"type":68,"tag":220,"props":1068,"children":1069},{"style":418},[1070],{"type":73,"value":1071},"  user",{"type":68,"tag":220,"props":1073,"children":1074},{"style":243},[1075],{"type":73,"value":371},{"type":68,"tag":220,"props":1077,"children":1078},{"style":243},[1079],{"type":73,"value":246},{"type":68,"tag":220,"props":1081,"children":1082},{"style":418},[1083],{"type":73,"value":1084}," id",{"type":68,"tag":220,"props":1086,"children":1087},{"style":243},[1088],{"type":73,"value":371},{"type":68,"tag":220,"props":1090,"children":1091},{"style":1039},[1092],{"type":73,"value":1093}," string",{"type":68,"tag":220,"props":1095,"children":1096},{"style":243},[1097],{"type":73,"value":1098},";",{"type":68,"tag":220,"props":1100,"children":1101},{"style":418},[1102],{"type":73,"value":1103}," username",{"type":68,"tag":220,"props":1105,"children":1106},{"style":243},[1107],{"type":73,"value":371},{"type":68,"tag":220,"props":1109,"children":1110},{"style":1039},[1111],{"type":73,"value":1093},{"type":68,"tag":220,"props":1113,"children":1114},{"style":243},[1115],{"type":73,"value":1098},{"type":68,"tag":220,"props":1117,"children":1118},{"style":418},[1119],{"type":73,"value":1120}," email",{"type":68,"tag":220,"props":1122,"children":1123},{"style":243},[1124],{"type":73,"value":371},{"type":68,"tag":220,"props":1126,"children":1127},{"style":1039},[1128],{"type":73,"value":1093},{"type":68,"tag":220,"props":1130,"children":1131},{"style":243},[1132],{"type":73,"value":267},{"type":68,"tag":220,"props":1134,"children":1135},{"style":243},[1136],{"type":73,"value":1137}," |",{"type":68,"tag":220,"props":1139,"children":1140},{"style":1039},[1141],{"type":73,"value":1142}," null\n",{"type":68,"tag":220,"props":1144,"children":1145},{"class":222,"line":460},[1146,1151,1155,1159,1163,1167,1171,1175,1180,1184,1188,1193,1197,1202,1207,1212],{"type":68,"tag":220,"props":1147,"children":1148},{"style":418},[1149],{"type":73,"value":1150},"  login",{"type":68,"tag":220,"props":1152,"children":1153},{"style":243},[1154],{"type":73,"value":371},{"type":68,"tag":220,"props":1156,"children":1157},{"style":243},[1158],{"type":73,"value":421},{"type":68,"tag":220,"props":1160,"children":1161},{"style":379},[1162],{"type":73,"value":898},{"type":68,"tag":220,"props":1164,"children":1165},{"style":243},[1166],{"type":73,"value":371},{"type":68,"tag":220,"props":1168,"children":1169},{"style":1039},[1170],{"type":73,"value":1093},{"type":68,"tag":220,"props":1172,"children":1173},{"style":243},[1174],{"type":73,"value":257},{"type":68,"tag":220,"props":1176,"children":1177},{"style":379},[1178],{"type":73,"value":1179}," password",{"type":68,"tag":220,"props":1181,"children":1182},{"style":243},[1183],{"type":73,"value":371},{"type":68,"tag":220,"props":1185,"children":1186},{"style":1039},[1187],{"type":73,"value":1093},{"type":68,"tag":220,"props":1189,"children":1190},{"style":243},[1191],{"type":73,"value":1192},")",{"type":68,"tag":220,"props":1194,"children":1195},{"style":310},[1196],{"type":73,"value":401},{"type":68,"tag":220,"props":1198,"children":1199},{"style":1039},[1200],{"type":73,"value":1201}," Promise",{"type":68,"tag":220,"props":1203,"children":1204},{"style":243},[1205],{"type":73,"value":1206},"\u003C",{"type":68,"tag":220,"props":1208,"children":1209},{"style":1039},[1210],{"type":73,"value":1211},"void",{"type":68,"tag":220,"props":1213,"children":1214},{"style":243},[1215],{"type":73,"value":912},{"type":68,"tag":220,"props":1217,"children":1218},{"class":222,"line":481},[1219,1224,1228,1233,1237],{"type":68,"tag":220,"props":1220,"children":1221},{"style":418},[1222],{"type":73,"value":1223},"  logout",{"type":68,"tag":220,"props":1225,"children":1226},{"style":243},[1227],{"type":73,"value":371},{"type":68,"tag":220,"props":1229,"children":1230},{"style":243},[1231],{"type":73,"value":1232}," ()",{"type":68,"tag":220,"props":1234,"children":1235},{"style":310},[1236],{"type":73,"value":401},{"type":68,"tag":220,"props":1238,"children":1239},{"style":1039},[1240],{"type":73,"value":1241}," void\n",{"type":68,"tag":220,"props":1243,"children":1244},{"class":222,"line":512},[1245],{"type":68,"tag":220,"props":1246,"children":1247},{"style":243},[1248],{"type":73,"value":920},{"type":68,"tag":220,"props":1250,"children":1251},{"class":222,"line":529},[1252],{"type":68,"tag":220,"props":1253,"children":1254},{"emptyLinePlaceholder":295},[1255],{"type":73,"value":298},{"type":68,"tag":220,"props":1257,"children":1258},{"class":222,"line":559},[1259,1263,1268],{"type":68,"tag":220,"props":1260,"children":1261},{"style":310},[1262],{"type":73,"value":1036},{"type":68,"tag":220,"props":1264,"children":1265},{"style":1039},[1266],{"type":73,"value":1267}," MyRouterContext",{"type":68,"tag":220,"props":1269,"children":1270},{"style":243},[1271],{"type":73,"value":406},{"type":68,"tag":220,"props":1273,"children":1274},{"class":222,"line":568},[1275,1280,1284],{"type":68,"tag":220,"props":1276,"children":1277},{"style":418},[1278],{"type":73,"value":1279},"  auth",{"type":68,"tag":220,"props":1281,"children":1282},{"style":243},[1283],{"type":73,"value":371},{"type":68,"tag":220,"props":1285,"children":1286},{"style":1039},[1287],{"type":73,"value":1288}," AuthState\n",{"type":68,"tag":220,"props":1290,"children":1291},{"class":222,"line":582},[1292],{"type":68,"tag":220,"props":1293,"children":1294},{"style":243},[1295],{"type":73,"value":920},{"type":68,"tag":220,"props":1297,"children":1298},{"class":222,"line":591},[1299],{"type":68,"tag":220,"props":1300,"children":1301},{"emptyLinePlaceholder":295},[1302],{"type":73,"value":298},{"type":68,"tag":220,"props":1304,"children":1305},{"class":222,"line":600},[1306,1310,1314,1318,1322,1326,1330,1335,1339,1344],{"type":68,"tag":220,"props":1307,"children":1308},{"style":237},[1309],{"type":73,"value":307},{"type":68,"tag":220,"props":1311,"children":1312},{"style":310},[1313],{"type":73,"value":313},{"type":68,"tag":220,"props":1315,"children":1316},{"style":249},[1317],{"type":73,"value":318},{"type":68,"tag":220,"props":1319,"children":1320},{"style":243},[1321],{"type":73,"value":323},{"type":68,"tag":220,"props":1323,"children":1324},{"style":326},[1325],{"type":73,"value":992},{"type":68,"tag":220,"props":1327,"children":1328},{"style":243},[1329],{"type":73,"value":1206},{"type":68,"tag":220,"props":1331,"children":1332},{"style":1039},[1333],{"type":73,"value":1334},"MyRouterContext",{"type":68,"tag":220,"props":1336,"children":1337},{"style":243},[1338],{"type":73,"value":865},{"type":68,"tag":220,"props":1340,"children":1341},{"style":249},[1342],{"type":73,"value":1343},"()(",{"type":68,"tag":220,"props":1345,"children":1346},{"style":243},[1347],{"type":73,"value":357},{"type":68,"tag":220,"props":1349,"children":1350},{"class":222,"line":609},[1351,1355,1359,1363,1367,1371,1376],{"type":68,"tag":220,"props":1352,"children":1353},{"style":326},[1354],{"type":73,"value":745},{"type":68,"tag":220,"props":1356,"children":1357},{"style":243},[1358],{"type":73,"value":371},{"type":68,"tag":220,"props":1360,"children":1361},{"style":243},[1362],{"type":73,"value":1232},{"type":68,"tag":220,"props":1364,"children":1365},{"style":310},[1366],{"type":73,"value":401},{"type":68,"tag":220,"props":1368,"children":1369},{"style":243},[1370],{"type":73,"value":855},{"type":68,"tag":220,"props":1372,"children":1373},{"style":1039},[1374],{"type":73,"value":1375},"Outlet",{"type":68,"tag":220,"props":1377,"children":1378},{"style":243},[1379],{"type":73,"value":1380}," \u002F>,\n",{"type":68,"tag":220,"props":1382,"children":1384},{"class":222,"line":1383},17,[1385,1389],{"type":68,"tag":220,"props":1386,"children":1387},{"style":243},[1388],{"type":73,"value":615},{"type":68,"tag":220,"props":1390,"children":1391},{"style":249},[1392],{"type":73,"value":579},{"type":68,"tag":209,"props":1394,"children":1396},{"className":211,"code":1395,"language":213,"meta":214,"style":214},"\u002F\u002F src\u002Frouter.tsx\nimport { createRouter } from '@tanstack\u002Freact-router'\nimport { routeTree } from '.\u002FrouteTree.gen'\n\nexport const router = createRouter({\n  routeTree,\n  context: {\n    auth: undefined!, \u002F\u002F placeholder — filled by RouterProvider context prop\n  },\n})\n\ndeclare module '@tanstack\u002Freact-router' {\n  interface Register {\n    router: typeof router\n  }\n}\n",[1397],{"type":68,"tag":99,"props":1398,"children":1399},{"__ignoreMap":214},[1400,1408,1444,1481,1488,1520,1532,1548,1570,1577,1588,1595,1624,1641,1663,1671],{"type":68,"tag":220,"props":1401,"children":1402},{"class":222,"line":223},[1403],{"type":68,"tag":220,"props":1404,"children":1405},{"style":227},[1406],{"type":73,"value":1407},"\u002F\u002F src\u002Frouter.tsx\n",{"type":68,"tag":220,"props":1409,"children":1410},{"class":222,"line":233},[1411,1415,1419,1424,1428,1432,1436,1440],{"type":68,"tag":220,"props":1412,"children":1413},{"style":237},[1414],{"type":73,"value":240},{"type":68,"tag":220,"props":1416,"children":1417},{"style":243},[1418],{"type":73,"value":246},{"type":68,"tag":220,"props":1420,"children":1421},{"style":249},[1422],{"type":73,"value":1423}," createRouter",{"type":68,"tag":220,"props":1425,"children":1426},{"style":243},[1427],{"type":73,"value":267},{"type":68,"tag":220,"props":1429,"children":1430},{"style":237},[1431],{"type":73,"value":272},{"type":68,"tag":220,"props":1433,"children":1434},{"style":243},[1435],{"type":73,"value":277},{"type":68,"tag":220,"props":1437,"children":1438},{"style":280},[1439],{"type":73,"value":283},{"type":68,"tag":220,"props":1441,"children":1442},{"style":243},[1443],{"type":73,"value":288},{"type":68,"tag":220,"props":1445,"children":1446},{"class":222,"line":291},[1447,1451,1455,1460,1464,1468,1472,1477],{"type":68,"tag":220,"props":1448,"children":1449},{"style":237},[1450],{"type":73,"value":240},{"type":68,"tag":220,"props":1452,"children":1453},{"style":243},[1454],{"type":73,"value":246},{"type":68,"tag":220,"props":1456,"children":1457},{"style":249},[1458],{"type":73,"value":1459}," routeTree",{"type":68,"tag":220,"props":1461,"children":1462},{"style":243},[1463],{"type":73,"value":267},{"type":68,"tag":220,"props":1465,"children":1466},{"style":237},[1467],{"type":73,"value":272},{"type":68,"tag":220,"props":1469,"children":1470},{"style":243},[1471],{"type":73,"value":277},{"type":68,"tag":220,"props":1473,"children":1474},{"style":280},[1475],{"type":73,"value":1476},".\u002FrouteTree.gen",{"type":68,"tag":220,"props":1478,"children":1479},{"style":243},[1480],{"type":73,"value":288},{"type":68,"tag":220,"props":1482,"children":1483},{"class":222,"line":301},[1484],{"type":68,"tag":220,"props":1485,"children":1486},{"emptyLinePlaceholder":295},[1487],{"type":73,"value":298},{"type":68,"tag":220,"props":1489,"children":1490},{"class":222,"line":360},[1491,1495,1499,1504,1508,1512,1516],{"type":68,"tag":220,"props":1492,"children":1493},{"style":237},[1494],{"type":73,"value":307},{"type":68,"tag":220,"props":1496,"children":1497},{"style":310},[1498],{"type":73,"value":313},{"type":68,"tag":220,"props":1500,"children":1501},{"style":249},[1502],{"type":73,"value":1503}," router ",{"type":68,"tag":220,"props":1505,"children":1506},{"style":243},[1507],{"type":73,"value":323},{"type":68,"tag":220,"props":1509,"children":1510},{"style":326},[1511],{"type":73,"value":1423},{"type":68,"tag":220,"props":1513,"children":1514},{"style":249},[1515],{"type":73,"value":333},{"type":68,"tag":220,"props":1517,"children":1518},{"style":243},[1519],{"type":73,"value":357},{"type":68,"tag":220,"props":1521,"children":1522},{"class":222,"line":409},[1523,1528],{"type":68,"tag":220,"props":1524,"children":1525},{"style":249},[1526],{"type":73,"value":1527},"  routeTree",{"type":68,"tag":220,"props":1529,"children":1530},{"style":243},[1531],{"type":73,"value":509},{"type":68,"tag":220,"props":1533,"children":1534},{"class":222,"line":460},[1535,1540,1544],{"type":68,"tag":220,"props":1536,"children":1537},{"style":418},[1538],{"type":73,"value":1539},"  context",{"type":68,"tag":220,"props":1541,"children":1542},{"style":243},[1543],{"type":73,"value":371},{"type":68,"tag":220,"props":1545,"children":1546},{"style":243},[1547],{"type":73,"value":406},{"type":68,"tag":220,"props":1549,"children":1550},{"class":222,"line":481},[1551,1556,1560,1565],{"type":68,"tag":220,"props":1552,"children":1553},{"style":418},[1554],{"type":73,"value":1555},"    auth",{"type":68,"tag":220,"props":1557,"children":1558},{"style":243},[1559],{"type":73,"value":371},{"type":68,"tag":220,"props":1561,"children":1562},{"style":243},[1563],{"type":73,"value":1564}," undefined!,",{"type":68,"tag":220,"props":1566,"children":1567},{"style":227},[1568],{"type":73,"value":1569}," \u002F\u002F placeholder — filled by RouterProvider context prop\n",{"type":68,"tag":220,"props":1571,"children":1572},{"class":222,"line":512},[1573],{"type":68,"tag":220,"props":1574,"children":1575},{"style":243},[1576],{"type":73,"value":597},{"type":68,"tag":220,"props":1578,"children":1579},{"class":222,"line":529},[1580,1584],{"type":68,"tag":220,"props":1581,"children":1582},{"style":243},[1583],{"type":73,"value":615},{"type":68,"tag":220,"props":1585,"children":1586},{"style":249},[1587],{"type":73,"value":579},{"type":68,"tag":220,"props":1589,"children":1590},{"class":222,"line":559},[1591],{"type":68,"tag":220,"props":1592,"children":1593},{"emptyLinePlaceholder":295},[1594],{"type":73,"value":298},{"type":68,"tag":220,"props":1596,"children":1597},{"class":222,"line":568},[1598,1603,1608,1612,1616,1620],{"type":68,"tag":220,"props":1599,"children":1600},{"style":310},[1601],{"type":73,"value":1602},"declare",{"type":68,"tag":220,"props":1604,"children":1605},{"style":310},[1606],{"type":73,"value":1607}," module",{"type":68,"tag":220,"props":1609,"children":1610},{"style":243},[1611],{"type":73,"value":277},{"type":68,"tag":220,"props":1613,"children":1614},{"style":280},[1615],{"type":73,"value":283},{"type":68,"tag":220,"props":1617,"children":1618},{"style":243},[1619],{"type":73,"value":338},{"type":68,"tag":220,"props":1621,"children":1622},{"style":243},[1623],{"type":73,"value":406},{"type":68,"tag":220,"props":1625,"children":1626},{"class":222,"line":582},[1627,1632,1637],{"type":68,"tag":220,"props":1628,"children":1629},{"style":310},[1630],{"type":73,"value":1631},"  interface",{"type":68,"tag":220,"props":1633,"children":1634},{"style":1039},[1635],{"type":73,"value":1636}," Register",{"type":68,"tag":220,"props":1638,"children":1639},{"style":243},[1640],{"type":73,"value":406},{"type":68,"tag":220,"props":1642,"children":1643},{"class":222,"line":591},[1644,1649,1653,1658],{"type":68,"tag":220,"props":1645,"children":1646},{"style":418},[1647],{"type":73,"value":1648},"    router",{"type":68,"tag":220,"props":1650,"children":1651},{"style":243},[1652],{"type":73,"value":371},{"type":68,"tag":220,"props":1654,"children":1655},{"style":243},[1656],{"type":73,"value":1657}," typeof",{"type":68,"tag":220,"props":1659,"children":1660},{"style":249},[1661],{"type":73,"value":1662}," router\n",{"type":68,"tag":220,"props":1664,"children":1665},{"class":222,"line":600},[1666],{"type":68,"tag":220,"props":1667,"children":1668},{"style":243},[1669],{"type":73,"value":1670},"  }\n",{"type":68,"tag":220,"props":1672,"children":1673},{"class":222,"line":609},[1674],{"type":68,"tag":220,"props":1675,"children":1676},{"style":243},[1677],{"type":73,"value":920},{"type":68,"tag":209,"props":1679,"children":1681},{"className":211,"code":1680,"language":213,"meta":214,"style":214},"\u002F\u002F src\u002FApp.tsx\nimport { RouterProvider } from '@tanstack\u002Freact-router'\nimport { AuthProvider, useAuth } from '.\u002Fauth'\nimport { router } from '.\u002Frouter'\n\nfunction InnerApp() {\n  const auth = useAuth()\n  \u002F\u002F context prop injects live auth state WITHOUT recreating the router\n  return \u003CRouterProvider router={router} context={{ auth }} \u002F>\n}\n\nfunction App() {\n  return (\n    \u003CAuthProvider>\n      \u003CInnerApp \u002F>\n    \u003C\u002FAuthProvider>\n  )\n}\n",[1682],{"type":68,"tag":99,"props":1683,"children":1684},{"__ignoreMap":214},[1685,1693,1729,1775,1812,1819,1839,1862,1870,1922,1929,1936,1956,1968,1985,2003,2019,2027],{"type":68,"tag":220,"props":1686,"children":1687},{"class":222,"line":223},[1688],{"type":68,"tag":220,"props":1689,"children":1690},{"style":227},[1691],{"type":73,"value":1692},"\u002F\u002F src\u002FApp.tsx\n",{"type":68,"tag":220,"props":1694,"children":1695},{"class":222,"line":233},[1696,1700,1704,1709,1713,1717,1721,1725],{"type":68,"tag":220,"props":1697,"children":1698},{"style":237},[1699],{"type":73,"value":240},{"type":68,"tag":220,"props":1701,"children":1702},{"style":243},[1703],{"type":73,"value":246},{"type":68,"tag":220,"props":1705,"children":1706},{"style":249},[1707],{"type":73,"value":1708}," RouterProvider",{"type":68,"tag":220,"props":1710,"children":1711},{"style":243},[1712],{"type":73,"value":267},{"type":68,"tag":220,"props":1714,"children":1715},{"style":237},[1716],{"type":73,"value":272},{"type":68,"tag":220,"props":1718,"children":1719},{"style":243},[1720],{"type":73,"value":277},{"type":68,"tag":220,"props":1722,"children":1723},{"style":280},[1724],{"type":73,"value":283},{"type":68,"tag":220,"props":1726,"children":1727},{"style":243},[1728],{"type":73,"value":288},{"type":68,"tag":220,"props":1730,"children":1731},{"class":222,"line":291},[1732,1736,1740,1745,1749,1754,1758,1762,1766,1771],{"type":68,"tag":220,"props":1733,"children":1734},{"style":237},[1735],{"type":73,"value":240},{"type":68,"tag":220,"props":1737,"children":1738},{"style":243},[1739],{"type":73,"value":246},{"type":68,"tag":220,"props":1741,"children":1742},{"style":249},[1743],{"type":73,"value":1744}," AuthProvider",{"type":68,"tag":220,"props":1746,"children":1747},{"style":243},[1748],{"type":73,"value":257},{"type":68,"tag":220,"props":1750,"children":1751},{"style":249},[1752],{"type":73,"value":1753}," useAuth",{"type":68,"tag":220,"props":1755,"children":1756},{"style":243},[1757],{"type":73,"value":267},{"type":68,"tag":220,"props":1759,"children":1760},{"style":237},[1761],{"type":73,"value":272},{"type":68,"tag":220,"props":1763,"children":1764},{"style":243},[1765],{"type":73,"value":277},{"type":68,"tag":220,"props":1767,"children":1768},{"style":280},[1769],{"type":73,"value":1770},".\u002Fauth",{"type":68,"tag":220,"props":1772,"children":1773},{"style":243},[1774],{"type":73,"value":288},{"type":68,"tag":220,"props":1776,"children":1777},{"class":222,"line":301},[1778,1782,1786,1791,1795,1799,1803,1808],{"type":68,"tag":220,"props":1779,"children":1780},{"style":237},[1781],{"type":73,"value":240},{"type":68,"tag":220,"props":1783,"children":1784},{"style":243},[1785],{"type":73,"value":246},{"type":68,"tag":220,"props":1787,"children":1788},{"style":249},[1789],{"type":73,"value":1790}," router",{"type":68,"tag":220,"props":1792,"children":1793},{"style":243},[1794],{"type":73,"value":267},{"type":68,"tag":220,"props":1796,"children":1797},{"style":237},[1798],{"type":73,"value":272},{"type":68,"tag":220,"props":1800,"children":1801},{"style":243},[1802],{"type":73,"value":277},{"type":68,"tag":220,"props":1804,"children":1805},{"style":280},[1806],{"type":73,"value":1807},".\u002Frouter",{"type":68,"tag":220,"props":1809,"children":1810},{"style":243},[1811],{"type":73,"value":288},{"type":68,"tag":220,"props":1813,"children":1814},{"class":222,"line":360},[1815],{"type":68,"tag":220,"props":1816,"children":1817},{"emptyLinePlaceholder":295},[1818],{"type":73,"value":298},{"type":68,"tag":220,"props":1820,"children":1821},{"class":222,"line":409},[1822,1826,1831,1835],{"type":68,"tag":220,"props":1823,"children":1824},{"style":310},[1825],{"type":73,"value":784},{"type":68,"tag":220,"props":1827,"children":1828},{"style":326},[1829],{"type":73,"value":1830}," InnerApp",{"type":68,"tag":220,"props":1832,"children":1833},{"style":243},[1834],{"type":73,"value":793},{"type":68,"tag":220,"props":1836,"children":1837},{"style":243},[1838],{"type":73,"value":406},{"type":68,"tag":220,"props":1840,"children":1841},{"class":222,"line":460},[1842,1846,1850,1854,1858],{"type":68,"tag":220,"props":1843,"children":1844},{"style":310},[1845],{"type":73,"value":805},{"type":68,"tag":220,"props":1847,"children":1848},{"style":249},[1849],{"type":73,"value":814},{"type":68,"tag":220,"props":1851,"children":1852},{"style":243},[1853],{"type":73,"value":823},{"type":68,"tag":220,"props":1855,"children":1856},{"style":326},[1857],{"type":73,"value":1753},{"type":68,"tag":220,"props":1859,"children":1860},{"style":418},[1861],{"type":73,"value":842},{"type":68,"tag":220,"props":1863,"children":1864},{"class":222,"line":481},[1865],{"type":68,"tag":220,"props":1866,"children":1867},{"style":227},[1868],{"type":73,"value":1869},"  \u002F\u002F context prop injects live auth state WITHOUT recreating the router\n",{"type":68,"tag":220,"props":1871,"children":1872},{"class":222,"line":512},[1873,1877,1881,1885,1889,1894,1898,1903,1907,1912,1917],{"type":68,"tag":220,"props":1874,"children":1875},{"style":237},[1876],{"type":73,"value":850},{"type":68,"tag":220,"props":1878,"children":1879},{"style":243},[1880],{"type":73,"value":855},{"type":68,"tag":220,"props":1882,"children":1883},{"style":1039},[1884],{"type":73,"value":952},{"type":68,"tag":220,"props":1886,"children":1887},{"style":310},[1888],{"type":73,"value":1790},{"type":68,"tag":220,"props":1890,"children":1891},{"style":243},[1892],{"type":73,"value":1893},"={",{"type":68,"tag":220,"props":1895,"children":1896},{"style":249},[1897],{"type":73,"value":37},{"type":68,"tag":220,"props":1899,"children":1900},{"style":243},[1901],{"type":73,"value":1902},"} ",{"type":68,"tag":220,"props":1904,"children":1905},{"style":310},[1906],{"type":73,"value":431},{"type":68,"tag":220,"props":1908,"children":1909},{"style":243},[1910],{"type":73,"value":1911},"={{",{"type":68,"tag":220,"props":1913,"children":1914},{"style":249},[1915],{"type":73,"value":1916}," auth ",{"type":68,"tag":220,"props":1918,"children":1919},{"style":243},[1920],{"type":73,"value":1921},"}} \u002F>\n",{"type":68,"tag":220,"props":1923,"children":1924},{"class":222,"line":529},[1925],{"type":68,"tag":220,"props":1926,"children":1927},{"style":243},[1928],{"type":73,"value":920},{"type":68,"tag":220,"props":1930,"children":1931},{"class":222,"line":559},[1932],{"type":68,"tag":220,"props":1933,"children":1934},{"emptyLinePlaceholder":295},[1935],{"type":73,"value":298},{"type":68,"tag":220,"props":1937,"children":1938},{"class":222,"line":568},[1939,1943,1948,1952],{"type":68,"tag":220,"props":1940,"children":1941},{"style":310},[1942],{"type":73,"value":784},{"type":68,"tag":220,"props":1944,"children":1945},{"style":326},[1946],{"type":73,"value":1947}," App",{"type":68,"tag":220,"props":1949,"children":1950},{"style":243},[1951],{"type":73,"value":793},{"type":68,"tag":220,"props":1953,"children":1954},{"style":243},[1955],{"type":73,"value":406},{"type":68,"tag":220,"props":1957,"children":1958},{"class":222,"line":582},[1959,1963],{"type":68,"tag":220,"props":1960,"children":1961},{"style":237},[1962],{"type":73,"value":850},{"type":68,"tag":220,"props":1964,"children":1965},{"style":418},[1966],{"type":73,"value":1967}," (\n",{"type":68,"tag":220,"props":1969,"children":1970},{"class":222,"line":591},[1971,1976,1981],{"type":68,"tag":220,"props":1972,"children":1973},{"style":243},[1974],{"type":73,"value":1975},"    \u003C",{"type":68,"tag":220,"props":1977,"children":1978},{"style":1039},[1979],{"type":73,"value":1980},"AuthProvider",{"type":68,"tag":220,"props":1982,"children":1983},{"style":243},[1984],{"type":73,"value":912},{"type":68,"tag":220,"props":1986,"children":1987},{"class":222,"line":600},[1988,1993,1998],{"type":68,"tag":220,"props":1989,"children":1990},{"style":243},[1991],{"type":73,"value":1992},"      \u003C",{"type":68,"tag":220,"props":1994,"children":1995},{"style":1039},[1996],{"type":73,"value":1997},"InnerApp",{"type":68,"tag":220,"props":1999,"children":2000},{"style":243},[2001],{"type":73,"value":2002}," \u002F>\n",{"type":68,"tag":220,"props":2004,"children":2005},{"class":222,"line":609},[2006,2011,2015],{"type":68,"tag":220,"props":2007,"children":2008},{"style":243},[2009],{"type":73,"value":2010},"    \u003C\u002F",{"type":68,"tag":220,"props":2012,"children":2013},{"style":1039},[2014],{"type":73,"value":1980},{"type":68,"tag":220,"props":2016,"children":2017},{"style":243},[2018],{"type":73,"value":912},{"type":68,"tag":220,"props":2020,"children":2021},{"class":222,"line":1383},[2022],{"type":68,"tag":220,"props":2023,"children":2024},{"style":418},[2025],{"type":73,"value":2026},"  )\n",{"type":68,"tag":220,"props":2028,"children":2030},{"class":222,"line":2029},18,[2031],{"type":68,"tag":220,"props":2032,"children":2033},{"style":243},[2034],{"type":73,"value":920},{"type":68,"tag":80,"props":2036,"children":2037},{},[2038,2040,2045,2046,2051],{"type":73,"value":2039},"The router is created once with a placeholder. ",{"type":68,"tag":99,"props":2041,"children":2043},{"className":2042},[],[2044],{"type":73,"value":952},{"type":73,"value":954},{"type":68,"tag":99,"props":2047,"children":2049},{"className":2048},[],[2050],{"type":73,"value":431},{"type":73,"value":2052}," prop injects the live auth state on each render — this avoids recreating the router on auth changes (which would reset caches and rebuild the route tree).",{"type":68,"tag":928,"props":2054,"children":2056},{"id":2055},"redirect-based-auth-with-redirect-back",[2057],{"type":73,"value":2058},"Redirect-Based Auth with Redirect-Back",{"type":68,"tag":80,"props":2060,"children":2061},{},[2062],{"type":73,"value":2063},"Save the current location in search params so you can redirect back after login:",{"type":68,"tag":209,"props":2065,"children":2067},{"className":211,"code":2066,"language":213,"meta":214,"style":214},"\u002F\u002F src\u002Froutes\u002F_authenticated.tsx\nimport { createFileRoute, redirect } from '@tanstack\u002Freact-router'\n\nexport const Route = createFileRoute('\u002F_authenticated')({\n  beforeLoad: ({ context, location }) => {\n    if (!context.auth.isAuthenticated) {\n      throw redirect({\n        to: '\u002Flogin',\n        search: { redirect: location.href },\n      })\n    }\n  },\n})\n",[2068],{"type":68,"tag":99,"props":2069,"children":2070},{"__ignoreMap":214},[2071,2078,2121,2128,2175,2214,2257,2276,2303,2343,2354,2361,2368],{"type":68,"tag":220,"props":2072,"children":2073},{"class":222,"line":223},[2074],{"type":68,"tag":220,"props":2075,"children":2076},{"style":227},[2077],{"type":73,"value":230},{"type":68,"tag":220,"props":2079,"children":2080},{"class":222,"line":233},[2081,2085,2089,2093,2097,2101,2105,2109,2113,2117],{"type":68,"tag":220,"props":2082,"children":2083},{"style":237},[2084],{"type":73,"value":240},{"type":68,"tag":220,"props":2086,"children":2087},{"style":243},[2088],{"type":73,"value":246},{"type":68,"tag":220,"props":2090,"children":2091},{"style":249},[2092],{"type":73,"value":252},{"type":68,"tag":220,"props":2094,"children":2095},{"style":243},[2096],{"type":73,"value":257},{"type":68,"tag":220,"props":2098,"children":2099},{"style":249},[2100],{"type":73,"value":262},{"type":68,"tag":220,"props":2102,"children":2103},{"style":243},[2104],{"type":73,"value":267},{"type":68,"tag":220,"props":2106,"children":2107},{"style":237},[2108],{"type":73,"value":272},{"type":68,"tag":220,"props":2110,"children":2111},{"style":243},[2112],{"type":73,"value":277},{"type":68,"tag":220,"props":2114,"children":2115},{"style":280},[2116],{"type":73,"value":283},{"type":68,"tag":220,"props":2118,"children":2119},{"style":243},[2120],{"type":73,"value":288},{"type":68,"tag":220,"props":2122,"children":2123},{"class":222,"line":291},[2124],{"type":68,"tag":220,"props":2125,"children":2126},{"emptyLinePlaceholder":295},[2127],{"type":73,"value":298},{"type":68,"tag":220,"props":2129,"children":2130},{"class":222,"line":301},[2131,2135,2139,2143,2147,2151,2155,2159,2163,2167,2171],{"type":68,"tag":220,"props":2132,"children":2133},{"style":237},[2134],{"type":73,"value":307},{"type":68,"tag":220,"props":2136,"children":2137},{"style":310},[2138],{"type":73,"value":313},{"type":68,"tag":220,"props":2140,"children":2141},{"style":249},[2142],{"type":73,"value":318},{"type":68,"tag":220,"props":2144,"children":2145},{"style":243},[2146],{"type":73,"value":323},{"type":68,"tag":220,"props":2148,"children":2149},{"style":326},[2150],{"type":73,"value":252},{"type":68,"tag":220,"props":2152,"children":2153},{"style":249},[2154],{"type":73,"value":333},{"type":68,"tag":220,"props":2156,"children":2157},{"style":243},[2158],{"type":73,"value":338},{"type":68,"tag":220,"props":2160,"children":2161},{"style":280},[2162],{"type":73,"value":343},{"type":68,"tag":220,"props":2164,"children":2165},{"style":243},[2166],{"type":73,"value":338},{"type":68,"tag":220,"props":2168,"children":2169},{"style":249},[2170],{"type":73,"value":352},{"type":68,"tag":220,"props":2172,"children":2173},{"style":243},[2174],{"type":73,"value":357},{"type":68,"tag":220,"props":2176,"children":2177},{"class":222,"line":360},[2178,2182,2186,2190,2194,2198,2202,2206,2210],{"type":68,"tag":220,"props":2179,"children":2180},{"style":326},[2181],{"type":73,"value":366},{"type":68,"tag":220,"props":2183,"children":2184},{"style":243},[2185],{"type":73,"value":371},{"type":68,"tag":220,"props":2187,"children":2188},{"style":243},[2189],{"type":73,"value":376},{"type":68,"tag":220,"props":2191,"children":2192},{"style":379},[2193],{"type":73,"value":382},{"type":68,"tag":220,"props":2195,"children":2196},{"style":243},[2197],{"type":73,"value":257},{"type":68,"tag":220,"props":2199,"children":2200},{"style":379},[2201],{"type":73,"value":391},{"type":68,"tag":220,"props":2203,"children":2204},{"style":243},[2205],{"type":73,"value":396},{"type":68,"tag":220,"props":2207,"children":2208},{"style":310},[2209],{"type":73,"value":401},{"type":68,"tag":220,"props":2211,"children":2212},{"style":243},[2213],{"type":73,"value":406},{"type":68,"tag":220,"props":2215,"children":2216},{"class":222,"line":409},[2217,2221,2225,2229,2233,2237,2241,2245,2249,2253],{"type":68,"tag":220,"props":2218,"children":2219},{"style":237},[2220],{"type":73,"value":415},{"type":68,"tag":220,"props":2222,"children":2223},{"style":418},[2224],{"type":73,"value":421},{"type":68,"tag":220,"props":2226,"children":2227},{"style":243},[2228],{"type":73,"value":426},{"type":68,"tag":220,"props":2230,"children":2231},{"style":249},[2232],{"type":73,"value":431},{"type":68,"tag":220,"props":2234,"children":2235},{"style":243},[2236],{"type":73,"value":146},{"type":68,"tag":220,"props":2238,"children":2239},{"style":249},[2240],{"type":73,"value":18},{"type":68,"tag":220,"props":2242,"children":2243},{"style":243},[2244],{"type":73,"value":146},{"type":68,"tag":220,"props":2246,"children":2247},{"style":249},[2248],{"type":73,"value":448},{"type":68,"tag":220,"props":2250,"children":2251},{"style":418},[2252],{"type":73,"value":453},{"type":68,"tag":220,"props":2254,"children":2255},{"style":243},[2256],{"type":73,"value":357},{"type":68,"tag":220,"props":2258,"children":2259},{"class":222,"line":460},[2260,2264,2268,2272],{"type":68,"tag":220,"props":2261,"children":2262},{"style":237},[2263],{"type":73,"value":466},{"type":68,"tag":220,"props":2265,"children":2266},{"style":326},[2267],{"type":73,"value":262},{"type":68,"tag":220,"props":2269,"children":2270},{"style":418},[2271],{"type":73,"value":333},{"type":68,"tag":220,"props":2273,"children":2274},{"style":243},[2275],{"type":73,"value":357},{"type":68,"tag":220,"props":2277,"children":2278},{"class":222,"line":481},[2279,2283,2287,2291,2295,2299],{"type":68,"tag":220,"props":2280,"children":2281},{"style":418},[2282],{"type":73,"value":487},{"type":68,"tag":220,"props":2284,"children":2285},{"style":243},[2286],{"type":73,"value":371},{"type":68,"tag":220,"props":2288,"children":2289},{"style":243},[2290],{"type":73,"value":277},{"type":68,"tag":220,"props":2292,"children":2293},{"style":280},[2294],{"type":73,"value":500},{"type":68,"tag":220,"props":2296,"children":2297},{"style":243},[2298],{"type":73,"value":338},{"type":68,"tag":220,"props":2300,"children":2301},{"style":243},[2302],{"type":73,"value":509},{"type":68,"tag":220,"props":2304,"children":2305},{"class":222,"line":512},[2306,2310,2314,2318,2322,2326,2330,2334,2338],{"type":68,"tag":220,"props":2307,"children":2308},{"style":418},[2309],{"type":73,"value":518},{"type":68,"tag":220,"props":2311,"children":2312},{"style":243},[2313],{"type":73,"value":371},{"type":68,"tag":220,"props":2315,"children":2316},{"style":243},[2317],{"type":73,"value":246},{"type":68,"tag":220,"props":2319,"children":2320},{"style":418},[2321],{"type":73,"value":262},{"type":68,"tag":220,"props":2323,"children":2324},{"style":243},[2325],{"type":73,"value":371},{"type":68,"tag":220,"props":2327,"children":2328},{"style":249},[2329],{"type":73,"value":391},{"type":68,"tag":220,"props":2331,"children":2332},{"style":243},[2333],{"type":73,"value":146},{"type":68,"tag":220,"props":2335,"children":2336},{"style":249},[2337],{"type":73,"value":552},{"type":68,"tag":220,"props":2339,"children":2340},{"style":243},[2341],{"type":73,"value":2342}," },\n",{"type":68,"tag":220,"props":2344,"children":2345},{"class":222,"line":529},[2346,2350],{"type":68,"tag":220,"props":2347,"children":2348},{"style":243},[2349],{"type":73,"value":574},{"type":68,"tag":220,"props":2351,"children":2352},{"style":418},[2353],{"type":73,"value":579},{"type":68,"tag":220,"props":2355,"children":2356},{"class":222,"line":559},[2357],{"type":68,"tag":220,"props":2358,"children":2359},{"style":243},[2360],{"type":73,"value":588},{"type":68,"tag":220,"props":2362,"children":2363},{"class":222,"line":568},[2364],{"type":68,"tag":220,"props":2365,"children":2366},{"style":243},[2367],{"type":73,"value":597},{"type":68,"tag":220,"props":2369,"children":2370},{"class":222,"line":582},[2371,2375],{"type":68,"tag":220,"props":2372,"children":2373},{"style":243},[2374],{"type":73,"value":615},{"type":68,"tag":220,"props":2376,"children":2377},{"style":249},[2378],{"type":73,"value":579},{"type":68,"tag":209,"props":2380,"children":2382},{"className":211,"code":2381,"language":213,"meta":214,"style":214},"\u002F\u002F src\u002Froutes\u002Flogin.tsx\nimport { createFileRoute, redirect } from '@tanstack\u002Freact-router'\nimport { useState, type FormEvent } from 'react'\n\n\u002F\u002F Validate redirect target to prevent open redirect attacks\nfunction sanitizeRedirect(url: unknown): string {\n  if (typeof url !== 'string' || !url.startsWith('\u002F') || url.startsWith('\u002F\u002F')) {\n    return '\u002F'\n  }\n  return url\n}\n\nexport const Route = createFileRoute('\u002Flogin')({\n  validateSearch: (search) => ({\n    redirect: sanitizeRedirect(search.redirect),\n  }),\n  beforeLoad: ({ context, search }) => {\n    if (context.auth.isAuthenticated) {\n      throw redirect({ to: search.redirect })\n    }\n  },\n  component: LoginComponent,\n})\n\nfunction LoginComponent() {\n  const { auth } = Route.useRouteContext()\n  const search = Route.useSearch()\n  const navigate = Route.useNavigate()\n  const [username, setUsername] = useState('')\n  const [password, setPassword] = useState('')\n  const [error, setError] = useState('')\n\n  const handleSubmit = async (e: FormEvent) => {\n    e.preventDefault()\n    try {\n      await auth.login(username, password)\n      navigate({ to: search.redirect })\n    } catch {\n      setError('Invalid credentials')\n    }\n  }\n\n  return (\n    \u003Cform onSubmit={handleSubmit}>\n      {error && \u003Cdiv>{error}\u003C\u002Fdiv>}\n      \u003Cinput value={username} onChange={(e) => setUsername(e.target.value)} \u002F>\n      \u003Cinput\n        type=\"password\"\n        value={password}\n        onChange={(e) => setPassword(e.target.value)}\n      \u002F>\n      \u003Cbutton type=\"submit\">Sign In\u003C\u002Fbutton>\n    \u003C\u002Fform>\n  )\n}\n",[2383],{"type":68,"tag":99,"props":2384,"children":2385},{"__ignoreMap":214},[2386,2394,2437,2487,2494,2502,2543,2669,2689,2696,2708,2715,2722,2769,2805,2839,2855,2895,2934,2984,2992,3000,3021,3033,3041,3061,3101,3134,3168,3220,3270,3320,3328,3379,3401,3414,3456,3501,3519,3549,3557,3565,3573,3585,3617,3666,3750,3763,3790,3811,3864,3873,3929,3945,3953],{"type":68,"tag":220,"props":2387,"children":2388},{"class":222,"line":223},[2389],{"type":68,"tag":220,"props":2390,"children":2391},{"style":227},[2392],{"type":73,"value":2393},"\u002F\u002F src\u002Froutes\u002Flogin.tsx\n",{"type":68,"tag":220,"props":2395,"children":2396},{"class":222,"line":233},[2397,2401,2405,2409,2413,2417,2421,2425,2429,2433],{"type":68,"tag":220,"props":2398,"children":2399},{"style":237},[2400],{"type":73,"value":240},{"type":68,"tag":220,"props":2402,"children":2403},{"style":243},[2404],{"type":73,"value":246},{"type":68,"tag":220,"props":2406,"children":2407},{"style":249},[2408],{"type":73,"value":252},{"type":68,"tag":220,"props":2410,"children":2411},{"style":243},[2412],{"type":73,"value":257},{"type":68,"tag":220,"props":2414,"children":2415},{"style":249},[2416],{"type":73,"value":262},{"type":68,"tag":220,"props":2418,"children":2419},{"style":243},[2420],{"type":73,"value":267},{"type":68,"tag":220,"props":2422,"children":2423},{"style":237},[2424],{"type":73,"value":272},{"type":68,"tag":220,"props":2426,"children":2427},{"style":243},[2428],{"type":73,"value":277},{"type":68,"tag":220,"props":2430,"children":2431},{"style":280},[2432],{"type":73,"value":283},{"type":68,"tag":220,"props":2434,"children":2435},{"style":243},[2436],{"type":73,"value":288},{"type":68,"tag":220,"props":2438,"children":2439},{"class":222,"line":291},[2440,2444,2448,2453,2457,2462,2467,2471,2475,2479,2483],{"type":68,"tag":220,"props":2441,"children":2442},{"style":237},[2443],{"type":73,"value":240},{"type":68,"tag":220,"props":2445,"children":2446},{"style":243},[2447],{"type":73,"value":246},{"type":68,"tag":220,"props":2449,"children":2450},{"style":249},[2451],{"type":73,"value":2452}," useState",{"type":68,"tag":220,"props":2454,"children":2455},{"style":243},[2456],{"type":73,"value":257},{"type":68,"tag":220,"props":2458,"children":2459},{"style":237},[2460],{"type":73,"value":2461}," type",{"type":68,"tag":220,"props":2463,"children":2464},{"style":249},[2465],{"type":73,"value":2466}," FormEvent",{"type":68,"tag":220,"props":2468,"children":2469},{"style":243},[2470],{"type":73,"value":267},{"type":68,"tag":220,"props":2472,"children":2473},{"style":237},[2474],{"type":73,"value":272},{"type":68,"tag":220,"props":2476,"children":2477},{"style":243},[2478],{"type":73,"value":277},{"type":68,"tag":220,"props":2480,"children":2481},{"style":280},[2482],{"type":73,"value":35},{"type":68,"tag":220,"props":2484,"children":2485},{"style":243},[2486],{"type":73,"value":288},{"type":68,"tag":220,"props":2488,"children":2489},{"class":222,"line":301},[2490],{"type":68,"tag":220,"props":2491,"children":2492},{"emptyLinePlaceholder":295},[2493],{"type":73,"value":298},{"type":68,"tag":220,"props":2495,"children":2496},{"class":222,"line":360},[2497],{"type":68,"tag":220,"props":2498,"children":2499},{"style":227},[2500],{"type":73,"value":2501},"\u002F\u002F Validate redirect target to prevent open redirect attacks\n",{"type":68,"tag":220,"props":2503,"children":2504},{"class":222,"line":409},[2505,2509,2514,2518,2522,2526,2531,2535,2539],{"type":68,"tag":220,"props":2506,"children":2507},{"style":310},[2508],{"type":73,"value":784},{"type":68,"tag":220,"props":2510,"children":2511},{"style":326},[2512],{"type":73,"value":2513}," sanitizeRedirect",{"type":68,"tag":220,"props":2515,"children":2516},{"style":243},[2517],{"type":73,"value":333},{"type":68,"tag":220,"props":2519,"children":2520},{"style":379},[2521],{"type":73,"value":46},{"type":68,"tag":220,"props":2523,"children":2524},{"style":243},[2525],{"type":73,"value":371},{"type":68,"tag":220,"props":2527,"children":2528},{"style":1039},[2529],{"type":73,"value":2530}," unknown",{"type":68,"tag":220,"props":2532,"children":2533},{"style":243},[2534],{"type":73,"value":207},{"type":68,"tag":220,"props":2536,"children":2537},{"style":1039},[2538],{"type":73,"value":1093},{"type":68,"tag":220,"props":2540,"children":2541},{"style":243},[2542],{"type":73,"value":406},{"type":68,"tag":220,"props":2544,"children":2545},{"class":222,"line":460},[2546,2551,2555,2560,2565,2570,2574,2579,2583,2588,2593,2597,2601,2606,2610,2614,2618,2622,2626,2631,2635,2639,2643,2647,2651,2656,2660,2665],{"type":68,"tag":220,"props":2547,"children":2548},{"style":237},[2549],{"type":73,"value":2550},"  if",{"type":68,"tag":220,"props":2552,"children":2553},{"style":418},[2554],{"type":73,"value":421},{"type":68,"tag":220,"props":2556,"children":2557},{"style":243},[2558],{"type":73,"value":2559},"typeof",{"type":68,"tag":220,"props":2561,"children":2562},{"style":249},[2563],{"type":73,"value":2564}," url",{"type":68,"tag":220,"props":2566,"children":2567},{"style":243},[2568],{"type":73,"value":2569}," !==",{"type":68,"tag":220,"props":2571,"children":2572},{"style":243},[2573],{"type":73,"value":277},{"type":68,"tag":220,"props":2575,"children":2576},{"style":280},[2577],{"type":73,"value":2578},"string",{"type":68,"tag":220,"props":2580,"children":2581},{"style":243},[2582],{"type":73,"value":338},{"type":68,"tag":220,"props":2584,"children":2585},{"style":243},[2586],{"type":73,"value":2587}," ||",{"type":68,"tag":220,"props":2589,"children":2590},{"style":243},[2591],{"type":73,"value":2592}," !",{"type":68,"tag":220,"props":2594,"children":2595},{"style":249},[2596],{"type":73,"value":46},{"type":68,"tag":220,"props":2598,"children":2599},{"style":243},[2600],{"type":73,"value":146},{"type":68,"tag":220,"props":2602,"children":2603},{"style":326},[2604],{"type":73,"value":2605},"startsWith",{"type":68,"tag":220,"props":2607,"children":2608},{"style":418},[2609],{"type":73,"value":333},{"type":68,"tag":220,"props":2611,"children":2612},{"style":243},[2613],{"type":73,"value":338},{"type":68,"tag":220,"props":2615,"children":2616},{"style":280},[2617],{"type":73,"value":106},{"type":68,"tag":220,"props":2619,"children":2620},{"style":243},[2621],{"type":73,"value":338},{"type":68,"tag":220,"props":2623,"children":2624},{"style":418},[2625],{"type":73,"value":453},{"type":68,"tag":220,"props":2627,"children":2628},{"style":243},[2629],{"type":73,"value":2630},"||",{"type":68,"tag":220,"props":2632,"children":2633},{"style":249},[2634],{"type":73,"value":2564},{"type":68,"tag":220,"props":2636,"children":2637},{"style":243},[2638],{"type":73,"value":146},{"type":68,"tag":220,"props":2640,"children":2641},{"style":326},[2642],{"type":73,"value":2605},{"type":68,"tag":220,"props":2644,"children":2645},{"style":418},[2646],{"type":73,"value":333},{"type":68,"tag":220,"props":2648,"children":2649},{"style":243},[2650],{"type":73,"value":338},{"type":68,"tag":220,"props":2652,"children":2653},{"style":280},[2654],{"type":73,"value":2655},"\u002F\u002F",{"type":68,"tag":220,"props":2657,"children":2658},{"style":243},[2659],{"type":73,"value":338},{"type":68,"tag":220,"props":2661,"children":2662},{"style":418},[2663],{"type":73,"value":2664},")) ",{"type":68,"tag":220,"props":2666,"children":2667},{"style":243},[2668],{"type":73,"value":357},{"type":68,"tag":220,"props":2670,"children":2671},{"class":222,"line":481},[2672,2677,2681,2685],{"type":68,"tag":220,"props":2673,"children":2674},{"style":237},[2675],{"type":73,"value":2676},"    return",{"type":68,"tag":220,"props":2678,"children":2679},{"style":243},[2680],{"type":73,"value":277},{"type":68,"tag":220,"props":2682,"children":2683},{"style":280},[2684],{"type":73,"value":106},{"type":68,"tag":220,"props":2686,"children":2687},{"style":243},[2688],{"type":73,"value":288},{"type":68,"tag":220,"props":2690,"children":2691},{"class":222,"line":512},[2692],{"type":68,"tag":220,"props":2693,"children":2694},{"style":243},[2695],{"type":73,"value":1670},{"type":68,"tag":220,"props":2697,"children":2698},{"class":222,"line":529},[2699,2703],{"type":68,"tag":220,"props":2700,"children":2701},{"style":237},[2702],{"type":73,"value":850},{"type":68,"tag":220,"props":2704,"children":2705},{"style":249},[2706],{"type":73,"value":2707}," url\n",{"type":68,"tag":220,"props":2709,"children":2710},{"class":222,"line":559},[2711],{"type":68,"tag":220,"props":2712,"children":2713},{"style":243},[2714],{"type":73,"value":920},{"type":68,"tag":220,"props":2716,"children":2717},{"class":222,"line":568},[2718],{"type":68,"tag":220,"props":2719,"children":2720},{"emptyLinePlaceholder":295},[2721],{"type":73,"value":298},{"type":68,"tag":220,"props":2723,"children":2724},{"class":222,"line":582},[2725,2729,2733,2737,2741,2745,2749,2753,2757,2761,2765],{"type":68,"tag":220,"props":2726,"children":2727},{"style":237},[2728],{"type":73,"value":307},{"type":68,"tag":220,"props":2730,"children":2731},{"style":310},[2732],{"type":73,"value":313},{"type":68,"tag":220,"props":2734,"children":2735},{"style":249},[2736],{"type":73,"value":318},{"type":68,"tag":220,"props":2738,"children":2739},{"style":243},[2740],{"type":73,"value":323},{"type":68,"tag":220,"props":2742,"children":2743},{"style":326},[2744],{"type":73,"value":252},{"type":68,"tag":220,"props":2746,"children":2747},{"style":249},[2748],{"type":73,"value":333},{"type":68,"tag":220,"props":2750,"children":2751},{"style":243},[2752],{"type":73,"value":338},{"type":68,"tag":220,"props":2754,"children":2755},{"style":280},[2756],{"type":73,"value":500},{"type":68,"tag":220,"props":2758,"children":2759},{"style":243},[2760],{"type":73,"value":338},{"type":68,"tag":220,"props":2762,"children":2763},{"style":249},[2764],{"type":73,"value":352},{"type":68,"tag":220,"props":2766,"children":2767},{"style":243},[2768],{"type":73,"value":357},{"type":68,"tag":220,"props":2770,"children":2771},{"class":222,"line":591},[2772,2777,2781,2785,2789,2793,2797,2801],{"type":68,"tag":220,"props":2773,"children":2774},{"style":326},[2775],{"type":73,"value":2776},"  validateSearch",{"type":68,"tag":220,"props":2778,"children":2779},{"style":243},[2780],{"type":73,"value":371},{"type":68,"tag":220,"props":2782,"children":2783},{"style":243},[2784],{"type":73,"value":421},{"type":68,"tag":220,"props":2786,"children":2787},{"style":379},[2788],{"type":73,"value":39},{"type":68,"tag":220,"props":2790,"children":2791},{"style":243},[2792],{"type":73,"value":1192},{"type":68,"tag":220,"props":2794,"children":2795},{"style":310},[2796],{"type":73,"value":401},{"type":68,"tag":220,"props":2798,"children":2799},{"style":249},[2800],{"type":73,"value":421},{"type":68,"tag":220,"props":2802,"children":2803},{"style":243},[2804],{"type":73,"value":357},{"type":68,"tag":220,"props":2806,"children":2807},{"class":222,"line":600},[2808,2813,2817,2821,2826,2830,2835],{"type":68,"tag":220,"props":2809,"children":2810},{"style":418},[2811],{"type":73,"value":2812},"    redirect",{"type":68,"tag":220,"props":2814,"children":2815},{"style":243},[2816],{"type":73,"value":371},{"type":68,"tag":220,"props":2818,"children":2819},{"style":326},[2820],{"type":73,"value":2513},{"type":68,"tag":220,"props":2822,"children":2823},{"style":249},[2824],{"type":73,"value":2825},"(search",{"type":68,"tag":220,"props":2827,"children":2828},{"style":243},[2829],{"type":73,"value":146},{"type":68,"tag":220,"props":2831,"children":2832},{"style":249},[2833],{"type":73,"value":2834},"redirect)",{"type":68,"tag":220,"props":2836,"children":2837},{"style":243},[2838],{"type":73,"value":509},{"type":68,"tag":220,"props":2840,"children":2841},{"class":222,"line":609},[2842,2847,2851],{"type":68,"tag":220,"props":2843,"children":2844},{"style":243},[2845],{"type":73,"value":2846},"  }",{"type":68,"tag":220,"props":2848,"children":2849},{"style":249},[2850],{"type":73,"value":1192},{"type":68,"tag":220,"props":2852,"children":2853},{"style":243},[2854],{"type":73,"value":509},{"type":68,"tag":220,"props":2856,"children":2857},{"class":222,"line":1383},[2858,2862,2866,2870,2874,2878,2883,2887,2891],{"type":68,"tag":220,"props":2859,"children":2860},{"style":326},[2861],{"type":73,"value":366},{"type":68,"tag":220,"props":2863,"children":2864},{"style":243},[2865],{"type":73,"value":371},{"type":68,"tag":220,"props":2867,"children":2868},{"style":243},[2869],{"type":73,"value":376},{"type":68,"tag":220,"props":2871,"children":2872},{"style":379},[2873],{"type":73,"value":382},{"type":68,"tag":220,"props":2875,"children":2876},{"style":243},[2877],{"type":73,"value":257},{"type":68,"tag":220,"props":2879,"children":2880},{"style":379},[2881],{"type":73,"value":2882}," search",{"type":68,"tag":220,"props":2884,"children":2885},{"style":243},[2886],{"type":73,"value":396},{"type":68,"tag":220,"props":2888,"children":2889},{"style":310},[2890],{"type":73,"value":401},{"type":68,"tag":220,"props":2892,"children":2893},{"style":243},[2894],{"type":73,"value":406},{"type":68,"tag":220,"props":2896,"children":2897},{"class":222,"line":2029},[2898,2902,2906,2910,2914,2918,2922,2926,2930],{"type":68,"tag":220,"props":2899,"children":2900},{"style":237},[2901],{"type":73,"value":415},{"type":68,"tag":220,"props":2903,"children":2904},{"style":418},[2905],{"type":73,"value":421},{"type":68,"tag":220,"props":2907,"children":2908},{"style":249},[2909],{"type":73,"value":431},{"type":68,"tag":220,"props":2911,"children":2912},{"style":243},[2913],{"type":73,"value":146},{"type":68,"tag":220,"props":2915,"children":2916},{"style":249},[2917],{"type":73,"value":18},{"type":68,"tag":220,"props":2919,"children":2920},{"style":243},[2921],{"type":73,"value":146},{"type":68,"tag":220,"props":2923,"children":2924},{"style":249},[2925],{"type":73,"value":448},{"type":68,"tag":220,"props":2927,"children":2928},{"style":418},[2929],{"type":73,"value":453},{"type":68,"tag":220,"props":2931,"children":2932},{"style":243},[2933],{"type":73,"value":357},{"type":68,"tag":220,"props":2935,"children":2937},{"class":222,"line":2936},19,[2938,2942,2946,2950,2954,2959,2963,2967,2971,2976,2980],{"type":68,"tag":220,"props":2939,"children":2940},{"style":237},[2941],{"type":73,"value":466},{"type":68,"tag":220,"props":2943,"children":2944},{"style":326},[2945],{"type":73,"value":262},{"type":68,"tag":220,"props":2947,"children":2948},{"style":418},[2949],{"type":73,"value":333},{"type":68,"tag":220,"props":2951,"children":2952},{"style":243},[2953],{"type":73,"value":875},{"type":68,"tag":220,"props":2955,"children":2956},{"style":418},[2957],{"type":73,"value":2958}," to",{"type":68,"tag":220,"props":2960,"children":2961},{"style":243},[2962],{"type":73,"value":371},{"type":68,"tag":220,"props":2964,"children":2965},{"style":249},[2966],{"type":73,"value":2882},{"type":68,"tag":220,"props":2968,"children":2969},{"style":243},[2970],{"type":73,"value":146},{"type":68,"tag":220,"props":2972,"children":2973},{"style":249},[2974],{"type":73,"value":2975},"redirect",{"type":68,"tag":220,"props":2977,"children":2978},{"style":243},[2979],{"type":73,"value":267},{"type":68,"tag":220,"props":2981,"children":2982},{"style":418},[2983],{"type":73,"value":579},{"type":68,"tag":220,"props":2985,"children":2987},{"class":222,"line":2986},20,[2988],{"type":68,"tag":220,"props":2989,"children":2990},{"style":243},[2991],{"type":73,"value":588},{"type":68,"tag":220,"props":2993,"children":2995},{"class":222,"line":2994},21,[2996],{"type":68,"tag":220,"props":2997,"children":2998},{"style":243},[2999],{"type":73,"value":597},{"type":68,"tag":220,"props":3001,"children":3003},{"class":222,"line":3002},22,[3004,3008,3012,3017],{"type":68,"tag":220,"props":3005,"children":3006},{"style":418},[3007],{"type":73,"value":745},{"type":68,"tag":220,"props":3009,"children":3010},{"style":243},[3011],{"type":73,"value":371},{"type":68,"tag":220,"props":3013,"children":3014},{"style":249},[3015],{"type":73,"value":3016}," LoginComponent",{"type":68,"tag":220,"props":3018,"children":3019},{"style":243},[3020],{"type":73,"value":509},{"type":68,"tag":220,"props":3022,"children":3024},{"class":222,"line":3023},23,[3025,3029],{"type":68,"tag":220,"props":3026,"children":3027},{"style":243},[3028],{"type":73,"value":615},{"type":68,"tag":220,"props":3030,"children":3031},{"style":249},[3032],{"type":73,"value":579},{"type":68,"tag":220,"props":3034,"children":3036},{"class":222,"line":3035},24,[3037],{"type":68,"tag":220,"props":3038,"children":3039},{"emptyLinePlaceholder":295},[3040],{"type":73,"value":298},{"type":68,"tag":220,"props":3042,"children":3044},{"class":222,"line":3043},25,[3045,3049,3053,3057],{"type":68,"tag":220,"props":3046,"children":3047},{"style":310},[3048],{"type":73,"value":784},{"type":68,"tag":220,"props":3050,"children":3051},{"style":326},[3052],{"type":73,"value":3016},{"type":68,"tag":220,"props":3054,"children":3055},{"style":243},[3056],{"type":73,"value":793},{"type":68,"tag":220,"props":3058,"children":3059},{"style":243},[3060],{"type":73,"value":406},{"type":68,"tag":220,"props":3062,"children":3064},{"class":222,"line":3063},26,[3065,3069,3073,3077,3081,3085,3089,3093,3097],{"type":68,"tag":220,"props":3066,"children":3067},{"style":310},[3068],{"type":73,"value":805},{"type":68,"tag":220,"props":3070,"children":3071},{"style":243},[3072],{"type":73,"value":246},{"type":68,"tag":220,"props":3074,"children":3075},{"style":249},[3076],{"type":73,"value":814},{"type":68,"tag":220,"props":3078,"children":3079},{"style":243},[3080],{"type":73,"value":267},{"type":68,"tag":220,"props":3082,"children":3083},{"style":243},[3084],{"type":73,"value":823},{"type":68,"tag":220,"props":3086,"children":3087},{"style":249},[3088],{"type":73,"value":828},{"type":68,"tag":220,"props":3090,"children":3091},{"style":243},[3092],{"type":73,"value":146},{"type":68,"tag":220,"props":3094,"children":3095},{"style":326},[3096],{"type":73,"value":837},{"type":68,"tag":220,"props":3098,"children":3099},{"style":418},[3100],{"type":73,"value":842},{"type":68,"tag":220,"props":3102,"children":3104},{"class":222,"line":3103},27,[3105,3109,3113,3117,3121,3125,3130],{"type":68,"tag":220,"props":3106,"children":3107},{"style":310},[3108],{"type":73,"value":805},{"type":68,"tag":220,"props":3110,"children":3111},{"style":249},[3112],{"type":73,"value":2882},{"type":68,"tag":220,"props":3114,"children":3115},{"style":243},[3116],{"type":73,"value":823},{"type":68,"tag":220,"props":3118,"children":3119},{"style":249},[3120],{"type":73,"value":828},{"type":68,"tag":220,"props":3122,"children":3123},{"style":243},[3124],{"type":73,"value":146},{"type":68,"tag":220,"props":3126,"children":3127},{"style":326},[3128],{"type":73,"value":3129},"useSearch",{"type":68,"tag":220,"props":3131,"children":3132},{"style":418},[3133],{"type":73,"value":842},{"type":68,"tag":220,"props":3135,"children":3137},{"class":222,"line":3136},28,[3138,3142,3147,3151,3155,3159,3164],{"type":68,"tag":220,"props":3139,"children":3140},{"style":310},[3141],{"type":73,"value":805},{"type":68,"tag":220,"props":3143,"children":3144},{"style":249},[3145],{"type":73,"value":3146}," navigate",{"type":68,"tag":220,"props":3148,"children":3149},{"style":243},[3150],{"type":73,"value":823},{"type":68,"tag":220,"props":3152,"children":3153},{"style":249},[3154],{"type":73,"value":828},{"type":68,"tag":220,"props":3156,"children":3157},{"style":243},[3158],{"type":73,"value":146},{"type":68,"tag":220,"props":3160,"children":3161},{"style":326},[3162],{"type":73,"value":3163},"useNavigate",{"type":68,"tag":220,"props":3165,"children":3166},{"style":418},[3167],{"type":73,"value":842},{"type":68,"tag":220,"props":3169,"children":3171},{"class":222,"line":3170},29,[3172,3176,3181,3185,3189,3194,3199,3203,3207,3211,3216],{"type":68,"tag":220,"props":3173,"children":3174},{"style":310},[3175],{"type":73,"value":805},{"type":68,"tag":220,"props":3177,"children":3178},{"style":243},[3179],{"type":73,"value":3180}," [",{"type":68,"tag":220,"props":3182,"children":3183},{"style":249},[3184],{"type":73,"value":898},{"type":68,"tag":220,"props":3186,"children":3187},{"style":243},[3188],{"type":73,"value":257},{"type":68,"tag":220,"props":3190,"children":3191},{"style":249},[3192],{"type":73,"value":3193}," setUsername",{"type":68,"tag":220,"props":3195,"children":3196},{"style":243},[3197],{"type":73,"value":3198},"]",{"type":68,"tag":220,"props":3200,"children":3201},{"style":243},[3202],{"type":73,"value":823},{"type":68,"tag":220,"props":3204,"children":3205},{"style":326},[3206],{"type":73,"value":2452},{"type":68,"tag":220,"props":3208,"children":3209},{"style":418},[3210],{"type":73,"value":333},{"type":68,"tag":220,"props":3212,"children":3213},{"style":243},[3214],{"type":73,"value":3215},"''",{"type":68,"tag":220,"props":3217,"children":3218},{"style":418},[3219],{"type":73,"value":579},{"type":68,"tag":220,"props":3221,"children":3223},{"class":222,"line":3222},30,[3224,3228,3232,3237,3241,3246,3250,3254,3258,3262,3266],{"type":68,"tag":220,"props":3225,"children":3226},{"style":310},[3227],{"type":73,"value":805},{"type":68,"tag":220,"props":3229,"children":3230},{"style":243},[3231],{"type":73,"value":3180},{"type":68,"tag":220,"props":3233,"children":3234},{"style":249},[3235],{"type":73,"value":3236},"password",{"type":68,"tag":220,"props":3238,"children":3239},{"style":243},[3240],{"type":73,"value":257},{"type":68,"tag":220,"props":3242,"children":3243},{"style":249},[3244],{"type":73,"value":3245}," setPassword",{"type":68,"tag":220,"props":3247,"children":3248},{"style":243},[3249],{"type":73,"value":3198},{"type":68,"tag":220,"props":3251,"children":3252},{"style":243},[3253],{"type":73,"value":823},{"type":68,"tag":220,"props":3255,"children":3256},{"style":326},[3257],{"type":73,"value":2452},{"type":68,"tag":220,"props":3259,"children":3260},{"style":418},[3261],{"type":73,"value":333},{"type":68,"tag":220,"props":3263,"children":3264},{"style":243},[3265],{"type":73,"value":3215},{"type":68,"tag":220,"props":3267,"children":3268},{"style":418},[3269],{"type":73,"value":579},{"type":68,"tag":220,"props":3271,"children":3273},{"class":222,"line":3272},31,[3274,3278,3282,3287,3291,3296,3300,3304,3308,3312,3316],{"type":68,"tag":220,"props":3275,"children":3276},{"style":310},[3277],{"type":73,"value":805},{"type":68,"tag":220,"props":3279,"children":3280},{"style":243},[3281],{"type":73,"value":3180},{"type":68,"tag":220,"props":3283,"children":3284},{"style":249},[3285],{"type":73,"value":3286},"error",{"type":68,"tag":220,"props":3288,"children":3289},{"style":243},[3290],{"type":73,"value":257},{"type":68,"tag":220,"props":3292,"children":3293},{"style":249},[3294],{"type":73,"value":3295}," setError",{"type":68,"tag":220,"props":3297,"children":3298},{"style":243},[3299],{"type":73,"value":3198},{"type":68,"tag":220,"props":3301,"children":3302},{"style":243},[3303],{"type":73,"value":823},{"type":68,"tag":220,"props":3305,"children":3306},{"style":326},[3307],{"type":73,"value":2452},{"type":68,"tag":220,"props":3309,"children":3310},{"style":418},[3311],{"type":73,"value":333},{"type":68,"tag":220,"props":3313,"children":3314},{"style":243},[3315],{"type":73,"value":3215},{"type":68,"tag":220,"props":3317,"children":3318},{"style":418},[3319],{"type":73,"value":579},{"type":68,"tag":220,"props":3321,"children":3323},{"class":222,"line":3322},32,[3324],{"type":68,"tag":220,"props":3325,"children":3326},{"emptyLinePlaceholder":295},[3327],{"type":73,"value":298},{"type":68,"tag":220,"props":3329,"children":3331},{"class":222,"line":3330},33,[3332,3336,3341,3345,3350,3354,3359,3363,3367,3371,3375],{"type":68,"tag":220,"props":3333,"children":3334},{"style":310},[3335],{"type":73,"value":805},{"type":68,"tag":220,"props":3337,"children":3338},{"style":249},[3339],{"type":73,"value":3340}," handleSubmit",{"type":68,"tag":220,"props":3342,"children":3343},{"style":243},[3344],{"type":73,"value":823},{"type":68,"tag":220,"props":3346,"children":3347},{"style":310},[3348],{"type":73,"value":3349}," async",{"type":68,"tag":220,"props":3351,"children":3352},{"style":243},[3353],{"type":73,"value":421},{"type":68,"tag":220,"props":3355,"children":3356},{"style":379},[3357],{"type":73,"value":3358},"e",{"type":68,"tag":220,"props":3360,"children":3361},{"style":243},[3362],{"type":73,"value":371},{"type":68,"tag":220,"props":3364,"children":3365},{"style":1039},[3366],{"type":73,"value":2466},{"type":68,"tag":220,"props":3368,"children":3369},{"style":243},[3370],{"type":73,"value":1192},{"type":68,"tag":220,"props":3372,"children":3373},{"style":310},[3374],{"type":73,"value":401},{"type":68,"tag":220,"props":3376,"children":3377},{"style":243},[3378],{"type":73,"value":406},{"type":68,"tag":220,"props":3380,"children":3382},{"class":222,"line":3381},34,[3383,3388,3392,3397],{"type":68,"tag":220,"props":3384,"children":3385},{"style":249},[3386],{"type":73,"value":3387},"    e",{"type":68,"tag":220,"props":3389,"children":3390},{"style":243},[3391],{"type":73,"value":146},{"type":68,"tag":220,"props":3393,"children":3394},{"style":326},[3395],{"type":73,"value":3396},"preventDefault",{"type":68,"tag":220,"props":3398,"children":3399},{"style":418},[3400],{"type":73,"value":842},{"type":68,"tag":220,"props":3402,"children":3404},{"class":222,"line":3403},35,[3405,3410],{"type":68,"tag":220,"props":3406,"children":3407},{"style":237},[3408],{"type":73,"value":3409},"    try",{"type":68,"tag":220,"props":3411,"children":3412},{"style":243},[3413],{"type":73,"value":406},{"type":68,"tag":220,"props":3415,"children":3417},{"class":222,"line":3416},36,[3418,3423,3427,3431,3436,3440,3444,3448,3452],{"type":68,"tag":220,"props":3419,"children":3420},{"style":237},[3421],{"type":73,"value":3422},"      await",{"type":68,"tag":220,"props":3424,"children":3425},{"style":249},[3426],{"type":73,"value":814},{"type":68,"tag":220,"props":3428,"children":3429},{"style":243},[3430],{"type":73,"value":146},{"type":68,"tag":220,"props":3432,"children":3433},{"style":326},[3434],{"type":73,"value":3435},"login",{"type":68,"tag":220,"props":3437,"children":3438},{"style":418},[3439],{"type":73,"value":333},{"type":68,"tag":220,"props":3441,"children":3442},{"style":249},[3443],{"type":73,"value":898},{"type":68,"tag":220,"props":3445,"children":3446},{"style":243},[3447],{"type":73,"value":257},{"type":68,"tag":220,"props":3449,"children":3450},{"style":249},[3451],{"type":73,"value":1179},{"type":68,"tag":220,"props":3453,"children":3454},{"style":418},[3455],{"type":73,"value":579},{"type":68,"tag":220,"props":3457,"children":3459},{"class":222,"line":3458},37,[3460,3465,3469,3473,3477,3481,3485,3489,3493,3497],{"type":68,"tag":220,"props":3461,"children":3462},{"style":326},[3463],{"type":73,"value":3464},"      navigate",{"type":68,"tag":220,"props":3466,"children":3467},{"style":418},[3468],{"type":73,"value":333},{"type":68,"tag":220,"props":3470,"children":3471},{"style":243},[3472],{"type":73,"value":875},{"type":68,"tag":220,"props":3474,"children":3475},{"style":418},[3476],{"type":73,"value":2958},{"type":68,"tag":220,"props":3478,"children":3479},{"style":243},[3480],{"type":73,"value":371},{"type":68,"tag":220,"props":3482,"children":3483},{"style":249},[3484],{"type":73,"value":2882},{"type":68,"tag":220,"props":3486,"children":3487},{"style":243},[3488],{"type":73,"value":146},{"type":68,"tag":220,"props":3490,"children":3491},{"style":249},[3492],{"type":73,"value":2975},{"type":68,"tag":220,"props":3494,"children":3495},{"style":243},[3496],{"type":73,"value":267},{"type":68,"tag":220,"props":3498,"children":3499},{"style":418},[3500],{"type":73,"value":579},{"type":68,"tag":220,"props":3502,"children":3504},{"class":222,"line":3503},38,[3505,3510,3515],{"type":68,"tag":220,"props":3506,"children":3507},{"style":243},[3508],{"type":73,"value":3509},"    }",{"type":68,"tag":220,"props":3511,"children":3512},{"style":237},[3513],{"type":73,"value":3514}," catch",{"type":68,"tag":220,"props":3516,"children":3517},{"style":243},[3518],{"type":73,"value":406},{"type":68,"tag":220,"props":3520,"children":3522},{"class":222,"line":3521},39,[3523,3528,3532,3536,3541,3545],{"type":68,"tag":220,"props":3524,"children":3525},{"style":326},[3526],{"type":73,"value":3527},"      setError",{"type":68,"tag":220,"props":3529,"children":3530},{"style":418},[3531],{"type":73,"value":333},{"type":68,"tag":220,"props":3533,"children":3534},{"style":243},[3535],{"type":73,"value":338},{"type":68,"tag":220,"props":3537,"children":3538},{"style":280},[3539],{"type":73,"value":3540},"Invalid credentials",{"type":68,"tag":220,"props":3542,"children":3543},{"style":243},[3544],{"type":73,"value":338},{"type":68,"tag":220,"props":3546,"children":3547},{"style":418},[3548],{"type":73,"value":579},{"type":68,"tag":220,"props":3550,"children":3552},{"class":222,"line":3551},40,[3553],{"type":68,"tag":220,"props":3554,"children":3555},{"style":243},[3556],{"type":73,"value":588},{"type":68,"tag":220,"props":3558,"children":3560},{"class":222,"line":3559},41,[3561],{"type":68,"tag":220,"props":3562,"children":3563},{"style":243},[3564],{"type":73,"value":1670},{"type":68,"tag":220,"props":3566,"children":3568},{"class":222,"line":3567},42,[3569],{"type":68,"tag":220,"props":3570,"children":3571},{"emptyLinePlaceholder":295},[3572],{"type":73,"value":298},{"type":68,"tag":220,"props":3574,"children":3576},{"class":222,"line":3575},43,[3577,3581],{"type":68,"tag":220,"props":3578,"children":3579},{"style":237},[3580],{"type":73,"value":850},{"type":68,"tag":220,"props":3582,"children":3583},{"style":418},[3584],{"type":73,"value":1967},{"type":68,"tag":220,"props":3586,"children":3588},{"class":222,"line":3587},44,[3589,3593,3598,3603,3607,3612],{"type":68,"tag":220,"props":3590,"children":3591},{"style":243},[3592],{"type":73,"value":1975},{"type":68,"tag":220,"props":3594,"children":3595},{"style":418},[3596],{"type":73,"value":3597},"form",{"type":68,"tag":220,"props":3599,"children":3600},{"style":310},[3601],{"type":73,"value":3602}," onSubmit",{"type":68,"tag":220,"props":3604,"children":3605},{"style":243},[3606],{"type":73,"value":1893},{"type":68,"tag":220,"props":3608,"children":3609},{"style":249},[3610],{"type":73,"value":3611},"handleSubmit",{"type":68,"tag":220,"props":3613,"children":3614},{"style":243},[3615],{"type":73,"value":3616},"}>\n",{"type":68,"tag":220,"props":3618,"children":3620},{"class":222,"line":3619},45,[3621,3626,3631,3636,3640,3644,3649,3653,3657,3661],{"type":68,"tag":220,"props":3622,"children":3623},{"style":243},[3624],{"type":73,"value":3625},"      {",{"type":68,"tag":220,"props":3627,"children":3628},{"style":249},[3629],{"type":73,"value":3630},"error ",{"type":68,"tag":220,"props":3632,"children":3633},{"style":243},[3634],{"type":73,"value":3635},"&&",{"type":68,"tag":220,"props":3637,"children":3638},{"style":243},[3639],{"type":73,"value":855},{"type":68,"tag":220,"props":3641,"children":3642},{"style":418},[3643],{"type":73,"value":860},{"type":68,"tag":220,"props":3645,"children":3646},{"style":243},[3647],{"type":73,"value":3648},">{",{"type":68,"tag":220,"props":3650,"children":3651},{"style":249},[3652],{"type":73,"value":3286},{"type":68,"tag":220,"props":3654,"children":3655},{"style":243},[3656],{"type":73,"value":903},{"type":68,"tag":220,"props":3658,"children":3659},{"style":418},[3660],{"type":73,"value":860},{"type":68,"tag":220,"props":3662,"children":3663},{"style":243},[3664],{"type":73,"value":3665},">}\n",{"type":68,"tag":220,"props":3667,"children":3669},{"class":222,"line":3668},46,[3670,3674,3679,3684,3688,3692,3696,3701,3706,3710,3714,3718,3722,3727,3731,3736,3740,3745],{"type":68,"tag":220,"props":3671,"children":3672},{"style":243},[3673],{"type":73,"value":1992},{"type":68,"tag":220,"props":3675,"children":3676},{"style":418},[3677],{"type":73,"value":3678},"input",{"type":68,"tag":220,"props":3680,"children":3681},{"style":310},[3682],{"type":73,"value":3683}," value",{"type":68,"tag":220,"props":3685,"children":3686},{"style":243},[3687],{"type":73,"value":1893},{"type":68,"tag":220,"props":3689,"children":3690},{"style":249},[3691],{"type":73,"value":898},{"type":68,"tag":220,"props":3693,"children":3694},{"style":243},[3695],{"type":73,"value":1902},{"type":68,"tag":220,"props":3697,"children":3698},{"style":310},[3699],{"type":73,"value":3700},"onChange",{"type":68,"tag":220,"props":3702,"children":3703},{"style":243},[3704],{"type":73,"value":3705},"={(",{"type":68,"tag":220,"props":3707,"children":3708},{"style":379},[3709],{"type":73,"value":3358},{"type":68,"tag":220,"props":3711,"children":3712},{"style":243},[3713],{"type":73,"value":1192},{"type":68,"tag":220,"props":3715,"children":3716},{"style":310},[3717],{"type":73,"value":401},{"type":68,"tag":220,"props":3719,"children":3720},{"style":326},[3721],{"type":73,"value":3193},{"type":68,"tag":220,"props":3723,"children":3724},{"style":249},[3725],{"type":73,"value":3726},"(e",{"type":68,"tag":220,"props":3728,"children":3729},{"style":243},[3730],{"type":73,"value":146},{"type":68,"tag":220,"props":3732,"children":3733},{"style":249},[3734],{"type":73,"value":3735},"target",{"type":68,"tag":220,"props":3737,"children":3738},{"style":243},[3739],{"type":73,"value":146},{"type":68,"tag":220,"props":3741,"children":3742},{"style":249},[3743],{"type":73,"value":3744},"value)",{"type":68,"tag":220,"props":3746,"children":3747},{"style":243},[3748],{"type":73,"value":3749},"} \u002F>\n",{"type":68,"tag":220,"props":3751,"children":3753},{"class":222,"line":3752},47,[3754,3758],{"type":68,"tag":220,"props":3755,"children":3756},{"style":243},[3757],{"type":73,"value":1992},{"type":68,"tag":220,"props":3759,"children":3760},{"style":418},[3761],{"type":73,"value":3762},"input\n",{"type":68,"tag":220,"props":3764,"children":3766},{"class":222,"line":3765},48,[3767,3772,3776,3781,3785],{"type":68,"tag":220,"props":3768,"children":3769},{"style":310},[3770],{"type":73,"value":3771},"        type",{"type":68,"tag":220,"props":3773,"children":3774},{"style":243},[3775],{"type":73,"value":323},{"type":68,"tag":220,"props":3777,"children":3778},{"style":243},[3779],{"type":73,"value":3780},"\"",{"type":68,"tag":220,"props":3782,"children":3783},{"style":280},[3784],{"type":73,"value":3236},{"type":68,"tag":220,"props":3786,"children":3787},{"style":243},[3788],{"type":73,"value":3789},"\"\n",{"type":68,"tag":220,"props":3791,"children":3793},{"class":222,"line":3792},49,[3794,3799,3803,3807],{"type":68,"tag":220,"props":3795,"children":3796},{"style":310},[3797],{"type":73,"value":3798},"        value",{"type":68,"tag":220,"props":3800,"children":3801},{"style":243},[3802],{"type":73,"value":1893},{"type":68,"tag":220,"props":3804,"children":3805},{"style":249},[3806],{"type":73,"value":3236},{"type":68,"tag":220,"props":3808,"children":3809},{"style":243},[3810],{"type":73,"value":920},{"type":68,"tag":220,"props":3812,"children":3814},{"class":222,"line":3813},50,[3815,3820,3824,3828,3832,3836,3840,3844,3848,3852,3856,3860],{"type":68,"tag":220,"props":3816,"children":3817},{"style":310},[3818],{"type":73,"value":3819},"        onChange",{"type":68,"tag":220,"props":3821,"children":3822},{"style":243},[3823],{"type":73,"value":3705},{"type":68,"tag":220,"props":3825,"children":3826},{"style":379},[3827],{"type":73,"value":3358},{"type":68,"tag":220,"props":3829,"children":3830},{"style":243},[3831],{"type":73,"value":1192},{"type":68,"tag":220,"props":3833,"children":3834},{"style":310},[3835],{"type":73,"value":401},{"type":68,"tag":220,"props":3837,"children":3838},{"style":326},[3839],{"type":73,"value":3245},{"type":68,"tag":220,"props":3841,"children":3842},{"style":249},[3843],{"type":73,"value":3726},{"type":68,"tag":220,"props":3845,"children":3846},{"style":243},[3847],{"type":73,"value":146},{"type":68,"tag":220,"props":3849,"children":3850},{"style":249},[3851],{"type":73,"value":3735},{"type":68,"tag":220,"props":3853,"children":3854},{"style":243},[3855],{"type":73,"value":146},{"type":68,"tag":220,"props":3857,"children":3858},{"style":249},[3859],{"type":73,"value":3744},{"type":68,"tag":220,"props":3861,"children":3862},{"style":243},[3863],{"type":73,"value":920},{"type":68,"tag":220,"props":3865,"children":3867},{"class":222,"line":3866},51,[3868],{"type":68,"tag":220,"props":3869,"children":3870},{"style":243},[3871],{"type":73,"value":3872},"      \u002F>\n",{"type":68,"tag":220,"props":3874,"children":3876},{"class":222,"line":3875},52,[3877,3881,3886,3890,3894,3898,3903,3907,3911,3916,3921,3925],{"type":68,"tag":220,"props":3878,"children":3879},{"style":243},[3880],{"type":73,"value":1992},{"type":68,"tag":220,"props":3882,"children":3883},{"style":418},[3884],{"type":73,"value":3885},"button",{"type":68,"tag":220,"props":3887,"children":3888},{"style":310},[3889],{"type":73,"value":2461},{"type":68,"tag":220,"props":3891,"children":3892},{"style":243},[3893],{"type":73,"value":323},{"type":68,"tag":220,"props":3895,"children":3896},{"style":243},[3897],{"type":73,"value":3780},{"type":68,"tag":220,"props":3899,"children":3900},{"style":280},[3901],{"type":73,"value":3902},"submit",{"type":68,"tag":220,"props":3904,"children":3905},{"style":243},[3906],{"type":73,"value":3780},{"type":68,"tag":220,"props":3908,"children":3909},{"style":243},[3910],{"type":73,"value":865},{"type":68,"tag":220,"props":3912,"children":3913},{"style":249},[3914],{"type":73,"value":3915},"Sign In",{"type":68,"tag":220,"props":3917,"children":3918},{"style":243},[3919],{"type":73,"value":3920},"\u003C\u002F",{"type":68,"tag":220,"props":3922,"children":3923},{"style":418},[3924],{"type":73,"value":3885},{"type":68,"tag":220,"props":3926,"children":3927},{"style":243},[3928],{"type":73,"value":912},{"type":68,"tag":220,"props":3930,"children":3932},{"class":222,"line":3931},53,[3933,3937,3941],{"type":68,"tag":220,"props":3934,"children":3935},{"style":243},[3936],{"type":73,"value":2010},{"type":68,"tag":220,"props":3938,"children":3939},{"style":418},[3940],{"type":73,"value":3597},{"type":68,"tag":220,"props":3942,"children":3943},{"style":243},[3944],{"type":73,"value":912},{"type":68,"tag":220,"props":3946,"children":3948},{"class":222,"line":3947},54,[3949],{"type":68,"tag":220,"props":3950,"children":3951},{"style":418},[3952],{"type":73,"value":2026},{"type":68,"tag":220,"props":3954,"children":3956},{"class":222,"line":3955},55,[3957],{"type":68,"tag":220,"props":3958,"children":3959},{"style":243},[3960],{"type":73,"value":920},{"type":68,"tag":928,"props":3962,"children":3964},{"id":3963},"non-redirect-auth-inline-login",[3965],{"type":73,"value":3966},"Non-Redirect Auth (Inline Login)",{"type":68,"tag":80,"props":3968,"children":3969},{},[3970,3972,3977],{"type":73,"value":3971},"Instead of redirecting, show a login form in place of the ",{"type":68,"tag":99,"props":3973,"children":3975},{"className":3974},[],[3976],{"type":73,"value":1375},{"type":73,"value":371},{"type":68,"tag":209,"props":3979,"children":3981},{"className":211,"code":3980,"language":213,"meta":214,"style":214},"\u002F\u002F src\u002Froutes\u002F_authenticated.tsx\nimport { createFileRoute, Outlet } from '@tanstack\u002Freact-router'\n\nexport const Route = createFileRoute('\u002F_authenticated')({\n  component: AuthenticatedLayout,\n})\n\nfunction AuthenticatedLayout() {\n  const { auth } = Route.useRouteContext()\n\n  if (!auth.isAuthenticated) {\n    return \u003CLoginForm \u002F>\n  }\n\n  return \u003COutlet \u002F>\n}\n",[3982],{"type":68,"tag":99,"props":3983,"children":3984},{"__ignoreMap":214},[3985,3992,4035,4042,4089,4109,4120,4127,4146,4185,4192,4227,4247,4254,4261,4280],{"type":68,"tag":220,"props":3986,"children":3987},{"class":222,"line":223},[3988],{"type":68,"tag":220,"props":3989,"children":3990},{"style":227},[3991],{"type":73,"value":230},{"type":68,"tag":220,"props":3993,"children":3994},{"class":222,"line":233},[3995,3999,4003,4007,4011,4015,4019,4023,4027,4031],{"type":68,"tag":220,"props":3996,"children":3997},{"style":237},[3998],{"type":73,"value":240},{"type":68,"tag":220,"props":4000,"children":4001},{"style":243},[4002],{"type":73,"value":246},{"type":68,"tag":220,"props":4004,"children":4005},{"style":249},[4006],{"type":73,"value":252},{"type":68,"tag":220,"props":4008,"children":4009},{"style":243},[4010],{"type":73,"value":257},{"type":68,"tag":220,"props":4012,"children":4013},{"style":249},[4014],{"type":73,"value":1001},{"type":68,"tag":220,"props":4016,"children":4017},{"style":243},[4018],{"type":73,"value":267},{"type":68,"tag":220,"props":4020,"children":4021},{"style":237},[4022],{"type":73,"value":272},{"type":68,"tag":220,"props":4024,"children":4025},{"style":243},[4026],{"type":73,"value":277},{"type":68,"tag":220,"props":4028,"children":4029},{"style":280},[4030],{"type":73,"value":283},{"type":68,"tag":220,"props":4032,"children":4033},{"style":243},[4034],{"type":73,"value":288},{"type":68,"tag":220,"props":4036,"children":4037},{"class":222,"line":291},[4038],{"type":68,"tag":220,"props":4039,"children":4040},{"emptyLinePlaceholder":295},[4041],{"type":73,"value":298},{"type":68,"tag":220,"props":4043,"children":4044},{"class":222,"line":301},[4045,4049,4053,4057,4061,4065,4069,4073,4077,4081,4085],{"type":68,"tag":220,"props":4046,"children":4047},{"style":237},[4048],{"type":73,"value":307},{"type":68,"tag":220,"props":4050,"children":4051},{"style":310},[4052],{"type":73,"value":313},{"type":68,"tag":220,"props":4054,"children":4055},{"style":249},[4056],{"type":73,"value":318},{"type":68,"tag":220,"props":4058,"children":4059},{"style":243},[4060],{"type":73,"value":323},{"type":68,"tag":220,"props":4062,"children":4063},{"style":326},[4064],{"type":73,"value":252},{"type":68,"tag":220,"props":4066,"children":4067},{"style":249},[4068],{"type":73,"value":333},{"type":68,"tag":220,"props":4070,"children":4071},{"style":243},[4072],{"type":73,"value":338},{"type":68,"tag":220,"props":4074,"children":4075},{"style":280},[4076],{"type":73,"value":343},{"type":68,"tag":220,"props":4078,"children":4079},{"style":243},[4080],{"type":73,"value":338},{"type":68,"tag":220,"props":4082,"children":4083},{"style":249},[4084],{"type":73,"value":352},{"type":68,"tag":220,"props":4086,"children":4087},{"style":243},[4088],{"type":73,"value":357},{"type":68,"tag":220,"props":4090,"children":4091},{"class":222,"line":360},[4092,4096,4100,4105],{"type":68,"tag":220,"props":4093,"children":4094},{"style":418},[4095],{"type":73,"value":745},{"type":68,"tag":220,"props":4097,"children":4098},{"style":243},[4099],{"type":73,"value":371},{"type":68,"tag":220,"props":4101,"children":4102},{"style":249},[4103],{"type":73,"value":4104}," AuthenticatedLayout",{"type":68,"tag":220,"props":4106,"children":4107},{"style":243},[4108],{"type":73,"value":509},{"type":68,"tag":220,"props":4110,"children":4111},{"class":222,"line":409},[4112,4116],{"type":68,"tag":220,"props":4113,"children":4114},{"style":243},[4115],{"type":73,"value":615},{"type":68,"tag":220,"props":4117,"children":4118},{"style":249},[4119],{"type":73,"value":579},{"type":68,"tag":220,"props":4121,"children":4122},{"class":222,"line":460},[4123],{"type":68,"tag":220,"props":4124,"children":4125},{"emptyLinePlaceholder":295},[4126],{"type":73,"value":298},{"type":68,"tag":220,"props":4128,"children":4129},{"class":222,"line":481},[4130,4134,4138,4142],{"type":68,"tag":220,"props":4131,"children":4132},{"style":310},[4133],{"type":73,"value":784},{"type":68,"tag":220,"props":4135,"children":4136},{"style":326},[4137],{"type":73,"value":4104},{"type":68,"tag":220,"props":4139,"children":4140},{"style":243},[4141],{"type":73,"value":793},{"type":68,"tag":220,"props":4143,"children":4144},{"style":243},[4145],{"type":73,"value":406},{"type":68,"tag":220,"props":4147,"children":4148},{"class":222,"line":512},[4149,4153,4157,4161,4165,4169,4173,4177,4181],{"type":68,"tag":220,"props":4150,"children":4151},{"style":310},[4152],{"type":73,"value":805},{"type":68,"tag":220,"props":4154,"children":4155},{"style":243},[4156],{"type":73,"value":246},{"type":68,"tag":220,"props":4158,"children":4159},{"style":249},[4160],{"type":73,"value":814},{"type":68,"tag":220,"props":4162,"children":4163},{"style":243},[4164],{"type":73,"value":267},{"type":68,"tag":220,"props":4166,"children":4167},{"style":243},[4168],{"type":73,"value":823},{"type":68,"tag":220,"props":4170,"children":4171},{"style":249},[4172],{"type":73,"value":828},{"type":68,"tag":220,"props":4174,"children":4175},{"style":243},[4176],{"type":73,"value":146},{"type":68,"tag":220,"props":4178,"children":4179},{"style":326},[4180],{"type":73,"value":837},{"type":68,"tag":220,"props":4182,"children":4183},{"style":418},[4184],{"type":73,"value":842},{"type":68,"tag":220,"props":4186,"children":4187},{"class":222,"line":529},[4188],{"type":68,"tag":220,"props":4189,"children":4190},{"emptyLinePlaceholder":295},[4191],{"type":73,"value":298},{"type":68,"tag":220,"props":4193,"children":4194},{"class":222,"line":559},[4195,4199,4203,4207,4211,4215,4219,4223],{"type":68,"tag":220,"props":4196,"children":4197},{"style":237},[4198],{"type":73,"value":2550},{"type":68,"tag":220,"props":4200,"children":4201},{"style":418},[4202],{"type":73,"value":421},{"type":68,"tag":220,"props":4204,"children":4205},{"style":243},[4206],{"type":73,"value":426},{"type":68,"tag":220,"props":4208,"children":4209},{"style":249},[4210],{"type":73,"value":18},{"type":68,"tag":220,"props":4212,"children":4213},{"style":243},[4214],{"type":73,"value":146},{"type":68,"tag":220,"props":4216,"children":4217},{"style":249},[4218],{"type":73,"value":448},{"type":68,"tag":220,"props":4220,"children":4221},{"style":418},[4222],{"type":73,"value":453},{"type":68,"tag":220,"props":4224,"children":4225},{"style":243},[4226],{"type":73,"value":357},{"type":68,"tag":220,"props":4228,"children":4229},{"class":222,"line":568},[4230,4234,4238,4243],{"type":68,"tag":220,"props":4231,"children":4232},{"style":237},[4233],{"type":73,"value":2676},{"type":68,"tag":220,"props":4235,"children":4236},{"style":243},[4237],{"type":73,"value":855},{"type":68,"tag":220,"props":4239,"children":4240},{"style":1039},[4241],{"type":73,"value":4242},"LoginForm",{"type":68,"tag":220,"props":4244,"children":4245},{"style":243},[4246],{"type":73,"value":2002},{"type":68,"tag":220,"props":4248,"children":4249},{"class":222,"line":582},[4250],{"type":68,"tag":220,"props":4251,"children":4252},{"style":243},[4253],{"type":73,"value":1670},{"type":68,"tag":220,"props":4255,"children":4256},{"class":222,"line":591},[4257],{"type":68,"tag":220,"props":4258,"children":4259},{"emptyLinePlaceholder":295},[4260],{"type":73,"value":298},{"type":68,"tag":220,"props":4262,"children":4263},{"class":222,"line":600},[4264,4268,4272,4276],{"type":68,"tag":220,"props":4265,"children":4266},{"style":237},[4267],{"type":73,"value":850},{"type":68,"tag":220,"props":4269,"children":4270},{"style":243},[4271],{"type":73,"value":855},{"type":68,"tag":220,"props":4273,"children":4274},{"style":1039},[4275],{"type":73,"value":1375},{"type":68,"tag":220,"props":4277,"children":4278},{"style":243},[4279],{"type":73,"value":2002},{"type":68,"tag":220,"props":4281,"children":4282},{"class":222,"line":609},[4283],{"type":68,"tag":220,"props":4284,"children":4285},{"style":243},[4286],{"type":73,"value":920},{"type":68,"tag":80,"props":4288,"children":4289},{},[4290,4292,4298],{"type":73,"value":4291},"This keeps the URL unchanged — the user stays on the same page and sees a login form instead of protected content. After authentication, ",{"type":68,"tag":99,"props":4293,"children":4295},{"className":4294},[],[4296],{"type":73,"value":4297},"\u003COutlet \u002F>",{"type":73,"value":4299}," renders and child routes appear.",{"type":68,"tag":928,"props":4301,"children":4303},{"id":4302},"rbac-with-roles-and-permissions",[4304],{"type":73,"value":4305},"RBAC with Roles and Permissions",{"type":68,"tag":80,"props":4307,"children":4308},{},[4309,4311,4316],{"type":73,"value":4310},"Extend auth state with role\u002Fpermission helpers, then check in ",{"type":68,"tag":99,"props":4312,"children":4314},{"className":4313},[],[4315],{"type":73,"value":162},{"type":73,"value":371},{"type":68,"tag":209,"props":4318,"children":4320},{"className":211,"code":4319,"language":213,"meta":214,"style":214},"\u002F\u002F src\u002Fauth.tsx\ninterface User {\n  id: string\n  username: string\n  email: string\n  roles: string[]\n  permissions: string[]\n}\n\ninterface AuthState {\n  isAuthenticated: boolean\n  user: User | null\n  hasRole: (role: string) => boolean\n  hasAnyRole: (roles: string[]) => boolean\n  hasPermission: (permission: string) => boolean\n  hasAnyPermission: (permissions: string[]) => boolean\n  login: (username: string, password: string) => Promise\u003Cvoid>\n  logout: () => void\n}\n",[4321],{"type":68,"tag":99,"props":4322,"children":4323},{"__ignoreMap":214},[4324,4332,4348,4365,4381,4397,4418,4438,4445,4452,4467,4482,4505,4546,4592,4633,4678,4745,4768],{"type":68,"tag":220,"props":4325,"children":4326},{"class":222,"line":223},[4327],{"type":68,"tag":220,"props":4328,"children":4329},{"style":227},[4330],{"type":73,"value":4331},"\u002F\u002F src\u002Fauth.tsx\n",{"type":68,"tag":220,"props":4333,"children":4334},{"class":222,"line":233},[4335,4339,4344],{"type":68,"tag":220,"props":4336,"children":4337},{"style":310},[4338],{"type":73,"value":1036},{"type":68,"tag":220,"props":4340,"children":4341},{"style":1039},[4342],{"type":73,"value":4343}," User",{"type":68,"tag":220,"props":4345,"children":4346},{"style":243},[4347],{"type":73,"value":406},{"type":68,"tag":220,"props":4349,"children":4350},{"class":222,"line":291},[4351,4356,4360],{"type":68,"tag":220,"props":4352,"children":4353},{"style":418},[4354],{"type":73,"value":4355},"  id",{"type":68,"tag":220,"props":4357,"children":4358},{"style":243},[4359],{"type":73,"value":371},{"type":68,"tag":220,"props":4361,"children":4362},{"style":1039},[4363],{"type":73,"value":4364}," string\n",{"type":68,"tag":220,"props":4366,"children":4367},{"class":222,"line":301},[4368,4373,4377],{"type":68,"tag":220,"props":4369,"children":4370},{"style":418},[4371],{"type":73,"value":4372},"  username",{"type":68,"tag":220,"props":4374,"children":4375},{"style":243},[4376],{"type":73,"value":371},{"type":68,"tag":220,"props":4378,"children":4379},{"style":1039},[4380],{"type":73,"value":4364},{"type":68,"tag":220,"props":4382,"children":4383},{"class":222,"line":360},[4384,4389,4393],{"type":68,"tag":220,"props":4385,"children":4386},{"style":418},[4387],{"type":73,"value":4388},"  email",{"type":68,"tag":220,"props":4390,"children":4391},{"style":243},[4392],{"type":73,"value":371},{"type":68,"tag":220,"props":4394,"children":4395},{"style":1039},[4396],{"type":73,"value":4364},{"type":68,"tag":220,"props":4398,"children":4399},{"class":222,"line":409},[4400,4405,4409,4413],{"type":68,"tag":220,"props":4401,"children":4402},{"style":418},[4403],{"type":73,"value":4404},"  roles",{"type":68,"tag":220,"props":4406,"children":4407},{"style":243},[4408],{"type":73,"value":371},{"type":68,"tag":220,"props":4410,"children":4411},{"style":1039},[4412],{"type":73,"value":1093},{"type":68,"tag":220,"props":4414,"children":4415},{"style":249},[4416],{"type":73,"value":4417},"[]\n",{"type":68,"tag":220,"props":4419,"children":4420},{"class":222,"line":460},[4421,4426,4430,4434],{"type":68,"tag":220,"props":4422,"children":4423},{"style":418},[4424],{"type":73,"value":4425},"  permissions",{"type":68,"tag":220,"props":4427,"children":4428},{"style":243},[4429],{"type":73,"value":371},{"type":68,"tag":220,"props":4431,"children":4432},{"style":1039},[4433],{"type":73,"value":1093},{"type":68,"tag":220,"props":4435,"children":4436},{"style":249},[4437],{"type":73,"value":4417},{"type":68,"tag":220,"props":4439,"children":4440},{"class":222,"line":481},[4441],{"type":68,"tag":220,"props":4442,"children":4443},{"style":243},[4444],{"type":73,"value":920},{"type":68,"tag":220,"props":4446,"children":4447},{"class":222,"line":512},[4448],{"type":68,"tag":220,"props":4449,"children":4450},{"emptyLinePlaceholder":295},[4451],{"type":73,"value":298},{"type":68,"tag":220,"props":4453,"children":4454},{"class":222,"line":529},[4455,4459,4463],{"type":68,"tag":220,"props":4456,"children":4457},{"style":310},[4458],{"type":73,"value":1036},{"type":68,"tag":220,"props":4460,"children":4461},{"style":1039},[4462],{"type":73,"value":1042},{"type":68,"tag":220,"props":4464,"children":4465},{"style":243},[4466],{"type":73,"value":406},{"type":68,"tag":220,"props":4468,"children":4469},{"class":222,"line":559},[4470,4474,4478],{"type":68,"tag":220,"props":4471,"children":4472},{"style":418},[4473],{"type":73,"value":1054},{"type":68,"tag":220,"props":4475,"children":4476},{"style":243},[4477],{"type":73,"value":371},{"type":68,"tag":220,"props":4479,"children":4480},{"style":1039},[4481],{"type":73,"value":1063},{"type":68,"tag":220,"props":4483,"children":4484},{"class":222,"line":568},[4485,4489,4493,4497,4501],{"type":68,"tag":220,"props":4486,"children":4487},{"style":418},[4488],{"type":73,"value":1071},{"type":68,"tag":220,"props":4490,"children":4491},{"style":243},[4492],{"type":73,"value":371},{"type":68,"tag":220,"props":4494,"children":4495},{"style":1039},[4496],{"type":73,"value":4343},{"type":68,"tag":220,"props":4498,"children":4499},{"style":243},[4500],{"type":73,"value":1137},{"type":68,"tag":220,"props":4502,"children":4503},{"style":1039},[4504],{"type":73,"value":1142},{"type":68,"tag":220,"props":4506,"children":4507},{"class":222,"line":582},[4508,4513,4517,4521,4526,4530,4534,4538,4542],{"type":68,"tag":220,"props":4509,"children":4510},{"style":418},[4511],{"type":73,"value":4512},"  hasRole",{"type":68,"tag":220,"props":4514,"children":4515},{"style":243},[4516],{"type":73,"value":371},{"type":68,"tag":220,"props":4518,"children":4519},{"style":243},[4520],{"type":73,"value":421},{"type":68,"tag":220,"props":4522,"children":4523},{"style":379},[4524],{"type":73,"value":4525},"role",{"type":68,"tag":220,"props":4527,"children":4528},{"style":243},[4529],{"type":73,"value":371},{"type":68,"tag":220,"props":4531,"children":4532},{"style":1039},[4533],{"type":73,"value":1093},{"type":68,"tag":220,"props":4535,"children":4536},{"style":243},[4537],{"type":73,"value":1192},{"type":68,"tag":220,"props":4539,"children":4540},{"style":310},[4541],{"type":73,"value":401},{"type":68,"tag":220,"props":4543,"children":4544},{"style":1039},[4545],{"type":73,"value":1063},{"type":68,"tag":220,"props":4547,"children":4548},{"class":222,"line":591},[4549,4554,4558,4562,4567,4571,4575,4580,4584,4588],{"type":68,"tag":220,"props":4550,"children":4551},{"style":418},[4552],{"type":73,"value":4553},"  hasAnyRole",{"type":68,"tag":220,"props":4555,"children":4556},{"style":243},[4557],{"type":73,"value":371},{"type":68,"tag":220,"props":4559,"children":4560},{"style":243},[4561],{"type":73,"value":421},{"type":68,"tag":220,"props":4563,"children":4564},{"style":379},[4565],{"type":73,"value":4566},"roles",{"type":68,"tag":220,"props":4568,"children":4569},{"style":243},[4570],{"type":73,"value":371},{"type":68,"tag":220,"props":4572,"children":4573},{"style":1039},[4574],{"type":73,"value":1093},{"type":68,"tag":220,"props":4576,"children":4577},{"style":249},[4578],{"type":73,"value":4579},"[]",{"type":68,"tag":220,"props":4581,"children":4582},{"style":243},[4583],{"type":73,"value":1192},{"type":68,"tag":220,"props":4585,"children":4586},{"style":310},[4587],{"type":73,"value":401},{"type":68,"tag":220,"props":4589,"children":4590},{"style":1039},[4591],{"type":73,"value":1063},{"type":68,"tag":220,"props":4593,"children":4594},{"class":222,"line":600},[4595,4600,4604,4608,4613,4617,4621,4625,4629],{"type":68,"tag":220,"props":4596,"children":4597},{"style":418},[4598],{"type":73,"value":4599},"  hasPermission",{"type":68,"tag":220,"props":4601,"children":4602},{"style":243},[4603],{"type":73,"value":371},{"type":68,"tag":220,"props":4605,"children":4606},{"style":243},[4607],{"type":73,"value":421},{"type":68,"tag":220,"props":4609,"children":4610},{"style":379},[4611],{"type":73,"value":4612},"permission",{"type":68,"tag":220,"props":4614,"children":4615},{"style":243},[4616],{"type":73,"value":371},{"type":68,"tag":220,"props":4618,"children":4619},{"style":1039},[4620],{"type":73,"value":1093},{"type":68,"tag":220,"props":4622,"children":4623},{"style":243},[4624],{"type":73,"value":1192},{"type":68,"tag":220,"props":4626,"children":4627},{"style":310},[4628],{"type":73,"value":401},{"type":68,"tag":220,"props":4630,"children":4631},{"style":1039},[4632],{"type":73,"value":1063},{"type":68,"tag":220,"props":4634,"children":4635},{"class":222,"line":609},[4636,4641,4645,4649,4654,4658,4662,4666,4670,4674],{"type":68,"tag":220,"props":4637,"children":4638},{"style":418},[4639],{"type":73,"value":4640},"  hasAnyPermission",{"type":68,"tag":220,"props":4642,"children":4643},{"style":243},[4644],{"type":73,"value":371},{"type":68,"tag":220,"props":4646,"children":4647},{"style":243},[4648],{"type":73,"value":421},{"type":68,"tag":220,"props":4650,"children":4651},{"style":379},[4652],{"type":73,"value":4653},"permissions",{"type":68,"tag":220,"props":4655,"children":4656},{"style":243},[4657],{"type":73,"value":371},{"type":68,"tag":220,"props":4659,"children":4660},{"style":1039},[4661],{"type":73,"value":1093},{"type":68,"tag":220,"props":4663,"children":4664},{"style":249},[4665],{"type":73,"value":4579},{"type":68,"tag":220,"props":4667,"children":4668},{"style":243},[4669],{"type":73,"value":1192},{"type":68,"tag":220,"props":4671,"children":4672},{"style":310},[4673],{"type":73,"value":401},{"type":68,"tag":220,"props":4675,"children":4676},{"style":1039},[4677],{"type":73,"value":1063},{"type":68,"tag":220,"props":4679,"children":4680},{"class":222,"line":1383},[4681,4685,4689,4693,4697,4701,4705,4709,4713,4717,4721,4725,4729,4733,4737,4741],{"type":68,"tag":220,"props":4682,"children":4683},{"style":418},[4684],{"type":73,"value":1150},{"type":68,"tag":220,"props":4686,"children":4687},{"style":243},[4688],{"type":73,"value":371},{"type":68,"tag":220,"props":4690,"children":4691},{"style":243},[4692],{"type":73,"value":421},{"type":68,"tag":220,"props":4694,"children":4695},{"style":379},[4696],{"type":73,"value":898},{"type":68,"tag":220,"props":4698,"children":4699},{"style":243},[4700],{"type":73,"value":371},{"type":68,"tag":220,"props":4702,"children":4703},{"style":1039},[4704],{"type":73,"value":1093},{"type":68,"tag":220,"props":4706,"children":4707},{"style":243},[4708],{"type":73,"value":257},{"type":68,"tag":220,"props":4710,"children":4711},{"style":379},[4712],{"type":73,"value":1179},{"type":68,"tag":220,"props":4714,"children":4715},{"style":243},[4716],{"type":73,"value":371},{"type":68,"tag":220,"props":4718,"children":4719},{"style":1039},[4720],{"type":73,"value":1093},{"type":68,"tag":220,"props":4722,"children":4723},{"style":243},[4724],{"type":73,"value":1192},{"type":68,"tag":220,"props":4726,"children":4727},{"style":310},[4728],{"type":73,"value":401},{"type":68,"tag":220,"props":4730,"children":4731},{"style":1039},[4732],{"type":73,"value":1201},{"type":68,"tag":220,"props":4734,"children":4735},{"style":243},[4736],{"type":73,"value":1206},{"type":68,"tag":220,"props":4738,"children":4739},{"style":1039},[4740],{"type":73,"value":1211},{"type":68,"tag":220,"props":4742,"children":4743},{"style":243},[4744],{"type":73,"value":912},{"type":68,"tag":220,"props":4746,"children":4747},{"class":222,"line":2029},[4748,4752,4756,4760,4764],{"type":68,"tag":220,"props":4749,"children":4750},{"style":418},[4751],{"type":73,"value":1223},{"type":68,"tag":220,"props":4753,"children":4754},{"style":243},[4755],{"type":73,"value":371},{"type":68,"tag":220,"props":4757,"children":4758},{"style":243},[4759],{"type":73,"value":1232},{"type":68,"tag":220,"props":4761,"children":4762},{"style":310},[4763],{"type":73,"value":401},{"type":68,"tag":220,"props":4765,"children":4766},{"style":1039},[4767],{"type":73,"value":1241},{"type":68,"tag":220,"props":4769,"children":4770},{"class":222,"line":2936},[4771],{"type":68,"tag":220,"props":4772,"children":4773},{"style":243},[4774],{"type":73,"value":920},{"type":68,"tag":80,"props":4776,"children":4777},{},[4778],{"type":73,"value":4779},"Admin-only layout route:",{"type":68,"tag":209,"props":4781,"children":4783},{"className":211,"code":4782,"language":213,"meta":214,"style":214},"\u002F\u002F src\u002Froutes\u002F_authenticated\u002F_admin.tsx\nimport { createFileRoute, redirect } from '@tanstack\u002Freact-router'\n\nexport const Route = createFileRoute('\u002F_authenticated\u002F_admin')({\n  beforeLoad: ({ context, location }) => {\n    if (!context.auth.hasRole('admin')) {\n      throw redirect({\n        to: '\u002Funauthorized',\n        search: { redirect: location.href },\n      })\n    }\n  },\n})\n",[4784],{"type":68,"tag":99,"props":4785,"children":4786},{"__ignoreMap":214},[4787,4795,4838,4845,4893,4932,4993,5012,5040,5079,5090,5097,5104],{"type":68,"tag":220,"props":4788,"children":4789},{"class":222,"line":223},[4790],{"type":68,"tag":220,"props":4791,"children":4792},{"style":227},[4793],{"type":73,"value":4794},"\u002F\u002F src\u002Froutes\u002F_authenticated\u002F_admin.tsx\n",{"type":68,"tag":220,"props":4796,"children":4797},{"class":222,"line":233},[4798,4802,4806,4810,4814,4818,4822,4826,4830,4834],{"type":68,"tag":220,"props":4799,"children":4800},{"style":237},[4801],{"type":73,"value":240},{"type":68,"tag":220,"props":4803,"children":4804},{"style":243},[4805],{"type":73,"value":246},{"type":68,"tag":220,"props":4807,"children":4808},{"style":249},[4809],{"type":73,"value":252},{"type":68,"tag":220,"props":4811,"children":4812},{"style":243},[4813],{"type":73,"value":257},{"type":68,"tag":220,"props":4815,"children":4816},{"style":249},[4817],{"type":73,"value":262},{"type":68,"tag":220,"props":4819,"children":4820},{"style":243},[4821],{"type":73,"value":267},{"type":68,"tag":220,"props":4823,"children":4824},{"style":237},[4825],{"type":73,"value":272},{"type":68,"tag":220,"props":4827,"children":4828},{"style":243},[4829],{"type":73,"value":277},{"type":68,"tag":220,"props":4831,"children":4832},{"style":280},[4833],{"type":73,"value":283},{"type":68,"tag":220,"props":4835,"children":4836},{"style":243},[4837],{"type":73,"value":288},{"type":68,"tag":220,"props":4839,"children":4840},{"class":222,"line":291},[4841],{"type":68,"tag":220,"props":4842,"children":4843},{"emptyLinePlaceholder":295},[4844],{"type":73,"value":298},{"type":68,"tag":220,"props":4846,"children":4847},{"class":222,"line":301},[4848,4852,4856,4860,4864,4868,4872,4876,4881,4885,4889],{"type":68,"tag":220,"props":4849,"children":4850},{"style":237},[4851],{"type":73,"value":307},{"type":68,"tag":220,"props":4853,"children":4854},{"style":310},[4855],{"type":73,"value":313},{"type":68,"tag":220,"props":4857,"children":4858},{"style":249},[4859],{"type":73,"value":318},{"type":68,"tag":220,"props":4861,"children":4862},{"style":243},[4863],{"type":73,"value":323},{"type":68,"tag":220,"props":4865,"children":4866},{"style":326},[4867],{"type":73,"value":252},{"type":68,"tag":220,"props":4869,"children":4870},{"style":249},[4871],{"type":73,"value":333},{"type":68,"tag":220,"props":4873,"children":4874},{"style":243},[4875],{"type":73,"value":338},{"type":68,"tag":220,"props":4877,"children":4878},{"style":280},[4879],{"type":73,"value":4880},"\u002F_authenticated\u002F_admin",{"type":68,"tag":220,"props":4882,"children":4883},{"style":243},[4884],{"type":73,"value":338},{"type":68,"tag":220,"props":4886,"children":4887},{"style":249},[4888],{"type":73,"value":352},{"type":68,"tag":220,"props":4890,"children":4891},{"style":243},[4892],{"type":73,"value":357},{"type":68,"tag":220,"props":4894,"children":4895},{"class":222,"line":360},[4896,4900,4904,4908,4912,4916,4920,4924,4928],{"type":68,"tag":220,"props":4897,"children":4898},{"style":326},[4899],{"type":73,"value":366},{"type":68,"tag":220,"props":4901,"children":4902},{"style":243},[4903],{"type":73,"value":371},{"type":68,"tag":220,"props":4905,"children":4906},{"style":243},[4907],{"type":73,"value":376},{"type":68,"tag":220,"props":4909,"children":4910},{"style":379},[4911],{"type":73,"value":382},{"type":68,"tag":220,"props":4913,"children":4914},{"style":243},[4915],{"type":73,"value":257},{"type":68,"tag":220,"props":4917,"children":4918},{"style":379},[4919],{"type":73,"value":391},{"type":68,"tag":220,"props":4921,"children":4922},{"style":243},[4923],{"type":73,"value":396},{"type":68,"tag":220,"props":4925,"children":4926},{"style":310},[4927],{"type":73,"value":401},{"type":68,"tag":220,"props":4929,"children":4930},{"style":243},[4931],{"type":73,"value":406},{"type":68,"tag":220,"props":4933,"children":4934},{"class":222,"line":409},[4935,4939,4943,4947,4951,4955,4959,4963,4968,4972,4976,4981,4985,4989],{"type":68,"tag":220,"props":4936,"children":4937},{"style":237},[4938],{"type":73,"value":415},{"type":68,"tag":220,"props":4940,"children":4941},{"style":418},[4942],{"type":73,"value":421},{"type":68,"tag":220,"props":4944,"children":4945},{"style":243},[4946],{"type":73,"value":426},{"type":68,"tag":220,"props":4948,"children":4949},{"style":249},[4950],{"type":73,"value":431},{"type":68,"tag":220,"props":4952,"children":4953},{"style":243},[4954],{"type":73,"value":146},{"type":68,"tag":220,"props":4956,"children":4957},{"style":249},[4958],{"type":73,"value":18},{"type":68,"tag":220,"props":4960,"children":4961},{"style":243},[4962],{"type":73,"value":146},{"type":68,"tag":220,"props":4964,"children":4965},{"style":326},[4966],{"type":73,"value":4967},"hasRole",{"type":68,"tag":220,"props":4969,"children":4970},{"style":418},[4971],{"type":73,"value":333},{"type":68,"tag":220,"props":4973,"children":4974},{"style":243},[4975],{"type":73,"value":338},{"type":68,"tag":220,"props":4977,"children":4978},{"style":280},[4979],{"type":73,"value":4980},"admin",{"type":68,"tag":220,"props":4982,"children":4983},{"style":243},[4984],{"type":73,"value":338},{"type":68,"tag":220,"props":4986,"children":4987},{"style":418},[4988],{"type":73,"value":2664},{"type":68,"tag":220,"props":4990,"children":4991},{"style":243},[4992],{"type":73,"value":357},{"type":68,"tag":220,"props":4994,"children":4995},{"class":222,"line":460},[4996,5000,5004,5008],{"type":68,"tag":220,"props":4997,"children":4998},{"style":237},[4999],{"type":73,"value":466},{"type":68,"tag":220,"props":5001,"children":5002},{"style":326},[5003],{"type":73,"value":262},{"type":68,"tag":220,"props":5005,"children":5006},{"style":418},[5007],{"type":73,"value":333},{"type":68,"tag":220,"props":5009,"children":5010},{"style":243},[5011],{"type":73,"value":357},{"type":68,"tag":220,"props":5013,"children":5014},{"class":222,"line":481},[5015,5019,5023,5027,5032,5036],{"type":68,"tag":220,"props":5016,"children":5017},{"style":418},[5018],{"type":73,"value":487},{"type":68,"tag":220,"props":5020,"children":5021},{"style":243},[5022],{"type":73,"value":371},{"type":68,"tag":220,"props":5024,"children":5025},{"style":243},[5026],{"type":73,"value":277},{"type":68,"tag":220,"props":5028,"children":5029},{"style":280},[5030],{"type":73,"value":5031},"\u002Funauthorized",{"type":68,"tag":220,"props":5033,"children":5034},{"style":243},[5035],{"type":73,"value":338},{"type":68,"tag":220,"props":5037,"children":5038},{"style":243},[5039],{"type":73,"value":509},{"type":68,"tag":220,"props":5041,"children":5042},{"class":222,"line":512},[5043,5047,5051,5055,5059,5063,5067,5071,5075],{"type":68,"tag":220,"props":5044,"children":5045},{"style":418},[5046],{"type":73,"value":518},{"type":68,"tag":220,"props":5048,"children":5049},{"style":243},[5050],{"type":73,"value":371},{"type":68,"tag":220,"props":5052,"children":5053},{"style":243},[5054],{"type":73,"value":246},{"type":68,"tag":220,"props":5056,"children":5057},{"style":418},[5058],{"type":73,"value":262},{"type":68,"tag":220,"props":5060,"children":5061},{"style":243},[5062],{"type":73,"value":371},{"type":68,"tag":220,"props":5064,"children":5065},{"style":249},[5066],{"type":73,"value":391},{"type":68,"tag":220,"props":5068,"children":5069},{"style":243},[5070],{"type":73,"value":146},{"type":68,"tag":220,"props":5072,"children":5073},{"style":249},[5074],{"type":73,"value":552},{"type":68,"tag":220,"props":5076,"children":5077},{"style":243},[5078],{"type":73,"value":2342},{"type":68,"tag":220,"props":5080,"children":5081},{"class":222,"line":529},[5082,5086],{"type":68,"tag":220,"props":5083,"children":5084},{"style":243},[5085],{"type":73,"value":574},{"type":68,"tag":220,"props":5087,"children":5088},{"style":418},[5089],{"type":73,"value":579},{"type":68,"tag":220,"props":5091,"children":5092},{"class":222,"line":559},[5093],{"type":68,"tag":220,"props":5094,"children":5095},{"style":243},[5096],{"type":73,"value":588},{"type":68,"tag":220,"props":5098,"children":5099},{"class":222,"line":568},[5100],{"type":68,"tag":220,"props":5101,"children":5102},{"style":243},[5103],{"type":73,"value":597},{"type":68,"tag":220,"props":5105,"children":5106},{"class":222,"line":582},[5107,5111],{"type":68,"tag":220,"props":5108,"children":5109},{"style":243},[5110],{"type":73,"value":615},{"type":68,"tag":220,"props":5112,"children":5113},{"style":249},[5114],{"type":73,"value":579},{"type":68,"tag":80,"props":5116,"children":5117},{},[5118],{"type":73,"value":5119},"Multi-role access:",{"type":68,"tag":209,"props":5121,"children":5123},{"className":211,"code":5122,"language":213,"meta":214,"style":214},"\u002F\u002F src\u002Froutes\u002F_authenticated\u002F_moderator.tsx\nimport { createFileRoute, redirect } from '@tanstack\u002Freact-router'\n\nexport const Route = createFileRoute('\u002F_authenticated\u002F_moderator')({\n  beforeLoad: ({ context, location }) => {\n    if (!context.auth.hasAnyRole(['admin', 'moderator'])) {\n      throw redirect({\n        to: '\u002Funauthorized',\n        search: { redirect: location.href },\n      })\n    }\n  },\n})\n",[5124],{"type":68,"tag":99,"props":5125,"children":5126},{"__ignoreMap":214},[5127,5135,5178,5185,5233,5272,5351,5370,5397,5436,5447,5454,5461],{"type":68,"tag":220,"props":5128,"children":5129},{"class":222,"line":223},[5130],{"type":68,"tag":220,"props":5131,"children":5132},{"style":227},[5133],{"type":73,"value":5134},"\u002F\u002F src\u002Froutes\u002F_authenticated\u002F_moderator.tsx\n",{"type":68,"tag":220,"props":5136,"children":5137},{"class":222,"line":233},[5138,5142,5146,5150,5154,5158,5162,5166,5170,5174],{"type":68,"tag":220,"props":5139,"children":5140},{"style":237},[5141],{"type":73,"value":240},{"type":68,"tag":220,"props":5143,"children":5144},{"style":243},[5145],{"type":73,"value":246},{"type":68,"tag":220,"props":5147,"children":5148},{"style":249},[5149],{"type":73,"value":252},{"type":68,"tag":220,"props":5151,"children":5152},{"style":243},[5153],{"type":73,"value":257},{"type":68,"tag":220,"props":5155,"children":5156},{"style":249},[5157],{"type":73,"value":262},{"type":68,"tag":220,"props":5159,"children":5160},{"style":243},[5161],{"type":73,"value":267},{"type":68,"tag":220,"props":5163,"children":5164},{"style":237},[5165],{"type":73,"value":272},{"type":68,"tag":220,"props":5167,"children":5168},{"style":243},[5169],{"type":73,"value":277},{"type":68,"tag":220,"props":5171,"children":5172},{"style":280},[5173],{"type":73,"value":283},{"type":68,"tag":220,"props":5175,"children":5176},{"style":243},[5177],{"type":73,"value":288},{"type":68,"tag":220,"props":5179,"children":5180},{"class":222,"line":291},[5181],{"type":68,"tag":220,"props":5182,"children":5183},{"emptyLinePlaceholder":295},[5184],{"type":73,"value":298},{"type":68,"tag":220,"props":5186,"children":5187},{"class":222,"line":301},[5188,5192,5196,5200,5204,5208,5212,5216,5221,5225,5229],{"type":68,"tag":220,"props":5189,"children":5190},{"style":237},[5191],{"type":73,"value":307},{"type":68,"tag":220,"props":5193,"children":5194},{"style":310},[5195],{"type":73,"value":313},{"type":68,"tag":220,"props":5197,"children":5198},{"style":249},[5199],{"type":73,"value":318},{"type":68,"tag":220,"props":5201,"children":5202},{"style":243},[5203],{"type":73,"value":323},{"type":68,"tag":220,"props":5205,"children":5206},{"style":326},[5207],{"type":73,"value":252},{"type":68,"tag":220,"props":5209,"children":5210},{"style":249},[5211],{"type":73,"value":333},{"type":68,"tag":220,"props":5213,"children":5214},{"style":243},[5215],{"type":73,"value":338},{"type":68,"tag":220,"props":5217,"children":5218},{"style":280},[5219],{"type":73,"value":5220},"\u002F_authenticated\u002F_moderator",{"type":68,"tag":220,"props":5222,"children":5223},{"style":243},[5224],{"type":73,"value":338},{"type":68,"tag":220,"props":5226,"children":5227},{"style":249},[5228],{"type":73,"value":352},{"type":68,"tag":220,"props":5230,"children":5231},{"style":243},[5232],{"type":73,"value":357},{"type":68,"tag":220,"props":5234,"children":5235},{"class":222,"line":360},[5236,5240,5244,5248,5252,5256,5260,5264,5268],{"type":68,"tag":220,"props":5237,"children":5238},{"style":326},[5239],{"type":73,"value":366},{"type":68,"tag":220,"props":5241,"children":5242},{"style":243},[5243],{"type":73,"value":371},{"type":68,"tag":220,"props":5245,"children":5246},{"style":243},[5247],{"type":73,"value":376},{"type":68,"tag":220,"props":5249,"children":5250},{"style":379},[5251],{"type":73,"value":382},{"type":68,"tag":220,"props":5253,"children":5254},{"style":243},[5255],{"type":73,"value":257},{"type":68,"tag":220,"props":5257,"children":5258},{"style":379},[5259],{"type":73,"value":391},{"type":68,"tag":220,"props":5261,"children":5262},{"style":243},[5263],{"type":73,"value":396},{"type":68,"tag":220,"props":5265,"children":5266},{"style":310},[5267],{"type":73,"value":401},{"type":68,"tag":220,"props":5269,"children":5270},{"style":243},[5271],{"type":73,"value":406},{"type":68,"tag":220,"props":5273,"children":5274},{"class":222,"line":409},[5275,5279,5283,5287,5291,5295,5299,5303,5308,5313,5317,5321,5325,5329,5333,5338,5342,5347],{"type":68,"tag":220,"props":5276,"children":5277},{"style":237},[5278],{"type":73,"value":415},{"type":68,"tag":220,"props":5280,"children":5281},{"style":418},[5282],{"type":73,"value":421},{"type":68,"tag":220,"props":5284,"children":5285},{"style":243},[5286],{"type":73,"value":426},{"type":68,"tag":220,"props":5288,"children":5289},{"style":249},[5290],{"type":73,"value":431},{"type":68,"tag":220,"props":5292,"children":5293},{"style":243},[5294],{"type":73,"value":146},{"type":68,"tag":220,"props":5296,"children":5297},{"style":249},[5298],{"type":73,"value":18},{"type":68,"tag":220,"props":5300,"children":5301},{"style":243},[5302],{"type":73,"value":146},{"type":68,"tag":220,"props":5304,"children":5305},{"style":326},[5306],{"type":73,"value":5307},"hasAnyRole",{"type":68,"tag":220,"props":5309,"children":5310},{"style":418},[5311],{"type":73,"value":5312},"([",{"type":68,"tag":220,"props":5314,"children":5315},{"style":243},[5316],{"type":73,"value":338},{"type":68,"tag":220,"props":5318,"children":5319},{"style":280},[5320],{"type":73,"value":4980},{"type":68,"tag":220,"props":5322,"children":5323},{"style":243},[5324],{"type":73,"value":338},{"type":68,"tag":220,"props":5326,"children":5327},{"style":243},[5328],{"type":73,"value":257},{"type":68,"tag":220,"props":5330,"children":5331},{"style":243},[5332],{"type":73,"value":277},{"type":68,"tag":220,"props":5334,"children":5335},{"style":280},[5336],{"type":73,"value":5337},"moderator",{"type":68,"tag":220,"props":5339,"children":5340},{"style":243},[5341],{"type":73,"value":338},{"type":68,"tag":220,"props":5343,"children":5344},{"style":418},[5345],{"type":73,"value":5346},"])) ",{"type":68,"tag":220,"props":5348,"children":5349},{"style":243},[5350],{"type":73,"value":357},{"type":68,"tag":220,"props":5352,"children":5353},{"class":222,"line":460},[5354,5358,5362,5366],{"type":68,"tag":220,"props":5355,"children":5356},{"style":237},[5357],{"type":73,"value":466},{"type":68,"tag":220,"props":5359,"children":5360},{"style":326},[5361],{"type":73,"value":262},{"type":68,"tag":220,"props":5363,"children":5364},{"style":418},[5365],{"type":73,"value":333},{"type":68,"tag":220,"props":5367,"children":5368},{"style":243},[5369],{"type":73,"value":357},{"type":68,"tag":220,"props":5371,"children":5372},{"class":222,"line":481},[5373,5377,5381,5385,5389,5393],{"type":68,"tag":220,"props":5374,"children":5375},{"style":418},[5376],{"type":73,"value":487},{"type":68,"tag":220,"props":5378,"children":5379},{"style":243},[5380],{"type":73,"value":371},{"type":68,"tag":220,"props":5382,"children":5383},{"style":243},[5384],{"type":73,"value":277},{"type":68,"tag":220,"props":5386,"children":5387},{"style":280},[5388],{"type":73,"value":5031},{"type":68,"tag":220,"props":5390,"children":5391},{"style":243},[5392],{"type":73,"value":338},{"type":68,"tag":220,"props":5394,"children":5395},{"style":243},[5396],{"type":73,"value":509},{"type":68,"tag":220,"props":5398,"children":5399},{"class":222,"line":512},[5400,5404,5408,5412,5416,5420,5424,5428,5432],{"type":68,"tag":220,"props":5401,"children":5402},{"style":418},[5403],{"type":73,"value":518},{"type":68,"tag":220,"props":5405,"children":5406},{"style":243},[5407],{"type":73,"value":371},{"type":68,"tag":220,"props":5409,"children":5410},{"style":243},[5411],{"type":73,"value":246},{"type":68,"tag":220,"props":5413,"children":5414},{"style":418},[5415],{"type":73,"value":262},{"type":68,"tag":220,"props":5417,"children":5418},{"style":243},[5419],{"type":73,"value":371},{"type":68,"tag":220,"props":5421,"children":5422},{"style":249},[5423],{"type":73,"value":391},{"type":68,"tag":220,"props":5425,"children":5426},{"style":243},[5427],{"type":73,"value":146},{"type":68,"tag":220,"props":5429,"children":5430},{"style":249},[5431],{"type":73,"value":552},{"type":68,"tag":220,"props":5433,"children":5434},{"style":243},[5435],{"type":73,"value":2342},{"type":68,"tag":220,"props":5437,"children":5438},{"class":222,"line":529},[5439,5443],{"type":68,"tag":220,"props":5440,"children":5441},{"style":243},[5442],{"type":73,"value":574},{"type":68,"tag":220,"props":5444,"children":5445},{"style":418},[5446],{"type":73,"value":579},{"type":68,"tag":220,"props":5448,"children":5449},{"class":222,"line":559},[5450],{"type":68,"tag":220,"props":5451,"children":5452},{"style":243},[5453],{"type":73,"value":588},{"type":68,"tag":220,"props":5455,"children":5456},{"class":222,"line":568},[5457],{"type":68,"tag":220,"props":5458,"children":5459},{"style":243},[5460],{"type":73,"value":597},{"type":68,"tag":220,"props":5462,"children":5463},{"class":222,"line":582},[5464,5468],{"type":68,"tag":220,"props":5465,"children":5466},{"style":243},[5467],{"type":73,"value":615},{"type":68,"tag":220,"props":5469,"children":5470},{"style":249},[5471],{"type":73,"value":579},{"type":68,"tag":80,"props":5473,"children":5474},{},[5475],{"type":73,"value":5476},"Permission-based:",{"type":68,"tag":209,"props":5478,"children":5480},{"className":211,"code":5479,"language":213,"meta":214,"style":214},"\u002F\u002F src\u002Froutes\u002F_authenticated\u002F_users.tsx\nimport { createFileRoute, redirect } from '@tanstack\u002Freact-router'\n\nexport const Route = createFileRoute('\u002F_authenticated\u002F_users')({\n  beforeLoad: ({ context, location }) => {\n    if (!context.auth.hasAnyPermission(['users:read', 'users:write'])) {\n      throw redirect({\n        to: '\u002Funauthorized',\n        search: { redirect: location.href },\n      })\n    }\n  },\n})\n",[5481],{"type":68,"tag":99,"props":5482,"children":5483},{"__ignoreMap":214},[5484,5492,5535,5542,5590,5629,5707,5726,5753,5792,5803,5810,5817],{"type":68,"tag":220,"props":5485,"children":5486},{"class":222,"line":223},[5487],{"type":68,"tag":220,"props":5488,"children":5489},{"style":227},[5490],{"type":73,"value":5491},"\u002F\u002F src\u002Froutes\u002F_authenticated\u002F_users.tsx\n",{"type":68,"tag":220,"props":5493,"children":5494},{"class":222,"line":233},[5495,5499,5503,5507,5511,5515,5519,5523,5527,5531],{"type":68,"tag":220,"props":5496,"children":5497},{"style":237},[5498],{"type":73,"value":240},{"type":68,"tag":220,"props":5500,"children":5501},{"style":243},[5502],{"type":73,"value":246},{"type":68,"tag":220,"props":5504,"children":5505},{"style":249},[5506],{"type":73,"value":252},{"type":68,"tag":220,"props":5508,"children":5509},{"style":243},[5510],{"type":73,"value":257},{"type":68,"tag":220,"props":5512,"children":5513},{"style":249},[5514],{"type":73,"value":262},{"type":68,"tag":220,"props":5516,"children":5517},{"style":243},[5518],{"type":73,"value":267},{"type":68,"tag":220,"props":5520,"children":5521},{"style":237},[5522],{"type":73,"value":272},{"type":68,"tag":220,"props":5524,"children":5525},{"style":243},[5526],{"type":73,"value":277},{"type":68,"tag":220,"props":5528,"children":5529},{"style":280},[5530],{"type":73,"value":283},{"type":68,"tag":220,"props":5532,"children":5533},{"style":243},[5534],{"type":73,"value":288},{"type":68,"tag":220,"props":5536,"children":5537},{"class":222,"line":291},[5538],{"type":68,"tag":220,"props":5539,"children":5540},{"emptyLinePlaceholder":295},[5541],{"type":73,"value":298},{"type":68,"tag":220,"props":5543,"children":5544},{"class":222,"line":301},[5545,5549,5553,5557,5561,5565,5569,5573,5578,5582,5586],{"type":68,"tag":220,"props":5546,"children":5547},{"style":237},[5548],{"type":73,"value":307},{"type":68,"tag":220,"props":5550,"children":5551},{"style":310},[5552],{"type":73,"value":313},{"type":68,"tag":220,"props":5554,"children":5555},{"style":249},[5556],{"type":73,"value":318},{"type":68,"tag":220,"props":5558,"children":5559},{"style":243},[5560],{"type":73,"value":323},{"type":68,"tag":220,"props":5562,"children":5563},{"style":326},[5564],{"type":73,"value":252},{"type":68,"tag":220,"props":5566,"children":5567},{"style":249},[5568],{"type":73,"value":333},{"type":68,"tag":220,"props":5570,"children":5571},{"style":243},[5572],{"type":73,"value":338},{"type":68,"tag":220,"props":5574,"children":5575},{"style":280},[5576],{"type":73,"value":5577},"\u002F_authenticated\u002F_users",{"type":68,"tag":220,"props":5579,"children":5580},{"style":243},[5581],{"type":73,"value":338},{"type":68,"tag":220,"props":5583,"children":5584},{"style":249},[5585],{"type":73,"value":352},{"type":68,"tag":220,"props":5587,"children":5588},{"style":243},[5589],{"type":73,"value":357},{"type":68,"tag":220,"props":5591,"children":5592},{"class":222,"line":360},[5593,5597,5601,5605,5609,5613,5617,5621,5625],{"type":68,"tag":220,"props":5594,"children":5595},{"style":326},[5596],{"type":73,"value":366},{"type":68,"tag":220,"props":5598,"children":5599},{"style":243},[5600],{"type":73,"value":371},{"type":68,"tag":220,"props":5602,"children":5603},{"style":243},[5604],{"type":73,"value":376},{"type":68,"tag":220,"props":5606,"children":5607},{"style":379},[5608],{"type":73,"value":382},{"type":68,"tag":220,"props":5610,"children":5611},{"style":243},[5612],{"type":73,"value":257},{"type":68,"tag":220,"props":5614,"children":5615},{"style":379},[5616],{"type":73,"value":391},{"type":68,"tag":220,"props":5618,"children":5619},{"style":243},[5620],{"type":73,"value":396},{"type":68,"tag":220,"props":5622,"children":5623},{"style":310},[5624],{"type":73,"value":401},{"type":68,"tag":220,"props":5626,"children":5627},{"style":243},[5628],{"type":73,"value":406},{"type":68,"tag":220,"props":5630,"children":5631},{"class":222,"line":409},[5632,5636,5640,5644,5648,5652,5656,5660,5665,5669,5673,5678,5682,5686,5690,5695,5699,5703],{"type":68,"tag":220,"props":5633,"children":5634},{"style":237},[5635],{"type":73,"value":415},{"type":68,"tag":220,"props":5637,"children":5638},{"style":418},[5639],{"type":73,"value":421},{"type":68,"tag":220,"props":5641,"children":5642},{"style":243},[5643],{"type":73,"value":426},{"type":68,"tag":220,"props":5645,"children":5646},{"style":249},[5647],{"type":73,"value":431},{"type":68,"tag":220,"props":5649,"children":5650},{"style":243},[5651],{"type":73,"value":146},{"type":68,"tag":220,"props":5653,"children":5654},{"style":249},[5655],{"type":73,"value":18},{"type":68,"tag":220,"props":5657,"children":5658},{"style":243},[5659],{"type":73,"value":146},{"type":68,"tag":220,"props":5661,"children":5662},{"style":326},[5663],{"type":73,"value":5664},"hasAnyPermission",{"type":68,"tag":220,"props":5666,"children":5667},{"style":418},[5668],{"type":73,"value":5312},{"type":68,"tag":220,"props":5670,"children":5671},{"style":243},[5672],{"type":73,"value":338},{"type":68,"tag":220,"props":5674,"children":5675},{"style":280},[5676],{"type":73,"value":5677},"users:read",{"type":68,"tag":220,"props":5679,"children":5680},{"style":243},[5681],{"type":73,"value":338},{"type":68,"tag":220,"props":5683,"children":5684},{"style":243},[5685],{"type":73,"value":257},{"type":68,"tag":220,"props":5687,"children":5688},{"style":243},[5689],{"type":73,"value":277},{"type":68,"tag":220,"props":5691,"children":5692},{"style":280},[5693],{"type":73,"value":5694},"users:write",{"type":68,"tag":220,"props":5696,"children":5697},{"style":243},[5698],{"type":73,"value":338},{"type":68,"tag":220,"props":5700,"children":5701},{"style":418},[5702],{"type":73,"value":5346},{"type":68,"tag":220,"props":5704,"children":5705},{"style":243},[5706],{"type":73,"value":357},{"type":68,"tag":220,"props":5708,"children":5709},{"class":222,"line":460},[5710,5714,5718,5722],{"type":68,"tag":220,"props":5711,"children":5712},{"style":237},[5713],{"type":73,"value":466},{"type":68,"tag":220,"props":5715,"children":5716},{"style":326},[5717],{"type":73,"value":262},{"type":68,"tag":220,"props":5719,"children":5720},{"style":418},[5721],{"type":73,"value":333},{"type":68,"tag":220,"props":5723,"children":5724},{"style":243},[5725],{"type":73,"value":357},{"type":68,"tag":220,"props":5727,"children":5728},{"class":222,"line":481},[5729,5733,5737,5741,5745,5749],{"type":68,"tag":220,"props":5730,"children":5731},{"style":418},[5732],{"type":73,"value":487},{"type":68,"tag":220,"props":5734,"children":5735},{"style":243},[5736],{"type":73,"value":371},{"type":68,"tag":220,"props":5738,"children":5739},{"style":243},[5740],{"type":73,"value":277},{"type":68,"tag":220,"props":5742,"children":5743},{"style":280},[5744],{"type":73,"value":5031},{"type":68,"tag":220,"props":5746,"children":5747},{"style":243},[5748],{"type":73,"value":338},{"type":68,"tag":220,"props":5750,"children":5751},{"style":243},[5752],{"type":73,"value":509},{"type":68,"tag":220,"props":5754,"children":5755},{"class":222,"line":512},[5756,5760,5764,5768,5772,5776,5780,5784,5788],{"type":68,"tag":220,"props":5757,"children":5758},{"style":418},[5759],{"type":73,"value":518},{"type":68,"tag":220,"props":5761,"children":5762},{"style":243},[5763],{"type":73,"value":371},{"type":68,"tag":220,"props":5765,"children":5766},{"style":243},[5767],{"type":73,"value":246},{"type":68,"tag":220,"props":5769,"children":5770},{"style":418},[5771],{"type":73,"value":262},{"type":68,"tag":220,"props":5773,"children":5774},{"style":243},[5775],{"type":73,"value":371},{"type":68,"tag":220,"props":5777,"children":5778},{"style":249},[5779],{"type":73,"value":391},{"type":68,"tag":220,"props":5781,"children":5782},{"style":243},[5783],{"type":73,"value":146},{"type":68,"tag":220,"props":5785,"children":5786},{"style":249},[5787],{"type":73,"value":552},{"type":68,"tag":220,"props":5789,"children":5790},{"style":243},[5791],{"type":73,"value":2342},{"type":68,"tag":220,"props":5793,"children":5794},{"class":222,"line":529},[5795,5799],{"type":68,"tag":220,"props":5796,"children":5797},{"style":243},[5798],{"type":73,"value":574},{"type":68,"tag":220,"props":5800,"children":5801},{"style":418},[5802],{"type":73,"value":579},{"type":68,"tag":220,"props":5804,"children":5805},{"class":222,"line":559},[5806],{"type":68,"tag":220,"props":5807,"children":5808},{"style":243},[5809],{"type":73,"value":588},{"type":68,"tag":220,"props":5811,"children":5812},{"class":222,"line":568},[5813],{"type":68,"tag":220,"props":5814,"children":5815},{"style":243},[5816],{"type":73,"value":597},{"type":68,"tag":220,"props":5818,"children":5819},{"class":222,"line":582},[5820,5824],{"type":68,"tag":220,"props":5821,"children":5822},{"style":243},[5823],{"type":73,"value":615},{"type":68,"tag":220,"props":5825,"children":5826},{"style":249},[5827],{"type":73,"value":579},{"type":68,"tag":80,"props":5829,"children":5830},{},[5831],{"type":73,"value":5832},"Page-level permission check (nested under an already-role-protected layout):",{"type":68,"tag":209,"props":5834,"children":5836},{"className":211,"code":5835,"language":213,"meta":214,"style":214},"\u002F\u002F src\u002Froutes\u002F_authenticated\u002F_users\u002Fmanage.tsx\nimport { createFileRoute } from '@tanstack\u002Freact-router'\n\nexport const Route = createFileRoute('\u002F_authenticated\u002F_users\u002Fmanage')({\n  beforeLoad: ({ context }) => {\n    if (!context.auth.hasPermission('users:write')) {\n      throw new Error('Write permission required')\n    }\n  },\n  component: UserManagement,\n})\n\nfunction UserManagement() {\n  const { auth } = Route.useRouteContext()\n  const canDelete = auth.hasPermission('users:delete')\n\n  return (\n    \u003Cdiv>\n      \u003Ch1>User Management\u003C\u002Fh1>\n      {canDelete && \u003Cbutton>Delete User\u003C\u002Fbutton>}\n    \u003C\u002Fdiv>\n  )\n}\n",[5837],{"type":68,"tag":99,"props":5838,"children":5839},{"__ignoreMap":214},[5840,5848,5883,5890,5938,5969,6029,6067,6074,6081,6101,6112,6119,6138,6177,6226,6233,6244,6259,6291,6336,6351,6358],{"type":68,"tag":220,"props":5841,"children":5842},{"class":222,"line":223},[5843],{"type":68,"tag":220,"props":5844,"children":5845},{"style":227},[5846],{"type":73,"value":5847},"\u002F\u002F src\u002Froutes\u002F_authenticated\u002F_users\u002Fmanage.tsx\n",{"type":68,"tag":220,"props":5849,"children":5850},{"class":222,"line":233},[5851,5855,5859,5863,5867,5871,5875,5879],{"type":68,"tag":220,"props":5852,"children":5853},{"style":237},[5854],{"type":73,"value":240},{"type":68,"tag":220,"props":5856,"children":5857},{"style":243},[5858],{"type":73,"value":246},{"type":68,"tag":220,"props":5860,"children":5861},{"style":249},[5862],{"type":73,"value":252},{"type":68,"tag":220,"props":5864,"children":5865},{"style":243},[5866],{"type":73,"value":267},{"type":68,"tag":220,"props":5868,"children":5869},{"style":237},[5870],{"type":73,"value":272},{"type":68,"tag":220,"props":5872,"children":5873},{"style":243},[5874],{"type":73,"value":277},{"type":68,"tag":220,"props":5876,"children":5877},{"style":280},[5878],{"type":73,"value":283},{"type":68,"tag":220,"props":5880,"children":5881},{"style":243},[5882],{"type":73,"value":288},{"type":68,"tag":220,"props":5884,"children":5885},{"class":222,"line":291},[5886],{"type":68,"tag":220,"props":5887,"children":5888},{"emptyLinePlaceholder":295},[5889],{"type":73,"value":298},{"type":68,"tag":220,"props":5891,"children":5892},{"class":222,"line":301},[5893,5897,5901,5905,5909,5913,5917,5921,5926,5930,5934],{"type":68,"tag":220,"props":5894,"children":5895},{"style":237},[5896],{"type":73,"value":307},{"type":68,"tag":220,"props":5898,"children":5899},{"style":310},[5900],{"type":73,"value":313},{"type":68,"tag":220,"props":5902,"children":5903},{"style":249},[5904],{"type":73,"value":318},{"type":68,"tag":220,"props":5906,"children":5907},{"style":243},[5908],{"type":73,"value":323},{"type":68,"tag":220,"props":5910,"children":5911},{"style":326},[5912],{"type":73,"value":252},{"type":68,"tag":220,"props":5914,"children":5915},{"style":249},[5916],{"type":73,"value":333},{"type":68,"tag":220,"props":5918,"children":5919},{"style":243},[5920],{"type":73,"value":338},{"type":68,"tag":220,"props":5922,"children":5923},{"style":280},[5924],{"type":73,"value":5925},"\u002F_authenticated\u002F_users\u002Fmanage",{"type":68,"tag":220,"props":5927,"children":5928},{"style":243},[5929],{"type":73,"value":338},{"type":68,"tag":220,"props":5931,"children":5932},{"style":249},[5933],{"type":73,"value":352},{"type":68,"tag":220,"props":5935,"children":5936},{"style":243},[5937],{"type":73,"value":357},{"type":68,"tag":220,"props":5939,"children":5940},{"class":222,"line":360},[5941,5945,5949,5953,5957,5961,5965],{"type":68,"tag":220,"props":5942,"children":5943},{"style":326},[5944],{"type":73,"value":366},{"type":68,"tag":220,"props":5946,"children":5947},{"style":243},[5948],{"type":73,"value":371},{"type":68,"tag":220,"props":5950,"children":5951},{"style":243},[5952],{"type":73,"value":376},{"type":68,"tag":220,"props":5954,"children":5955},{"style":379},[5956],{"type":73,"value":382},{"type":68,"tag":220,"props":5958,"children":5959},{"style":243},[5960],{"type":73,"value":396},{"type":68,"tag":220,"props":5962,"children":5963},{"style":310},[5964],{"type":73,"value":401},{"type":68,"tag":220,"props":5966,"children":5967},{"style":243},[5968],{"type":73,"value":406},{"type":68,"tag":220,"props":5970,"children":5971},{"class":222,"line":409},[5972,5976,5980,5984,5988,5992,5996,6000,6005,6009,6013,6017,6021,6025],{"type":68,"tag":220,"props":5973,"children":5974},{"style":237},[5975],{"type":73,"value":415},{"type":68,"tag":220,"props":5977,"children":5978},{"style":418},[5979],{"type":73,"value":421},{"type":68,"tag":220,"props":5981,"children":5982},{"style":243},[5983],{"type":73,"value":426},{"type":68,"tag":220,"props":5985,"children":5986},{"style":249},[5987],{"type":73,"value":431},{"type":68,"tag":220,"props":5989,"children":5990},{"style":243},[5991],{"type":73,"value":146},{"type":68,"tag":220,"props":5993,"children":5994},{"style":249},[5995],{"type":73,"value":18},{"type":68,"tag":220,"props":5997,"children":5998},{"style":243},[5999],{"type":73,"value":146},{"type":68,"tag":220,"props":6001,"children":6002},{"style":326},[6003],{"type":73,"value":6004},"hasPermission",{"type":68,"tag":220,"props":6006,"children":6007},{"style":418},[6008],{"type":73,"value":333},{"type":68,"tag":220,"props":6010,"children":6011},{"style":243},[6012],{"type":73,"value":338},{"type":68,"tag":220,"props":6014,"children":6015},{"style":280},[6016],{"type":73,"value":5694},{"type":68,"tag":220,"props":6018,"children":6019},{"style":243},[6020],{"type":73,"value":338},{"type":68,"tag":220,"props":6022,"children":6023},{"style":418},[6024],{"type":73,"value":2664},{"type":68,"tag":220,"props":6026,"children":6027},{"style":243},[6028],{"type":73,"value":357},{"type":68,"tag":220,"props":6030,"children":6031},{"class":222,"line":460},[6032,6036,6041,6046,6050,6054,6059,6063],{"type":68,"tag":220,"props":6033,"children":6034},{"style":237},[6035],{"type":73,"value":466},{"type":68,"tag":220,"props":6037,"children":6038},{"style":243},[6039],{"type":73,"value":6040}," new",{"type":68,"tag":220,"props":6042,"children":6043},{"style":326},[6044],{"type":73,"value":6045}," Error",{"type":68,"tag":220,"props":6047,"children":6048},{"style":418},[6049],{"type":73,"value":333},{"type":68,"tag":220,"props":6051,"children":6052},{"style":243},[6053],{"type":73,"value":338},{"type":68,"tag":220,"props":6055,"children":6056},{"style":280},[6057],{"type":73,"value":6058},"Write permission required",{"type":68,"tag":220,"props":6060,"children":6061},{"style":243},[6062],{"type":73,"value":338},{"type":68,"tag":220,"props":6064,"children":6065},{"style":418},[6066],{"type":73,"value":579},{"type":68,"tag":220,"props":6068,"children":6069},{"class":222,"line":481},[6070],{"type":68,"tag":220,"props":6071,"children":6072},{"style":243},[6073],{"type":73,"value":588},{"type":68,"tag":220,"props":6075,"children":6076},{"class":222,"line":512},[6077],{"type":68,"tag":220,"props":6078,"children":6079},{"style":243},[6080],{"type":73,"value":597},{"type":68,"tag":220,"props":6082,"children":6083},{"class":222,"line":529},[6084,6088,6092,6097],{"type":68,"tag":220,"props":6085,"children":6086},{"style":418},[6087],{"type":73,"value":745},{"type":68,"tag":220,"props":6089,"children":6090},{"style":243},[6091],{"type":73,"value":371},{"type":68,"tag":220,"props":6093,"children":6094},{"style":249},[6095],{"type":73,"value":6096}," UserManagement",{"type":68,"tag":220,"props":6098,"children":6099},{"style":243},[6100],{"type":73,"value":509},{"type":68,"tag":220,"props":6102,"children":6103},{"class":222,"line":559},[6104,6108],{"type":68,"tag":220,"props":6105,"children":6106},{"style":243},[6107],{"type":73,"value":615},{"type":68,"tag":220,"props":6109,"children":6110},{"style":249},[6111],{"type":73,"value":579},{"type":68,"tag":220,"props":6113,"children":6114},{"class":222,"line":568},[6115],{"type":68,"tag":220,"props":6116,"children":6117},{"emptyLinePlaceholder":295},[6118],{"type":73,"value":298},{"type":68,"tag":220,"props":6120,"children":6121},{"class":222,"line":582},[6122,6126,6130,6134],{"type":68,"tag":220,"props":6123,"children":6124},{"style":310},[6125],{"type":73,"value":784},{"type":68,"tag":220,"props":6127,"children":6128},{"style":326},[6129],{"type":73,"value":6096},{"type":68,"tag":220,"props":6131,"children":6132},{"style":243},[6133],{"type":73,"value":793},{"type":68,"tag":220,"props":6135,"children":6136},{"style":243},[6137],{"type":73,"value":406},{"type":68,"tag":220,"props":6139,"children":6140},{"class":222,"line":591},[6141,6145,6149,6153,6157,6161,6165,6169,6173],{"type":68,"tag":220,"props":6142,"children":6143},{"style":310},[6144],{"type":73,"value":805},{"type":68,"tag":220,"props":6146,"children":6147},{"style":243},[6148],{"type":73,"value":246},{"type":68,"tag":220,"props":6150,"children":6151},{"style":249},[6152],{"type":73,"value":814},{"type":68,"tag":220,"props":6154,"children":6155},{"style":243},[6156],{"type":73,"value":267},{"type":68,"tag":220,"props":6158,"children":6159},{"style":243},[6160],{"type":73,"value":823},{"type":68,"tag":220,"props":6162,"children":6163},{"style":249},[6164],{"type":73,"value":828},{"type":68,"tag":220,"props":6166,"children":6167},{"style":243},[6168],{"type":73,"value":146},{"type":68,"tag":220,"props":6170,"children":6171},{"style":326},[6172],{"type":73,"value":837},{"type":68,"tag":220,"props":6174,"children":6175},{"style":418},[6176],{"type":73,"value":842},{"type":68,"tag":220,"props":6178,"children":6179},{"class":222,"line":600},[6180,6184,6189,6193,6197,6201,6205,6209,6213,6218,6222],{"type":68,"tag":220,"props":6181,"children":6182},{"style":310},[6183],{"type":73,"value":805},{"type":68,"tag":220,"props":6185,"children":6186},{"style":249},[6187],{"type":73,"value":6188}," canDelete",{"type":68,"tag":220,"props":6190,"children":6191},{"style":243},[6192],{"type":73,"value":823},{"type":68,"tag":220,"props":6194,"children":6195},{"style":249},[6196],{"type":73,"value":814},{"type":68,"tag":220,"props":6198,"children":6199},{"style":243},[6200],{"type":73,"value":146},{"type":68,"tag":220,"props":6202,"children":6203},{"style":326},[6204],{"type":73,"value":6004},{"type":68,"tag":220,"props":6206,"children":6207},{"style":418},[6208],{"type":73,"value":333},{"type":68,"tag":220,"props":6210,"children":6211},{"style":243},[6212],{"type":73,"value":338},{"type":68,"tag":220,"props":6214,"children":6215},{"style":280},[6216],{"type":73,"value":6217},"users:delete",{"type":68,"tag":220,"props":6219,"children":6220},{"style":243},[6221],{"type":73,"value":338},{"type":68,"tag":220,"props":6223,"children":6224},{"style":418},[6225],{"type":73,"value":579},{"type":68,"tag":220,"props":6227,"children":6228},{"class":222,"line":609},[6229],{"type":68,"tag":220,"props":6230,"children":6231},{"emptyLinePlaceholder":295},[6232],{"type":73,"value":298},{"type":68,"tag":220,"props":6234,"children":6235},{"class":222,"line":1383},[6236,6240],{"type":68,"tag":220,"props":6237,"children":6238},{"style":237},[6239],{"type":73,"value":850},{"type":68,"tag":220,"props":6241,"children":6242},{"style":418},[6243],{"type":73,"value":1967},{"type":68,"tag":220,"props":6245,"children":6246},{"class":222,"line":2029},[6247,6251,6255],{"type":68,"tag":220,"props":6248,"children":6249},{"style":243},[6250],{"type":73,"value":1975},{"type":68,"tag":220,"props":6252,"children":6253},{"style":418},[6254],{"type":73,"value":860},{"type":68,"tag":220,"props":6256,"children":6257},{"style":243},[6258],{"type":73,"value":912},{"type":68,"tag":220,"props":6260,"children":6261},{"class":222,"line":2936},[6262,6266,6270,6274,6279,6283,6287],{"type":68,"tag":220,"props":6263,"children":6264},{"style":243},[6265],{"type":73,"value":1992},{"type":68,"tag":220,"props":6267,"children":6268},{"style":418},[6269],{"type":73,"value":69},{"type":68,"tag":220,"props":6271,"children":6272},{"style":243},[6273],{"type":73,"value":865},{"type":68,"tag":220,"props":6275,"children":6276},{"style":249},[6277],{"type":73,"value":6278},"User Management",{"type":68,"tag":220,"props":6280,"children":6281},{"style":243},[6282],{"type":73,"value":3920},{"type":68,"tag":220,"props":6284,"children":6285},{"style":418},[6286],{"type":73,"value":69},{"type":68,"tag":220,"props":6288,"children":6289},{"style":243},[6290],{"type":73,"value":912},{"type":68,"tag":220,"props":6292,"children":6293},{"class":222,"line":2986},[6294,6298,6303,6307,6311,6315,6319,6324,6328,6332],{"type":68,"tag":220,"props":6295,"children":6296},{"style":243},[6297],{"type":73,"value":3625},{"type":68,"tag":220,"props":6299,"children":6300},{"style":249},[6301],{"type":73,"value":6302},"canDelete ",{"type":68,"tag":220,"props":6304,"children":6305},{"style":243},[6306],{"type":73,"value":3635},{"type":68,"tag":220,"props":6308,"children":6309},{"style":243},[6310],{"type":73,"value":855},{"type":68,"tag":220,"props":6312,"children":6313},{"style":418},[6314],{"type":73,"value":3885},{"type":68,"tag":220,"props":6316,"children":6317},{"style":243},[6318],{"type":73,"value":865},{"type":68,"tag":220,"props":6320,"children":6321},{"style":249},[6322],{"type":73,"value":6323},"Delete User",{"type":68,"tag":220,"props":6325,"children":6326},{"style":243},[6327],{"type":73,"value":3920},{"type":68,"tag":220,"props":6329,"children":6330},{"style":418},[6331],{"type":73,"value":3885},{"type":68,"tag":220,"props":6333,"children":6334},{"style":243},[6335],{"type":73,"value":3665},{"type":68,"tag":220,"props":6337,"children":6338},{"class":222,"line":2994},[6339,6343,6347],{"type":68,"tag":220,"props":6340,"children":6341},{"style":243},[6342],{"type":73,"value":2010},{"type":68,"tag":220,"props":6344,"children":6345},{"style":418},[6346],{"type":73,"value":860},{"type":68,"tag":220,"props":6348,"children":6349},{"style":243},[6350],{"type":73,"value":912},{"type":68,"tag":220,"props":6352,"children":6353},{"class":222,"line":3002},[6354],{"type":68,"tag":220,"props":6355,"children":6356},{"style":418},[6357],{"type":73,"value":2026},{"type":68,"tag":220,"props":6359,"children":6360},{"class":222,"line":3023},[6361],{"type":68,"tag":220,"props":6362,"children":6363},{"style":243},[6364],{"type":73,"value":920},{"type":68,"tag":928,"props":6366,"children":6368},{"id":6367},"handling-auth-check-failures-isredirect",[6369],{"type":73,"value":6370},"Handling Auth Check Failures (isRedirect)",{"type":68,"tag":80,"props":6372,"children":6373},{},[6374,6376,6381,6383,6389],{"type":73,"value":6375},"When ",{"type":68,"tag":99,"props":6377,"children":6379},{"className":6378},[],[6380],{"type":73,"value":162},{"type":73,"value":6382}," has a try\u002Fcatch, redirects (which work by throwing) can get swallowed. Use ",{"type":68,"tag":99,"props":6384,"children":6386},{"className":6385},[],[6387],{"type":73,"value":6388},"isRedirect",{"type":73,"value":6390}," to re-throw:",{"type":68,"tag":209,"props":6392,"children":6394},{"className":211,"code":6393,"language":213,"meta":214,"style":214},"import { createFileRoute, redirect, isRedirect } from '@tanstack\u002Freact-router'\n\nexport const Route = createFileRoute('\u002F_authenticated')({\n  beforeLoad: async ({ context, location }) => {\n    try {\n      const user = await verifySession(context.auth)\n      if (!user) {\n        throw redirect({\n          to: '\u002Flogin',\n          search: { redirect: location.href },\n        })\n      }\n      return { user }\n    } catch (error) {\n      if (isRedirect(error)) throw error \u002F\u002F re-throw redirect, don't swallow it\n      \u002F\u002F Actual error — redirect to login\n      throw redirect({\n        to: '\u002Flogin',\n        search: { redirect: location.href },\n      })\n    }\n  },\n})\n",[6395],{"type":68,"tag":99,"props":6396,"children":6397},{"__ignoreMap":214},[6398,6450,6457,6504,6547,6558,6605,6633,6653,6681,6721,6733,6741,6762,6789,6831,6839,6858,6885,6924,6935,6942,6949],{"type":68,"tag":220,"props":6399,"children":6400},{"class":222,"line":223},[6401,6405,6409,6413,6417,6421,6425,6430,6434,6438,6442,6446],{"type":68,"tag":220,"props":6402,"children":6403},{"style":237},[6404],{"type":73,"value":240},{"type":68,"tag":220,"props":6406,"children":6407},{"style":243},[6408],{"type":73,"value":246},{"type":68,"tag":220,"props":6410,"children":6411},{"style":249},[6412],{"type":73,"value":252},{"type":68,"tag":220,"props":6414,"children":6415},{"style":243},[6416],{"type":73,"value":257},{"type":68,"tag":220,"props":6418,"children":6419},{"style":249},[6420],{"type":73,"value":262},{"type":68,"tag":220,"props":6422,"children":6423},{"style":243},[6424],{"type":73,"value":257},{"type":68,"tag":220,"props":6426,"children":6427},{"style":249},[6428],{"type":73,"value":6429}," isRedirect",{"type":68,"tag":220,"props":6431,"children":6432},{"style":243},[6433],{"type":73,"value":267},{"type":68,"tag":220,"props":6435,"children":6436},{"style":237},[6437],{"type":73,"value":272},{"type":68,"tag":220,"props":6439,"children":6440},{"style":243},[6441],{"type":73,"value":277},{"type":68,"tag":220,"props":6443,"children":6444},{"style":280},[6445],{"type":73,"value":283},{"type":68,"tag":220,"props":6447,"children":6448},{"style":243},[6449],{"type":73,"value":288},{"type":68,"tag":220,"props":6451,"children":6452},{"class":222,"line":233},[6453],{"type":68,"tag":220,"props":6454,"children":6455},{"emptyLinePlaceholder":295},[6456],{"type":73,"value":298},{"type":68,"tag":220,"props":6458,"children":6459},{"class":222,"line":291},[6460,6464,6468,6472,6476,6480,6484,6488,6492,6496,6500],{"type":68,"tag":220,"props":6461,"children":6462},{"style":237},[6463],{"type":73,"value":307},{"type":68,"tag":220,"props":6465,"children":6466},{"style":310},[6467],{"type":73,"value":313},{"type":68,"tag":220,"props":6469,"children":6470},{"style":249},[6471],{"type":73,"value":318},{"type":68,"tag":220,"props":6473,"children":6474},{"style":243},[6475],{"type":73,"value":323},{"type":68,"tag":220,"props":6477,"children":6478},{"style":326},[6479],{"type":73,"value":252},{"type":68,"tag":220,"props":6481,"children":6482},{"style":249},[6483],{"type":73,"value":333},{"type":68,"tag":220,"props":6485,"children":6486},{"style":243},[6487],{"type":73,"value":338},{"type":68,"tag":220,"props":6489,"children":6490},{"style":280},[6491],{"type":73,"value":343},{"type":68,"tag":220,"props":6493,"children":6494},{"style":243},[6495],{"type":73,"value":338},{"type":68,"tag":220,"props":6497,"children":6498},{"style":249},[6499],{"type":73,"value":352},{"type":68,"tag":220,"props":6501,"children":6502},{"style":243},[6503],{"type":73,"value":357},{"type":68,"tag":220,"props":6505,"children":6506},{"class":222,"line":301},[6507,6511,6515,6519,6523,6527,6531,6535,6539,6543],{"type":68,"tag":220,"props":6508,"children":6509},{"style":326},[6510],{"type":73,"value":366},{"type":68,"tag":220,"props":6512,"children":6513},{"style":243},[6514],{"type":73,"value":371},{"type":68,"tag":220,"props":6516,"children":6517},{"style":310},[6518],{"type":73,"value":3349},{"type":68,"tag":220,"props":6520,"children":6521},{"style":243},[6522],{"type":73,"value":376},{"type":68,"tag":220,"props":6524,"children":6525},{"style":379},[6526],{"type":73,"value":382},{"type":68,"tag":220,"props":6528,"children":6529},{"style":243},[6530],{"type":73,"value":257},{"type":68,"tag":220,"props":6532,"children":6533},{"style":379},[6534],{"type":73,"value":391},{"type":68,"tag":220,"props":6536,"children":6537},{"style":243},[6538],{"type":73,"value":396},{"type":68,"tag":220,"props":6540,"children":6541},{"style":310},[6542],{"type":73,"value":401},{"type":68,"tag":220,"props":6544,"children":6545},{"style":243},[6546],{"type":73,"value":406},{"type":68,"tag":220,"props":6548,"children":6549},{"class":222,"line":360},[6550,6554],{"type":68,"tag":220,"props":6551,"children":6552},{"style":237},[6553],{"type":73,"value":3409},{"type":68,"tag":220,"props":6555,"children":6556},{"style":243},[6557],{"type":73,"value":406},{"type":68,"tag":220,"props":6559,"children":6560},{"class":222,"line":409},[6561,6566,6571,6575,6580,6585,6589,6593,6597,6601],{"type":68,"tag":220,"props":6562,"children":6563},{"style":310},[6564],{"type":73,"value":6565},"      const",{"type":68,"tag":220,"props":6567,"children":6568},{"style":249},[6569],{"type":73,"value":6570}," user",{"type":68,"tag":220,"props":6572,"children":6573},{"style":243},[6574],{"type":73,"value":823},{"type":68,"tag":220,"props":6576,"children":6577},{"style":237},[6578],{"type":73,"value":6579}," await",{"type":68,"tag":220,"props":6581,"children":6582},{"style":326},[6583],{"type":73,"value":6584}," verifySession",{"type":68,"tag":220,"props":6586,"children":6587},{"style":418},[6588],{"type":73,"value":333},{"type":68,"tag":220,"props":6590,"children":6591},{"style":249},[6592],{"type":73,"value":431},{"type":68,"tag":220,"props":6594,"children":6595},{"style":243},[6596],{"type":73,"value":146},{"type":68,"tag":220,"props":6598,"children":6599},{"style":249},[6600],{"type":73,"value":18},{"type":68,"tag":220,"props":6602,"children":6603},{"style":418},[6604],{"type":73,"value":579},{"type":68,"tag":220,"props":6606,"children":6607},{"class":222,"line":460},[6608,6613,6617,6621,6625,6629],{"type":68,"tag":220,"props":6609,"children":6610},{"style":237},[6611],{"type":73,"value":6612},"      if",{"type":68,"tag":220,"props":6614,"children":6615},{"style":418},[6616],{"type":73,"value":421},{"type":68,"tag":220,"props":6618,"children":6619},{"style":243},[6620],{"type":73,"value":426},{"type":68,"tag":220,"props":6622,"children":6623},{"style":249},[6624],{"type":73,"value":888},{"type":68,"tag":220,"props":6626,"children":6627},{"style":418},[6628],{"type":73,"value":453},{"type":68,"tag":220,"props":6630,"children":6631},{"style":243},[6632],{"type":73,"value":357},{"type":68,"tag":220,"props":6634,"children":6635},{"class":222,"line":481},[6636,6641,6645,6649],{"type":68,"tag":220,"props":6637,"children":6638},{"style":237},[6639],{"type":73,"value":6640},"        throw",{"type":68,"tag":220,"props":6642,"children":6643},{"style":326},[6644],{"type":73,"value":262},{"type":68,"tag":220,"props":6646,"children":6647},{"style":418},[6648],{"type":73,"value":333},{"type":68,"tag":220,"props":6650,"children":6651},{"style":243},[6652],{"type":73,"value":357},{"type":68,"tag":220,"props":6654,"children":6655},{"class":222,"line":512},[6656,6661,6665,6669,6673,6677],{"type":68,"tag":220,"props":6657,"children":6658},{"style":418},[6659],{"type":73,"value":6660},"          to",{"type":68,"tag":220,"props":6662,"children":6663},{"style":243},[6664],{"type":73,"value":371},{"type":68,"tag":220,"props":6666,"children":6667},{"style":243},[6668],{"type":73,"value":277},{"type":68,"tag":220,"props":6670,"children":6671},{"style":280},[6672],{"type":73,"value":500},{"type":68,"tag":220,"props":6674,"children":6675},{"style":243},[6676],{"type":73,"value":338},{"type":68,"tag":220,"props":6678,"children":6679},{"style":243},[6680],{"type":73,"value":509},{"type":68,"tag":220,"props":6682,"children":6683},{"class":222,"line":529},[6684,6689,6693,6697,6701,6705,6709,6713,6717],{"type":68,"tag":220,"props":6685,"children":6686},{"style":418},[6687],{"type":73,"value":6688},"          search",{"type":68,"tag":220,"props":6690,"children":6691},{"style":243},[6692],{"type":73,"value":371},{"type":68,"tag":220,"props":6694,"children":6695},{"style":243},[6696],{"type":73,"value":246},{"type":68,"tag":220,"props":6698,"children":6699},{"style":418},[6700],{"type":73,"value":262},{"type":68,"tag":220,"props":6702,"children":6703},{"style":243},[6704],{"type":73,"value":371},{"type":68,"tag":220,"props":6706,"children":6707},{"style":249},[6708],{"type":73,"value":391},{"type":68,"tag":220,"props":6710,"children":6711},{"style":243},[6712],{"type":73,"value":146},{"type":68,"tag":220,"props":6714,"children":6715},{"style":249},[6716],{"type":73,"value":552},{"type":68,"tag":220,"props":6718,"children":6719},{"style":243},[6720],{"type":73,"value":2342},{"type":68,"tag":220,"props":6722,"children":6723},{"class":222,"line":559},[6724,6729],{"type":68,"tag":220,"props":6725,"children":6726},{"style":243},[6727],{"type":73,"value":6728},"        }",{"type":68,"tag":220,"props":6730,"children":6731},{"style":418},[6732],{"type":73,"value":579},{"type":68,"tag":220,"props":6734,"children":6735},{"class":222,"line":568},[6736],{"type":68,"tag":220,"props":6737,"children":6738},{"style":243},[6739],{"type":73,"value":6740},"      }\n",{"type":68,"tag":220,"props":6742,"children":6743},{"class":222,"line":582},[6744,6749,6753,6757],{"type":68,"tag":220,"props":6745,"children":6746},{"style":237},[6747],{"type":73,"value":6748},"      return",{"type":68,"tag":220,"props":6750,"children":6751},{"style":243},[6752],{"type":73,"value":246},{"type":68,"tag":220,"props":6754,"children":6755},{"style":249},[6756],{"type":73,"value":6570},{"type":68,"tag":220,"props":6758,"children":6759},{"style":243},[6760],{"type":73,"value":6761}," }\n",{"type":68,"tag":220,"props":6763,"children":6764},{"class":222,"line":591},[6765,6769,6773,6777,6781,6785],{"type":68,"tag":220,"props":6766,"children":6767},{"style":243},[6768],{"type":73,"value":3509},{"type":68,"tag":220,"props":6770,"children":6771},{"style":237},[6772],{"type":73,"value":3514},{"type":68,"tag":220,"props":6774,"children":6775},{"style":418},[6776],{"type":73,"value":421},{"type":68,"tag":220,"props":6778,"children":6779},{"style":249},[6780],{"type":73,"value":3286},{"type":68,"tag":220,"props":6782,"children":6783},{"style":418},[6784],{"type":73,"value":453},{"type":68,"tag":220,"props":6786,"children":6787},{"style":243},[6788],{"type":73,"value":357},{"type":68,"tag":220,"props":6790,"children":6791},{"class":222,"line":600},[6792,6796,6800,6804,6808,6812,6816,6821,6826],{"type":68,"tag":220,"props":6793,"children":6794},{"style":237},[6795],{"type":73,"value":6612},{"type":68,"tag":220,"props":6797,"children":6798},{"style":418},[6799],{"type":73,"value":421},{"type":68,"tag":220,"props":6801,"children":6802},{"style":326},[6803],{"type":73,"value":6388},{"type":68,"tag":220,"props":6805,"children":6806},{"style":418},[6807],{"type":73,"value":333},{"type":68,"tag":220,"props":6809,"children":6810},{"style":249},[6811],{"type":73,"value":3286},{"type":68,"tag":220,"props":6813,"children":6814},{"style":418},[6815],{"type":73,"value":2664},{"type":68,"tag":220,"props":6817,"children":6818},{"style":237},[6819],{"type":73,"value":6820},"throw",{"type":68,"tag":220,"props":6822,"children":6823},{"style":249},[6824],{"type":73,"value":6825}," error",{"type":68,"tag":220,"props":6827,"children":6828},{"style":227},[6829],{"type":73,"value":6830}," \u002F\u002F re-throw redirect, don't swallow it\n",{"type":68,"tag":220,"props":6832,"children":6833},{"class":222,"line":609},[6834],{"type":68,"tag":220,"props":6835,"children":6836},{"style":227},[6837],{"type":73,"value":6838},"      \u002F\u002F Actual error — redirect to login\n",{"type":68,"tag":220,"props":6840,"children":6841},{"class":222,"line":1383},[6842,6846,6850,6854],{"type":68,"tag":220,"props":6843,"children":6844},{"style":237},[6845],{"type":73,"value":466},{"type":68,"tag":220,"props":6847,"children":6848},{"style":326},[6849],{"type":73,"value":262},{"type":68,"tag":220,"props":6851,"children":6852},{"style":418},[6853],{"type":73,"value":333},{"type":68,"tag":220,"props":6855,"children":6856},{"style":243},[6857],{"type":73,"value":357},{"type":68,"tag":220,"props":6859,"children":6860},{"class":222,"line":2029},[6861,6865,6869,6873,6877,6881],{"type":68,"tag":220,"props":6862,"children":6863},{"style":418},[6864],{"type":73,"value":487},{"type":68,"tag":220,"props":6866,"children":6867},{"style":243},[6868],{"type":73,"value":371},{"type":68,"tag":220,"props":6870,"children":6871},{"style":243},[6872],{"type":73,"value":277},{"type":68,"tag":220,"props":6874,"children":6875},{"style":280},[6876],{"type":73,"value":500},{"type":68,"tag":220,"props":6878,"children":6879},{"style":243},[6880],{"type":73,"value":338},{"type":68,"tag":220,"props":6882,"children":6883},{"style":243},[6884],{"type":73,"value":509},{"type":68,"tag":220,"props":6886,"children":6887},{"class":222,"line":2936},[6888,6892,6896,6900,6904,6908,6912,6916,6920],{"type":68,"tag":220,"props":6889,"children":6890},{"style":418},[6891],{"type":73,"value":518},{"type":68,"tag":220,"props":6893,"children":6894},{"style":243},[6895],{"type":73,"value":371},{"type":68,"tag":220,"props":6897,"children":6898},{"style":243},[6899],{"type":73,"value":246},{"type":68,"tag":220,"props":6901,"children":6902},{"style":418},[6903],{"type":73,"value":262},{"type":68,"tag":220,"props":6905,"children":6906},{"style":243},[6907],{"type":73,"value":371},{"type":68,"tag":220,"props":6909,"children":6910},{"style":249},[6911],{"type":73,"value":391},{"type":68,"tag":220,"props":6913,"children":6914},{"style":243},[6915],{"type":73,"value":146},{"type":68,"tag":220,"props":6917,"children":6918},{"style":249},[6919],{"type":73,"value":552},{"type":68,"tag":220,"props":6921,"children":6922},{"style":243},[6923],{"type":73,"value":2342},{"type":68,"tag":220,"props":6925,"children":6926},{"class":222,"line":2986},[6927,6931],{"type":68,"tag":220,"props":6928,"children":6929},{"style":243},[6930],{"type":73,"value":574},{"type":68,"tag":220,"props":6932,"children":6933},{"style":418},[6934],{"type":73,"value":579},{"type":68,"tag":220,"props":6936,"children":6937},{"class":222,"line":2994},[6938],{"type":68,"tag":220,"props":6939,"children":6940},{"style":243},[6941],{"type":73,"value":588},{"type":68,"tag":220,"props":6943,"children":6944},{"class":222,"line":3002},[6945],{"type":68,"tag":220,"props":6946,"children":6947},{"style":243},[6948],{"type":73,"value":597},{"type":68,"tag":220,"props":6950,"children":6951},{"class":222,"line":3023},[6952,6956],{"type":68,"tag":220,"props":6953,"children":6954},{"style":243},[6955],{"type":73,"value":615},{"type":68,"tag":220,"props":6957,"children":6958},{"style":249},[6959],{"type":73,"value":579},{"type":68,"tag":174,"props":6961,"children":6963},{"id":6962},"common-mistakes",[6964],{"type":73,"value":6965},"Common Mistakes",{"type":68,"tag":928,"props":6967,"children":6969},{"id":6968},"critical-route-guards-do-not-protect-server-functions",[6970],{"type":73,"value":6971},"CRITICAL: Route guards do not protect server functions",{"type":68,"tag":80,"props":6973,"children":6974},{},[6975,6977,6982,6984,6989,6991,6996,6998,7003,7005,7011],{"type":73,"value":6976},"A ",{"type":68,"tag":99,"props":6978,"children":6980},{"className":6979},[],[6981],{"type":73,"value":162},{"type":73,"value":6983}," redirect protects the ",{"type":68,"tag":84,"props":6985,"children":6986},{},[6987],{"type":73,"value":6988},"route's UI",{"type":73,"value":6990},", not the ",{"type":68,"tag":84,"props":6992,"children":6993},{},[6994],{"type":73,"value":6995},"server functions",{"type":73,"value":6997}," declared on it. ",{"type":68,"tag":99,"props":6999,"children":7001},{"className":7000},[],[7002],{"type":73,"value":170},{"type":73,"value":7004}," produces an RPC endpoint reachable directly with its declared HTTP method regardless of which route renders the calling UI. An attacker doesn't have to load ",{"type":68,"tag":99,"props":7006,"children":7008},{"className":7007},[],[7009],{"type":73,"value":7010},"\u002F_authenticated\u002Forders",{"type":73,"value":7012}," — they can call this GET RPC endpoint directly.",{"type":68,"tag":209,"props":7014,"children":7016},{"className":211,"code":7015,"language":213,"meta":214,"style":214},"\u002F\u002F WRONG — handler has no auth check; the route guard doesn't help\nimport { createServerFn } from '@tanstack\u002Freact-start'\nimport { createFileRoute, redirect } from '@tanstack\u002Freact-router'\n\nconst getMyOrders = createServerFn({ method: 'GET' }).handler(async () => {\n  return db.orders.findMany() \u002F\u002F ← anyone can hit the RPC\n})\n\nexport const Route = createFileRoute('\u002F_authenticated\u002Forders')({\n  beforeLoad: ({ context }) => {\n    if (!context.auth.isAuthenticated) throw redirect({ to: '\u002Flogin' })\n  },\n  loader: () => getMyOrders(),\n})\n",[7017],{"type":68,"tag":99,"props":7018,"children":7019},{"__ignoreMap":214},[7020,7028,7065,7108,7115,7204,7244,7255,7262,7309,7340,7423,7430,7463],{"type":68,"tag":220,"props":7021,"children":7022},{"class":222,"line":223},[7023],{"type":68,"tag":220,"props":7024,"children":7025},{"style":227},[7026],{"type":73,"value":7027},"\u002F\u002F WRONG — handler has no auth check; the route guard doesn't help\n",{"type":68,"tag":220,"props":7029,"children":7030},{"class":222,"line":233},[7031,7035,7039,7044,7048,7052,7056,7061],{"type":68,"tag":220,"props":7032,"children":7033},{"style":237},[7034],{"type":73,"value":240},{"type":68,"tag":220,"props":7036,"children":7037},{"style":243},[7038],{"type":73,"value":246},{"type":68,"tag":220,"props":7040,"children":7041},{"style":249},[7042],{"type":73,"value":7043}," createServerFn",{"type":68,"tag":220,"props":7045,"children":7046},{"style":243},[7047],{"type":73,"value":267},{"type":68,"tag":220,"props":7049,"children":7050},{"style":237},[7051],{"type":73,"value":272},{"type":68,"tag":220,"props":7053,"children":7054},{"style":243},[7055],{"type":73,"value":277},{"type":68,"tag":220,"props":7057,"children":7058},{"style":280},[7059],{"type":73,"value":7060},"@tanstack\u002Freact-start",{"type":68,"tag":220,"props":7062,"children":7063},{"style":243},[7064],{"type":73,"value":288},{"type":68,"tag":220,"props":7066,"children":7067},{"class":222,"line":291},[7068,7072,7076,7080,7084,7088,7092,7096,7100,7104],{"type":68,"tag":220,"props":7069,"children":7070},{"style":237},[7071],{"type":73,"value":240},{"type":68,"tag":220,"props":7073,"children":7074},{"style":243},[7075],{"type":73,"value":246},{"type":68,"tag":220,"props":7077,"children":7078},{"style":249},[7079],{"type":73,"value":252},{"type":68,"tag":220,"props":7081,"children":7082},{"style":243},[7083],{"type":73,"value":257},{"type":68,"tag":220,"props":7085,"children":7086},{"style":249},[7087],{"type":73,"value":262},{"type":68,"tag":220,"props":7089,"children":7090},{"style":243},[7091],{"type":73,"value":267},{"type":68,"tag":220,"props":7093,"children":7094},{"style":237},[7095],{"type":73,"value":272},{"type":68,"tag":220,"props":7097,"children":7098},{"style":243},[7099],{"type":73,"value":277},{"type":68,"tag":220,"props":7101,"children":7102},{"style":280},[7103],{"type":73,"value":283},{"type":68,"tag":220,"props":7105,"children":7106},{"style":243},[7107],{"type":73,"value":288},{"type":68,"tag":220,"props":7109,"children":7110},{"class":222,"line":301},[7111],{"type":68,"tag":220,"props":7112,"children":7113},{"emptyLinePlaceholder":295},[7114],{"type":73,"value":298},{"type":68,"tag":220,"props":7116,"children":7117},{"class":222,"line":360},[7118,7123,7128,7132,7136,7140,7144,7149,7153,7157,7162,7166,7170,7174,7178,7183,7187,7192,7196,7200],{"type":68,"tag":220,"props":7119,"children":7120},{"style":310},[7121],{"type":73,"value":7122},"const",{"type":68,"tag":220,"props":7124,"children":7125},{"style":249},[7126],{"type":73,"value":7127}," getMyOrders ",{"type":68,"tag":220,"props":7129,"children":7130},{"style":243},[7131],{"type":73,"value":323},{"type":68,"tag":220,"props":7133,"children":7134},{"style":326},[7135],{"type":73,"value":7043},{"type":68,"tag":220,"props":7137,"children":7138},{"style":249},[7139],{"type":73,"value":333},{"type":68,"tag":220,"props":7141,"children":7142},{"style":243},[7143],{"type":73,"value":875},{"type":68,"tag":220,"props":7145,"children":7146},{"style":418},[7147],{"type":73,"value":7148}," method",{"type":68,"tag":220,"props":7150,"children":7151},{"style":243},[7152],{"type":73,"value":371},{"type":68,"tag":220,"props":7154,"children":7155},{"style":243},[7156],{"type":73,"value":277},{"type":68,"tag":220,"props":7158,"children":7159},{"style":280},[7160],{"type":73,"value":7161},"GET",{"type":68,"tag":220,"props":7163,"children":7164},{"style":243},[7165],{"type":73,"value":338},{"type":68,"tag":220,"props":7167,"children":7168},{"style":243},[7169],{"type":73,"value":267},{"type":68,"tag":220,"props":7171,"children":7172},{"style":249},[7173],{"type":73,"value":1192},{"type":68,"tag":220,"props":7175,"children":7176},{"style":243},[7177],{"type":73,"value":146},{"type":68,"tag":220,"props":7179,"children":7180},{"style":326},[7181],{"type":73,"value":7182},"handler",{"type":68,"tag":220,"props":7184,"children":7185},{"style":249},[7186],{"type":73,"value":333},{"type":68,"tag":220,"props":7188,"children":7189},{"style":310},[7190],{"type":73,"value":7191},"async",{"type":68,"tag":220,"props":7193,"children":7194},{"style":243},[7195],{"type":73,"value":1232},{"type":68,"tag":220,"props":7197,"children":7198},{"style":310},[7199],{"type":73,"value":401},{"type":68,"tag":220,"props":7201,"children":7202},{"style":243},[7203],{"type":73,"value":406},{"type":68,"tag":220,"props":7205,"children":7206},{"class":222,"line":409},[7207,7211,7216,7220,7225,7229,7234,7239],{"type":68,"tag":220,"props":7208,"children":7209},{"style":237},[7210],{"type":73,"value":850},{"type":68,"tag":220,"props":7212,"children":7213},{"style":249},[7214],{"type":73,"value":7215}," db",{"type":68,"tag":220,"props":7217,"children":7218},{"style":243},[7219],{"type":73,"value":146},{"type":68,"tag":220,"props":7221,"children":7222},{"style":249},[7223],{"type":73,"value":7224},"orders",{"type":68,"tag":220,"props":7226,"children":7227},{"style":243},[7228],{"type":73,"value":146},{"type":68,"tag":220,"props":7230,"children":7231},{"style":326},[7232],{"type":73,"value":7233},"findMany",{"type":68,"tag":220,"props":7235,"children":7236},{"style":418},[7237],{"type":73,"value":7238},"() ",{"type":68,"tag":220,"props":7240,"children":7241},{"style":227},[7242],{"type":73,"value":7243},"\u002F\u002F ← anyone can hit the RPC\n",{"type":68,"tag":220,"props":7245,"children":7246},{"class":222,"line":460},[7247,7251],{"type":68,"tag":220,"props":7248,"children":7249},{"style":243},[7250],{"type":73,"value":615},{"type":68,"tag":220,"props":7252,"children":7253},{"style":249},[7254],{"type":73,"value":579},{"type":68,"tag":220,"props":7256,"children":7257},{"class":222,"line":481},[7258],{"type":68,"tag":220,"props":7259,"children":7260},{"emptyLinePlaceholder":295},[7261],{"type":73,"value":298},{"type":68,"tag":220,"props":7263,"children":7264},{"class":222,"line":512},[7265,7269,7273,7277,7281,7285,7289,7293,7297,7301,7305],{"type":68,"tag":220,"props":7266,"children":7267},{"style":237},[7268],{"type":73,"value":307},{"type":68,"tag":220,"props":7270,"children":7271},{"style":310},[7272],{"type":73,"value":313},{"type":68,"tag":220,"props":7274,"children":7275},{"style":249},[7276],{"type":73,"value":318},{"type":68,"tag":220,"props":7278,"children":7279},{"style":243},[7280],{"type":73,"value":323},{"type":68,"tag":220,"props":7282,"children":7283},{"style":326},[7284],{"type":73,"value":252},{"type":68,"tag":220,"props":7286,"children":7287},{"style":249},[7288],{"type":73,"value":333},{"type":68,"tag":220,"props":7290,"children":7291},{"style":243},[7292],{"type":73,"value":338},{"type":68,"tag":220,"props":7294,"children":7295},{"style":280},[7296],{"type":73,"value":7010},{"type":68,"tag":220,"props":7298,"children":7299},{"style":243},[7300],{"type":73,"value":338},{"type":68,"tag":220,"props":7302,"children":7303},{"style":249},[7304],{"type":73,"value":352},{"type":68,"tag":220,"props":7306,"children":7307},{"style":243},[7308],{"type":73,"value":357},{"type":68,"tag":220,"props":7310,"children":7311},{"class":222,"line":529},[7312,7316,7320,7324,7328,7332,7336],{"type":68,"tag":220,"props":7313,"children":7314},{"style":326},[7315],{"type":73,"value":366},{"type":68,"tag":220,"props":7317,"children":7318},{"style":243},[7319],{"type":73,"value":371},{"type":68,"tag":220,"props":7321,"children":7322},{"style":243},[7323],{"type":73,"value":376},{"type":68,"tag":220,"props":7325,"children":7326},{"style":379},[7327],{"type":73,"value":382},{"type":68,"tag":220,"props":7329,"children":7330},{"style":243},[7331],{"type":73,"value":396},{"type":68,"tag":220,"props":7333,"children":7334},{"style":310},[7335],{"type":73,"value":401},{"type":68,"tag":220,"props":7337,"children":7338},{"style":243},[7339],{"type":73,"value":406},{"type":68,"tag":220,"props":7341,"children":7342},{"class":222,"line":559},[7343,7347,7351,7355,7359,7363,7367,7371,7375,7379,7383,7387,7391,7395,7399,7403,7407,7411,7415,7419],{"type":68,"tag":220,"props":7344,"children":7345},{"style":237},[7346],{"type":73,"value":415},{"type":68,"tag":220,"props":7348,"children":7349},{"style":418},[7350],{"type":73,"value":421},{"type":68,"tag":220,"props":7352,"children":7353},{"style":243},[7354],{"type":73,"value":426},{"type":68,"tag":220,"props":7356,"children":7357},{"style":249},[7358],{"type":73,"value":431},{"type":68,"tag":220,"props":7360,"children":7361},{"style":243},[7362],{"type":73,"value":146},{"type":68,"tag":220,"props":7364,"children":7365},{"style":249},[7366],{"type":73,"value":18},{"type":68,"tag":220,"props":7368,"children":7369},{"style":243},[7370],{"type":73,"value":146},{"type":68,"tag":220,"props":7372,"children":7373},{"style":249},[7374],{"type":73,"value":448},{"type":68,"tag":220,"props":7376,"children":7377},{"style":418},[7378],{"type":73,"value":453},{"type":68,"tag":220,"props":7380,"children":7381},{"style":237},[7382],{"type":73,"value":6820},{"type":68,"tag":220,"props":7384,"children":7385},{"style":326},[7386],{"type":73,"value":262},{"type":68,"tag":220,"props":7388,"children":7389},{"style":418},[7390],{"type":73,"value":333},{"type":68,"tag":220,"props":7392,"children":7393},{"style":243},[7394],{"type":73,"value":875},{"type":68,"tag":220,"props":7396,"children":7397},{"style":418},[7398],{"type":73,"value":2958},{"type":68,"tag":220,"props":7400,"children":7401},{"style":243},[7402],{"type":73,"value":371},{"type":68,"tag":220,"props":7404,"children":7405},{"style":243},[7406],{"type":73,"value":277},{"type":68,"tag":220,"props":7408,"children":7409},{"style":280},[7410],{"type":73,"value":500},{"type":68,"tag":220,"props":7412,"children":7413},{"style":243},[7414],{"type":73,"value":338},{"type":68,"tag":220,"props":7416,"children":7417},{"style":243},[7418],{"type":73,"value":267},{"type":68,"tag":220,"props":7420,"children":7421},{"style":418},[7422],{"type":73,"value":579},{"type":68,"tag":220,"props":7424,"children":7425},{"class":222,"line":568},[7426],{"type":68,"tag":220,"props":7427,"children":7428},{"style":243},[7429],{"type":73,"value":597},{"type":68,"tag":220,"props":7431,"children":7432},{"class":222,"line":582},[7433,7438,7442,7446,7450,7455,7459],{"type":68,"tag":220,"props":7434,"children":7435},{"style":326},[7436],{"type":73,"value":7437},"  loader",{"type":68,"tag":220,"props":7439,"children":7440},{"style":243},[7441],{"type":73,"value":371},{"type":68,"tag":220,"props":7443,"children":7444},{"style":243},[7445],{"type":73,"value":1232},{"type":68,"tag":220,"props":7447,"children":7448},{"style":310},[7449],{"type":73,"value":401},{"type":68,"tag":220,"props":7451,"children":7452},{"style":326},[7453],{"type":73,"value":7454}," getMyOrders",{"type":68,"tag":220,"props":7456,"children":7457},{"style":249},[7458],{"type":73,"value":793},{"type":68,"tag":220,"props":7460,"children":7461},{"style":243},[7462],{"type":73,"value":509},{"type":68,"tag":220,"props":7464,"children":7465},{"class":222,"line":591},[7466,7470],{"type":68,"tag":220,"props":7467,"children":7468},{"style":243},[7469],{"type":73,"value":615},{"type":68,"tag":220,"props":7471,"children":7472},{"style":249},[7473],{"type":73,"value":579},{"type":68,"tag":209,"props":7475,"children":7477},{"className":211,"code":7476,"language":213,"meta":214,"style":214},"\u002F\u002F CORRECT — auth enforced on the handler itself, via middleware\nimport { createServerFn } from '@tanstack\u002Freact-start'\nimport { authMiddleware } from '~\u002Fserver\u002Fauth-middleware'\n\nconst getMyOrders = createServerFn({ method: 'GET' })\n  .middleware([authMiddleware])\n  .handler(async ({ context }) => {\n    return db.orders.findMany({ where: { userId: context.session.userId } })\n  })\n",[7478],{"type":68,"tag":99,"props":7479,"children":7480},{"__ignoreMap":214},[7481,7489,7524,7561,7568,7623,7641,7680,7771],{"type":68,"tag":220,"props":7482,"children":7483},{"class":222,"line":223},[7484],{"type":68,"tag":220,"props":7485,"children":7486},{"style":227},[7487],{"type":73,"value":7488},"\u002F\u002F CORRECT — auth enforced on the handler itself, via middleware\n",{"type":68,"tag":220,"props":7490,"children":7491},{"class":222,"line":233},[7492,7496,7500,7504,7508,7512,7516,7520],{"type":68,"tag":220,"props":7493,"children":7494},{"style":237},[7495],{"type":73,"value":240},{"type":68,"tag":220,"props":7497,"children":7498},{"style":243},[7499],{"type":73,"value":246},{"type":68,"tag":220,"props":7501,"children":7502},{"style":249},[7503],{"type":73,"value":7043},{"type":68,"tag":220,"props":7505,"children":7506},{"style":243},[7507],{"type":73,"value":267},{"type":68,"tag":220,"props":7509,"children":7510},{"style":237},[7511],{"type":73,"value":272},{"type":68,"tag":220,"props":7513,"children":7514},{"style":243},[7515],{"type":73,"value":277},{"type":68,"tag":220,"props":7517,"children":7518},{"style":280},[7519],{"type":73,"value":7060},{"type":68,"tag":220,"props":7521,"children":7522},{"style":243},[7523],{"type":73,"value":288},{"type":68,"tag":220,"props":7525,"children":7526},{"class":222,"line":291},[7527,7531,7535,7540,7544,7548,7552,7557],{"type":68,"tag":220,"props":7528,"children":7529},{"style":237},[7530],{"type":73,"value":240},{"type":68,"tag":220,"props":7532,"children":7533},{"style":243},[7534],{"type":73,"value":246},{"type":68,"tag":220,"props":7536,"children":7537},{"style":249},[7538],{"type":73,"value":7539}," authMiddleware",{"type":68,"tag":220,"props":7541,"children":7542},{"style":243},[7543],{"type":73,"value":267},{"type":68,"tag":220,"props":7545,"children":7546},{"style":237},[7547],{"type":73,"value":272},{"type":68,"tag":220,"props":7549,"children":7550},{"style":243},[7551],{"type":73,"value":277},{"type":68,"tag":220,"props":7553,"children":7554},{"style":280},[7555],{"type":73,"value":7556},"~\u002Fserver\u002Fauth-middleware",{"type":68,"tag":220,"props":7558,"children":7559},{"style":243},[7560],{"type":73,"value":288},{"type":68,"tag":220,"props":7562,"children":7563},{"class":222,"line":301},[7564],{"type":68,"tag":220,"props":7565,"children":7566},{"emptyLinePlaceholder":295},[7567],{"type":73,"value":298},{"type":68,"tag":220,"props":7569,"children":7570},{"class":222,"line":360},[7571,7575,7579,7583,7587,7591,7595,7599,7603,7607,7611,7615,7619],{"type":68,"tag":220,"props":7572,"children":7573},{"style":310},[7574],{"type":73,"value":7122},{"type":68,"tag":220,"props":7576,"children":7577},{"style":249},[7578],{"type":73,"value":7127},{"type":68,"tag":220,"props":7580,"children":7581},{"style":243},[7582],{"type":73,"value":323},{"type":68,"tag":220,"props":7584,"children":7585},{"style":326},[7586],{"type":73,"value":7043},{"type":68,"tag":220,"props":7588,"children":7589},{"style":249},[7590],{"type":73,"value":333},{"type":68,"tag":220,"props":7592,"children":7593},{"style":243},[7594],{"type":73,"value":875},{"type":68,"tag":220,"props":7596,"children":7597},{"style":418},[7598],{"type":73,"value":7148},{"type":68,"tag":220,"props":7600,"children":7601},{"style":243},[7602],{"type":73,"value":371},{"type":68,"tag":220,"props":7604,"children":7605},{"style":243},[7606],{"type":73,"value":277},{"type":68,"tag":220,"props":7608,"children":7609},{"style":280},[7610],{"type":73,"value":7161},{"type":68,"tag":220,"props":7612,"children":7613},{"style":243},[7614],{"type":73,"value":338},{"type":68,"tag":220,"props":7616,"children":7617},{"style":243},[7618],{"type":73,"value":267},{"type":68,"tag":220,"props":7620,"children":7621},{"style":249},[7622],{"type":73,"value":579},{"type":68,"tag":220,"props":7624,"children":7625},{"class":222,"line":409},[7626,7631,7636],{"type":68,"tag":220,"props":7627,"children":7628},{"style":243},[7629],{"type":73,"value":7630},"  .",{"type":68,"tag":220,"props":7632,"children":7633},{"style":326},[7634],{"type":73,"value":7635},"middleware",{"type":68,"tag":220,"props":7637,"children":7638},{"style":249},[7639],{"type":73,"value":7640},"([authMiddleware])\n",{"type":68,"tag":220,"props":7642,"children":7643},{"class":222,"line":460},[7644,7648,7652,7656,7660,7664,7668,7672,7676],{"type":68,"tag":220,"props":7645,"children":7646},{"style":243},[7647],{"type":73,"value":7630},{"type":68,"tag":220,"props":7649,"children":7650},{"style":326},[7651],{"type":73,"value":7182},{"type":68,"tag":220,"props":7653,"children":7654},{"style":249},[7655],{"type":73,"value":333},{"type":68,"tag":220,"props":7657,"children":7658},{"style":310},[7659],{"type":73,"value":7191},{"type":68,"tag":220,"props":7661,"children":7662},{"style":243},[7663],{"type":73,"value":376},{"type":68,"tag":220,"props":7665,"children":7666},{"style":379},[7667],{"type":73,"value":382},{"type":68,"tag":220,"props":7669,"children":7670},{"style":243},[7671],{"type":73,"value":396},{"type":68,"tag":220,"props":7673,"children":7674},{"style":310},[7675],{"type":73,"value":401},{"type":68,"tag":220,"props":7677,"children":7678},{"style":243},[7679],{"type":73,"value":406},{"type":68,"tag":220,"props":7681,"children":7682},{"class":222,"line":481},[7683,7687,7691,7695,7699,7703,7707,7711,7715,7720,7724,7728,7733,7737,7741,7745,7750,7754,7759,7763,7767],{"type":68,"tag":220,"props":7684,"children":7685},{"style":237},[7686],{"type":73,"value":2676},{"type":68,"tag":220,"props":7688,"children":7689},{"style":249},[7690],{"type":73,"value":7215},{"type":68,"tag":220,"props":7692,"children":7693},{"style":243},[7694],{"type":73,"value":146},{"type":68,"tag":220,"props":7696,"children":7697},{"style":249},[7698],{"type":73,"value":7224},{"type":68,"tag":220,"props":7700,"children":7701},{"style":243},[7702],{"type":73,"value":146},{"type":68,"tag":220,"props":7704,"children":7705},{"style":326},[7706],{"type":73,"value":7233},{"type":68,"tag":220,"props":7708,"children":7709},{"style":418},[7710],{"type":73,"value":333},{"type":68,"tag":220,"props":7712,"children":7713},{"style":243},[7714],{"type":73,"value":875},{"type":68,"tag":220,"props":7716,"children":7717},{"style":418},[7718],{"type":73,"value":7719}," where",{"type":68,"tag":220,"props":7721,"children":7722},{"style":243},[7723],{"type":73,"value":371},{"type":68,"tag":220,"props":7725,"children":7726},{"style":243},[7727],{"type":73,"value":246},{"type":68,"tag":220,"props":7729,"children":7730},{"style":418},[7731],{"type":73,"value":7732}," userId",{"type":68,"tag":220,"props":7734,"children":7735},{"style":243},[7736],{"type":73,"value":371},{"type":68,"tag":220,"props":7738,"children":7739},{"style":249},[7740],{"type":73,"value":382},{"type":68,"tag":220,"props":7742,"children":7743},{"style":243},[7744],{"type":73,"value":146},{"type":68,"tag":220,"props":7746,"children":7747},{"style":249},[7748],{"type":73,"value":7749},"session",{"type":68,"tag":220,"props":7751,"children":7752},{"style":243},[7753],{"type":73,"value":146},{"type":68,"tag":220,"props":7755,"children":7756},{"style":249},[7757],{"type":73,"value":7758},"userId",{"type":68,"tag":220,"props":7760,"children":7761},{"style":243},[7762],{"type":73,"value":267},{"type":68,"tag":220,"props":7764,"children":7765},{"style":243},[7766],{"type":73,"value":267},{"type":68,"tag":220,"props":7768,"children":7769},{"style":418},[7770],{"type":73,"value":579},{"type":68,"tag":220,"props":7772,"children":7773},{"class":222,"line":512},[7774,7778],{"type":68,"tag":220,"props":7775,"children":7776},{"style":243},[7777],{"type":73,"value":2846},{"type":68,"tag":220,"props":7779,"children":7780},{"style":249},[7781],{"type":73,"value":579},{"type":68,"tag":80,"props":7783,"children":7784},{},[7785,7787,7792,7794,7800,7802,7806],{"type":73,"value":7786},"Rule of thumb: every ",{"type":68,"tag":99,"props":7788,"children":7790},{"className":7789},[],[7791],{"type":73,"value":170},{"type":73,"value":7793},", server route, or API endpoint that touches user data needs ",{"type":68,"tag":99,"props":7795,"children":7797},{"className":7796},[],[7798],{"type":73,"value":7799},"authMiddleware",{"type":73,"value":7801}," (or an equivalent in-handler check). The route guard is for the page experience; the endpoint guard is for the data. See ",{"type":68,"tag":139,"props":7803,"children":7804},{"href":141},[7805],{"type":73,"value":144},{"type":73,"value":7807}," for the full session\u002Fmiddleware pattern.",{"type":68,"tag":928,"props":7809,"children":7811},{"id":7810},"critical-the-anonymous-destination-can-still-disclose-protected-data",[7812],{"type":73,"value":7813},"CRITICAL: The anonymous destination can still disclose protected data",{"type":68,"tag":80,"props":7815,"children":7816},{},[7817],{"type":73,"value":7818},"Protect the entire anonymous response, not only the API call. A public login or unauthorized page still leaks data if its title, copy, search params, or serialized loader state names the protected user, tenant, record, or resource. Test a direct anonymous request and follow redirects. Assert that the handler rejects before reading private data, no protected loader runs, the final HTML and serialized state contain no protected identity, and the redirect contains only a sanitized relative return URL.",{"type":68,"tag":928,"props":7820,"children":7822},{"id":7821},"high-auth-check-in-component-instead-of-beforeload",[7823],{"type":73,"value":7824},"HIGH: Auth check in component instead of beforeLoad",{"type":68,"tag":80,"props":7826,"children":7827},{},[7828,7830,7835],{"type":73,"value":7829},"Component-level auth checks cause a ",{"type":68,"tag":84,"props":7831,"children":7832},{},[7833],{"type":73,"value":7834},"flash of protected content",{"type":73,"value":7836}," before the redirect:",{"type":68,"tag":209,"props":7838,"children":7840},{"className":211,"code":7839,"language":213,"meta":214,"style":214},"\u002F\u002F WRONG — protected content renders briefly before redirect\nexport const Route = createFileRoute('\u002F_authenticated\u002Fdashboard')({\n  component: () => {\n    const auth = useAuth()\n    if (!auth.isAuthenticated) return \u003CNavigate to=\"\u002Flogin\" \u002F>\n    return \u003CDashboard \u002F>\n  },\n})\n\n\u002F\u002F CORRECT — beforeLoad runs before any rendering\nexport const Route = createFileRoute('\u002F_authenticated\u002Fdashboard')({\n  beforeLoad: ({ context }) => {\n    if (!context.auth.isAuthenticated) {\n      throw redirect({ to: '\u002Flogin' })\n    }\n  },\n  component: Dashboard,\n})\n",[7841],{"type":68,"tag":99,"props":7842,"children":7843},{"__ignoreMap":214},[7844,7852,7899,7922,7946,8015,8035,8042,8053,8060,8068,8115,8146,8189,8236,8243,8250,8270],{"type":68,"tag":220,"props":7845,"children":7846},{"class":222,"line":223},[7847],{"type":68,"tag":220,"props":7848,"children":7849},{"style":227},[7850],{"type":73,"value":7851},"\u002F\u002F WRONG — protected content renders briefly before redirect\n",{"type":68,"tag":220,"props":7853,"children":7854},{"class":222,"line":233},[7855,7859,7863,7867,7871,7875,7879,7883,7887,7891,7895],{"type":68,"tag":220,"props":7856,"children":7857},{"style":237},[7858],{"type":73,"value":307},{"type":68,"tag":220,"props":7860,"children":7861},{"style":310},[7862],{"type":73,"value":313},{"type":68,"tag":220,"props":7864,"children":7865},{"style":249},[7866],{"type":73,"value":318},{"type":68,"tag":220,"props":7868,"children":7869},{"style":243},[7870],{"type":73,"value":323},{"type":68,"tag":220,"props":7872,"children":7873},{"style":326},[7874],{"type":73,"value":252},{"type":68,"tag":220,"props":7876,"children":7877},{"style":249},[7878],{"type":73,"value":333},{"type":68,"tag":220,"props":7880,"children":7881},{"style":243},[7882],{"type":73,"value":338},{"type":68,"tag":220,"props":7884,"children":7885},{"style":280},[7886],{"type":73,"value":725},{"type":68,"tag":220,"props":7888,"children":7889},{"style":243},[7890],{"type":73,"value":338},{"type":68,"tag":220,"props":7892,"children":7893},{"style":249},[7894],{"type":73,"value":352},{"type":68,"tag":220,"props":7896,"children":7897},{"style":243},[7898],{"type":73,"value":357},{"type":68,"tag":220,"props":7900,"children":7901},{"class":222,"line":291},[7902,7906,7910,7914,7918],{"type":68,"tag":220,"props":7903,"children":7904},{"style":326},[7905],{"type":73,"value":745},{"type":68,"tag":220,"props":7907,"children":7908},{"style":243},[7909],{"type":73,"value":371},{"type":68,"tag":220,"props":7911,"children":7912},{"style":243},[7913],{"type":73,"value":1232},{"type":68,"tag":220,"props":7915,"children":7916},{"style":310},[7917],{"type":73,"value":401},{"type":68,"tag":220,"props":7919,"children":7920},{"style":243},[7921],{"type":73,"value":406},{"type":68,"tag":220,"props":7923,"children":7924},{"class":222,"line":301},[7925,7930,7934,7938,7942],{"type":68,"tag":220,"props":7926,"children":7927},{"style":310},[7928],{"type":73,"value":7929},"    const",{"type":68,"tag":220,"props":7931,"children":7932},{"style":249},[7933],{"type":73,"value":814},{"type":68,"tag":220,"props":7935,"children":7936},{"style":243},[7937],{"type":73,"value":823},{"type":68,"tag":220,"props":7939,"children":7940},{"style":326},[7941],{"type":73,"value":1753},{"type":68,"tag":220,"props":7943,"children":7944},{"style":418},[7945],{"type":73,"value":842},{"type":68,"tag":220,"props":7947,"children":7948},{"class":222,"line":360},[7949,7953,7957,7961,7965,7969,7973,7977,7982,7986,7991,7995,7999,8003,8007,8011],{"type":68,"tag":220,"props":7950,"children":7951},{"style":237},[7952],{"type":73,"value":415},{"type":68,"tag":220,"props":7954,"children":7955},{"style":418},[7956],{"type":73,"value":421},{"type":68,"tag":220,"props":7958,"children":7959},{"style":243},[7960],{"type":73,"value":426},{"type":68,"tag":220,"props":7962,"children":7963},{"style":249},[7964],{"type":73,"value":18},{"type":68,"tag":220,"props":7966,"children":7967},{"style":243},[7968],{"type":73,"value":146},{"type":68,"tag":220,"props":7970,"children":7971},{"style":249},[7972],{"type":73,"value":448},{"type":68,"tag":220,"props":7974,"children":7975},{"style":418},[7976],{"type":73,"value":453},{"type":68,"tag":220,"props":7978,"children":7979},{"style":237},[7980],{"type":73,"value":7981},"return",{"type":68,"tag":220,"props":7983,"children":7984},{"style":243},[7985],{"type":73,"value":855},{"type":68,"tag":220,"props":7987,"children":7988},{"style":1039},[7989],{"type":73,"value":7990},"Navigate",{"type":68,"tag":220,"props":7992,"children":7993},{"style":310},[7994],{"type":73,"value":2958},{"type":68,"tag":220,"props":7996,"children":7997},{"style":243},[7998],{"type":73,"value":323},{"type":68,"tag":220,"props":8000,"children":8001},{"style":243},[8002],{"type":73,"value":3780},{"type":68,"tag":220,"props":8004,"children":8005},{"style":280},[8006],{"type":73,"value":500},{"type":68,"tag":220,"props":8008,"children":8009},{"style":243},[8010],{"type":73,"value":3780},{"type":68,"tag":220,"props":8012,"children":8013},{"style":243},[8014],{"type":73,"value":2002},{"type":68,"tag":220,"props":8016,"children":8017},{"class":222,"line":409},[8018,8022,8026,8031],{"type":68,"tag":220,"props":8019,"children":8020},{"style":237},[8021],{"type":73,"value":2676},{"type":68,"tag":220,"props":8023,"children":8024},{"style":243},[8025],{"type":73,"value":855},{"type":68,"tag":220,"props":8027,"children":8028},{"style":1039},[8029],{"type":73,"value":8030},"Dashboard",{"type":68,"tag":220,"props":8032,"children":8033},{"style":243},[8034],{"type":73,"value":2002},{"type":68,"tag":220,"props":8036,"children":8037},{"class":222,"line":460},[8038],{"type":68,"tag":220,"props":8039,"children":8040},{"style":243},[8041],{"type":73,"value":597},{"type":68,"tag":220,"props":8043,"children":8044},{"class":222,"line":481},[8045,8049],{"type":68,"tag":220,"props":8046,"children":8047},{"style":243},[8048],{"type":73,"value":615},{"type":68,"tag":220,"props":8050,"children":8051},{"style":249},[8052],{"type":73,"value":579},{"type":68,"tag":220,"props":8054,"children":8055},{"class":222,"line":512},[8056],{"type":68,"tag":220,"props":8057,"children":8058},{"emptyLinePlaceholder":295},[8059],{"type":73,"value":298},{"type":68,"tag":220,"props":8061,"children":8062},{"class":222,"line":529},[8063],{"type":68,"tag":220,"props":8064,"children":8065},{"style":227},[8066],{"type":73,"value":8067},"\u002F\u002F CORRECT — beforeLoad runs before any rendering\n",{"type":68,"tag":220,"props":8069,"children":8070},{"class":222,"line":559},[8071,8075,8079,8083,8087,8091,8095,8099,8103,8107,8111],{"type":68,"tag":220,"props":8072,"children":8073},{"style":237},[8074],{"type":73,"value":307},{"type":68,"tag":220,"props":8076,"children":8077},{"style":310},[8078],{"type":73,"value":313},{"type":68,"tag":220,"props":8080,"children":8081},{"style":249},[8082],{"type":73,"value":318},{"type":68,"tag":220,"props":8084,"children":8085},{"style":243},[8086],{"type":73,"value":323},{"type":68,"tag":220,"props":8088,"children":8089},{"style":326},[8090],{"type":73,"value":252},{"type":68,"tag":220,"props":8092,"children":8093},{"style":249},[8094],{"type":73,"value":333},{"type":68,"tag":220,"props":8096,"children":8097},{"style":243},[8098],{"type":73,"value":338},{"type":68,"tag":220,"props":8100,"children":8101},{"style":280},[8102],{"type":73,"value":725},{"type":68,"tag":220,"props":8104,"children":8105},{"style":243},[8106],{"type":73,"value":338},{"type":68,"tag":220,"props":8108,"children":8109},{"style":249},[8110],{"type":73,"value":352},{"type":68,"tag":220,"props":8112,"children":8113},{"style":243},[8114],{"type":73,"value":357},{"type":68,"tag":220,"props":8116,"children":8117},{"class":222,"line":568},[8118,8122,8126,8130,8134,8138,8142],{"type":68,"tag":220,"props":8119,"children":8120},{"style":326},[8121],{"type":73,"value":366},{"type":68,"tag":220,"props":8123,"children":8124},{"style":243},[8125],{"type":73,"value":371},{"type":68,"tag":220,"props":8127,"children":8128},{"style":243},[8129],{"type":73,"value":376},{"type":68,"tag":220,"props":8131,"children":8132},{"style":379},[8133],{"type":73,"value":382},{"type":68,"tag":220,"props":8135,"children":8136},{"style":243},[8137],{"type":73,"value":396},{"type":68,"tag":220,"props":8139,"children":8140},{"style":310},[8141],{"type":73,"value":401},{"type":68,"tag":220,"props":8143,"children":8144},{"style":243},[8145],{"type":73,"value":406},{"type":68,"tag":220,"props":8147,"children":8148},{"class":222,"line":582},[8149,8153,8157,8161,8165,8169,8173,8177,8181,8185],{"type":68,"tag":220,"props":8150,"children":8151},{"style":237},[8152],{"type":73,"value":415},{"type":68,"tag":220,"props":8154,"children":8155},{"style":418},[8156],{"type":73,"value":421},{"type":68,"tag":220,"props":8158,"children":8159},{"style":243},[8160],{"type":73,"value":426},{"type":68,"tag":220,"props":8162,"children":8163},{"style":249},[8164],{"type":73,"value":431},{"type":68,"tag":220,"props":8166,"children":8167},{"style":243},[8168],{"type":73,"value":146},{"type":68,"tag":220,"props":8170,"children":8171},{"style":249},[8172],{"type":73,"value":18},{"type":68,"tag":220,"props":8174,"children":8175},{"style":243},[8176],{"type":73,"value":146},{"type":68,"tag":220,"props":8178,"children":8179},{"style":249},[8180],{"type":73,"value":448},{"type":68,"tag":220,"props":8182,"children":8183},{"style":418},[8184],{"type":73,"value":453},{"type":68,"tag":220,"props":8186,"children":8187},{"style":243},[8188],{"type":73,"value":357},{"type":68,"tag":220,"props":8190,"children":8191},{"class":222,"line":591},[8192,8196,8200,8204,8208,8212,8216,8220,8224,8228,8232],{"type":68,"tag":220,"props":8193,"children":8194},{"style":237},[8195],{"type":73,"value":466},{"type":68,"tag":220,"props":8197,"children":8198},{"style":326},[8199],{"type":73,"value":262},{"type":68,"tag":220,"props":8201,"children":8202},{"style":418},[8203],{"type":73,"value":333},{"type":68,"tag":220,"props":8205,"children":8206},{"style":243},[8207],{"type":73,"value":875},{"type":68,"tag":220,"props":8209,"children":8210},{"style":418},[8211],{"type":73,"value":2958},{"type":68,"tag":220,"props":8213,"children":8214},{"style":243},[8215],{"type":73,"value":371},{"type":68,"tag":220,"props":8217,"children":8218},{"style":243},[8219],{"type":73,"value":277},{"type":68,"tag":220,"props":8221,"children":8222},{"style":280},[8223],{"type":73,"value":500},{"type":68,"tag":220,"props":8225,"children":8226},{"style":243},[8227],{"type":73,"value":338},{"type":68,"tag":220,"props":8229,"children":8230},{"style":243},[8231],{"type":73,"value":267},{"type":68,"tag":220,"props":8233,"children":8234},{"style":418},[8235],{"type":73,"value":579},{"type":68,"tag":220,"props":8237,"children":8238},{"class":222,"line":600},[8239],{"type":68,"tag":220,"props":8240,"children":8241},{"style":243},[8242],{"type":73,"value":588},{"type":68,"tag":220,"props":8244,"children":8245},{"class":222,"line":609},[8246],{"type":68,"tag":220,"props":8247,"children":8248},{"style":243},[8249],{"type":73,"value":597},{"type":68,"tag":220,"props":8251,"children":8252},{"class":222,"line":1383},[8253,8257,8261,8266],{"type":68,"tag":220,"props":8254,"children":8255},{"style":418},[8256],{"type":73,"value":745},{"type":68,"tag":220,"props":8258,"children":8259},{"style":243},[8260],{"type":73,"value":371},{"type":68,"tag":220,"props":8262,"children":8263},{"style":249},[8264],{"type":73,"value":8265}," Dashboard",{"type":68,"tag":220,"props":8267,"children":8268},{"style":243},[8269],{"type":73,"value":509},{"type":68,"tag":220,"props":8271,"children":8272},{"class":222,"line":2029},[8273,8277],{"type":68,"tag":220,"props":8274,"children":8275},{"style":243},[8276],{"type":73,"value":615},{"type":68,"tag":220,"props":8278,"children":8279},{"style":249},[8280],{"type":73,"value":579},{"type":68,"tag":928,"props":8282,"children":8284},{"id":8283},"high-not-re-throwing-redirects-in-trycatch",[8285],{"type":73,"value":8286},"HIGH: Not re-throwing redirects in try\u002Fcatch",{"type":68,"tag":80,"props":8288,"children":8289},{},[8290,8295,8297,8302],{"type":68,"tag":99,"props":8291,"children":8293},{"className":8292},[],[8294],{"type":73,"value":197},{"type":73,"value":8296}," works by throwing. If ",{"type":68,"tag":99,"props":8298,"children":8300},{"className":8299},[],[8301],{"type":73,"value":162},{"type":73,"value":8303}," has a try\u002Fcatch, the redirect gets swallowed:",{"type":68,"tag":209,"props":8305,"children":8307},{"className":211,"code":8306,"language":213,"meta":214,"style":214},"\u002F\u002F WRONG — redirect is caught and swallowed\nbeforeLoad: async ({ context }) => {\n  try {\n    await validateSession(context.auth)\n  } catch (e) {\n    console.error(e) \u002F\u002F swallows the redirect!\n  }\n}\n\n\u002F\u002F CORRECT — use isRedirect to distinguish intentional redirects from errors\nimport { isRedirect } from '@tanstack\u002Freact-router'\n\nbeforeLoad: async ({ context }) => {\n  try {\n    await validateSession(context.auth)\n  } catch (e) {\n    if (isRedirect(e)) throw e\n    console.error(e)\n  }\n}\n",[8308],{"type":68,"tag":99,"props":8309,"children":8310},{"__ignoreMap":214},[8311,8319,8354,8366,8399,8426,8459,8466,8473,8480,8488,8523,8530,8565,8576,8607,8634,8670,8697,8704],{"type":68,"tag":220,"props":8312,"children":8313},{"class":222,"line":223},[8314],{"type":68,"tag":220,"props":8315,"children":8316},{"style":227},[8317],{"type":73,"value":8318},"\u002F\u002F WRONG — redirect is caught and swallowed\n",{"type":68,"tag":220,"props":8320,"children":8321},{"class":222,"line":233},[8322,8326,8330,8334,8338,8342,8346,8350],{"type":68,"tag":220,"props":8323,"children":8324},{"style":1039},[8325],{"type":73,"value":162},{"type":68,"tag":220,"props":8327,"children":8328},{"style":243},[8329],{"type":73,"value":371},{"type":68,"tag":220,"props":8331,"children":8332},{"style":310},[8333],{"type":73,"value":3349},{"type":68,"tag":220,"props":8335,"children":8336},{"style":243},[8337],{"type":73,"value":376},{"type":68,"tag":220,"props":8339,"children":8340},{"style":379},[8341],{"type":73,"value":382},{"type":68,"tag":220,"props":8343,"children":8344},{"style":243},[8345],{"type":73,"value":396},{"type":68,"tag":220,"props":8347,"children":8348},{"style":310},[8349],{"type":73,"value":401},{"type":68,"tag":220,"props":8351,"children":8352},{"style":243},[8353],{"type":73,"value":406},{"type":68,"tag":220,"props":8355,"children":8356},{"class":222,"line":291},[8357,8362],{"type":68,"tag":220,"props":8358,"children":8359},{"style":237},[8360],{"type":73,"value":8361},"  try",{"type":68,"tag":220,"props":8363,"children":8364},{"style":243},[8365],{"type":73,"value":406},{"type":68,"tag":220,"props":8367,"children":8368},{"class":222,"line":301},[8369,8374,8379,8383,8387,8391,8395],{"type":68,"tag":220,"props":8370,"children":8371},{"style":237},[8372],{"type":73,"value":8373},"    await",{"type":68,"tag":220,"props":8375,"children":8376},{"style":326},[8377],{"type":73,"value":8378}," validateSession",{"type":68,"tag":220,"props":8380,"children":8381},{"style":418},[8382],{"type":73,"value":333},{"type":68,"tag":220,"props":8384,"children":8385},{"style":249},[8386],{"type":73,"value":431},{"type":68,"tag":220,"props":8388,"children":8389},{"style":243},[8390],{"type":73,"value":146},{"type":68,"tag":220,"props":8392,"children":8393},{"style":249},[8394],{"type":73,"value":18},{"type":68,"tag":220,"props":8396,"children":8397},{"style":418},[8398],{"type":73,"value":579},{"type":68,"tag":220,"props":8400,"children":8401},{"class":222,"line":360},[8402,8406,8410,8414,8418,8422],{"type":68,"tag":220,"props":8403,"children":8404},{"style":243},[8405],{"type":73,"value":2846},{"type":68,"tag":220,"props":8407,"children":8408},{"style":237},[8409],{"type":73,"value":3514},{"type":68,"tag":220,"props":8411,"children":8412},{"style":418},[8413],{"type":73,"value":421},{"type":68,"tag":220,"props":8415,"children":8416},{"style":249},[8417],{"type":73,"value":3358},{"type":68,"tag":220,"props":8419,"children":8420},{"style":418},[8421],{"type":73,"value":453},{"type":68,"tag":220,"props":8423,"children":8424},{"style":243},[8425],{"type":73,"value":357},{"type":68,"tag":220,"props":8427,"children":8428},{"class":222,"line":409},[8429,8434,8438,8442,8446,8450,8454],{"type":68,"tag":220,"props":8430,"children":8431},{"style":249},[8432],{"type":73,"value":8433},"    console",{"type":68,"tag":220,"props":8435,"children":8436},{"style":243},[8437],{"type":73,"value":146},{"type":68,"tag":220,"props":8439,"children":8440},{"style":326},[8441],{"type":73,"value":3286},{"type":68,"tag":220,"props":8443,"children":8444},{"style":418},[8445],{"type":73,"value":333},{"type":68,"tag":220,"props":8447,"children":8448},{"style":249},[8449],{"type":73,"value":3358},{"type":68,"tag":220,"props":8451,"children":8452},{"style":418},[8453],{"type":73,"value":453},{"type":68,"tag":220,"props":8455,"children":8456},{"style":227},[8457],{"type":73,"value":8458},"\u002F\u002F swallows the redirect!\n",{"type":68,"tag":220,"props":8460,"children":8461},{"class":222,"line":460},[8462],{"type":68,"tag":220,"props":8463,"children":8464},{"style":243},[8465],{"type":73,"value":1670},{"type":68,"tag":220,"props":8467,"children":8468},{"class":222,"line":481},[8469],{"type":68,"tag":220,"props":8470,"children":8471},{"style":243},[8472],{"type":73,"value":920},{"type":68,"tag":220,"props":8474,"children":8475},{"class":222,"line":512},[8476],{"type":68,"tag":220,"props":8477,"children":8478},{"emptyLinePlaceholder":295},[8479],{"type":73,"value":298},{"type":68,"tag":220,"props":8481,"children":8482},{"class":222,"line":529},[8483],{"type":68,"tag":220,"props":8484,"children":8485},{"style":227},[8486],{"type":73,"value":8487},"\u002F\u002F CORRECT — use isRedirect to distinguish intentional redirects from errors\n",{"type":68,"tag":220,"props":8489,"children":8490},{"class":222,"line":559},[8491,8495,8499,8503,8507,8511,8515,8519],{"type":68,"tag":220,"props":8492,"children":8493},{"style":237},[8494],{"type":73,"value":240},{"type":68,"tag":220,"props":8496,"children":8497},{"style":243},[8498],{"type":73,"value":246},{"type":68,"tag":220,"props":8500,"children":8501},{"style":249},[8502],{"type":73,"value":6429},{"type":68,"tag":220,"props":8504,"children":8505},{"style":243},[8506],{"type":73,"value":267},{"type":68,"tag":220,"props":8508,"children":8509},{"style":237},[8510],{"type":73,"value":272},{"type":68,"tag":220,"props":8512,"children":8513},{"style":243},[8514],{"type":73,"value":277},{"type":68,"tag":220,"props":8516,"children":8517},{"style":280},[8518],{"type":73,"value":283},{"type":68,"tag":220,"props":8520,"children":8521},{"style":243},[8522],{"type":73,"value":288},{"type":68,"tag":220,"props":8524,"children":8525},{"class":222,"line":568},[8526],{"type":68,"tag":220,"props":8527,"children":8528},{"emptyLinePlaceholder":295},[8529],{"type":73,"value":298},{"type":68,"tag":220,"props":8531,"children":8532},{"class":222,"line":582},[8533,8537,8541,8545,8549,8553,8557,8561],{"type":68,"tag":220,"props":8534,"children":8535},{"style":1039},[8536],{"type":73,"value":162},{"type":68,"tag":220,"props":8538,"children":8539},{"style":243},[8540],{"type":73,"value":371},{"type":68,"tag":220,"props":8542,"children":8543},{"style":310},[8544],{"type":73,"value":3349},{"type":68,"tag":220,"props":8546,"children":8547},{"style":243},[8548],{"type":73,"value":376},{"type":68,"tag":220,"props":8550,"children":8551},{"style":379},[8552],{"type":73,"value":382},{"type":68,"tag":220,"props":8554,"children":8555},{"style":243},[8556],{"type":73,"value":396},{"type":68,"tag":220,"props":8558,"children":8559},{"style":310},[8560],{"type":73,"value":401},{"type":68,"tag":220,"props":8562,"children":8563},{"style":243},[8564],{"type":73,"value":406},{"type":68,"tag":220,"props":8566,"children":8567},{"class":222,"line":591},[8568,8572],{"type":68,"tag":220,"props":8569,"children":8570},{"style":237},[8571],{"type":73,"value":8361},{"type":68,"tag":220,"props":8573,"children":8574},{"style":243},[8575],{"type":73,"value":406},{"type":68,"tag":220,"props":8577,"children":8578},{"class":222,"line":600},[8579,8583,8587,8591,8595,8599,8603],{"type":68,"tag":220,"props":8580,"children":8581},{"style":237},[8582],{"type":73,"value":8373},{"type":68,"tag":220,"props":8584,"children":8585},{"style":326},[8586],{"type":73,"value":8378},{"type":68,"tag":220,"props":8588,"children":8589},{"style":418},[8590],{"type":73,"value":333},{"type":68,"tag":220,"props":8592,"children":8593},{"style":249},[8594],{"type":73,"value":431},{"type":68,"tag":220,"props":8596,"children":8597},{"style":243},[8598],{"type":73,"value":146},{"type":68,"tag":220,"props":8600,"children":8601},{"style":249},[8602],{"type":73,"value":18},{"type":68,"tag":220,"props":8604,"children":8605},{"style":418},[8606],{"type":73,"value":579},{"type":68,"tag":220,"props":8608,"children":8609},{"class":222,"line":609},[8610,8614,8618,8622,8626,8630],{"type":68,"tag":220,"props":8611,"children":8612},{"style":243},[8613],{"type":73,"value":2846},{"type":68,"tag":220,"props":8615,"children":8616},{"style":237},[8617],{"type":73,"value":3514},{"type":68,"tag":220,"props":8619,"children":8620},{"style":418},[8621],{"type":73,"value":421},{"type":68,"tag":220,"props":8623,"children":8624},{"style":249},[8625],{"type":73,"value":3358},{"type":68,"tag":220,"props":8627,"children":8628},{"style":418},[8629],{"type":73,"value":453},{"type":68,"tag":220,"props":8631,"children":8632},{"style":243},[8633],{"type":73,"value":357},{"type":68,"tag":220,"props":8635,"children":8636},{"class":222,"line":1383},[8637,8641,8645,8649,8653,8657,8661,8665],{"type":68,"tag":220,"props":8638,"children":8639},{"style":237},[8640],{"type":73,"value":415},{"type":68,"tag":220,"props":8642,"children":8643},{"style":418},[8644],{"type":73,"value":421},{"type":68,"tag":220,"props":8646,"children":8647},{"style":326},[8648],{"type":73,"value":6388},{"type":68,"tag":220,"props":8650,"children":8651},{"style":418},[8652],{"type":73,"value":333},{"type":68,"tag":220,"props":8654,"children":8655},{"style":249},[8656],{"type":73,"value":3358},{"type":68,"tag":220,"props":8658,"children":8659},{"style":418},[8660],{"type":73,"value":2664},{"type":68,"tag":220,"props":8662,"children":8663},{"style":237},[8664],{"type":73,"value":6820},{"type":68,"tag":220,"props":8666,"children":8667},{"style":249},[8668],{"type":73,"value":8669}," e\n",{"type":68,"tag":220,"props":8671,"children":8672},{"class":222,"line":2029},[8673,8677,8681,8685,8689,8693],{"type":68,"tag":220,"props":8674,"children":8675},{"style":249},[8676],{"type":73,"value":8433},{"type":68,"tag":220,"props":8678,"children":8679},{"style":243},[8680],{"type":73,"value":146},{"type":68,"tag":220,"props":8682,"children":8683},{"style":326},[8684],{"type":73,"value":3286},{"type":68,"tag":220,"props":8686,"children":8687},{"style":418},[8688],{"type":73,"value":333},{"type":68,"tag":220,"props":8690,"children":8691},{"style":249},[8692],{"type":73,"value":3358},{"type":68,"tag":220,"props":8694,"children":8695},{"style":418},[8696],{"type":73,"value":579},{"type":68,"tag":220,"props":8698,"children":8699},{"class":222,"line":2936},[8700],{"type":68,"tag":220,"props":8701,"children":8702},{"style":243},[8703],{"type":73,"value":1670},{"type":68,"tag":220,"props":8705,"children":8706},{"class":222,"line":2986},[8707],{"type":68,"tag":220,"props":8708,"children":8709},{"style":243},[8710],{"type":73,"value":920},{"type":68,"tag":928,"props":8712,"children":8714},{"id":8713},"medium-conditionally-rendering-root-route-component",[8715],{"type":73,"value":8716},"MEDIUM: Conditionally rendering root route component",{"type":68,"tag":80,"props":8718,"children":8719},{},[8720],{"type":73,"value":8721},"The root route always renders regardless of auth state. You cannot conditionally render its component:",{"type":68,"tag":209,"props":8723,"children":8725},{"className":211,"code":8724,"language":213,"meta":214,"style":214},"\u002F\u002F WRONG — root route always renders, this doesn't protect anything\nexport const Route = createRootRoute({\n  component: () => {\n    if (!isAuthenticated()) return \u003CLogin \u002F>\n    return \u003COutlet \u002F>\n  },\n})\n\n\u002F\u002F CORRECT — use a pathless layout route for auth boundaries\n\u002F\u002F src\u002Froutes\u002F_authenticated.tsx\nexport const Route = createFileRoute('\u002F_authenticated')({\n  beforeLoad: ({ context }) => {\n    if (!context.auth.isAuthenticated) {\n      throw redirect({ to: '\u002Flogin' })\n    }\n  },\n})\n",[8726],{"type":68,"tag":99,"props":8727,"children":8728},{"__ignoreMap":214},[8729,8737,8769,8792,8833,8852,8859,8870,8877,8885,8892,8939,8970,9013,9060,9067,9074],{"type":68,"tag":220,"props":8730,"children":8731},{"class":222,"line":223},[8732],{"type":68,"tag":220,"props":8733,"children":8734},{"style":227},[8735],{"type":73,"value":8736},"\u002F\u002F WRONG — root route always renders, this doesn't protect anything\n",{"type":68,"tag":220,"props":8738,"children":8739},{"class":222,"line":233},[8740,8744,8748,8752,8756,8761,8765],{"type":68,"tag":220,"props":8741,"children":8742},{"style":237},[8743],{"type":73,"value":307},{"type":68,"tag":220,"props":8745,"children":8746},{"style":310},[8747],{"type":73,"value":313},{"type":68,"tag":220,"props":8749,"children":8750},{"style":249},[8751],{"type":73,"value":318},{"type":68,"tag":220,"props":8753,"children":8754},{"style":243},[8755],{"type":73,"value":323},{"type":68,"tag":220,"props":8757,"children":8758},{"style":326},[8759],{"type":73,"value":8760}," createRootRoute",{"type":68,"tag":220,"props":8762,"children":8763},{"style":249},[8764],{"type":73,"value":333},{"type":68,"tag":220,"props":8766,"children":8767},{"style":243},[8768],{"type":73,"value":357},{"type":68,"tag":220,"props":8770,"children":8771},{"class":222,"line":291},[8772,8776,8780,8784,8788],{"type":68,"tag":220,"props":8773,"children":8774},{"style":326},[8775],{"type":73,"value":745},{"type":68,"tag":220,"props":8777,"children":8778},{"style":243},[8779],{"type":73,"value":371},{"type":68,"tag":220,"props":8781,"children":8782},{"style":243},[8783],{"type":73,"value":1232},{"type":68,"tag":220,"props":8785,"children":8786},{"style":310},[8787],{"type":73,"value":401},{"type":68,"tag":220,"props":8789,"children":8790},{"style":243},[8791],{"type":73,"value":406},{"type":68,"tag":220,"props":8793,"children":8794},{"class":222,"line":301},[8795,8799,8803,8807,8811,8816,8820,8824,8829],{"type":68,"tag":220,"props":8796,"children":8797},{"style":237},[8798],{"type":73,"value":415},{"type":68,"tag":220,"props":8800,"children":8801},{"style":418},[8802],{"type":73,"value":421},{"type":68,"tag":220,"props":8804,"children":8805},{"style":243},[8806],{"type":73,"value":426},{"type":68,"tag":220,"props":8808,"children":8809},{"style":326},[8810],{"type":73,"value":448},{"type":68,"tag":220,"props":8812,"children":8813},{"style":418},[8814],{"type":73,"value":8815},"()) ",{"type":68,"tag":220,"props":8817,"children":8818},{"style":237},[8819],{"type":73,"value":7981},{"type":68,"tag":220,"props":8821,"children":8822},{"style":243},[8823],{"type":73,"value":855},{"type":68,"tag":220,"props":8825,"children":8826},{"style":1039},[8827],{"type":73,"value":8828},"Login",{"type":68,"tag":220,"props":8830,"children":8831},{"style":243},[8832],{"type":73,"value":2002},{"type":68,"tag":220,"props":8834,"children":8835},{"class":222,"line":360},[8836,8840,8844,8848],{"type":68,"tag":220,"props":8837,"children":8838},{"style":237},[8839],{"type":73,"value":2676},{"type":68,"tag":220,"props":8841,"children":8842},{"style":243},[8843],{"type":73,"value":855},{"type":68,"tag":220,"props":8845,"children":8846},{"style":1039},[8847],{"type":73,"value":1375},{"type":68,"tag":220,"props":8849,"children":8850},{"style":243},[8851],{"type":73,"value":2002},{"type":68,"tag":220,"props":8853,"children":8854},{"class":222,"line":409},[8855],{"type":68,"tag":220,"props":8856,"children":8857},{"style":243},[8858],{"type":73,"value":597},{"type":68,"tag":220,"props":8860,"children":8861},{"class":222,"line":460},[8862,8866],{"type":68,"tag":220,"props":8863,"children":8864},{"style":243},[8865],{"type":73,"value":615},{"type":68,"tag":220,"props":8867,"children":8868},{"style":249},[8869],{"type":73,"value":579},{"type":68,"tag":220,"props":8871,"children":8872},{"class":222,"line":481},[8873],{"type":68,"tag":220,"props":8874,"children":8875},{"emptyLinePlaceholder":295},[8876],{"type":73,"value":298},{"type":68,"tag":220,"props":8878,"children":8879},{"class":222,"line":512},[8880],{"type":68,"tag":220,"props":8881,"children":8882},{"style":227},[8883],{"type":73,"value":8884},"\u002F\u002F CORRECT — use a pathless layout route for auth boundaries\n",{"type":68,"tag":220,"props":8886,"children":8887},{"class":222,"line":529},[8888],{"type":68,"tag":220,"props":8889,"children":8890},{"style":227},[8891],{"type":73,"value":230},{"type":68,"tag":220,"props":8893,"children":8894},{"class":222,"line":559},[8895,8899,8903,8907,8911,8915,8919,8923,8927,8931,8935],{"type":68,"tag":220,"props":8896,"children":8897},{"style":237},[8898],{"type":73,"value":307},{"type":68,"tag":220,"props":8900,"children":8901},{"style":310},[8902],{"type":73,"value":313},{"type":68,"tag":220,"props":8904,"children":8905},{"style":249},[8906],{"type":73,"value":318},{"type":68,"tag":220,"props":8908,"children":8909},{"style":243},[8910],{"type":73,"value":323},{"type":68,"tag":220,"props":8912,"children":8913},{"style":326},[8914],{"type":73,"value":252},{"type":68,"tag":220,"props":8916,"children":8917},{"style":249},[8918],{"type":73,"value":333},{"type":68,"tag":220,"props":8920,"children":8921},{"style":243},[8922],{"type":73,"value":338},{"type":68,"tag":220,"props":8924,"children":8925},{"style":280},[8926],{"type":73,"value":343},{"type":68,"tag":220,"props":8928,"children":8929},{"style":243},[8930],{"type":73,"value":338},{"type":68,"tag":220,"props":8932,"children":8933},{"style":249},[8934],{"type":73,"value":352},{"type":68,"tag":220,"props":8936,"children":8937},{"style":243},[8938],{"type":73,"value":357},{"type":68,"tag":220,"props":8940,"children":8941},{"class":222,"line":568},[8942,8946,8950,8954,8958,8962,8966],{"type":68,"tag":220,"props":8943,"children":8944},{"style":326},[8945],{"type":73,"value":366},{"type":68,"tag":220,"props":8947,"children":8948},{"style":243},[8949],{"type":73,"value":371},{"type":68,"tag":220,"props":8951,"children":8952},{"style":243},[8953],{"type":73,"value":376},{"type":68,"tag":220,"props":8955,"children":8956},{"style":379},[8957],{"type":73,"value":382},{"type":68,"tag":220,"props":8959,"children":8960},{"style":243},[8961],{"type":73,"value":396},{"type":68,"tag":220,"props":8963,"children":8964},{"style":310},[8965],{"type":73,"value":401},{"type":68,"tag":220,"props":8967,"children":8968},{"style":243},[8969],{"type":73,"value":406},{"type":68,"tag":220,"props":8971,"children":8972},{"class":222,"line":582},[8973,8977,8981,8985,8989,8993,8997,9001,9005,9009],{"type":68,"tag":220,"props":8974,"children":8975},{"style":237},[8976],{"type":73,"value":415},{"type":68,"tag":220,"props":8978,"children":8979},{"style":418},[8980],{"type":73,"value":421},{"type":68,"tag":220,"props":8982,"children":8983},{"style":243},[8984],{"type":73,"value":426},{"type":68,"tag":220,"props":8986,"children":8987},{"style":249},[8988],{"type":73,"value":431},{"type":68,"tag":220,"props":8990,"children":8991},{"style":243},[8992],{"type":73,"value":146},{"type":68,"tag":220,"props":8994,"children":8995},{"style":249},[8996],{"type":73,"value":18},{"type":68,"tag":220,"props":8998,"children":8999},{"style":243},[9000],{"type":73,"value":146},{"type":68,"tag":220,"props":9002,"children":9003},{"style":249},[9004],{"type":73,"value":448},{"type":68,"tag":220,"props":9006,"children":9007},{"style":418},[9008],{"type":73,"value":453},{"type":68,"tag":220,"props":9010,"children":9011},{"style":243},[9012],{"type":73,"value":357},{"type":68,"tag":220,"props":9014,"children":9015},{"class":222,"line":591},[9016,9020,9024,9028,9032,9036,9040,9044,9048,9052,9056],{"type":68,"tag":220,"props":9017,"children":9018},{"style":237},[9019],{"type":73,"value":466},{"type":68,"tag":220,"props":9021,"children":9022},{"style":326},[9023],{"type":73,"value":262},{"type":68,"tag":220,"props":9025,"children":9026},{"style":418},[9027],{"type":73,"value":333},{"type":68,"tag":220,"props":9029,"children":9030},{"style":243},[9031],{"type":73,"value":875},{"type":68,"tag":220,"props":9033,"children":9034},{"style":418},[9035],{"type":73,"value":2958},{"type":68,"tag":220,"props":9037,"children":9038},{"style":243},[9039],{"type":73,"value":371},{"type":68,"tag":220,"props":9041,"children":9042},{"style":243},[9043],{"type":73,"value":277},{"type":68,"tag":220,"props":9045,"children":9046},{"style":280},[9047],{"type":73,"value":500},{"type":68,"tag":220,"props":9049,"children":9050},{"style":243},[9051],{"type":73,"value":338},{"type":68,"tag":220,"props":9053,"children":9054},{"style":243},[9055],{"type":73,"value":267},{"type":68,"tag":220,"props":9057,"children":9058},{"style":418},[9059],{"type":73,"value":579},{"type":68,"tag":220,"props":9061,"children":9062},{"class":222,"line":600},[9063],{"type":68,"tag":220,"props":9064,"children":9065},{"style":243},[9066],{"type":73,"value":588},{"type":68,"tag":220,"props":9068,"children":9069},{"class":222,"line":609},[9070],{"type":68,"tag":220,"props":9071,"children":9072},{"style":243},[9073],{"type":73,"value":597},{"type":68,"tag":220,"props":9075,"children":9076},{"class":222,"line":1383},[9077,9081],{"type":68,"tag":220,"props":9078,"children":9079},{"style":243},[9080],{"type":73,"value":615},{"type":68,"tag":220,"props":9082,"children":9083},{"style":249},[9084],{"type":73,"value":579},{"type":68,"tag":80,"props":9086,"children":9087},{},[9088,9090,9095],{"type":73,"value":9089},"Place protected routes as children of the ",{"type":68,"tag":99,"props":9091,"children":9093},{"className":9092},[],[9094],{"type":73,"value":205},{"type":73,"value":9096}," layout route. Public routes (login, home, etc.) live outside it.",{"type":68,"tag":174,"props":9098,"children":9100},{"id":9099},"cross-references",[9101],{"type":73,"value":9102},"Cross-References",{"type":68,"tag":9104,"props":9105,"children":9106},"ul",{},[9107,9135,9146],{"type":68,"tag":9108,"props":9109,"children":9110},"li",{},[9111,9113,9118,9120,9125,9127,9133],{"type":73,"value":9112},"See also: ",{"type":68,"tag":84,"props":9114,"children":9115},{},[9116],{"type":73,"value":9117},"router-core\u002Fdata-loading\u002FSKILL.md",{"type":73,"value":9119}," — ",{"type":68,"tag":99,"props":9121,"children":9123},{"className":9122},[],[9124],{"type":73,"value":162},{"type":73,"value":9126}," runs before ",{"type":68,"tag":99,"props":9128,"children":9130},{"className":9129},[],[9131],{"type":73,"value":9132},"loader",{"type":73,"value":9134},"; auth context flows into loader via route context",{"type":68,"tag":9108,"props":9136,"children":9137},{},[9138,9139,9144],{"type":73,"value":9112},{"type":68,"tag":84,"props":9140,"children":9141},{},[9142],{"type":73,"value":9143},"start-core\u002Fauth-server-primitives\u002FSKILL.md",{"type":73,"value":9145}," — server-side session cookies, OAuth state + PKCE, CSRF, password-reset hardening, rate limiting (the server half of authentication)",{"type":68,"tag":9108,"props":9147,"children":9148},{},[9149,9150,9155,9156,9161,9163,9168],{"type":73,"value":9112},{"type":68,"tag":84,"props":9151,"children":9152},{},[9153],{"type":73,"value":9154},"start-core\u002Fmiddleware\u002FSKILL.md",{"type":73,"value":9119},{"type":68,"tag":99,"props":9157,"children":9159},{"className":9158},[],[9160],{"type":73,"value":7799},{"type":73,"value":9162}," factory pattern for protecting individual ",{"type":68,"tag":99,"props":9164,"children":9166},{"className":9165},[],[9167],{"type":73,"value":170},{"type":73,"value":9169}," calls",{"type":68,"tag":9171,"props":9172,"children":9173},"style",{},[9174],{"type":73,"value":9175},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":9177,"total":9317},[9178,9192,9204,9216,9231,9243,9253,9263,9276,9286,9297,9307],{"slug":9179,"name":9179,"fn":9180,"description":9181,"org":9182,"tags":9183,"stars":9189,"repoUrl":9190,"updatedAt":9191},"aggregation","perform data aggregation in TanStack Table","Aggregate TanStack Table columns independently of grouping, including grand totals, caller-selected row totals, multiple keyed aggregations, custom context-based definitions, grouped merges, manual values, and worker constraints.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[9184,9187,9188],{"name":9185,"slug":9186,"type":15},"Data Analysis","data-analysis",{"name":24,"slug":25,"type":15},{"name":9,"slug":8,"type":15},28175,"https:\u002F\u002Fgithub.com\u002FTanStack\u002Ftable","2026-07-30T05:25:59.429787",{"slug":9193,"name":9193,"fn":9194,"description":9195,"org":9196,"tags":9197,"stars":9189,"repoUrl":9190,"updatedAt":9203},"api-not-found","diagnose TanStack Table API errors","Diagnose missing TanStack Table v9 exports, options, state slices, and instance methods. Load before inventing an API when code sees a type error, undefined feature method, absent object key, adapter mismatch, or v8-shaped example.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[9198,9201,9202],{"name":9199,"slug":9200,"type":15},"Debugging","debugging",{"name":24,"slug":25,"type":15},{"name":9,"slug":8,"type":15},"2026-07-30T05:26:05.418735",{"slug":9205,"name":9205,"fn":9206,"description":9207,"org":9208,"tags":9209,"stars":9189,"repoUrl":9190,"updatedAt":9215},"cell-selection","select rectangular cell ranges in tables","Select rectangular cell ranges with cellSelectionFeature: two-corner range state keyed by row and column id, mousedown\u002Fmouseenter handlers, selection edges, render-order resolution under pinning, and autoResetCellSelection. Load when ranges widen unexpectedly after sorting or column reordering, when a drag re-renders the whole table, or when building copy-to-clipboard from a selection.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[9210,9211,9212],{"name":9185,"slug":9186,"type":15},{"name":9,"slug":8,"type":15},{"name":9213,"slug":9214,"type":15},"UI Components","ui-components","2026-07-30T05:25:38.403427",{"slug":9217,"name":9217,"fn":9218,"description":9219,"org":9220,"tags":9221,"stars":9189,"repoUrl":9190,"updatedAt":9230},"client-vs-server","manage TanStack Table data pipelines","Choose client or server ownership for filtering, grouping, sorting, expanding, and pagination in TanStack Table v9. Load for manual* flags, mixed pipelines, server counts, or deciding which dataset each row-model stage receives.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[9222,9225,9226,9229],{"name":9223,"slug":9224,"type":15},"Data Pipeline","data-pipeline",{"name":24,"slug":25,"type":15},{"name":9227,"slug":9228,"type":15},"Performance","performance",{"name":9,"slug":8,"type":15},"2026-07-30T05:25:45.400104",{"slug":9232,"name":9232,"fn":9233,"description":9234,"org":9235,"tags":9236,"stars":9189,"repoUrl":9190,"updatedAt":9242},"column-faceting","build faceted filter UIs","Build faceted filter UIs with columnFacetingFeature, facetedRowModel, facetedUniqueValues, and facetedMinMaxValues. Load for facet counts, numeric ranges, own-filter exclusion, or server-page facet completeness.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[9237,9240,9241],{"name":9238,"slug":9239,"type":15},"Data Visualization","data-visualization",{"name":24,"slug":25,"type":15},{"name":9,"slug":8,"type":15},"2026-07-30T05:25:41.397257",{"slug":9244,"name":9244,"fn":9245,"description":9246,"org":9247,"tags":9248,"stars":9189,"repoUrl":9190,"updatedAt":9252},"column-filtering","implement column filtering in TanStack Table","Filter columns with columnFilteringFeature, filteredRowModel, filterFns, filterMeta, nested-row direction, and manualFiltering. Load for accessor compatibility, controlled filter updaters, fuzzy metadata, or client\u002Fserver ownership.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[9249,9250,9251],{"name":9185,"slug":9186,"type":15},{"name":24,"slug":25,"type":15},{"name":9,"slug":8,"type":15},"2026-07-30T05:25:53.391632",{"slug":9254,"name":9254,"fn":9255,"description":9256,"org":9257,"tags":9258,"stars":9189,"repoUrl":9190,"updatedAt":9262},"column-ordering","manage TanStack Table column ordering","Control TanStack Table v9 leaf columnOrder with stable IDs while accounting for pinning regions, visibility, and groupedColumnMode precedence. Load for drag-and-drop columns or rendered order that differs from state.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[9259,9260,9261],{"name":24,"slug":25,"type":15},{"name":9,"slug":8,"type":15},{"name":9213,"slug":9214,"type":15},"2026-07-30T05:26:03.37801",{"slug":9264,"name":9264,"fn":9265,"description":9266,"org":9267,"tags":9268,"stars":9189,"repoUrl":9190,"updatedAt":9275},"column-pinning","configure column pinning in TanStack Table","Pin columns into logical start, center, and end regions with columnPinningFeature and renderer-owned sticky CSS. Load for RTL offsets, z-index, backgrounds, overflow, widths, gaps, or overlaps.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[9269,9272,9273,9274],{"name":9270,"slug":9271,"type":15},"CSS","css",{"name":24,"slug":25,"type":15},{"name":9,"slug":8,"type":15},{"name":9213,"slug":9214,"type":15},"2026-07-30T05:25:55.377366",{"slug":9277,"name":9277,"fn":9278,"description":9279,"org":9280,"tags":9281,"stars":9189,"repoUrl":9190,"updatedAt":9285},"column-resizing","implement column resizing in TanStack Table","Wire columnResizingFeature, header.getResizeHandler, resize mode and direction, pointer or touch events, and performant CSS-variable updates. Load when resize state changes but widths do not, or large tables resize slowly.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[9282,9283,9284],{"name":24,"slug":25,"type":15},{"name":9,"slug":8,"type":15},{"name":9213,"slug":9214,"type":15},"2026-07-30T05:25:51.400011",{"slug":9287,"name":9287,"fn":9288,"description":9289,"org":9290,"tags":9291,"stars":9189,"repoUrl":9190,"updatedAt":9296},"column-sizing","configure column sizing in TanStack Table","Use columnSizingFeature numeric size, minSize, maxSize, getSize, getStart, getAfter, and total-size APIs in table, grid, or flex CSS. Load for auto or percentage misconceptions and sizing\u002Fpinning layout mismatch.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[9292,9293,9294,9295],{"name":9270,"slug":9271,"type":15},{"name":24,"slug":25,"type":15},{"name":9,"slug":8,"type":15},{"name":9213,"slug":9214,"type":15},"2026-07-30T05:25:48.703799",{"slug":9298,"name":9298,"fn":9299,"description":9300,"org":9301,"tags":9302,"stars":9189,"repoUrl":9190,"updatedAt":9306},"column-visibility","manage column visibility in TanStack Table","Hide columns with columnVisibilityFeature while rendering visibility-aware header, column, and cell collections. Load when hidden columns remain in the DOM, false-versus-absent state is confused, or enableHiding is misunderstood.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[9303,9304,9305],{"name":24,"slug":25,"type":15},{"name":9,"slug":8,"type":15},{"name":9213,"slug":9214,"type":15},"2026-07-30T05:25:47.367943",{"slug":9308,"name":9308,"fn":9309,"description":9310,"org":9311,"tags":9312,"stars":9189,"repoUrl":9190,"updatedAt":9316},"core","build data grids with TanStack Table","Use TanStack Table v9 as a headless data-grid state and row-processing engine. Load for first-table architecture, stable data and columns, row numbering with getDisplayIndex, semantic rendering, framework adapter choice, or deciding what Table owns versus the renderer.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[9313,9314,9315],{"name":9185,"slug":9186,"type":15},{"name":24,"slug":25,"type":15},{"name":9213,"slug":9214,"type":15},"2026-07-30T05:25:52.366295",125,{"items":9319,"total":3222},[9320,9328,9343,9357,9370,9389,9400],{"slug":4,"name":4,"fn":5,"description":6,"org":9321,"tags":9322,"stars":26,"repoUrl":27,"updatedAt":28},{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[9323,9324,9325,9326,9327],{"name":17,"slug":18,"type":15},{"name":24,"slug":25,"type":15},{"name":20,"slug":21,"type":15},{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},{"slug":9329,"name":9329,"fn":9330,"description":9331,"org":9332,"tags":9333,"stars":26,"repoUrl":27,"updatedAt":9342},"auth-server-primitives","implement server-side authentication primitives","Server-side authentication primitives for TanStack Start: session cookies (HttpOnly, Secure, SameSite, __Host- prefix), session read\u002Fissue\u002Fdestroy via createServerFn and middleware, OAuth authorization-code flow with state and PKCE, password-reset enumeration defense, CSRF for non-GET RPCs, rate limiting auth endpoints, session rotation on privilege change. Pairs with router-core\u002Fauth-and-guards for the routing side.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[9334,9335,9338,9341],{"name":17,"slug":18,"type":15},{"name":9336,"slug":9337,"type":15},"OAuth","oauth",{"name":9339,"slug":9340,"type":15},"Security","security",{"name":9,"slug":8,"type":15},"2026-07-30T05:26:59.504396",{"slug":9344,"name":9344,"fn":9345,"description":9346,"org":9347,"tags":9348,"stars":26,"repoUrl":27,"updatedAt":9356},"code-splitting","configure code splitting in TanStack Router","Automatic code splitting (autoCodeSplitting), .lazy.tsx convention, createLazyFileRoute, createLazyRoute, lazyRouteComponent, getRouteApi for typed hooks in split files, codeSplitGroupings per-route override, splitBehavior programmatic config, critical vs non-critical properties.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[9349,9352,9353,9354,9355],{"name":9350,"slug":9351,"type":15},"Engineering","engineering",{"name":24,"slug":25,"type":15},{"name":9227,"slug":9228,"type":15},{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},"2026-07-30T05:27:11.494406",{"slug":9358,"name":9358,"fn":9359,"description":9360,"org":9361,"tags":9362,"stars":26,"repoUrl":27,"updatedAt":9369},"data-loading","manage data loading in TanStack Router","Route loader option, loaderDeps for cache keys, staleTime\u002FgcTime\u002F defaultPreloadStaleTime SWR caching, pendingComponent\u002FpendingMs\u002F pendingMinMs, errorComponent\u002FonError\u002FonCatch, beforeLoad, router context and createRootRouteWithContext DI pattern, router.invalidate, Await component, deferred data loading with unawaited promises.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[9363,9366,9367,9368],{"name":9364,"slug":9365,"type":15},"Caching","caching",{"name":9227,"slug":9228,"type":15},{"name":9,"slug":8,"type":15},{"name":13,"slug":14,"type":15},"2026-07-30T05:26:54.487943",{"slug":9371,"name":9371,"fn":9372,"description":9373,"org":9374,"tags":9375,"stars":26,"repoUrl":27,"updatedAt":9388},"deployment","deploy TanStack Start applications","Deploy to Cloudflare Workers, Netlify, Vercel, Node.js\u002FDocker, Bun, Railway. Selective SSR (ssr option per route), SPA mode, static prerendering, ISR with Cache-Control headers, SEO and head management.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[9376,9379,9381,9384,9385],{"name":9377,"slug":9378,"type":15},"Cloudflare","cloudflare",{"name":9380,"slug":9371,"type":15},"Deployment",{"name":9382,"slug":9383,"type":15},"Netlify","netlify",{"name":9,"slug":8,"type":15},{"name":9386,"slug":9387,"type":15},"Vercel","vercel","2026-07-30T05:26:50.509927",{"slug":9390,"name":9390,"fn":9391,"description":9392,"org":9393,"tags":9394,"stars":26,"repoUrl":27,"updatedAt":9399},"execution-model","manage isomorphic execution models","Isomorphic-by-default principle, environment boundary functions (createServerFn, createServerOnlyFn, createClientOnlyFn, createIsomorphicFn), ClientOnly component, useHydrated hook, import protection, dead code elimination, environment variable safety (VITE_ prefix, process.env).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[9395,9398],{"name":9396,"slug":9397,"type":15},"Architecture","architecture",{"name":9,"slug":8,"type":15},"2026-07-30T05:27:04.558441",{"slug":7635,"name":7635,"fn":9401,"description":9402,"org":9403,"tags":9404,"stars":26,"repoUrl":27,"updatedAt":9412},"implement TanStack Router middleware","createMiddleware, request middleware (.server only), server function middleware (.client + .server), context passing via next({ context }), sendContext for client-server transfer, global middleware via createStart in src\u002Fstart.ts, middleware factories, method order enforcement, fetch override precedence.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":9},[9405,9408,9409,9411],{"name":9406,"slug":9407,"type":15},"Backend","backend",{"name":24,"slug":25,"type":15},{"name":9410,"slug":7635,"type":15},"Middleware",{"name":9,"slug":8,"type":15},"2026-07-30T05:26:58.546019"]