[{"data":1,"prerenderedAt":3856},["ShallowReactive",2],{"navigation_docs":3,"-logging-structured-errors":388,"-logging-structured-errors-surround":3851},[4,35,155,197,285,372],{"title":5,"path":6,"stem":7,"children":8,"page":34},"Getting Started","\u002Fgetting-started","1.getting-started",[9,14,19,24,29],{"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",{"title":30,"path":31,"stem":32,"icon":33},"vs Other Loggers","\u002Fgetting-started\u002Fvs-other-loggers","1.getting-started\u002F5.vs-other-loggers","i-lucide-scale",false,{"title":36,"path":37,"stem":38,"children":39,"page":34},"Logging","\u002Flogging","2.logging",[40,45,50,55,60,65,94,122],{"title":41,"path":42,"stem":43,"icon":44},"Overview","\u002Flogging\u002Foverview","2.logging\u002F0.overview","i-lucide-list",{"title":46,"path":47,"stem":48,"icon":49},"Simple Logging","\u002Flogging\u002Fsimple-logging","2.logging\u002F1.simple-logging","i-lucide-terminal",{"title":51,"path":52,"stem":53,"icon":54},"Wide Events","\u002Flogging\u002Fwide-events","2.logging\u002F2.wide-events","i-lucide-layers",{"title":56,"path":57,"stem":58,"icon":59},"Structured Errors","\u002Flogging\u002Fstructured-errors","2.logging\u002F3.structured-errors","i-lucide-shield-alert",{"title":61,"path":62,"stem":63,"icon":64},"Client Logging","\u002Flogging\u002Fclient-logging","2.logging\u002F4.client-logging","i-lucide-monitor",{"title":66,"icon":67,"path":68,"stem":69,"children":70,"page":34},"AI SDK","i-simple-icons-vercel","\u002Flogging\u002Fai-sdk","2.logging\u002F5.ai-sdk",[71,74,79,84,89],{"title":41,"path":72,"stem":73,"icon":44},"\u002Flogging\u002Fai-sdk\u002Foverview","2.logging\u002F5.ai-sdk\u002F01.overview",{"title":75,"path":76,"stem":77,"icon":78},"Usage","\u002Flogging\u002Fai-sdk\u002Fusage","2.logging\u002F5.ai-sdk\u002F02.usage","i-lucide-code",{"title":80,"path":81,"stem":82,"icon":83},"Options","\u002Flogging\u002Fai-sdk\u002Foptions","2.logging\u002F5.ai-sdk\u002F03.options","i-lucide-sliders",{"title":85,"path":86,"stem":87,"icon":88},"Metadata","\u002Flogging\u002Fai-sdk\u002Fmetadata","2.logging\u002F5.ai-sdk\u002F04.metadata","i-lucide-database",{"title":90,"path":91,"stem":92,"icon":93},"Telemetry","\u002Flogging\u002Fai-sdk\u002Ftelemetry","2.logging\u002F5.ai-sdk\u002F05.telemetry","i-lucide-activity",{"title":95,"icon":96,"path":97,"stem":98,"children":99,"page":34},"Better Auth","i-simple-icons-betterauth","\u002Flogging\u002Fbetter-auth","2.logging\u002F6.better-auth",[100,103,108,113,117],{"title":41,"path":101,"stem":102,"icon":44},"\u002Flogging\u002Fbetter-auth\u002Foverview","2.logging\u002F6.better-auth\u002F01.overview",{"title":104,"path":105,"stem":106,"icon":107},"Identify User","\u002Flogging\u002Fbetter-auth\u002Fidentify-user","2.logging\u002F6.better-auth\u002F02.identify-user","i-lucide-user-check",{"title":109,"path":110,"stem":111,"icon":112},"Middleware","\u002Flogging\u002Fbetter-auth\u002Fmiddleware","2.logging\u002F6.better-auth\u002F03.middleware","i-lucide-shield",{"title":114,"path":115,"stem":116,"icon":64},"Client Sync","\u002Flogging\u002Fbetter-auth\u002Fclient-sync","2.logging\u002F6.better-auth\u002F04.client-sync",{"title":118,"path":119,"stem":120,"icon":121},"Performance","\u002Flogging\u002Fbetter-auth\u002Fperformance","2.logging\u002F6.better-auth\u002F05.performance","i-lucide-gauge",{"title":123,"icon":124,"path":125,"stem":126,"children":127,"page":34},"Audit Logs","i-lucide-shield-check","\u002Flogging\u002Faudit","2.logging\u002F7.audit",[128,131,136,141,146,150],{"title":41,"path":129,"stem":130,"icon":44},"\u002Flogging\u002Faudit\u002Foverview","2.logging\u002F7.audit\u002F01.overview",{"title":132,"path":133,"stem":134,"icon":135},"Schema","\u002Flogging\u002Faudit\u002Fschema","2.logging\u002F7.audit\u002F02.schema","i-lucide-file-text",{"title":137,"path":138,"stem":139,"icon":140},"Recording","\u002Flogging\u002Faudit\u002Frecording","2.logging\u002F7.audit\u002F03.recording","i-lucide-pen-line",{"title":142,"path":143,"stem":144,"icon":145},"Drains","\u002Flogging\u002Faudit\u002Fpipeline","2.logging\u002F7.audit\u002F04.pipeline","i-lucide-link",{"title":147,"path":148,"stem":149,"icon":124},"Compliance","\u002Flogging\u002Faudit\u002Fcompliance","2.logging\u002F7.audit\u002F05.compliance",{"title":151,"path":152,"stem":153,"icon":154},"Recipes","\u002Flogging\u002Faudit\u002Frecipes","2.logging\u002F7.audit\u002F06.recipes","i-lucide-book-open",{"title":156,"path":157,"stem":158,"children":159,"page":34},"Core Concepts","\u002Fcore-concepts","3.core-concepts",[160,165,170,175,180,184,187,192],{"title":161,"path":162,"stem":163,"icon":164},"Lifecycle","\u002Fcore-concepts\u002Flifecycle","3.core-concepts\u002F0.lifecycle","i-lucide-arrow-right-left",{"title":166,"path":167,"stem":168,"icon":169},"Configuration","\u002Fcore-concepts\u002Fconfiguration","3.core-concepts\u002F1.configuration","i-lucide-settings",{"title":171,"path":172,"stem":173,"icon":174},"Sampling","\u002Fcore-concepts\u002Fsampling","3.core-concepts\u002F2.sampling","i-lucide-filter",{"title":176,"path":177,"stem":178,"icon":179},"Typed Fields","\u002Fcore-concepts\u002Ftyped-fields","3.core-concepts\u002F3.typed-fields","i-simple-icons-typescript",{"title":181,"path":182,"stem":183,"icon":124},"Best Practices","\u002Fcore-concepts\u002Fbest-practices","3.core-concepts\u002F4.best-practices",{"title":118,"path":185,"stem":186,"icon":121},"\u002Fcore-concepts\u002Fperformance","3.core-concepts\u002F5.performance",{"title":188,"path":189,"stem":190,"icon":191},"Vite Plugin","\u002Fcore-concepts\u002Fvite-plugin","3.core-concepts\u002F6.vite-plugin","i-custom-vite",{"title":193,"path":194,"stem":195,"icon":196},"Auto-Redaction","\u002Fcore-concepts\u002Fredaction","3.core-concepts\u002F7.redaction","i-lucide-eye-off",{"title":198,"path":199,"stem":200,"children":201,"page":34},"Frameworks","\u002Fframeworks","4.frameworks",[202,206,211,216,221,226,231,236,241,246,251,256,261,266,270,275,280],{"title":41,"path":203,"stem":204,"icon":205},"\u002Fframeworks\u002Foverview","4.frameworks\u002F00.overview","i-lucide-layout-grid",{"title":207,"path":208,"stem":209,"icon":210},"Nuxt","\u002Fframeworks\u002Fnuxt","4.frameworks\u002F01.nuxt","i-simple-icons-nuxtdotjs",{"title":212,"path":213,"stem":214,"icon":215},"Next.js","\u002Fframeworks\u002Fnextjs","4.frameworks\u002F02.nextjs","i-simple-icons-nextdotjs",{"title":217,"path":218,"stem":219,"icon":220},"SvelteKit","\u002Fframeworks\u002Fsveltekit","4.frameworks\u002F03.sveltekit","i-simple-icons-svelte",{"title":222,"path":223,"stem":224,"icon":225},"Nitro","\u002Fframeworks\u002Fnitro","4.frameworks\u002F04.nitro","i-custom-nitro",{"title":227,"path":228,"stem":229,"icon":230},"TanStack Start","\u002Fframeworks\u002Ftanstack-start","4.frameworks\u002F05.tanstack-start","i-custom-tanstack",{"title":232,"path":233,"stem":234,"icon":235},"NestJS","\u002Fframeworks\u002Fnestjs","4.frameworks\u002F06.nestjs","i-simple-icons-nestjs",{"title":237,"path":238,"stem":239,"icon":240},"Express","\u002Fframeworks\u002Fexpress","4.frameworks\u002F07.express","i-simple-icons-express",{"title":242,"path":243,"stem":244,"icon":245},"Hono","\u002Fframeworks\u002Fhono","4.frameworks\u002F08.hono","i-simple-icons-hono",{"title":247,"path":248,"stem":249,"icon":250},"Fastify","\u002Fframeworks\u002Ffastify","4.frameworks\u002F09.fastify","i-simple-icons-fastify",{"title":252,"path":253,"stem":254,"icon":255},"Elysia","\u002Fframeworks\u002Felysia","4.frameworks\u002F10.elysia","i-custom-elysia",{"title":257,"path":258,"stem":259,"icon":260},"React Router","\u002Fframeworks\u002Freact-router","4.frameworks\u002F11.react-router","i-custom-reactrouter",{"title":262,"path":263,"stem":264,"icon":265},"Cloudflare Workers","\u002Fframeworks\u002Fcloudflare-workers","4.frameworks\u002F12.cloudflare-workers","i-simple-icons-cloudflare",{"title":267,"path":268,"stem":269,"icon":179},"Standalone","\u002Fframeworks\u002Fstandalone","4.frameworks\u002F13.standalone",{"title":271,"path":272,"stem":273,"icon":274},"Astro","\u002Fframeworks\u002Fastro","4.frameworks\u002F14.astro","i-simple-icons-astro",{"title":276,"path":277,"stem":278,"icon":279},"AWS Lambda","\u002Fframeworks\u002Faws-lambda","4.frameworks\u002F16.aws-lambda","i-custom-lambda",{"title":281,"path":282,"stem":283,"icon":284},"Custom Integration","\u002Fframeworks\u002Fcustom-integration","4.frameworks\u002F17.custom-integration","i-lucide-puzzle",{"title":286,"path":287,"stem":288,"children":289,"page":34},"Adapters","\u002Fadapters","6.adapters",[290,293,333,348],{"title":41,"path":291,"stem":292,"icon":44},"\u002Fadapters\u002Foverview","6.adapters\u002F01.overview",{"title":294,"path":295,"stem":296,"children":297,"page":34},"Cloud destinations","\u002Fadapters\u002Fcloud","6.adapters\u002F02.cloud",[298,303,308,313,318,323,328],{"title":299,"path":300,"stem":301,"icon":302},"Axiom","\u002Fadapters\u002Fcloud\u002Faxiom","6.adapters\u002F02.cloud\u002F01.axiom","i-custom-axiom",{"title":304,"path":305,"stem":306,"icon":307},"OTLP","\u002Fadapters\u002Fcloud\u002Fotlp","6.adapters\u002F02.cloud\u002F02.otlp","i-simple-icons-opentelemetry",{"title":309,"path":310,"stem":311,"icon":312},"PostHog","\u002Fadapters\u002Fcloud\u002Fposthog","6.adapters\u002F02.cloud\u002F03.posthog","i-simple-icons-posthog",{"title":314,"path":315,"stem":316,"icon":317},"Sentry","\u002Fadapters\u002Fcloud\u002Fsentry","6.adapters\u002F02.cloud\u002F04.sentry","i-simple-icons-sentry",{"title":319,"path":320,"stem":321,"icon":322},"Better Stack","\u002Fadapters\u002Fcloud\u002Fbetter-stack","6.adapters\u002F02.cloud\u002F05.better-stack","i-simple-icons-betterstack",{"title":324,"path":325,"stem":326,"icon":327},"Datadog","\u002Fadapters\u002Fcloud\u002Fdatadog","6.adapters\u002F02.cloud\u002F06.datadog","i-simple-icons-datadog",{"title":329,"path":330,"stem":331,"icon":332},"HyperDX","\u002Fadapters\u002Fcloud\u002Fhyperdx","6.adapters\u002F02.cloud\u002F07.hyperdx","i-custom-hyperdx",{"title":334,"path":335,"stem":336,"children":337,"page":34},"Self-hosted","\u002Fadapters\u002Fself-hosted","6.adapters\u002F03.self-hosted",[338,343],{"title":339,"path":340,"stem":341,"icon":342},"File System","\u002Fadapters\u002Fself-hosted\u002Ffs","6.adapters\u002F03.self-hosted\u002F01.fs","i-lucide-hard-drive",{"title":344,"path":345,"stem":346,"icon":347},"NuxtHub","\u002Fadapters\u002Fself-hosted\u002Fnuxthub","6.adapters\u002F03.self-hosted\u002F02.nuxthub","i-simple-icons-nuxt",{"title":349,"path":350,"stem":351,"children":352,"page":34},"Building blocks","\u002Fadapters\u002Fbuilding-blocks","6.adapters\u002F04.building-blocks",[353,358,363,367],{"title":354,"path":355,"stem":356,"icon":357},"Pipeline","\u002Fadapters\u002Fbuilding-blocks\u002Fpipeline","6.adapters\u002F04.building-blocks\u002F01.pipeline","i-lucide-workflow",{"title":359,"path":360,"stem":361,"icon":362},"HTTP","\u002Fadapters\u002Fbuilding-blocks\u002Fhttp","6.adapters\u002F04.building-blocks\u002F02.http","i-lucide-globe",{"title":364,"path":365,"stem":366,"icon":78},"Custom Adapters","\u002Fadapters\u002Fbuilding-blocks\u002Fcustom","6.adapters\u002F04.building-blocks\u002F03.custom",{"title":368,"path":369,"stem":370,"icon":371},"Toolkit","\u002Fadapters\u002Fbuilding-blocks\u002Ftoolkit","6.adapters\u002F04.building-blocks\u002F04.toolkit","i-lucide-blocks",{"title":373,"path":374,"stem":375,"children":376,"page":34},"Enrichers","\u002Fenrichers","7.enrichers",[377,380,384],{"title":41,"path":378,"stem":379,"icon":28},"\u002Fenrichers\u002Foverview","7.enrichers\u002F1.overview",{"title":381,"path":382,"stem":383,"icon":284},"Built-in","\u002Fenrichers\u002Fbuilt-in","7.enrichers\u002F2.built-in",{"title":385,"path":386,"stem":387,"icon":78},"Custom","\u002Fenrichers\u002Fcustom","7.enrichers\u002F3.custom",{"id":389,"title":56,"body":390,"description":3841,"extension":3842,"links":3843,"meta":3847,"navigation":3848,"path":57,"seo":3849,"stem":58,"__hash__":3850},"docs\u002F2.logging\u002F3.structured-errors.md",{"type":391,"value":392,"toc":3819},"minimark",[393,402,495,500,503,506,556,571,574,881,885,1003,1009,1023,1166,1213,1220,1224,1229,1344,1348,1574,1578,1581,1734,1740,1748,1994,2017,2026,2030,2035,2529,2533,2536,2856,2859,2863,3140,3144,3300,3304,3307,3780,3789,3793,3815],[394,395,396,397,401],"p",{},"evlog provides a ",[398,399,400],"code",{},"createError()"," function that creates errors with rich, actionable context.",[403,404,407,410,486],"prompt",{":actions":405,"description":406,"icon":59},"[\"copy\",\"cursor\",\"windsurf\"]","Use structured errors in my app",[394,408,409],{},"Use structured errors with code \u002F why \u002F fix \u002F link fields throughout my app.",[411,412,413,421,435,453,460,467,470,477],"ul",{},[414,415,416,417,420],"li",{},"Replace plain ",[398,418,419],{},"throw new Error(...)"," calls with createError({ code, message, status, why, fix, link })",[414,422,423,424,426,427,430,431,434],{},"Use ",[398,425,398],{}," as a stable, machine-readable identifier (e.g. ",[398,428,429],{},"'PAYMENT_DECLINED'",", ",[398,432,433],{},"'auth\u002Finvalid-token'",") so clients and dashboards can branch on it",[414,436,423,437,440,441,444,445,448,449,452],{},[398,438,439],{},"message"," for what happened, ",[398,442,443],{},"why"," for the technical reason, ",[398,446,447],{},"fix"," for the actionable solution, and ",[398,450,451],{},"link"," for docs",[414,454,455,456,459],{},"Set the appropriate HTTP ",[398,457,458],{},"status"," for API routes (400 \u002F 401 \u002F 402 \u002F 403 \u002F 404 \u002F 422 \u002F 500)",[414,461,462,463,466],{},"For internal-only context, pass ",[398,464,465],{},"internal: { ... }"," (logged but never returned in HTTP responses)",[414,468,469],{},"On the client, use parseError(err) to extract { message, status, code, why, fix, link } from any thrown error",[414,471,472,473,476],{},"Branch on ",[398,474,475],{},"parseError(err).code === 'PAYMENT_DECLINED'"," rather than parsing user-facing messages",[414,478,479,480,482,483,485],{},"Render ",[398,481,443],{}," and ",[398,484,447],{}," in toasts\u002FUI so users get actionable feedback",[394,487,488,489],{},"Docs: ",[490,491,492],"a",{"href":492,"rel":493},"https:\u002F\u002Fwww.evlog.dev\u002Flogging\u002Fstructured-errors",[494],"nofollow",[496,497,499],"h2",{"id":498},"why-structured-errors","Why Structured Errors?",[501,502],"structured-error-context",{},[394,504,505],{},"Traditional errors are often unhelpful:",[507,508,514],"pre",{"className":509,"code":510,"filename":511,"language":512,"meta":513,"style":513},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F Unhelpful error\nthrow new Error('Payment failed')\n","server\u002Fapi\u002Fcheckout.post.ts","typescript","",[398,515,516,525],{"__ignoreMap":513},[517,518,521],"span",{"class":519,"line":520},"line",1,[517,522,524],{"class":523},"sHwdD","\u002F\u002F Unhelpful error\n",[517,526,528,532,536,540,544,547,551,553],{"class":519,"line":527},2,[517,529,531],{"class":530},"s7zQu","throw",[517,533,535],{"class":534},"sMK4o"," new",[517,537,539],{"class":538},"s2Zo4"," Error",[517,541,543],{"class":542},"sTEyZ","(",[517,545,546],{"class":534},"'",[517,548,550],{"class":549},"sfazB","Payment failed",[517,552,546],{"class":534},[517,554,555],{"class":542},")\n",[394,557,558,559,563,564,566,567,570],{},"This tells you ",[560,561,562],"em",{},"what"," happened, but not ",[560,565,443],{}," or ",[560,568,569],{},"how to fix it",".",[394,572,573],{},"Structured errors provide context:",[575,576,577,735],"code-group",{},[507,578,580],{"className":509,"code":579,"filename":511,"language":512,"meta":513,"style":513},"import { createError } from 'evlog'\n\nthrow createError({\n  code: 'PAYMENT_DECLINED',\n  message: 'Payment failed',\n  status: 402,\n  why: 'Card declined by issuer (insufficient funds)',\n  fix: 'Try a different payment method or contact your bank',\n  link: 'https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined',\n})\n",[398,581,582,608,614,626,646,662,676,693,710,727],{"__ignoreMap":513},[517,583,584,587,590,593,596,599,602,605],{"class":519,"line":520},[517,585,586],{"class":530},"import",[517,588,589],{"class":534}," {",[517,591,592],{"class":542}," createError",[517,594,595],{"class":534}," }",[517,597,598],{"class":530}," from",[517,600,601],{"class":534}," '",[517,603,604],{"class":549},"evlog",[517,606,607],{"class":534},"'\n",[517,609,610],{"class":519,"line":527},[517,611,613],{"emptyLinePlaceholder":612},true,"\n",[517,615,617,619,621,623],{"class":519,"line":616},3,[517,618,531],{"class":530},[517,620,592],{"class":538},[517,622,543],{"class":542},[517,624,625],{"class":534},"{\n",[517,627,629,633,636,638,641,643],{"class":519,"line":628},4,[517,630,632],{"class":631},"swJcz","  code",[517,634,635],{"class":534},":",[517,637,601],{"class":534},[517,639,640],{"class":549},"PAYMENT_DECLINED",[517,642,546],{"class":534},[517,644,645],{"class":534},",\n",[517,647,649,652,654,656,658,660],{"class":519,"line":648},5,[517,650,651],{"class":631},"  message",[517,653,635],{"class":534},[517,655,601],{"class":534},[517,657,550],{"class":549},[517,659,546],{"class":534},[517,661,645],{"class":534},[517,663,665,668,670,674],{"class":519,"line":664},6,[517,666,667],{"class":631},"  status",[517,669,635],{"class":534},[517,671,673],{"class":672},"sbssI"," 402",[517,675,645],{"class":534},[517,677,679,682,684,686,689,691],{"class":519,"line":678},7,[517,680,681],{"class":631},"  why",[517,683,635],{"class":534},[517,685,601],{"class":534},[517,687,688],{"class":549},"Card declined by issuer (insufficient funds)",[517,690,546],{"class":534},[517,692,645],{"class":534},[517,694,696,699,701,703,706,708],{"class":519,"line":695},8,[517,697,698],{"class":631},"  fix",[517,700,635],{"class":534},[517,702,601],{"class":534},[517,704,705],{"class":549},"Try a different payment method or contact your bank",[517,707,546],{"class":534},[517,709,645],{"class":534},[517,711,713,716,718,720,723,725],{"class":519,"line":712},9,[517,714,715],{"class":631},"  link",[517,717,635],{"class":534},[517,719,601],{"class":534},[517,721,722],{"class":549},"https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined",[517,724,546],{"class":534},[517,726,645],{"class":534},[517,728,730,733],{"class":519,"line":729},10,[517,731,732],{"class":534},"}",[517,734,555],{"class":542},[507,736,741],{"className":737,"code":738,"filename":739,"language":740,"meta":513,"style":513},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"statusCode\": 402,\n  \"message\": \"Payment failed\",\n  \"data\": {\n    \"code\": \"PAYMENT_DECLINED\",\n    \"why\": \"Card declined by issuer (insufficient funds)\",\n    \"fix\": \"Try a different payment method or contact your bank\",\n    \"link\": \"https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined\"\n  }\n}\n","Response","json",[398,742,743,747,765,784,798,818,836,854,871,876],{"__ignoreMap":513},[517,744,745],{"class":519,"line":520},[517,746,625],{"class":534},[517,748,749,752,756,759,761,763],{"class":519,"line":527},[517,750,751],{"class":534},"  \"",[517,753,755],{"class":754},"spNyl","statusCode",[517,757,758],{"class":534},"\"",[517,760,635],{"class":534},[517,762,673],{"class":672},[517,764,645],{"class":534},[517,766,767,769,771,773,775,778,780,782],{"class":519,"line":616},[517,768,751],{"class":534},[517,770,439],{"class":754},[517,772,758],{"class":534},[517,774,635],{"class":534},[517,776,777],{"class":534}," \"",[517,779,550],{"class":549},[517,781,758],{"class":534},[517,783,645],{"class":534},[517,785,786,788,791,793,795],{"class":519,"line":628},[517,787,751],{"class":534},[517,789,790],{"class":754},"data",[517,792,758],{"class":534},[517,794,635],{"class":534},[517,796,797],{"class":534}," {\n",[517,799,800,803,806,808,810,812,814,816],{"class":519,"line":648},[517,801,802],{"class":534},"    \"",[517,804,398],{"class":805},"sBMFI",[517,807,758],{"class":534},[517,809,635],{"class":534},[517,811,777],{"class":534},[517,813,640],{"class":549},[517,815,758],{"class":534},[517,817,645],{"class":534},[517,819,820,822,824,826,828,830,832,834],{"class":519,"line":664},[517,821,802],{"class":534},[517,823,443],{"class":805},[517,825,758],{"class":534},[517,827,635],{"class":534},[517,829,777],{"class":534},[517,831,688],{"class":549},[517,833,758],{"class":534},[517,835,645],{"class":534},[517,837,838,840,842,844,846,848,850,852],{"class":519,"line":678},[517,839,802],{"class":534},[517,841,447],{"class":805},[517,843,758],{"class":534},[517,845,635],{"class":534},[517,847,777],{"class":534},[517,849,705],{"class":549},[517,851,758],{"class":534},[517,853,645],{"class":534},[517,855,856,858,860,862,864,866,868],{"class":519,"line":695},[517,857,802],{"class":534},[517,859,451],{"class":805},[517,861,758],{"class":534},[517,863,635],{"class":534},[517,865,777],{"class":534},[517,867,722],{"class":549},[517,869,870],{"class":534},"\"\n",[517,872,873],{"class":519,"line":712},[517,874,875],{"class":534},"  }\n",[517,877,878],{"class":519,"line":729},[517,879,880],{"class":534},"}\n",[496,882,884],{"id":883},"error-fields","Error Fields",[886,887,888,904],"table",{},[889,890,891],"thead",{},[892,893,894,898,901],"tr",{},[895,896,897],"th",{},"Field",[895,899,900],{},"Required",[895,902,903],{},"Description",[905,906,907,920,935,946,957,968,979,991],"tbody",{},[892,908,909,914,917],{},[910,911,912],"td",{},[398,913,439],{},[910,915,916],{},"Yes",[910,918,919],{},"What happened (shown to users)",[892,921,922,926,929],{},[910,923,924],{},[398,925,398],{},[910,927,928],{},"No",[910,930,931,932,934],{},"Stable machine-readable identifier for client branching (e.g. ",[398,933,429],{},")",[892,936,937,941,943],{},[910,938,939],{},[398,940,458],{},[910,942,928],{},[910,944,945],{},"HTTP status code (default: 500)",[892,947,948,952,954],{},[910,949,950],{},[398,951,443],{},[910,953,928],{},[910,955,956],{},"Technical reason (for debugging)",[892,958,959,963,965],{},[910,960,961],{},[398,962,447],{},[910,964,928],{},[910,966,967],{},"Actionable solution",[892,969,970,974,976],{},[910,971,972],{},[398,973,451],{},[910,975,928],{},[910,977,978],{},"Documentation URL",[892,980,981,986,988],{},[910,982,983],{},[398,984,985],{},"cause",[910,987,928],{},[910,989,990],{},"Original error (for error chaining)",[892,992,993,998,1000],{},[910,994,995],{},[398,996,997],{},"internal",[910,999,928],{},[910,1001,1002],{},"Backend-only context (see below)",[496,1004,1006,1007,934],{"id":1005},"backend-only-context-internal","Backend-only context (",[398,1008,997],{},[394,1010,423,1011,1013,1014,1018,1019,1022],{},[398,1012,997],{}," when you need extra fields for logs, drains, or support tools, but ",[1015,1016,1017],"strong",{},"must not"," expose them in API responses or to ",[398,1020,1021],{},"parseError()"," on the client.",[507,1024,1026],{"className":509,"code":1025,"language":512,"meta":513,"style":513},"throw createError({\n  message: 'Payment could not be completed',\n  status: 402,\n  why: 'Your card was declined',\n  fix: 'Try another payment method',\n  internal: {\n    correlationId: 'pay_8x2k',\n    processorCode: 'insufficient_funds',\n    rawIssuerResponse: '…', \u002F\u002F never sent to the client\n  },\n})\n",[398,1027,1028,1038,1053,1063,1078,1093,1102,1118,1134,1154,1159],{"__ignoreMap":513},[517,1029,1030,1032,1034,1036],{"class":519,"line":520},[517,1031,531],{"class":530},[517,1033,592],{"class":538},[517,1035,543],{"class":542},[517,1037,625],{"class":534},[517,1039,1040,1042,1044,1046,1049,1051],{"class":519,"line":527},[517,1041,651],{"class":631},[517,1043,635],{"class":534},[517,1045,601],{"class":534},[517,1047,1048],{"class":549},"Payment could not be completed",[517,1050,546],{"class":534},[517,1052,645],{"class":534},[517,1054,1055,1057,1059,1061],{"class":519,"line":616},[517,1056,667],{"class":631},[517,1058,635],{"class":534},[517,1060,673],{"class":672},[517,1062,645],{"class":534},[517,1064,1065,1067,1069,1071,1074,1076],{"class":519,"line":628},[517,1066,681],{"class":631},[517,1068,635],{"class":534},[517,1070,601],{"class":534},[517,1072,1073],{"class":549},"Your card was declined",[517,1075,546],{"class":534},[517,1077,645],{"class":534},[517,1079,1080,1082,1084,1086,1089,1091],{"class":519,"line":648},[517,1081,698],{"class":631},[517,1083,635],{"class":534},[517,1085,601],{"class":534},[517,1087,1088],{"class":549},"Try another payment method",[517,1090,546],{"class":534},[517,1092,645],{"class":534},[517,1094,1095,1098,1100],{"class":519,"line":664},[517,1096,1097],{"class":631},"  internal",[517,1099,635],{"class":534},[517,1101,797],{"class":534},[517,1103,1104,1107,1109,1111,1114,1116],{"class":519,"line":678},[517,1105,1106],{"class":631},"    correlationId",[517,1108,635],{"class":534},[517,1110,601],{"class":534},[517,1112,1113],{"class":549},"pay_8x2k",[517,1115,546],{"class":534},[517,1117,645],{"class":534},[517,1119,1120,1123,1125,1127,1130,1132],{"class":519,"line":695},[517,1121,1122],{"class":631},"    processorCode",[517,1124,635],{"class":534},[517,1126,601],{"class":534},[517,1128,1129],{"class":549},"insufficient_funds",[517,1131,546],{"class":534},[517,1133,645],{"class":534},[517,1135,1136,1139,1141,1143,1146,1148,1151],{"class":519,"line":712},[517,1137,1138],{"class":631},"    rawIssuerResponse",[517,1140,635],{"class":534},[517,1142,601],{"class":534},[517,1144,1145],{"class":549},"…",[517,1147,546],{"class":534},[517,1149,1150],{"class":534},",",[517,1152,1153],{"class":523}," \u002F\u002F never sent to the client\n",[517,1155,1156],{"class":519,"line":729},[517,1157,1158],{"class":534},"  },\n",[517,1160,1162,1164],{"class":519,"line":1161},11,[517,1163,732],{"class":534},[517,1165,555],{"class":542},[411,1167,1168,1182,1196],{},[414,1169,1170,1173,1174,1179,1180,570],{},[1015,1171,1172],{},"HTTP responses"," (Nuxt\u002FNitro error handler, Next.js, SvelteKit, etc.) and ",[1015,1175,1176],{},[398,1177,1178],{},"toJSON()"," omit ",[398,1181,997],{},[414,1183,1184,1188,1189,1191,1192,1195],{},[1015,1185,1186],{},[398,1187,1021],{}," does not surface ",[398,1190,997],{}," for UI; the thrown error may still carry it server-side on ",[398,1193,1194],{},"raw"," when debugging.",[414,1197,1198,1201,1202,1205,1206,1209,1210,570],{},[1015,1199,1200],{},"Wide events",": when the framework records the error (e.g. ",[398,1203,1204],{},"log.error(err)"," or automatic capture on thrown ",[398,1207,1208],{},"EvlogError","), the emitted payload includes ",[398,1211,1212],{},"error.internal",[394,1214,1215,1216,570],{},"In debuggers, the payload may appear under a symbol key; in code, always use ",[1015,1217,1218],{},[398,1219,1212],{},[496,1221,1223],{"id":1222},"basic-usage","Basic Usage",[1225,1226,1228],"h3",{"id":1227},"simple-error","Simple Error",[575,1230,1231,1301],{},[507,1232,1235],{"className":509,"code":1233,"filename":1234,"language":512,"meta":513,"style":513},"import { createError } from 'evlog'\n\nthrow createError({\n  message: 'User not found',\n  status: 404,\n})\n","server\u002Fapi\u002Fusers\u002F[id].get.ts",[398,1236,1237,1255,1259,1269,1284,1295],{"__ignoreMap":513},[517,1238,1239,1241,1243,1245,1247,1249,1251,1253],{"class":519,"line":520},[517,1240,586],{"class":530},[517,1242,589],{"class":534},[517,1244,592],{"class":542},[517,1246,595],{"class":534},[517,1248,598],{"class":530},[517,1250,601],{"class":534},[517,1252,604],{"class":549},[517,1254,607],{"class":534},[517,1256,1257],{"class":519,"line":527},[517,1258,613],{"emptyLinePlaceholder":612},[517,1260,1261,1263,1265,1267],{"class":519,"line":616},[517,1262,531],{"class":530},[517,1264,592],{"class":538},[517,1266,543],{"class":542},[517,1268,625],{"class":534},[517,1270,1271,1273,1275,1277,1280,1282],{"class":519,"line":628},[517,1272,651],{"class":631},[517,1274,635],{"class":534},[517,1276,601],{"class":534},[517,1278,1279],{"class":549},"User not found",[517,1281,546],{"class":534},[517,1283,645],{"class":534},[517,1285,1286,1288,1290,1293],{"class":519,"line":648},[517,1287,667],{"class":631},[517,1289,635],{"class":534},[517,1291,1292],{"class":672}," 404",[517,1294,645],{"class":534},[517,1296,1297,1299],{"class":519,"line":664},[517,1298,732],{"class":534},[517,1300,555],{"class":542},[507,1302,1304],{"className":737,"code":1303,"filename":739,"language":740,"meta":513,"style":513},"{\n  \"statusCode\": 404,\n  \"message\": \"User not found\"\n}\n",[398,1305,1306,1310,1324,1340],{"__ignoreMap":513},[517,1307,1308],{"class":519,"line":520},[517,1309,625],{"class":534},[517,1311,1312,1314,1316,1318,1320,1322],{"class":519,"line":527},[517,1313,751],{"class":534},[517,1315,755],{"class":754},[517,1317,758],{"class":534},[517,1319,635],{"class":534},[517,1321,1292],{"class":672},[517,1323,645],{"class":534},[517,1325,1326,1328,1330,1332,1334,1336,1338],{"class":519,"line":616},[517,1327,751],{"class":534},[517,1329,439],{"class":754},[517,1331,758],{"class":534},[517,1333,635],{"class":534},[517,1335,777],{"class":534},[517,1337,1279],{"class":549},[517,1339,870],{"class":534},[517,1341,1342],{"class":519,"line":628},[517,1343,880],{"class":534},[1225,1345,1347],{"id":1346},"error-with-full-context","Error with Full Context",[575,1349,1350,1461],{},[507,1351,1353],{"className":509,"code":1352,"filename":511,"language":512,"meta":513,"style":513},"import { createError } from 'evlog'\n\nthrow createError({\n  message: 'Payment failed',\n  status: 402,\n  why: 'Card declined by issuer',\n  fix: 'Try a different payment method',\n  link: 'https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined',\n})\n",[398,1354,1355,1373,1377,1387,1401,1411,1426,1441,1455],{"__ignoreMap":513},[517,1356,1357,1359,1361,1363,1365,1367,1369,1371],{"class":519,"line":520},[517,1358,586],{"class":530},[517,1360,589],{"class":534},[517,1362,592],{"class":542},[517,1364,595],{"class":534},[517,1366,598],{"class":530},[517,1368,601],{"class":534},[517,1370,604],{"class":549},[517,1372,607],{"class":534},[517,1374,1375],{"class":519,"line":527},[517,1376,613],{"emptyLinePlaceholder":612},[517,1378,1379,1381,1383,1385],{"class":519,"line":616},[517,1380,531],{"class":530},[517,1382,592],{"class":538},[517,1384,543],{"class":542},[517,1386,625],{"class":534},[517,1388,1389,1391,1393,1395,1397,1399],{"class":519,"line":628},[517,1390,651],{"class":631},[517,1392,635],{"class":534},[517,1394,601],{"class":534},[517,1396,550],{"class":549},[517,1398,546],{"class":534},[517,1400,645],{"class":534},[517,1402,1403,1405,1407,1409],{"class":519,"line":648},[517,1404,667],{"class":631},[517,1406,635],{"class":534},[517,1408,673],{"class":672},[517,1410,645],{"class":534},[517,1412,1413,1415,1417,1419,1422,1424],{"class":519,"line":664},[517,1414,681],{"class":631},[517,1416,635],{"class":534},[517,1418,601],{"class":534},[517,1420,1421],{"class":549},"Card declined by issuer",[517,1423,546],{"class":534},[517,1425,645],{"class":534},[517,1427,1428,1430,1432,1434,1437,1439],{"class":519,"line":678},[517,1429,698],{"class":631},[517,1431,635],{"class":534},[517,1433,601],{"class":534},[517,1435,1436],{"class":549},"Try a different payment method",[517,1438,546],{"class":534},[517,1440,645],{"class":534},[517,1442,1443,1445,1447,1449,1451,1453],{"class":519,"line":695},[517,1444,715],{"class":631},[517,1446,635],{"class":534},[517,1448,601],{"class":534},[517,1450,722],{"class":549},[517,1452,546],{"class":534},[517,1454,645],{"class":534},[517,1456,1457,1459],{"class":519,"line":712},[517,1458,732],{"class":534},[517,1460,555],{"class":542},[507,1462,1464],{"className":737,"code":1463,"filename":739,"language":740,"meta":513,"style":513},"{\n  \"statusCode\": 402,\n  \"message\": \"Payment failed\",\n  \"data\": {\n    \"why\": \"Card declined by issuer\",\n    \"fix\": \"Try a different payment method\",\n    \"link\": \"https:\u002F\u002Fdocs.example.com\u002Fpayments\u002Fdeclined\"\n  }\n}\n",[398,1465,1466,1470,1484,1502,1514,1532,1550,1566,1570],{"__ignoreMap":513},[517,1467,1468],{"class":519,"line":520},[517,1469,625],{"class":534},[517,1471,1472,1474,1476,1478,1480,1482],{"class":519,"line":527},[517,1473,751],{"class":534},[517,1475,755],{"class":754},[517,1477,758],{"class":534},[517,1479,635],{"class":534},[517,1481,673],{"class":672},[517,1483,645],{"class":534},[517,1485,1486,1488,1490,1492,1494,1496,1498,1500],{"class":519,"line":616},[517,1487,751],{"class":534},[517,1489,439],{"class":754},[517,1491,758],{"class":534},[517,1493,635],{"class":534},[517,1495,777],{"class":534},[517,1497,550],{"class":549},[517,1499,758],{"class":534},[517,1501,645],{"class":534},[517,1503,1504,1506,1508,1510,1512],{"class":519,"line":628},[517,1505,751],{"class":534},[517,1507,790],{"class":754},[517,1509,758],{"class":534},[517,1511,635],{"class":534},[517,1513,797],{"class":534},[517,1515,1516,1518,1520,1522,1524,1526,1528,1530],{"class":519,"line":648},[517,1517,802],{"class":534},[517,1519,443],{"class":805},[517,1521,758],{"class":534},[517,1523,635],{"class":534},[517,1525,777],{"class":534},[517,1527,1421],{"class":549},[517,1529,758],{"class":534},[517,1531,645],{"class":534},[517,1533,1534,1536,1538,1540,1542,1544,1546,1548],{"class":519,"line":664},[517,1535,802],{"class":534},[517,1537,447],{"class":805},[517,1539,758],{"class":534},[517,1541,635],{"class":534},[517,1543,777],{"class":534},[517,1545,1436],{"class":549},[517,1547,758],{"class":534},[517,1549,645],{"class":534},[517,1551,1552,1554,1556,1558,1560,1562,1564],{"class":519,"line":678},[517,1553,802],{"class":534},[517,1555,451],{"class":805},[517,1557,758],{"class":534},[517,1559,635],{"class":534},[517,1561,777],{"class":534},[517,1563,722],{"class":549},[517,1565,870],{"class":534},[517,1567,1568],{"class":519,"line":695},[517,1569,875],{"class":534},[517,1571,1572],{"class":519,"line":712},[517,1573,880],{"class":534},[1225,1575,1577],{"id":1576},"error-chaining","Error Chaining",[394,1579,1580],{},"Wrap underlying errors while preserving the original:",[507,1582,1584],{"className":509,"code":1583,"filename":511,"language":512,"meta":513,"style":513},"import { createError } from 'evlog'\n\ntry {\n  await stripe.charges.create(charge)\n} catch (err) {\n  throw createError({\n    message: 'Payment processing failed',\n    status: 500,\n    why: 'Stripe API returned an error',\n    cause: err, \u002F\u002F Original error preserved\n  })\n}\n",[398,1585,1586,1604,1608,1615,1640,1652,1663,1679,1691,1707,1722,1729],{"__ignoreMap":513},[517,1587,1588,1590,1592,1594,1596,1598,1600,1602],{"class":519,"line":520},[517,1589,586],{"class":530},[517,1591,589],{"class":534},[517,1593,592],{"class":542},[517,1595,595],{"class":534},[517,1597,598],{"class":530},[517,1599,601],{"class":534},[517,1601,604],{"class":549},[517,1603,607],{"class":534},[517,1605,1606],{"class":519,"line":527},[517,1607,613],{"emptyLinePlaceholder":612},[517,1609,1610,1613],{"class":519,"line":616},[517,1611,1612],{"class":530},"try",[517,1614,797],{"class":534},[517,1616,1617,1620,1623,1625,1628,1630,1633,1635,1638],{"class":519,"line":628},[517,1618,1619],{"class":530},"  await",[517,1621,1622],{"class":542}," stripe",[517,1624,570],{"class":534},[517,1626,1627],{"class":542},"charges",[517,1629,570],{"class":534},[517,1631,1632],{"class":538},"create",[517,1634,543],{"class":631},[517,1636,1637],{"class":542},"charge",[517,1639,555],{"class":631},[517,1641,1642,1644,1647,1650],{"class":519,"line":648},[517,1643,732],{"class":534},[517,1645,1646],{"class":530}," catch",[517,1648,1649],{"class":542}," (err) ",[517,1651,625],{"class":534},[517,1653,1654,1657,1659,1661],{"class":519,"line":664},[517,1655,1656],{"class":530},"  throw",[517,1658,592],{"class":538},[517,1660,543],{"class":631},[517,1662,625],{"class":534},[517,1664,1665,1668,1670,1672,1675,1677],{"class":519,"line":678},[517,1666,1667],{"class":631},"    message",[517,1669,635],{"class":534},[517,1671,601],{"class":534},[517,1673,1674],{"class":549},"Payment processing failed",[517,1676,546],{"class":534},[517,1678,645],{"class":534},[517,1680,1681,1684,1686,1689],{"class":519,"line":695},[517,1682,1683],{"class":631},"    status",[517,1685,635],{"class":534},[517,1687,1688],{"class":672}," 500",[517,1690,645],{"class":534},[517,1692,1693,1696,1698,1700,1703,1705],{"class":519,"line":712},[517,1694,1695],{"class":631},"    why",[517,1697,635],{"class":534},[517,1699,601],{"class":534},[517,1701,1702],{"class":549},"Stripe API returned an error",[517,1704,546],{"class":534},[517,1706,645],{"class":534},[517,1708,1709,1712,1714,1717,1719],{"class":519,"line":729},[517,1710,1711],{"class":631},"    cause",[517,1713,635],{"class":534},[517,1715,1716],{"class":542}," err",[517,1718,1150],{"class":534},[517,1720,1721],{"class":523}," \u002F\u002F Original error preserved\n",[517,1723,1724,1727],{"class":519,"line":1161},[517,1725,1726],{"class":534},"  }",[517,1728,555],{"class":631},[517,1730,1732],{"class":519,"line":1731},12,[517,1733,880],{"class":534},[496,1735,1737,1738],{"id":1736},"branching-on-code","Branching on ",[398,1739,398],{},[394,1741,1742,1744,1745,1747],{},[398,1743,398],{}," is a stable, machine-readable identifier you control. Pair it with ",[398,1746,1021],{}," so the client can branch on logic without parsing user-facing messages or coupling to HTTP status codes.",[507,1749,1752],{"className":509,"code":1750,"filename":1751,"language":512,"meta":513,"style":513},"import { parseError } from 'evlog'\n\ntry {\n  await $fetch('\u002Fapi\u002Fcheckout', { method: 'POST', body: cart })\n} catch (err) {\n  const error = parseError(err)\n\n  switch (error.code) {\n    case 'PAYMENT_DECLINED':\n      return showRetryWithDifferentCard()\n    case 'CART_EXPIRED':\n      return rebuildCart()\n    default:\n      return toast.add({ title: error.message, color: 'error' })\n  }\n}\n","composables\u002FuseCheckout.ts",[398,1753,1754,1773,1777,1783,1829,1839,1859,1863,1883,1897,1908,1921,1930,1938,1984,1989],{"__ignoreMap":513},[517,1755,1756,1758,1760,1763,1765,1767,1769,1771],{"class":519,"line":520},[517,1757,586],{"class":530},[517,1759,589],{"class":534},[517,1761,1762],{"class":542}," parseError",[517,1764,595],{"class":534},[517,1766,598],{"class":530},[517,1768,601],{"class":534},[517,1770,604],{"class":549},[517,1772,607],{"class":534},[517,1774,1775],{"class":519,"line":527},[517,1776,613],{"emptyLinePlaceholder":612},[517,1778,1779,1781],{"class":519,"line":616},[517,1780,1612],{"class":530},[517,1782,797],{"class":534},[517,1784,1785,1787,1790,1792,1794,1797,1799,1801,1803,1806,1808,1810,1813,1815,1817,1820,1822,1825,1827],{"class":519,"line":628},[517,1786,1619],{"class":530},[517,1788,1789],{"class":538}," $fetch",[517,1791,543],{"class":631},[517,1793,546],{"class":534},[517,1795,1796],{"class":549},"\u002Fapi\u002Fcheckout",[517,1798,546],{"class":534},[517,1800,1150],{"class":534},[517,1802,589],{"class":534},[517,1804,1805],{"class":631}," method",[517,1807,635],{"class":534},[517,1809,601],{"class":534},[517,1811,1812],{"class":549},"POST",[517,1814,546],{"class":534},[517,1816,1150],{"class":534},[517,1818,1819],{"class":631}," body",[517,1821,635],{"class":534},[517,1823,1824],{"class":542}," cart",[517,1826,595],{"class":534},[517,1828,555],{"class":631},[517,1830,1831,1833,1835,1837],{"class":519,"line":648},[517,1832,732],{"class":534},[517,1834,1646],{"class":530},[517,1836,1649],{"class":542},[517,1838,625],{"class":534},[517,1840,1841,1844,1847,1850,1852,1854,1857],{"class":519,"line":664},[517,1842,1843],{"class":754},"  const",[517,1845,1846],{"class":542}," error",[517,1848,1849],{"class":534}," =",[517,1851,1762],{"class":538},[517,1853,543],{"class":631},[517,1855,1856],{"class":542},"err",[517,1858,555],{"class":631},[517,1860,1861],{"class":519,"line":678},[517,1862,613],{"emptyLinePlaceholder":612},[517,1864,1865,1868,1871,1874,1876,1878,1881],{"class":519,"line":695},[517,1866,1867],{"class":530},"  switch",[517,1869,1870],{"class":631}," (",[517,1872,1873],{"class":542},"error",[517,1875,570],{"class":534},[517,1877,398],{"class":542},[517,1879,1880],{"class":631},") ",[517,1882,625],{"class":534},[517,1884,1885,1888,1890,1892,1894],{"class":519,"line":712},[517,1886,1887],{"class":530},"    case",[517,1889,601],{"class":534},[517,1891,640],{"class":549},[517,1893,546],{"class":534},[517,1895,1896],{"class":534},":\n",[517,1898,1899,1902,1905],{"class":519,"line":729},[517,1900,1901],{"class":530},"      return",[517,1903,1904],{"class":538}," showRetryWithDifferentCard",[517,1906,1907],{"class":631},"()\n",[517,1909,1910,1912,1914,1917,1919],{"class":519,"line":1161},[517,1911,1887],{"class":530},[517,1913,601],{"class":534},[517,1915,1916],{"class":549},"CART_EXPIRED",[517,1918,546],{"class":534},[517,1920,1896],{"class":534},[517,1922,1923,1925,1928],{"class":519,"line":1731},[517,1924,1901],{"class":530},[517,1926,1927],{"class":538}," rebuildCart",[517,1929,1907],{"class":631},[517,1931,1933,1936],{"class":519,"line":1932},13,[517,1934,1935],{"class":530},"    default",[517,1937,1896],{"class":534},[517,1939,1941,1943,1946,1948,1951,1953,1956,1959,1961,1963,1965,1967,1969,1972,1974,1976,1978,1980,1982],{"class":519,"line":1940},14,[517,1942,1901],{"class":530},[517,1944,1945],{"class":542}," toast",[517,1947,570],{"class":534},[517,1949,1950],{"class":538},"add",[517,1952,543],{"class":631},[517,1954,1955],{"class":534},"{",[517,1957,1958],{"class":631}," title",[517,1960,635],{"class":534},[517,1962,1846],{"class":542},[517,1964,570],{"class":534},[517,1966,439],{"class":542},[517,1968,1150],{"class":534},[517,1970,1971],{"class":631}," color",[517,1973,635],{"class":534},[517,1975,601],{"class":534},[517,1977,1873],{"class":549},[517,1979,546],{"class":534},[517,1981,595],{"class":534},[517,1983,555],{"class":631},[517,1985,1987],{"class":519,"line":1986},15,[517,1988,875],{"class":534},[517,1990,1992],{"class":519,"line":1991},16,[517,1993,880],{"class":534},[394,1995,1996,1998,1999,2001,2002,430,2005,2008,2009,2012,2013,2016],{},[398,1997,1021],{}," also surfaces ",[398,2000,398],{}," from Node-style errors (e.g. ",[398,2003,2004],{},"'ENOENT'",[398,2006,2007],{},"'ECONNRESET'",") and any ",[398,2010,2011],{},"Error"," instance with a string ",[398,2014,2015],{},".code"," property, so existing system errors flow through the same branch.",[394,2018,2019,2021,2022,2025],{},[398,2020,398],{}," is also copied onto wide events under ",[398,2023,2024],{},"error.code",", so dashboards and drains can group, alert, and chart by code without parsing free-text messages.",[496,2027,2029],{"id":2028},"frontend-error-handling","Frontend Error Handling",[394,2031,423,2032,2034],{},[398,2033,1021],{}," to extract all fields from caught errors:",[575,2036,2037,2255],{},[507,2038,2040],{"className":509,"code":2039,"filename":1751,"language":512,"meta":513,"style":513},"import { parseError } from 'evlog'\n\ntry {\n  await $fetch('\u002Fapi\u002Fcheckout', { method: 'POST', body: cart })\n} catch (err) {\n  const error = parseError(err)\n\n  console.log(error.message)  \u002F\u002F \"Payment failed\"\n  console.log(error.status)   \u002F\u002F 402\n  console.log(error.code)     \u002F\u002F \"PAYMENT_DECLINED\"\n  console.log(error.why)      \u002F\u002F \"Card declined\"\n  console.log(error.fix)      \u002F\u002F \"Try another card\"\n}\n",[398,2041,2042,2060,2064,2070,2110,2120,2136,2140,2164,2186,2208,2230,2251],{"__ignoreMap":513},[517,2043,2044,2046,2048,2050,2052,2054,2056,2058],{"class":519,"line":520},[517,2045,586],{"class":530},[517,2047,589],{"class":534},[517,2049,1762],{"class":542},[517,2051,595],{"class":534},[517,2053,598],{"class":530},[517,2055,601],{"class":534},[517,2057,604],{"class":549},[517,2059,607],{"class":534},[517,2061,2062],{"class":519,"line":527},[517,2063,613],{"emptyLinePlaceholder":612},[517,2065,2066,2068],{"class":519,"line":616},[517,2067,1612],{"class":530},[517,2069,797],{"class":534},[517,2071,2072,2074,2076,2078,2080,2082,2084,2086,2088,2090,2092,2094,2096,2098,2100,2102,2104,2106,2108],{"class":519,"line":628},[517,2073,1619],{"class":530},[517,2075,1789],{"class":538},[517,2077,543],{"class":631},[517,2079,546],{"class":534},[517,2081,1796],{"class":549},[517,2083,546],{"class":534},[517,2085,1150],{"class":534},[517,2087,589],{"class":534},[517,2089,1805],{"class":631},[517,2091,635],{"class":534},[517,2093,601],{"class":534},[517,2095,1812],{"class":549},[517,2097,546],{"class":534},[517,2099,1150],{"class":534},[517,2101,1819],{"class":631},[517,2103,635],{"class":534},[517,2105,1824],{"class":542},[517,2107,595],{"class":534},[517,2109,555],{"class":631},[517,2111,2112,2114,2116,2118],{"class":519,"line":648},[517,2113,732],{"class":534},[517,2115,1646],{"class":530},[517,2117,1649],{"class":542},[517,2119,625],{"class":534},[517,2121,2122,2124,2126,2128,2130,2132,2134],{"class":519,"line":664},[517,2123,1843],{"class":754},[517,2125,1846],{"class":542},[517,2127,1849],{"class":534},[517,2129,1762],{"class":538},[517,2131,543],{"class":631},[517,2133,1856],{"class":542},[517,2135,555],{"class":631},[517,2137,2138],{"class":519,"line":678},[517,2139,613],{"emptyLinePlaceholder":612},[517,2141,2142,2145,2147,2150,2152,2154,2156,2158,2161],{"class":519,"line":695},[517,2143,2144],{"class":542},"  console",[517,2146,570],{"class":534},[517,2148,2149],{"class":538},"log",[517,2151,543],{"class":631},[517,2153,1873],{"class":542},[517,2155,570],{"class":534},[517,2157,439],{"class":542},[517,2159,2160],{"class":631},")  ",[517,2162,2163],{"class":523},"\u002F\u002F \"Payment failed\"\n",[517,2165,2166,2168,2170,2172,2174,2176,2178,2180,2183],{"class":519,"line":712},[517,2167,2144],{"class":542},[517,2169,570],{"class":534},[517,2171,2149],{"class":538},[517,2173,543],{"class":631},[517,2175,1873],{"class":542},[517,2177,570],{"class":534},[517,2179,458],{"class":542},[517,2181,2182],{"class":631},")   ",[517,2184,2185],{"class":523},"\u002F\u002F 402\n",[517,2187,2188,2190,2192,2194,2196,2198,2200,2202,2205],{"class":519,"line":729},[517,2189,2144],{"class":542},[517,2191,570],{"class":534},[517,2193,2149],{"class":538},[517,2195,543],{"class":631},[517,2197,1873],{"class":542},[517,2199,570],{"class":534},[517,2201,398],{"class":542},[517,2203,2204],{"class":631},")     ",[517,2206,2207],{"class":523},"\u002F\u002F \"PAYMENT_DECLINED\"\n",[517,2209,2210,2212,2214,2216,2218,2220,2222,2224,2227],{"class":519,"line":1161},[517,2211,2144],{"class":542},[517,2213,570],{"class":534},[517,2215,2149],{"class":538},[517,2217,543],{"class":631},[517,2219,1873],{"class":542},[517,2221,570],{"class":534},[517,2223,443],{"class":542},[517,2225,2226],{"class":631},")      ",[517,2228,2229],{"class":523},"\u002F\u002F \"Card declined\"\n",[517,2231,2232,2234,2236,2238,2240,2242,2244,2246,2248],{"class":519,"line":1731},[517,2233,2144],{"class":542},[517,2235,570],{"class":534},[517,2237,2149],{"class":538},[517,2239,543],{"class":631},[517,2241,1873],{"class":542},[517,2243,570],{"class":534},[517,2245,447],{"class":542},[517,2247,2226],{"class":631},[517,2249,2250],{"class":523},"\u002F\u002F \"Try another card\"\n",[517,2252,2253],{"class":519,"line":1932},[517,2254,880],{"class":534},[507,2256,2259],{"className":509,"code":2257,"filename":2258,"language":512,"meta":513,"style":513},"import { parseError } from 'evlog'\n\nconst toast = useToast()\n\ntry {\n  await $fetch('\u002Fapi\u002Fcheckout', { method: 'POST', body: cart })\n} catch (err) {\n  const error = parseError(err)\n\n  toast.add({\n    title: error.message,\n    description: error.why,\n    color: 'error',\n    actions: error.link\n      ? [{ label: 'Learn more', onClick: () => window.open(error.link) }]\n      : undefined,\n  })\n}\n","composables\u002FuseCheckout.ts (Nuxt UI)",[398,2260,2261,2279,2283,2299,2303,2309,2349,2359,2375,2379,2392,2407,2422,2437,2451,2509,2517,2524],{"__ignoreMap":513},[517,2262,2263,2265,2267,2269,2271,2273,2275,2277],{"class":519,"line":520},[517,2264,586],{"class":530},[517,2266,589],{"class":534},[517,2268,1762],{"class":542},[517,2270,595],{"class":534},[517,2272,598],{"class":530},[517,2274,601],{"class":534},[517,2276,604],{"class":549},[517,2278,607],{"class":534},[517,2280,2281],{"class":519,"line":527},[517,2282,613],{"emptyLinePlaceholder":612},[517,2284,2285,2288,2291,2294,2297],{"class":519,"line":616},[517,2286,2287],{"class":754},"const",[517,2289,2290],{"class":542}," toast ",[517,2292,2293],{"class":534},"=",[517,2295,2296],{"class":538}," useToast",[517,2298,1907],{"class":542},[517,2300,2301],{"class":519,"line":628},[517,2302,613],{"emptyLinePlaceholder":612},[517,2304,2305,2307],{"class":519,"line":648},[517,2306,1612],{"class":530},[517,2308,797],{"class":534},[517,2310,2311,2313,2315,2317,2319,2321,2323,2325,2327,2329,2331,2333,2335,2337,2339,2341,2343,2345,2347],{"class":519,"line":664},[517,2312,1619],{"class":530},[517,2314,1789],{"class":538},[517,2316,543],{"class":631},[517,2318,546],{"class":534},[517,2320,1796],{"class":549},[517,2322,546],{"class":534},[517,2324,1150],{"class":534},[517,2326,589],{"class":534},[517,2328,1805],{"class":631},[517,2330,635],{"class":534},[517,2332,601],{"class":534},[517,2334,1812],{"class":549},[517,2336,546],{"class":534},[517,2338,1150],{"class":534},[517,2340,1819],{"class":631},[517,2342,635],{"class":534},[517,2344,1824],{"class":542},[517,2346,595],{"class":534},[517,2348,555],{"class":631},[517,2350,2351,2353,2355,2357],{"class":519,"line":678},[517,2352,732],{"class":534},[517,2354,1646],{"class":530},[517,2356,1649],{"class":542},[517,2358,625],{"class":534},[517,2360,2361,2363,2365,2367,2369,2371,2373],{"class":519,"line":695},[517,2362,1843],{"class":754},[517,2364,1846],{"class":542},[517,2366,1849],{"class":534},[517,2368,1762],{"class":538},[517,2370,543],{"class":631},[517,2372,1856],{"class":542},[517,2374,555],{"class":631},[517,2376,2377],{"class":519,"line":712},[517,2378,613],{"emptyLinePlaceholder":612},[517,2380,2381,2384,2386,2388,2390],{"class":519,"line":729},[517,2382,2383],{"class":542},"  toast",[517,2385,570],{"class":534},[517,2387,1950],{"class":538},[517,2389,543],{"class":631},[517,2391,625],{"class":534},[517,2393,2394,2397,2399,2401,2403,2405],{"class":519,"line":1161},[517,2395,2396],{"class":631},"    title",[517,2398,635],{"class":534},[517,2400,1846],{"class":542},[517,2402,570],{"class":534},[517,2404,439],{"class":542},[517,2406,645],{"class":534},[517,2408,2409,2412,2414,2416,2418,2420],{"class":519,"line":1731},[517,2410,2411],{"class":631},"    description",[517,2413,635],{"class":534},[517,2415,1846],{"class":542},[517,2417,570],{"class":534},[517,2419,443],{"class":542},[517,2421,645],{"class":534},[517,2423,2424,2427,2429,2431,2433,2435],{"class":519,"line":1932},[517,2425,2426],{"class":631},"    color",[517,2428,635],{"class":534},[517,2430,601],{"class":534},[517,2432,1873],{"class":549},[517,2434,546],{"class":534},[517,2436,645],{"class":534},[517,2438,2439,2442,2444,2446,2448],{"class":519,"line":1940},[517,2440,2441],{"class":631},"    actions",[517,2443,635],{"class":534},[517,2445,1846],{"class":542},[517,2447,570],{"class":534},[517,2449,2450],{"class":542},"link\n",[517,2452,2453,2456,2459,2461,2464,2466,2468,2471,2473,2475,2478,2480,2483,2486,2489,2491,2494,2496,2498,2500,2502,2504,2506],{"class":519,"line":1986},[517,2454,2455],{"class":534},"      ?",[517,2457,2458],{"class":631}," [",[517,2460,1955],{"class":534},[517,2462,2463],{"class":631}," label",[517,2465,635],{"class":534},[517,2467,601],{"class":534},[517,2469,2470],{"class":549},"Learn more",[517,2472,546],{"class":534},[517,2474,1150],{"class":534},[517,2476,2477],{"class":538}," onClick",[517,2479,635],{"class":534},[517,2481,2482],{"class":534}," ()",[517,2484,2485],{"class":754}," =>",[517,2487,2488],{"class":542}," window",[517,2490,570],{"class":534},[517,2492,2493],{"class":538},"open",[517,2495,543],{"class":631},[517,2497,1873],{"class":542},[517,2499,570],{"class":534},[517,2501,451],{"class":542},[517,2503,1880],{"class":631},[517,2505,732],{"class":534},[517,2507,2508],{"class":631},"]\n",[517,2510,2511,2514],{"class":519,"line":1991},[517,2512,2513],{"class":534},"      :",[517,2515,2516],{"class":534}," undefined,\n",[517,2518,2520,2522],{"class":519,"line":2519},17,[517,2521,1726],{"class":534},[517,2523,555],{"class":631},[517,2525,2527],{"class":519,"line":2526},18,[517,2528,880],{"class":534},[1225,2530,2532],{"id":2531},"error-display-component","Error Display Component",[394,2534,2535],{},"Create a reusable error display:",[507,2537,2542],{"className":2538,"code":2539,"filename":2540,"language":2541,"meta":513,"style":513},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript setup lang=\"ts\">\nimport { parseError } from 'evlog'\n\nconst { error } = defineProps\u003C{\n  error: unknown\n}>()\n\nconst parsed = computed(() => parseError(error))\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CUAlert\n    :title=\"parsed.message\"\n    :description=\"parsed.why\"\n    color=\"error\"\n    icon=\"i-lucide-alert-circle\"\n  >\n    \u003Ctemplate v-if=\"parsed.fix\" #description>\n      \u003Cp>{{ parsed.why }}\u003C\u002Fp>\n      \u003Cp class=\"mt-2 font-medium\">{{ parsed.fix }}\u003C\u002Fp>\n    \u003C\u002Ftemplate>\n  \u003C\u002FUAlert>\n\u003C\u002Ftemplate>\n","components\u002FErrorAlert.vue","vue",[398,2543,2544,2570,2588,2592,2611,2621,2628,2632,2656,2665,2669,2678,2686,2700,2714,2726,2740,2745,2776,2796,2826,2836,2847],{"__ignoreMap":513},[517,2545,2546,2549,2552,2555,2558,2560,2562,2565,2567],{"class":519,"line":520},[517,2547,2548],{"class":534},"\u003C",[517,2550,2551],{"class":631},"script",[517,2553,2554],{"class":754}," setup",[517,2556,2557],{"class":754}," lang",[517,2559,2293],{"class":534},[517,2561,758],{"class":534},[517,2563,2564],{"class":549},"ts",[517,2566,758],{"class":534},[517,2568,2569],{"class":534},">\n",[517,2571,2572,2574,2576,2578,2580,2582,2584,2586],{"class":519,"line":527},[517,2573,586],{"class":530},[517,2575,589],{"class":534},[517,2577,1762],{"class":542},[517,2579,595],{"class":534},[517,2581,598],{"class":530},[517,2583,601],{"class":534},[517,2585,604],{"class":549},[517,2587,607],{"class":534},[517,2589,2590],{"class":519,"line":616},[517,2591,613],{"emptyLinePlaceholder":612},[517,2593,2594,2596,2598,2601,2603,2605,2608],{"class":519,"line":628},[517,2595,2287],{"class":754},[517,2597,589],{"class":534},[517,2599,2600],{"class":542}," error ",[517,2602,732],{"class":534},[517,2604,1849],{"class":534},[517,2606,2607],{"class":538}," defineProps",[517,2609,2610],{"class":534},"\u003C{\n",[517,2612,2613,2616,2618],{"class":519,"line":648},[517,2614,2615],{"class":631},"  error",[517,2617,635],{"class":534},[517,2619,2620],{"class":805}," unknown\n",[517,2622,2623,2626],{"class":519,"line":664},[517,2624,2625],{"class":534},"}>",[517,2627,1907],{"class":542},[517,2629,2630],{"class":519,"line":678},[517,2631,613],{"emptyLinePlaceholder":612},[517,2633,2634,2636,2639,2641,2644,2646,2649,2651,2653],{"class":519,"line":695},[517,2635,2287],{"class":754},[517,2637,2638],{"class":542}," parsed ",[517,2640,2293],{"class":534},[517,2642,2643],{"class":538}," computed",[517,2645,543],{"class":542},[517,2647,2648],{"class":534},"()",[517,2650,2485],{"class":754},[517,2652,1762],{"class":538},[517,2654,2655],{"class":542},"(error))\n",[517,2657,2658,2661,2663],{"class":519,"line":712},[517,2659,2660],{"class":534},"\u003C\u002F",[517,2662,2551],{"class":631},[517,2664,2569],{"class":534},[517,2666,2667],{"class":519,"line":729},[517,2668,613],{"emptyLinePlaceholder":612},[517,2670,2671,2673,2676],{"class":519,"line":1161},[517,2672,2548],{"class":534},[517,2674,2675],{"class":631},"template",[517,2677,2569],{"class":534},[517,2679,2680,2683],{"class":519,"line":1731},[517,2681,2682],{"class":534},"  \u003C",[517,2684,2685],{"class":631},"UAlert\n",[517,2687,2688,2691,2693,2695,2698],{"class":519,"line":1932},[517,2689,2690],{"class":754},"    :title",[517,2692,2293],{"class":534},[517,2694,758],{"class":534},[517,2696,2697],{"class":549},"parsed.message",[517,2699,870],{"class":534},[517,2701,2702,2705,2707,2709,2712],{"class":519,"line":1940},[517,2703,2704],{"class":754},"    :description",[517,2706,2293],{"class":534},[517,2708,758],{"class":534},[517,2710,2711],{"class":549},"parsed.why",[517,2713,870],{"class":534},[517,2715,2716,2718,2720,2722,2724],{"class":519,"line":1986},[517,2717,2426],{"class":754},[517,2719,2293],{"class":534},[517,2721,758],{"class":534},[517,2723,1873],{"class":549},[517,2725,870],{"class":534},[517,2727,2728,2731,2733,2735,2738],{"class":519,"line":1991},[517,2729,2730],{"class":754},"    icon",[517,2732,2293],{"class":534},[517,2734,758],{"class":534},[517,2736,2737],{"class":549},"i-lucide-alert-circle",[517,2739,870],{"class":534},[517,2741,2742],{"class":519,"line":2519},[517,2743,2744],{"class":534},"  >\n",[517,2746,2747,2750,2752,2755,2757,2759,2762,2764,2766,2768,2771,2774],{"class":519,"line":2526},[517,2748,2749],{"class":534},"    \u003C",[517,2751,2675],{"class":631},[517,2753,2754],{"class":530}," v-if",[517,2756,2293],{"class":534},[517,2758,758],{"class":534},[517,2760,2761],{"class":542},"parsed",[517,2763,570],{"class":534},[517,2765,447],{"class":542},[517,2767,758],{"class":534},[517,2769,2770],{"class":534}," #",[517,2772,2773],{"class":754},"description",[517,2775,2569],{"class":534},[517,2777,2779,2782,2784,2787,2790,2792,2794],{"class":519,"line":2778},19,[517,2780,2781],{"class":534},"      \u003C",[517,2783,394],{"class":631},[517,2785,2786],{"class":534},">",[517,2788,2789],{"class":542},"{{ parsed.why }}",[517,2791,2660],{"class":534},[517,2793,394],{"class":631},[517,2795,2569],{"class":534},[517,2797,2799,2801,2803,2806,2808,2810,2813,2815,2817,2820,2822,2824],{"class":519,"line":2798},20,[517,2800,2781],{"class":534},[517,2802,394],{"class":631},[517,2804,2805],{"class":754}," class",[517,2807,2293],{"class":534},[517,2809,758],{"class":534},[517,2811,2812],{"class":549},"mt-2 font-medium",[517,2814,758],{"class":534},[517,2816,2786],{"class":534},[517,2818,2819],{"class":542},"{{ parsed.fix }}",[517,2821,2660],{"class":534},[517,2823,394],{"class":631},[517,2825,2569],{"class":534},[517,2827,2829,2832,2834],{"class":519,"line":2828},21,[517,2830,2831],{"class":534},"    \u003C\u002F",[517,2833,2675],{"class":631},[517,2835,2569],{"class":534},[517,2837,2839,2842,2845],{"class":519,"line":2838},22,[517,2840,2841],{"class":534},"  \u003C\u002F",[517,2843,2844],{"class":631},"UAlert",[517,2846,2569],{"class":534},[517,2848,2850,2852,2854],{"class":519,"line":2849},23,[517,2851,2660],{"class":534},[517,2853,2675],{"class":631},[517,2855,2569],{"class":534},[496,2857,181],{"id":2858},"best-practices",[1225,2860,2862],{"id":2861},"use-appropriate-status-codes","Use Appropriate Status Codes",[575,2864,2865,2933,3016,3068],{},[507,2866,2869],{"className":509,"code":2867,"filename":2868,"language":512,"meta":513,"style":513},"\u002F\u002F Client error - user can fix\nthrow createError({\n  message: 'Invalid email format',\n  status: 400,\n  fix: 'Please enter a valid email address',\n})\n","400 - Bad Request",[398,2870,2871,2876,2886,2901,2912,2927],{"__ignoreMap":513},[517,2872,2873],{"class":519,"line":520},[517,2874,2875],{"class":523},"\u002F\u002F Client error - user can fix\n",[517,2877,2878,2880,2882,2884],{"class":519,"line":527},[517,2879,531],{"class":530},[517,2881,592],{"class":538},[517,2883,543],{"class":542},[517,2885,625],{"class":534},[517,2887,2888,2890,2892,2894,2897,2899],{"class":519,"line":616},[517,2889,651],{"class":631},[517,2891,635],{"class":534},[517,2893,601],{"class":534},[517,2895,2896],{"class":549},"Invalid email format",[517,2898,546],{"class":534},[517,2900,645],{"class":534},[517,2902,2903,2905,2907,2910],{"class":519,"line":628},[517,2904,667],{"class":631},[517,2906,635],{"class":534},[517,2908,2909],{"class":672}," 400",[517,2911,645],{"class":534},[517,2913,2914,2916,2918,2920,2923,2925],{"class":519,"line":648},[517,2915,698],{"class":631},[517,2917,635],{"class":534},[517,2919,601],{"class":534},[517,2921,2922],{"class":549},"Please enter a valid email address",[517,2924,546],{"class":534},[517,2926,645],{"class":534},[517,2928,2929,2931],{"class":519,"line":664},[517,2930,732],{"class":534},[517,2932,555],{"class":542},[507,2934,2937],{"className":509,"code":2935,"filename":2936,"language":512,"meta":513,"style":513},"\u002F\u002F Authentication required\nthrow createError({\n  message: 'Please log in to continue',\n  status: 401,\n  fix: 'Sign in to your account',\n  link: '\u002Flogin',\n})\n","401 - Unauthorized",[398,2938,2939,2944,2954,2969,2980,2995,3010],{"__ignoreMap":513},[517,2940,2941],{"class":519,"line":520},[517,2942,2943],{"class":523},"\u002F\u002F Authentication required\n",[517,2945,2946,2948,2950,2952],{"class":519,"line":527},[517,2947,531],{"class":530},[517,2949,592],{"class":538},[517,2951,543],{"class":542},[517,2953,625],{"class":534},[517,2955,2956,2958,2960,2962,2965,2967],{"class":519,"line":616},[517,2957,651],{"class":631},[517,2959,635],{"class":534},[517,2961,601],{"class":534},[517,2963,2964],{"class":549},"Please log in to continue",[517,2966,546],{"class":534},[517,2968,645],{"class":534},[517,2970,2971,2973,2975,2978],{"class":519,"line":628},[517,2972,667],{"class":631},[517,2974,635],{"class":534},[517,2976,2977],{"class":672}," 401",[517,2979,645],{"class":534},[517,2981,2982,2984,2986,2988,2991,2993],{"class":519,"line":648},[517,2983,698],{"class":631},[517,2985,635],{"class":534},[517,2987,601],{"class":534},[517,2989,2990],{"class":549},"Sign in to your account",[517,2992,546],{"class":534},[517,2994,645],{"class":534},[517,2996,2997,2999,3001,3003,3006,3008],{"class":519,"line":664},[517,2998,715],{"class":631},[517,3000,635],{"class":534},[517,3002,601],{"class":534},[517,3004,3005],{"class":549},"\u002Flogin",[517,3007,546],{"class":534},[517,3009,645],{"class":534},[517,3011,3012,3014],{"class":519,"line":678},[517,3013,732],{"class":534},[517,3015,555],{"class":542},[507,3017,3020],{"className":509,"code":3018,"filename":3019,"language":512,"meta":513,"style":513},"\u002F\u002F Resource not found\nthrow createError({\n  message: 'Order not found',\n  status: 404,\n})\n","404 - Not Found",[398,3021,3022,3027,3037,3052,3062],{"__ignoreMap":513},[517,3023,3024],{"class":519,"line":520},[517,3025,3026],{"class":523},"\u002F\u002F Resource not found\n",[517,3028,3029,3031,3033,3035],{"class":519,"line":527},[517,3030,531],{"class":530},[517,3032,592],{"class":538},[517,3034,543],{"class":542},[517,3036,625],{"class":534},[517,3038,3039,3041,3043,3045,3048,3050],{"class":519,"line":616},[517,3040,651],{"class":631},[517,3042,635],{"class":534},[517,3044,601],{"class":534},[517,3046,3047],{"class":549},"Order not found",[517,3049,546],{"class":534},[517,3051,645],{"class":534},[517,3053,3054,3056,3058,3060],{"class":519,"line":628},[517,3055,667],{"class":631},[517,3057,635],{"class":534},[517,3059,1292],{"class":672},[517,3061,645],{"class":534},[517,3063,3064,3066],{"class":519,"line":648},[517,3065,732],{"class":534},[517,3067,555],{"class":542},[507,3069,3072],{"className":509,"code":3070,"filename":3071,"language":512,"meta":513,"style":513},"\u002F\u002F Server error - not user's fault\nthrow createError({\n  message: 'Something went wrong',\n  status: 500,\n  why: 'Database connection timeout',\n  \u002F\u002F No 'fix' - user can't fix server errors\n})\n","500 - Server Error",[398,3073,3074,3079,3089,3104,3114,3129,3134],{"__ignoreMap":513},[517,3075,3076],{"class":519,"line":520},[517,3077,3078],{"class":523},"\u002F\u002F Server error - not user's fault\n",[517,3080,3081,3083,3085,3087],{"class":519,"line":527},[517,3082,531],{"class":530},[517,3084,592],{"class":538},[517,3086,543],{"class":542},[517,3088,625],{"class":534},[517,3090,3091,3093,3095,3097,3100,3102],{"class":519,"line":616},[517,3092,651],{"class":631},[517,3094,635],{"class":534},[517,3096,601],{"class":534},[517,3098,3099],{"class":549},"Something went wrong",[517,3101,546],{"class":534},[517,3103,645],{"class":534},[517,3105,3106,3108,3110,3112],{"class":519,"line":628},[517,3107,667],{"class":631},[517,3109,635],{"class":534},[517,3111,1688],{"class":672},[517,3113,645],{"class":534},[517,3115,3116,3118,3120,3122,3125,3127],{"class":519,"line":648},[517,3117,681],{"class":631},[517,3119,635],{"class":534},[517,3121,601],{"class":534},[517,3123,3124],{"class":549},"Database connection timeout",[517,3126,546],{"class":534},[517,3128,645],{"class":534},[517,3130,3131],{"class":519,"line":664},[517,3132,3133],{"class":523},"  \u002F\u002F No 'fix' - user can't fix server errors\n",[517,3135,3136,3138],{"class":519,"line":678},[517,3137,732],{"class":534},[517,3139,555],{"class":542},[1225,3141,3143],{"id":3142},"provide-actionable-fixes","Provide Actionable Fixes",[575,3145,3146,3203],{},[507,3147,3150],{"className":509,"code":3148,"filename":3149,"language":512,"meta":513,"style":513},"\u002F\u002F Unhelpful fix\nthrow createError({\n  message: 'Upload failed',\n  fix: 'Try again',\n})\n","Bad",[398,3151,3152,3157,3167,3182,3197],{"__ignoreMap":513},[517,3153,3154],{"class":519,"line":520},[517,3155,3156],{"class":523},"\u002F\u002F Unhelpful fix\n",[517,3158,3159,3161,3163,3165],{"class":519,"line":527},[517,3160,531],{"class":530},[517,3162,592],{"class":538},[517,3164,543],{"class":542},[517,3166,625],{"class":534},[517,3168,3169,3171,3173,3175,3178,3180],{"class":519,"line":616},[517,3170,651],{"class":631},[517,3172,635],{"class":534},[517,3174,601],{"class":534},[517,3176,3177],{"class":549},"Upload failed",[517,3179,546],{"class":534},[517,3181,645],{"class":534},[517,3183,3184,3186,3188,3190,3193,3195],{"class":519,"line":628},[517,3185,698],{"class":631},[517,3187,635],{"class":534},[517,3189,601],{"class":534},[517,3191,3192],{"class":549},"Try again",[517,3194,546],{"class":534},[517,3196,645],{"class":534},[517,3198,3199,3201],{"class":519,"line":648},[517,3200,732],{"class":534},[517,3202,555],{"class":542},[507,3204,3207],{"className":509,"code":3205,"filename":3206,"language":512,"meta":513,"style":513},"\u002F\u002F Actionable fix\nthrow createError({\n  message: 'Upload failed',\n  status: 413,\n  why: 'File exceeds maximum size (10MB)',\n  fix: 'Reduce the file size or compress the image before uploading',\n  link: '\u002Fdocs\u002Fupload-limits',\n})\n","Good",[398,3208,3209,3214,3224,3238,3249,3264,3279,3294],{"__ignoreMap":513},[517,3210,3211],{"class":519,"line":520},[517,3212,3213],{"class":523},"\u002F\u002F Actionable fix\n",[517,3215,3216,3218,3220,3222],{"class":519,"line":527},[517,3217,531],{"class":530},[517,3219,592],{"class":538},[517,3221,543],{"class":542},[517,3223,625],{"class":534},[517,3225,3226,3228,3230,3232,3234,3236],{"class":519,"line":616},[517,3227,651],{"class":631},[517,3229,635],{"class":534},[517,3231,601],{"class":534},[517,3233,3177],{"class":549},[517,3235,546],{"class":534},[517,3237,645],{"class":534},[517,3239,3240,3242,3244,3247],{"class":519,"line":628},[517,3241,667],{"class":631},[517,3243,635],{"class":534},[517,3245,3246],{"class":672}," 413",[517,3248,645],{"class":534},[517,3250,3251,3253,3255,3257,3260,3262],{"class":519,"line":648},[517,3252,681],{"class":631},[517,3254,635],{"class":534},[517,3256,601],{"class":534},[517,3258,3259],{"class":549},"File exceeds maximum size (10MB)",[517,3261,546],{"class":534},[517,3263,645],{"class":534},[517,3265,3266,3268,3270,3272,3275,3277],{"class":519,"line":664},[517,3267,698],{"class":631},[517,3269,635],{"class":534},[517,3271,601],{"class":534},[517,3273,3274],{"class":549},"Reduce the file size or compress the image before uploading",[517,3276,546],{"class":534},[517,3278,645],{"class":534},[517,3280,3281,3283,3285,3287,3290,3292],{"class":519,"line":678},[517,3282,715],{"class":631},[517,3284,635],{"class":534},[517,3286,601],{"class":534},[517,3288,3289],{"class":549},"\u002Fdocs\u002Fupload-limits",[517,3291,546],{"class":534},[517,3293,645],{"class":534},[517,3295,3296,3298],{"class":519,"line":695},[517,3297,732],{"class":534},[517,3299,555],{"class":542},[496,3301,3303],{"id":3302},"error-categories","Error Categories",[394,3305,3306],{},"Consider creating factory functions for common error types:",[575,3308,3309,3618],{},[507,3310,3313],{"className":509,"code":3311,"filename":3312,"language":512,"meta":513,"style":513},"\u002F\u002F server\u002Futils\u002Ferrors.ts\nimport { createError } from 'evlog'\n\nexport const errors = {\n  notFound: (resource: string) =>\n    createError({\n      message: `${resource} not found`,\n      status: 404,\n    }),\n\n  unauthorized: () =>\n    createError({\n      message: 'Please log in to continue',\n      status: 401,\n      fix: 'Sign in to your account',\n    }),\n\n  validation: (field: string, issue: string) =>\n    createError({\n      message: `Invalid ${field}`,\n      status: 400,\n      why: issue,\n      fix: `Please provide a valid ${field}`,\n    }),\n}\n","Definition",[398,3314,3315,3320,3338,3342,3357,3380,3389,3411,3422,3431,3435,3446,3454,3468,3478,3493,3501,3505,3534,3542,3564,3574,3585,3604,3613],{"__ignoreMap":513},[517,3316,3317],{"class":519,"line":520},[517,3318,3319],{"class":523},"\u002F\u002F server\u002Futils\u002Ferrors.ts\n",[517,3321,3322,3324,3326,3328,3330,3332,3334,3336],{"class":519,"line":527},[517,3323,586],{"class":530},[517,3325,589],{"class":534},[517,3327,592],{"class":542},[517,3329,595],{"class":534},[517,3331,598],{"class":530},[517,3333,601],{"class":534},[517,3335,604],{"class":549},[517,3337,607],{"class":534},[517,3339,3340],{"class":519,"line":616},[517,3341,613],{"emptyLinePlaceholder":612},[517,3343,3344,3347,3350,3353,3355],{"class":519,"line":628},[517,3345,3346],{"class":530},"export",[517,3348,3349],{"class":754}," const",[517,3351,3352],{"class":542}," errors ",[517,3354,2293],{"class":534},[517,3356,797],{"class":534},[517,3358,3359,3362,3364,3366,3370,3372,3375,3377],{"class":519,"line":648},[517,3360,3361],{"class":538},"  notFound",[517,3363,635],{"class":534},[517,3365,1870],{"class":534},[517,3367,3369],{"class":3368},"sHdIc","resource",[517,3371,635],{"class":534},[517,3373,3374],{"class":805}," string",[517,3376,934],{"class":534},[517,3378,3379],{"class":754}," =>\n",[517,3381,3382,3385,3387],{"class":519,"line":664},[517,3383,3384],{"class":538},"    createError",[517,3386,543],{"class":542},[517,3388,625],{"class":534},[517,3390,3391,3394,3396,3399,3401,3403,3406,3409],{"class":519,"line":678},[517,3392,3393],{"class":631},"      message",[517,3395,635],{"class":534},[517,3397,3398],{"class":534}," `${",[517,3400,3369],{"class":542},[517,3402,732],{"class":534},[517,3404,3405],{"class":549}," not found",[517,3407,3408],{"class":534},"`",[517,3410,645],{"class":534},[517,3412,3413,3416,3418,3420],{"class":519,"line":695},[517,3414,3415],{"class":631},"      status",[517,3417,635],{"class":534},[517,3419,1292],{"class":672},[517,3421,645],{"class":534},[517,3423,3424,3427,3429],{"class":519,"line":712},[517,3425,3426],{"class":534},"    }",[517,3428,934],{"class":542},[517,3430,645],{"class":534},[517,3432,3433],{"class":519,"line":729},[517,3434,613],{"emptyLinePlaceholder":612},[517,3436,3437,3440,3442,3444],{"class":519,"line":1161},[517,3438,3439],{"class":538},"  unauthorized",[517,3441,635],{"class":534},[517,3443,2482],{"class":534},[517,3445,3379],{"class":754},[517,3447,3448,3450,3452],{"class":519,"line":1731},[517,3449,3384],{"class":538},[517,3451,543],{"class":542},[517,3453,625],{"class":534},[517,3455,3456,3458,3460,3462,3464,3466],{"class":519,"line":1932},[517,3457,3393],{"class":631},[517,3459,635],{"class":534},[517,3461,601],{"class":534},[517,3463,2964],{"class":549},[517,3465,546],{"class":534},[517,3467,645],{"class":534},[517,3469,3470,3472,3474,3476],{"class":519,"line":1940},[517,3471,3415],{"class":631},[517,3473,635],{"class":534},[517,3475,2977],{"class":672},[517,3477,645],{"class":534},[517,3479,3480,3483,3485,3487,3489,3491],{"class":519,"line":1986},[517,3481,3482],{"class":631},"      fix",[517,3484,635],{"class":534},[517,3486,601],{"class":534},[517,3488,2990],{"class":549},[517,3490,546],{"class":534},[517,3492,645],{"class":534},[517,3494,3495,3497,3499],{"class":519,"line":1991},[517,3496,3426],{"class":534},[517,3498,934],{"class":542},[517,3500,645],{"class":534},[517,3502,3503],{"class":519,"line":2519},[517,3504,613],{"emptyLinePlaceholder":612},[517,3506,3507,3510,3512,3514,3517,3519,3521,3523,3526,3528,3530,3532],{"class":519,"line":2526},[517,3508,3509],{"class":538},"  validation",[517,3511,635],{"class":534},[517,3513,1870],{"class":534},[517,3515,3516],{"class":3368},"field",[517,3518,635],{"class":534},[517,3520,3374],{"class":805},[517,3522,1150],{"class":534},[517,3524,3525],{"class":3368}," issue",[517,3527,635],{"class":534},[517,3529,3374],{"class":805},[517,3531,934],{"class":534},[517,3533,3379],{"class":754},[517,3535,3536,3538,3540],{"class":519,"line":2778},[517,3537,3384],{"class":538},[517,3539,543],{"class":542},[517,3541,625],{"class":534},[517,3543,3544,3546,3548,3551,3554,3557,3559,3562],{"class":519,"line":2798},[517,3545,3393],{"class":631},[517,3547,635],{"class":534},[517,3549,3550],{"class":534}," `",[517,3552,3553],{"class":549},"Invalid ",[517,3555,3556],{"class":534},"${",[517,3558,3516],{"class":542},[517,3560,3561],{"class":534},"}`",[517,3563,645],{"class":534},[517,3565,3566,3568,3570,3572],{"class":519,"line":2828},[517,3567,3415],{"class":631},[517,3569,635],{"class":534},[517,3571,2909],{"class":672},[517,3573,645],{"class":534},[517,3575,3576,3579,3581,3583],{"class":519,"line":2838},[517,3577,3578],{"class":631},"      why",[517,3580,635],{"class":534},[517,3582,3525],{"class":542},[517,3584,645],{"class":534},[517,3586,3587,3589,3591,3593,3596,3598,3600,3602],{"class":519,"line":2849},[517,3588,3482],{"class":631},[517,3590,635],{"class":534},[517,3592,3550],{"class":534},[517,3594,3595],{"class":549},"Please provide a valid ",[517,3597,3556],{"class":534},[517,3599,3516],{"class":542},[517,3601,3561],{"class":534},[517,3603,645],{"class":534},[517,3605,3607,3609,3611],{"class":519,"line":3606},24,[517,3608,3426],{"class":534},[517,3610,934],{"class":542},[517,3612,645],{"class":534},[517,3614,3616],{"class":519,"line":3615},25,[517,3617,880],{"class":534},[507,3619,3621],{"className":509,"code":3620,"filename":75,"language":512,"meta":513,"style":513},"\u002F\u002F server\u002Fapi\u002Forders\u002F[id].get.ts\nimport { errors } from '~\u002Fserver\u002Futils\u002Ferrors'\n\nexport default defineEventHandler(async (event) => {\n  const order = await getOrder(event.context.params.id)\n\n  if (!order) {\n    throw errors.notFound('Order')\n  }\n\n  return order\n})\n",[398,3622,3623,3628,3648,3652,3678,3714,3718,3735,3758,3762,3766,3774],{"__ignoreMap":513},[517,3624,3625],{"class":519,"line":520},[517,3626,3627],{"class":523},"\u002F\u002F server\u002Fapi\u002Forders\u002F[id].get.ts\n",[517,3629,3630,3632,3634,3637,3639,3641,3643,3646],{"class":519,"line":527},[517,3631,586],{"class":530},[517,3633,589],{"class":534},[517,3635,3636],{"class":542}," errors",[517,3638,595],{"class":534},[517,3640,598],{"class":530},[517,3642,601],{"class":534},[517,3644,3645],{"class":549},"~\u002Fserver\u002Futils\u002Ferrors",[517,3647,607],{"class":534},[517,3649,3650],{"class":519,"line":616},[517,3651,613],{"emptyLinePlaceholder":612},[517,3653,3654,3656,3659,3662,3664,3667,3669,3672,3674,3676],{"class":519,"line":628},[517,3655,3346],{"class":530},[517,3657,3658],{"class":530}," default",[517,3660,3661],{"class":538}," defineEventHandler",[517,3663,543],{"class":542},[517,3665,3666],{"class":754},"async",[517,3668,1870],{"class":534},[517,3670,3671],{"class":3368},"event",[517,3673,934],{"class":534},[517,3675,2485],{"class":754},[517,3677,797],{"class":534},[517,3679,3680,3682,3685,3687,3690,3693,3695,3697,3699,3702,3704,3707,3709,3712],{"class":519,"line":648},[517,3681,1843],{"class":754},[517,3683,3684],{"class":542}," order",[517,3686,1849],{"class":534},[517,3688,3689],{"class":530}," await",[517,3691,3692],{"class":538}," getOrder",[517,3694,543],{"class":631},[517,3696,3671],{"class":542},[517,3698,570],{"class":534},[517,3700,3701],{"class":542},"context",[517,3703,570],{"class":534},[517,3705,3706],{"class":542},"params",[517,3708,570],{"class":534},[517,3710,3711],{"class":542},"id",[517,3713,555],{"class":631},[517,3715,3716],{"class":519,"line":664},[517,3717,613],{"emptyLinePlaceholder":612},[517,3719,3720,3723,3725,3728,3731,3733],{"class":519,"line":678},[517,3721,3722],{"class":530},"  if",[517,3724,1870],{"class":631},[517,3726,3727],{"class":534},"!",[517,3729,3730],{"class":542},"order",[517,3732,1880],{"class":631},[517,3734,625],{"class":534},[517,3736,3737,3740,3742,3744,3747,3749,3751,3754,3756],{"class":519,"line":695},[517,3738,3739],{"class":530},"    throw",[517,3741,3636],{"class":542},[517,3743,570],{"class":534},[517,3745,3746],{"class":538},"notFound",[517,3748,543],{"class":631},[517,3750,546],{"class":534},[517,3752,3753],{"class":549},"Order",[517,3755,546],{"class":534},[517,3757,555],{"class":631},[517,3759,3760],{"class":519,"line":712},[517,3761,875],{"class":534},[517,3763,3764],{"class":519,"line":729},[517,3765,613],{"emptyLinePlaceholder":612},[517,3767,3768,3771],{"class":519,"line":1161},[517,3769,3770],{"class":530},"  return",[517,3772,3773],{"class":542}," order\n",[517,3775,3776,3778],{"class":519,"line":1731},[517,3777,732],{"class":534},[517,3779,555],{"class":542},[3781,3782,3784,3785,3788],"callout",{"color":3783,"icon":78},"neutral","See the ",[490,3786,3787],{"href":213},"Next.js guide"," for a working implementation.",[496,3790,3792],{"id":3791},"next-steps","Next Steps",[411,3794,3795,3800,3805,3810],{},[414,3796,3797,3799],{},[490,3798,51],{"href":52},": Accumulate context and emit comprehensive events",[414,3801,3802,3804],{},[490,3803,286],{"href":291},": Send errors and events to Axiom, Sentry, PostHog, and more",[414,3806,3807,3809],{},[490,3808,198],{"href":203},": Auto-managed request logging per framework",[414,3811,3812,3814],{},[490,3813,20],{"href":21},": See all evlog APIs in action",[3816,3817,3818],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .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 .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 .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 .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}",{"title":513,"searchDepth":527,"depth":527,"links":3820},[3821,3822,3823,3825,3830,3832,3835,3839,3840],{"id":498,"depth":527,"text":499},{"id":883,"depth":527,"text":884},{"id":1005,"depth":527,"text":3824},"Backend-only context (internal)",{"id":1222,"depth":527,"text":1223,"children":3826},[3827,3828,3829],{"id":1227,"depth":616,"text":1228},{"id":1346,"depth":616,"text":1347},{"id":1576,"depth":616,"text":1577},{"id":1736,"depth":527,"text":3831},"Branching on code",{"id":2028,"depth":527,"text":2029,"children":3833},[3834],{"id":2531,"depth":616,"text":2532},{"id":2858,"depth":527,"text":181,"children":3836},[3837,3838],{"id":2861,"depth":616,"text":2862},{"id":3142,"depth":616,"text":3143},{"id":3302,"depth":527,"text":3303},{"id":3791,"depth":527,"text":3792},"Create errors that explain why they occurred and how to fix them. Add actionable context with why, fix, and link fields for humans and AI agents.","md",[3844,3846],{"label":51,"icon":54,"to":52,"color":3783,"variant":3845},"subtle",{"label":181,"icon":124,"to":182,"color":3783,"variant":3845},{},{"icon":59},{"title":56,"description":3841},"7-upX8BMKMm-IbwWnrWu3kIROnxV5W1b9SkQ2VvCuEQ",[3852,3854],{"title":51,"path":52,"stem":53,"description":3853,"icon":54,"children":-1},"Accumulate context over any unit of work and emit a single comprehensive event. Works for HTTP requests, scripts, background jobs, queue workers, and workflows.",{"title":61,"path":62,"stem":63,"description":3855,"icon":64,"children":-1},"Capture browser events with structured logging. Same API as the server, with automatic console styling, user identity context, and optional server transport.",1777924947498]