[{"data":1,"prerenderedAt":2010},["ShallowReactive",2],{"navigation_docs":3,"-frameworks-standalone":219,"-frameworks-standalone-surround":2005},[4,30,105,139,188,205],{"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},"Frameworks","/frameworks","2.frameworks",[35,40,45,50,55,60,65,70,75,80,85,90,95,100],{"title":36,"path":37,"stem":38,"icon":39},"Overview","/frameworks/overview","2.frameworks/00.overview","i-lucide-layout-grid",{"title":41,"path":42,"stem":43,"icon":44},"Nuxt","/frameworks/nuxt","2.frameworks/01.nuxt","i-simple-icons-nuxtdotjs",{"title":46,"path":47,"stem":48,"icon":49},"Next.js","/frameworks/nextjs","2.frameworks/02.nextjs","i-simple-icons-nextdotjs",{"title":51,"path":52,"stem":53,"icon":54},"SvelteKit","/frameworks/sveltekit","2.frameworks/03.sveltekit","i-simple-icons-svelte",{"title":56,"path":57,"stem":58,"icon":59},"Nitro","/frameworks/nitro","2.frameworks/04.nitro","i-custom-nitro",{"title":61,"path":62,"stem":63,"icon":64},"TanStack Start","/frameworks/tanstack-start","2.frameworks/05.tanstack-start","i-custom-tanstack",{"title":66,"path":67,"stem":68,"icon":69},"NestJS","/frameworks/nestjs","2.frameworks/06.nestjs","i-simple-icons-nestjs",{"title":71,"path":72,"stem":73,"icon":74},"Express","/frameworks/express","2.frameworks/07.express","i-simple-icons-express",{"title":76,"path":77,"stem":78,"icon":79},"Hono","/frameworks/hono","2.frameworks/08.hono","i-simple-icons-hono",{"title":81,"path":82,"stem":83,"icon":84},"Fastify","/frameworks/fastify","2.frameworks/09.fastify","i-simple-icons-fastify",{"title":86,"path":87,"stem":88,"icon":89},"Elysia","/frameworks/elysia","2.frameworks/10.elysia","i-custom-elysia",{"title":91,"path":92,"stem":93,"icon":94},"Cloudflare Workers","/frameworks/cloudflare-workers","2.frameworks/11.cloudflare-workers","i-simple-icons-cloudflare",{"title":96,"path":97,"stem":98,"icon":99},"Standalone","/frameworks/standalone","2.frameworks/12.standalone","i-simple-icons-typescript",{"title":101,"path":102,"stem":103,"icon":104},"Astro","/frameworks/astro","2.frameworks/13.astro","i-simple-icons-astro",{"title":106,"path":107,"stem":108,"children":109,"page":29},"Core Concepts","/core-concepts","3.core-concepts",[110,115,120,125,129,134],{"title":111,"path":112,"stem":113,"icon":114},"Wide Events","/core-concepts/wide-events","3.core-concepts/1.wide-events","i-lucide-layers",{"title":116,"path":117,"stem":118,"icon":119},"Structured Errors","/core-concepts/structured-errors","3.core-concepts/2.structured-errors","i-lucide-shield-alert",{"title":121,"path":122,"stem":123,"icon":124},"Best Practices","/core-concepts/best-practices","3.core-concepts/3.best-practices","i-lucide-shield-check",{"title":126,"path":127,"stem":128,"icon":99},"Typed Fields","/core-concepts/typed-fields","3.core-concepts/4.typed-fields",{"title":130,"path":131,"stem":132,"icon":133},"Sampling","/core-concepts/sampling","3.core-concepts/5.sampling","i-lucide-filter",{"title":135,"path":136,"stem":137,"icon":138},"Client Logging","/core-concepts/client-logging","3.core-concepts/6.client-logging","i-lucide-monitor",{"title":140,"path":141,"stem":142,"children":143,"page":29},"Adapters","/adapters","4.adapters",[144,148,153,158,163,168,173,178,183],{"title":36,"path":145,"stem":146,"icon":147},"/adapters/overview","4.adapters/1.overview","i-custom-plug",{"title":149,"path":150,"stem":151,"icon":152},"Axiom","/adapters/axiom","4.adapters/2.axiom","i-custom-axiom",{"title":154,"path":155,"stem":156,"icon":157},"OTLP","/adapters/otlp","4.adapters/3.otlp","i-simple-icons-opentelemetry",{"title":159,"path":160,"stem":161,"icon":162},"PostHog","/adapters/posthog","4.adapters/4.posthog","i-simple-icons-posthog",{"title":164,"path":165,"stem":166,"icon":167},"Sentry","/adapters/sentry","4.adapters/5.sentry","i-simple-icons-sentry",{"title":169,"path":170,"stem":171,"icon":172},"Better Stack","/adapters/better-stack","4.adapters/6.better-stack","i-simple-icons-betterstack",{"title":174,"path":175,"stem":176,"icon":177},"Custom Adapters","/adapters/custom","4.adapters/7.custom","i-lucide-code",{"title":179,"path":180,"stem":181,"icon":182},"Pipeline","/adapters/pipeline","4.adapters/8.pipeline","i-lucide-workflow",{"title":184,"path":185,"stem":186,"icon":187},"Browser","/adapters/browser","4.adapters/9.browser","i-lucide-globe",{"title":189,"path":190,"stem":191,"children":192,"page":29},"Enrichers","/enrichers","5.enrichers",[193,196,201],{"title":36,"path":194,"stem":195,"icon":28},"/enrichers/overview","5.enrichers/1.overview",{"title":197,"path":198,"stem":199,"icon":200},"Built-in","/enrichers/built-in","5.enrichers/2.built-in","i-lucide-puzzle",{"title":202,"path":203,"stem":204,"icon":177},"Custom","/enrichers/custom","5.enrichers/3.custom",{"title":206,"path":207,"stem":208,"children":209,"page":29},"NuxtHub","/nuxthub","6.nuxthub",[210,214],{"title":36,"path":211,"stem":212,"icon":213},"/nuxthub/overview","6.nuxthub/1.overview","i-lucide-database",{"title":215,"path":216,"stem":217,"icon":218},"Retention","/nuxthub/retention","6.nuxthub/2.retention","i-lucide-clock",{"id":220,"title":221,"body":222,"description":1998,"extension":1999,"links":2000,"meta":2001,"navigation":2002,"path":97,"seo":2003,"stem":98,"__hash__":2004},"docs/2.frameworks/12.standalone.md","Standalone TypeScript",{"type":223,"value":224,"toc":1988},"minimark",[225,238,242,247,272,276,726,734,738,741,750,853,861,993,1000,1003,1006,1331,1389,1393,1400,1740,1744,1749,1965,1972,1984],[226,227,228,229,233,234,237],"p",{},"For scripts, CLI tools, queue workers, cron jobs, and any TypeScript process that doesn't use a web framework, evlog provides ",[230,231,232],"code",{},"createLogger"," and ",[230,235,236],{},"createRequestLogger"," from the core package.",[239,240,20],"h2",{"id":241},"quick-start",[243,244,246],"h3",{"id":245},"_1-install","1. Install",[248,249,254],"pre",{"className":250,"code":251,"language":252,"meta":253,"style":253},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","bun add evlog\n","bash","",[230,255,256],{"__ignoreMap":253},[257,258,261,265,269],"span",{"class":259,"line":260},"line",1,[257,262,264],{"class":263},"sBMFI","bun",[257,266,268],{"class":267},"sfazB"," add",[257,270,271],{"class":267}," evlog\n",[243,273,275],{"id":274},"_2-initialize-and-create-loggers","2. Initialize and create loggers",[248,277,282],{"className":278,"code":279,"filename":280,"language":281,"meta":253,"style":253},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import type { DrainContext } from 'evlog'\nimport { initLogger, log, createLogger } from 'evlog'\nimport { createAxiomDrain } from 'evlog/axiom'\nimport { createDrainPipeline } from 'evlog/pipeline'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>({ batch: { size: 10 } })\nconst drain = pipeline(createAxiomDrain())\n\ninitLogger({\n  env: { service: 'my-script', environment: 'production' },\n  drain,\n})\n\n// Every log is automatically drained\nlog.info({ action: 'sync_started' })\n\nconst syncLog = createLogger({ jobId: 'sync-001', source: 'postgres', target: 's3' })\nsyncLog.set({ recordsSynced: 150 })\nsyncLog.emit() // drained automatically\n\n// Flush remaining events before exit\nawait drain.flush()\n","scripts/sync-job.ts","typescript",[230,283,284,316,347,368,389,396,452,473,478,489,529,538,546,551,558,590,595,655,682,698,703,709],{"__ignoreMap":253},[257,285,286,290,293,297,301,304,307,310,313],{"class":259,"line":260},[257,287,289],{"class":288},"s7zQu","import",[257,291,292],{"class":288}," type",[257,294,296],{"class":295},"sMK4o"," {",[257,298,300],{"class":299},"sTEyZ"," DrainContext",[257,302,303],{"class":295}," }",[257,305,306],{"class":288}," from",[257,308,309],{"class":295}," '",[257,311,312],{"class":267},"evlog",[257,314,315],{"class":295},"'\n",[257,317,319,321,323,326,329,332,334,337,339,341,343,345],{"class":259,"line":318},2,[257,320,289],{"class":288},[257,322,296],{"class":295},[257,324,325],{"class":299}," initLogger",[257,327,328],{"class":295},",",[257,330,331],{"class":299}," log",[257,333,328],{"class":295},[257,335,336],{"class":299}," createLogger",[257,338,303],{"class":295},[257,340,306],{"class":288},[257,342,309],{"class":295},[257,344,312],{"class":267},[257,346,315],{"class":295},[257,348,350,352,354,357,359,361,363,366],{"class":259,"line":349},3,[257,351,289],{"class":288},[257,353,296],{"class":295},[257,355,356],{"class":299}," createAxiomDrain",[257,358,303],{"class":295},[257,360,306],{"class":288},[257,362,309],{"class":295},[257,364,365],{"class":267},"evlog/axiom",[257,367,315],{"class":295},[257,369,371,373,375,378,380,382,384,387],{"class":259,"line":370},4,[257,372,289],{"class":288},[257,374,296],{"class":295},[257,376,377],{"class":299}," createDrainPipeline",[257,379,303],{"class":295},[257,381,306],{"class":288},[257,383,309],{"class":295},[257,385,386],{"class":267},"evlog/pipeline",[257,388,315],{"class":295},[257,390,392],{"class":259,"line":391},5,[257,393,395],{"emptyLinePlaceholder":394},true,"\n",[257,397,399,403,406,409,412,415,418,421,424,427,431,434,436,439,441,445,447,449],{"class":259,"line":398},6,[257,400,402],{"class":401},"spNyl","const",[257,404,405],{"class":299}," pipeline ",[257,407,408],{"class":295},"=",[257,410,377],{"class":411},"s2Zo4",[257,413,414],{"class":295},"\u003C",[257,416,417],{"class":263},"DrainContext",[257,419,420],{"class":295},">",[257,422,423],{"class":299},"(",[257,425,426],{"class":295},"{",[257,428,430],{"class":429},"swJcz"," batch",[257,432,433],{"class":295},":",[257,435,296],{"class":295},[257,437,438],{"class":429}," size",[257,440,433],{"class":295},[257,442,444],{"class":443},"sbssI"," 10",[257,446,303],{"class":295},[257,448,303],{"class":295},[257,450,451],{"class":299},")\n",[257,453,455,457,460,462,465,467,470],{"class":259,"line":454},7,[257,456,402],{"class":401},[257,458,459],{"class":299}," drain ",[257,461,408],{"class":295},[257,463,464],{"class":411}," pipeline",[257,466,423],{"class":299},[257,468,469],{"class":411},"createAxiomDrain",[257,471,472],{"class":299},"())\n",[257,474,476],{"class":259,"line":475},8,[257,477,395],{"emptyLinePlaceholder":394},[257,479,481,484,486],{"class":259,"line":480},9,[257,482,483],{"class":411},"initLogger",[257,485,423],{"class":299},[257,487,488],{"class":295},"{\n",[257,490,492,495,497,499,502,504,506,509,512,514,517,519,521,524,526],{"class":259,"line":491},10,[257,493,494],{"class":429},"  env",[257,496,433],{"class":295},[257,498,296],{"class":295},[257,500,501],{"class":429}," service",[257,503,433],{"class":295},[257,505,309],{"class":295},[257,507,508],{"class":267},"my-script",[257,510,511],{"class":295},"'",[257,513,328],{"class":295},[257,515,516],{"class":429}," environment",[257,518,433],{"class":295},[257,520,309],{"class":295},[257,522,523],{"class":267},"production",[257,525,511],{"class":295},[257,527,528],{"class":295}," },\n",[257,530,532,535],{"class":259,"line":531},11,[257,533,534],{"class":299},"  drain",[257,536,537],{"class":295},",\n",[257,539,541,544],{"class":259,"line":540},12,[257,542,543],{"class":295},"}",[257,545,451],{"class":299},[257,547,549],{"class":259,"line":548},13,[257,550,395],{"emptyLinePlaceholder":394},[257,552,554],{"class":259,"line":553},14,[257,555,557],{"class":556},"sHwdD","// Every log is automatically drained\n",[257,559,561,564,567,570,572,574,577,579,581,584,586,588],{"class":259,"line":560},15,[257,562,563],{"class":299},"log",[257,565,566],{"class":295},".",[257,568,569],{"class":411},"info",[257,571,423],{"class":299},[257,573,426],{"class":295},[257,575,576],{"class":429}," action",[257,578,433],{"class":295},[257,580,309],{"class":295},[257,582,583],{"class":267},"sync_started",[257,585,511],{"class":295},[257,587,303],{"class":295},[257,589,451],{"class":299},[257,591,593],{"class":259,"line":592},16,[257,594,395],{"emptyLinePlaceholder":394},[257,596,598,600,603,605,607,609,611,614,616,618,621,623,625,628,630,632,635,637,639,642,644,646,649,651,653],{"class":259,"line":597},17,[257,599,402],{"class":401},[257,601,602],{"class":299}," syncLog ",[257,604,408],{"class":295},[257,606,336],{"class":411},[257,608,423],{"class":299},[257,610,426],{"class":295},[257,612,613],{"class":429}," jobId",[257,615,433],{"class":295},[257,617,309],{"class":295},[257,619,620],{"class":267},"sync-001",[257,622,511],{"class":295},[257,624,328],{"class":295},[257,626,627],{"class":429}," source",[257,629,433],{"class":295},[257,631,309],{"class":295},[257,633,634],{"class":267},"postgres",[257,636,511],{"class":295},[257,638,328],{"class":295},[257,640,641],{"class":429}," target",[257,643,433],{"class":295},[257,645,309],{"class":295},[257,647,648],{"class":267},"s3",[257,650,511],{"class":295},[257,652,303],{"class":295},[257,654,451],{"class":299},[257,656,658,661,663,666,668,670,673,675,678,680],{"class":259,"line":657},18,[257,659,660],{"class":299},"syncLog",[257,662,566],{"class":295},[257,664,665],{"class":411},"set",[257,667,423],{"class":299},[257,669,426],{"class":295},[257,671,672],{"class":429}," recordsSynced",[257,674,433],{"class":295},[257,676,677],{"class":443}," 150",[257,679,303],{"class":295},[257,681,451],{"class":299},[257,683,685,687,689,692,695],{"class":259,"line":684},19,[257,686,660],{"class":299},[257,688,566],{"class":295},[257,690,691],{"class":411},"emit",[257,693,694],{"class":299},"() ",[257,696,697],{"class":556},"// drained automatically\n",[257,699,701],{"class":259,"line":700},20,[257,702,395],{"emptyLinePlaceholder":394},[257,704,706],{"class":259,"line":705},21,[257,707,708],{"class":556},"// Flush remaining events before exit\n",[257,710,712,715,718,720,723],{"class":259,"line":711},22,[257,713,714],{"class":288},"await",[257,716,717],{"class":299}," drain",[257,719,566],{"class":295},[257,721,722],{"class":411},"flush",[257,724,725],{"class":299},"()\n",[727,728,729,730,733],"callout",{"color":569,"icon":13},"Always call ",[230,731,732],{},"drain.flush()"," before the process exits to ensure all buffered events are sent.",[239,735,737],{"id":736},"createlogger-vs-createrequestlogger","createLogger vs createRequestLogger",[226,739,740],{},"evlog provides two manual logger constructors:",[226,742,743,749],{},[744,745,746],"strong",{},[230,747,748],{},"createLogger(context)"," — For non-HTTP contexts (scripts, CLI, queues):",[248,751,753],{"className":278,"code":752,"language":281,"meta":253,"style":253},"import { createLogger } from 'evlog'\n\nconst log = createLogger({ jobId: 'migrate-001', source: 'postgres' })\nlog.set({ recordsProcessed: 500 })\nlog.emit()\n",[230,754,755,773,777,819,843],{"__ignoreMap":253},[257,756,757,759,761,763,765,767,769,771],{"class":259,"line":260},[257,758,289],{"class":288},[257,760,296],{"class":295},[257,762,336],{"class":299},[257,764,303],{"class":295},[257,766,306],{"class":288},[257,768,309],{"class":295},[257,770,312],{"class":267},[257,772,315],{"class":295},[257,774,775],{"class":259,"line":318},[257,776,395],{"emptyLinePlaceholder":394},[257,778,779,781,784,786,788,790,792,794,796,798,801,803,805,807,809,811,813,815,817],{"class":259,"line":349},[257,780,402],{"class":401},[257,782,783],{"class":299}," log ",[257,785,408],{"class":295},[257,787,336],{"class":411},[257,789,423],{"class":299},[257,791,426],{"class":295},[257,793,613],{"class":429},[257,795,433],{"class":295},[257,797,309],{"class":295},[257,799,800],{"class":267},"migrate-001",[257,802,511],{"class":295},[257,804,328],{"class":295},[257,806,627],{"class":429},[257,808,433],{"class":295},[257,810,309],{"class":295},[257,812,634],{"class":267},[257,814,511],{"class":295},[257,816,303],{"class":295},[257,818,451],{"class":299},[257,820,821,823,825,827,829,831,834,836,839,841],{"class":259,"line":370},[257,822,563],{"class":299},[257,824,566],{"class":295},[257,826,665],{"class":411},[257,828,423],{"class":299},[257,830,426],{"class":295},[257,832,833],{"class":429}," recordsProcessed",[257,835,433],{"class":295},[257,837,838],{"class":443}," 500",[257,840,303],{"class":295},[257,842,451],{"class":299},[257,844,845,847,849,851],{"class":259,"line":391},[257,846,563],{"class":299},[257,848,566],{"class":295},[257,850,691],{"class":411},[257,852,725],{"class":299},[226,854,855,860],{},[744,856,857],{},[230,858,859],{},"createRequestLogger(requestMeta)"," — For HTTP-like contexts where you want method/path/status tracking:",[248,862,864],{"className":278,"code":863,"language":281,"meta":253,"style":253},"import { createRequestLogger } from 'evlog'\n\nconst log = createRequestLogger({\n  method: 'POST',\n  path: '/webhook/stripe',\n})\nlog.set({ event: 'invoice.paid', customerId: 'cus_123' })\nlog.emit()\n",[230,865,866,885,889,903,919,935,941,983],{"__ignoreMap":253},[257,867,868,870,872,875,877,879,881,883],{"class":259,"line":260},[257,869,289],{"class":288},[257,871,296],{"class":295},[257,873,874],{"class":299}," createRequestLogger",[257,876,303],{"class":295},[257,878,306],{"class":288},[257,880,309],{"class":295},[257,882,312],{"class":267},[257,884,315],{"class":295},[257,886,887],{"class":259,"line":318},[257,888,395],{"emptyLinePlaceholder":394},[257,890,891,893,895,897,899,901],{"class":259,"line":349},[257,892,402],{"class":401},[257,894,783],{"class":299},[257,896,408],{"class":295},[257,898,874],{"class":411},[257,900,423],{"class":299},[257,902,488],{"class":295},[257,904,905,908,910,912,915,917],{"class":259,"line":370},[257,906,907],{"class":429},"  method",[257,909,433],{"class":295},[257,911,309],{"class":295},[257,913,914],{"class":267},"POST",[257,916,511],{"class":295},[257,918,537],{"class":295},[257,920,921,924,926,928,931,933],{"class":259,"line":391},[257,922,923],{"class":429},"  path",[257,925,433],{"class":295},[257,927,309],{"class":295},[257,929,930],{"class":267},"/webhook/stripe",[257,932,511],{"class":295},[257,934,537],{"class":295},[257,936,937,939],{"class":259,"line":398},[257,938,543],{"class":295},[257,940,451],{"class":299},[257,942,943,945,947,949,951,953,956,958,960,963,965,967,970,972,974,977,979,981],{"class":259,"line":454},[257,944,563],{"class":299},[257,946,566],{"class":295},[257,948,665],{"class":411},[257,950,423],{"class":299},[257,952,426],{"class":295},[257,954,955],{"class":429}," event",[257,957,433],{"class":295},[257,959,309],{"class":295},[257,961,962],{"class":267},"invoice.paid",[257,964,511],{"class":295},[257,966,328],{"class":295},[257,968,969],{"class":429}," customerId",[257,971,433],{"class":295},[257,973,309],{"class":295},[257,975,976],{"class":267},"cus_123",[257,978,511],{"class":295},[257,980,303],{"class":295},[257,982,451],{"class":299},[257,984,985,987,989,991],{"class":259,"line":475},[257,986,563],{"class":299},[257,988,566],{"class":295},[257,990,691],{"class":411},[257,992,725],{"class":299},[226,994,995,996,999],{},"Both require manual ",[230,997,998],{},"log.emit()"," calls — there is no automatic lifecycle to hook into.",[239,1001,111],{"id":1002},"wide-events",[226,1004,1005],{},"Build up context progressively, then emit:",[248,1007,1010],{"className":278,"code":1008,"filename":1009,"language":281,"meta":253,"style":253},"import { initLogger, createLogger } from 'evlog'\n\ninitLogger({\n  env: { service: 'migrate' },\n})\n\nconst log = createLogger({ task: 'user-migration' })\n\nconst users = await db.query('SELECT * FROM legacy_users')\nlog.set({ found: users.length })\n\nlet migrated = 0\nfor (const user of users) {\n  await newDb.upsert({ id: user.id, email: user.email, plan: user.plan })\n  migrated++\n}\n\nlog.set({ migrated, status: 'complete' })\nlog.emit()\n","scripts/migrate-users.ts",[230,1011,1012,1034,1038,1046,1067,1073,1077,1107,1111,1142,1171,1175,1188,1209,1271,1279,1284,1288,1321],{"__ignoreMap":253},[257,1013,1014,1016,1018,1020,1022,1024,1026,1028,1030,1032],{"class":259,"line":260},[257,1015,289],{"class":288},[257,1017,296],{"class":295},[257,1019,325],{"class":299},[257,1021,328],{"class":295},[257,1023,336],{"class":299},[257,1025,303],{"class":295},[257,1027,306],{"class":288},[257,1029,309],{"class":295},[257,1031,312],{"class":267},[257,1033,315],{"class":295},[257,1035,1036],{"class":259,"line":318},[257,1037,395],{"emptyLinePlaceholder":394},[257,1039,1040,1042,1044],{"class":259,"line":349},[257,1041,483],{"class":411},[257,1043,423],{"class":299},[257,1045,488],{"class":295},[257,1047,1048,1050,1052,1054,1056,1058,1060,1063,1065],{"class":259,"line":370},[257,1049,494],{"class":429},[257,1051,433],{"class":295},[257,1053,296],{"class":295},[257,1055,501],{"class":429},[257,1057,433],{"class":295},[257,1059,309],{"class":295},[257,1061,1062],{"class":267},"migrate",[257,1064,511],{"class":295},[257,1066,528],{"class":295},[257,1068,1069,1071],{"class":259,"line":391},[257,1070,543],{"class":295},[257,1072,451],{"class":299},[257,1074,1075],{"class":259,"line":398},[257,1076,395],{"emptyLinePlaceholder":394},[257,1078,1079,1081,1083,1085,1087,1089,1091,1094,1096,1098,1101,1103,1105],{"class":259,"line":454},[257,1080,402],{"class":401},[257,1082,783],{"class":299},[257,1084,408],{"class":295},[257,1086,336],{"class":411},[257,1088,423],{"class":299},[257,1090,426],{"class":295},[257,1092,1093],{"class":429}," task",[257,1095,433],{"class":295},[257,1097,309],{"class":295},[257,1099,1100],{"class":267},"user-migration",[257,1102,511],{"class":295},[257,1104,303],{"class":295},[257,1106,451],{"class":299},[257,1108,1109],{"class":259,"line":475},[257,1110,395],{"emptyLinePlaceholder":394},[257,1112,1113,1115,1118,1120,1123,1126,1128,1131,1133,1135,1138,1140],{"class":259,"line":480},[257,1114,402],{"class":401},[257,1116,1117],{"class":299}," users ",[257,1119,408],{"class":295},[257,1121,1122],{"class":288}," await",[257,1124,1125],{"class":299}," db",[257,1127,566],{"class":295},[257,1129,1130],{"class":411},"query",[257,1132,423],{"class":299},[257,1134,511],{"class":295},[257,1136,1137],{"class":267},"SELECT * FROM legacy_users",[257,1139,511],{"class":295},[257,1141,451],{"class":299},[257,1143,1144,1146,1148,1150,1152,1154,1157,1159,1162,1164,1167,1169],{"class":259,"line":491},[257,1145,563],{"class":299},[257,1147,566],{"class":295},[257,1149,665],{"class":411},[257,1151,423],{"class":299},[257,1153,426],{"class":295},[257,1155,1156],{"class":429}," found",[257,1158,433],{"class":295},[257,1160,1161],{"class":299}," users",[257,1163,566],{"class":295},[257,1165,1166],{"class":299},"length ",[257,1168,543],{"class":295},[257,1170,451],{"class":299},[257,1172,1173],{"class":259,"line":531},[257,1174,395],{"emptyLinePlaceholder":394},[257,1176,1177,1180,1183,1185],{"class":259,"line":540},[257,1178,1179],{"class":401},"let",[257,1181,1182],{"class":299}," migrated ",[257,1184,408],{"class":295},[257,1186,1187],{"class":443}," 0\n",[257,1189,1190,1193,1196,1198,1201,1204,1207],{"class":259,"line":548},[257,1191,1192],{"class":288},"for",[257,1194,1195],{"class":299}," (",[257,1197,402],{"class":401},[257,1199,1200],{"class":299}," user ",[257,1202,1203],{"class":295},"of",[257,1205,1206],{"class":299}," users) ",[257,1208,488],{"class":295},[257,1210,1211,1214,1217,1219,1222,1224,1226,1229,1231,1234,1236,1239,1241,1244,1246,1248,1250,1253,1255,1258,1260,1262,1264,1267,1269],{"class":259,"line":553},[257,1212,1213],{"class":288},"  await",[257,1215,1216],{"class":299}," newDb",[257,1218,566],{"class":295},[257,1220,1221],{"class":411},"upsert",[257,1223,423],{"class":429},[257,1225,426],{"class":295},[257,1227,1228],{"class":429}," id",[257,1230,433],{"class":295},[257,1232,1233],{"class":299}," user",[257,1235,566],{"class":295},[257,1237,1238],{"class":299},"id",[257,1240,328],{"class":295},[257,1242,1243],{"class":429}," email",[257,1245,433],{"class":295},[257,1247,1233],{"class":299},[257,1249,566],{"class":295},[257,1251,1252],{"class":299},"email",[257,1254,328],{"class":295},[257,1256,1257],{"class":429}," plan",[257,1259,433],{"class":295},[257,1261,1233],{"class":299},[257,1263,566],{"class":295},[257,1265,1266],{"class":299},"plan",[257,1268,303],{"class":295},[257,1270,451],{"class":429},[257,1272,1273,1276],{"class":259,"line":560},[257,1274,1275],{"class":299},"  migrated",[257,1277,1278],{"class":295},"++\n",[257,1280,1281],{"class":259,"line":592},[257,1282,1283],{"class":295},"}\n",[257,1285,1286],{"class":259,"line":597},[257,1287,395],{"emptyLinePlaceholder":394},[257,1289,1290,1292,1294,1296,1298,1300,1303,1305,1308,1310,1312,1315,1317,1319],{"class":259,"line":657},[257,1291,563],{"class":299},[257,1293,566],{"class":295},[257,1295,665],{"class":411},[257,1297,423],{"class":299},[257,1299,426],{"class":295},[257,1301,1302],{"class":299}," migrated",[257,1304,328],{"class":295},[257,1306,1307],{"class":429}," status",[257,1309,433],{"class":295},[257,1311,309],{"class":295},[257,1313,1314],{"class":267},"complete",[257,1316,511],{"class":295},[257,1318,303],{"class":295},[257,1320,451],{"class":299},[257,1322,1323,1325,1327,1329],{"class":259,"line":684},[257,1324,563],{"class":299},[257,1326,566],{"class":295},[257,1328,691],{"class":411},[257,1330,725],{"class":299},[248,1332,1335],{"className":250,"code":1333,"filename":1334,"language":252,"meta":253,"style":253},"14:58:15 INFO [migrate] user-migration\n  ├─ migrated: 1250\n  ├─ found: 1250\n  ├─ status: complete\n  └─ task: user-migration\n","Terminal output",[230,1336,1337,1348,1359,1368,1378],{"__ignoreMap":253},[257,1338,1339,1342,1345],{"class":259,"line":260},[257,1340,1341],{"class":263},"14:58:15",[257,1343,1344],{"class":267}," INFO",[257,1346,1347],{"class":299}," [migrate] user-migration\n",[257,1349,1350,1353,1356],{"class":259,"line":318},[257,1351,1352],{"class":263},"  ├─",[257,1354,1355],{"class":267}," migrated:",[257,1357,1358],{"class":443}," 1250\n",[257,1360,1361,1363,1366],{"class":259,"line":349},[257,1362,1352],{"class":263},[257,1364,1365],{"class":267}," found:",[257,1367,1358],{"class":443},[257,1369,1370,1372,1375],{"class":259,"line":370},[257,1371,1352],{"class":263},[257,1373,1374],{"class":267}," status:",[257,1376,1377],{"class":267}," complete\n",[257,1379,1380,1383,1386],{"class":259,"line":391},[257,1381,1382],{"class":263},"  └─",[257,1384,1385],{"class":267}," task:",[257,1387,1388],{"class":267}," user-migration\n",[239,1390,1392],{"id":1391},"error-handling","Error Handling",[226,1394,1395,1396,1399],{},"Use ",[230,1397,1398],{},"createError"," for structured errors:",[248,1401,1403],{"className":278,"code":1402,"filename":280,"language":281,"meta":253,"style":253},"import { createError, parseError } from 'evlog'\n\ntry {\n  const result = await externalApi.sync()\n  if (!result.ok) {\n    throw createError({\n      message: 'Sync failed',\n      why: `API returned ${result.status}`,\n      fix: 'Check the API status page and retry',\n    })\n  }\n} catch (error) {\n  log.error(error instanceof Error ? error : new Error(String(error)))\n  log.emit()\n\n  const { message, why, fix } = parseError(error)\n  console.error(`${message}\\nWhy: ${why}\\nFix: ${fix}`)\n  process.exit(1)\n}\n",[230,1404,1405,1429,1433,1441,1464,1487,1498,1514,1542,1558,1565,1570,1582,1628,1638,1642,1673,1719,1736],{"__ignoreMap":253},[257,1406,1407,1409,1411,1414,1416,1419,1421,1423,1425,1427],{"class":259,"line":260},[257,1408,289],{"class":288},[257,1410,296],{"class":295},[257,1412,1413],{"class":299}," createError",[257,1415,328],{"class":295},[257,1417,1418],{"class":299}," parseError",[257,1420,303],{"class":295},[257,1422,306],{"class":288},[257,1424,309],{"class":295},[257,1426,312],{"class":267},[257,1428,315],{"class":295},[257,1430,1431],{"class":259,"line":318},[257,1432,395],{"emptyLinePlaceholder":394},[257,1434,1435,1438],{"class":259,"line":349},[257,1436,1437],{"class":288},"try",[257,1439,1440],{"class":295}," {\n",[257,1442,1443,1446,1449,1452,1454,1457,1459,1462],{"class":259,"line":370},[257,1444,1445],{"class":401},"  const",[257,1447,1448],{"class":299}," result",[257,1450,1451],{"class":295}," =",[257,1453,1122],{"class":288},[257,1455,1456],{"class":299}," externalApi",[257,1458,566],{"class":295},[257,1460,1461],{"class":411},"sync",[257,1463,725],{"class":429},[257,1465,1466,1469,1471,1474,1477,1479,1482,1485],{"class":259,"line":391},[257,1467,1468],{"class":288},"  if",[257,1470,1195],{"class":429},[257,1472,1473],{"class":295},"!",[257,1475,1476],{"class":299},"result",[257,1478,566],{"class":295},[257,1480,1481],{"class":299},"ok",[257,1483,1484],{"class":429},") ",[257,1486,488],{"class":295},[257,1488,1489,1492,1494,1496],{"class":259,"line":398},[257,1490,1491],{"class":288},"    throw",[257,1493,1413],{"class":411},[257,1495,423],{"class":429},[257,1497,488],{"class":295},[257,1499,1500,1503,1505,1507,1510,1512],{"class":259,"line":454},[257,1501,1502],{"class":429},"      message",[257,1504,433],{"class":295},[257,1506,309],{"class":295},[257,1508,1509],{"class":267},"Sync failed",[257,1511,511],{"class":295},[257,1513,537],{"class":295},[257,1515,1516,1519,1521,1524,1527,1530,1532,1534,1537,1540],{"class":259,"line":475},[257,1517,1518],{"class":429},"      why",[257,1520,433],{"class":295},[257,1522,1523],{"class":295}," `",[257,1525,1526],{"class":267},"API returned ",[257,1528,1529],{"class":295},"${",[257,1531,1476],{"class":299},[257,1533,566],{"class":295},[257,1535,1536],{"class":299},"status",[257,1538,1539],{"class":295},"}`",[257,1541,537],{"class":295},[257,1543,1544,1547,1549,1551,1554,1556],{"class":259,"line":480},[257,1545,1546],{"class":429},"      fix",[257,1548,433],{"class":295},[257,1550,309],{"class":295},[257,1552,1553],{"class":267},"Check the API status page and retry",[257,1555,511],{"class":295},[257,1557,537],{"class":295},[257,1559,1560,1563],{"class":259,"line":491},[257,1561,1562],{"class":295},"    }",[257,1564,451],{"class":429},[257,1566,1567],{"class":259,"line":531},[257,1568,1569],{"class":295},"  }\n",[257,1571,1572,1574,1577,1580],{"class":259,"line":540},[257,1573,543],{"class":295},[257,1575,1576],{"class":288}," catch",[257,1578,1579],{"class":299}," (error) ",[257,1581,488],{"class":295},[257,1583,1584,1587,1589,1592,1594,1596,1599,1602,1605,1608,1611,1614,1616,1618,1621,1623,1625],{"class":259,"line":548},[257,1585,1586],{"class":299},"  log",[257,1588,566],{"class":295},[257,1590,1591],{"class":411},"error",[257,1593,423],{"class":429},[257,1595,1591],{"class":299},[257,1597,1598],{"class":295}," instanceof",[257,1600,1601],{"class":263}," Error",[257,1603,1604],{"class":295}," ?",[257,1606,1607],{"class":299}," error",[257,1609,1610],{"class":295}," :",[257,1612,1613],{"class":295}," new",[257,1615,1601],{"class":411},[257,1617,423],{"class":429},[257,1619,1620],{"class":411},"String",[257,1622,423],{"class":429},[257,1624,1591],{"class":299},[257,1626,1627],{"class":429},")))\n",[257,1629,1630,1632,1634,1636],{"class":259,"line":553},[257,1631,1586],{"class":299},[257,1633,566],{"class":295},[257,1635,691],{"class":411},[257,1637,725],{"class":429},[257,1639,1640],{"class":259,"line":560},[257,1641,395],{"emptyLinePlaceholder":394},[257,1643,1644,1646,1648,1651,1653,1656,1658,1661,1663,1665,1667,1669,1671],{"class":259,"line":592},[257,1645,1445],{"class":401},[257,1647,296],{"class":295},[257,1649,1650],{"class":299}," message",[257,1652,328],{"class":295},[257,1654,1655],{"class":299}," why",[257,1657,328],{"class":295},[257,1659,1660],{"class":299}," fix",[257,1662,303],{"class":295},[257,1664,1451],{"class":295},[257,1666,1418],{"class":411},[257,1668,423],{"class":429},[257,1670,1591],{"class":299},[257,1672,451],{"class":429},[257,1674,1675,1678,1680,1682,1684,1687,1690,1692,1695,1698,1700,1703,1705,1707,1710,1712,1715,1717],{"class":259,"line":597},[257,1676,1677],{"class":299},"  console",[257,1679,566],{"class":295},[257,1681,1591],{"class":411},[257,1683,423],{"class":429},[257,1685,1686],{"class":295},"`${",[257,1688,1689],{"class":299},"message",[257,1691,543],{"class":295},[257,1693,1694],{"class":299},"\\n",[257,1696,1697],{"class":267},"Why: ",[257,1699,1529],{"class":295},[257,1701,1702],{"class":299},"why",[257,1704,543],{"class":295},[257,1706,1694],{"class":299},[257,1708,1709],{"class":267},"Fix: ",[257,1711,1529],{"class":295},[257,1713,1714],{"class":299},"fix",[257,1716,1539],{"class":295},[257,1718,451],{"class":429},[257,1720,1721,1724,1726,1729,1731,1734],{"class":259,"line":657},[257,1722,1723],{"class":299},"  process",[257,1725,566],{"class":295},[257,1727,1728],{"class":411},"exit",[257,1730,423],{"class":429},[257,1732,1733],{"class":443},"1",[257,1735,451],{"class":429},[257,1737,1738],{"class":259,"line":684},[257,1739,1283],{"class":295},[239,1741,1743],{"id":1742},"drain-enrichers","Drain & Enrichers",[226,1745,1746,1747,433],{},"Configure drain in ",[230,1748,483],{},[248,1750,1752],{"className":278,"code":1751,"language":281,"meta":253,"style":253},"import type { DrainContext } from 'evlog'\nimport { initLogger } from 'evlog'\nimport { createAxiomDrain } from 'evlog/axiom'\nimport { createDrainPipeline } from 'evlog/pipeline'\n\nconst pipeline = createDrainPipeline\u003CDrainContext>({\n  batch: { size: 50, intervalMs: 5000 },\n  retry: { maxAttempts: 3 },\n})\nconst drain = pipeline(createAxiomDrain())\n\ninitLogger({\n  env: { service: 'my-script' },\n  drain,\n})\n",[230,1753,1754,1774,1792,1810,1828,1832,1852,1880,1899,1905,1921,1925,1933,1953,1959],{"__ignoreMap":253},[257,1755,1756,1758,1760,1762,1764,1766,1768,1770,1772],{"class":259,"line":260},[257,1757,289],{"class":288},[257,1759,292],{"class":288},[257,1761,296],{"class":295},[257,1763,300],{"class":299},[257,1765,303],{"class":295},[257,1767,306],{"class":288},[257,1769,309],{"class":295},[257,1771,312],{"class":267},[257,1773,315],{"class":295},[257,1775,1776,1778,1780,1782,1784,1786,1788,1790],{"class":259,"line":318},[257,1777,289],{"class":288},[257,1779,296],{"class":295},[257,1781,325],{"class":299},[257,1783,303],{"class":295},[257,1785,306],{"class":288},[257,1787,309],{"class":295},[257,1789,312],{"class":267},[257,1791,315],{"class":295},[257,1793,1794,1796,1798,1800,1802,1804,1806,1808],{"class":259,"line":349},[257,1795,289],{"class":288},[257,1797,296],{"class":295},[257,1799,356],{"class":299},[257,1801,303],{"class":295},[257,1803,306],{"class":288},[257,1805,309],{"class":295},[257,1807,365],{"class":267},[257,1809,315],{"class":295},[257,1811,1812,1814,1816,1818,1820,1822,1824,1826],{"class":259,"line":370},[257,1813,289],{"class":288},[257,1815,296],{"class":295},[257,1817,377],{"class":299},[257,1819,303],{"class":295},[257,1821,306],{"class":288},[257,1823,309],{"class":295},[257,1825,386],{"class":267},[257,1827,315],{"class":295},[257,1829,1830],{"class":259,"line":391},[257,1831,395],{"emptyLinePlaceholder":394},[257,1833,1834,1836,1838,1840,1842,1844,1846,1848,1850],{"class":259,"line":398},[257,1835,402],{"class":401},[257,1837,405],{"class":299},[257,1839,408],{"class":295},[257,1841,377],{"class":411},[257,1843,414],{"class":295},[257,1845,417],{"class":263},[257,1847,420],{"class":295},[257,1849,423],{"class":299},[257,1851,488],{"class":295},[257,1853,1854,1857,1859,1861,1863,1865,1868,1870,1873,1875,1878],{"class":259,"line":454},[257,1855,1856],{"class":429},"  batch",[257,1858,433],{"class":295},[257,1860,296],{"class":295},[257,1862,438],{"class":429},[257,1864,433],{"class":295},[257,1866,1867],{"class":443}," 50",[257,1869,328],{"class":295},[257,1871,1872],{"class":429}," intervalMs",[257,1874,433],{"class":295},[257,1876,1877],{"class":443}," 5000",[257,1879,528],{"class":295},[257,1881,1882,1885,1887,1889,1892,1894,1897],{"class":259,"line":475},[257,1883,1884],{"class":429},"  retry",[257,1886,433],{"class":295},[257,1888,296],{"class":295},[257,1890,1891],{"class":429}," maxAttempts",[257,1893,433],{"class":295},[257,1895,1896],{"class":443}," 3",[257,1898,528],{"class":295},[257,1900,1901,1903],{"class":259,"line":480},[257,1902,543],{"class":295},[257,1904,451],{"class":299},[257,1906,1907,1909,1911,1913,1915,1917,1919],{"class":259,"line":491},[257,1908,402],{"class":401},[257,1910,459],{"class":299},[257,1912,408],{"class":295},[257,1914,464],{"class":411},[257,1916,423],{"class":299},[257,1918,469],{"class":411},[257,1920,472],{"class":299},[257,1922,1923],{"class":259,"line":531},[257,1924,395],{"emptyLinePlaceholder":394},[257,1926,1927,1929,1931],{"class":259,"line":540},[257,1928,483],{"class":411},[257,1930,423],{"class":299},[257,1932,488],{"class":295},[257,1934,1935,1937,1939,1941,1943,1945,1947,1949,1951],{"class":259,"line":548},[257,1936,494],{"class":429},[257,1938,433],{"class":295},[257,1940,296],{"class":295},[257,1942,501],{"class":429},[257,1944,433],{"class":295},[257,1946,309],{"class":295},[257,1948,508],{"class":267},[257,1950,511],{"class":295},[257,1952,528],{"class":295},[257,1954,1955,1957],{"class":259,"line":553},[257,1956,534],{"class":299},[257,1958,537],{"class":295},[257,1960,1961,1963],{"class":259,"line":560},[257,1962,543],{"class":295},[257,1964,451],{"class":299},[727,1966,1967,1968,1971],{"color":569,"icon":13},"See the ",[1969,1970,140],"a",{"href":145}," docs for all available drain adapters (Axiom, OTLP, PostHog, Sentry, Better Stack).",[727,1973,1976,1977,1983],{"color":1974,"icon":1975},"neutral","i-lucide-arrow-right","See the full ",[1969,1978,1982],{"href":1979,"rel":1980},"https://github.com/HugoRCD/evlog/tree/main/examples/bun-script",[1981],"nofollow","bun-script example"," for a complete working script.",[1985,1986,1987],"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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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 .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":253,"searchDepth":318,"depth":318,"links":1989},[1990,1994,1995,1996,1997],{"id":241,"depth":318,"text":20,"children":1991},[1992,1993],{"id":245,"depth":349,"text":246},{"id":274,"depth":349,"text":275},{"id":736,"depth":318,"text":737},{"id":1002,"depth":318,"text":111},{"id":1391,"depth":318,"text":1392},{"id":1742,"depth":318,"text":1743},"Using evlog in standalone TypeScript — scripts, CLI tools, queues, cron jobs, and any TypeScript process.","md",null,{},{"title":96,"icon":99},{"title":221,"description":1998},"OWSBijVaHN5iGETHCTKi0Z_rPmMYakkhfplxyOTqhHQ",[2006,2008],{"title":91,"path":92,"stem":93,"description":2007,"icon":94,"children":-1},"Using evlog with Cloudflare Workers — wide events, structured errors, and logging in Workers and Durable Objects.",{"title":101,"path":102,"stem":103,"description":2009,"icon":104,"children":-1},"Using evlog with Astro — wide events and structured errors in Astro server middleware.",1772991604866]