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