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