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