[{"data":1,"prerenderedAt":3052},["ShallowReactive",2],{"navigation_docs":3,"-frameworks-react-router":297,"-frameworks-react-router-surround":3047},[4,30,70,115,203,267,283],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","\u002Fgetting-started\u002Fagent-skills","1.getting-started\u002F4.agent-skills","i-lucide-sparkles",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Logging","\u002Flogging","2.logging",[35,40,45,50,55,60,65],{"title":36,"path":37,"stem":38,"icon":39},"Overview","\u002Flogging\u002Foverview","2.logging\u002F0.overview","i-lucide-list",{"title":41,"path":42,"stem":43,"icon":44},"Simple Logging","\u002Flogging\u002Fsimple-logging","2.logging\u002F1.simple-logging","i-lucide-terminal",{"title":46,"path":47,"stem":48,"icon":49},"Wide Events","\u002Flogging\u002Fwide-events","2.logging\u002F2.wide-events","i-lucide-layers",{"title":51,"path":52,"stem":53,"icon":54},"Structured Errors","\u002Flogging\u002Fstructured-errors","2.logging\u002F3.structured-errors","i-lucide-shield-alert",{"title":56,"path":57,"stem":58,"icon":59},"Client Logging","\u002Flogging\u002Fclient-logging","2.logging\u002F4.client-logging","i-lucide-monitor",{"title":61,"path":62,"stem":63,"icon":64},"AI SDK Integration","\u002Flogging\u002Fai-sdk","2.logging\u002F5.ai-sdk","i-simple-icons-vercel",{"title":66,"path":67,"stem":68,"icon":69},"Better Auth Integration","\u002Flogging\u002Fbetter-auth","2.logging\u002F6.better-auth","i-simple-icons-betterauth",{"title":71,"path":72,"stem":73,"children":74,"page":29},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[75,80,85,90,95,100,105,110],{"title":76,"path":77,"stem":78,"icon":79},"Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":81,"path":82,"stem":83,"icon":84},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F1.configuration","i-lucide-settings",{"title":86,"path":87,"stem":88,"icon":89},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F2.sampling","i-lucide-filter",{"title":91,"path":92,"stem":93,"icon":94},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F3.typed-fields","i-simple-icons-typescript",{"title":96,"path":97,"stem":98,"icon":99},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F4.best-practices","i-lucide-shield-check",{"title":101,"path":102,"stem":103,"icon":104},"Performance","\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F5.performance","i-lucide-gauge",{"title":106,"path":107,"stem":108,"icon":109},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F6.vite-plugin","i-custom-vite",{"title":111,"path":112,"stem":113,"icon":114},"Auto-Redaction","\u002Fcore-concepts\u002Fredaction","3.core-concepts\u002F7.redaction","i-lucide-eye-off",{"title":116,"path":117,"stem":118,"children":119,"page":29},"Frameworks","\u002Fframeworks","4.frameworks",[120,124,129,134,139,144,149,154,159,164,169,174,179,184,188,193,198],{"title":36,"path":121,"stem":122,"icon":123},"\u002Fframeworks\u002Foverview","4.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":125,"path":126,"stem":127,"icon":128},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":130,"path":131,"stem":132,"icon":133},"Next.js","\u002Fframeworks\u002Fnextjs","4.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":135,"path":136,"stem":137,"icon":138},"SvelteKit","\u002Fframeworks\u002Fsveltekit","4.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":140,"path":141,"stem":142,"icon":143},"Nitro","\u002Fframeworks\u002Fnitro","4.frameworks\u002F04.nitro","i-custom-nitro",{"title":145,"path":146,"stem":147,"icon":148},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","4.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":150,"path":151,"stem":152,"icon":153},"NestJS","\u002Fframeworks\u002Fnestjs","4.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":155,"path":156,"stem":157,"icon":158},"Express","\u002Fframeworks\u002Fexpress","4.frameworks\u002F07.express","i-simple-icons-express",{"title":160,"path":161,"stem":162,"icon":163},"Hono","\u002Fframeworks\u002Fhono","4.frameworks\u002F08.hono","i-simple-icons-hono",{"title":165,"path":166,"stem":167,"icon":168},"Fastify","\u002Fframeworks\u002Ffastify","4.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":170,"path":171,"stem":172,"icon":173},"Elysia","\u002Fframeworks\u002Felysia","4.frameworks\u002F10.elysia","i-custom-elysia",{"title":175,"path":176,"stem":177,"icon":178},"React Router","\u002Fframeworks\u002Freact-router","4.frameworks\u002F11.react-router","i-custom-reactrouter",{"title":180,"path":181,"stem":182,"icon":183},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","4.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":185,"path":186,"stem":187,"icon":94},"Standalone","\u002Fframeworks\u002Fstandalone","4.frameworks\u002F13.standalone",{"title":189,"path":190,"stem":191,"icon":192},"Astro","\u002Fframeworks\u002Fastro","4.frameworks\u002F14.astro","i-simple-icons-astro",{"title":194,"path":195,"stem":196,"icon":197},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","4.frameworks\u002F15.custom-integration","i-lucide-puzzle",{"title":199,"path":200,"stem":201,"icon":202},"AWS Lambda","\u002Fframeworks\u002Faws-lambda","4.frameworks\u002F16.aws-lambda","i-custom-lambda",{"title":204,"path":205,"stem":206,"children":207,"page":29},"Adapters","\u002Fadapters","5.adapters",[208,212,217,222,227,232,237,242,247,252,257,262],{"title":36,"path":209,"stem":210,"icon":211},"\u002Fadapters\u002Foverview","5.adapters\u002F1.overview","i-custom-plug",{"title":213,"path":214,"stem":215,"icon":216},"Custom Adapters","\u002Fadapters\u002Fcustom","5.adapters\u002F10.custom","i-lucide-code",{"title":218,"path":219,"stem":220,"icon":221},"Pipeline","\u002Fadapters\u002Fpipeline","5.adapters\u002F11.pipeline","i-lucide-workflow",{"title":223,"path":224,"stem":225,"icon":226},"HTTP","\u002Fadapters\u002Fhttp","5.adapters\u002F12.http","i-lucide-globe",{"title":228,"path":229,"stem":230,"icon":231},"Axiom","\u002Fadapters\u002Faxiom","5.adapters\u002F2.axiom","i-custom-axiom",{"title":233,"path":234,"stem":235,"icon":236},"OTLP","\u002Fadapters\u002Fotlp","5.adapters\u002F3.otlp","i-simple-icons-opentelemetry",{"title":238,"path":239,"stem":240,"icon":241},"PostHog","\u002Fadapters\u002Fposthog","5.adapters\u002F4.posthog","i-simple-icons-posthog",{"title":243,"path":244,"stem":245,"icon":246},"Sentry","\u002Fadapters\u002Fsentry","5.adapters\u002F5.sentry","i-simple-icons-sentry",{"title":248,"path":249,"stem":250,"icon":251},"Better Stack","\u002Fadapters\u002Fbetter-stack","5.adapters\u002F6.better-stack","i-simple-icons-betterstack",{"title":253,"path":254,"stem":255,"icon":256},"File System","\u002Fadapters\u002Ffs","5.adapters\u002F7.fs","i-lucide-hard-drive",{"title":258,"path":259,"stem":260,"icon":261},"Datadog","\u002Fadapters\u002Fdatadog","5.adapters\u002F8.datadog","i-simple-icons-datadog",{"title":263,"path":264,"stem":265,"icon":266},"HyperDX","\u002Fadapters\u002Fhyperdx","5.adapters\u002F9.hyperdx","i-custom-hyperdx",{"title":268,"path":269,"stem":270,"children":271,"page":29},"Enrichers","\u002Fenrichers","6.enrichers",[272,275,279],{"title":36,"path":273,"stem":274,"icon":28},"\u002Fenrichers\u002Foverview","6.enrichers\u002F1.overview",{"title":276,"path":277,"stem":278,"icon":197},"Built-in","\u002Fenrichers\u002Fbuilt-in","6.enrichers\u002F2.built-in",{"title":280,"path":281,"stem":282,"icon":216},"Custom","\u002Fenrichers\u002Fcustom","6.enrichers\u002F3.custom",{"title":284,"path":285,"stem":286,"children":287,"page":29},"NuxtHub","\u002Fnuxthub","7.nuxthub",[288,292],{"title":36,"path":289,"stem":290,"icon":291},"\u002Fnuxthub\u002Foverview","7.nuxthub\u002F1.overview","i-lucide-database",{"title":293,"path":294,"stem":295,"icon":296},"Retention","\u002Fnuxthub\u002Fretention","7.nuxthub\u002F2.retention","i-lucide-clock",{"id":298,"title":175,"body":299,"description":3037,"extension":3038,"links":3039,"meta":3043,"navigation":3044,"path":176,"seo":3045,"stem":177,"__hash__":3046},"docs\u002F4.frameworks\u002F11.react-router.md",{"type":300,"value":301,"toc":3018},"minimark",[302,319,362,461,465,470,500,504,600,604,954,958,1097,1119,1126,1129,1132,1447,1450,1515,1518,1521,1654,1660,1835,1839,1856,2094,2097,2163,2166,2176,2180,2183,2371,2375,2382,2593,2604,2608,2614,2738,2742,2752,2916,2920,2961,2969,2979,2983,3014],[303,304,305,306,310,311,314,315,318],"p",{},"The ",[307,308,309],"code",{},"evlog\u002Freact-router"," middleware auto-creates a request-scoped logger accessible via ",[307,312,313],{},"context.get(loggerContext)"," or ",[307,316,317],{},"useLogger()"," and emits a wide event when the response completes.",[320,321,323,324,331,332,336,337,340,341,344,345,347,348,350,351,353,354,357,358,361],"callout",{"color":322,"icon":13},"info","React Router has three ",[325,326,330],"a",{"href":327,"rel":328},"https:\u002F\u002Freactrouter.com\u002Fstart\u002Fmodes",[329],"nofollow","modes",": ",[333,334,335],"strong",{},"Framework",", ",[333,338,339],{},"Data",", and ",[333,342,343],{},"Declarative",". The ",[307,346,309],{}," middleware requires the middleware API, which is available in ",[333,349,335],{}," and ",[333,352,339],{}," modes only. Declarative mode does not support middleware: use ",[307,355,356],{},"evlog\u002Fclient"," for console logging and ",[307,359,360],{},"evlog\u002Fhttp"," if you need a batched HTTP drain to your server.",[363,364,365],"code-collapse",{},[366,367,373],"pre",{"className":368,"code":369,"filename":370,"language":371,"meta":372,"style":372},"language-txt shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","Set up evlog in my React Router app.\n\n- Install evlog: pnpm add evlog\n- Call initLogger({ env: { service: 'my-api' } }) at startup\n- Alternatively, use evlog\u002Fvite plugin in vite.config.ts for auto-init (replaces initLogger)\n- Enable middleware in react-router.config.ts: future: { v8_middleware: true }\n- Import evlog middleware and loggerContext from 'evlog\u002Freact-router'\n- Add evlog() to root route's middleware array\n- Access logger via context.get(loggerContext) in loaders\u002Factions\n- Or use useLogger() from services without passing context\n- Optionally pass drain, enrich, include, and keep options to evlog()\n\nDocs: https:\u002F\u002Fwww.evlog.dev\u002Fframeworks\u002Freact-router\nAdapters: https:\u002F\u002Fwww.evlog.dev\u002Fadapters\u002Foverview\n","Prompt","txt","",[307,374,375,383,390,396,402,408,414,420,426,432,438,444,449,455],{"__ignoreMap":372},[376,377,380],"span",{"class":378,"line":379},"line",1,[376,381,382],{},"Set up evlog in my React Router app.\n",[376,384,386],{"class":378,"line":385},2,[376,387,389],{"emptyLinePlaceholder":388},true,"\n",[376,391,393],{"class":378,"line":392},3,[376,394,395],{},"- Install evlog: pnpm add evlog\n",[376,397,399],{"class":378,"line":398},4,[376,400,401],{},"- Call initLogger({ env: { service: 'my-api' } }) at startup\n",[376,403,405],{"class":378,"line":404},5,[376,406,407],{},"- Alternatively, use evlog\u002Fvite plugin in vite.config.ts for auto-init (replaces initLogger)\n",[376,409,411],{"class":378,"line":410},6,[376,412,413],{},"- Enable middleware in react-router.config.ts: future: { v8_middleware: true }\n",[376,415,417],{"class":378,"line":416},7,[376,418,419],{},"- Import evlog middleware and loggerContext from 'evlog\u002Freact-router'\n",[376,421,423],{"class":378,"line":422},8,[376,424,425],{},"- Add evlog() to root route's middleware array\n",[376,427,429],{"class":378,"line":428},9,[376,430,431],{},"- Access logger via context.get(loggerContext) in loaders\u002Factions\n",[376,433,435],{"class":378,"line":434},10,[376,436,437],{},"- Or use useLogger() from services without passing context\n",[376,439,441],{"class":378,"line":440},11,[376,442,443],{},"- Optionally pass drain, enrich, include, and keep options to evlog()\n",[376,445,447],{"class":378,"line":446},12,[376,448,389],{"emptyLinePlaceholder":388},[376,450,452],{"class":378,"line":451},13,[376,453,454],{},"Docs: https:\u002F\u002Fwww.evlog.dev\u002Fframeworks\u002Freact-router\n",[376,456,458],{"class":378,"line":457},14,[376,459,460],{},"Adapters: https:\u002F\u002Fwww.evlog.dev\u002Fadapters\u002Foverview\n",[462,463,20],"h2",{"id":464},"quick-start",[466,467,469],"h3",{"id":468},"_1-install","1. Install",[366,471,476],{"className":472,"code":473,"filename":474,"language":475,"meta":372,"style":372},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","bun add evlog react-router @react-router\u002Fnode @react-router\u002Fserve\n","Terminal","bash",[307,477,478],{"__ignoreMap":372},[376,479,480,484,488,491,494,497],{"class":378,"line":379},[376,481,483],{"class":482},"sBMFI","bun",[376,485,487],{"class":486},"sfazB"," add",[376,489,490],{"class":486}," evlog",[376,492,493],{"class":486}," react-router",[376,495,496],{"class":486}," @react-router\u002Fnode",[376,498,499],{"class":486}," @react-router\u002Fserve\n",[466,501,503],{"id":502},"_2-enable-middleware","2. Enable middleware",[366,505,510],{"className":506,"code":507,"filename":508,"language":509,"meta":372,"style":372},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import type { Config } from '@react-router\u002Fdev\u002Fconfig'\n\nexport default {\n  future: {\n    v8_middleware: true,\n  },\n} satisfies Config\n","react-router.config.ts","typescript",[307,511,512,544,548,559,570,584,589],{"__ignoreMap":372},[376,513,514,518,521,525,529,532,535,538,541],{"class":378,"line":379},[376,515,517],{"class":516},"s7zQu","import",[376,519,520],{"class":516}," type",[376,522,524],{"class":523},"sMK4o"," {",[376,526,528],{"class":527},"sTEyZ"," Config",[376,530,531],{"class":523}," }",[376,533,534],{"class":516}," from",[376,536,537],{"class":523}," '",[376,539,540],{"class":486},"@react-router\u002Fdev\u002Fconfig",[376,542,543],{"class":523},"'\n",[376,545,546],{"class":378,"line":385},[376,547,389],{"emptyLinePlaceholder":388},[376,549,550,553,556],{"class":378,"line":392},[376,551,552],{"class":516},"export",[376,554,555],{"class":516}," default",[376,557,558],{"class":523}," {\n",[376,560,561,565,568],{"class":378,"line":398},[376,562,564],{"class":563},"swJcz","  future",[376,566,567],{"class":523},":",[376,569,558],{"class":523},[376,571,572,575,577,581],{"class":378,"line":404},[376,573,574],{"class":563},"    v8_middleware",[376,576,567],{"class":523},[376,578,580],{"class":579},"sfNiH"," true",[376,582,583],{"class":523},",\n",[376,585,586],{"class":378,"line":410},[376,587,588],{"class":523},"  },\n",[376,590,591,594,597],{"class":378,"line":416},[376,592,593],{"class":523},"}",[376,595,596],{"class":516}," satisfies",[376,598,599],{"class":482}," Config\n",[466,601,603],{"id":602},"_3-initialize-and-register-the-middleware","3. Initialize and register the middleware",[366,605,608],{"className":506,"code":606,"filename":607,"language":509,"meta":372,"style":372},"import { Links, Meta, Outlet, Scripts, ScrollRestoration } from 'react-router'\nimport { initLogger } from 'evlog'\nimport { evlog } from 'evlog\u002Freact-router'\n\ninitLogger({\n  env: { service: 'my-api' },\n})\n\nexport const middleware: Route.MiddlewareFunction[] = [\n  evlog(),\n]\n\nexport default function Root() {\n  return (\n    \u003Chtml lang=\"en\">\n      \u003Chead>\n        \u003CMeta \u002F>\n        \u003CLinks \u002F>\n      \u003C\u002Fhead>\n      \u003Cbody>\n        \u003COutlet \u002F>\n        \u003CScrollRestoration \u002F>\n        \u003CScripts \u002F>\n      \u003C\u002Fbody>\n    \u003C\u002Fhtml>\n  )\n}\n","app\u002Froot.tsx",[307,609,610,651,671,689,693,705,730,737,741,772,782,787,791,807,815,840,851,863,873,883,893,903,913,923,932,942,948],{"__ignoreMap":372},[376,611,612,614,616,619,622,625,627,630,632,635,637,640,642,644,646,649],{"class":378,"line":379},[376,613,517],{"class":516},[376,615,524],{"class":523},[376,617,618],{"class":527}," Links",[376,620,621],{"class":523},",",[376,623,624],{"class":527}," Meta",[376,626,621],{"class":523},[376,628,629],{"class":527}," Outlet",[376,631,621],{"class":523},[376,633,634],{"class":527}," Scripts",[376,636,621],{"class":523},[376,638,639],{"class":527}," ScrollRestoration",[376,641,531],{"class":523},[376,643,534],{"class":516},[376,645,537],{"class":523},[376,647,648],{"class":486},"react-router",[376,650,543],{"class":523},[376,652,653,655,657,660,662,664,666,669],{"class":378,"line":385},[376,654,517],{"class":516},[376,656,524],{"class":523},[376,658,659],{"class":527}," initLogger",[376,661,531],{"class":523},[376,663,534],{"class":516},[376,665,537],{"class":523},[376,667,668],{"class":486},"evlog",[376,670,543],{"class":523},[376,672,673,675,677,679,681,683,685,687],{"class":378,"line":392},[376,674,517],{"class":516},[376,676,524],{"class":523},[376,678,490],{"class":527},[376,680,531],{"class":523},[376,682,534],{"class":516},[376,684,537],{"class":523},[376,686,309],{"class":486},[376,688,543],{"class":523},[376,690,691],{"class":378,"line":398},[376,692,389],{"emptyLinePlaceholder":388},[376,694,695,699,702],{"class":378,"line":404},[376,696,698],{"class":697},"s2Zo4","initLogger",[376,700,701],{"class":527},"(",[376,703,704],{"class":523},"{\n",[376,706,707,710,712,714,717,719,721,724,727],{"class":378,"line":410},[376,708,709],{"class":563},"  env",[376,711,567],{"class":523},[376,713,524],{"class":523},[376,715,716],{"class":563}," service",[376,718,567],{"class":523},[376,720,537],{"class":523},[376,722,723],{"class":486},"my-api",[376,725,726],{"class":523},"'",[376,728,729],{"class":523}," },\n",[376,731,732,734],{"class":378,"line":416},[376,733,593],{"class":523},[376,735,736],{"class":527},")\n",[376,738,739],{"class":378,"line":422},[376,740,389],{"emptyLinePlaceholder":388},[376,742,743,745,749,752,754,757,760,763,766,769],{"class":378,"line":428},[376,744,552],{"class":516},[376,746,748],{"class":747},"spNyl"," const",[376,750,751],{"class":527}," middleware",[376,753,567],{"class":523},[376,755,756],{"class":482}," Route",[376,758,759],{"class":523},".",[376,761,762],{"class":482},"MiddlewareFunction",[376,764,765],{"class":527},"[] ",[376,767,768],{"class":523},"=",[376,770,771],{"class":527}," [\n",[376,773,774,777,780],{"class":378,"line":434},[376,775,776],{"class":697},"  evlog",[376,778,779],{"class":527},"()",[376,781,583],{"class":523},[376,783,784],{"class":378,"line":440},[376,785,786],{"class":527},"]\n",[376,788,789],{"class":378,"line":446},[376,790,389],{"emptyLinePlaceholder":388},[376,792,793,795,797,800,803,805],{"class":378,"line":451},[376,794,552],{"class":516},[376,796,555],{"class":516},[376,798,799],{"class":747}," function",[376,801,802],{"class":697}," Root",[376,804,779],{"class":523},[376,806,558],{"class":523},[376,808,809,812],{"class":378,"line":457},[376,810,811],{"class":516},"  return",[376,813,814],{"class":563}," (\n",[376,816,818,821,824,827,829,832,835,837],{"class":378,"line":817},15,[376,819,820],{"class":523},"    \u003C",[376,822,823],{"class":527},"html",[376,825,826],{"class":527}," lang",[376,828,768],{"class":523},[376,830,831],{"class":523},"\"",[376,833,834],{"class":486},"en",[376,836,831],{"class":523},[376,838,839],{"class":523},">\n",[376,841,843,846,849],{"class":378,"line":842},16,[376,844,845],{"class":563},"      \u003C",[376,847,848],{"class":482},"head",[376,850,839],{"class":563},[376,852,854,857,860],{"class":378,"line":853},17,[376,855,856],{"class":523},"        \u003C",[376,858,859],{"class":527},"Meta",[376,861,862],{"class":523}," \u002F>\n",[376,864,866,868,871],{"class":378,"line":865},18,[376,867,856],{"class":523},[376,869,870],{"class":527},"Links",[376,872,862],{"class":523},[376,874,876,879,881],{"class":378,"line":875},19,[376,877,878],{"class":523},"      \u003C\u002F",[376,880,848],{"class":527},[376,882,839],{"class":523},[376,884,886,888,891],{"class":378,"line":885},20,[376,887,845],{"class":563},[376,889,890],{"class":482},"body",[376,892,839],{"class":563},[376,894,896,898,901],{"class":378,"line":895},21,[376,897,856],{"class":523},[376,899,900],{"class":527},"Outlet",[376,902,862],{"class":523},[376,904,906,908,911],{"class":378,"line":905},22,[376,907,856],{"class":523},[376,909,910],{"class":527},"ScrollRestoration",[376,912,862],{"class":523},[376,914,916,918,921],{"class":378,"line":915},23,[376,917,856],{"class":523},[376,919,920],{"class":527},"Scripts",[376,922,862],{"class":523},[376,924,926,928,930],{"class":378,"line":925},24,[376,927,878],{"class":523},[376,929,890],{"class":527},[376,931,839],{"class":523},[376,933,935,938,940],{"class":378,"line":934},25,[376,936,937],{"class":523},"    \u003C\u002F",[376,939,823],{"class":527},[376,941,839],{"class":523},[376,943,945],{"class":378,"line":944},26,[376,946,947],{"class":563},"  )\n",[376,949,951],{"class":378,"line":950},27,[376,952,953],{"class":523},"}\n",[466,955,957],{"id":956},"_4-use-the-logger-in-loaders","4. Use the logger in loaders",[366,959,962],{"className":506,"code":960,"filename":961,"language":509,"meta":372,"style":372},"import { loggerContext } from 'evlog\u002Freact-router'\n\nexport async function loader({ context }: Route.LoaderArgs) {\n  const log = context.get(loggerContext)\n  log.set({ route: 'health' })\n  return { ok: true }\n}\n","app\u002Froutes\u002Fhealth.tsx",[307,963,964,983,987,1021,1046,1077,1093],{"__ignoreMap":372},[376,965,966,968,970,973,975,977,979,981],{"class":378,"line":379},[376,967,517],{"class":516},[376,969,524],{"class":523},[376,971,972],{"class":527}," loggerContext",[376,974,531],{"class":523},[376,976,534],{"class":516},[376,978,537],{"class":523},[376,980,309],{"class":486},[376,982,543],{"class":523},[376,984,985],{"class":378,"line":385},[376,986,389],{"emptyLinePlaceholder":388},[376,988,989,991,994,996,999,1002,1006,1009,1011,1013,1016,1019],{"class":378,"line":392},[376,990,552],{"class":516},[376,992,993],{"class":747}," async",[376,995,799],{"class":747},[376,997,998],{"class":697}," loader",[376,1000,1001],{"class":523},"({",[376,1003,1005],{"class":1004},"sHdIc"," context",[376,1007,1008],{"class":523}," }:",[376,1010,756],{"class":482},[376,1012,759],{"class":523},[376,1014,1015],{"class":482},"LoaderArgs",[376,1017,1018],{"class":523},")",[376,1020,558],{"class":523},[376,1022,1023,1026,1029,1032,1034,1036,1039,1041,1044],{"class":378,"line":398},[376,1024,1025],{"class":747},"  const",[376,1027,1028],{"class":527}," log",[376,1030,1031],{"class":523}," =",[376,1033,1005],{"class":527},[376,1035,759],{"class":523},[376,1037,1038],{"class":697},"get",[376,1040,701],{"class":563},[376,1042,1043],{"class":527},"loggerContext",[376,1045,736],{"class":563},[376,1047,1048,1051,1053,1056,1058,1061,1064,1066,1068,1071,1073,1075],{"class":378,"line":404},[376,1049,1050],{"class":527},"  log",[376,1052,759],{"class":523},[376,1054,1055],{"class":697},"set",[376,1057,701],{"class":563},[376,1059,1060],{"class":523},"{",[376,1062,1063],{"class":563}," route",[376,1065,567],{"class":523},[376,1067,537],{"class":523},[376,1069,1070],{"class":486},"health",[376,1072,726],{"class":523},[376,1074,531],{"class":523},[376,1076,736],{"class":563},[376,1078,1079,1081,1083,1086,1088,1090],{"class":378,"line":410},[376,1080,811],{"class":516},[376,1082,524],{"class":523},[376,1084,1085],{"class":563}," ok",[376,1087,567],{"class":523},[376,1089,580],{"class":579},[376,1091,1092],{"class":523}," }\n",[376,1094,1095],{"class":378,"line":416},[376,1096,953],{"class":523},[320,1098,1099,1102,1103,1106,1107,1110,1111,1114,1115,1118],{"color":322,"icon":109},[333,1100,1101],{},"Using Vite?"," The ",[307,1104,1105],{},"evlog\u002Fvite"," ",[325,1108,1109],{"href":107},"plugin"," replaces the ",[307,1112,1113],{},"initLogger()"," call with compile-time auto-initialization, strips ",[307,1116,1117],{},"log.debug()"," from production builds, and injects source locations.",[303,1120,305,1121,1123,1124,759],{},[307,1122,1043],{}," provides typed access to the evlog logger in any loader or action via ",[307,1125,313],{},[462,1127,46],{"id":1128},"wide-events",[303,1130,1131],{},"Build up context progressively through your loader. One request = one wide event:",[366,1133,1136],{"className":506,"code":1134,"filename":1135,"language":509,"meta":372,"style":372},"import { loggerContext } from 'evlog\u002Freact-router'\n\nexport async function loader({ params, context }: Route.LoaderArgs) {\n  const log = context.get(loggerContext)\n  const userId = params.id\n\n  log.set({ user: { id: userId } })\n\n  const user = await db.findUser(userId)\n  log.set({ user: { name: user.name, plan: user.plan } })\n\n  const orders = await db.findOrders(userId)\n  log.set({ orders: { count: orders.length, totalRevenue: sum(orders) } })\n\n  return { user, orders }\n}\n","app\u002Froutes\u002Fusers.$id.tsx",[307,1137,1138,1156,1160,1191,1211,1227,1231,1263,1267,1293,1343,1347,1371,1425,1429,1443],{"__ignoreMap":372},[376,1139,1140,1142,1144,1146,1148,1150,1152,1154],{"class":378,"line":379},[376,1141,517],{"class":516},[376,1143,524],{"class":523},[376,1145,972],{"class":527},[376,1147,531],{"class":523},[376,1149,534],{"class":516},[376,1151,537],{"class":523},[376,1153,309],{"class":486},[376,1155,543],{"class":523},[376,1157,1158],{"class":378,"line":385},[376,1159,389],{"emptyLinePlaceholder":388},[376,1161,1162,1164,1166,1168,1170,1172,1175,1177,1179,1181,1183,1185,1187,1189],{"class":378,"line":392},[376,1163,552],{"class":516},[376,1165,993],{"class":747},[376,1167,799],{"class":747},[376,1169,998],{"class":697},[376,1171,1001],{"class":523},[376,1173,1174],{"class":1004}," params",[376,1176,621],{"class":523},[376,1178,1005],{"class":1004},[376,1180,1008],{"class":523},[376,1182,756],{"class":482},[376,1184,759],{"class":523},[376,1186,1015],{"class":482},[376,1188,1018],{"class":523},[376,1190,558],{"class":523},[376,1192,1193,1195,1197,1199,1201,1203,1205,1207,1209],{"class":378,"line":398},[376,1194,1025],{"class":747},[376,1196,1028],{"class":527},[376,1198,1031],{"class":523},[376,1200,1005],{"class":527},[376,1202,759],{"class":523},[376,1204,1038],{"class":697},[376,1206,701],{"class":563},[376,1208,1043],{"class":527},[376,1210,736],{"class":563},[376,1212,1213,1215,1218,1220,1222,1224],{"class":378,"line":404},[376,1214,1025],{"class":747},[376,1216,1217],{"class":527}," userId",[376,1219,1031],{"class":523},[376,1221,1174],{"class":527},[376,1223,759],{"class":523},[376,1225,1226],{"class":527},"id\n",[376,1228,1229],{"class":378,"line":410},[376,1230,389],{"emptyLinePlaceholder":388},[376,1232,1233,1235,1237,1239,1241,1243,1246,1248,1250,1253,1255,1257,1259,1261],{"class":378,"line":416},[376,1234,1050],{"class":527},[376,1236,759],{"class":523},[376,1238,1055],{"class":697},[376,1240,701],{"class":563},[376,1242,1060],{"class":523},[376,1244,1245],{"class":563}," user",[376,1247,567],{"class":523},[376,1249,524],{"class":523},[376,1251,1252],{"class":563}," id",[376,1254,567],{"class":523},[376,1256,1217],{"class":527},[376,1258,531],{"class":523},[376,1260,531],{"class":523},[376,1262,736],{"class":563},[376,1264,1265],{"class":378,"line":422},[376,1266,389],{"emptyLinePlaceholder":388},[376,1268,1269,1271,1273,1275,1278,1281,1283,1286,1288,1291],{"class":378,"line":428},[376,1270,1025],{"class":747},[376,1272,1245],{"class":527},[376,1274,1031],{"class":523},[376,1276,1277],{"class":516}," await",[376,1279,1280],{"class":527}," db",[376,1282,759],{"class":523},[376,1284,1285],{"class":697},"findUser",[376,1287,701],{"class":563},[376,1289,1290],{"class":527},"userId",[376,1292,736],{"class":563},[376,1294,1295,1297,1299,1301,1303,1305,1307,1309,1311,1314,1316,1318,1320,1323,1325,1328,1330,1332,1334,1337,1339,1341],{"class":378,"line":434},[376,1296,1050],{"class":527},[376,1298,759],{"class":523},[376,1300,1055],{"class":697},[376,1302,701],{"class":563},[376,1304,1060],{"class":523},[376,1306,1245],{"class":563},[376,1308,567],{"class":523},[376,1310,524],{"class":523},[376,1312,1313],{"class":563}," name",[376,1315,567],{"class":523},[376,1317,1245],{"class":527},[376,1319,759],{"class":523},[376,1321,1322],{"class":527},"name",[376,1324,621],{"class":523},[376,1326,1327],{"class":563}," plan",[376,1329,567],{"class":523},[376,1331,1245],{"class":527},[376,1333,759],{"class":523},[376,1335,1336],{"class":527},"plan",[376,1338,531],{"class":523},[376,1340,531],{"class":523},[376,1342,736],{"class":563},[376,1344,1345],{"class":378,"line":440},[376,1346,389],{"emptyLinePlaceholder":388},[376,1348,1349,1351,1354,1356,1358,1360,1362,1365,1367,1369],{"class":378,"line":446},[376,1350,1025],{"class":747},[376,1352,1353],{"class":527}," orders",[376,1355,1031],{"class":523},[376,1357,1277],{"class":516},[376,1359,1280],{"class":527},[376,1361,759],{"class":523},[376,1363,1364],{"class":697},"findOrders",[376,1366,701],{"class":563},[376,1368,1290],{"class":527},[376,1370,736],{"class":563},[376,1372,1373,1375,1377,1379,1381,1383,1385,1387,1389,1392,1394,1396,1398,1401,1403,1406,1408,1411,1413,1416,1419,1421,1423],{"class":378,"line":451},[376,1374,1050],{"class":527},[376,1376,759],{"class":523},[376,1378,1055],{"class":697},[376,1380,701],{"class":563},[376,1382,1060],{"class":523},[376,1384,1353],{"class":563},[376,1386,567],{"class":523},[376,1388,524],{"class":523},[376,1390,1391],{"class":563}," count",[376,1393,567],{"class":523},[376,1395,1353],{"class":527},[376,1397,759],{"class":523},[376,1399,1400],{"class":527},"length",[376,1402,621],{"class":523},[376,1404,1405],{"class":563}," totalRevenue",[376,1407,567],{"class":523},[376,1409,1410],{"class":697}," sum",[376,1412,701],{"class":563},[376,1414,1415],{"class":527},"orders",[376,1417,1418],{"class":563},") ",[376,1420,593],{"class":523},[376,1422,531],{"class":523},[376,1424,736],{"class":563},[376,1426,1427],{"class":378,"line":457},[376,1428,389],{"emptyLinePlaceholder":388},[376,1430,1431,1433,1435,1437,1439,1441],{"class":378,"line":817},[376,1432,811],{"class":516},[376,1434,524],{"class":523},[376,1436,1245],{"class":527},[376,1438,621],{"class":523},[376,1440,1353],{"class":527},[376,1442,1092],{"class":523},[376,1444,1445],{"class":378,"line":842},[376,1446,953],{"class":523},[303,1448,1449],{},"All fields are merged into a single wide event emitted when the request completes:",[366,1451,1454],{"className":472,"code":1452,"filename":1453,"language":475,"meta":372,"style":372},"14:58:15 INFO [my-api] GET \u002Fusers\u002Fusr_123 200 in 12ms\n  ├─ orders: count=2 totalRevenue=6298\n  ├─ user: id=usr_123 name=Alice plan=pro\n  └─ requestId: 4a8ff3a8-...\n","Terminal output",[307,1455,1456,1467,1488,1504],{"__ignoreMap":372},[376,1457,1458,1461,1464],{"class":378,"line":379},[376,1459,1460],{"class":482},"14:58:15",[376,1462,1463],{"class":486}," INFO",[376,1465,1466],{"class":527}," [my-api] GET \u002Fusers\u002Fusr_123 200 in 12ms\n",[376,1468,1469,1472,1475,1478,1482,1485],{"class":378,"line":385},[376,1470,1471],{"class":482},"  ├─",[376,1473,1474],{"class":486}," orders:",[376,1476,1477],{"class":486}," count=",[376,1479,1481],{"class":1480},"sbssI","2",[376,1483,1484],{"class":486}," totalRevenue=",[376,1486,1487],{"class":1480},"6298\n",[376,1489,1490,1492,1495,1498,1501],{"class":378,"line":392},[376,1491,1471],{"class":482},[376,1493,1494],{"class":486}," user:",[376,1496,1497],{"class":486}," id=usr_123",[376,1499,1500],{"class":486}," name=Alice",[376,1502,1503],{"class":486}," plan=pro\n",[376,1505,1506,1509,1512],{"class":378,"line":398},[376,1507,1508],{"class":482},"  └─",[376,1510,1511],{"class":486}," requestId:",[376,1513,1514],{"class":486}," 4a8ff3a8-...\n",[462,1516,317],{"id":1517},"uselogger",[303,1519,1520],{},"Access the logger from any server-side function without passing context:",[366,1522,1525],{"className":506,"code":1523,"filename":1524,"language":509,"meta":372,"style":372},"import { useLogger } from 'evlog\u002Freact-router'\n\nexport async function findUser(userId: string) {\n  const log = useLogger()\n  log.set({ db: { query: 'findUser', userId } })\n  return await db.users.find(userId)\n}\n","app\u002Fservices\u002Fuser.server.ts",[307,1526,1527,1546,1550,1574,1587,1626,1650],{"__ignoreMap":372},[376,1528,1529,1531,1533,1536,1538,1540,1542,1544],{"class":378,"line":379},[376,1530,517],{"class":516},[376,1532,524],{"class":523},[376,1534,1535],{"class":527}," useLogger",[376,1537,531],{"class":523},[376,1539,534],{"class":516},[376,1541,537],{"class":523},[376,1543,309],{"class":486},[376,1545,543],{"class":523},[376,1547,1548],{"class":378,"line":385},[376,1549,389],{"emptyLinePlaceholder":388},[376,1551,1552,1554,1556,1558,1561,1563,1565,1567,1570,1572],{"class":378,"line":392},[376,1553,552],{"class":516},[376,1555,993],{"class":747},[376,1557,799],{"class":747},[376,1559,1560],{"class":697}," findUser",[376,1562,701],{"class":523},[376,1564,1290],{"class":1004},[376,1566,567],{"class":523},[376,1568,1569],{"class":482}," string",[376,1571,1018],{"class":523},[376,1573,558],{"class":523},[376,1575,1576,1578,1580,1582,1584],{"class":378,"line":398},[376,1577,1025],{"class":747},[376,1579,1028],{"class":527},[376,1581,1031],{"class":523},[376,1583,1535],{"class":697},[376,1585,1586],{"class":563},"()\n",[376,1588,1589,1591,1593,1595,1597,1599,1601,1603,1605,1608,1610,1612,1614,1616,1618,1620,1622,1624],{"class":378,"line":404},[376,1590,1050],{"class":527},[376,1592,759],{"class":523},[376,1594,1055],{"class":697},[376,1596,701],{"class":563},[376,1598,1060],{"class":523},[376,1600,1280],{"class":563},[376,1602,567],{"class":523},[376,1604,524],{"class":523},[376,1606,1607],{"class":563}," query",[376,1609,567],{"class":523},[376,1611,537],{"class":523},[376,1613,1285],{"class":486},[376,1615,726],{"class":523},[376,1617,621],{"class":523},[376,1619,1217],{"class":527},[376,1621,531],{"class":523},[376,1623,531],{"class":523},[376,1625,736],{"class":563},[376,1627,1628,1630,1632,1634,1636,1639,1641,1644,1646,1648],{"class":378,"line":410},[376,1629,811],{"class":516},[376,1631,1277],{"class":516},[376,1633,1280],{"class":527},[376,1635,759],{"class":523},[376,1637,1638],{"class":527},"users",[376,1640,759],{"class":523},[376,1642,1643],{"class":697},"find",[376,1645,701],{"class":563},[376,1647,1290],{"class":527},[376,1649,736],{"class":563},[376,1651,1652],{"class":378,"line":416},[376,1653,953],{"class":523},[303,1655,1656,1657,1659],{},"Then call the service from your loader: ",[307,1658,317],{}," returns the same logger instance:",[366,1661,1663],{"className":506,"code":1662,"filename":1135,"language":509,"meta":372,"style":372},"import { loggerContext } from 'evlog\u002Freact-router'\nimport { findUser } from '~\u002Fservices\u002Fuser.server'\n\nexport async function loader({ params, context }: Route.LoaderArgs) {\n  const log = context.get(loggerContext)\n  log.set({ user: { id: params.id } })\n\n  const user = await findUser(params.id!)\n  return { user }\n}\n",[307,1664,1665,1683,1702,1706,1736,1756,1791,1795,1821,1831],{"__ignoreMap":372},[376,1666,1667,1669,1671,1673,1675,1677,1679,1681],{"class":378,"line":379},[376,1668,517],{"class":516},[376,1670,524],{"class":523},[376,1672,972],{"class":527},[376,1674,531],{"class":523},[376,1676,534],{"class":516},[376,1678,537],{"class":523},[376,1680,309],{"class":486},[376,1682,543],{"class":523},[376,1684,1685,1687,1689,1691,1693,1695,1697,1700],{"class":378,"line":385},[376,1686,517],{"class":516},[376,1688,524],{"class":523},[376,1690,1560],{"class":527},[376,1692,531],{"class":523},[376,1694,534],{"class":516},[376,1696,537],{"class":523},[376,1698,1699],{"class":486},"~\u002Fservices\u002Fuser.server",[376,1701,543],{"class":523},[376,1703,1704],{"class":378,"line":392},[376,1705,389],{"emptyLinePlaceholder":388},[376,1707,1708,1710,1712,1714,1716,1718,1720,1722,1724,1726,1728,1730,1732,1734],{"class":378,"line":398},[376,1709,552],{"class":516},[376,1711,993],{"class":747},[376,1713,799],{"class":747},[376,1715,998],{"class":697},[376,1717,1001],{"class":523},[376,1719,1174],{"class":1004},[376,1721,621],{"class":523},[376,1723,1005],{"class":1004},[376,1725,1008],{"class":523},[376,1727,756],{"class":482},[376,1729,759],{"class":523},[376,1731,1015],{"class":482},[376,1733,1018],{"class":523},[376,1735,558],{"class":523},[376,1737,1738,1740,1742,1744,1746,1748,1750,1752,1754],{"class":378,"line":404},[376,1739,1025],{"class":747},[376,1741,1028],{"class":527},[376,1743,1031],{"class":523},[376,1745,1005],{"class":527},[376,1747,759],{"class":523},[376,1749,1038],{"class":697},[376,1751,701],{"class":563},[376,1753,1043],{"class":527},[376,1755,736],{"class":563},[376,1757,1758,1760,1762,1764,1766,1768,1770,1772,1774,1776,1778,1780,1782,1785,1787,1789],{"class":378,"line":410},[376,1759,1050],{"class":527},[376,1761,759],{"class":523},[376,1763,1055],{"class":697},[376,1765,701],{"class":563},[376,1767,1060],{"class":523},[376,1769,1245],{"class":563},[376,1771,567],{"class":523},[376,1773,524],{"class":523},[376,1775,1252],{"class":563},[376,1777,567],{"class":523},[376,1779,1174],{"class":527},[376,1781,759],{"class":523},[376,1783,1784],{"class":527},"id",[376,1786,531],{"class":523},[376,1788,531],{"class":523},[376,1790,736],{"class":563},[376,1792,1793],{"class":378,"line":416},[376,1794,389],{"emptyLinePlaceholder":388},[376,1796,1797,1799,1801,1803,1805,1807,1809,1812,1814,1816,1819],{"class":378,"line":422},[376,1798,1025],{"class":747},[376,1800,1245],{"class":527},[376,1802,1031],{"class":523},[376,1804,1277],{"class":516},[376,1806,1560],{"class":697},[376,1808,701],{"class":563},[376,1810,1811],{"class":527},"params",[376,1813,759],{"class":523},[376,1815,1784],{"class":527},[376,1817,1818],{"class":523},"!",[376,1820,736],{"class":563},[376,1822,1823,1825,1827,1829],{"class":378,"line":428},[376,1824,811],{"class":516},[376,1826,524],{"class":523},[376,1828,1245],{"class":527},[376,1830,1092],{"class":523},[376,1832,1833],{"class":378,"line":434},[376,1834,953],{"class":523},[462,1836,1838],{"id":1837},"error-handling","Error Handling",[303,1840,1841,1842,1845,1846,336,1849,340,1852,1855],{},"Use ",[307,1843,1844],{},"createError"," for structured errors with ",[307,1847,1848],{},"why",[307,1850,1851],{},"fix",[307,1853,1854],{},"link"," fields:",[366,1857,1860],{"className":506,"code":1858,"filename":1859,"language":509,"meta":372,"style":372},"import { loggerContext } from 'evlog\u002Freact-router'\nimport { createError } from 'evlog'\n\nexport async function loader({ context }: Route.LoaderArgs) {\n  const log = context.get(loggerContext)\n  log.set({ cart: { items: 3, total: 9999 } })\n\n  throw createError({\n    message: 'Payment failed',\n    status: 402,\n    why: 'Card declined by issuer',\n    fix: 'Try a different payment method',\n    link: 'https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined',\n  })\n}\n","app\u002Froutes\u002Fcheckout.tsx",[307,1861,1862,1880,1899,1903,1929,1949,1992,1996,2007,2023,2035,2051,2067,2083,2090],{"__ignoreMap":372},[376,1863,1864,1866,1868,1870,1872,1874,1876,1878],{"class":378,"line":379},[376,1865,517],{"class":516},[376,1867,524],{"class":523},[376,1869,972],{"class":527},[376,1871,531],{"class":523},[376,1873,534],{"class":516},[376,1875,537],{"class":523},[376,1877,309],{"class":486},[376,1879,543],{"class":523},[376,1881,1882,1884,1886,1889,1891,1893,1895,1897],{"class":378,"line":385},[376,1883,517],{"class":516},[376,1885,524],{"class":523},[376,1887,1888],{"class":527}," createError",[376,1890,531],{"class":523},[376,1892,534],{"class":516},[376,1894,537],{"class":523},[376,1896,668],{"class":486},[376,1898,543],{"class":523},[376,1900,1901],{"class":378,"line":392},[376,1902,389],{"emptyLinePlaceholder":388},[376,1904,1905,1907,1909,1911,1913,1915,1917,1919,1921,1923,1925,1927],{"class":378,"line":398},[376,1906,552],{"class":516},[376,1908,993],{"class":747},[376,1910,799],{"class":747},[376,1912,998],{"class":697},[376,1914,1001],{"class":523},[376,1916,1005],{"class":1004},[376,1918,1008],{"class":523},[376,1920,756],{"class":482},[376,1922,759],{"class":523},[376,1924,1015],{"class":482},[376,1926,1018],{"class":523},[376,1928,558],{"class":523},[376,1930,1931,1933,1935,1937,1939,1941,1943,1945,1947],{"class":378,"line":404},[376,1932,1025],{"class":747},[376,1934,1028],{"class":527},[376,1936,1031],{"class":523},[376,1938,1005],{"class":527},[376,1940,759],{"class":523},[376,1942,1038],{"class":697},[376,1944,701],{"class":563},[376,1946,1043],{"class":527},[376,1948,736],{"class":563},[376,1950,1951,1953,1955,1957,1959,1961,1964,1966,1968,1971,1973,1976,1978,1981,1983,1986,1988,1990],{"class":378,"line":410},[376,1952,1050],{"class":527},[376,1954,759],{"class":523},[376,1956,1055],{"class":697},[376,1958,701],{"class":563},[376,1960,1060],{"class":523},[376,1962,1963],{"class":563}," cart",[376,1965,567],{"class":523},[376,1967,524],{"class":523},[376,1969,1970],{"class":563}," items",[376,1972,567],{"class":523},[376,1974,1975],{"class":1480}," 3",[376,1977,621],{"class":523},[376,1979,1980],{"class":563}," total",[376,1982,567],{"class":523},[376,1984,1985],{"class":1480}," 9999",[376,1987,531],{"class":523},[376,1989,531],{"class":523},[376,1991,736],{"class":563},[376,1993,1994],{"class":378,"line":416},[376,1995,389],{"emptyLinePlaceholder":388},[376,1997,1998,2001,2003,2005],{"class":378,"line":422},[376,1999,2000],{"class":516},"  throw",[376,2002,1888],{"class":697},[376,2004,701],{"class":563},[376,2006,704],{"class":523},[376,2008,2009,2012,2014,2016,2019,2021],{"class":378,"line":428},[376,2010,2011],{"class":563},"    message",[376,2013,567],{"class":523},[376,2015,537],{"class":523},[376,2017,2018],{"class":486},"Payment failed",[376,2020,726],{"class":523},[376,2022,583],{"class":523},[376,2024,2025,2028,2030,2033],{"class":378,"line":434},[376,2026,2027],{"class":563},"    status",[376,2029,567],{"class":523},[376,2031,2032],{"class":1480}," 402",[376,2034,583],{"class":523},[376,2036,2037,2040,2042,2044,2047,2049],{"class":378,"line":440},[376,2038,2039],{"class":563},"    why",[376,2041,567],{"class":523},[376,2043,537],{"class":523},[376,2045,2046],{"class":486},"Card declined by issuer",[376,2048,726],{"class":523},[376,2050,583],{"class":523},[376,2052,2053,2056,2058,2060,2063,2065],{"class":378,"line":446},[376,2054,2055],{"class":563},"    fix",[376,2057,567],{"class":523},[376,2059,537],{"class":523},[376,2061,2062],{"class":486},"Try a different payment method",[376,2064,726],{"class":523},[376,2066,583],{"class":523},[376,2068,2069,2072,2074,2076,2079,2081],{"class":378,"line":451},[376,2070,2071],{"class":563},"    link",[376,2073,567],{"class":523},[376,2075,537],{"class":523},[376,2077,2078],{"class":486},"https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined",[376,2080,726],{"class":523},[376,2082,583],{"class":523},[376,2084,2085,2088],{"class":378,"line":457},[376,2086,2087],{"class":523},"  }",[376,2089,736],{"class":563},[376,2091,2092],{"class":378,"line":817},[376,2093,953],{"class":523},[303,2095,2096],{},"The error is captured and logged with both the custom context and structured error fields:",[366,2098,2100],{"className":472,"code":2099,"filename":1453,"language":475,"meta":372,"style":372},"14:58:20 ERROR [my-api] GET \u002Fcheckout 402 in 3ms\n  ├─ error: name=EvlogError message=Payment failed status=402\n  ├─ cart: items=3 total=9999\n  └─ requestId: 880a50ac-...\n",[307,2101,2102,2113,2135,2154],{"__ignoreMap":372},[376,2103,2104,2107,2110],{"class":378,"line":379},[376,2105,2106],{"class":482},"14:58:20",[376,2108,2109],{"class":486}," ERROR",[376,2111,2112],{"class":527}," [my-api] GET \u002Fcheckout 402 in 3ms\n",[376,2114,2115,2117,2120,2123,2126,2129,2132],{"class":378,"line":385},[376,2116,1471],{"class":482},[376,2118,2119],{"class":486}," error:",[376,2121,2122],{"class":486}," name=EvlogError",[376,2124,2125],{"class":486}," message=Payment",[376,2127,2128],{"class":486}," failed",[376,2130,2131],{"class":486}," status=",[376,2133,2134],{"class":1480},"402\n",[376,2136,2137,2139,2142,2145,2148,2151],{"class":378,"line":392},[376,2138,1471],{"class":482},[376,2140,2141],{"class":486}," cart:",[376,2143,2144],{"class":486}," items=",[376,2146,2147],{"class":1480},"3",[376,2149,2150],{"class":486}," total=",[376,2152,2153],{"class":1480},"9999\n",[376,2155,2156,2158,2160],{"class":378,"line":398},[376,2157,1508],{"class":482},[376,2159,1511],{"class":486},[376,2161,2162],{"class":486}," 880a50ac-...\n",[462,2164,81],{"id":2165},"configuration",[303,2167,2168,2169,2172,2173,2175],{},"See the ",[325,2170,2171],{"href":82},"Configuration reference"," for all available options (",[307,2174,698],{},", middleware options, sampling, silent mode, etc.).",[462,2177,2179],{"id":2178},"drain-enrichers","Drain & Enrichers",[303,2181,2182],{},"Configure drain adapters and enrichers directly in the middleware options:",[366,2184,2186],{"className":506,"code":2185,"filename":607,"language":509,"meta":372,"style":372},"import { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createUserAgentEnricher } from 'evlog\u002Fenrichers'\n\nconst userAgent = createUserAgentEnricher()\n\nexport const middleware: Route.MiddlewareFunction[] = [\n  evlog({\n    drain: createAxiomDrain(),\n    enrich: (ctx) => {\n      userAgent(ctx)\n      ctx.event.region = process.env.FLY_REGION\n    },\n  }),\n]\n",[307,2187,2188,2208,2228,2232,2246,2250,2272,2280,2293,2313,2324,2354,2359,2367],{"__ignoreMap":372},[376,2189,2190,2192,2194,2197,2199,2201,2203,2206],{"class":378,"line":379},[376,2191,517],{"class":516},[376,2193,524],{"class":523},[376,2195,2196],{"class":527}," createAxiomDrain",[376,2198,531],{"class":523},[376,2200,534],{"class":516},[376,2202,537],{"class":523},[376,2204,2205],{"class":486},"evlog\u002Faxiom",[376,2207,543],{"class":523},[376,2209,2210,2212,2214,2217,2219,2221,2223,2226],{"class":378,"line":385},[376,2211,517],{"class":516},[376,2213,524],{"class":523},[376,2215,2216],{"class":527}," createUserAgentEnricher",[376,2218,531],{"class":523},[376,2220,534],{"class":516},[376,2222,537],{"class":523},[376,2224,2225],{"class":486},"evlog\u002Fenrichers",[376,2227,543],{"class":523},[376,2229,2230],{"class":378,"line":392},[376,2231,389],{"emptyLinePlaceholder":388},[376,2233,2234,2237,2240,2242,2244],{"class":378,"line":398},[376,2235,2236],{"class":747},"const",[376,2238,2239],{"class":527}," userAgent ",[376,2241,768],{"class":523},[376,2243,2216],{"class":697},[376,2245,1586],{"class":527},[376,2247,2248],{"class":378,"line":404},[376,2249,389],{"emptyLinePlaceholder":388},[376,2251,2252,2254,2256,2258,2260,2262,2264,2266,2268,2270],{"class":378,"line":410},[376,2253,552],{"class":516},[376,2255,748],{"class":747},[376,2257,751],{"class":527},[376,2259,567],{"class":523},[376,2261,756],{"class":482},[376,2263,759],{"class":523},[376,2265,762],{"class":482},[376,2267,765],{"class":527},[376,2269,768],{"class":523},[376,2271,771],{"class":527},[376,2273,2274,2276,2278],{"class":378,"line":416},[376,2275,776],{"class":697},[376,2277,701],{"class":527},[376,2279,704],{"class":523},[376,2281,2282,2285,2287,2289,2291],{"class":378,"line":422},[376,2283,2284],{"class":563},"    drain",[376,2286,567],{"class":523},[376,2288,2196],{"class":697},[376,2290,779],{"class":527},[376,2292,583],{"class":523},[376,2294,2295,2298,2300,2303,2306,2308,2311],{"class":378,"line":428},[376,2296,2297],{"class":697},"    enrich",[376,2299,567],{"class":523},[376,2301,2302],{"class":523}," (",[376,2304,2305],{"class":1004},"ctx",[376,2307,1018],{"class":523},[376,2309,2310],{"class":747}," =>",[376,2312,558],{"class":523},[376,2314,2315,2318,2320,2322],{"class":378,"line":434},[376,2316,2317],{"class":697},"      userAgent",[376,2319,701],{"class":563},[376,2321,2305],{"class":527},[376,2323,736],{"class":563},[376,2325,2326,2329,2331,2334,2336,2339,2341,2344,2346,2349,2351],{"class":378,"line":440},[376,2327,2328],{"class":527},"      ctx",[376,2330,759],{"class":523},[376,2332,2333],{"class":527},"event",[376,2335,759],{"class":523},[376,2337,2338],{"class":527},"region",[376,2340,1031],{"class":523},[376,2342,2343],{"class":527}," process",[376,2345,759],{"class":523},[376,2347,2348],{"class":527},"env",[376,2350,759],{"class":523},[376,2352,2353],{"class":527},"FLY_REGION\n",[376,2355,2356],{"class":378,"line":446},[376,2357,2358],{"class":523},"    },\n",[376,2360,2361,2363,2365],{"class":378,"line":451},[376,2362,2087],{"class":523},[376,2364,1018],{"class":527},[376,2366,583],{"class":523},[376,2368,2369],{"class":378,"line":457},[376,2370,786],{"class":527},[466,2372,2374],{"id":2373},"pipeline-batching-retry","Pipeline (Batching & Retry)",[303,2376,2377,2378,2381],{},"For production, wrap your adapter with ",[307,2379,2380],{},"createDrainPipeline"," to batch events and retry on failure:",[366,2383,2385],{"className":506,"code":2384,"filename":607,"language":509,"meta":372,"style":372},"import type { DrainContext } from 'evlog'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>({\n  batch: { size: 50, intervalMs: 5000 },\n  retry: { maxAttempts: 3 },\n})\nconst drain = pipeline(createAxiomDrain())\n\nexport const middleware: Route.MiddlewareFunction[] = [\n  evlog({ drain }),\n]\n",[307,2386,2387,2408,2426,2446,2450,2474,2503,2521,2527,2547,2551,2573,2589],{"__ignoreMap":372},[376,2388,2389,2391,2393,2395,2398,2400,2402,2404,2406],{"class":378,"line":379},[376,2390,517],{"class":516},[376,2392,520],{"class":516},[376,2394,524],{"class":523},[376,2396,2397],{"class":527}," DrainContext",[376,2399,531],{"class":523},[376,2401,534],{"class":516},[376,2403,537],{"class":523},[376,2405,668],{"class":486},[376,2407,543],{"class":523},[376,2409,2410,2412,2414,2416,2418,2420,2422,2424],{"class":378,"line":385},[376,2411,517],{"class":516},[376,2413,524],{"class":523},[376,2415,2196],{"class":527},[376,2417,531],{"class":523},[376,2419,534],{"class":516},[376,2421,537],{"class":523},[376,2423,2205],{"class":486},[376,2425,543],{"class":523},[376,2427,2428,2430,2432,2435,2437,2439,2441,2444],{"class":378,"line":392},[376,2429,517],{"class":516},[376,2431,524],{"class":523},[376,2433,2434],{"class":527}," createDrainPipeline",[376,2436,531],{"class":523},[376,2438,534],{"class":516},[376,2440,537],{"class":523},[376,2442,2443],{"class":486},"evlog\u002Fpipeline",[376,2445,543],{"class":523},[376,2447,2448],{"class":378,"line":398},[376,2449,389],{"emptyLinePlaceholder":388},[376,2451,2452,2454,2457,2459,2461,2464,2467,2470,2472],{"class":378,"line":404},[376,2453,2236],{"class":747},[376,2455,2456],{"class":527}," pipeline ",[376,2458,768],{"class":523},[376,2460,2434],{"class":697},[376,2462,2463],{"class":523},"\u003C",[376,2465,2466],{"class":482},"DrainContext",[376,2468,2469],{"class":523},">",[376,2471,701],{"class":527},[376,2473,704],{"class":523},[376,2475,2476,2479,2481,2483,2486,2488,2491,2493,2496,2498,2501],{"class":378,"line":410},[376,2477,2478],{"class":563},"  batch",[376,2480,567],{"class":523},[376,2482,524],{"class":523},[376,2484,2485],{"class":563}," size",[376,2487,567],{"class":523},[376,2489,2490],{"class":1480}," 50",[376,2492,621],{"class":523},[376,2494,2495],{"class":563}," intervalMs",[376,2497,567],{"class":523},[376,2499,2500],{"class":1480}," 5000",[376,2502,729],{"class":523},[376,2504,2505,2508,2510,2512,2515,2517,2519],{"class":378,"line":416},[376,2506,2507],{"class":563},"  retry",[376,2509,567],{"class":523},[376,2511,524],{"class":523},[376,2513,2514],{"class":563}," maxAttempts",[376,2516,567],{"class":523},[376,2518,1975],{"class":1480},[376,2520,729],{"class":523},[376,2522,2523,2525],{"class":378,"line":422},[376,2524,593],{"class":523},[376,2526,736],{"class":527},[376,2528,2529,2531,2534,2536,2539,2541,2544],{"class":378,"line":428},[376,2530,2236],{"class":747},[376,2532,2533],{"class":527}," drain ",[376,2535,768],{"class":523},[376,2537,2538],{"class":697}," pipeline",[376,2540,701],{"class":527},[376,2542,2543],{"class":697},"createAxiomDrain",[376,2545,2546],{"class":527},"())\n",[376,2548,2549],{"class":378,"line":434},[376,2550,389],{"emptyLinePlaceholder":388},[376,2552,2553,2555,2557,2559,2561,2563,2565,2567,2569,2571],{"class":378,"line":440},[376,2554,552],{"class":516},[376,2556,748],{"class":747},[376,2558,751],{"class":527},[376,2560,567],{"class":523},[376,2562,756],{"class":482},[376,2564,759],{"class":523},[376,2566,762],{"class":482},[376,2568,765],{"class":527},[376,2570,768],{"class":523},[376,2572,771],{"class":527},[376,2574,2575,2577,2579,2581,2583,2585,2587],{"class":378,"line":446},[376,2576,776],{"class":697},[376,2578,701],{"class":527},[376,2580,1060],{"class":523},[376,2582,2533],{"class":527},[376,2584,593],{"class":523},[376,2586,1018],{"class":527},[376,2588,583],{"class":523},[376,2590,2591],{"class":378,"line":451},[376,2592,786],{"class":527},[320,2594,2595,2596,2599,2600,2603],{"color":322,"icon":13},"Call ",[307,2597,2598],{},"drain.flush()"," on server shutdown to ensure all buffered events are sent. See the ",[325,2601,2602],{"href":219},"Pipeline docs"," for all options.",[462,2605,2607],{"id":2606},"tail-sampling","Tail Sampling",[303,2609,1841,2610,2613],{},[307,2611,2612],{},"keep"," to force-retain specific events regardless of head sampling:",[366,2615,2617],{"className":506,"code":2616,"filename":607,"language":509,"meta":372,"style":372},"export const middleware: Route.MiddlewareFunction[] = [\n  evlog({\n    drain: createAxiomDrain(),\n    keep: (ctx) => {\n      if (ctx.duration && ctx.duration > 2000) ctx.shouldKeep = true\n    },\n  }),\n]\n",[307,2618,2619,2641,2649,2661,2678,2722,2726,2734],{"__ignoreMap":372},[376,2620,2621,2623,2625,2627,2629,2631,2633,2635,2637,2639],{"class":378,"line":379},[376,2622,552],{"class":516},[376,2624,748],{"class":747},[376,2626,751],{"class":527},[376,2628,567],{"class":523},[376,2630,756],{"class":482},[376,2632,759],{"class":523},[376,2634,762],{"class":482},[376,2636,765],{"class":527},[376,2638,768],{"class":523},[376,2640,771],{"class":527},[376,2642,2643,2645,2647],{"class":378,"line":385},[376,2644,776],{"class":697},[376,2646,701],{"class":527},[376,2648,704],{"class":523},[376,2650,2651,2653,2655,2657,2659],{"class":378,"line":392},[376,2652,2284],{"class":563},[376,2654,567],{"class":523},[376,2656,2196],{"class":697},[376,2658,779],{"class":527},[376,2660,583],{"class":523},[376,2662,2663,2666,2668,2670,2672,2674,2676],{"class":378,"line":398},[376,2664,2665],{"class":697},"    keep",[376,2667,567],{"class":523},[376,2669,2302],{"class":523},[376,2671,2305],{"class":1004},[376,2673,1018],{"class":523},[376,2675,2310],{"class":747},[376,2677,558],{"class":523},[376,2679,2680,2683,2685,2687,2689,2692,2695,2698,2700,2702,2705,2708,2710,2712,2714,2717,2719],{"class":378,"line":404},[376,2681,2682],{"class":516},"      if",[376,2684,2302],{"class":563},[376,2686,2305],{"class":527},[376,2688,759],{"class":523},[376,2690,2691],{"class":527},"duration",[376,2693,2694],{"class":523}," &&",[376,2696,2697],{"class":527}," ctx",[376,2699,759],{"class":523},[376,2701,2691],{"class":527},[376,2703,2704],{"class":523}," >",[376,2706,2707],{"class":1480}," 2000",[376,2709,1418],{"class":563},[376,2711,2305],{"class":527},[376,2713,759],{"class":523},[376,2715,2716],{"class":527},"shouldKeep",[376,2718,1031],{"class":523},[376,2720,2721],{"class":579}," true\n",[376,2723,2724],{"class":378,"line":410},[376,2725,2358],{"class":523},[376,2727,2728,2730,2732],{"class":378,"line":416},[376,2729,2087],{"class":523},[376,2731,1018],{"class":527},[376,2733,583],{"class":523},[376,2735,2736],{"class":378,"line":422},[376,2737,786],{"class":527},[462,2739,2741],{"id":2740},"route-filtering","Route Filtering",[303,2743,2744,2745,350,2748,2751],{},"Control which routes are logged with ",[307,2746,2747],{},"include",[307,2749,2750],{},"exclude"," patterns:",[366,2753,2755],{"className":506,"code":2754,"filename":607,"language":509,"meta":372,"style":372},"export const middleware: Route.MiddlewareFunction[] = [\n  evlog({\n    include: ['\u002Fapi\u002F**'],\n    exclude: ['\u002F_internal\u002F**', '\u002Fhealth'],\n    routes: {\n      '\u002Fapi\u002Fauth\u002F**': { service: 'auth-service' },\n      '\u002Fapi\u002Fpayment\u002F**': { service: 'payment-service' },\n    },\n  }),\n]\n",[307,2756,2757,2779,2787,2809,2838,2847,2874,2900,2904,2912],{"__ignoreMap":372},[376,2758,2759,2761,2763,2765,2767,2769,2771,2773,2775,2777],{"class":378,"line":379},[376,2760,552],{"class":516},[376,2762,748],{"class":747},[376,2764,751],{"class":527},[376,2766,567],{"class":523},[376,2768,756],{"class":482},[376,2770,759],{"class":523},[376,2772,762],{"class":482},[376,2774,765],{"class":527},[376,2776,768],{"class":523},[376,2778,771],{"class":527},[376,2780,2781,2783,2785],{"class":378,"line":385},[376,2782,776],{"class":697},[376,2784,701],{"class":527},[376,2786,704],{"class":523},[376,2788,2789,2792,2794,2797,2799,2802,2804,2807],{"class":378,"line":392},[376,2790,2791],{"class":563},"    include",[376,2793,567],{"class":523},[376,2795,2796],{"class":527}," [",[376,2798,726],{"class":523},[376,2800,2801],{"class":486},"\u002Fapi\u002F**",[376,2803,726],{"class":523},[376,2805,2806],{"class":527},"]",[376,2808,583],{"class":523},[376,2810,2811,2814,2816,2818,2820,2823,2825,2827,2829,2832,2834,2836],{"class":378,"line":398},[376,2812,2813],{"class":563},"    exclude",[376,2815,567],{"class":523},[376,2817,2796],{"class":527},[376,2819,726],{"class":523},[376,2821,2822],{"class":486},"\u002F_internal\u002F**",[376,2824,726],{"class":523},[376,2826,621],{"class":523},[376,2828,537],{"class":523},[376,2830,2831],{"class":486},"\u002Fhealth",[376,2833,726],{"class":523},[376,2835,2806],{"class":527},[376,2837,583],{"class":523},[376,2839,2840,2843,2845],{"class":378,"line":404},[376,2841,2842],{"class":563},"    routes",[376,2844,567],{"class":523},[376,2846,558],{"class":523},[376,2848,2849,2852,2855,2857,2859,2861,2863,2865,2867,2870,2872],{"class":378,"line":410},[376,2850,2851],{"class":523},"      '",[376,2853,2854],{"class":563},"\u002Fapi\u002Fauth\u002F**",[376,2856,726],{"class":523},[376,2858,567],{"class":523},[376,2860,524],{"class":523},[376,2862,716],{"class":563},[376,2864,567],{"class":523},[376,2866,537],{"class":523},[376,2868,2869],{"class":486},"auth-service",[376,2871,726],{"class":523},[376,2873,729],{"class":523},[376,2875,2876,2878,2881,2883,2885,2887,2889,2891,2893,2896,2898],{"class":378,"line":416},[376,2877,2851],{"class":523},[376,2879,2880],{"class":563},"\u002Fapi\u002Fpayment\u002F**",[376,2882,726],{"class":523},[376,2884,567],{"class":523},[376,2886,524],{"class":523},[376,2888,716],{"class":563},[376,2890,567],{"class":523},[376,2892,537],{"class":523},[376,2894,2895],{"class":486},"payment-service",[376,2897,726],{"class":523},[376,2899,729],{"class":523},[376,2901,2902],{"class":378,"line":422},[376,2903,2358],{"class":523},[376,2905,2906,2908,2910],{"class":378,"line":428},[376,2907,2087],{"class":523},[376,2909,1018],{"class":527},[376,2911,583],{"class":523},[376,2913,2914],{"class":378,"line":434},[376,2915,786],{"class":527},[462,2917,2919],{"id":2918},"run-locally","Run Locally",[366,2921,2923],{"className":472,"code":2922,"filename":474,"language":475,"meta":372,"style":372},"git clone https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog.git\ncd evlog\nbun install\nbun run example:react-router\n",[307,2924,2925,2936,2944,2951],{"__ignoreMap":372},[376,2926,2927,2930,2933],{"class":378,"line":379},[376,2928,2929],{"class":482},"git",[376,2931,2932],{"class":486}," clone",[376,2934,2935],{"class":486}," https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog.git\n",[376,2937,2938,2941],{"class":378,"line":385},[376,2939,2940],{"class":697},"cd",[376,2942,2943],{"class":486}," evlog\n",[376,2945,2946,2948],{"class":378,"line":392},[376,2947,483],{"class":482},[376,2949,2950],{"class":486}," install\n",[376,2952,2953,2955,2958],{"class":378,"line":398},[376,2954,483],{"class":482},[376,2956,2957],{"class":486}," run",[376,2959,2960],{"class":486}," example:react-router\n",[303,2962,2963,2964,2968],{},"Open ",[325,2965,2966],{"href":2966,"rel":2967},"http:\u002F\u002Flocalhost:5173",[329]," to explore the interactive test UI.",[2970,2971,2972],"card-group",{},[2973,2974,2978],"card",{"icon":2975,"title":2976,"to":2977},"i-simple-icons-github","Source Code","https:\u002F\u002Fgithub.com\u002Fhugorcd\u002Fevlog\u002Ftree\u002Fmain\u002Fexamples\u002Freact-router","Browse the complete React Router example source on GitHub.",[462,2980,2982],{"id":2981},"next-steps","Next Steps",[2984,2985,2986,2992,2997,3002],"ul",{},[2987,2988,2989,2991],"li",{},[325,2990,46],{"href":47},": Design comprehensive events with context layering",[2987,2993,2994,2996],{},[325,2995,204],{"href":209},": Send logs to Axiom, Sentry, PostHog, and more",[2987,2998,2999,3001],{},[325,3000,86],{"href":87},": Control log volume with head and tail sampling",[2987,3003,3004,3006,3007,336,3009,340,3011,3013],{},[325,3005,51],{"href":52},": Throw errors with ",[307,3008,1848],{},[307,3010,1851],{},[307,3012,1854],{}," fields",[3015,3016,3017],"style",{},"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);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":372,"searchDepth":385,"depth":385,"links":3019},[3020,3026,3027,3028,3029,3030,3033,3034,3035,3036],{"id":464,"depth":385,"text":20,"children":3021},[3022,3023,3024,3025],{"id":468,"depth":392,"text":469},{"id":502,"depth":392,"text":503},{"id":602,"depth":392,"text":603},{"id":956,"depth":392,"text":957},{"id":1128,"depth":385,"text":46},{"id":1517,"depth":385,"text":317},{"id":1837,"depth":385,"text":1838},{"id":2165,"depth":385,"text":81},{"id":2178,"depth":385,"text":2179,"children":3031},[3032],{"id":2373,"depth":392,"text":2374},{"id":2606,"depth":385,"text":2607},{"id":2740,"depth":385,"text":2741},{"id":2918,"depth":385,"text":2919},{"id":2981,"depth":385,"text":2982},"Automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in React Router applications.","md",[3040],{"label":2976,"icon":2975,"to":2977,"color":3041,"variant":3042},"neutral","subtle",{},{"title":175,"icon":178},{"title":175,"description":3037},"uyow_XiJlPczVWGRzm5GYnDi6_7p779SWO6FtxwNR_o",[3048,3050],{"title":170,"path":171,"stem":172,"description":3049,"icon":173,"children":-1},"Automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in Elysia applications.",{"title":180,"path":181,"stem":182,"description":3051,"icon":183,"children":-1},"Wide events, structured errors, and logging in Cloudflare Workers and Durable Objects.",1776280157566]