[{"data":1,"prerenderedAt":2217},["ShallowReactive",2],{"navigation_docs":3,"-adapters-pipeline":228,"-adapters-pipeline-surround":2212},[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":230,"body":231,"description":2202,"extension":2203,"links":2204,"meta":2208,"navigation":2209,"path":190,"seo":2210,"stem":191,"__hash__":2211},"docs\u002F4.adapters\u002F8.pipeline.md","Drain Pipeline",{"type":232,"value":233,"toc":2189},"minimark",[234,238,242,504,514,518,560,564,982,987,1133,1137,1192,1196,1203,1263,1267,1270,1561,1565,1568,1898,1902,1913,2142,2155,2162,2166,2185],[235,236,237],"p",{},"In production, sending one HTTP request per log event is wasteful. The drain pipeline buffers events and sends them in batches, retries on transient failures, and drops the oldest events when the buffer overflows.",[239,240,20],"h2",{"id":241},"quick-start",[243,244,250],"pre",{"className":245,"code":246,"filename":247,"language":248,"meta":249,"style":249},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nexport default defineNitroPlugin((nitroApp) => {\n  const pipeline = createDrainPipeline\u003CDrainContext>()\n  const drain = pipeline(createAxiomDrain())\n\n  nitroApp.hooks.hook('evlog:drain', drain)\n  nitroApp.hooks.hook('close', () => drain.flush())\n})\n","server\u002Fplugins\u002Fevlog-drain.ts","typescript","",[251,252,253,289,310,331,338,370,398,418,423,458,496],"code",{"__ignoreMap":249},[254,255,258,262,265,269,273,276,279,282,286],"span",{"class":256,"line":257},"line",1,[254,259,261],{"class":260},"s7zQu","import",[254,263,264],{"class":260}," type",[254,266,268],{"class":267},"sMK4o"," {",[254,270,272],{"class":271},"sTEyZ"," DrainContext",[254,274,275],{"class":267}," }",[254,277,278],{"class":260}," from",[254,280,281],{"class":267}," '",[254,283,285],{"class":284},"sfazB","evlog",[254,287,288],{"class":267},"'\n",[254,290,292,294,296,299,301,303,305,308],{"class":256,"line":291},2,[254,293,261],{"class":260},[254,295,268],{"class":267},[254,297,298],{"class":271}," createDrainPipeline",[254,300,275],{"class":267},[254,302,278],{"class":260},[254,304,281],{"class":267},[254,306,307],{"class":284},"evlog\u002Fpipeline",[254,309,288],{"class":267},[254,311,313,315,317,320,322,324,326,329],{"class":256,"line":312},3,[254,314,261],{"class":260},[254,316,268],{"class":267},[254,318,319],{"class":271}," createAxiomDrain",[254,321,275],{"class":267},[254,323,278],{"class":260},[254,325,281],{"class":267},[254,327,328],{"class":284},"evlog\u002Faxiom",[254,330,288],{"class":267},[254,332,334],{"class":256,"line":333},4,[254,335,337],{"emptyLinePlaceholder":336},true,"\n",[254,339,341,344,347,351,354,356,360,363,367],{"class":256,"line":340},5,[254,342,343],{"class":260},"export",[254,345,346],{"class":260}," default",[254,348,350],{"class":349},"s2Zo4"," defineNitroPlugin",[254,352,353],{"class":271},"(",[254,355,353],{"class":267},[254,357,359],{"class":358},"sHdIc","nitroApp",[254,361,362],{"class":267},")",[254,364,366],{"class":365},"spNyl"," =>",[254,368,369],{"class":267}," {\n",[254,371,373,376,379,382,384,387,391,394],{"class":256,"line":372},6,[254,374,375],{"class":365},"  const",[254,377,378],{"class":271}," pipeline",[254,380,381],{"class":267}," =",[254,383,298],{"class":349},[254,385,386],{"class":267},"\u003C",[254,388,390],{"class":389},"sBMFI","DrainContext",[254,392,393],{"class":267},">",[254,395,397],{"class":396},"swJcz","()\n",[254,399,401,403,406,408,410,412,415],{"class":256,"line":400},7,[254,402,375],{"class":365},[254,404,405],{"class":271}," drain",[254,407,381],{"class":267},[254,409,378],{"class":349},[254,411,353],{"class":396},[254,413,414],{"class":349},"createAxiomDrain",[254,416,417],{"class":396},"())\n",[254,419,421],{"class":256,"line":420},8,[254,422,337],{"emptyLinePlaceholder":336},[254,424,426,429,432,435,437,440,442,445,448,450,453,455],{"class":256,"line":425},9,[254,427,428],{"class":271},"  nitroApp",[254,430,431],{"class":267},".",[254,433,434],{"class":271},"hooks",[254,436,431],{"class":267},[254,438,439],{"class":349},"hook",[254,441,353],{"class":396},[254,443,444],{"class":267},"'",[254,446,447],{"class":284},"evlog:drain",[254,449,444],{"class":267},[254,451,452],{"class":267},",",[254,454,405],{"class":271},[254,456,457],{"class":396},")\n",[254,459,461,463,465,467,469,471,473,475,478,480,482,485,487,489,491,494],{"class":256,"line":460},10,[254,462,428],{"class":271},[254,464,431],{"class":267},[254,466,434],{"class":271},[254,468,431],{"class":267},[254,470,439],{"class":349},[254,472,353],{"class":396},[254,474,444],{"class":267},[254,476,477],{"class":284},"close",[254,479,444],{"class":267},[254,481,452],{"class":267},[254,483,484],{"class":267}," ()",[254,486,366],{"class":365},[254,488,405],{"class":271},[254,490,431],{"class":267},[254,492,493],{"class":349},"flush",[254,495,417],{"class":396},[254,497,499,502],{"class":256,"line":498},11,[254,500,501],{"class":267},"}",[254,503,457],{"class":271},[505,506,509,510,513],"callout",{"color":507,"icon":508},"warning","i-lucide-alert-triangle","Always call ",[251,511,512],{},"drain.flush()"," on server shutdown to ensure buffered events are sent before the process exits.",[239,515,517],{"id":516},"how-it-works","How It Works",[519,520,521,528,540,546,553],"ol",{},[522,523,524,525,527],"li",{},"Events are buffered in memory as they arrive via the ",[251,526,447],{}," hook",[522,529,530,531,535,536,539],{},"A batch is flushed when either the ",[532,533,534],"strong",{},"batch size"," is reached or the ",[532,537,538],{},"interval"," expires (whichever comes first)",[522,541,542,543],{},"If the drain function fails, the batch is retried with the configured ",[532,544,545],{},"backoff strategy",[522,547,548,549,552],{},"If all retries are exhausted, ",[251,550,551],{},"onDropped"," is called with the lost events",[522,554,555,556,559],{},"If the buffer exceeds ",[251,557,558],{},"maxBufferSize",", the oldest events are dropped to prevent memory leaks",[239,561,563],{"id":562},"configuration","Configuration",[243,565,567],{"className":245,"code":566,"filename":247,"language":248,"meta":249,"style":249},"import type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nexport default defineNitroPlugin((nitroApp) => {\n  const pipeline = createDrainPipeline\u003CDrainContext>({\n    batch: {\n      size: 50,          \u002F\u002F Flush every 50 events\n      intervalMs: 5000,  \u002F\u002F Or every 5 seconds, whichever comes first\n    },\n    retry: {\n      maxAttempts: 3,\n      backoff: 'exponential',\n      initialDelayMs: 1000,\n      maxDelayMs: 30000,\n    },\n    maxBufferSize: 1000,\n    onDropped: (events, error) => {\n      console.error(`[evlog] Dropped ${events.length} events:`, error?.message)\n    },\n  })\n\n  const drain = pipeline(createAxiomDrain())\n\n  nitroApp.hooks.hook('evlog:drain', drain)\n  nitroApp.hooks.hook('close', () => drain.flush())\n})\n",[251,568,569,589,607,625,629,649,670,680,697,712,717,726,740,757,770,783,788,800,825,873,878,886,891,908,913,940,975],{"__ignoreMap":249},[254,570,571,573,575,577,579,581,583,585,587],{"class":256,"line":257},[254,572,261],{"class":260},[254,574,264],{"class":260},[254,576,268],{"class":267},[254,578,272],{"class":271},[254,580,275],{"class":267},[254,582,278],{"class":260},[254,584,281],{"class":267},[254,586,285],{"class":284},[254,588,288],{"class":267},[254,590,591,593,595,597,599,601,603,605],{"class":256,"line":291},[254,592,261],{"class":260},[254,594,268],{"class":267},[254,596,298],{"class":271},[254,598,275],{"class":267},[254,600,278],{"class":260},[254,602,281],{"class":267},[254,604,307],{"class":284},[254,606,288],{"class":267},[254,608,609,611,613,615,617,619,621,623],{"class":256,"line":312},[254,610,261],{"class":260},[254,612,268],{"class":267},[254,614,319],{"class":271},[254,616,275],{"class":267},[254,618,278],{"class":260},[254,620,281],{"class":267},[254,622,328],{"class":284},[254,624,288],{"class":267},[254,626,627],{"class":256,"line":333},[254,628,337],{"emptyLinePlaceholder":336},[254,630,631,633,635,637,639,641,643,645,647],{"class":256,"line":340},[254,632,343],{"class":260},[254,634,346],{"class":260},[254,636,350],{"class":349},[254,638,353],{"class":271},[254,640,353],{"class":267},[254,642,359],{"class":358},[254,644,362],{"class":267},[254,646,366],{"class":365},[254,648,369],{"class":267},[254,650,651,653,655,657,659,661,663,665,667],{"class":256,"line":372},[254,652,375],{"class":365},[254,654,378],{"class":271},[254,656,381],{"class":267},[254,658,298],{"class":349},[254,660,386],{"class":267},[254,662,390],{"class":389},[254,664,393],{"class":267},[254,666,353],{"class":396},[254,668,669],{"class":267},"{\n",[254,671,672,675,678],{"class":256,"line":400},[254,673,674],{"class":396},"    batch",[254,676,677],{"class":267},":",[254,679,369],{"class":267},[254,681,682,685,687,691,693],{"class":256,"line":420},[254,683,684],{"class":396},"      size",[254,686,677],{"class":267},[254,688,690],{"class":689},"sbssI"," 50",[254,692,452],{"class":267},[254,694,696],{"class":695},"sHwdD","          \u002F\u002F Flush every 50 events\n",[254,698,699,702,704,707,709],{"class":256,"line":425},[254,700,701],{"class":396},"      intervalMs",[254,703,677],{"class":267},[254,705,706],{"class":689}," 5000",[254,708,452],{"class":267},[254,710,711],{"class":695},"  \u002F\u002F Or every 5 seconds, whichever comes first\n",[254,713,714],{"class":256,"line":460},[254,715,716],{"class":267},"    },\n",[254,718,719,722,724],{"class":256,"line":498},[254,720,721],{"class":396},"    retry",[254,723,677],{"class":267},[254,725,369],{"class":267},[254,727,729,732,734,737],{"class":256,"line":728},12,[254,730,731],{"class":396},"      maxAttempts",[254,733,677],{"class":267},[254,735,736],{"class":689}," 3",[254,738,739],{"class":267},",\n",[254,741,743,746,748,750,753,755],{"class":256,"line":742},13,[254,744,745],{"class":396},"      backoff",[254,747,677],{"class":267},[254,749,281],{"class":267},[254,751,752],{"class":284},"exponential",[254,754,444],{"class":267},[254,756,739],{"class":267},[254,758,760,763,765,768],{"class":256,"line":759},14,[254,761,762],{"class":396},"      initialDelayMs",[254,764,677],{"class":267},[254,766,767],{"class":689}," 1000",[254,769,739],{"class":267},[254,771,773,776,778,781],{"class":256,"line":772},15,[254,774,775],{"class":396},"      maxDelayMs",[254,777,677],{"class":267},[254,779,780],{"class":689}," 30000",[254,782,739],{"class":267},[254,784,786],{"class":256,"line":785},16,[254,787,716],{"class":267},[254,789,791,794,796,798],{"class":256,"line":790},17,[254,792,793],{"class":396},"    maxBufferSize",[254,795,677],{"class":267},[254,797,767],{"class":689},[254,799,739],{"class":267},[254,801,803,806,808,811,814,816,819,821,823],{"class":256,"line":802},18,[254,804,805],{"class":349},"    onDropped",[254,807,677],{"class":267},[254,809,810],{"class":267}," (",[254,812,813],{"class":358},"events",[254,815,452],{"class":267},[254,817,818],{"class":358}," error",[254,820,362],{"class":267},[254,822,366],{"class":365},[254,824,369],{"class":267},[254,826,828,831,833,836,838,841,844,847,849,851,854,856,859,861,863,865,868,871],{"class":256,"line":827},19,[254,829,830],{"class":271},"      console",[254,832,431],{"class":267},[254,834,835],{"class":349},"error",[254,837,353],{"class":396},[254,839,840],{"class":267},"`",[254,842,843],{"class":284},"[evlog] Dropped ",[254,845,846],{"class":267},"${",[254,848,813],{"class":271},[254,850,431],{"class":267},[254,852,853],{"class":271},"length",[254,855,501],{"class":267},[254,857,858],{"class":284}," events:",[254,860,840],{"class":267},[254,862,452],{"class":267},[254,864,818],{"class":271},[254,866,867],{"class":267},"?.",[254,869,870],{"class":271},"message",[254,872,457],{"class":396},[254,874,876],{"class":256,"line":875},20,[254,877,716],{"class":267},[254,879,881,884],{"class":256,"line":880},21,[254,882,883],{"class":267},"  }",[254,885,457],{"class":396},[254,887,889],{"class":256,"line":888},22,[254,890,337],{"emptyLinePlaceholder":336},[254,892,894,896,898,900,902,904,906],{"class":256,"line":893},23,[254,895,375],{"class":365},[254,897,405],{"class":271},[254,899,381],{"class":267},[254,901,378],{"class":349},[254,903,353],{"class":396},[254,905,414],{"class":349},[254,907,417],{"class":396},[254,909,911],{"class":256,"line":910},24,[254,912,337],{"emptyLinePlaceholder":336},[254,914,916,918,920,922,924,926,928,930,932,934,936,938],{"class":256,"line":915},25,[254,917,428],{"class":271},[254,919,431],{"class":267},[254,921,434],{"class":271},[254,923,431],{"class":267},[254,925,439],{"class":349},[254,927,353],{"class":396},[254,929,444],{"class":267},[254,931,447],{"class":284},[254,933,444],{"class":267},[254,935,452],{"class":267},[254,937,405],{"class":271},[254,939,457],{"class":396},[254,941,943,945,947,949,951,953,955,957,959,961,963,965,967,969,971,973],{"class":256,"line":942},26,[254,944,428],{"class":271},[254,946,431],{"class":267},[254,948,434],{"class":271},[254,950,431],{"class":267},[254,952,439],{"class":349},[254,954,353],{"class":396},[254,956,444],{"class":267},[254,958,477],{"class":284},[254,960,444],{"class":267},[254,962,452],{"class":267},[254,964,484],{"class":267},[254,966,366],{"class":365},[254,968,405],{"class":271},[254,970,431],{"class":267},[254,972,493],{"class":349},[254,974,417],{"class":396},[254,976,978,980],{"class":256,"line":977},27,[254,979,501],{"class":267},[254,981,457],{"class":271},[983,984,986],"h3",{"id":985},"options-reference","Options Reference",[988,989,990,1006],"table",{},[991,992,993],"thead",{},[994,995,996,1000,1003],"tr",{},[997,998,999],"th",{},"Option",[997,1001,1002],{},"Default",[997,1004,1005],{},"Description",[1007,1008,1009,1025,1040,1055,1078,1093,1108,1121],"tbody",{},[994,1010,1011,1017,1022],{},[1012,1013,1014],"td",{},[251,1015,1016],{},"batch.size",[1012,1018,1019],{},[251,1020,1021],{},"50",[1012,1023,1024],{},"Maximum events per batch",[994,1026,1027,1032,1037],{},[1012,1028,1029],{},[251,1030,1031],{},"batch.intervalMs",[1012,1033,1034],{},[251,1035,1036],{},"5000",[1012,1038,1039],{},"Max time (ms) before flushing a partial batch",[994,1041,1042,1047,1052],{},[1012,1043,1044],{},[251,1045,1046],{},"retry.maxAttempts",[1012,1048,1049],{},[251,1050,1051],{},"3",[1012,1053,1054],{},"Total attempts including the initial one",[994,1056,1057,1062,1067],{},[1012,1058,1059],{},[251,1060,1061],{},"retry.backoff",[1012,1063,1064],{},[251,1065,1066],{},"'exponential'",[1012,1068,1069,1071,1072,1071,1075],{},[251,1070,1066],{}," | ",[251,1073,1074],{},"'linear'",[251,1076,1077],{},"'fixed'",[994,1079,1080,1085,1090],{},[1012,1081,1082],{},[251,1083,1084],{},"retry.initialDelayMs",[1012,1086,1087],{},[251,1088,1089],{},"1000",[1012,1091,1092],{},"Base delay for the first retry",[994,1094,1095,1100,1105],{},[1012,1096,1097],{},[251,1098,1099],{},"retry.maxDelayMs",[1012,1101,1102],{},[251,1103,1104],{},"30000",[1012,1106,1107],{},"Upper bound for any retry delay",[994,1109,1110,1114,1118],{},[1012,1111,1112],{},[251,1113,558],{},[1012,1115,1116],{},[251,1117,1089],{},[1012,1119,1120],{},"Max buffered events before dropping oldest",[994,1122,1123,1127,1130],{},[1012,1124,1125],{},[251,1126,551],{},[1012,1128,1129],{},"—",[1012,1131,1132],{},"Callback when events are dropped (overflow or retry exhaustion)",[239,1134,1136],{"id":1135},"backoff-strategies","Backoff Strategies",[988,1138,1139,1152],{},[991,1140,1141],{},[994,1142,1143,1146,1149],{},[997,1144,1145],{},"Strategy",[997,1147,1148],{},"Delay Pattern",[997,1150,1151],{},"Use Case",[1007,1153,1154,1166,1179],{},[994,1155,1156,1160,1163],{},[1012,1157,1158],{},[251,1159,752],{},[1012,1161,1162],{},"1s, 2s, 4s, 8s...",[1012,1164,1165],{},"Default. Best for transient failures that may need time to recover",[994,1167,1168,1173,1176],{},[1012,1169,1170],{},[251,1171,1172],{},"linear",[1012,1174,1175],{},"1s, 2s, 3s, 4s...",[1012,1177,1178],{},"Predictable delay growth",[994,1180,1181,1186,1189],{},[1012,1182,1183],{},[251,1184,1185],{},"fixed",[1012,1187,1188],{},"1s, 1s, 1s, 1s...",[1012,1190,1191],{},"Same delay every time. Useful for rate-limited APIs",[239,1193,1195],{"id":1194},"returned-drain-function","Returned Drain Function",[235,1197,1198,1199,1202],{},"The function returned by ",[251,1200,1201],{},"pipeline(drain)"," is hook-compatible and exposes:",[988,1204,1205,1217],{},[991,1206,1207],{},[994,1208,1209,1212,1215],{},[997,1210,1211],{},"Property",[997,1213,1214],{},"Type",[997,1216,1005],{},[1007,1218,1219,1234,1248],{},[994,1220,1221,1226,1231],{},[1012,1222,1223],{},[251,1224,1225],{},"drain(ctx)",[1012,1227,1228],{},[251,1229,1230],{},"(ctx: T) => void",[1012,1232,1233],{},"Push a single event into the buffer",[994,1235,1236,1240,1245],{},[1012,1237,1238],{},[251,1239,512],{},[1012,1241,1242],{},[251,1243,1244],{},"() => Promise\u003Cvoid>",[1012,1246,1247],{},"Force-flush all buffered events",[994,1249,1250,1255,1260],{},[1012,1251,1252],{},[251,1253,1254],{},"drain.pending",[1012,1256,1257],{},[251,1258,1259],{},"number",[1012,1261,1262],{},"Number of events currently buffered",[239,1264,1266],{"id":1265},"multiple-destinations","Multiple Destinations",[235,1268,1269],{},"Wrap multiple adapters with a single pipeline:",[243,1271,1273],{"className":245,"code":1272,"filename":247,"language":248,"meta":249,"style":249},"import type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\nimport { createOTLPDrain } from 'evlog\u002Fotlp'\n\nexport default defineNitroPlugin((nitroApp) => {\n  const axiom = createAxiomDrain()\n  const otlp = createOTLPDrain()\n\n  const pipeline = createDrainPipeline\u003CDrainContext>()\n  const drain = pipeline(async (batch) => {\n    await Promise.allSettled([axiom(batch), otlp(batch)])\n  })\n\n  nitroApp.hooks.hook('evlog:drain', drain)\n  nitroApp.hooks.hook('close', () => drain.flush())\n})\n",[251,1274,1275,1295,1313,1331,1351,1355,1375,1388,1401,1405,1423,1449,1485,1491,1495,1521,1555],{"__ignoreMap":249},[254,1276,1277,1279,1281,1283,1285,1287,1289,1291,1293],{"class":256,"line":257},[254,1278,261],{"class":260},[254,1280,264],{"class":260},[254,1282,268],{"class":267},[254,1284,272],{"class":271},[254,1286,275],{"class":267},[254,1288,278],{"class":260},[254,1290,281],{"class":267},[254,1292,285],{"class":284},[254,1294,288],{"class":267},[254,1296,1297,1299,1301,1303,1305,1307,1309,1311],{"class":256,"line":291},[254,1298,261],{"class":260},[254,1300,268],{"class":267},[254,1302,298],{"class":271},[254,1304,275],{"class":267},[254,1306,278],{"class":260},[254,1308,281],{"class":267},[254,1310,307],{"class":284},[254,1312,288],{"class":267},[254,1314,1315,1317,1319,1321,1323,1325,1327,1329],{"class":256,"line":312},[254,1316,261],{"class":260},[254,1318,268],{"class":267},[254,1320,319],{"class":271},[254,1322,275],{"class":267},[254,1324,278],{"class":260},[254,1326,281],{"class":267},[254,1328,328],{"class":284},[254,1330,288],{"class":267},[254,1332,1333,1335,1337,1340,1342,1344,1346,1349],{"class":256,"line":333},[254,1334,261],{"class":260},[254,1336,268],{"class":267},[254,1338,1339],{"class":271}," createOTLPDrain",[254,1341,275],{"class":267},[254,1343,278],{"class":260},[254,1345,281],{"class":267},[254,1347,1348],{"class":284},"evlog\u002Fotlp",[254,1350,288],{"class":267},[254,1352,1353],{"class":256,"line":340},[254,1354,337],{"emptyLinePlaceholder":336},[254,1356,1357,1359,1361,1363,1365,1367,1369,1371,1373],{"class":256,"line":372},[254,1358,343],{"class":260},[254,1360,346],{"class":260},[254,1362,350],{"class":349},[254,1364,353],{"class":271},[254,1366,353],{"class":267},[254,1368,359],{"class":358},[254,1370,362],{"class":267},[254,1372,366],{"class":365},[254,1374,369],{"class":267},[254,1376,1377,1379,1382,1384,1386],{"class":256,"line":400},[254,1378,375],{"class":365},[254,1380,1381],{"class":271}," axiom",[254,1383,381],{"class":267},[254,1385,319],{"class":349},[254,1387,397],{"class":396},[254,1389,1390,1392,1395,1397,1399],{"class":256,"line":420},[254,1391,375],{"class":365},[254,1393,1394],{"class":271}," otlp",[254,1396,381],{"class":267},[254,1398,1339],{"class":349},[254,1400,397],{"class":396},[254,1402,1403],{"class":256,"line":425},[254,1404,337],{"emptyLinePlaceholder":336},[254,1406,1407,1409,1411,1413,1415,1417,1419,1421],{"class":256,"line":460},[254,1408,375],{"class":365},[254,1410,378],{"class":271},[254,1412,381],{"class":267},[254,1414,298],{"class":349},[254,1416,386],{"class":267},[254,1418,390],{"class":389},[254,1420,393],{"class":267},[254,1422,397],{"class":396},[254,1424,1425,1427,1429,1431,1433,1435,1438,1440,1443,1445,1447],{"class":256,"line":498},[254,1426,375],{"class":365},[254,1428,405],{"class":271},[254,1430,381],{"class":267},[254,1432,378],{"class":349},[254,1434,353],{"class":396},[254,1436,1437],{"class":365},"async",[254,1439,810],{"class":267},[254,1441,1442],{"class":358},"batch",[254,1444,362],{"class":267},[254,1446,366],{"class":365},[254,1448,369],{"class":267},[254,1450,1451,1454,1457,1459,1462,1465,1468,1470,1472,1474,1476,1478,1480,1482],{"class":256,"line":728},[254,1452,1453],{"class":260},"    await",[254,1455,1456],{"class":389}," Promise",[254,1458,431],{"class":267},[254,1460,1461],{"class":349},"allSettled",[254,1463,1464],{"class":396},"([",[254,1466,1467],{"class":349},"axiom",[254,1469,353],{"class":396},[254,1471,1442],{"class":271},[254,1473,362],{"class":396},[254,1475,452],{"class":267},[254,1477,1394],{"class":349},[254,1479,353],{"class":396},[254,1481,1442],{"class":271},[254,1483,1484],{"class":396},")])\n",[254,1486,1487,1489],{"class":256,"line":742},[254,1488,883],{"class":267},[254,1490,457],{"class":396},[254,1492,1493],{"class":256,"line":759},[254,1494,337],{"emptyLinePlaceholder":336},[254,1496,1497,1499,1501,1503,1505,1507,1509,1511,1513,1515,1517,1519],{"class":256,"line":772},[254,1498,428],{"class":271},[254,1500,431],{"class":267},[254,1502,434],{"class":271},[254,1504,431],{"class":267},[254,1506,439],{"class":349},[254,1508,353],{"class":396},[254,1510,444],{"class":267},[254,1512,447],{"class":284},[254,1514,444],{"class":267},[254,1516,452],{"class":267},[254,1518,405],{"class":271},[254,1520,457],{"class":396},[254,1522,1523,1525,1527,1529,1531,1533,1535,1537,1539,1541,1543,1545,1547,1549,1551,1553],{"class":256,"line":785},[254,1524,428],{"class":271},[254,1526,431],{"class":267},[254,1528,434],{"class":271},[254,1530,431],{"class":267},[254,1532,439],{"class":349},[254,1534,353],{"class":396},[254,1536,444],{"class":267},[254,1538,477],{"class":284},[254,1540,444],{"class":267},[254,1542,452],{"class":267},[254,1544,484],{"class":267},[254,1546,366],{"class":365},[254,1548,405],{"class":271},[254,1550,431],{"class":267},[254,1552,493],{"class":349},[254,1554,417],{"class":396},[254,1556,1557,1559],{"class":256,"line":790},[254,1558,501],{"class":267},[254,1560,457],{"class":271},[239,1562,1564],{"id":1563},"custom-drain-function","Custom Drain Function",[235,1566,1567],{},"You don't need an adapter — pass any async function that accepts a batch:",[243,1569,1571],{"className":245,"code":1570,"filename":247,"language":248,"meta":249,"style":249},"import type { DrainContext } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\n\nexport default defineNitroPlugin((nitroApp) => {\n  const pipeline = createDrainPipeline\u003CDrainContext>({\n    batch: { size: 100 },\n  })\n\n  const drain = pipeline(async (batch) => {\n    await fetch('https:\u002F\u002Fyour-service.com\u002Flogs', {\n      method: 'POST',\n      headers: { 'Content-Type': 'application\u002Fjson' },\n      body: JSON.stringify(batch.map(ctx => ctx.event)),\n    })\n  })\n\n  nitroApp.hooks.hook('evlog:drain', drain)\n  nitroApp.hooks.hook('close', () => drain.flush())\n})\n",[251,1572,1573,1593,1611,1615,1635,1655,1674,1680,1684,1708,1728,1744,1771,1815,1822,1828,1832,1858,1892],{"__ignoreMap":249},[254,1574,1575,1577,1579,1581,1583,1585,1587,1589,1591],{"class":256,"line":257},[254,1576,261],{"class":260},[254,1578,264],{"class":260},[254,1580,268],{"class":267},[254,1582,272],{"class":271},[254,1584,275],{"class":267},[254,1586,278],{"class":260},[254,1588,281],{"class":267},[254,1590,285],{"class":284},[254,1592,288],{"class":267},[254,1594,1595,1597,1599,1601,1603,1605,1607,1609],{"class":256,"line":291},[254,1596,261],{"class":260},[254,1598,268],{"class":267},[254,1600,298],{"class":271},[254,1602,275],{"class":267},[254,1604,278],{"class":260},[254,1606,281],{"class":267},[254,1608,307],{"class":284},[254,1610,288],{"class":267},[254,1612,1613],{"class":256,"line":312},[254,1614,337],{"emptyLinePlaceholder":336},[254,1616,1617,1619,1621,1623,1625,1627,1629,1631,1633],{"class":256,"line":333},[254,1618,343],{"class":260},[254,1620,346],{"class":260},[254,1622,350],{"class":349},[254,1624,353],{"class":271},[254,1626,353],{"class":267},[254,1628,359],{"class":358},[254,1630,362],{"class":267},[254,1632,366],{"class":365},[254,1634,369],{"class":267},[254,1636,1637,1639,1641,1643,1645,1647,1649,1651,1653],{"class":256,"line":340},[254,1638,375],{"class":365},[254,1640,378],{"class":271},[254,1642,381],{"class":267},[254,1644,298],{"class":349},[254,1646,386],{"class":267},[254,1648,390],{"class":389},[254,1650,393],{"class":267},[254,1652,353],{"class":396},[254,1654,669],{"class":267},[254,1656,1657,1659,1661,1663,1666,1668,1671],{"class":256,"line":372},[254,1658,674],{"class":396},[254,1660,677],{"class":267},[254,1662,268],{"class":267},[254,1664,1665],{"class":396}," size",[254,1667,677],{"class":267},[254,1669,1670],{"class":689}," 100",[254,1672,1673],{"class":267}," },\n",[254,1675,1676,1678],{"class":256,"line":400},[254,1677,883],{"class":267},[254,1679,457],{"class":396},[254,1681,1682],{"class":256,"line":420},[254,1683,337],{"emptyLinePlaceholder":336},[254,1685,1686,1688,1690,1692,1694,1696,1698,1700,1702,1704,1706],{"class":256,"line":425},[254,1687,375],{"class":365},[254,1689,405],{"class":271},[254,1691,381],{"class":267},[254,1693,378],{"class":349},[254,1695,353],{"class":396},[254,1697,1437],{"class":365},[254,1699,810],{"class":267},[254,1701,1442],{"class":358},[254,1703,362],{"class":267},[254,1705,366],{"class":365},[254,1707,369],{"class":267},[254,1709,1710,1712,1715,1717,1719,1722,1724,1726],{"class":256,"line":460},[254,1711,1453],{"class":260},[254,1713,1714],{"class":349}," fetch",[254,1716,353],{"class":396},[254,1718,444],{"class":267},[254,1720,1721],{"class":284},"https:\u002F\u002Fyour-service.com\u002Flogs",[254,1723,444],{"class":267},[254,1725,452],{"class":267},[254,1727,369],{"class":267},[254,1729,1730,1733,1735,1737,1740,1742],{"class":256,"line":498},[254,1731,1732],{"class":396},"      method",[254,1734,677],{"class":267},[254,1736,281],{"class":267},[254,1738,1739],{"class":284},"POST",[254,1741,444],{"class":267},[254,1743,739],{"class":267},[254,1745,1746,1749,1751,1753,1755,1758,1760,1762,1764,1767,1769],{"class":256,"line":728},[254,1747,1748],{"class":396},"      headers",[254,1750,677],{"class":267},[254,1752,268],{"class":267},[254,1754,281],{"class":267},[254,1756,1757],{"class":396},"Content-Type",[254,1759,444],{"class":267},[254,1761,677],{"class":267},[254,1763,281],{"class":267},[254,1765,1766],{"class":284},"application\u002Fjson",[254,1768,444],{"class":267},[254,1770,1673],{"class":267},[254,1772,1773,1776,1778,1781,1783,1786,1788,1790,1792,1795,1797,1800,1802,1805,1807,1810,1813],{"class":256,"line":742},[254,1774,1775],{"class":396},"      body",[254,1777,677],{"class":267},[254,1779,1780],{"class":271}," JSON",[254,1782,431],{"class":267},[254,1784,1785],{"class":349},"stringify",[254,1787,353],{"class":396},[254,1789,1442],{"class":271},[254,1791,431],{"class":267},[254,1793,1794],{"class":349},"map",[254,1796,353],{"class":396},[254,1798,1799],{"class":358},"ctx",[254,1801,366],{"class":365},[254,1803,1804],{"class":271}," ctx",[254,1806,431],{"class":267},[254,1808,1809],{"class":271},"event",[254,1811,1812],{"class":396},"))",[254,1814,739],{"class":267},[254,1816,1817,1820],{"class":256,"line":759},[254,1818,1819],{"class":267},"    }",[254,1821,457],{"class":396},[254,1823,1824,1826],{"class":256,"line":772},[254,1825,883],{"class":267},[254,1827,457],{"class":396},[254,1829,1830],{"class":256,"line":785},[254,1831,337],{"emptyLinePlaceholder":336},[254,1833,1834,1836,1838,1840,1842,1844,1846,1848,1850,1852,1854,1856],{"class":256,"line":790},[254,1835,428],{"class":271},[254,1837,431],{"class":267},[254,1839,434],{"class":271},[254,1841,431],{"class":267},[254,1843,439],{"class":349},[254,1845,353],{"class":396},[254,1847,444],{"class":267},[254,1849,447],{"class":284},[254,1851,444],{"class":267},[254,1853,452],{"class":267},[254,1855,405],{"class":271},[254,1857,457],{"class":396},[254,1859,1860,1862,1864,1866,1868,1870,1872,1874,1876,1878,1880,1882,1884,1886,1888,1890],{"class":256,"line":802},[254,1861,428],{"class":271},[254,1863,431],{"class":267},[254,1865,434],{"class":271},[254,1867,431],{"class":267},[254,1869,439],{"class":349},[254,1871,353],{"class":396},[254,1873,444],{"class":267},[254,1875,477],{"class":284},[254,1877,444],{"class":267},[254,1879,452],{"class":267},[254,1881,484],{"class":267},[254,1883,366],{"class":365},[254,1885,405],{"class":271},[254,1887,431],{"class":267},[254,1889,493],{"class":349},[254,1891,417],{"class":396},[254,1893,1894,1896],{"class":256,"line":827},[254,1895,501],{"class":267},[254,1897,457],{"class":271},[239,1899,1901],{"id":1900},"standalone-usage-without-nitro","Standalone Usage (Without Nitro)",[235,1903,1904,1905,1908,1909,1912],{},"The pipeline works outside of Nitro. Use the ",[251,1906,1907],{},"drain"," option in ",[251,1910,1911],{},"initLogger"," to wire it up:",[243,1914,1917],{"className":245,"code":1915,"filename":1916,"language":248,"meta":249,"style":249},"import type { DrainContext } from 'evlog'\nimport { initLogger, log } from 'evlog'\nimport { createDrainPipeline } from 'evlog\u002Fpipeline'\nimport { createAxiomDrain } from 'evlog\u002Faxiom'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>({ batch: { size: 25 } })\nconst drain = pipeline(createAxiomDrain())\n\ninitLogger({ drain })\n\nlog.info({ action: 'started' }) \u002F\u002F batched and drained\n\n\u002F\u002F Flush before exit\nawait drain.flush()\n","index.ts",[251,1918,1919,1939,1963,1981,1999,2003,2047,2064,2068,2082,2086,2120,2124,2129],{"__ignoreMap":249},[254,1920,1921,1923,1925,1927,1929,1931,1933,1935,1937],{"class":256,"line":257},[254,1922,261],{"class":260},[254,1924,264],{"class":260},[254,1926,268],{"class":267},[254,1928,272],{"class":271},[254,1930,275],{"class":267},[254,1932,278],{"class":260},[254,1934,281],{"class":267},[254,1936,285],{"class":284},[254,1938,288],{"class":267},[254,1940,1941,1943,1945,1948,1950,1953,1955,1957,1959,1961],{"class":256,"line":291},[254,1942,261],{"class":260},[254,1944,268],{"class":267},[254,1946,1947],{"class":271}," initLogger",[254,1949,452],{"class":267},[254,1951,1952],{"class":271}," log",[254,1954,275],{"class":267},[254,1956,278],{"class":260},[254,1958,281],{"class":267},[254,1960,285],{"class":284},[254,1962,288],{"class":267},[254,1964,1965,1967,1969,1971,1973,1975,1977,1979],{"class":256,"line":312},[254,1966,261],{"class":260},[254,1968,268],{"class":267},[254,1970,298],{"class":271},[254,1972,275],{"class":267},[254,1974,278],{"class":260},[254,1976,281],{"class":267},[254,1978,307],{"class":284},[254,1980,288],{"class":267},[254,1982,1983,1985,1987,1989,1991,1993,1995,1997],{"class":256,"line":333},[254,1984,261],{"class":260},[254,1986,268],{"class":267},[254,1988,319],{"class":271},[254,1990,275],{"class":267},[254,1992,278],{"class":260},[254,1994,281],{"class":267},[254,1996,328],{"class":284},[254,1998,288],{"class":267},[254,2000,2001],{"class":256,"line":340},[254,2002,337],{"emptyLinePlaceholder":336},[254,2004,2005,2008,2011,2014,2016,2018,2020,2022,2024,2027,2030,2032,2034,2036,2038,2041,2043,2045],{"class":256,"line":372},[254,2006,2007],{"class":365},"const",[254,2009,2010],{"class":271}," pipeline ",[254,2012,2013],{"class":267},"=",[254,2015,298],{"class":349},[254,2017,386],{"class":267},[254,2019,390],{"class":389},[254,2021,393],{"class":267},[254,2023,353],{"class":271},[254,2025,2026],{"class":267},"{",[254,2028,2029],{"class":396}," batch",[254,2031,677],{"class":267},[254,2033,268],{"class":267},[254,2035,1665],{"class":396},[254,2037,677],{"class":267},[254,2039,2040],{"class":689}," 25",[254,2042,275],{"class":267},[254,2044,275],{"class":267},[254,2046,457],{"class":271},[254,2048,2049,2051,2054,2056,2058,2060,2062],{"class":256,"line":400},[254,2050,2007],{"class":365},[254,2052,2053],{"class":271}," drain ",[254,2055,2013],{"class":267},[254,2057,378],{"class":349},[254,2059,353],{"class":271},[254,2061,414],{"class":349},[254,2063,417],{"class":271},[254,2065,2066],{"class":256,"line":420},[254,2067,337],{"emptyLinePlaceholder":336},[254,2069,2070,2072,2074,2076,2078,2080],{"class":256,"line":425},[254,2071,1911],{"class":349},[254,2073,353],{"class":271},[254,2075,2026],{"class":267},[254,2077,2053],{"class":271},[254,2079,501],{"class":267},[254,2081,457],{"class":271},[254,2083,2084],{"class":256,"line":460},[254,2085,337],{"emptyLinePlaceholder":336},[254,2087,2088,2091,2093,2096,2098,2100,2103,2105,2107,2110,2112,2114,2117],{"class":256,"line":498},[254,2089,2090],{"class":271},"log",[254,2092,431],{"class":267},[254,2094,2095],{"class":349},"info",[254,2097,353],{"class":271},[254,2099,2026],{"class":267},[254,2101,2102],{"class":396}," action",[254,2104,677],{"class":267},[254,2106,281],{"class":267},[254,2108,2109],{"class":284},"started",[254,2111,444],{"class":267},[254,2113,275],{"class":267},[254,2115,2116],{"class":271},") ",[254,2118,2119],{"class":695},"\u002F\u002F batched and drained\n",[254,2121,2122],{"class":256,"line":728},[254,2123,337],{"emptyLinePlaceholder":336},[254,2125,2126],{"class":256,"line":742},[254,2127,2128],{"class":695},"\u002F\u002F Flush before exit\n",[254,2130,2131,2134,2136,2138,2140],{"class":256,"line":759},[254,2132,2133],{"class":260},"await",[254,2135,405],{"class":271},[254,2137,431],{"class":267},[254,2139,493],{"class":349},[254,2141,397],{"class":271},[505,2143,2146,2147,2154],{"color":2144,"icon":2145},"neutral","i-lucide-arrow-right","See the full ",[2148,2149,2153],"a",{"href":2150,"rel":2151},"https:\u002F\u002Fgithub.com\u002FHugoRCD\u002Fevlog\u002Ftree\u002Fmain\u002Fexamples\u002Fbun-script",[2152],"nofollow","bun-script example"," for a complete working script.",[505,2156,2157,2158,2161],{"color":2144,"icon":187},"See the ",[2148,2159,2160],{"href":47},"Next.js guide"," for a working implementation.",[239,2163,2165],{"id":2164},"next-steps","Next Steps",[2167,2168,2169,2175,2180],"ul",{},[522,2170,2171,2174],{},[2148,2172,2173],{"href":155},"Adapters Overview"," - Available built-in adapters",[522,2176,2177,2179],{},[2148,2178,184],{"href":185}," - Build your own drain function",[522,2181,2182,2184],{},[2148,2183,131],{"href":132}," - Security and production tips",[2186,2187,2188],"style",{},"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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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}",{"title":249,"searchDepth":291,"depth":291,"links":2190},[2191,2192,2193,2196,2197,2198,2199,2200,2201],{"id":241,"depth":291,"text":20},{"id":516,"depth":291,"text":517},{"id":562,"depth":291,"text":563,"children":2194},[2195],{"id":985,"depth":312,"text":986},{"id":1135,"depth":291,"text":1136},{"id":1194,"depth":291,"text":1195},{"id":1265,"depth":291,"text":1266},{"id":1563,"depth":291,"text":1564},{"id":1900,"depth":291,"text":1901},{"id":2164,"depth":291,"text":2165},"Batch events, retry on failure, and protect against buffer overflow with the shared drain pipeline. Supports fan-out to multiple adapters.","md",[2205,2207],{"label":2173,"icon":157,"to":155,"color":2144,"variant":2206},"subtle",{"label":184,"icon":187,"to":185,"color":2144,"variant":2206},{},{"title":189,"icon":192},{"title":230,"description":2202},"lCmg8fzHIHkTS2oAMsgOM8g7hBPN3jczQEWDmHRVKJE",[2213,2215],{"title":184,"path":185,"stem":186,"description":2214,"icon":187,"children":-1},"Build your own adapter to send logs to any destination. Factory patterns, batching, filtering, and error handling best practices.",{"title":194,"path":195,"stem":196,"description":2216,"icon":197,"children":-1},"Framework-agnostic browser log transport for sending client-side logs to your server via fetch or sendBeacon. Works with any frontend stack.",1773428031084]