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