[{"data":1,"prerenderedAt":3859},["ShallowReactive",2],{"navigation_docs":3,"-logging-structured-errors":388,"-logging-structured-errors-surround":3854},[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":3844,"extension":3845,"links":3846,"meta":3850,"navigation":3851,"path":57,"seo":3852,"stem":58,"__hash__":3853},"docs\u002F2.logging\u002F3.structured-errors.md",{"type":391,"value":392,"toc":3822},"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,1751,1997,2020,2029,2033,2038,2532,2536,2539,2859,2862,2866,3143,3147,3303,3307,3310,3783,3792,3796,3818],[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.",[1749,1750],"structured-error-branching",{},[507,1752,1755],{"className":509,"code":1753,"filename":1754,"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,1756,1757,1776,1780,1786,1832,1842,1862,1866,1886,1900,1911,1924,1933,1941,1987,1992],{"__ignoreMap":513},[517,1758,1759,1761,1763,1766,1768,1770,1772,1774],{"class":519,"line":520},[517,1760,586],{"class":530},[517,1762,589],{"class":534},[517,1764,1765],{"class":542}," parseError",[517,1767,595],{"class":534},[517,1769,598],{"class":530},[517,1771,601],{"class":534},[517,1773,604],{"class":549},[517,1775,607],{"class":534},[517,1777,1778],{"class":519,"line":527},[517,1779,613],{"emptyLinePlaceholder":612},[517,1781,1782,1784],{"class":519,"line":616},[517,1783,1612],{"class":530},[517,1785,797],{"class":534},[517,1787,1788,1790,1793,1795,1797,1800,1802,1804,1806,1809,1811,1813,1816,1818,1820,1823,1825,1828,1830],{"class":519,"line":628},[517,1789,1619],{"class":530},[517,1791,1792],{"class":538}," $fetch",[517,1794,543],{"class":631},[517,1796,546],{"class":534},[517,1798,1799],{"class":549},"\u002Fapi\u002Fcheckout",[517,1801,546],{"class":534},[517,1803,1150],{"class":534},[517,1805,589],{"class":534},[517,1807,1808],{"class":631}," method",[517,1810,635],{"class":534},[517,1812,601],{"class":534},[517,1814,1815],{"class":549},"POST",[517,1817,546],{"class":534},[517,1819,1150],{"class":534},[517,1821,1822],{"class":631}," body",[517,1824,635],{"class":534},[517,1826,1827],{"class":542}," cart",[517,1829,595],{"class":534},[517,1831,555],{"class":631},[517,1833,1834,1836,1838,1840],{"class":519,"line":648},[517,1835,732],{"class":534},[517,1837,1646],{"class":530},[517,1839,1649],{"class":542},[517,1841,625],{"class":534},[517,1843,1844,1847,1850,1853,1855,1857,1860],{"class":519,"line":664},[517,1845,1846],{"class":754},"  const",[517,1848,1849],{"class":542}," error",[517,1851,1852],{"class":534}," =",[517,1854,1765],{"class":538},[517,1856,543],{"class":631},[517,1858,1859],{"class":542},"err",[517,1861,555],{"class":631},[517,1863,1864],{"class":519,"line":678},[517,1865,613],{"emptyLinePlaceholder":612},[517,1867,1868,1871,1874,1877,1879,1881,1884],{"class":519,"line":695},[517,1869,1870],{"class":530},"  switch",[517,1872,1873],{"class":631}," (",[517,1875,1876],{"class":542},"error",[517,1878,570],{"class":534},[517,1880,398],{"class":542},[517,1882,1883],{"class":631},") ",[517,1885,625],{"class":534},[517,1887,1888,1891,1893,1895,1897],{"class":519,"line":712},[517,1889,1890],{"class":530},"    case",[517,1892,601],{"class":534},[517,1894,640],{"class":549},[517,1896,546],{"class":534},[517,1898,1899],{"class":534},":\n",[517,1901,1902,1905,1908],{"class":519,"line":729},[517,1903,1904],{"class":530},"      return",[517,1906,1907],{"class":538}," showRetryWithDifferentCard",[517,1909,1910],{"class":631},"()\n",[517,1912,1913,1915,1917,1920,1922],{"class":519,"line":1161},[517,1914,1890],{"class":530},[517,1916,601],{"class":534},[517,1918,1919],{"class":549},"CART_EXPIRED",[517,1921,546],{"class":534},[517,1923,1899],{"class":534},[517,1925,1926,1928,1931],{"class":519,"line":1731},[517,1927,1904],{"class":530},[517,1929,1930],{"class":538}," rebuildCart",[517,1932,1910],{"class":631},[517,1934,1936,1939],{"class":519,"line":1935},13,[517,1937,1938],{"class":530},"    default",[517,1940,1899],{"class":534},[517,1942,1944,1946,1949,1951,1954,1956,1959,1962,1964,1966,1968,1970,1972,1975,1977,1979,1981,1983,1985],{"class":519,"line":1943},14,[517,1945,1904],{"class":530},[517,1947,1948],{"class":542}," toast",[517,1950,570],{"class":534},[517,1952,1953],{"class":538},"add",[517,1955,543],{"class":631},[517,1957,1958],{"class":534},"{",[517,1960,1961],{"class":631}," title",[517,1963,635],{"class":534},[517,1965,1849],{"class":542},[517,1967,570],{"class":534},[517,1969,439],{"class":542},[517,1971,1150],{"class":534},[517,1973,1974],{"class":631}," color",[517,1976,635],{"class":534},[517,1978,601],{"class":534},[517,1980,1876],{"class":549},[517,1982,546],{"class":534},[517,1984,595],{"class":534},[517,1986,555],{"class":631},[517,1988,1990],{"class":519,"line":1989},15,[517,1991,875],{"class":534},[517,1993,1995],{"class":519,"line":1994},16,[517,1996,880],{"class":534},[394,1998,1999,2001,2002,2004,2005,430,2008,2011,2012,2015,2016,2019],{},[398,2000,1021],{}," also surfaces ",[398,2003,398],{}," from Node-style errors (e.g. ",[398,2006,2007],{},"'ENOENT'",[398,2009,2010],{},"'ECONNRESET'",") and any ",[398,2013,2014],{},"Error"," instance with a string ",[398,2017,2018],{},".code"," property, so existing system errors flow through the same branch.",[394,2021,2022,2024,2025,2028],{},[398,2023,398],{}," is also copied onto wide events under ",[398,2026,2027],{},"error.code",", so dashboards and drains can group, alert, and chart by code without parsing free-text messages.",[496,2030,2032],{"id":2031},"frontend-error-handling","Frontend Error Handling",[394,2034,423,2035,2037],{},[398,2036,1021],{}," to extract all fields from caught errors:",[575,2039,2040,2258],{},[507,2041,2043],{"className":509,"code":2042,"filename":1754,"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,2044,2045,2063,2067,2073,2113,2123,2139,2143,2167,2189,2211,2233,2254],{"__ignoreMap":513},[517,2046,2047,2049,2051,2053,2055,2057,2059,2061],{"class":519,"line":520},[517,2048,586],{"class":530},[517,2050,589],{"class":534},[517,2052,1765],{"class":542},[517,2054,595],{"class":534},[517,2056,598],{"class":530},[517,2058,601],{"class":534},[517,2060,604],{"class":549},[517,2062,607],{"class":534},[517,2064,2065],{"class":519,"line":527},[517,2066,613],{"emptyLinePlaceholder":612},[517,2068,2069,2071],{"class":519,"line":616},[517,2070,1612],{"class":530},[517,2072,797],{"class":534},[517,2074,2075,2077,2079,2081,2083,2085,2087,2089,2091,2093,2095,2097,2099,2101,2103,2105,2107,2109,2111],{"class":519,"line":628},[517,2076,1619],{"class":530},[517,2078,1792],{"class":538},[517,2080,543],{"class":631},[517,2082,546],{"class":534},[517,2084,1799],{"class":549},[517,2086,546],{"class":534},[517,2088,1150],{"class":534},[517,2090,589],{"class":534},[517,2092,1808],{"class":631},[517,2094,635],{"class":534},[517,2096,601],{"class":534},[517,2098,1815],{"class":549},[517,2100,546],{"class":534},[517,2102,1150],{"class":534},[517,2104,1822],{"class":631},[517,2106,635],{"class":534},[517,2108,1827],{"class":542},[517,2110,595],{"class":534},[517,2112,555],{"class":631},[517,2114,2115,2117,2119,2121],{"class":519,"line":648},[517,2116,732],{"class":534},[517,2118,1646],{"class":530},[517,2120,1649],{"class":542},[517,2122,625],{"class":534},[517,2124,2125,2127,2129,2131,2133,2135,2137],{"class":519,"line":664},[517,2126,1846],{"class":754},[517,2128,1849],{"class":542},[517,2130,1852],{"class":534},[517,2132,1765],{"class":538},[517,2134,543],{"class":631},[517,2136,1859],{"class":542},[517,2138,555],{"class":631},[517,2140,2141],{"class":519,"line":678},[517,2142,613],{"emptyLinePlaceholder":612},[517,2144,2145,2148,2150,2153,2155,2157,2159,2161,2164],{"class":519,"line":695},[517,2146,2147],{"class":542},"  console",[517,2149,570],{"class":534},[517,2151,2152],{"class":538},"log",[517,2154,543],{"class":631},[517,2156,1876],{"class":542},[517,2158,570],{"class":534},[517,2160,439],{"class":542},[517,2162,2163],{"class":631},")  ",[517,2165,2166],{"class":523},"\u002F\u002F \"Payment failed\"\n",[517,2168,2169,2171,2173,2175,2177,2179,2181,2183,2186],{"class":519,"line":712},[517,2170,2147],{"class":542},[517,2172,570],{"class":534},[517,2174,2152],{"class":538},[517,2176,543],{"class":631},[517,2178,1876],{"class":542},[517,2180,570],{"class":534},[517,2182,458],{"class":542},[517,2184,2185],{"class":631},")   ",[517,2187,2188],{"class":523},"\u002F\u002F 402\n",[517,2190,2191,2193,2195,2197,2199,2201,2203,2205,2208],{"class":519,"line":729},[517,2192,2147],{"class":542},[517,2194,570],{"class":534},[517,2196,2152],{"class":538},[517,2198,543],{"class":631},[517,2200,1876],{"class":542},[517,2202,570],{"class":534},[517,2204,398],{"class":542},[517,2206,2207],{"class":631},")     ",[517,2209,2210],{"class":523},"\u002F\u002F \"PAYMENT_DECLINED\"\n",[517,2212,2213,2215,2217,2219,2221,2223,2225,2227,2230],{"class":519,"line":1161},[517,2214,2147],{"class":542},[517,2216,570],{"class":534},[517,2218,2152],{"class":538},[517,2220,543],{"class":631},[517,2222,1876],{"class":542},[517,2224,570],{"class":534},[517,2226,443],{"class":542},[517,2228,2229],{"class":631},")      ",[517,2231,2232],{"class":523},"\u002F\u002F \"Card declined\"\n",[517,2234,2235,2237,2239,2241,2243,2245,2247,2249,2251],{"class":519,"line":1731},[517,2236,2147],{"class":542},[517,2238,570],{"class":534},[517,2240,2152],{"class":538},[517,2242,543],{"class":631},[517,2244,1876],{"class":542},[517,2246,570],{"class":534},[517,2248,447],{"class":542},[517,2250,2229],{"class":631},[517,2252,2253],{"class":523},"\u002F\u002F \"Try another card\"\n",[517,2255,2256],{"class":519,"line":1935},[517,2257,880],{"class":534},[507,2259,2262],{"className":509,"code":2260,"filename":2261,"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,2263,2264,2282,2286,2302,2306,2312,2352,2362,2378,2382,2395,2410,2425,2440,2454,2512,2520,2527],{"__ignoreMap":513},[517,2265,2266,2268,2270,2272,2274,2276,2278,2280],{"class":519,"line":520},[517,2267,586],{"class":530},[517,2269,589],{"class":534},[517,2271,1765],{"class":542},[517,2273,595],{"class":534},[517,2275,598],{"class":530},[517,2277,601],{"class":534},[517,2279,604],{"class":549},[517,2281,607],{"class":534},[517,2283,2284],{"class":519,"line":527},[517,2285,613],{"emptyLinePlaceholder":612},[517,2287,2288,2291,2294,2297,2300],{"class":519,"line":616},[517,2289,2290],{"class":754},"const",[517,2292,2293],{"class":542}," toast ",[517,2295,2296],{"class":534},"=",[517,2298,2299],{"class":538}," useToast",[517,2301,1910],{"class":542},[517,2303,2304],{"class":519,"line":628},[517,2305,613],{"emptyLinePlaceholder":612},[517,2307,2308,2310],{"class":519,"line":648},[517,2309,1612],{"class":530},[517,2311,797],{"class":534},[517,2313,2314,2316,2318,2320,2322,2324,2326,2328,2330,2332,2334,2336,2338,2340,2342,2344,2346,2348,2350],{"class":519,"line":664},[517,2315,1619],{"class":530},[517,2317,1792],{"class":538},[517,2319,543],{"class":631},[517,2321,546],{"class":534},[517,2323,1799],{"class":549},[517,2325,546],{"class":534},[517,2327,1150],{"class":534},[517,2329,589],{"class":534},[517,2331,1808],{"class":631},[517,2333,635],{"class":534},[517,2335,601],{"class":534},[517,2337,1815],{"class":549},[517,2339,546],{"class":534},[517,2341,1150],{"class":534},[517,2343,1822],{"class":631},[517,2345,635],{"class":534},[517,2347,1827],{"class":542},[517,2349,595],{"class":534},[517,2351,555],{"class":631},[517,2353,2354,2356,2358,2360],{"class":519,"line":678},[517,2355,732],{"class":534},[517,2357,1646],{"class":530},[517,2359,1649],{"class":542},[517,2361,625],{"class":534},[517,2363,2364,2366,2368,2370,2372,2374,2376],{"class":519,"line":695},[517,2365,1846],{"class":754},[517,2367,1849],{"class":542},[517,2369,1852],{"class":534},[517,2371,1765],{"class":538},[517,2373,543],{"class":631},[517,2375,1859],{"class":542},[517,2377,555],{"class":631},[517,2379,2380],{"class":519,"line":712},[517,2381,613],{"emptyLinePlaceholder":612},[517,2383,2384,2387,2389,2391,2393],{"class":519,"line":729},[517,2385,2386],{"class":542},"  toast",[517,2388,570],{"class":534},[517,2390,1953],{"class":538},[517,2392,543],{"class":631},[517,2394,625],{"class":534},[517,2396,2397,2400,2402,2404,2406,2408],{"class":519,"line":1161},[517,2398,2399],{"class":631},"    title",[517,2401,635],{"class":534},[517,2403,1849],{"class":542},[517,2405,570],{"class":534},[517,2407,439],{"class":542},[517,2409,645],{"class":534},[517,2411,2412,2415,2417,2419,2421,2423],{"class":519,"line":1731},[517,2413,2414],{"class":631},"    description",[517,2416,635],{"class":534},[517,2418,1849],{"class":542},[517,2420,570],{"class":534},[517,2422,443],{"class":542},[517,2424,645],{"class":534},[517,2426,2427,2430,2432,2434,2436,2438],{"class":519,"line":1935},[517,2428,2429],{"class":631},"    color",[517,2431,635],{"class":534},[517,2433,601],{"class":534},[517,2435,1876],{"class":549},[517,2437,546],{"class":534},[517,2439,645],{"class":534},[517,2441,2442,2445,2447,2449,2451],{"class":519,"line":1943},[517,2443,2444],{"class":631},"    actions",[517,2446,635],{"class":534},[517,2448,1849],{"class":542},[517,2450,570],{"class":534},[517,2452,2453],{"class":542},"link\n",[517,2455,2456,2459,2462,2464,2467,2469,2471,2474,2476,2478,2481,2483,2486,2489,2492,2494,2497,2499,2501,2503,2505,2507,2509],{"class":519,"line":1989},[517,2457,2458],{"class":534},"      ?",[517,2460,2461],{"class":631}," [",[517,2463,1958],{"class":534},[517,2465,2466],{"class":631}," label",[517,2468,635],{"class":534},[517,2470,601],{"class":534},[517,2472,2473],{"class":549},"Learn more",[517,2475,546],{"class":534},[517,2477,1150],{"class":534},[517,2479,2480],{"class":538}," onClick",[517,2482,635],{"class":534},[517,2484,2485],{"class":534}," ()",[517,2487,2488],{"class":754}," =>",[517,2490,2491],{"class":542}," window",[517,2493,570],{"class":534},[517,2495,2496],{"class":538},"open",[517,2498,543],{"class":631},[517,2500,1876],{"class":542},[517,2502,570],{"class":534},[517,2504,451],{"class":542},[517,2506,1883],{"class":631},[517,2508,732],{"class":534},[517,2510,2511],{"class":631},"]\n",[517,2513,2514,2517],{"class":519,"line":1994},[517,2515,2516],{"class":534},"      :",[517,2518,2519],{"class":534}," undefined,\n",[517,2521,2523,2525],{"class":519,"line":2522},17,[517,2524,1726],{"class":534},[517,2526,555],{"class":631},[517,2528,2530],{"class":519,"line":2529},18,[517,2531,880],{"class":534},[1225,2533,2535],{"id":2534},"error-display-component","Error Display Component",[394,2537,2538],{},"Create a reusable error display:",[507,2540,2545],{"className":2541,"code":2542,"filename":2543,"language":2544,"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,2546,2547,2573,2591,2595,2614,2624,2631,2635,2659,2668,2672,2681,2689,2703,2717,2729,2743,2748,2779,2799,2829,2839,2850],{"__ignoreMap":513},[517,2548,2549,2552,2555,2558,2561,2563,2565,2568,2570],{"class":519,"line":520},[517,2550,2551],{"class":534},"\u003C",[517,2553,2554],{"class":631},"script",[517,2556,2557],{"class":754}," setup",[517,2559,2560],{"class":754}," lang",[517,2562,2296],{"class":534},[517,2564,758],{"class":534},[517,2566,2567],{"class":549},"ts",[517,2569,758],{"class":534},[517,2571,2572],{"class":534},">\n",[517,2574,2575,2577,2579,2581,2583,2585,2587,2589],{"class":519,"line":527},[517,2576,586],{"class":530},[517,2578,589],{"class":534},[517,2580,1765],{"class":542},[517,2582,595],{"class":534},[517,2584,598],{"class":530},[517,2586,601],{"class":534},[517,2588,604],{"class":549},[517,2590,607],{"class":534},[517,2592,2593],{"class":519,"line":616},[517,2594,613],{"emptyLinePlaceholder":612},[517,2596,2597,2599,2601,2604,2606,2608,2611],{"class":519,"line":628},[517,2598,2290],{"class":754},[517,2600,589],{"class":534},[517,2602,2603],{"class":542}," error ",[517,2605,732],{"class":534},[517,2607,1852],{"class":534},[517,2609,2610],{"class":538}," defineProps",[517,2612,2613],{"class":534},"\u003C{\n",[517,2615,2616,2619,2621],{"class":519,"line":648},[517,2617,2618],{"class":631},"  error",[517,2620,635],{"class":534},[517,2622,2623],{"class":805}," unknown\n",[517,2625,2626,2629],{"class":519,"line":664},[517,2627,2628],{"class":534},"}>",[517,2630,1910],{"class":542},[517,2632,2633],{"class":519,"line":678},[517,2634,613],{"emptyLinePlaceholder":612},[517,2636,2637,2639,2642,2644,2647,2649,2652,2654,2656],{"class":519,"line":695},[517,2638,2290],{"class":754},[517,2640,2641],{"class":542}," parsed ",[517,2643,2296],{"class":534},[517,2645,2646],{"class":538}," computed",[517,2648,543],{"class":542},[517,2650,2651],{"class":534},"()",[517,2653,2488],{"class":754},[517,2655,1765],{"class":538},[517,2657,2658],{"class":542},"(error))\n",[517,2660,2661,2664,2666],{"class":519,"line":712},[517,2662,2663],{"class":534},"\u003C\u002F",[517,2665,2554],{"class":631},[517,2667,2572],{"class":534},[517,2669,2670],{"class":519,"line":729},[517,2671,613],{"emptyLinePlaceholder":612},[517,2673,2674,2676,2679],{"class":519,"line":1161},[517,2675,2551],{"class":534},[517,2677,2678],{"class":631},"template",[517,2680,2572],{"class":534},[517,2682,2683,2686],{"class":519,"line":1731},[517,2684,2685],{"class":534},"  \u003C",[517,2687,2688],{"class":631},"UAlert\n",[517,2690,2691,2694,2696,2698,2701],{"class":519,"line":1935},[517,2692,2693],{"class":754},"    :title",[517,2695,2296],{"class":534},[517,2697,758],{"class":534},[517,2699,2700],{"class":549},"parsed.message",[517,2702,870],{"class":534},[517,2704,2705,2708,2710,2712,2715],{"class":519,"line":1943},[517,2706,2707],{"class":754},"    :description",[517,2709,2296],{"class":534},[517,2711,758],{"class":534},[517,2713,2714],{"class":549},"parsed.why",[517,2716,870],{"class":534},[517,2718,2719,2721,2723,2725,2727],{"class":519,"line":1989},[517,2720,2429],{"class":754},[517,2722,2296],{"class":534},[517,2724,758],{"class":534},[517,2726,1876],{"class":549},[517,2728,870],{"class":534},[517,2730,2731,2734,2736,2738,2741],{"class":519,"line":1994},[517,2732,2733],{"class":754},"    icon",[517,2735,2296],{"class":534},[517,2737,758],{"class":534},[517,2739,2740],{"class":549},"i-lucide-alert-circle",[517,2742,870],{"class":534},[517,2744,2745],{"class":519,"line":2522},[517,2746,2747],{"class":534},"  >\n",[517,2749,2750,2753,2755,2758,2760,2762,2765,2767,2769,2771,2774,2777],{"class":519,"line":2529},[517,2751,2752],{"class":534},"    \u003C",[517,2754,2678],{"class":631},[517,2756,2757],{"class":530}," v-if",[517,2759,2296],{"class":534},[517,2761,758],{"class":534},[517,2763,2764],{"class":542},"parsed",[517,2766,570],{"class":534},[517,2768,447],{"class":542},[517,2770,758],{"class":534},[517,2772,2773],{"class":534}," #",[517,2775,2776],{"class":754},"description",[517,2778,2572],{"class":534},[517,2780,2782,2785,2787,2790,2793,2795,2797],{"class":519,"line":2781},19,[517,2783,2784],{"class":534},"      \u003C",[517,2786,394],{"class":631},[517,2788,2789],{"class":534},">",[517,2791,2792],{"class":542},"{{ parsed.why }}",[517,2794,2663],{"class":534},[517,2796,394],{"class":631},[517,2798,2572],{"class":534},[517,2800,2802,2804,2806,2809,2811,2813,2816,2818,2820,2823,2825,2827],{"class":519,"line":2801},20,[517,2803,2784],{"class":534},[517,2805,394],{"class":631},[517,2807,2808],{"class":754}," class",[517,2810,2296],{"class":534},[517,2812,758],{"class":534},[517,2814,2815],{"class":549},"mt-2 font-medium",[517,2817,758],{"class":534},[517,2819,2789],{"class":534},[517,2821,2822],{"class":542},"{{ parsed.fix }}",[517,2824,2663],{"class":534},[517,2826,394],{"class":631},[517,2828,2572],{"class":534},[517,2830,2832,2835,2837],{"class":519,"line":2831},21,[517,2833,2834],{"class":534},"    \u003C\u002F",[517,2836,2678],{"class":631},[517,2838,2572],{"class":534},[517,2840,2842,2845,2848],{"class":519,"line":2841},22,[517,2843,2844],{"class":534},"  \u003C\u002F",[517,2846,2847],{"class":631},"UAlert",[517,2849,2572],{"class":534},[517,2851,2853,2855,2857],{"class":519,"line":2852},23,[517,2854,2663],{"class":534},[517,2856,2678],{"class":631},[517,2858,2572],{"class":534},[496,2860,181],{"id":2861},"best-practices",[1225,2863,2865],{"id":2864},"use-appropriate-status-codes","Use Appropriate Status Codes",[575,2867,2868,2936,3019,3071],{},[507,2869,2872],{"className":509,"code":2870,"filename":2871,"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,2873,2874,2879,2889,2904,2915,2930],{"__ignoreMap":513},[517,2875,2876],{"class":519,"line":520},[517,2877,2878],{"class":523},"\u002F\u002F Client error - user can fix\n",[517,2880,2881,2883,2885,2887],{"class":519,"line":527},[517,2882,531],{"class":530},[517,2884,592],{"class":538},[517,2886,543],{"class":542},[517,2888,625],{"class":534},[517,2890,2891,2893,2895,2897,2900,2902],{"class":519,"line":616},[517,2892,651],{"class":631},[517,2894,635],{"class":534},[517,2896,601],{"class":534},[517,2898,2899],{"class":549},"Invalid email format",[517,2901,546],{"class":534},[517,2903,645],{"class":534},[517,2905,2906,2908,2910,2913],{"class":519,"line":628},[517,2907,667],{"class":631},[517,2909,635],{"class":534},[517,2911,2912],{"class":672}," 400",[517,2914,645],{"class":534},[517,2916,2917,2919,2921,2923,2926,2928],{"class":519,"line":648},[517,2918,698],{"class":631},[517,2920,635],{"class":534},[517,2922,601],{"class":534},[517,2924,2925],{"class":549},"Please enter a valid email address",[517,2927,546],{"class":534},[517,2929,645],{"class":534},[517,2931,2932,2934],{"class":519,"line":664},[517,2933,732],{"class":534},[517,2935,555],{"class":542},[507,2937,2940],{"className":509,"code":2938,"filename":2939,"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,2941,2942,2947,2957,2972,2983,2998,3013],{"__ignoreMap":513},[517,2943,2944],{"class":519,"line":520},[517,2945,2946],{"class":523},"\u002F\u002F Authentication required\n",[517,2948,2949,2951,2953,2955],{"class":519,"line":527},[517,2950,531],{"class":530},[517,2952,592],{"class":538},[517,2954,543],{"class":542},[517,2956,625],{"class":534},[517,2958,2959,2961,2963,2965,2968,2970],{"class":519,"line":616},[517,2960,651],{"class":631},[517,2962,635],{"class":534},[517,2964,601],{"class":534},[517,2966,2967],{"class":549},"Please log in to continue",[517,2969,546],{"class":534},[517,2971,645],{"class":534},[517,2973,2974,2976,2978,2981],{"class":519,"line":628},[517,2975,667],{"class":631},[517,2977,635],{"class":534},[517,2979,2980],{"class":672}," 401",[517,2982,645],{"class":534},[517,2984,2985,2987,2989,2991,2994,2996],{"class":519,"line":648},[517,2986,698],{"class":631},[517,2988,635],{"class":534},[517,2990,601],{"class":534},[517,2992,2993],{"class":549},"Sign in to your account",[517,2995,546],{"class":534},[517,2997,645],{"class":534},[517,2999,3000,3002,3004,3006,3009,3011],{"class":519,"line":664},[517,3001,715],{"class":631},[517,3003,635],{"class":534},[517,3005,601],{"class":534},[517,3007,3008],{"class":549},"\u002Flogin",[517,3010,546],{"class":534},[517,3012,645],{"class":534},[517,3014,3015,3017],{"class":519,"line":678},[517,3016,732],{"class":534},[517,3018,555],{"class":542},[507,3020,3023],{"className":509,"code":3021,"filename":3022,"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,3024,3025,3030,3040,3055,3065],{"__ignoreMap":513},[517,3026,3027],{"class":519,"line":520},[517,3028,3029],{"class":523},"\u002F\u002F Resource not found\n",[517,3031,3032,3034,3036,3038],{"class":519,"line":527},[517,3033,531],{"class":530},[517,3035,592],{"class":538},[517,3037,543],{"class":542},[517,3039,625],{"class":534},[517,3041,3042,3044,3046,3048,3051,3053],{"class":519,"line":616},[517,3043,651],{"class":631},[517,3045,635],{"class":534},[517,3047,601],{"class":534},[517,3049,3050],{"class":549},"Order not found",[517,3052,546],{"class":534},[517,3054,645],{"class":534},[517,3056,3057,3059,3061,3063],{"class":519,"line":628},[517,3058,667],{"class":631},[517,3060,635],{"class":534},[517,3062,1292],{"class":672},[517,3064,645],{"class":534},[517,3066,3067,3069],{"class":519,"line":648},[517,3068,732],{"class":534},[517,3070,555],{"class":542},[507,3072,3075],{"className":509,"code":3073,"filename":3074,"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,3076,3077,3082,3092,3107,3117,3132,3137],{"__ignoreMap":513},[517,3078,3079],{"class":519,"line":520},[517,3080,3081],{"class":523},"\u002F\u002F Server error - not user's fault\n",[517,3083,3084,3086,3088,3090],{"class":519,"line":527},[517,3085,531],{"class":530},[517,3087,592],{"class":538},[517,3089,543],{"class":542},[517,3091,625],{"class":534},[517,3093,3094,3096,3098,3100,3103,3105],{"class":519,"line":616},[517,3095,651],{"class":631},[517,3097,635],{"class":534},[517,3099,601],{"class":534},[517,3101,3102],{"class":549},"Something went wrong",[517,3104,546],{"class":534},[517,3106,645],{"class":534},[517,3108,3109,3111,3113,3115],{"class":519,"line":628},[517,3110,667],{"class":631},[517,3112,635],{"class":534},[517,3114,1688],{"class":672},[517,3116,645],{"class":534},[517,3118,3119,3121,3123,3125,3128,3130],{"class":519,"line":648},[517,3120,681],{"class":631},[517,3122,635],{"class":534},[517,3124,601],{"class":534},[517,3126,3127],{"class":549},"Database connection timeout",[517,3129,546],{"class":534},[517,3131,645],{"class":534},[517,3133,3134],{"class":519,"line":664},[517,3135,3136],{"class":523},"  \u002F\u002F No 'fix' - user can't fix server errors\n",[517,3138,3139,3141],{"class":519,"line":678},[517,3140,732],{"class":534},[517,3142,555],{"class":542},[1225,3144,3146],{"id":3145},"provide-actionable-fixes","Provide Actionable Fixes",[575,3148,3149,3206],{},[507,3150,3153],{"className":509,"code":3151,"filename":3152,"language":512,"meta":513,"style":513},"\u002F\u002F Unhelpful fix\nthrow createError({\n  message: 'Upload failed',\n  fix: 'Try again',\n})\n","Bad",[398,3154,3155,3160,3170,3185,3200],{"__ignoreMap":513},[517,3156,3157],{"class":519,"line":520},[517,3158,3159],{"class":523},"\u002F\u002F Unhelpful fix\n",[517,3161,3162,3164,3166,3168],{"class":519,"line":527},[517,3163,531],{"class":530},[517,3165,592],{"class":538},[517,3167,543],{"class":542},[517,3169,625],{"class":534},[517,3171,3172,3174,3176,3178,3181,3183],{"class":519,"line":616},[517,3173,651],{"class":631},[517,3175,635],{"class":534},[517,3177,601],{"class":534},[517,3179,3180],{"class":549},"Upload failed",[517,3182,546],{"class":534},[517,3184,645],{"class":534},[517,3186,3187,3189,3191,3193,3196,3198],{"class":519,"line":628},[517,3188,698],{"class":631},[517,3190,635],{"class":534},[517,3192,601],{"class":534},[517,3194,3195],{"class":549},"Try again",[517,3197,546],{"class":534},[517,3199,645],{"class":534},[517,3201,3202,3204],{"class":519,"line":648},[517,3203,732],{"class":534},[517,3205,555],{"class":542},[507,3207,3210],{"className":509,"code":3208,"filename":3209,"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,3211,3212,3217,3227,3241,3252,3267,3282,3297],{"__ignoreMap":513},[517,3213,3214],{"class":519,"line":520},[517,3215,3216],{"class":523},"\u002F\u002F Actionable fix\n",[517,3218,3219,3221,3223,3225],{"class":519,"line":527},[517,3220,531],{"class":530},[517,3222,592],{"class":538},[517,3224,543],{"class":542},[517,3226,625],{"class":534},[517,3228,3229,3231,3233,3235,3237,3239],{"class":519,"line":616},[517,3230,651],{"class":631},[517,3232,635],{"class":534},[517,3234,601],{"class":534},[517,3236,3180],{"class":549},[517,3238,546],{"class":534},[517,3240,645],{"class":534},[517,3242,3243,3245,3247,3250],{"class":519,"line":628},[517,3244,667],{"class":631},[517,3246,635],{"class":534},[517,3248,3249],{"class":672}," 413",[517,3251,645],{"class":534},[517,3253,3254,3256,3258,3260,3263,3265],{"class":519,"line":648},[517,3255,681],{"class":631},[517,3257,635],{"class":534},[517,3259,601],{"class":534},[517,3261,3262],{"class":549},"File exceeds maximum size (10MB)",[517,3264,546],{"class":534},[517,3266,645],{"class":534},[517,3268,3269,3271,3273,3275,3278,3280],{"class":519,"line":664},[517,3270,698],{"class":631},[517,3272,635],{"class":534},[517,3274,601],{"class":534},[517,3276,3277],{"class":549},"Reduce the file size or compress the image before uploading",[517,3279,546],{"class":534},[517,3281,645],{"class":534},[517,3283,3284,3286,3288,3290,3293,3295],{"class":519,"line":678},[517,3285,715],{"class":631},[517,3287,635],{"class":534},[517,3289,601],{"class":534},[517,3291,3292],{"class":549},"\u002Fdocs\u002Fupload-limits",[517,3294,546],{"class":534},[517,3296,645],{"class":534},[517,3298,3299,3301],{"class":519,"line":695},[517,3300,732],{"class":534},[517,3302,555],{"class":542},[496,3304,3306],{"id":3305},"error-categories","Error Categories",[394,3308,3309],{},"Consider creating factory functions for common error types:",[575,3311,3312,3621],{},[507,3313,3316],{"className":509,"code":3314,"filename":3315,"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,3317,3318,3323,3341,3345,3360,3383,3392,3414,3425,3434,3438,3449,3457,3471,3481,3496,3504,3508,3537,3545,3567,3577,3588,3607,3616],{"__ignoreMap":513},[517,3319,3320],{"class":519,"line":520},[517,3321,3322],{"class":523},"\u002F\u002F server\u002Futils\u002Ferrors.ts\n",[517,3324,3325,3327,3329,3331,3333,3335,3337,3339],{"class":519,"line":527},[517,3326,586],{"class":530},[517,3328,589],{"class":534},[517,3330,592],{"class":542},[517,3332,595],{"class":534},[517,3334,598],{"class":530},[517,3336,601],{"class":534},[517,3338,604],{"class":549},[517,3340,607],{"class":534},[517,3342,3343],{"class":519,"line":616},[517,3344,613],{"emptyLinePlaceholder":612},[517,3346,3347,3350,3353,3356,3358],{"class":519,"line":628},[517,3348,3349],{"class":530},"export",[517,3351,3352],{"class":754}," const",[517,3354,3355],{"class":542}," errors ",[517,3357,2296],{"class":534},[517,3359,797],{"class":534},[517,3361,3362,3365,3367,3369,3373,3375,3378,3380],{"class":519,"line":648},[517,3363,3364],{"class":538},"  notFound",[517,3366,635],{"class":534},[517,3368,1873],{"class":534},[517,3370,3372],{"class":3371},"sHdIc","resource",[517,3374,635],{"class":534},[517,3376,3377],{"class":805}," string",[517,3379,934],{"class":534},[517,3381,3382],{"class":754}," =>\n",[517,3384,3385,3388,3390],{"class":519,"line":664},[517,3386,3387],{"class":538},"    createError",[517,3389,543],{"class":542},[517,3391,625],{"class":534},[517,3393,3394,3397,3399,3402,3404,3406,3409,3412],{"class":519,"line":678},[517,3395,3396],{"class":631},"      message",[517,3398,635],{"class":534},[517,3400,3401],{"class":534}," `${",[517,3403,3372],{"class":542},[517,3405,732],{"class":534},[517,3407,3408],{"class":549}," not found",[517,3410,3411],{"class":534},"`",[517,3413,645],{"class":534},[517,3415,3416,3419,3421,3423],{"class":519,"line":695},[517,3417,3418],{"class":631},"      status",[517,3420,635],{"class":534},[517,3422,1292],{"class":672},[517,3424,645],{"class":534},[517,3426,3427,3430,3432],{"class":519,"line":712},[517,3428,3429],{"class":534},"    }",[517,3431,934],{"class":542},[517,3433,645],{"class":534},[517,3435,3436],{"class":519,"line":729},[517,3437,613],{"emptyLinePlaceholder":612},[517,3439,3440,3443,3445,3447],{"class":519,"line":1161},[517,3441,3442],{"class":538},"  unauthorized",[517,3444,635],{"class":534},[517,3446,2485],{"class":534},[517,3448,3382],{"class":754},[517,3450,3451,3453,3455],{"class":519,"line":1731},[517,3452,3387],{"class":538},[517,3454,543],{"class":542},[517,3456,625],{"class":534},[517,3458,3459,3461,3463,3465,3467,3469],{"class":519,"line":1935},[517,3460,3396],{"class":631},[517,3462,635],{"class":534},[517,3464,601],{"class":534},[517,3466,2967],{"class":549},[517,3468,546],{"class":534},[517,3470,645],{"class":534},[517,3472,3473,3475,3477,3479],{"class":519,"line":1943},[517,3474,3418],{"class":631},[517,3476,635],{"class":534},[517,3478,2980],{"class":672},[517,3480,645],{"class":534},[517,3482,3483,3486,3488,3490,3492,3494],{"class":519,"line":1989},[517,3484,3485],{"class":631},"      fix",[517,3487,635],{"class":534},[517,3489,601],{"class":534},[517,3491,2993],{"class":549},[517,3493,546],{"class":534},[517,3495,645],{"class":534},[517,3497,3498,3500,3502],{"class":519,"line":1994},[517,3499,3429],{"class":534},[517,3501,934],{"class":542},[517,3503,645],{"class":534},[517,3505,3506],{"class":519,"line":2522},[517,3507,613],{"emptyLinePlaceholder":612},[517,3509,3510,3513,3515,3517,3520,3522,3524,3526,3529,3531,3533,3535],{"class":519,"line":2529},[517,3511,3512],{"class":538},"  validation",[517,3514,635],{"class":534},[517,3516,1873],{"class":534},[517,3518,3519],{"class":3371},"field",[517,3521,635],{"class":534},[517,3523,3377],{"class":805},[517,3525,1150],{"class":534},[517,3527,3528],{"class":3371}," issue",[517,3530,635],{"class":534},[517,3532,3377],{"class":805},[517,3534,934],{"class":534},[517,3536,3382],{"class":754},[517,3538,3539,3541,3543],{"class":519,"line":2781},[517,3540,3387],{"class":538},[517,3542,543],{"class":542},[517,3544,625],{"class":534},[517,3546,3547,3549,3551,3554,3557,3560,3562,3565],{"class":519,"line":2801},[517,3548,3396],{"class":631},[517,3550,635],{"class":534},[517,3552,3553],{"class":534}," `",[517,3555,3556],{"class":549},"Invalid ",[517,3558,3559],{"class":534},"${",[517,3561,3519],{"class":542},[517,3563,3564],{"class":534},"}`",[517,3566,645],{"class":534},[517,3568,3569,3571,3573,3575],{"class":519,"line":2831},[517,3570,3418],{"class":631},[517,3572,635],{"class":534},[517,3574,2912],{"class":672},[517,3576,645],{"class":534},[517,3578,3579,3582,3584,3586],{"class":519,"line":2841},[517,3580,3581],{"class":631},"      why",[517,3583,635],{"class":534},[517,3585,3528],{"class":542},[517,3587,645],{"class":534},[517,3589,3590,3592,3594,3596,3599,3601,3603,3605],{"class":519,"line":2852},[517,3591,3485],{"class":631},[517,3593,635],{"class":534},[517,3595,3553],{"class":534},[517,3597,3598],{"class":549},"Please provide a valid ",[517,3600,3559],{"class":534},[517,3602,3519],{"class":542},[517,3604,3564],{"class":534},[517,3606,645],{"class":534},[517,3608,3610,3612,3614],{"class":519,"line":3609},24,[517,3611,3429],{"class":534},[517,3613,934],{"class":542},[517,3615,645],{"class":534},[517,3617,3619],{"class":519,"line":3618},25,[517,3620,880],{"class":534},[507,3622,3624],{"className":509,"code":3623,"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,3625,3626,3631,3651,3655,3681,3717,3721,3738,3761,3765,3769,3777],{"__ignoreMap":513},[517,3627,3628],{"class":519,"line":520},[517,3629,3630],{"class":523},"\u002F\u002F server\u002Fapi\u002Forders\u002F[id].get.ts\n",[517,3632,3633,3635,3637,3640,3642,3644,3646,3649],{"class":519,"line":527},[517,3634,586],{"class":530},[517,3636,589],{"class":534},[517,3638,3639],{"class":542}," errors",[517,3641,595],{"class":534},[517,3643,598],{"class":530},[517,3645,601],{"class":534},[517,3647,3648],{"class":549},"~\u002Fserver\u002Futils\u002Ferrors",[517,3650,607],{"class":534},[517,3652,3653],{"class":519,"line":616},[517,3654,613],{"emptyLinePlaceholder":612},[517,3656,3657,3659,3662,3665,3667,3670,3672,3675,3677,3679],{"class":519,"line":628},[517,3658,3349],{"class":530},[517,3660,3661],{"class":530}," default",[517,3663,3664],{"class":538}," defineEventHandler",[517,3666,543],{"class":542},[517,3668,3669],{"class":754},"async",[517,3671,1873],{"class":534},[517,3673,3674],{"class":3371},"event",[517,3676,934],{"class":534},[517,3678,2488],{"class":754},[517,3680,797],{"class":534},[517,3682,3683,3685,3688,3690,3693,3696,3698,3700,3702,3705,3707,3710,3712,3715],{"class":519,"line":648},[517,3684,1846],{"class":754},[517,3686,3687],{"class":542}," order",[517,3689,1852],{"class":534},[517,3691,3692],{"class":530}," await",[517,3694,3695],{"class":538}," getOrder",[517,3697,543],{"class":631},[517,3699,3674],{"class":542},[517,3701,570],{"class":534},[517,3703,3704],{"class":542},"context",[517,3706,570],{"class":534},[517,3708,3709],{"class":542},"params",[517,3711,570],{"class":534},[517,3713,3714],{"class":542},"id",[517,3716,555],{"class":631},[517,3718,3719],{"class":519,"line":664},[517,3720,613],{"emptyLinePlaceholder":612},[517,3722,3723,3726,3728,3731,3734,3736],{"class":519,"line":678},[517,3724,3725],{"class":530},"  if",[517,3727,1873],{"class":631},[517,3729,3730],{"class":534},"!",[517,3732,3733],{"class":542},"order",[517,3735,1883],{"class":631},[517,3737,625],{"class":534},[517,3739,3740,3743,3745,3747,3750,3752,3754,3757,3759],{"class":519,"line":695},[517,3741,3742],{"class":530},"    throw",[517,3744,3639],{"class":542},[517,3746,570],{"class":534},[517,3748,3749],{"class":538},"notFound",[517,3751,543],{"class":631},[517,3753,546],{"class":534},[517,3755,3756],{"class":549},"Order",[517,3758,546],{"class":534},[517,3760,555],{"class":631},[517,3762,3763],{"class":519,"line":712},[517,3764,875],{"class":534},[517,3766,3767],{"class":519,"line":729},[517,3768,613],{"emptyLinePlaceholder":612},[517,3770,3771,3774],{"class":519,"line":1161},[517,3772,3773],{"class":530},"  return",[517,3775,3776],{"class":542}," order\n",[517,3778,3779,3781],{"class":519,"line":1731},[517,3780,732],{"class":534},[517,3782,555],{"class":542},[3784,3785,3787,3788,3791],"callout",{"color":3786,"icon":78},"neutral","See the ",[490,3789,3790],{"href":213},"Next.js guide"," for a working implementation.",[496,3793,3795],{"id":3794},"next-steps","Next Steps",[411,3797,3798,3803,3808,3813],{},[414,3799,3800,3802],{},[490,3801,51],{"href":52},": Accumulate context and emit comprehensive events",[414,3804,3805,3807],{},[490,3806,286],{"href":291},": Send errors and events to Axiom, Sentry, PostHog, and more",[414,3809,3810,3812],{},[490,3811,198],{"href":203},": Auto-managed request logging per framework",[414,3814,3815,3817],{},[490,3816,20],{"href":21},": See all evlog APIs in action",[3819,3820,3821],"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":3823},[3824,3825,3826,3828,3833,3835,3838,3842,3843],{"id":498,"depth":527,"text":499},{"id":883,"depth":527,"text":884},{"id":1005,"depth":527,"text":3827},"Backend-only context (internal)",{"id":1222,"depth":527,"text":1223,"children":3829},[3830,3831,3832],{"id":1227,"depth":616,"text":1228},{"id":1346,"depth":616,"text":1347},{"id":1576,"depth":616,"text":1577},{"id":1736,"depth":527,"text":3834},"Branching on code",{"id":2031,"depth":527,"text":2032,"children":3836},[3837],{"id":2534,"depth":616,"text":2535},{"id":2861,"depth":527,"text":181,"children":3839},[3840,3841],{"id":2864,"depth":616,"text":2865},{"id":3145,"depth":616,"text":3146},{"id":3305,"depth":527,"text":3306},{"id":3794,"depth":527,"text":3795},"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",[3847,3849],{"label":51,"icon":54,"to":52,"color":3786,"variant":3848},"subtle",{"label":181,"icon":124,"to":182,"color":3786,"variant":3848},{},{"icon":59},{"title":56,"description":3844},"JbxzaRht2XzdKW6D7EjP9XZ8QW533vMmAn9GsPQVqiE",[3855,3857],{"title":51,"path":52,"stem":53,"description":3856,"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":3858,"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.",1777982708319]