[{"data":1,"prerenderedAt":1814},["ShallowReactive",2],{"navigation_docs":3,"-frameworks-astro":228,"-frameworks-astro-surround":1809},[4,30,110,149,198,214],{"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],{"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},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","2.frameworks\u002F11.cloudflare-workers","i-simple-icons-cloudflare",{"title":96,"path":97,"stem":98,"icon":99},"Standalone","\u002Fframeworks\u002Fstandalone","2.frameworks\u002F12.standalone","i-simple-icons-typescript",{"title":101,"path":102,"stem":103,"icon":104},"Astro","\u002Fframeworks\u002Fastro","2.frameworks\u002F13.astro","i-simple-icons-astro",{"title":106,"path":107,"stem":108,"icon":109},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","2.frameworks\u002F14.custom-integration","i-lucide-puzzle",{"title":111,"path":112,"stem":113,"children":114,"page":29},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[115,120,125,130,135,139,144],{"title":116,"path":117,"stem":118,"icon":119},"Request Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":121,"path":122,"stem":123,"icon":124},"Wide Events","\u002Fcore-concepts\u002Fwide-events","3.core-concepts\u002F1.wide-events","i-lucide-layers",{"title":126,"path":127,"stem":128,"icon":129},"Structured Errors","\u002Fcore-concepts\u002Fstructured-errors","3.core-concepts\u002F2.structured-errors","i-lucide-shield-alert",{"title":131,"path":132,"stem":133,"icon":134},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F3.best-practices","i-lucide-shield-check",{"title":136,"path":137,"stem":138,"icon":99},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F4.typed-fields",{"title":140,"path":141,"stem":142,"icon":143},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F5.sampling","i-lucide-filter",{"title":145,"path":146,"stem":147,"icon":148},"Client Logging","\u002Fcore-concepts\u002Fclient-logging","3.core-concepts\u002F6.client-logging","i-lucide-monitor",{"title":150,"path":151,"stem":152,"children":153,"page":29},"Adapters","\u002Fadapters","4.adapters",[154,158,163,168,173,178,183,188,193],{"title":36,"path":155,"stem":156,"icon":157},"\u002Fadapters\u002Foverview","4.adapters\u002F1.overview","i-custom-plug",{"title":159,"path":160,"stem":161,"icon":162},"Axiom","\u002Fadapters\u002Faxiom","4.adapters\u002F2.axiom","i-custom-axiom",{"title":164,"path":165,"stem":166,"icon":167},"OTLP","\u002Fadapters\u002Fotlp","4.adapters\u002F3.otlp","i-simple-icons-opentelemetry",{"title":169,"path":170,"stem":171,"icon":172},"PostHog","\u002Fadapters\u002Fposthog","4.adapters\u002F4.posthog","i-simple-icons-posthog",{"title":174,"path":175,"stem":176,"icon":177},"Sentry","\u002Fadapters\u002Fsentry","4.adapters\u002F5.sentry","i-simple-icons-sentry",{"title":179,"path":180,"stem":181,"icon":182},"Better Stack","\u002Fadapters\u002Fbetter-stack","4.adapters\u002F6.better-stack","i-simple-icons-betterstack",{"title":184,"path":185,"stem":186,"icon":187},"Custom Adapters","\u002Fadapters\u002Fcustom","4.adapters\u002F7.custom","i-lucide-code",{"title":189,"path":190,"stem":191,"icon":192},"Pipeline","\u002Fadapters\u002Fpipeline","4.adapters\u002F8.pipeline","i-lucide-workflow",{"title":194,"path":195,"stem":196,"icon":197},"Browser","\u002Fadapters\u002Fbrowser","4.adapters\u002F9.browser","i-lucide-globe",{"title":199,"path":200,"stem":201,"children":202,"page":29},"Enrichers","\u002Fenrichers","5.enrichers",[203,206,210],{"title":36,"path":204,"stem":205,"icon":28},"\u002Fenrichers\u002Foverview","5.enrichers\u002F1.overview",{"title":207,"path":208,"stem":209,"icon":109},"Built-in","\u002Fenrichers\u002Fbuilt-in","5.enrichers\u002F2.built-in",{"title":211,"path":212,"stem":213,"icon":187},"Custom","\u002Fenrichers\u002Fcustom","5.enrichers\u002F3.custom",{"title":215,"path":216,"stem":217,"children":218,"page":29},"NuxtHub","\u002Fnuxthub","6.nuxthub",[219,223],{"title":36,"path":220,"stem":221,"icon":222},"\u002Fnuxthub\u002Foverview","6.nuxthub\u002F1.overview","i-lucide-database",{"title":224,"path":225,"stem":226,"icon":227},"Retention","\u002Fnuxthub\u002Fretention","6.nuxthub\u002F2.retention","i-lucide-clock",{"id":229,"title":101,"body":230,"description":1802,"extension":1803,"links":1804,"meta":1805,"navigation":1806,"path":102,"seo":1807,"stem":103,"__hash__":1808},"docs\u002F2.frameworks\u002F13.astro.md",{"type":231,"value":232,"toc":1792},"minimark",[233,242,251,255,260,285,289,730,734,842,845,852,1120,1165,1169,1176,1555,1559,1565,1781,1788],[234,235,236,237,241],"p",{},"Astro doesn't have a dedicated evlog integration. Instead, use the core ",[238,239,240],"code",{},"evlog"," package with Astro's middleware to create request-scoped loggers manually.",[243,244,246,247,250],"callout",{"color":245,"icon":13},"info","This is a guide-level integration. It uses the generic ",[238,248,249],{},"createRequestLogger"," API rather than a framework-specific module.",[252,253,20],"h2",{"id":254},"quick-start",[256,257,259],"h3",{"id":258},"_1-install","1. Install",[261,262,267],"pre",{"className":263,"code":264,"language":265,"meta":266,"style":266},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","bun add evlog\n","bash","",[238,268,269],{"__ignoreMap":266},[270,271,274,278,282],"span",{"class":272,"line":273},"line",1,[270,275,277],{"class":276},"sBMFI","bun",[270,279,281],{"class":280},"sfazB"," add",[270,283,284],{"class":280}," evlog\n",[256,286,288],{"id":287},"_2-create-a-middleware","2. Create a middleware",[261,290,295],{"className":291,"code":292,"filename":293,"language":294,"meta":266,"style":266},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { defineMiddleware } from 'astro:middleware'\nimport { initLogger, createRequestLogger } from 'evlog'\n\ninitLogger({\n  env: { service: 'my-astro-app' },\n})\n\nexport const onRequest = defineMiddleware(async ({ request, locals }, next) => {\n  const url = new URL(request.url)\n\n  const log = createRequestLogger({\n    method: request.method,\n    path: url.pathname,\n  })\n\n  locals.log = log\n\n  try {\n    const response = await next()\n    log.emit()\n    return response\n  } catch (error) {\n    log.error(error instanceof Error ? error : new Error(String(error)))\n    log.emit()\n    throw error\n  }\n})\n","src\u002Fmiddleware.ts","typescript",[238,296,297,326,352,359,372,400,409,414,464,495,500,516,534,551,559,564,580,585,593,612,625,634,653,697,708,717,723],{"__ignoreMap":266},[270,298,299,303,307,311,314,317,320,323],{"class":272,"line":273},[270,300,302],{"class":301},"s7zQu","import",[270,304,306],{"class":305},"sMK4o"," {",[270,308,310],{"class":309},"sTEyZ"," defineMiddleware",[270,312,313],{"class":305}," }",[270,315,316],{"class":301}," from",[270,318,319],{"class":305}," '",[270,321,322],{"class":280},"astro:middleware",[270,324,325],{"class":305},"'\n",[270,327,329,331,333,336,339,342,344,346,348,350],{"class":272,"line":328},2,[270,330,302],{"class":301},[270,332,306],{"class":305},[270,334,335],{"class":309}," initLogger",[270,337,338],{"class":305},",",[270,340,341],{"class":309}," createRequestLogger",[270,343,313],{"class":305},[270,345,316],{"class":301},[270,347,319],{"class":305},[270,349,240],{"class":280},[270,351,325],{"class":305},[270,353,355],{"class":272,"line":354},3,[270,356,358],{"emptyLinePlaceholder":357},true,"\n",[270,360,362,366,369],{"class":272,"line":361},4,[270,363,365],{"class":364},"s2Zo4","initLogger",[270,367,368],{"class":309},"(",[270,370,371],{"class":305},"{\n",[270,373,375,379,382,384,387,389,391,394,397],{"class":272,"line":374},5,[270,376,378],{"class":377},"swJcz","  env",[270,380,381],{"class":305},":",[270,383,306],{"class":305},[270,385,386],{"class":377}," service",[270,388,381],{"class":305},[270,390,319],{"class":305},[270,392,393],{"class":280},"my-astro-app",[270,395,396],{"class":305},"'",[270,398,399],{"class":305}," },\n",[270,401,403,406],{"class":272,"line":402},6,[270,404,405],{"class":305},"}",[270,407,408],{"class":309},")\n",[270,410,412],{"class":272,"line":411},7,[270,413,358],{"emptyLinePlaceholder":357},[270,415,417,420,424,427,430,432,434,437,440,444,446,449,452,455,458,461],{"class":272,"line":416},8,[270,418,419],{"class":301},"export",[270,421,423],{"class":422},"spNyl"," const",[270,425,426],{"class":309}," onRequest ",[270,428,429],{"class":305},"=",[270,431,310],{"class":364},[270,433,368],{"class":309},[270,435,436],{"class":422},"async",[270,438,439],{"class":305}," ({",[270,441,443],{"class":442},"sHdIc"," request",[270,445,338],{"class":305},[270,447,448],{"class":442}," locals",[270,450,451],{"class":305}," },",[270,453,454],{"class":442}," next",[270,456,457],{"class":305},")",[270,459,460],{"class":422}," =>",[270,462,463],{"class":305}," {\n",[270,465,467,470,473,476,479,482,484,487,490,493],{"class":272,"line":466},9,[270,468,469],{"class":422},"  const",[270,471,472],{"class":309}," url",[270,474,475],{"class":305}," =",[270,477,478],{"class":305}," new",[270,480,481],{"class":364}," URL",[270,483,368],{"class":377},[270,485,486],{"class":309},"request",[270,488,489],{"class":305},".",[270,491,492],{"class":309},"url",[270,494,408],{"class":377},[270,496,498],{"class":272,"line":497},10,[270,499,358],{"emptyLinePlaceholder":357},[270,501,503,505,508,510,512,514],{"class":272,"line":502},11,[270,504,469],{"class":422},[270,506,507],{"class":309}," log",[270,509,475],{"class":305},[270,511,341],{"class":364},[270,513,368],{"class":377},[270,515,371],{"class":305},[270,517,519,522,524,526,528,531],{"class":272,"line":518},12,[270,520,521],{"class":377},"    method",[270,523,381],{"class":305},[270,525,443],{"class":309},[270,527,489],{"class":305},[270,529,530],{"class":309},"method",[270,532,533],{"class":305},",\n",[270,535,537,540,542,544,546,549],{"class":272,"line":536},13,[270,538,539],{"class":377},"    path",[270,541,381],{"class":305},[270,543,472],{"class":309},[270,545,489],{"class":305},[270,547,548],{"class":309},"pathname",[270,550,533],{"class":305},[270,552,554,557],{"class":272,"line":553},14,[270,555,556],{"class":305},"  }",[270,558,408],{"class":377},[270,560,562],{"class":272,"line":561},15,[270,563,358],{"emptyLinePlaceholder":357},[270,565,567,570,572,575,577],{"class":272,"line":566},16,[270,568,569],{"class":309},"  locals",[270,571,489],{"class":305},[270,573,574],{"class":309},"log",[270,576,475],{"class":305},[270,578,579],{"class":309}," log\n",[270,581,583],{"class":272,"line":582},17,[270,584,358],{"emptyLinePlaceholder":357},[270,586,588,591],{"class":272,"line":587},18,[270,589,590],{"class":301},"  try",[270,592,463],{"class":305},[270,594,596,599,602,604,607,609],{"class":272,"line":595},19,[270,597,598],{"class":422},"    const",[270,600,601],{"class":309}," response",[270,603,475],{"class":305},[270,605,606],{"class":301}," await",[270,608,454],{"class":364},[270,610,611],{"class":377},"()\n",[270,613,615,618,620,623],{"class":272,"line":614},20,[270,616,617],{"class":309},"    log",[270,619,489],{"class":305},[270,621,622],{"class":364},"emit",[270,624,611],{"class":377},[270,626,628,631],{"class":272,"line":627},21,[270,629,630],{"class":301},"    return",[270,632,633],{"class":309}," response\n",[270,635,637,639,642,645,648,651],{"class":272,"line":636},22,[270,638,556],{"class":305},[270,640,641],{"class":301}," catch",[270,643,644],{"class":377}," (",[270,646,647],{"class":309},"error",[270,649,650],{"class":377},") ",[270,652,371],{"class":305},[270,654,656,658,660,662,664,666,669,672,675,678,681,683,685,687,690,692,694],{"class":272,"line":655},23,[270,657,617],{"class":309},[270,659,489],{"class":305},[270,661,647],{"class":364},[270,663,368],{"class":377},[270,665,647],{"class":309},[270,667,668],{"class":305}," instanceof",[270,670,671],{"class":276}," Error",[270,673,674],{"class":305}," ?",[270,676,677],{"class":309}," error",[270,679,680],{"class":305}," :",[270,682,478],{"class":305},[270,684,671],{"class":364},[270,686,368],{"class":377},[270,688,689],{"class":364},"String",[270,691,368],{"class":377},[270,693,647],{"class":309},[270,695,696],{"class":377},")))\n",[270,698,700,702,704,706],{"class":272,"line":699},24,[270,701,617],{"class":309},[270,703,489],{"class":305},[270,705,622],{"class":364},[270,707,611],{"class":377},[270,709,711,714],{"class":272,"line":710},25,[270,712,713],{"class":301},"    throw",[270,715,716],{"class":309}," error\n",[270,718,720],{"class":272,"line":719},26,[270,721,722],{"class":305},"  }\n",[270,724,726,728],{"class":272,"line":725},27,[270,727,405],{"class":305},[270,729,408],{"class":309},[256,731,733],{"id":732},"_3-type-your-locals","3. Type your locals",[261,735,738],{"className":291,"code":736,"filename":737,"language":294,"meta":266,"style":266},"\u002F\u002F\u002F \u003Creference types=\"astro\u002Fclient\" \u002F>\n\nimport type { RequestLogger } from 'evlog'\n\ndeclare namespace App {\n  interface Locals {\n    log: RequestLogger\n  }\n}\n","src\u002Fenv.d.ts",[238,739,740,771,775,797,801,814,824,833,837],{"__ignoreMap":266},[270,741,742,746,749,753,757,759,762,766,768],{"class":272,"line":273},[270,743,745],{"class":744},"sHwdD","\u002F\u002F\u002F ",[270,747,748],{"class":301},"\u003C",[270,750,752],{"class":751},"s5tWE","reference",[270,754,756],{"class":755},"s6hCs"," types",[270,758,429],{"class":301},[270,760,761],{"class":301},"\"",[270,763,765],{"class":764},"smbvS","astro\u002Fclient",[270,767,761],{"class":301},[270,769,770],{"class":301}," \u002F>\n",[270,772,773],{"class":272,"line":328},[270,774,358],{"emptyLinePlaceholder":357},[270,776,777,779,782,784,787,789,791,793,795],{"class":272,"line":354},[270,778,302],{"class":301},[270,780,781],{"class":301}," type",[270,783,306],{"class":305},[270,785,786],{"class":309}," RequestLogger",[270,788,313],{"class":305},[270,790,316],{"class":301},[270,792,319],{"class":305},[270,794,240],{"class":280},[270,796,325],{"class":305},[270,798,799],{"class":272,"line":361},[270,800,358],{"emptyLinePlaceholder":357},[270,802,803,806,809,812],{"class":272,"line":374},[270,804,805],{"class":422},"declare",[270,807,808],{"class":422}," namespace",[270,810,811],{"class":276}," App",[270,813,463],{"class":305},[270,815,816,819,822],{"class":272,"line":402},[270,817,818],{"class":422},"  interface",[270,820,821],{"class":276}," Locals",[270,823,463],{"class":305},[270,825,826,828,830],{"class":272,"line":411},[270,827,617],{"class":377},[270,829,381],{"class":305},[270,831,832],{"class":276}," RequestLogger\n",[270,834,835],{"class":272,"line":416},[270,836,722],{"class":305},[270,838,839],{"class":272,"line":466},[270,840,841],{"class":305},"}\n",[252,843,121],{"id":844},"wide-events",[234,846,847,848,851],{},"Access the logger from ",[238,849,850],{},"Astro.locals"," in your pages and API routes:",[261,853,856],{"className":291,"code":854,"filename":855,"language":294,"meta":266,"style":266},"import type { APIRoute } from 'astro'\n\nexport const GET: APIRoute = async ({ params, locals }) => {\n  locals.log.set({ user: { id: params.id } })\n\n  const user = await db.findUser(params.id)\n  locals.log.set({ user: { name: user.name, plan: user.plan } })\n\n  return new Response(JSON.stringify(user), {\n    headers: { 'Content-Type': 'application\u002Fjson' },\n  })\n}\n","src\u002Fpages\u002Fapi\u002Fusers\u002F[id].ts",[238,857,858,880,884,918,961,965,994,1048,1052,1083,1110,1116],{"__ignoreMap":266},[270,859,860,862,864,866,869,871,873,875,878],{"class":272,"line":273},[270,861,302],{"class":301},[270,863,781],{"class":301},[270,865,306],{"class":305},[270,867,868],{"class":309}," APIRoute",[270,870,313],{"class":305},[270,872,316],{"class":301},[270,874,319],{"class":305},[270,876,877],{"class":280},"astro",[270,879,325],{"class":305},[270,881,882],{"class":272,"line":328},[270,883,358],{"emptyLinePlaceholder":357},[270,885,886,888,890,893,895,897,899,902,904,907,909,911,914,916],{"class":272,"line":354},[270,887,419],{"class":301},[270,889,423],{"class":422},[270,891,892],{"class":309}," GET",[270,894,381],{"class":305},[270,896,868],{"class":276},[270,898,475],{"class":305},[270,900,901],{"class":422}," async",[270,903,439],{"class":305},[270,905,906],{"class":442}," params",[270,908,338],{"class":305},[270,910,448],{"class":442},[270,912,913],{"class":305}," })",[270,915,460],{"class":422},[270,917,463],{"class":305},[270,919,920,922,924,926,928,931,933,936,939,941,943,946,948,950,952,955,957,959],{"class":272,"line":361},[270,921,569],{"class":309},[270,923,489],{"class":305},[270,925,574],{"class":309},[270,927,489],{"class":305},[270,929,930],{"class":364},"set",[270,932,368],{"class":377},[270,934,935],{"class":305},"{",[270,937,938],{"class":377}," user",[270,940,381],{"class":305},[270,942,306],{"class":305},[270,944,945],{"class":377}," id",[270,947,381],{"class":305},[270,949,906],{"class":309},[270,951,489],{"class":305},[270,953,954],{"class":309},"id",[270,956,313],{"class":305},[270,958,313],{"class":305},[270,960,408],{"class":377},[270,962,963],{"class":272,"line":374},[270,964,358],{"emptyLinePlaceholder":357},[270,966,967,969,971,973,975,978,980,983,985,988,990,992],{"class":272,"line":402},[270,968,469],{"class":422},[270,970,938],{"class":309},[270,972,475],{"class":305},[270,974,606],{"class":301},[270,976,977],{"class":309}," db",[270,979,489],{"class":305},[270,981,982],{"class":364},"findUser",[270,984,368],{"class":377},[270,986,987],{"class":309},"params",[270,989,489],{"class":305},[270,991,954],{"class":309},[270,993,408],{"class":377},[270,995,996,998,1000,1002,1004,1006,1008,1010,1012,1014,1016,1019,1021,1023,1025,1028,1030,1033,1035,1037,1039,1042,1044,1046],{"class":272,"line":411},[270,997,569],{"class":309},[270,999,489],{"class":305},[270,1001,574],{"class":309},[270,1003,489],{"class":305},[270,1005,930],{"class":364},[270,1007,368],{"class":377},[270,1009,935],{"class":305},[270,1011,938],{"class":377},[270,1013,381],{"class":305},[270,1015,306],{"class":305},[270,1017,1018],{"class":377}," name",[270,1020,381],{"class":305},[270,1022,938],{"class":309},[270,1024,489],{"class":305},[270,1026,1027],{"class":309},"name",[270,1029,338],{"class":305},[270,1031,1032],{"class":377}," plan",[270,1034,381],{"class":305},[270,1036,938],{"class":309},[270,1038,489],{"class":305},[270,1040,1041],{"class":309},"plan",[270,1043,313],{"class":305},[270,1045,313],{"class":305},[270,1047,408],{"class":377},[270,1049,1050],{"class":272,"line":416},[270,1051,358],{"emptyLinePlaceholder":357},[270,1053,1054,1057,1059,1062,1064,1067,1069,1072,1074,1077,1079,1081],{"class":272,"line":466},[270,1055,1056],{"class":301},"  return",[270,1058,478],{"class":305},[270,1060,1061],{"class":364}," Response",[270,1063,368],{"class":377},[270,1065,1066],{"class":309},"JSON",[270,1068,489],{"class":305},[270,1070,1071],{"class":364},"stringify",[270,1073,368],{"class":377},[270,1075,1076],{"class":309},"user",[270,1078,457],{"class":377},[270,1080,338],{"class":305},[270,1082,463],{"class":305},[270,1084,1085,1088,1090,1092,1094,1097,1099,1101,1103,1106,1108],{"class":272,"line":497},[270,1086,1087],{"class":377},"    headers",[270,1089,381],{"class":305},[270,1091,306],{"class":305},[270,1093,319],{"class":305},[270,1095,1096],{"class":377},"Content-Type",[270,1098,396],{"class":305},[270,1100,381],{"class":305},[270,1102,319],{"class":305},[270,1104,1105],{"class":280},"application\u002Fjson",[270,1107,396],{"class":305},[270,1109,399],{"class":305},[270,1111,1112,1114],{"class":272,"line":502},[270,1113,556],{"class":305},[270,1115,408],{"class":377},[270,1117,1118],{"class":272,"line":518},[270,1119,841],{"class":305},[261,1121,1124],{"className":263,"code":1122,"filename":1123,"language":265,"meta":266,"style":266},"14:58:15 INFO [my-astro-app] GET \u002Fapi\u002Fusers\u002Fusr_123\n  ├─ user: id=usr_123 name=Alice plan=pro\n  └─ requestId: 4a8ff3a8-...\n","Terminal output",[238,1125,1126,1137,1154],{"__ignoreMap":266},[270,1127,1128,1131,1134],{"class":272,"line":273},[270,1129,1130],{"class":276},"14:58:15",[270,1132,1133],{"class":280}," INFO",[270,1135,1136],{"class":309}," [my-astro-app] GET \u002Fapi\u002Fusers\u002Fusr_123\n",[270,1138,1139,1142,1145,1148,1151],{"class":272,"line":328},[270,1140,1141],{"class":276},"  ├─",[270,1143,1144],{"class":280}," user:",[270,1146,1147],{"class":280}," id=usr_123",[270,1149,1150],{"class":280}," name=Alice",[270,1152,1153],{"class":280}," plan=pro\n",[270,1155,1156,1159,1162],{"class":272,"line":354},[270,1157,1158],{"class":276},"  └─",[270,1160,1161],{"class":280}," requestId:",[270,1163,1164],{"class":280}," 4a8ff3a8-...\n",[252,1166,1168],{"id":1167},"error-handling","Error Handling",[234,1170,1171,1172,1175],{},"Use ",[238,1173,1174],{},"createError"," for structured errors:",[261,1177,1180],{"className":291,"code":1178,"filename":1179,"language":294,"meta":266,"style":266},"import type { APIRoute } from 'astro'\nimport { createError, parseError } from 'evlog'\n\nexport const POST: APIRoute = async ({ request, locals }) => {\n  const body = await request.json()\n  locals.log.set({ cart: { items: body.items } })\n\n  if (!body.paymentMethod) {\n    const error = createError({\n      status: 400,\n      message: 'Missing payment method',\n      why: 'No payment method was provided',\n      fix: 'Include a paymentMethod field in the request body',\n    })\n    locals.log.error(error)\n    const parsed = parseError(error)\n    return new Response(JSON.stringify(parsed), { status: parsed.status })\n  }\n\n  return new Response(JSON.stringify({ success: true }))\n}\n","src\u002Fpages\u002Fapi\u002Fcheckout.ts",[238,1181,1182,1202,1226,1230,1261,1281,1322,1326,1348,1362,1375,1391,1407,1423,1430,1449,1466,1509,1513,1517,1551],{"__ignoreMap":266},[270,1183,1184,1186,1188,1190,1192,1194,1196,1198,1200],{"class":272,"line":273},[270,1185,302],{"class":301},[270,1187,781],{"class":301},[270,1189,306],{"class":305},[270,1191,868],{"class":309},[270,1193,313],{"class":305},[270,1195,316],{"class":301},[270,1197,319],{"class":305},[270,1199,877],{"class":280},[270,1201,325],{"class":305},[270,1203,1204,1206,1208,1211,1213,1216,1218,1220,1222,1224],{"class":272,"line":328},[270,1205,302],{"class":301},[270,1207,306],{"class":305},[270,1209,1210],{"class":309}," createError",[270,1212,338],{"class":305},[270,1214,1215],{"class":309}," parseError",[270,1217,313],{"class":305},[270,1219,316],{"class":301},[270,1221,319],{"class":305},[270,1223,240],{"class":280},[270,1225,325],{"class":305},[270,1227,1228],{"class":272,"line":354},[270,1229,358],{"emptyLinePlaceholder":357},[270,1231,1232,1234,1236,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257,1259],{"class":272,"line":361},[270,1233,419],{"class":301},[270,1235,423],{"class":422},[270,1237,1238],{"class":309}," POST",[270,1240,381],{"class":305},[270,1242,868],{"class":276},[270,1244,475],{"class":305},[270,1246,901],{"class":422},[270,1248,439],{"class":305},[270,1250,443],{"class":442},[270,1252,338],{"class":305},[270,1254,448],{"class":442},[270,1256,913],{"class":305},[270,1258,460],{"class":422},[270,1260,463],{"class":305},[270,1262,1263,1265,1268,1270,1272,1274,1276,1279],{"class":272,"line":374},[270,1264,469],{"class":422},[270,1266,1267],{"class":309}," body",[270,1269,475],{"class":305},[270,1271,606],{"class":301},[270,1273,443],{"class":309},[270,1275,489],{"class":305},[270,1277,1278],{"class":364},"json",[270,1280,611],{"class":377},[270,1282,1283,1285,1287,1289,1291,1293,1295,1297,1300,1302,1304,1307,1309,1311,1313,1316,1318,1320],{"class":272,"line":402},[270,1284,569],{"class":309},[270,1286,489],{"class":305},[270,1288,574],{"class":309},[270,1290,489],{"class":305},[270,1292,930],{"class":364},[270,1294,368],{"class":377},[270,1296,935],{"class":305},[270,1298,1299],{"class":377}," cart",[270,1301,381],{"class":305},[270,1303,306],{"class":305},[270,1305,1306],{"class":377}," items",[270,1308,381],{"class":305},[270,1310,1267],{"class":309},[270,1312,489],{"class":305},[270,1314,1315],{"class":309},"items",[270,1317,313],{"class":305},[270,1319,313],{"class":305},[270,1321,408],{"class":377},[270,1323,1324],{"class":272,"line":411},[270,1325,358],{"emptyLinePlaceholder":357},[270,1327,1328,1331,1333,1336,1339,1341,1344,1346],{"class":272,"line":416},[270,1329,1330],{"class":301},"  if",[270,1332,644],{"class":377},[270,1334,1335],{"class":305},"!",[270,1337,1338],{"class":309},"body",[270,1340,489],{"class":305},[270,1342,1343],{"class":309},"paymentMethod",[270,1345,650],{"class":377},[270,1347,371],{"class":305},[270,1349,1350,1352,1354,1356,1358,1360],{"class":272,"line":466},[270,1351,598],{"class":422},[270,1353,677],{"class":309},[270,1355,475],{"class":305},[270,1357,1210],{"class":364},[270,1359,368],{"class":377},[270,1361,371],{"class":305},[270,1363,1364,1367,1369,1373],{"class":272,"line":497},[270,1365,1366],{"class":377},"      status",[270,1368,381],{"class":305},[270,1370,1372],{"class":1371},"sbssI"," 400",[270,1374,533],{"class":305},[270,1376,1377,1380,1382,1384,1387,1389],{"class":272,"line":502},[270,1378,1379],{"class":377},"      message",[270,1381,381],{"class":305},[270,1383,319],{"class":305},[270,1385,1386],{"class":280},"Missing payment method",[270,1388,396],{"class":305},[270,1390,533],{"class":305},[270,1392,1393,1396,1398,1400,1403,1405],{"class":272,"line":518},[270,1394,1395],{"class":377},"      why",[270,1397,381],{"class":305},[270,1399,319],{"class":305},[270,1401,1402],{"class":280},"No payment method was provided",[270,1404,396],{"class":305},[270,1406,533],{"class":305},[270,1408,1409,1412,1414,1416,1419,1421],{"class":272,"line":536},[270,1410,1411],{"class":377},"      fix",[270,1413,381],{"class":305},[270,1415,319],{"class":305},[270,1417,1418],{"class":280},"Include a paymentMethod field in the request body",[270,1420,396],{"class":305},[270,1422,533],{"class":305},[270,1424,1425,1428],{"class":272,"line":553},[270,1426,1427],{"class":305},"    }",[270,1429,408],{"class":377},[270,1431,1432,1435,1437,1439,1441,1443,1445,1447],{"class":272,"line":561},[270,1433,1434],{"class":309},"    locals",[270,1436,489],{"class":305},[270,1438,574],{"class":309},[270,1440,489],{"class":305},[270,1442,647],{"class":364},[270,1444,368],{"class":377},[270,1446,647],{"class":309},[270,1448,408],{"class":377},[270,1450,1451,1453,1456,1458,1460,1462,1464],{"class":272,"line":566},[270,1452,598],{"class":422},[270,1454,1455],{"class":309}," parsed",[270,1457,475],{"class":305},[270,1459,1215],{"class":364},[270,1461,368],{"class":377},[270,1463,647],{"class":309},[270,1465,408],{"class":377},[270,1467,1468,1470,1472,1474,1476,1478,1480,1482,1484,1487,1489,1491,1493,1496,1498,1500,1502,1505,1507],{"class":272,"line":582},[270,1469,630],{"class":301},[270,1471,478],{"class":305},[270,1473,1061],{"class":364},[270,1475,368],{"class":377},[270,1477,1066],{"class":309},[270,1479,489],{"class":305},[270,1481,1071],{"class":364},[270,1483,368],{"class":377},[270,1485,1486],{"class":309},"parsed",[270,1488,457],{"class":377},[270,1490,338],{"class":305},[270,1492,306],{"class":305},[270,1494,1495],{"class":377}," status",[270,1497,381],{"class":305},[270,1499,1455],{"class":309},[270,1501,489],{"class":305},[270,1503,1504],{"class":309},"status",[270,1506,313],{"class":305},[270,1508,408],{"class":377},[270,1510,1511],{"class":272,"line":587},[270,1512,722],{"class":305},[270,1514,1515],{"class":272,"line":595},[270,1516,358],{"emptyLinePlaceholder":357},[270,1518,1519,1521,1523,1525,1527,1529,1531,1533,1535,1537,1540,1542,1546,1548],{"class":272,"line":614},[270,1520,1056],{"class":301},[270,1522,478],{"class":305},[270,1524,1061],{"class":364},[270,1526,368],{"class":377},[270,1528,1066],{"class":309},[270,1530,489],{"class":305},[270,1532,1071],{"class":364},[270,1534,368],{"class":377},[270,1536,935],{"class":305},[270,1538,1539],{"class":377}," success",[270,1541,381],{"class":305},[270,1543,1545],{"class":1544},"sfNiH"," true",[270,1547,313],{"class":305},[270,1549,1550],{"class":377},"))\n",[270,1552,1553],{"class":272,"line":627},[270,1554,841],{"class":305},[252,1556,1558],{"id":1557},"drain","Drain",[234,1560,1561,1562,1564],{},"Configure drain in ",[238,1563,365],{}," inside your middleware:",[261,1566,1568],{"className":291,"code":1567,"filename":293,"language":294,"meta":266,"style":266},"import { initLogger, createRequestLogger } from 'evlog'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport type { DrainContext } from 'evlog'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>({\n  batch: { size: 50, intervalMs: 5000 },\n})\nconst drain = pipeline(createAxiomDrain())\n\ninitLogger({\n  env: { service: 'my-astro-app' },\n  drain,\n})\n",[238,1569,1570,1592,1612,1632,1653,1657,1681,1710,1716,1736,1740,1748,1768,1775],{"__ignoreMap":266},[270,1571,1572,1574,1576,1578,1580,1582,1584,1586,1588,1590],{"class":272,"line":273},[270,1573,302],{"class":301},[270,1575,306],{"class":305},[270,1577,335],{"class":309},[270,1579,338],{"class":305},[270,1581,341],{"class":309},[270,1583,313],{"class":305},[270,1585,316],{"class":301},[270,1587,319],{"class":305},[270,1589,240],{"class":280},[270,1591,325],{"class":305},[270,1593,1594,1596,1598,1601,1603,1605,1607,1610],{"class":272,"line":328},[270,1595,302],{"class":301},[270,1597,306],{"class":305},[270,1599,1600],{"class":309}," createAxiomDrain",[270,1602,313],{"class":305},[270,1604,316],{"class":301},[270,1606,319],{"class":305},[270,1608,1609],{"class":280},"evlog\u002Faxiom",[270,1611,325],{"class":305},[270,1613,1614,1616,1618,1621,1623,1625,1627,1630],{"class":272,"line":354},[270,1615,302],{"class":301},[270,1617,306],{"class":305},[270,1619,1620],{"class":309}," createDrainPipeline",[270,1622,313],{"class":305},[270,1624,316],{"class":301},[270,1626,319],{"class":305},[270,1628,1629],{"class":280},"evlog\u002Fpipeline",[270,1631,325],{"class":305},[270,1633,1634,1636,1638,1640,1643,1645,1647,1649,1651],{"class":272,"line":361},[270,1635,302],{"class":301},[270,1637,781],{"class":301},[270,1639,306],{"class":305},[270,1641,1642],{"class":309}," DrainContext",[270,1644,313],{"class":305},[270,1646,316],{"class":301},[270,1648,319],{"class":305},[270,1650,240],{"class":280},[270,1652,325],{"class":305},[270,1654,1655],{"class":272,"line":374},[270,1656,358],{"emptyLinePlaceholder":357},[270,1658,1659,1662,1665,1667,1669,1671,1674,1677,1679],{"class":272,"line":402},[270,1660,1661],{"class":422},"const",[270,1663,1664],{"class":309}," pipeline ",[270,1666,429],{"class":305},[270,1668,1620],{"class":364},[270,1670,748],{"class":305},[270,1672,1673],{"class":276},"DrainContext",[270,1675,1676],{"class":305},">",[270,1678,368],{"class":309},[270,1680,371],{"class":305},[270,1682,1683,1686,1688,1690,1693,1695,1698,1700,1703,1705,1708],{"class":272,"line":411},[270,1684,1685],{"class":377},"  batch",[270,1687,381],{"class":305},[270,1689,306],{"class":305},[270,1691,1692],{"class":377}," size",[270,1694,381],{"class":305},[270,1696,1697],{"class":1371}," 50",[270,1699,338],{"class":305},[270,1701,1702],{"class":377}," intervalMs",[270,1704,381],{"class":305},[270,1706,1707],{"class":1371}," 5000",[270,1709,399],{"class":305},[270,1711,1712,1714],{"class":272,"line":416},[270,1713,405],{"class":305},[270,1715,408],{"class":309},[270,1717,1718,1720,1723,1725,1728,1730,1733],{"class":272,"line":466},[270,1719,1661],{"class":422},[270,1721,1722],{"class":309}," drain ",[270,1724,429],{"class":305},[270,1726,1727],{"class":364}," pipeline",[270,1729,368],{"class":309},[270,1731,1732],{"class":364},"createAxiomDrain",[270,1734,1735],{"class":309},"())\n",[270,1737,1738],{"class":272,"line":497},[270,1739,358],{"emptyLinePlaceholder":357},[270,1741,1742,1744,1746],{"class":272,"line":502},[270,1743,365],{"class":364},[270,1745,368],{"class":309},[270,1747,371],{"class":305},[270,1749,1750,1752,1754,1756,1758,1760,1762,1764,1766],{"class":272,"line":518},[270,1751,378],{"class":377},[270,1753,381],{"class":305},[270,1755,306],{"class":305},[270,1757,386],{"class":377},[270,1759,381],{"class":305},[270,1761,319],{"class":305},[270,1763,393],{"class":280},[270,1765,396],{"class":305},[270,1767,399],{"class":305},[270,1769,1770,1773],{"class":272,"line":536},[270,1771,1772],{"class":309},"  drain",[270,1774,533],{"class":305},[270,1776,1777,1779],{"class":272,"line":553},[270,1778,405],{"class":305},[270,1780,408],{"class":309},[243,1782,1783,1784,1787],{"color":245,"icon":13},"See the ",[1785,1786,150],"a",{"href":155}," docs for all available drain adapters.",[1789,1790,1791],"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 .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 .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 .s5tWE, html code.shiki .s5tWE{--shiki-light:#E53935;--shiki-light-font-style:italic;--shiki-default:#F07178;--shiki-default-font-style:italic;--shiki-dark:#F07178;--shiki-dark-font-style:italic}html pre.shiki code .s6hCs, html code.shiki .s6hCs{--shiki-light:#9C3EDA;--shiki-light-font-style:italic;--shiki-default:#C792EA;--shiki-default-font-style:italic;--shiki-dark:#C792EA;--shiki-dark-font-style:italic}html pre.shiki code .smbvS, html code.shiki .smbvS{--shiki-light:#91B859;--shiki-light-font-style:italic;--shiki-default:#C3E88D;--shiki-default-font-style:italic;--shiki-dark:#C3E88D;--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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":266,"searchDepth":328,"depth":328,"links":1793},[1794,1799,1800,1801],{"id":254,"depth":328,"text":20,"children":1795},[1796,1797,1798],{"id":258,"depth":354,"text":259},{"id":287,"depth":354,"text":288},{"id":732,"depth":354,"text":733},{"id":844,"depth":328,"text":121},{"id":1167,"depth":328,"text":1168},{"id":1557,"depth":328,"text":1558},"Using evlog with Astro — wide events and structured errors in Astro server middleware.","md",null,{},{"title":101,"icon":104},{"title":101,"description":1802},"BQLgniMPgfg5pL5RY7yvlXNKc4qG87-5nq5-g5z1MrM",[1810,1812],{"title":96,"path":97,"stem":98,"description":1811,"icon":99,"children":-1},"Using evlog in standalone TypeScript — scripts, CLI tools, queues, cron jobs, and any TypeScript process.",{"title":106,"path":107,"stem":108,"description":1813,"icon":109,"children":-1},"Build your own evlog framework integration using the toolkit API — createMiddlewareLogger, header extraction, AsyncLocalStorage, and the full drain\u002Fenrich\u002Fkeep pipeline.",1773428029639]