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