[{"data":1,"prerenderedAt":2420},["ShallowReactive",2],{"navigation_docs":3,"-frameworks-tanstack-start":219,"-frameworks-tanstack-start-surround":2415},[4,30,105,139,188,205],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Getting Started","/getting-started","1.getting-started",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","/getting-started/introduction","1.getting-started/1.introduction","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Installation","/getting-started/installation","1.getting-started/2.installation","i-lucide-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","/getting-started/quick-start","1.getting-started/3.quick-start","i-lucide-zap",{"title":25,"path":26,"stem":27,"icon":28},"Agent Skills","/getting-started/agent-skills","1.getting-started/4.agent-skills","i-lucide-sparkles",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Frameworks","/frameworks","2.frameworks",[35,40,45,50,55,60,65,70,75,80,85,90,95,100],{"title":36,"path":37,"stem":38,"icon":39},"Overview","/frameworks/overview","2.frameworks/00.overview","i-lucide-layout-grid",{"title":41,"path":42,"stem":43,"icon":44},"Nuxt","/frameworks/nuxt","2.frameworks/01.nuxt","i-simple-icons-nuxtdotjs",{"title":46,"path":47,"stem":48,"icon":49},"Next.js","/frameworks/nextjs","2.frameworks/02.nextjs","i-simple-icons-nextdotjs",{"title":51,"path":52,"stem":53,"icon":54},"SvelteKit","/frameworks/sveltekit","2.frameworks/03.sveltekit","i-simple-icons-svelte",{"title":56,"path":57,"stem":58,"icon":59},"Nitro","/frameworks/nitro","2.frameworks/04.nitro","i-custom-nitro",{"title":61,"path":62,"stem":63,"icon":64},"TanStack Start","/frameworks/tanstack-start","2.frameworks/05.tanstack-start","i-custom-tanstack",{"title":66,"path":67,"stem":68,"icon":69},"NestJS","/frameworks/nestjs","2.frameworks/06.nestjs","i-simple-icons-nestjs",{"title":71,"path":72,"stem":73,"icon":74},"Express","/frameworks/express","2.frameworks/07.express","i-simple-icons-express",{"title":76,"path":77,"stem":78,"icon":79},"Hono","/frameworks/hono","2.frameworks/08.hono","i-simple-icons-hono",{"title":81,"path":82,"stem":83,"icon":84},"Fastify","/frameworks/fastify","2.frameworks/09.fastify","i-simple-icons-fastify",{"title":86,"path":87,"stem":88,"icon":89},"Elysia","/frameworks/elysia","2.frameworks/10.elysia","i-custom-elysia",{"title":91,"path":92,"stem":93,"icon":94},"Cloudflare Workers","/frameworks/cloudflare-workers","2.frameworks/11.cloudflare-workers","i-simple-icons-cloudflare",{"title":96,"path":97,"stem":98,"icon":99},"Standalone","/frameworks/standalone","2.frameworks/12.standalone","i-simple-icons-typescript",{"title":101,"path":102,"stem":103,"icon":104},"Astro","/frameworks/astro","2.frameworks/13.astro","i-simple-icons-astro",{"title":106,"path":107,"stem":108,"children":109,"page":29},"Core Concepts","/core-concepts","3.core-concepts",[110,115,120,125,129,134],{"title":111,"path":112,"stem":113,"icon":114},"Wide Events","/core-concepts/wide-events","3.core-concepts/1.wide-events","i-lucide-layers",{"title":116,"path":117,"stem":118,"icon":119},"Structured Errors","/core-concepts/structured-errors","3.core-concepts/2.structured-errors","i-lucide-shield-alert",{"title":121,"path":122,"stem":123,"icon":124},"Best Practices","/core-concepts/best-practices","3.core-concepts/3.best-practices","i-lucide-shield-check",{"title":126,"path":127,"stem":128,"icon":99},"Typed Fields","/core-concepts/typed-fields","3.core-concepts/4.typed-fields",{"title":130,"path":131,"stem":132,"icon":133},"Sampling","/core-concepts/sampling","3.core-concepts/5.sampling","i-lucide-filter",{"title":135,"path":136,"stem":137,"icon":138},"Client Logging","/core-concepts/client-logging","3.core-concepts/6.client-logging","i-lucide-monitor",{"title":140,"path":141,"stem":142,"children":143,"page":29},"Adapters","/adapters","4.adapters",[144,148,153,158,163,168,173,178,183],{"title":36,"path":145,"stem":146,"icon":147},"/adapters/overview","4.adapters/1.overview","i-custom-plug",{"title":149,"path":150,"stem":151,"icon":152},"Axiom","/adapters/axiom","4.adapters/2.axiom","i-custom-axiom",{"title":154,"path":155,"stem":156,"icon":157},"OTLP","/adapters/otlp","4.adapters/3.otlp","i-simple-icons-opentelemetry",{"title":159,"path":160,"stem":161,"icon":162},"PostHog","/adapters/posthog","4.adapters/4.posthog","i-simple-icons-posthog",{"title":164,"path":165,"stem":166,"icon":167},"Sentry","/adapters/sentry","4.adapters/5.sentry","i-simple-icons-sentry",{"title":169,"path":170,"stem":171,"icon":172},"Better Stack","/adapters/better-stack","4.adapters/6.better-stack","i-simple-icons-betterstack",{"title":174,"path":175,"stem":176,"icon":177},"Custom Adapters","/adapters/custom","4.adapters/7.custom","i-lucide-code",{"title":179,"path":180,"stem":181,"icon":182},"Pipeline","/adapters/pipeline","4.adapters/8.pipeline","i-lucide-workflow",{"title":184,"path":185,"stem":186,"icon":187},"Browser","/adapters/browser","4.adapters/9.browser","i-lucide-globe",{"title":189,"path":190,"stem":191,"children":192,"page":29},"Enrichers","/enrichers","5.enrichers",[193,196,201],{"title":36,"path":194,"stem":195,"icon":28},"/enrichers/overview","5.enrichers/1.overview",{"title":197,"path":198,"stem":199,"icon":200},"Built-in","/enrichers/built-in","5.enrichers/2.built-in","i-lucide-puzzle",{"title":202,"path":203,"stem":204,"icon":177},"Custom","/enrichers/custom","5.enrichers/3.custom",{"title":206,"path":207,"stem":208,"children":209,"page":29},"NuxtHub","/nuxthub","6.nuxthub",[210,214],{"title":36,"path":211,"stem":212,"icon":213},"/nuxthub/overview","6.nuxthub/1.overview","i-lucide-database",{"title":215,"path":216,"stem":217,"icon":218},"Retention","/nuxthub/retention","6.nuxthub/2.retention","i-lucide-clock",{"id":220,"title":61,"body":221,"description":2405,"extension":2406,"links":2407,"meta":2411,"navigation":2412,"path":62,"seo":2413,"stem":63,"__hash__":2414},"docs/2.frameworks/05.tanstack-start.md",{"type":222,"value":223,"toc":2391},"minimark",[224,233,237,244,249,274,281,295,481,492,496,519,659,662,665,679,1043,1046,1117,1128,1132,1146,1678,1681,1757,1761,1767,2004,2008,2015,2138,2313,2323,2327,2368,2377,2387],[225,226,227,228,232],"p",{},"TanStack Start uses Nitro v3 as its server layer, so evlog integrates via the ",[229,230,231],"code",{},"evlog/nitro/v3"," module. The same plugin-based hooks system applies.",[234,235,20],"h2",{"id":236},"quick-start",[225,238,239,240,243],{},"Starting from a TanStack Start project created with ",[229,241,242],{},"npm create @tanstack/start@latest",":",[245,246,248],"h3",{"id":247},"_1-install","1. Install",[250,251,256],"pre",{"className":252,"code":253,"language":254,"meta":255,"style":255},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","bun add evlog\n","bash","",[229,257,258],{"__ignoreMap":255},[259,260,263,267,271],"span",{"class":261,"line":262},"line",1,[259,264,266],{"class":265},"sBMFI","bun",[259,268,270],{"class":269},"sfazB"," add",[259,272,273],{"class":269}," evlog\n",[245,275,277,278],{"id":276},"_2-add-nitroconfigts","2. Add ",[229,279,280],{},"nitro.config.ts",[225,282,283,284,286,287,290,291,294],{},"Create a ",[229,285,280],{}," at the project root to register the evlog module. Your ",[229,288,289],{},"vite.config.ts"," already has the ",[229,292,293],{},"nitro()"," plugin from the CLI — no changes needed there.",[250,296,300],{"className":297,"code":298,"filename":280,"language":299,"meta":255,"style":255},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { defineConfig } from 'nitro'\nimport evlog from 'evlog/nitro/v3'\n\nexport default defineConfig({\n  experimental: {\n    asyncContext: true,\n  },\n  modules: [\n    evlog({\n      env: { service: 'my-app' },\n    }),\n  ],\n})\n","typescript",[229,301,302,331,348,355,373,385,400,406,417,427,453,464,472],{"__ignoreMap":255},[259,303,304,308,312,316,319,322,325,328],{"class":261,"line":262},[259,305,307],{"class":306},"s7zQu","import",[259,309,311],{"class":310},"sMK4o"," {",[259,313,315],{"class":314},"sTEyZ"," defineConfig",[259,317,318],{"class":310}," }",[259,320,321],{"class":306}," from",[259,323,324],{"class":310}," '",[259,326,327],{"class":269},"nitro",[259,329,330],{"class":310},"'\n",[259,332,334,336,339,342,344,346],{"class":261,"line":333},2,[259,335,307],{"class":306},[259,337,338],{"class":314}," evlog ",[259,340,341],{"class":306},"from",[259,343,324],{"class":310},[259,345,231],{"class":269},[259,347,330],{"class":310},[259,349,351],{"class":261,"line":350},3,[259,352,354],{"emptyLinePlaceholder":353},true,"\n",[259,356,358,361,364,367,370],{"class":261,"line":357},4,[259,359,360],{"class":306},"export",[259,362,363],{"class":306}," default",[259,365,315],{"class":366},"s2Zo4",[259,368,369],{"class":314},"(",[259,371,372],{"class":310},"{\n",[259,374,376,380,382],{"class":261,"line":375},5,[259,377,379],{"class":378},"swJcz","  experimental",[259,381,243],{"class":310},[259,383,384],{"class":310}," {\n",[259,386,388,391,393,397],{"class":261,"line":387},6,[259,389,390],{"class":378},"    asyncContext",[259,392,243],{"class":310},[259,394,396],{"class":395},"sfNiH"," true",[259,398,399],{"class":310},",\n",[259,401,403],{"class":261,"line":402},7,[259,404,405],{"class":310},"  },\n",[259,407,409,412,414],{"class":261,"line":408},8,[259,410,411],{"class":378},"  modules",[259,413,243],{"class":310},[259,415,416],{"class":314}," [\n",[259,418,420,423,425],{"class":261,"line":419},9,[259,421,422],{"class":366},"    evlog",[259,424,369],{"class":314},[259,426,372],{"class":310},[259,428,430,433,435,437,440,442,444,447,450],{"class":261,"line":429},10,[259,431,432],{"class":378},"      env",[259,434,243],{"class":310},[259,436,311],{"class":310},[259,438,439],{"class":378}," service",[259,441,243],{"class":310},[259,443,324],{"class":310},[259,445,446],{"class":269},"my-app",[259,448,449],{"class":310},"'",[259,451,452],{"class":310}," },\n",[259,454,456,459,462],{"class":261,"line":455},11,[259,457,458],{"class":310},"    }",[259,460,461],{"class":314},")",[259,463,399],{"class":310},[259,465,467,470],{"class":261,"line":466},12,[259,468,469],{"class":314},"  ]",[259,471,399],{"class":310},[259,473,475,478],{"class":261,"line":474},13,[259,476,477],{"class":310},"}",[259,479,480],{"class":314},")\n",[225,482,483,484,487,488,491],{},"Enabling ",[229,485,486],{},"asyncContext"," lets you access the request-scoped logger from anywhere in the call stack via ",[229,489,490],{},"useRequest()",".",[245,493,495],{"id":494},"_3-error-handling-middleware","3. Error handling middleware",[225,497,498,499,502,503,506,507,510,511,514,515,518],{},"TanStack Start has its own error handling layer that runs before Nitro's. To ensure ",[229,500,501],{},"throw createError()"," returns a proper JSON response with ",[229,504,505],{},"why",", ",[229,508,509],{},"fix",", and ",[229,512,513],{},"link",", add the ",[229,516,517],{},"evlogErrorHandler"," middleware to your root route:",[250,520,523],{"className":297,"code":521,"filename":522,"language":299,"meta":255,"style":255},"import { createRootRoute } from '@tanstack/react-router'\nimport { createMiddleware } from '@tanstack/react-start'\nimport { evlogErrorHandler } from 'evlog/nitro/v3'\n\nexport const Route = createRootRoute({\n  server: {\n    middleware: [createMiddleware().server(evlogErrorHandler)],\n  },\n  // ... head, shellComponent, etc.\n})\n","src/routes/__root.tsx",[229,524,525,545,565,584,588,608,617,643,647,653],{"__ignoreMap":255},[259,526,527,529,531,534,536,538,540,543],{"class":261,"line":262},[259,528,307],{"class":306},[259,530,311],{"class":310},[259,532,533],{"class":314}," createRootRoute",[259,535,318],{"class":310},[259,537,321],{"class":306},[259,539,324],{"class":310},[259,541,542],{"class":269},"@tanstack/react-router",[259,544,330],{"class":310},[259,546,547,549,551,554,556,558,560,563],{"class":261,"line":333},[259,548,307],{"class":306},[259,550,311],{"class":310},[259,552,553],{"class":314}," createMiddleware",[259,555,318],{"class":310},[259,557,321],{"class":306},[259,559,324],{"class":310},[259,561,562],{"class":269},"@tanstack/react-start",[259,564,330],{"class":310},[259,566,567,569,571,574,576,578,580,582],{"class":261,"line":350},[259,568,307],{"class":306},[259,570,311],{"class":310},[259,572,573],{"class":314}," evlogErrorHandler",[259,575,318],{"class":310},[259,577,321],{"class":306},[259,579,324],{"class":310},[259,581,231],{"class":269},[259,583,330],{"class":310},[259,585,586],{"class":261,"line":357},[259,587,354],{"emptyLinePlaceholder":353},[259,589,590,592,596,599,602,604,606],{"class":261,"line":375},[259,591,360],{"class":306},[259,593,595],{"class":594},"spNyl"," const",[259,597,598],{"class":314}," Route ",[259,600,601],{"class":310},"=",[259,603,533],{"class":366},[259,605,369],{"class":314},[259,607,372],{"class":310},[259,609,610,613,615],{"class":261,"line":387},[259,611,612],{"class":378},"  server",[259,614,243],{"class":310},[259,616,384],{"class":310},[259,618,619,622,624,627,630,633,635,638,641],{"class":261,"line":402},[259,620,621],{"class":378},"    middleware",[259,623,243],{"class":310},[259,625,626],{"class":314}," [",[259,628,629],{"class":366},"createMiddleware",[259,631,632],{"class":314},"()",[259,634,491],{"class":310},[259,636,637],{"class":366},"server",[259,639,640],{"class":314},"(evlogErrorHandler)]",[259,642,399],{"class":310},[259,644,645],{"class":261,"line":408},[259,646,405],{"class":310},[259,648,649],{"class":261,"line":419},[259,650,652],{"class":651},"sHwdD","  // ... head, shellComponent, etc.\n",[259,654,655,657],{"class":261,"line":429},[259,656,477],{"class":310},[259,658,480],{"class":314},[225,660,661],{},"That's it. evlog automatically captures every request as a wide event with method, path, status, and duration.",[234,663,111],{"id":664},"wide-events",[225,666,667,668,671,672,674,675,678],{},"With ",[229,669,670],{},"experimental.asyncContext: true",", use ",[229,673,490],{}," from ",[229,676,677],{},"nitro/context"," to access the request-scoped logger and build up context progressively:",[250,680,683],{"className":297,"code":681,"filename":682,"language":299,"meta":255,"style":255},"import { createFileRoute } from '@tanstack/react-router'\nimport { useRequest } from 'nitro/context'\nimport type { RequestLogger } from 'evlog'\n\nexport const Route = createFileRoute('/api/hello')({\n  server: {\n    handlers: {\n      GET: async () => {\n        const req = useRequest()\n        const log = req.context.log as RequestLogger\n\n        log.set({ user: { id: 'user_123', plan: 'pro' } })\n        log.set({ action: 'fetch_profile' })\n        log.set({ cache: { hit: true, ttl: 3600 } })\n\n        return Response.json({ ok: true })\n      },\n    },\n  },\n})\n","src/routes/api/hello.ts",[229,684,685,704,723,746,750,776,784,793,811,827,854,858,913,941,985,990,1019,1025,1031,1036],{"__ignoreMap":255},[259,686,687,689,691,694,696,698,700,702],{"class":261,"line":262},[259,688,307],{"class":306},[259,690,311],{"class":310},[259,692,693],{"class":314}," createFileRoute",[259,695,318],{"class":310},[259,697,321],{"class":306},[259,699,324],{"class":310},[259,701,542],{"class":269},[259,703,330],{"class":310},[259,705,706,708,710,713,715,717,719,721],{"class":261,"line":333},[259,707,307],{"class":306},[259,709,311],{"class":310},[259,711,712],{"class":314}," useRequest",[259,714,318],{"class":310},[259,716,321],{"class":306},[259,718,324],{"class":310},[259,720,677],{"class":269},[259,722,330],{"class":310},[259,724,725,727,730,732,735,737,739,741,744],{"class":261,"line":350},[259,726,307],{"class":306},[259,728,729],{"class":306}," type",[259,731,311],{"class":310},[259,733,734],{"class":314}," RequestLogger",[259,736,318],{"class":310},[259,738,321],{"class":306},[259,740,324],{"class":310},[259,742,743],{"class":269},"evlog",[259,745,330],{"class":310},[259,747,748],{"class":261,"line":357},[259,749,354],{"emptyLinePlaceholder":353},[259,751,752,754,756,758,760,762,764,766,769,771,774],{"class":261,"line":375},[259,753,360],{"class":306},[259,755,595],{"class":594},[259,757,598],{"class":314},[259,759,601],{"class":310},[259,761,693],{"class":366},[259,763,369],{"class":314},[259,765,449],{"class":310},[259,767,768],{"class":269},"/api/hello",[259,770,449],{"class":310},[259,772,773],{"class":314},")(",[259,775,372],{"class":310},[259,777,778,780,782],{"class":261,"line":387},[259,779,612],{"class":378},[259,781,243],{"class":310},[259,783,384],{"class":310},[259,785,786,789,791],{"class":261,"line":402},[259,787,788],{"class":378},"    handlers",[259,790,243],{"class":310},[259,792,384],{"class":310},[259,794,795,798,800,803,806,809],{"class":261,"line":408},[259,796,797],{"class":366},"      GET",[259,799,243],{"class":310},[259,801,802],{"class":594}," async",[259,804,805],{"class":310}," ()",[259,807,808],{"class":594}," =>",[259,810,384],{"class":310},[259,812,813,816,819,822,824],{"class":261,"line":419},[259,814,815],{"class":594},"        const",[259,817,818],{"class":314}," req",[259,820,821],{"class":310}," =",[259,823,712],{"class":366},[259,825,826],{"class":378},"()\n",[259,828,829,831,834,836,838,840,843,845,848,851],{"class":261,"line":429},[259,830,815],{"class":594},[259,832,833],{"class":314}," log",[259,835,821],{"class":310},[259,837,818],{"class":314},[259,839,491],{"class":310},[259,841,842],{"class":314},"context",[259,844,491],{"class":310},[259,846,847],{"class":314},"log",[259,849,850],{"class":306}," as",[259,852,853],{"class":265}," RequestLogger\n",[259,855,856],{"class":261,"line":455},[259,857,354],{"emptyLinePlaceholder":353},[259,859,860,863,865,868,870,873,876,878,880,883,885,887,890,892,895,898,900,902,905,907,909,911],{"class":261,"line":466},[259,861,862],{"class":314},"        log",[259,864,491],{"class":310},[259,866,867],{"class":366},"set",[259,869,369],{"class":378},[259,871,872],{"class":310},"{",[259,874,875],{"class":378}," user",[259,877,243],{"class":310},[259,879,311],{"class":310},[259,881,882],{"class":378}," id",[259,884,243],{"class":310},[259,886,324],{"class":310},[259,888,889],{"class":269},"user_123",[259,891,449],{"class":310},[259,893,894],{"class":310},",",[259,896,897],{"class":378}," plan",[259,899,243],{"class":310},[259,901,324],{"class":310},[259,903,904],{"class":269},"pro",[259,906,449],{"class":310},[259,908,318],{"class":310},[259,910,318],{"class":310},[259,912,480],{"class":378},[259,914,915,917,919,921,923,925,928,930,932,935,937,939],{"class":261,"line":474},[259,916,862],{"class":314},[259,918,491],{"class":310},[259,920,867],{"class":366},[259,922,369],{"class":378},[259,924,872],{"class":310},[259,926,927],{"class":378}," action",[259,929,243],{"class":310},[259,931,324],{"class":310},[259,933,934],{"class":269},"fetch_profile",[259,936,449],{"class":310},[259,938,318],{"class":310},[259,940,480],{"class":378},[259,942,944,946,948,950,952,954,957,959,961,964,966,968,970,973,975,979,981,983],{"class":261,"line":943},14,[259,945,862],{"class":314},[259,947,491],{"class":310},[259,949,867],{"class":366},[259,951,369],{"class":378},[259,953,872],{"class":310},[259,955,956],{"class":378}," cache",[259,958,243],{"class":310},[259,960,311],{"class":310},[259,962,963],{"class":378}," hit",[259,965,243],{"class":310},[259,967,396],{"class":395},[259,969,894],{"class":310},[259,971,972],{"class":378}," ttl",[259,974,243],{"class":310},[259,976,978],{"class":977},"sbssI"," 3600",[259,980,318],{"class":310},[259,982,318],{"class":310},[259,984,480],{"class":378},[259,986,988],{"class":261,"line":987},15,[259,989,354],{"emptyLinePlaceholder":353},[259,991,993,996,999,1001,1004,1006,1008,1011,1013,1015,1017],{"class":261,"line":992},16,[259,994,995],{"class":306},"        return",[259,997,998],{"class":314}," Response",[259,1000,491],{"class":310},[259,1002,1003],{"class":366},"json",[259,1005,369],{"class":378},[259,1007,872],{"class":310},[259,1009,1010],{"class":378}," ok",[259,1012,243],{"class":310},[259,1014,396],{"class":395},[259,1016,318],{"class":310},[259,1018,480],{"class":378},[259,1020,1022],{"class":261,"line":1021},17,[259,1023,1024],{"class":310},"      },\n",[259,1026,1028],{"class":261,"line":1027},18,[259,1029,1030],{"class":310},"    },\n",[259,1032,1034],{"class":261,"line":1033},19,[259,1035,405],{"class":310},[259,1037,1039,1041],{"class":261,"line":1038},20,[259,1040,477],{"class":310},[259,1042,480],{"class":314},[225,1044,1045],{},"All fields are merged into a single wide event emitted when the request completes:",[250,1047,1050],{"className":252,"code":1048,"filename":1049,"language":254,"meta":255,"style":255},"14:58:15 INFO [my-app] GET /api/hello 200 in 52ms\n  ├─ cache: hit=true ttl=3600\n  ├─ action: fetch_profile\n  ├─ user: id=user_123 plan=pro\n  └─ requestId: 4a8ff3a8-...\n","Terminal output",[229,1051,1052,1063,1083,1093,1106],{"__ignoreMap":255},[259,1053,1054,1057,1060],{"class":261,"line":262},[259,1055,1056],{"class":265},"14:58:15",[259,1058,1059],{"class":269}," INFO",[259,1061,1062],{"class":314}," [my-app] GET /api/hello 200 in 52ms\n",[259,1064,1065,1068,1071,1074,1077,1080],{"class":261,"line":333},[259,1066,1067],{"class":265},"  ├─",[259,1069,1070],{"class":269}," cache:",[259,1072,1073],{"class":269}," hit=",[259,1075,1076],{"class":310},"true",[259,1078,1079],{"class":269}," ttl=",[259,1081,1082],{"class":977},"3600\n",[259,1084,1085,1087,1090],{"class":261,"line":350},[259,1086,1067],{"class":265},[259,1088,1089],{"class":269}," action:",[259,1091,1092],{"class":269}," fetch_profile\n",[259,1094,1095,1097,1100,1103],{"class":261,"line":357},[259,1096,1067],{"class":265},[259,1098,1099],{"class":269}," user:",[259,1101,1102],{"class":269}," id=user_123",[259,1104,1105],{"class":269}," plan=pro\n",[259,1107,1108,1111,1114],{"class":261,"line":375},[259,1109,1110],{"class":265},"  └─",[259,1112,1113],{"class":269}," requestId:",[259,1115,1116],{"class":269}," 4a8ff3a8-...\n",[1118,1119,1121,1123,1124,1127],"callout",{"color":1120,"icon":13},"info",[229,1122,490],{}," is an experimental Nitro v3 feature powered by ",[229,1125,1126],{},"AsyncLocalStorage",". It works on Node.js and Bun runtimes.",[234,1129,1131],{"id":1130},"error-handling","Error Handling",[225,1133,1134,1135,1138,1139,506,1141,510,1143,1145],{},"Use ",[229,1136,1137],{},"createError"," for structured errors with ",[229,1140,505],{},[229,1142,509],{},[229,1144,513],{}," fields:",[250,1147,1150],{"className":297,"code":1148,"filename":1149,"language":299,"meta":255,"style":255},"import { createFileRoute } from '@tanstack/react-router'\nimport { useRequest } from 'nitro/context'\nimport { createError } from 'evlog'\nimport type { RequestLogger } from 'evlog'\n\nexport const Route = createFileRoute('/api/checkout')({\n  server: {\n    handlers: {\n      POST: async ({ request }) => {\n        const req = useRequest()\n        const log = req.context.log as RequestLogger\n        const body = await request.json()\n\n        log.set({ user: { id: body.userId, plan: body.plan } })\n        log.set({ cart: { items: body.items, total: body.total } })\n\n        const result = await chargeCard(body)\n\n        if (!result.success) {\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://docs.example.com/payments/declined',\n          })\n        }\n\n        return Response.json({ success: true, orderId: result.orderId })\n      },\n    },\n  },\n})\n","src/routes/api/checkout.ts",[229,1151,1152,1170,1188,1207,1227,1231,1256,1264,1272,1295,1307,1329,1349,1353,1401,1452,1456,1477,1481,1505,1516,1533,1546,1563,1580,1597,1605,1611,1616,1656,1661,1666,1671],{"__ignoreMap":255},[259,1153,1154,1156,1158,1160,1162,1164,1166,1168],{"class":261,"line":262},[259,1155,307],{"class":306},[259,1157,311],{"class":310},[259,1159,693],{"class":314},[259,1161,318],{"class":310},[259,1163,321],{"class":306},[259,1165,324],{"class":310},[259,1167,542],{"class":269},[259,1169,330],{"class":310},[259,1171,1172,1174,1176,1178,1180,1182,1184,1186],{"class":261,"line":333},[259,1173,307],{"class":306},[259,1175,311],{"class":310},[259,1177,712],{"class":314},[259,1179,318],{"class":310},[259,1181,321],{"class":306},[259,1183,324],{"class":310},[259,1185,677],{"class":269},[259,1187,330],{"class":310},[259,1189,1190,1192,1194,1197,1199,1201,1203,1205],{"class":261,"line":350},[259,1191,307],{"class":306},[259,1193,311],{"class":310},[259,1195,1196],{"class":314}," createError",[259,1198,318],{"class":310},[259,1200,321],{"class":306},[259,1202,324],{"class":310},[259,1204,743],{"class":269},[259,1206,330],{"class":310},[259,1208,1209,1211,1213,1215,1217,1219,1221,1223,1225],{"class":261,"line":357},[259,1210,307],{"class":306},[259,1212,729],{"class":306},[259,1214,311],{"class":310},[259,1216,734],{"class":314},[259,1218,318],{"class":310},[259,1220,321],{"class":306},[259,1222,324],{"class":310},[259,1224,743],{"class":269},[259,1226,330],{"class":310},[259,1228,1229],{"class":261,"line":375},[259,1230,354],{"emptyLinePlaceholder":353},[259,1232,1233,1235,1237,1239,1241,1243,1245,1247,1250,1252,1254],{"class":261,"line":387},[259,1234,360],{"class":306},[259,1236,595],{"class":594},[259,1238,598],{"class":314},[259,1240,601],{"class":310},[259,1242,693],{"class":366},[259,1244,369],{"class":314},[259,1246,449],{"class":310},[259,1248,1249],{"class":269},"/api/checkout",[259,1251,449],{"class":310},[259,1253,773],{"class":314},[259,1255,372],{"class":310},[259,1257,1258,1260,1262],{"class":261,"line":402},[259,1259,612],{"class":378},[259,1261,243],{"class":310},[259,1263,384],{"class":310},[259,1265,1266,1268,1270],{"class":261,"line":408},[259,1267,788],{"class":378},[259,1269,243],{"class":310},[259,1271,384],{"class":310},[259,1273,1274,1277,1279,1281,1284,1288,1291,1293],{"class":261,"line":419},[259,1275,1276],{"class":366},"      POST",[259,1278,243],{"class":310},[259,1280,802],{"class":594},[259,1282,1283],{"class":310}," ({",[259,1285,1287],{"class":1286},"sHdIc"," request",[259,1289,1290],{"class":310}," })",[259,1292,808],{"class":594},[259,1294,384],{"class":310},[259,1296,1297,1299,1301,1303,1305],{"class":261,"line":429},[259,1298,815],{"class":594},[259,1300,818],{"class":314},[259,1302,821],{"class":310},[259,1304,712],{"class":366},[259,1306,826],{"class":378},[259,1308,1309,1311,1313,1315,1317,1319,1321,1323,1325,1327],{"class":261,"line":455},[259,1310,815],{"class":594},[259,1312,833],{"class":314},[259,1314,821],{"class":310},[259,1316,818],{"class":314},[259,1318,491],{"class":310},[259,1320,842],{"class":314},[259,1322,491],{"class":310},[259,1324,847],{"class":314},[259,1326,850],{"class":306},[259,1328,853],{"class":265},[259,1330,1331,1333,1336,1338,1341,1343,1345,1347],{"class":261,"line":466},[259,1332,815],{"class":594},[259,1334,1335],{"class":314}," body",[259,1337,821],{"class":310},[259,1339,1340],{"class":306}," await",[259,1342,1287],{"class":314},[259,1344,491],{"class":310},[259,1346,1003],{"class":366},[259,1348,826],{"class":378},[259,1350,1351],{"class":261,"line":474},[259,1352,354],{"emptyLinePlaceholder":353},[259,1354,1355,1357,1359,1361,1363,1365,1367,1369,1371,1373,1375,1377,1379,1382,1384,1386,1388,1390,1392,1395,1397,1399],{"class":261,"line":943},[259,1356,862],{"class":314},[259,1358,491],{"class":310},[259,1360,867],{"class":366},[259,1362,369],{"class":378},[259,1364,872],{"class":310},[259,1366,875],{"class":378},[259,1368,243],{"class":310},[259,1370,311],{"class":310},[259,1372,882],{"class":378},[259,1374,243],{"class":310},[259,1376,1335],{"class":314},[259,1378,491],{"class":310},[259,1380,1381],{"class":314},"userId",[259,1383,894],{"class":310},[259,1385,897],{"class":378},[259,1387,243],{"class":310},[259,1389,1335],{"class":314},[259,1391,491],{"class":310},[259,1393,1394],{"class":314},"plan",[259,1396,318],{"class":310},[259,1398,318],{"class":310},[259,1400,480],{"class":378},[259,1402,1403,1405,1407,1409,1411,1413,1416,1418,1420,1423,1425,1427,1429,1432,1434,1437,1439,1441,1443,1446,1448,1450],{"class":261,"line":987},[259,1404,862],{"class":314},[259,1406,491],{"class":310},[259,1408,867],{"class":366},[259,1410,369],{"class":378},[259,1412,872],{"class":310},[259,1414,1415],{"class":378}," cart",[259,1417,243],{"class":310},[259,1419,311],{"class":310},[259,1421,1422],{"class":378}," items",[259,1424,243],{"class":310},[259,1426,1335],{"class":314},[259,1428,491],{"class":310},[259,1430,1431],{"class":314},"items",[259,1433,894],{"class":310},[259,1435,1436],{"class":378}," total",[259,1438,243],{"class":310},[259,1440,1335],{"class":314},[259,1442,491],{"class":310},[259,1444,1445],{"class":314},"total",[259,1447,318],{"class":310},[259,1449,318],{"class":310},[259,1451,480],{"class":378},[259,1453,1454],{"class":261,"line":992},[259,1455,354],{"emptyLinePlaceholder":353},[259,1457,1458,1460,1463,1465,1467,1470,1472,1475],{"class":261,"line":1021},[259,1459,815],{"class":594},[259,1461,1462],{"class":314}," result",[259,1464,821],{"class":310},[259,1466,1340],{"class":306},[259,1468,1469],{"class":366}," chargeCard",[259,1471,369],{"class":378},[259,1473,1474],{"class":314},"body",[259,1476,480],{"class":378},[259,1478,1479],{"class":261,"line":1027},[259,1480,354],{"emptyLinePlaceholder":353},[259,1482,1483,1486,1489,1492,1495,1497,1500,1503],{"class":261,"line":1033},[259,1484,1485],{"class":306},"        if",[259,1487,1488],{"class":378}," (",[259,1490,1491],{"class":310},"!",[259,1493,1494],{"class":314},"result",[259,1496,491],{"class":310},[259,1498,1499],{"class":314},"success",[259,1501,1502],{"class":378},") ",[259,1504,372],{"class":310},[259,1506,1507,1510,1512,1514],{"class":261,"line":1038},[259,1508,1509],{"class":306},"          throw",[259,1511,1196],{"class":366},[259,1513,369],{"class":378},[259,1515,372],{"class":310},[259,1517,1519,1522,1524,1526,1529,1531],{"class":261,"line":1518},21,[259,1520,1521],{"class":378},"            message",[259,1523,243],{"class":310},[259,1525,324],{"class":310},[259,1527,1528],{"class":269},"Payment failed",[259,1530,449],{"class":310},[259,1532,399],{"class":310},[259,1534,1536,1539,1541,1544],{"class":261,"line":1535},22,[259,1537,1538],{"class":378},"            status",[259,1540,243],{"class":310},[259,1542,1543],{"class":977}," 402",[259,1545,399],{"class":310},[259,1547,1549,1552,1554,1556,1559,1561],{"class":261,"line":1548},23,[259,1550,1551],{"class":378},"            why",[259,1553,243],{"class":310},[259,1555,324],{"class":310},[259,1557,1558],{"class":269},"Card declined by issuer",[259,1560,449],{"class":310},[259,1562,399],{"class":310},[259,1564,1566,1569,1571,1573,1576,1578],{"class":261,"line":1565},24,[259,1567,1568],{"class":378},"            fix",[259,1570,243],{"class":310},[259,1572,324],{"class":310},[259,1574,1575],{"class":269},"Try a different payment method",[259,1577,449],{"class":310},[259,1579,399],{"class":310},[259,1581,1583,1586,1588,1590,1593,1595],{"class":261,"line":1582},25,[259,1584,1585],{"class":378},"            link",[259,1587,243],{"class":310},[259,1589,324],{"class":310},[259,1591,1592],{"class":269},"https://docs.example.com/payments/declined",[259,1594,449],{"class":310},[259,1596,399],{"class":310},[259,1598,1600,1603],{"class":261,"line":1599},26,[259,1601,1602],{"class":310},"          }",[259,1604,480],{"class":378},[259,1606,1608],{"class":261,"line":1607},27,[259,1609,1610],{"class":310},"        }\n",[259,1612,1614],{"class":261,"line":1613},28,[259,1615,354],{"emptyLinePlaceholder":353},[259,1617,1619,1621,1623,1625,1627,1629,1631,1634,1636,1638,1640,1643,1645,1647,1649,1652,1654],{"class":261,"line":1618},29,[259,1620,995],{"class":306},[259,1622,998],{"class":314},[259,1624,491],{"class":310},[259,1626,1003],{"class":366},[259,1628,369],{"class":378},[259,1630,872],{"class":310},[259,1632,1633],{"class":378}," success",[259,1635,243],{"class":310},[259,1637,396],{"class":395},[259,1639,894],{"class":310},[259,1641,1642],{"class":378}," orderId",[259,1644,243],{"class":310},[259,1646,1462],{"class":314},[259,1648,491],{"class":310},[259,1650,1651],{"class":314},"orderId",[259,1653,318],{"class":310},[259,1655,480],{"class":378},[259,1657,1659],{"class":261,"line":1658},30,[259,1660,1024],{"class":310},[259,1662,1664],{"class":261,"line":1663},31,[259,1665,1030],{"class":310},[259,1667,1669],{"class":261,"line":1668},32,[259,1670,405],{"class":310},[259,1672,1674,1676],{"class":261,"line":1673},33,[259,1675,477],{"class":310},[259,1677,480],{"class":314},[225,1679,1680],{},"The error is captured and logged with both the custom context and structured error fields:",[250,1682,1684],{"className":252,"code":1683,"filename":1049,"language":254,"meta":255,"style":255},"14:58:20 ERROR [my-app] POST /api/checkout 402 in 104ms\n  ├─ error: name=EvlogError message=Payment failed status=402\n  ├─ cart: items=3 total=9999\n  ├─ user: id=user_123 plan=pro\n  └─ requestId: 880a50ac-...\n",[229,1685,1686,1697,1719,1738,1748],{"__ignoreMap":255},[259,1687,1688,1691,1694],{"class":261,"line":262},[259,1689,1690],{"class":265},"14:58:20",[259,1692,1693],{"class":269}," ERROR",[259,1695,1696],{"class":314}," [my-app] POST /api/checkout 402 in 104ms\n",[259,1698,1699,1701,1704,1707,1710,1713,1716],{"class":261,"line":333},[259,1700,1067],{"class":265},[259,1702,1703],{"class":269}," error:",[259,1705,1706],{"class":269}," name=EvlogError",[259,1708,1709],{"class":269}," message=Payment",[259,1711,1712],{"class":269}," failed",[259,1714,1715],{"class":269}," status=",[259,1717,1718],{"class":977},"402\n",[259,1720,1721,1723,1726,1729,1732,1735],{"class":261,"line":350},[259,1722,1067],{"class":265},[259,1724,1725],{"class":269}," cart:",[259,1727,1728],{"class":269}," items=",[259,1730,1731],{"class":977},"3",[259,1733,1734],{"class":269}," total=",[259,1736,1737],{"class":977},"9999\n",[259,1739,1740,1742,1744,1746],{"class":261,"line":357},[259,1741,1067],{"class":265},[259,1743,1099],{"class":269},[259,1745,1102],{"class":269},[259,1747,1105],{"class":269},[259,1749,1750,1752,1754],{"class":261,"line":375},[259,1751,1110],{"class":265},[259,1753,1113],{"class":269},[259,1755,1756],{"class":269}," 880a50ac-...\n",[245,1758,1760],{"id":1759},"parsing-errors-on-the-client","Parsing Errors on the Client",[225,1762,1134,1763,1766],{},[229,1764,1765],{},"parseError"," to extract the structured fields from any error response:",[250,1768,1772],{"className":1769,"code":1770,"language":1771,"meta":255,"style":255},"language-tsx shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { parseError } from 'evlog'\n\ntry {\n  const res = await fetch('/api/checkout', {\n    method: 'POST',\n    body: JSON.stringify({ userId: 'user_123' }),\n  })\n  if (!res.ok) throw { data: await res.json(), status: res.status }\n} catch (error) {\n  const { message, status, why, fix, link } = parseError(error)\n}\n","tsx",[229,1773,1774,1793,1797,1804,1831,1847,1883,1890,1946,1958,1999],{"__ignoreMap":255},[259,1775,1776,1778,1780,1783,1785,1787,1789,1791],{"class":261,"line":262},[259,1777,307],{"class":306},[259,1779,311],{"class":310},[259,1781,1782],{"class":314}," parseError",[259,1784,318],{"class":310},[259,1786,321],{"class":306},[259,1788,324],{"class":310},[259,1790,743],{"class":269},[259,1792,330],{"class":310},[259,1794,1795],{"class":261,"line":333},[259,1796,354],{"emptyLinePlaceholder":353},[259,1798,1799,1802],{"class":261,"line":350},[259,1800,1801],{"class":306},"try",[259,1803,384],{"class":310},[259,1805,1806,1809,1812,1814,1816,1819,1821,1823,1825,1827,1829],{"class":261,"line":357},[259,1807,1808],{"class":594},"  const",[259,1810,1811],{"class":314}," res",[259,1813,821],{"class":310},[259,1815,1340],{"class":306},[259,1817,1818],{"class":366}," fetch",[259,1820,369],{"class":378},[259,1822,449],{"class":310},[259,1824,1249],{"class":269},[259,1826,449],{"class":310},[259,1828,894],{"class":310},[259,1830,384],{"class":310},[259,1832,1833,1836,1838,1840,1843,1845],{"class":261,"line":375},[259,1834,1835],{"class":378},"    method",[259,1837,243],{"class":310},[259,1839,324],{"class":310},[259,1841,1842],{"class":269},"POST",[259,1844,449],{"class":310},[259,1846,399],{"class":310},[259,1848,1849,1852,1854,1857,1859,1862,1864,1866,1869,1871,1873,1875,1877,1879,1881],{"class":261,"line":387},[259,1850,1851],{"class":378},"    body",[259,1853,243],{"class":310},[259,1855,1856],{"class":314}," JSON",[259,1858,491],{"class":310},[259,1860,1861],{"class":366},"stringify",[259,1863,369],{"class":378},[259,1865,872],{"class":310},[259,1867,1868],{"class":378}," userId",[259,1870,243],{"class":310},[259,1872,324],{"class":310},[259,1874,889],{"class":269},[259,1876,449],{"class":310},[259,1878,318],{"class":310},[259,1880,461],{"class":378},[259,1882,399],{"class":310},[259,1884,1885,1888],{"class":261,"line":402},[259,1886,1887],{"class":310},"  }",[259,1889,480],{"class":378},[259,1891,1892,1895,1897,1899,1902,1904,1907,1909,1912,1914,1917,1919,1921,1923,1925,1927,1929,1931,1934,1936,1938,1940,1943],{"class":261,"line":408},[259,1893,1894],{"class":306},"  if",[259,1896,1488],{"class":378},[259,1898,1491],{"class":310},[259,1900,1901],{"class":314},"res",[259,1903,491],{"class":310},[259,1905,1906],{"class":314},"ok",[259,1908,1502],{"class":378},[259,1910,1911],{"class":306},"throw",[259,1913,311],{"class":310},[259,1915,1916],{"class":378}," data",[259,1918,243],{"class":310},[259,1920,1340],{"class":306},[259,1922,1811],{"class":314},[259,1924,491],{"class":310},[259,1926,1003],{"class":366},[259,1928,632],{"class":378},[259,1930,894],{"class":310},[259,1932,1933],{"class":378}," status",[259,1935,243],{"class":310},[259,1937,1811],{"class":314},[259,1939,491],{"class":310},[259,1941,1942],{"class":314},"status",[259,1944,1945],{"class":310}," }\n",[259,1947,1948,1950,1953,1956],{"class":261,"line":419},[259,1949,477],{"class":310},[259,1951,1952],{"class":306}," catch",[259,1954,1955],{"class":314}," (error) ",[259,1957,372],{"class":310},[259,1959,1960,1962,1964,1967,1969,1971,1973,1976,1978,1981,1983,1986,1988,1990,1992,1994,1997],{"class":261,"line":429},[259,1961,1808],{"class":594},[259,1963,311],{"class":310},[259,1965,1966],{"class":314}," message",[259,1968,894],{"class":310},[259,1970,1933],{"class":314},[259,1972,894],{"class":310},[259,1974,1975],{"class":314}," why",[259,1977,894],{"class":310},[259,1979,1980],{"class":314}," fix",[259,1982,894],{"class":310},[259,1984,1985],{"class":314}," link",[259,1987,318],{"class":310},[259,1989,821],{"class":310},[259,1991,1782],{"class":366},[259,1993,369],{"class":378},[259,1995,1996],{"class":314},"error",[259,1998,480],{"class":378},[259,2000,2001],{"class":261,"line":455},[259,2002,2003],{"class":310},"}\n",[234,2005,2007],{"id":2006},"drain-enrichers","Drain & Enrichers",[225,2009,2010,2011,2014],{},"Since TanStack Start uses Nitro v3, configure drains and enrichers via Nitro plugins. Create a ",[229,2012,2013],{},"server/plugins/"," directory and register hooks:",[250,2016,2019],{"className":297,"code":2017,"filename":2018,"language":299,"meta":255,"style":255},"import { definePlugin } from 'nitro'\nimport { createAxiomDrain } from 'evlog/axiom'\n\nexport default definePlugin((nitroApp) => {\n  const axiom = createAxiomDrain()\n\n  nitroApp.hooks.hook('evlog:drain', axiom)\n})\n","server/plugins/evlog-drain.ts",[229,2020,2021,2040,2060,2064,2085,2098,2102,2132],{"__ignoreMap":255},[259,2022,2023,2025,2027,2030,2032,2034,2036,2038],{"class":261,"line":262},[259,2024,307],{"class":306},[259,2026,311],{"class":310},[259,2028,2029],{"class":314}," definePlugin",[259,2031,318],{"class":310},[259,2033,321],{"class":306},[259,2035,324],{"class":310},[259,2037,327],{"class":269},[259,2039,330],{"class":310},[259,2041,2042,2044,2046,2049,2051,2053,2055,2058],{"class":261,"line":333},[259,2043,307],{"class":306},[259,2045,311],{"class":310},[259,2047,2048],{"class":314}," createAxiomDrain",[259,2050,318],{"class":310},[259,2052,321],{"class":306},[259,2054,324],{"class":310},[259,2056,2057],{"class":269},"evlog/axiom",[259,2059,330],{"class":310},[259,2061,2062],{"class":261,"line":350},[259,2063,354],{"emptyLinePlaceholder":353},[259,2065,2066,2068,2070,2072,2074,2076,2079,2081,2083],{"class":261,"line":357},[259,2067,360],{"class":306},[259,2069,363],{"class":306},[259,2071,2029],{"class":366},[259,2073,369],{"class":314},[259,2075,369],{"class":310},[259,2077,2078],{"class":1286},"nitroApp",[259,2080,461],{"class":310},[259,2082,808],{"class":594},[259,2084,384],{"class":310},[259,2086,2087,2089,2092,2094,2096],{"class":261,"line":375},[259,2088,1808],{"class":594},[259,2090,2091],{"class":314}," axiom",[259,2093,821],{"class":310},[259,2095,2048],{"class":366},[259,2097,826],{"class":378},[259,2099,2100],{"class":261,"line":387},[259,2101,354],{"emptyLinePlaceholder":353},[259,2103,2104,2107,2109,2112,2114,2117,2119,2121,2124,2126,2128,2130],{"class":261,"line":402},[259,2105,2106],{"class":314},"  nitroApp",[259,2108,491],{"class":310},[259,2110,2111],{"class":314},"hooks",[259,2113,491],{"class":310},[259,2115,2116],{"class":366},"hook",[259,2118,369],{"class":378},[259,2120,449],{"class":310},[259,2122,2123],{"class":269},"evlog:drain",[259,2125,449],{"class":310},[259,2127,894],{"class":310},[259,2129,2091],{"class":314},[259,2131,480],{"class":378},[259,2133,2134,2136],{"class":261,"line":408},[259,2135,477],{"class":310},[259,2137,480],{"class":314},[250,2139,2142],{"className":297,"code":2140,"filename":2141,"language":299,"meta":255,"style":255},"import { definePlugin } from 'nitro'\nimport { createUserAgentEnricher, createRequestSizeEnricher } from 'evlog/enrichers'\n\nexport default definePlugin((nitroApp) => {\n  const enrichers = [createUserAgentEnricher(), createRequestSizeEnricher()]\n\n  nitroApp.hooks.hook('evlog:enrich', (ctx) => {\n    for (const enricher of enrichers) enricher(ctx)\n  })\n})\n","server/plugins/evlog-enrich.ts",[229,2143,2144,2162,2187,2191,2211,2234,2238,2272,2301,2307],{"__ignoreMap":255},[259,2145,2146,2148,2150,2152,2154,2156,2158,2160],{"class":261,"line":262},[259,2147,307],{"class":306},[259,2149,311],{"class":310},[259,2151,2029],{"class":314},[259,2153,318],{"class":310},[259,2155,321],{"class":306},[259,2157,324],{"class":310},[259,2159,327],{"class":269},[259,2161,330],{"class":310},[259,2163,2164,2166,2168,2171,2173,2176,2178,2180,2182,2185],{"class":261,"line":333},[259,2165,307],{"class":306},[259,2167,311],{"class":310},[259,2169,2170],{"class":314}," createUserAgentEnricher",[259,2172,894],{"class":310},[259,2174,2175],{"class":314}," createRequestSizeEnricher",[259,2177,318],{"class":310},[259,2179,321],{"class":306},[259,2181,324],{"class":310},[259,2183,2184],{"class":269},"evlog/enrichers",[259,2186,330],{"class":310},[259,2188,2189],{"class":261,"line":350},[259,2190,354],{"emptyLinePlaceholder":353},[259,2192,2193,2195,2197,2199,2201,2203,2205,2207,2209],{"class":261,"line":357},[259,2194,360],{"class":306},[259,2196,363],{"class":306},[259,2198,2029],{"class":366},[259,2200,369],{"class":314},[259,2202,369],{"class":310},[259,2204,2078],{"class":1286},[259,2206,461],{"class":310},[259,2208,808],{"class":594},[259,2210,384],{"class":310},[259,2212,2213,2215,2218,2220,2222,2225,2227,2229,2231],{"class":261,"line":375},[259,2214,1808],{"class":594},[259,2216,2217],{"class":314}," enrichers",[259,2219,821],{"class":310},[259,2221,626],{"class":378},[259,2223,2224],{"class":366},"createUserAgentEnricher",[259,2226,632],{"class":378},[259,2228,894],{"class":310},[259,2230,2175],{"class":366},[259,2232,2233],{"class":378},"()]\n",[259,2235,2236],{"class":261,"line":387},[259,2237,354],{"emptyLinePlaceholder":353},[259,2239,2240,2242,2244,2246,2248,2250,2252,2254,2257,2259,2261,2263,2266,2268,2270],{"class":261,"line":402},[259,2241,2106],{"class":314},[259,2243,491],{"class":310},[259,2245,2111],{"class":314},[259,2247,491],{"class":310},[259,2249,2116],{"class":366},[259,2251,369],{"class":378},[259,2253,449],{"class":310},[259,2255,2256],{"class":269},"evlog:enrich",[259,2258,449],{"class":310},[259,2260,894],{"class":310},[259,2262,1488],{"class":310},[259,2264,2265],{"class":1286},"ctx",[259,2267,461],{"class":310},[259,2269,808],{"class":594},[259,2271,384],{"class":310},[259,2273,2274,2277,2279,2282,2285,2288,2290,2292,2295,2297,2299],{"class":261,"line":408},[259,2275,2276],{"class":306},"    for",[259,2278,1488],{"class":378},[259,2280,2281],{"class":594},"const",[259,2283,2284],{"class":314}," enricher",[259,2286,2287],{"class":310}," of",[259,2289,2217],{"class":314},[259,2291,1502],{"class":378},[259,2293,2294],{"class":366},"enricher",[259,2296,369],{"class":378},[259,2298,2265],{"class":314},[259,2300,480],{"class":378},[259,2302,2303,2305],{"class":261,"line":419},[259,2304,1887],{"class":310},[259,2306,480],{"class":378},[259,2308,2309,2311],{"class":261,"line":429},[259,2310,477],{"class":310},[259,2312,480],{"class":314},[1118,2314,2315,2316,2319,2320,2322],{"color":1120,"icon":13},"See the ",[2317,2318,140],"a",{"href":145}," and ",[2317,2321,189],{"href":194}," docs for all available drain adapters and enrichers.",[234,2324,2326],{"id":2325},"run-locally","Run Locally",[250,2328,2330],{"className":252,"code":2329,"language":254,"meta":255,"style":255},"git clone https://github.com/HugoRCD/evlog.git\ncd evlog/examples/tanstack-start\nbun install\nbun run dev\n",[229,2331,2332,2343,2351,2358],{"__ignoreMap":255},[259,2333,2334,2337,2340],{"class":261,"line":262},[259,2335,2336],{"class":265},"git",[259,2338,2339],{"class":269}," clone",[259,2341,2342],{"class":269}," https://github.com/HugoRCD/evlog.git\n",[259,2344,2345,2348],{"class":261,"line":333},[259,2346,2347],{"class":366},"cd",[259,2349,2350],{"class":269}," evlog/examples/tanstack-start\n",[259,2352,2353,2355],{"class":261,"line":350},[259,2354,266],{"class":265},[259,2356,2357],{"class":269}," install\n",[259,2359,2360,2362,2365],{"class":261,"line":357},[259,2361,266],{"class":265},[259,2363,2364],{"class":269}," run",[259,2366,2367],{"class":269}," dev\n",[225,2369,2370,2371,2376],{},"Open ",[2317,2372,2373],{"href":2373,"rel":2374},"http://localhost:3000",[2375],"nofollow"," and navigate to the evlog Demo page to test the API endpoints.",[2378,2379,2380],"card-group",{},[2381,2382,2386],"card",{"icon":2383,"title":2384,"to":2385},"i-simple-icons-github","Source Code","https://github.com/HugoRCD/evlog/tree/main/examples/tanstack-start","Browse the complete TanStack Start example source on GitHub.",[2388,2389,2390],"style",{},"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 .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 .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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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}",{"title":255,"searchDepth":333,"depth":333,"links":2392},[2393,2399,2400,2403,2404],{"id":236,"depth":333,"text":20,"children":2394},[2395,2396,2398],{"id":247,"depth":350,"text":248},{"id":276,"depth":350,"text":2397},"2. Add nitro.config.ts",{"id":494,"depth":350,"text":495},{"id":664,"depth":333,"text":111},{"id":1130,"depth":333,"text":1131,"children":2401},[2402],{"id":1759,"depth":350,"text":1760},{"id":2006,"depth":333,"text":2007},{"id":2325,"depth":333,"text":2326},"Using evlog with TanStack Start — automatic wide events, structured errors, and logging in API routes and server functions.","md",[2408],{"label":2384,"icon":2383,"to":2385,"color":2409,"variant":2410},"neutral","subtle",{},{"title":61,"icon":64},{"title":61,"description":2405},"l4H2okBTAb6xFF1S6_gutXZT_Zv2p1yRkH0k_oWUaAc",[2416,2418],{"title":56,"path":57,"stem":58,"description":2417,"icon":59,"children":-1},"Using evlog with Nitro — automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in Nitro v2 and v3 applications.",{"title":66,"path":67,"stem":68,"description":2419,"icon":69,"children":-1},"Using evlog with NestJS — automatic wide events, structured errors, drain adapters, enrichers, and tail sampling in NestJS applications.",1772991603485]