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