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