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