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