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