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